@vielzeug/spell 26.11.9 → 26.11.11

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,2 +1,2 @@
1
- import{fail as e,resolveMessage as t}from"../errors.js";import"../_dev.js";import{ErrorCode as n}from"../types.js";import{Schema as r}from"../core.js";var i=class i extends r{get _kind(){return`bigint`}constructor(){super((t,r)=>typeof t==`bigint`?null:e(n.invalid_type,r.messages.bigint.type()))}min(r,i){return this._addConstraint((a,o)=>{let s=a;return s>=r?null:e(n.too_small,t(i??o.messages.bigint.min,{min:r,value:s}),{min:r})})}max(r,i){return this._addConstraint((a,o)=>{let s=a;return s<=r?null:e(n.too_big,t(i??o.messages.bigint.max,{max:r,value:s}),{max:r})})}positive(r){return this._addConstraint((i,a)=>{let o=i;return o>0n?null:e(n.too_small,t(r??a.messages.bigint.positive,{value:o}),{exclusive:!0,min:0n})})}negative(r){return this._addConstraint((i,a)=>{let o=i;return o<0n?null:e(n.too_big,t(r??a.messages.bigint.negative,{value:o}),{exclusive:!0,max:0n})})}nonNegative(r){return this._addConstraint((i,a)=>{let o=i;return o>=0n?null:e(n.too_small,t(r??a.messages.bigint.nonNegative,{value:o}),{min:0n})})}nonPositive(r){return this._addConstraint((i,a)=>{let o=i;return o<=0n?null:e(n.too_big,t(r??a.messages.bigint.nonPositive,{value:o}),{max:0n})})}multipleOf(r,i){return this._addConstraint((a,o)=>{let s=a;return s%r===0n?null:e(n.invalid_multiple_of,t(i??o.messages.bigint.multipleOf,{step:r,value:s}),{step:r})})}_toDescriptorImpl(){return this.state.validators.length,{...this._describeBase(),kind:`bigint`}}static coerce(){return new i().preprocess(e=>{if(typeof e==`bigint`)return e;if(typeof e==`number`){if(!Number.isFinite(e)||!Number.isInteger(e))return e;try{return BigInt(e)}catch{return e}}if(typeof e==`string`){let t=e.trim();if(t.length===0||t.length>1e3)return e;try{return BigInt(t)}catch{return e}}return e})}};export{i as BigIntSchema};
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`bigint`}_parse(e,t){return typeof e==`bigint`?i(e):n(e,r(s.invalid_type,t.messages.bigint.type()))}min(t,n){return this._refine(e=>e>=t,(e,i)=>r(s.too_small,a(n??i.bigint.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.bigint.max,{max:e,value:t}),{max:e}),n=>({maximum:t(n.maximum,e)}))}positive(t){return this._refine(e=>e>0n,(e,n)=>r(s.too_small,a(t??n.bigint.positive,{value:e}),{exclusive:!0,min:0n}),t=>({exclusiveMinimum:e(t.exclusiveMinimum,0n)}))}negative(e){return this._refine(e=>e<0n,(t,n)=>r(s.too_big,a(e??n.bigint.negative,{value:t}),{exclusive:!0,max:0n}),e=>({exclusiveMaximum:t(e.exclusiveMaximum,0n)}))}nonNegative(t){return this._refine(e=>e>=0n,(e,n)=>r(s.too_small,a(t??n.bigint.nonNegative,{value:e}),{min:0n}),t=>({minimum:e(t.minimum,0n)}))}nonPositive(e){return this._refine(e=>e<=0n,(t,n)=>r(s.too_big,a(e??n.bigint.nonPositive,{value:t}),{max:0n}),e=>({maximum:t(e.maximum,0n)}))}multipleOf(e,t){return this._refine(t=>e!==0n&&t%e===0n,(n,i)=>r(s.invalid_multiple_of,a(t??i.bigint.multipleOf,{step:e,value:n}),{step:e}),()=>({multipleOf:e}))}_describe(){return{...this._describeBase(),...this.state.meta,kind:`bigint`}}};export{c as BigIntSchema};
2
2
  //# sourceMappingURL=bigint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bigint.js","names":["BigIntSchema","Schema","value","fail","ErrorCode","ctx","typed","minimum","resolveMessage","message","maximum","step","trimmed"],"sources":["../../src/schemas/bigint.ts"],"sourcesContent":["import { warn } from '../_dev';\nimport type { MessageFn, SchemaDescriptor } from '../core';\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class BigIntSchema<Input = bigint> extends Schema<bigint, Input> {\n protected override get _kind(): string {\n return 'bigint';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'bigint' ? null : fail(ErrorCode.invalid_type, ctx!.messages.bigint.type()),\n );\n }\n\n min(minimum: bigint, message?: MessageFn<{ min: bigint; value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.bigint.min, { min: minimum, value: typed }),\n { min: minimum },\n );\n });\n }\n\n max(maximum: bigint, message?: MessageFn<{ max: bigint; value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.bigint.max, { max: maximum, value: typed }),\n { max: maximum },\n );\n });\n }\n\n positive(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed > 0n) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.bigint.positive, { value: typed }), {\n exclusive: true,\n min: 0n,\n });\n });\n }\n\n negative(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed < 0n) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.bigint.negative, { value: typed }), {\n exclusive: true,\n max: 0n,\n });\n });\n }\n\n nonNegative(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed >= 0n) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.bigint.nonNegative, { value: typed }), {\n min: 0n,\n });\n });\n }\n\n nonPositive(message?: MessageFn<{ value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed <= 0n) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.bigint.nonPositive, { value: typed }), {\n max: 0n,\n });\n });\n }\n\n multipleOf(step: bigint, message?: MessageFn<{ step: bigint; value: bigint }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as bigint;\n\n if (typed % step === 0n) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.bigint.multipleOf, { step, value: typed }),\n { step },\n );\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n if (this.state.validators.length > 0) {\n warn(\n 'definition(): this bigint schema has constraints (e.g. min(), max(), positive()). ' +\n 'BigInt constraints are not serializable and will not appear in the definition.',\n );\n }\n\n return { ...this._describeBase(), kind: 'bigint' };\n }\n\n static coerce(): BigIntSchema<unknown> {\n return new BigIntSchema().preprocess((value: unknown) => {\n if (typeof value === 'bigint') return value;\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || !Number.isInteger(value)) return value;\n\n try {\n return BigInt(value);\n } catch {\n return value;\n }\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Guard against DoS: BigInt() conversion is O(n²) in digit count.\n if (trimmed.length === 0 || trimmed.length > 1000) return value;\n\n try {\n return BigInt(trimmed);\n } catch {\n return value;\n }\n }\n\n return value;\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"bigint.js","names":["BigIntSchema","Schema","value","ok","invalid","issue","ErrorCode","ctx","minimum","resolveMessage","message","m","atLeast","current","maximum","atMost","step"],"sources":["../../src/schemas/bigint.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 BigIntMeta = {\n exclusiveMaximum: bigint;\n exclusiveMinimum: bigint;\n maximum: bigint;\n minimum: bigint;\n multipleOf: bigint;\n};\n\ntype ValueMessage = MessageFn<{ value: bigint }>;\n\nexport class BigIntSchema<Input = bigint> extends Schema<bigint, Input> {\n override get kind(): SchemaKind {\n return 'bigint';\n }\n\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n return typeof value === 'bigint'\n ? ok(value)\n : invalid(value, issue(ErrorCode.invalid_type, ctx.messages.bigint.type()));\n }\n\n min(minimum: bigint, message?: MessageFn<{ min: bigint; value: bigint }>): this {\n return this._refine<BigIntMeta>(\n (value) => value >= minimum,\n (value, m) =>\n issue(ErrorCode.too_small, resolveMessage(message ?? m.bigint.min, { min: minimum, value }), { min: minimum }),\n (current) => ({ minimum: atLeast(current.minimum, minimum) }),\n );\n }\n\n max(maximum: bigint, message?: MessageFn<{ max: bigint; value: bigint }>): this {\n return this._refine<BigIntMeta>(\n (value) => value <= maximum,\n (value, m) =>\n issue(ErrorCode.too_big, resolveMessage(message ?? m.bigint.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<BigIntMeta>(\n (value) => value > 0n,\n (value, m) =>\n issue(ErrorCode.too_small, resolveMessage(message ?? m.bigint.positive, { value }), {\n exclusive: true,\n min: 0n,\n }),\n (current) => ({ exclusiveMinimum: atLeast(current.exclusiveMinimum, 0n) }),\n );\n }\n\n negative(message?: ValueMessage): this {\n return this._refine<BigIntMeta>(\n (value) => value < 0n,\n (value, m) =>\n issue(ErrorCode.too_big, resolveMessage(message ?? m.bigint.negative, { value }), { exclusive: true, max: 0n }),\n (current) => ({ exclusiveMaximum: atMost(current.exclusiveMaximum, 0n) }),\n );\n }\n\n nonNegative(message?: ValueMessage): this {\n return this._refine<BigIntMeta>(\n (value) => value >= 0n,\n (value, m) => issue(ErrorCode.too_small, resolveMessage(message ?? m.bigint.nonNegative, { value }), { min: 0n }),\n (current) => ({ minimum: atLeast(current.minimum, 0n) }),\n );\n }\n\n nonPositive(message?: ValueMessage): this {\n return this._refine<BigIntMeta>(\n (value) => value <= 0n,\n (value, m) => issue(ErrorCode.too_big, resolveMessage(message ?? m.bigint.nonPositive, { value }), { max: 0n }),\n (current) => ({ maximum: atMost(current.maximum, 0n) }),\n );\n }\n\n multipleOf(step: bigint, message?: MessageFn<{ step: bigint; value: bigint }>): this {\n return this._refine<BigIntMeta>(\n // A zero step can never divide: fail as an issue like NumberSchema does,\n // instead of letting `value % step` throw RangeError from the check.\n (value) => step !== 0n && value % step === 0n,\n (value, m) =>\n issue(ErrorCode.invalid_multiple_of, resolveMessage(message ?? m.bigint.multipleOf, { step, value }), { step }),\n () => ({ multipleOf: step }),\n );\n }\n\n protected override _describe(): SchemaDescriptor {\n return { ...this._describeBase(), ...(this.state.meta as Partial<BigIntMeta>), kind: 'bigint' };\n }\n}\n"],"mappings":"A,qLAwBA,IAAaA,EAAb,cAAkDC,CAAsB,CACtE,IAAa,MAAmB,CAC9B,MAAO,QACT,CAEA,OAA0B,EAAgB,EAA2C,CACnF,OAAO,OAAOC,GAAU,SACpBC,EAAGD,CAAK,EACRE,EAAQF,EAAOG,EAAMC,EAAU,aAAcC,EAAI,SAAS,OAAO,KAAK,CAAC,CAAC,CAC9E,CAEA,IAAI,EAAiB,EAA2D,CAC9E,OAAO,KAAK,QACT,GAAUL,GAASM,GACnB,EAAO,IACNH,EAAMC,EAAU,UAAWG,EAAeC,GAAWC,EAAE,OAAO,IAAK,CAAE,IAAKH,EAAS,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAQ,CAAC,EAC9G,IAAa,CAAE,QAASI,EAAQC,EAAQ,QAASL,CAAO,CAAE,EAC7D,CACF,CAEA,IAAI,EAAiB,EAA2D,CAC9E,OAAO,KAAK,QACT,GAAUN,GAASY,GACnB,EAAO,IACNT,EAAMC,EAAU,QAASG,EAAeC,GAAWC,EAAE,OAAO,IAAK,CAAE,IAAKG,EAAS,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAQ,CAAC,EAC5G,IAAa,CAAE,QAASC,EAAOF,EAAQ,QAASC,CAAO,CAAE,EAC5D,CACF,CAEA,SAAS,EAA8B,CACrC,OAAO,KAAK,QACT,GAAUZ,EAAQ,IAClB,EAAO,IACNG,EAAMC,EAAU,UAAWG,EAAeC,GAAWC,EAAE,OAAO,SAAU,CAAE,OAAM,CAAC,EAAG,CAClF,UAAW,GACX,IAAK,EACP,CAAC,EACF,IAAa,CAAE,iBAAkBC,EAAQC,EAAQ,iBAAkB,EAAE,CAAE,EAC1E,CACF,CAEA,SAAS,EAA8B,CACrC,OAAO,KAAK,QACT,GAAUX,EAAQ,IAClB,EAAO,IACNG,EAAMC,EAAU,QAASG,EAAeC,GAAWC,EAAE,OAAO,SAAU,CAAE,OAAM,CAAC,EAAG,CAAE,UAAW,GAAM,IAAK,EAAG,CAAC,EAC/G,IAAa,CAAE,iBAAkBI,EAAOF,EAAQ,iBAAkB,EAAE,CAAE,EACzE,CACF,CAEA,YAAY,EAA8B,CACxC,OAAO,KAAK,QACT,GAAUX,GAAS,IACnB,EAAO,IAAMG,EAAMC,EAAU,UAAWG,EAAeC,GAAWC,EAAE,OAAO,YAAa,CAAE,OAAM,CAAC,EAAG,CAAE,IAAK,EAAG,CAAC,EAC/G,IAAa,CAAE,QAASC,EAAQC,EAAQ,QAAS,EAAE,CAAE,EACxD,CACF,CAEA,YAAY,EAA8B,CACxC,OAAO,KAAK,QACT,GAAUX,GAAS,IACnB,EAAO,IAAMG,EAAMC,EAAU,QAASG,EAAeC,GAAWC,EAAE,OAAO,YAAa,CAAE,OAAM,CAAC,EAAG,CAAE,IAAK,EAAG,CAAC,EAC7G,IAAa,CAAE,QAASI,EAAOF,EAAQ,QAAS,EAAE,CAAE,EACvD,CACF,CAEA,WAAW,EAAc,EAA4D,CACnF,OAAO,KAAK,QAGT,GAAUG,IAAS,IAAMd,EAAQc,IAAS,IAC1C,EAAO,IACNX,EAAMC,EAAU,oBAAqBG,EAAeC,GAAWC,EAAE,OAAO,WAAY,CAAE,OAAM,OAAM,CAAC,EAAG,CAAE,MAAK,CAAC,OACzG,CAAE,WAAYK,CAAK,EAC5B,CACF,CAEA,WAAiD,CAC/C,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,GAAI,KAAK,MAAM,KAA8B,KAAM,QAAS,CAChG,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`date`}constructor(){super((n,r)=>n instanceof Date&&!Number.isNaN(n.getTime())?null:e.fail(t.ErrorCode.invalid_date,r.messages.date.type()))}min(n,r){return this._addConstraint((i,a)=>{let o=i;return o>=n?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(r??a.messages.date.min,{min:n,value:o}),{min:n})})}max(n,r){return this._addConstraint((i,a)=>{let o=i;return o<=n?null:e.fail(t.ErrorCode.too_big,e.resolveMessage(r??a.messages.date.max,{max:n,value:o}),{max:n})})}_toDescriptorImpl(){return{...this._describeBase(),kind:`date`}}static coerce(){return new r().preprocess(e=>e instanceof Date?e:typeof e==`string`||typeof e==`number`?new Date(e):e)}};exports.DateSchema=r;
1
+ const e=require("../_parse.cjs"),t=require("../schema.cjs"),n=require("../types.cjs");var r=class extends t.Schema{get kind(){return`date`}_parse(t,r){return t instanceof Date&&!Number.isNaN(t.getTime())?e.ok(t):e.invalid(t,e.issue(n.ErrorCode.invalid_date,r.messages.date.type()))}min(t,r){return this._refine(e=>e>=t,(i,a)=>e.issue(n.ErrorCode.too_small,e.resolveMessage(r??a.date.min,{min:t,value:i}),{min:t}),e=>({minimum:e.minimum===void 0||t>new Date(e.minimum)?t.toISOString():e.minimum}))}max(t,r){return this._refine(e=>e<=t,(i,a)=>e.issue(n.ErrorCode.too_big,e.resolveMessage(r??a.date.max,{max:t,value:i}),{max:t}),e=>({maximum:e.maximum===void 0||t<new Date(e.maximum)?t.toISOString():e.maximum}))}_describe(){return{...this._describeBase(),...this.state.meta,kind:`date`}}};exports.DateSchema=r;
2
2
  //# sourceMappingURL=date.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.cjs","names":["Schema","fail","ErrorCode","resolveMessage","require_errors","require_types","require_core","DateSchema","value","ctx","typed","date","message","v"],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class DateSchema<Input = Date> extends Schema<Date, Input> {\n protected override get _kind(): string {\n return 'date';\n }\n\n constructor() {\n super((value, ctx) =>\n value instanceof Date && !Number.isNaN(value.getTime())\n ? null\n : fail(ErrorCode.invalid_date, ctx!.messages.date.type()),\n );\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed >= date\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.date.min, { min: date, value: typed }), {\n min: date,\n });\n });\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed <= date\n ? null\n : fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.date.max, { max: date, value: typed }), {\n max: date,\n });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n static coerce(): DateSchema<unknown> {\n return new DateSchema().preprocess((v: unknown) => {\n if (v instanceof Date) return v;\n\n if (typeof v === 'string' || typeof v === 'number') return new Date(v);\n\n return v;\n });\n }\n}\n"],"mappings":"A,oFAIA,IAAaO,EAAb,MAAaA,UAAiCP,EAAAA,MAAoB,CAChE,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,aAAc,CACZ,OAAO,EAAO,IACZQ,aAAiB,MAAQ,CAAC,OAAO,MAAMA,EAAM,QAAQ,CAAC,EAClD,KACAP,EAAAA,KAAKC,EAAAA,UAAU,aAAcO,EAAK,SAAS,KAAK,KAAK,CAAC,CAC5D,CACF,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMC,EAAQF,EAEd,OAAOE,GAASC,EACZ,KACAV,EAAAA,KAAKC,EAAAA,UAAU,UAAWC,EAAAA,eAAeS,GAAWH,EAAK,SAAS,KAAK,IAAK,CAAE,IAAKE,EAAM,MAAOD,CAAM,CAAC,EAAG,CACxG,IAAKC,CACP,CAAC,CACP,CAAC,CACH,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMD,EAAQF,EAEd,OAAOE,GAASC,EACZ,KACAV,EAAAA,KAAKC,EAAAA,UAAU,QAASC,EAAAA,eAAeS,GAAWH,EAAK,SAAS,KAAK,IAAK,CAAE,IAAKE,EAAM,MAAOD,CAAM,CAAC,EAAG,CACtG,IAAKC,CACP,CAAC,CACP,CAAC,CACH,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,OAAO,QAA8B,CACnC,OAAO,IAAIJ,EAAW,CAAC,CAAC,WAAY,GAC9BM,aAAa,KAAaA,EAE1B,OAAOA,GAAM,UAAY,OAAOA,GAAM,SAAiB,IAAI,KAAKA,CAAC,EAE9DA,CACR,CACH,CACF,E"}
1
+ {"version":3,"file":"date.cjs","names":["Schema","ok","invalid","issue","ErrorCode","resolveMessage","require__parse","require_schema","require_types","DateSchema","value","ctx","date","message","m","current"],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import { invalid, issue, type MaybePromise, ok, type ParseValue, type RunContext, resolveMessage } from '../_parse';\nimport { Schema } from '../schema';\nimport { ErrorCode, type MessageFn, type SchemaDescriptor, type SchemaKind } from '../types';\n\n/** Bounds are kept as ISO strings so definitions stay plain, frozen data. */\ntype DateMeta = { maximum: string; minimum: string };\n\nexport class DateSchema<Input = Date> extends Schema<Date, Input> {\n override get kind(): SchemaKind {\n return 'date';\n }\n\n /** Accepts `Date` instances holding a valid time. */\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n return value instanceof Date && !Number.isNaN(value.getTime())\n ? ok(value)\n : invalid(value, issue(ErrorCode.invalid_date, ctx.messages.date.type()));\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._refine<DateMeta>(\n (value) => value >= date,\n (value, m) =>\n issue(ErrorCode.too_small, resolveMessage(message ?? m.date.min, { min: date, value }), { min: date }),\n (current) => ({\n minimum:\n current.minimum === undefined || date > new Date(current.minimum) ? date.toISOString() : current.minimum,\n }),\n );\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._refine<DateMeta>(\n (value) => value <= date,\n (value, m) =>\n issue(ErrorCode.too_big, resolveMessage(message ?? m.date.max, { max: date, value }), { max: date }),\n (current) => ({\n maximum:\n current.maximum === undefined || date < new Date(current.maximum) ? date.toISOString() : current.maximum,\n }),\n );\n }\n\n protected override _describe(): SchemaDescriptor {\n return { ...this._describeBase(), ...(this.state.meta as Partial<DateMeta>), kind: 'date' };\n }\n}\n"],"mappings":"A,sFAOA,IAAaS,EAAb,cAA8CT,EAAAA,MAAoB,CAChE,IAAa,MAAmB,CAC9B,MAAO,MACT,CAGA,OAA0B,EAAgB,EAA2C,CACnF,OAAOU,aAAiB,MAAQ,CAAC,OAAO,MAAMA,EAAM,QAAQ,CAAC,EACzDT,EAAAA,GAAGS,CAAK,EACRR,EAAAA,QAAQQ,EAAOP,EAAAA,MAAMC,EAAAA,UAAU,aAAcO,EAAI,SAAS,KAAK,KAAK,CAAC,CAAC,CAC5E,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,QACT,GAAUD,GAASE,GACnB,EAAO,IACNT,EAAAA,MAAMC,EAAAA,UAAU,UAAWC,EAAAA,eAAeQ,GAAWC,EAAE,KAAK,IAAK,CAAE,IAAKF,EAAM,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAK,CAAC,EACtG,IAAa,CACZ,QACEG,EAAQ,UAAY,IAAA,IAAaH,EAAO,IAAI,KAAKG,EAAQ,OAAO,EAAIH,EAAK,YAAY,EAAIG,EAAQ,OACrG,EACF,CACF,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,QACT,GAAUL,GAASE,GACnB,EAAO,IACNT,EAAAA,MAAMC,EAAAA,UAAU,QAASC,EAAAA,eAAeQ,GAAWC,EAAE,KAAK,IAAK,CAAE,IAAKF,EAAM,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAK,CAAC,EACpG,IAAa,CACZ,QACEG,EAAQ,UAAY,IAAA,IAAaH,EAAO,IAAI,KAAKG,EAAQ,OAAO,EAAIH,EAAK,YAAY,EAAIG,EAAQ,OACrG,EACF,CACF,CAEA,WAAiD,CAC/C,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,GAAI,KAAK,MAAM,KAA4B,KAAM,MAAO,CAC5F,CACF,E"}
@@ -1,8 +1,10 @@
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';
3
4
  export declare class DateSchema<Input = Date> extends Schema<Date, Input> {
4
- protected get _kind(): string;
5
- constructor();
5
+ get kind(): SchemaKind;
6
+ /** Accepts `Date` instances holding a valid time. */
7
+ protected _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue>;
6
8
  min(date: Date, message?: MessageFn<{
7
9
  min: Date;
8
10
  value: Date;
@@ -11,7 +13,6 @@ export declare class DateSchema<Input = Date> extends Schema<Date, Input> {
11
13
  max: Date;
12
14
  value: Date;
13
15
  }>): this;
14
- protected _toDescriptorImpl(): SchemaDescriptor;
15
- static coerce(): DateSchema<unknown>;
16
+ protected _describe(): SchemaDescriptor;
16
17
  }
17
18
  //# sourceMappingURL=date.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/schemas/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAmC,MAAM,EAAE,MAAM,SAAS,CAAC;AAElE,qBAAa,UAAU,CAAC,KAAK,GAAG,IAAI,CAAE,SAAQ,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAC/D,cAAuB,KAAK,IAAI,MAAM,CAErC;;IAUD,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,GAAG,IAAI;IAYtE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,GAAG,IAAI;cAYnD,iBAAiB,IAAI,gBAAgB;IAIxD,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC;CASrC"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/schemas/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,YAAY,EAAM,KAAK,UAAU,EAAE,KAAK,UAAU,EAAkB,MAAM,WAAW,CAAC;AACpH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAK7F,qBAAa,UAAU,CAAC,KAAK,GAAG,IAAI,CAAE,SAAQ,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAC/D,IAAa,IAAI,IAAI,UAAU,CAE9B;IAED,qDAAqD;cAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAMpF,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,GAAG,IAAI;IAYtE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,GAAG,IAAI;cAYnD,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`date`}constructor(){super((t,r)=>t instanceof Date&&!Number.isNaN(t.getTime())?null:e(n.invalid_date,r.messages.date.type()))}min(r,i){return this._addConstraint((a,o)=>{let s=a;return s>=r?null:e(n.too_small,t(i??o.messages.date.min,{min:r,value:s}),{min:r})})}max(r,i){return this._addConstraint((a,o)=>{let s=a;return s<=r?null:e(n.too_big,t(i??o.messages.date.max,{max:r,value:s}),{max:r})})}_toDescriptorImpl(){return{...this._describeBase(),kind:`date`}}static coerce(){return new i().preprocess(e=>e instanceof Date?e:typeof e==`string`||typeof e==`number`?new Date(e):e)}};export{i as DateSchema};
1
+ import{invalid as e,issue as t,ok as n,resolveMessage as r}from"../_parse.js";import{Schema as i}from"../schema.js";import{ErrorCode as a}from"../types.js";var o=class extends i{get kind(){return`date`}_parse(r,i){return r instanceof Date&&!Number.isNaN(r.getTime())?n(r):e(r,t(a.invalid_date,i.messages.date.type()))}min(e,n){return this._refine(t=>t>=e,(i,o)=>t(a.too_small,r(n??o.date.min,{min:e,value:i}),{min:e}),t=>({minimum:t.minimum===void 0||e>new Date(t.minimum)?e.toISOString():t.minimum}))}max(e,n){return this._refine(t=>t<=e,(i,o)=>t(a.too_big,r(n??o.date.max,{max:e,value:i}),{max:e}),t=>({maximum:t.maximum===void 0||e<new Date(t.maximum)?e.toISOString():t.maximum}))}_describe(){return{...this._describeBase(),...this.state.meta,kind:`date`}}};export{o as DateSchema};
2
2
  //# sourceMappingURL=date.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","names":["DateSchema","Schema","value","fail","ErrorCode","ctx","typed","date","resolveMessage","message","v"],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\nexport class DateSchema<Input = Date> extends Schema<Date, Input> {\n protected override get _kind(): string {\n return 'date';\n }\n\n constructor() {\n super((value, ctx) =>\n value instanceof Date && !Number.isNaN(value.getTime())\n ? null\n : fail(ErrorCode.invalid_date, ctx!.messages.date.type()),\n );\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed >= date\n ? null\n : fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.date.min, { min: date, value: typed }), {\n min: date,\n });\n });\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Date;\n\n return typed <= date\n ? null\n : fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.date.max, { max: date, value: typed }), {\n max: date,\n });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n static coerce(): DateSchema<unknown> {\n return new DateSchema().preprocess((v: unknown) => {\n if (v instanceof Date) return v;\n\n if (typeof v === 'string' || typeof v === 'number') return new Date(v);\n\n return v;\n });\n }\n}\n"],"mappings":"A,oIAIA,IAAaA,EAAb,MAAaA,UAAiCC,CAAoB,CAChE,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,aAAc,CACZ,OAAO,EAAO,IACZC,aAAiB,MAAQ,CAAC,OAAO,MAAMA,EAAM,QAAQ,CAAC,EAClD,KACAC,EAAKC,EAAU,aAAcC,EAAK,SAAS,KAAK,KAAK,CAAC,CAC5D,CACF,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMC,EAAQJ,EAEd,OAAOI,GAASC,EACZ,KACAJ,EAAKC,EAAU,UAAWI,EAAeC,GAAWJ,EAAK,SAAS,KAAK,IAAK,CAAE,IAAKE,EAAM,MAAOD,CAAM,CAAC,EAAG,CACxG,IAAKC,CACP,CAAC,CACP,CAAC,CACH,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAMD,EAAQJ,EAEd,OAAOI,GAASC,EACZ,KACAJ,EAAKC,EAAU,QAASI,EAAeC,GAAWJ,EAAK,SAAS,KAAK,IAAK,CAAE,IAAKE,EAAM,MAAOD,CAAM,CAAC,EAAG,CACtG,IAAKC,CACP,CAAC,CACP,CAAC,CACH,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,OAAO,QAA8B,CACnC,OAAO,IAAIP,EAAW,CAAC,CAAC,WAAY,GAC9BU,aAAa,KAAaA,EAE1B,OAAOA,GAAM,UAAY,OAAOA,GAAM,SAAiB,IAAI,KAAKA,CAAC,EAE9DA,CACR,CACH,CACF,E"}
1
+ {"version":3,"file":"date.js","names":["DateSchema","Schema","value","ok","invalid","issue","ErrorCode","ctx","date","resolveMessage","message","m","current"],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import { invalid, issue, type MaybePromise, ok, type ParseValue, type RunContext, resolveMessage } from '../_parse';\nimport { Schema } from '../schema';\nimport { ErrorCode, type MessageFn, type SchemaDescriptor, type SchemaKind } from '../types';\n\n/** Bounds are kept as ISO strings so definitions stay plain, frozen data. */\ntype DateMeta = { maximum: string; minimum: string };\n\nexport class DateSchema<Input = Date> extends Schema<Date, Input> {\n override get kind(): SchemaKind {\n return 'date';\n }\n\n /** Accepts `Date` instances holding a valid time. */\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n return value instanceof Date && !Number.isNaN(value.getTime())\n ? ok(value)\n : invalid(value, issue(ErrorCode.invalid_date, ctx.messages.date.type()));\n }\n\n min(date: Date, message?: MessageFn<{ min: Date; value: Date }>): this {\n return this._refine<DateMeta>(\n (value) => value >= date,\n (value, m) =>\n issue(ErrorCode.too_small, resolveMessage(message ?? m.date.min, { min: date, value }), { min: date }),\n (current) => ({\n minimum:\n current.minimum === undefined || date > new Date(current.minimum) ? date.toISOString() : current.minimum,\n }),\n );\n }\n\n max(date: Date, message?: MessageFn<{ max: Date; value: Date }>): this {\n return this._refine<DateMeta>(\n (value) => value <= date,\n (value, m) =>\n issue(ErrorCode.too_big, resolveMessage(message ?? m.date.max, { max: date, value }), { max: date }),\n (current) => ({\n maximum:\n current.maximum === undefined || date < new Date(current.maximum) ? date.toISOString() : current.maximum,\n }),\n );\n }\n\n protected override _describe(): SchemaDescriptor {\n return { ...this._describeBase(), ...(this.state.meta as Partial<DateMeta>), kind: 'date' };\n }\n}\n"],"mappings":"A,4JAOA,IAAaA,EAAb,cAA8CC,CAAoB,CAChE,IAAa,MAAmB,CAC9B,MAAO,MACT,CAGA,OAA0B,EAAgB,EAA2C,CACnF,OAAOC,aAAiB,MAAQ,CAAC,OAAO,MAAMA,EAAM,QAAQ,CAAC,EACzDC,EAAGD,CAAK,EACRE,EAAQF,EAAOG,EAAMC,EAAU,aAAcC,EAAI,SAAS,KAAK,KAAK,CAAC,CAAC,CAC5E,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,QACT,GAAUL,GAASM,GACnB,EAAO,IACNH,EAAMC,EAAU,UAAWG,EAAeC,GAAWC,EAAE,KAAK,IAAK,CAAE,IAAKH,EAAM,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAK,CAAC,EACtG,IAAa,CACZ,QACEI,EAAQ,UAAY,IAAA,IAAaJ,EAAO,IAAI,KAAKI,EAAQ,OAAO,EAAIJ,EAAK,YAAY,EAAII,EAAQ,OACrG,EACF,CACF,CAEA,IAAI,EAAY,EAAuD,CACrE,OAAO,KAAK,QACT,GAAUV,GAASM,GACnB,EAAO,IACNH,EAAMC,EAAU,QAASG,EAAeC,GAAWC,EAAE,KAAK,IAAK,CAAE,IAAKH,EAAM,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAK,CAAC,EACpG,IAAa,CACZ,QACEI,EAAQ,UAAY,IAAA,IAAaJ,EAAO,IAAI,KAAKI,EAAQ,OAAO,EAAIJ,EAAK,YAAY,EAAII,EAAQ,OACrG,EACF,CACF,CAEA,WAAiD,CAC/C,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,GAAI,KAAK,MAAM,KAA4B,KAAM,MAAO,CAC5F,CACF,E"}
@@ -0,0 +1,2 @@
1
+ const e=require("../_object.cjs"),t=require("../_parse.cjs"),n=require("../errors.cjs"),r=require("../schema.cjs"),i=require("../types.cjs"),a=require("./object.cjs"),o=require("./primitives.cjs");var s=class extends r.Schema{discriminator;branches;constructor(e,t){super();let r=new Map;for(let[i,s]of Object.entries(t)){if(!(s instanceof a.ObjectSchema))throw new n.SpellDefinitionError(`Branch "${i}" must be an object schema.`);let t=s.shape[e];if(t===void 0)r.set(i,s._withShape({...s.shape,[e]:new o.LiteralSchema(i)}));else if(t instanceof o.LiteralSchema&&t.value===i)r.set(i,s);else throw new n.SpellDefinitionError(`Branch "${i}" declares a "${e}" field that does not match its discriminator value.`)}this.discriminator=e,this.branches=r}get kind(){return`discriminatedUnion`}_parse(e,n){let{messages:r}=n;if(typeof e!=`object`||!e||Array.isArray(e))return t.invalid(e,t.issue(i.ErrorCode.invalid_type,r.discriminatedUnion.type()));let a=e[this.discriminator],o=typeof a==`string`?this.branches.get(a):void 0;if(!o){let n=[...this.branches.keys()];return t.invalid(e,t.issue(i.ErrorCode.invalid_discriminator,r.discriminatedUnion.invalidDiscriminator({discriminator:this.discriminator,expected:n}),{discriminator:this.discriminator,expected:n}))}return t.chain(o._run(e,n),n=>n.issues.length===0?t.ok(n.value):t.invalid(e,...n.issues))}_describe(){let t={};for(let[n,r]of this.branches)e.defineOwnProperty(t,n,r.definition());return{...this._describeBase(),branches:t,discriminator:this.discriminator,kind:`discriminatedUnion`}}};exports.DiscriminatedUnionSchema=s;
2
+ //# sourceMappingURL=discriminated-union.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminated-union.cjs","names":["Schema","ObjectSchema","SpellDefinitionError","LiteralSchema","invalid","issue","ErrorCode","chain","ok","require__object","require__parse","require_errors","require_schema","require_types","require_object","require_primitives","DiscriminatedUnionSchema","resolved","tag","branch","branches","declared","discriminator","ctx","value","messages","expected","result"],"sources":["../../src/schemas/discriminated-union.ts"],"sourcesContent":["import { defineOwnProperty } from '../_object';\nimport { chain, invalid, issue, type MaybePromise, ok, type ParseValue, type RunContext } from '../_parse';\nimport { SpellDefinitionError } from '../errors';\nimport { Schema } from '../schema';\nimport { type AnySchema, ErrorCode, type SchemaDescriptor, type SchemaKind } from '../types';\nimport { type InferObject, type InferObjectInput, ObjectSchema, type ObjectShape } from './object';\nimport { LiteralSchema } from './primitives';\n\n/** Structural so concrete `ObjectSchema<Shape>` branches are accepted; checked with `instanceof` at construction. */\nexport type DiscriminatedBranches = Record<string, AnySchema & { readonly shape: ObjectShape }>;\n\ntype Simplify<T> = { [P in keyof T]: T[P] };\ntype InferBranches<K extends string, M extends DiscriminatedBranches> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? Simplify<InferObject<S> & { [P in K]: Tag }>\n : never;\n}[keyof M & string];\ntype InferBranchesInput<K extends string, M extends DiscriminatedBranches> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? Simplify<InferObjectInput<S> & { [P in K]: Tag }>\n : never;\n}[keyof M & string];\n\n/**\n * Selects the branch named by `value[discriminator]`. Branches that do not declare the\n * discriminator get it added as a literal of their tag.\n */\nexport class DiscriminatedUnionSchema<K extends string, M extends DiscriminatedBranches> extends Schema<\n InferBranches<K, M>,\n InferBranchesInput<K, M>\n> {\n readonly discriminator: K;\n readonly branches: ReadonlyMap<string, ObjectSchema<ObjectShape>>;\n\n constructor(discriminator: K, branches: M) {\n super();\n\n const resolved = new Map<string, ObjectSchema<ObjectShape>>();\n\n for (const [tag, branch] of Object.entries(branches)) {\n if (!(branch instanceof ObjectSchema))\n throw new SpellDefinitionError(`Branch \"${tag}\" must be an object schema.`);\n\n const declared = branch.shape[discriminator];\n\n if (declared === undefined) {\n resolved.set(tag, branch._withShape({ ...branch.shape, [discriminator]: new LiteralSchema(tag) }));\n } else if (declared instanceof LiteralSchema && declared.value === tag) {\n resolved.set(tag, branch);\n } else {\n throw new SpellDefinitionError(\n `Branch \"${tag}\" declares a \"${discriminator}\" field that does not match its discriminator value.`,\n );\n }\n }\n\n this.discriminator = discriminator;\n this.branches = resolved;\n }\n\n override get kind(): SchemaKind {\n return 'discriminatedUnion';\n }\n\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n const { messages } = ctx;\n\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return invalid(value, issue(ErrorCode.invalid_type, messages.discriminatedUnion.type()));\n }\n\n const tag = (value as Record<string, unknown>)[this.discriminator];\n const branch = typeof tag === 'string' ? this.branches.get(tag) : undefined;\n\n if (!branch) {\n const expected = [...this.branches.keys()];\n\n return invalid(\n value,\n issue(\n ErrorCode.invalid_discriminator,\n messages.discriminatedUnion.invalidDiscriminator({ discriminator: this.discriminator, expected }),\n { discriminator: this.discriminator, expected },\n ),\n );\n }\n\n return chain(branch._run(value, ctx), (result) =>\n result.issues.length === 0 ? ok(result.value) : invalid(value, ...result.issues),\n );\n }\n\n protected override _describe(): SchemaDescriptor {\n const branches: Record<string, SchemaDescriptor> = {};\n\n for (const [tag, branch] of this.branches) defineOwnProperty(branches, tag, branch.definition());\n\n return { ...this._describeBase(), branches, discriminator: this.discriminator, kind: 'discriminatedUnion' };\n }\n}\n"],"mappings":"A,qMA2BA,IAAagB,EAAb,cAAiGhB,EAAAA,MAG/F,CACA,cACA,SAEA,YAAY,EAAkB,EAAa,CACzC,MAAM,EAEN,IAAMiB,EAAW,IAAI,IAErB,IAAK,GAAM,CAACC,EAAKC,KAAW,OAAO,QAAQC,CAAQ,EAAG,CACpD,GAAI,EAAED,aAAkBlB,EAAAA,cACtB,MAAM,IAAIC,EAAAA,qBAAqB,WAAWgB,EAAI,4BAA4B,EAE5E,IAAMG,EAAWF,EAAO,MAAMG,GAE9B,GAAID,IAAa,IAAA,GACfJ,EAAS,IAAIC,EAAKC,EAAO,WAAW,CAAE,GAAGA,EAAO,OAAQG,GAAgB,IAAInB,EAAAA,cAAce,CAAG,CAAE,CAAC,CAAC,OAC5F,GAAIG,aAAoBlB,EAAAA,eAAiBkB,EAAS,QAAUH,EACjED,EAAS,IAAIC,EAAKC,CAAM,OAExB,MAAM,IAAIjB,EAAAA,qBACR,WAAWgB,EAAI,gBAAgBI,EAAc,qDAC/C,CAEJ,CAEA,KAAK,cAAgBA,EACrB,KAAK,SAAWL,CAClB,CAEA,IAAa,MAAmB,CAC9B,MAAO,oBACT,CAEA,OAA0B,EAAgB,EAA2C,CACnF,GAAM,CAAE,YAAaM,EAErB,GAAsB,OAAOC,GAAU,WAAnCA,GAA+C,MAAM,QAAQA,CAAK,EACpE,OAAOpB,EAAAA,QAAQoB,EAAOnB,EAAAA,MAAMC,EAAAA,UAAU,aAAcmB,EAAS,mBAAmB,KAAK,CAAC,CAAC,EAGzF,IAAMP,EAAOM,EAAkC,KAAK,eAC9CL,EAAS,OAAOD,GAAQ,SAAW,KAAK,SAAS,IAAIA,CAAG,EAAI,IAAA,GAElE,GAAI,CAACC,EAAQ,CACX,IAAMO,EAAW,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC,EAEzC,OAAOtB,EAAAA,QACLoB,EACAnB,EAAAA,MACEC,EAAAA,UAAU,sBACVmB,EAAS,mBAAmB,qBAAqB,CAAE,cAAe,KAAK,cAAe,UAAS,CAAC,EAChG,CAAE,cAAe,KAAK,cAAe,UAAS,CAChD,CACF,CACF,CAEA,OAAOlB,EAAAA,MAAMY,EAAO,KAAKK,EAAOD,CAAG,EAAI,GACrCI,EAAO,OAAO,SAAW,EAAInB,EAAAA,GAAGmB,EAAO,KAAK,EAAIvB,EAAAA,QAAQoB,EAAO,GAAGG,EAAO,MAAM,CACjF,CACF,CAEA,WAAiD,CAC/C,IAAMP,EAA6C,CAAC,EAEpD,IAAK,GAAM,CAACF,EAAKC,KAAW,KAAK,SAAUV,EAAA,kBAAkBW,EAAUF,EAAKC,EAAO,WAAW,CAAC,EAE/F,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,WAAU,cAAe,KAAK,cAAe,KAAM,oBAAqB,CAC5G,CACF,E"}
@@ -0,0 +1,39 @@
1
+ import { type MaybePromise, type ParseValue, type RunContext } from '../_parse';
2
+ import { Schema } from '../schema';
3
+ import { type AnySchema, type SchemaDescriptor, type SchemaKind } from '../types';
4
+ import { type InferObject, type InferObjectInput, ObjectSchema, type ObjectShape } from './object';
5
+ /** Structural so concrete `ObjectSchema<Shape>` branches are accepted; checked with `instanceof` at construction. */
6
+ export type DiscriminatedBranches = Record<string, AnySchema & {
7
+ readonly shape: ObjectShape;
8
+ }>;
9
+ type Simplify<T> = {
10
+ [P in keyof T]: T[P];
11
+ };
12
+ type InferBranches<K extends string, M extends DiscriminatedBranches> = {
13
+ [Tag in keyof M & string]: M[Tag] extends {
14
+ shape: infer S extends ObjectShape;
15
+ } ? Simplify<InferObject<S> & {
16
+ [P in K]: Tag;
17
+ }> : never;
18
+ }[keyof M & string];
19
+ type InferBranchesInput<K extends string, M extends DiscriminatedBranches> = {
20
+ [Tag in keyof M & string]: M[Tag] extends {
21
+ shape: infer S extends ObjectShape;
22
+ } ? Simplify<InferObjectInput<S> & {
23
+ [P in K]: Tag;
24
+ }> : never;
25
+ }[keyof M & string];
26
+ /**
27
+ * Selects the branch named by `value[discriminator]`. Branches that do not declare the
28
+ * discriminator get it added as a literal of their tag.
29
+ */
30
+ export declare class DiscriminatedUnionSchema<K extends string, M extends DiscriminatedBranches> extends Schema<InferBranches<K, M>, InferBranchesInput<K, M>> {
31
+ readonly discriminator: K;
32
+ readonly branches: ReadonlyMap<string, ObjectSchema<ObjectShape>>;
33
+ constructor(discriminator: K, branches: M);
34
+ get kind(): SchemaKind;
35
+ protected _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue>;
36
+ protected _describe(): SchemaDescriptor;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=discriminated-union.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminated-union.d.ts","sourceRoot":"","sources":["../../src/schemas/discriminated-union.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,YAAY,EAAM,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAE3G,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,KAAK,SAAS,EAAa,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC7F,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAGnG,qHAAqH;AACrH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAEhG,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAC5C,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,qBAAqB,IAAI;KACrE,GAAG,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC,SAAS,WAAW,CAAA;KAAE,GAC5E,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG;SAAG,CAAC,IAAI,CAAC,GAAG,GAAG;KAAE,CAAC,GAC5C,KAAK;CACV,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AACpB,KAAK,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,qBAAqB,IAAI;KAC1E,GAAG,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC,SAAS,WAAW,CAAA;KAAE,GAC5E,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG;SAAG,CAAC,IAAI,CAAC,GAAG,GAAG;KAAE,CAAC,GACjD,KAAK;CACV,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAEpB;;;GAGG;AACH,qBAAa,wBAAwB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,qBAAqB,CAAE,SAAQ,MAAM,CACrG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CACzB;IACC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;gBAEtD,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IA0BzC,IAAa,IAAI,IAAI,UAAU,CAE9B;cAEkB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;cA4BjE,SAAS,IAAI,gBAAgB;CAOjD"}
@@ -0,0 +1,2 @@
1
+ import{defineOwnProperty as e}from"../_object.js";import{chain as t,invalid as n,issue as r,ok as i}from"../_parse.js";import{SpellDefinitionError as a}from"../errors.js";import{Schema as o}from"../schema.js";import{ErrorCode as s}from"../types.js";import{ObjectSchema as c}from"./object.js";import{LiteralSchema as l}from"./primitives.js";var u=class extends o{discriminator;branches;constructor(e,t){super();let n=/* @__PURE__ */ new Map;for(let[r,i]of Object.entries(t)){if(!(i instanceof c))throw new a(`Branch "${r}" must be an object schema.`);let t=i.shape[e];if(t===void 0)n.set(r,i._withShape({...i.shape,[e]:new l(r)}));else if(t instanceof l&&t.value===r)n.set(r,i);else throw new a(`Branch "${r}" declares a "${e}" field that does not match its discriminator value.`)}this.discriminator=e,this.branches=n}get kind(){return`discriminatedUnion`}_parse(e,a){let{messages:o}=a;if(typeof e!=`object`||!e||Array.isArray(e))return n(e,r(s.invalid_type,o.discriminatedUnion.type()));let c=e[this.discriminator],l=typeof c==`string`?this.branches.get(c):void 0;if(!l){let t=[...this.branches.keys()];return n(e,r(s.invalid_discriminator,o.discriminatedUnion.invalidDiscriminator({discriminator:this.discriminator,expected:t}),{discriminator:this.discriminator,expected:t}))}return t(l._run(e,a),t=>t.issues.length===0?i(t.value):n(e,...t.issues))}_describe(){let t={};for(let[n,r]of this.branches)e(t,n,r.definition());return{...this._describeBase(),branches:t,discriminator:this.discriminator,kind:`discriminatedUnion`}}};export{u as DiscriminatedUnionSchema};
2
+ //# sourceMappingURL=discriminated-union.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminated-union.js","names":["DiscriminatedUnionSchema","Schema","resolved","tag","branch","branches","ObjectSchema","SpellDefinitionError","declared","discriminator","LiteralSchema","ctx","value","invalid","issue","ErrorCode","messages","expected","chain","result","ok","defineOwnProperty"],"sources":["../../src/schemas/discriminated-union.ts"],"sourcesContent":["import { defineOwnProperty } from '../_object';\nimport { chain, invalid, issue, type MaybePromise, ok, type ParseValue, type RunContext } from '../_parse';\nimport { SpellDefinitionError } from '../errors';\nimport { Schema } from '../schema';\nimport { type AnySchema, ErrorCode, type SchemaDescriptor, type SchemaKind } from '../types';\nimport { type InferObject, type InferObjectInput, ObjectSchema, type ObjectShape } from './object';\nimport { LiteralSchema } from './primitives';\n\n/** Structural so concrete `ObjectSchema<Shape>` branches are accepted; checked with `instanceof` at construction. */\nexport type DiscriminatedBranches = Record<string, AnySchema & { readonly shape: ObjectShape }>;\n\ntype Simplify<T> = { [P in keyof T]: T[P] };\ntype InferBranches<K extends string, M extends DiscriminatedBranches> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? Simplify<InferObject<S> & { [P in K]: Tag }>\n : never;\n}[keyof M & string];\ntype InferBranchesInput<K extends string, M extends DiscriminatedBranches> = {\n [Tag in keyof M & string]: M[Tag] extends { shape: infer S extends ObjectShape }\n ? Simplify<InferObjectInput<S> & { [P in K]: Tag }>\n : never;\n}[keyof M & string];\n\n/**\n * Selects the branch named by `value[discriminator]`. Branches that do not declare the\n * discriminator get it added as a literal of their tag.\n */\nexport class DiscriminatedUnionSchema<K extends string, M extends DiscriminatedBranches> extends Schema<\n InferBranches<K, M>,\n InferBranchesInput<K, M>\n> {\n readonly discriminator: K;\n readonly branches: ReadonlyMap<string, ObjectSchema<ObjectShape>>;\n\n constructor(discriminator: K, branches: M) {\n super();\n\n const resolved = new Map<string, ObjectSchema<ObjectShape>>();\n\n for (const [tag, branch] of Object.entries(branches)) {\n if (!(branch instanceof ObjectSchema))\n throw new SpellDefinitionError(`Branch \"${tag}\" must be an object schema.`);\n\n const declared = branch.shape[discriminator];\n\n if (declared === undefined) {\n resolved.set(tag, branch._withShape({ ...branch.shape, [discriminator]: new LiteralSchema(tag) }));\n } else if (declared instanceof LiteralSchema && declared.value === tag) {\n resolved.set(tag, branch);\n } else {\n throw new SpellDefinitionError(\n `Branch \"${tag}\" declares a \"${discriminator}\" field that does not match its discriminator value.`,\n );\n }\n }\n\n this.discriminator = discriminator;\n this.branches = resolved;\n }\n\n override get kind(): SchemaKind {\n return 'discriminatedUnion';\n }\n\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n const { messages } = ctx;\n\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return invalid(value, issue(ErrorCode.invalid_type, messages.discriminatedUnion.type()));\n }\n\n const tag = (value as Record<string, unknown>)[this.discriminator];\n const branch = typeof tag === 'string' ? this.branches.get(tag) : undefined;\n\n if (!branch) {\n const expected = [...this.branches.keys()];\n\n return invalid(\n value,\n issue(\n ErrorCode.invalid_discriminator,\n messages.discriminatedUnion.invalidDiscriminator({ discriminator: this.discriminator, expected }),\n { discriminator: this.discriminator, expected },\n ),\n );\n }\n\n return chain(branch._run(value, ctx), (result) =>\n result.issues.length === 0 ? ok(result.value) : invalid(value, ...result.issues),\n );\n }\n\n protected override _describe(): SchemaDescriptor {\n const branches: Record<string, SchemaDescriptor> = {};\n\n for (const [tag, branch] of this.branches) defineOwnProperty(branches, tag, branch.definition());\n\n return { ...this._describeBase(), branches, discriminator: this.discriminator, kind: 'discriminatedUnion' };\n }\n}\n"],"mappings":"A,oVA2BA,IAAaA,EAAb,cAAiGC,CAG/F,CACA,cACA,SAEA,YAAY,EAAkB,EAAa,CACzC,MAAM,EAEN,IAAMC,kBAAW,IAAI,IAErB,IAAK,GAAM,CAACC,EAAKC,KAAW,OAAO,QAAQC,CAAQ,EAAG,CACpD,GAAI,EAAED,aAAkBE,GACtB,MAAM,IAAIC,EAAqB,WAAWJ,EAAI,4BAA4B,EAE5E,IAAMK,EAAWJ,EAAO,MAAMK,GAE9B,GAAID,IAAa,IAAA,GACfN,EAAS,IAAIC,EAAKC,EAAO,WAAW,CAAE,GAAGA,EAAO,OAAQK,GAAgB,IAAIC,EAAcP,CAAG,CAAE,CAAC,CAAC,OAC5F,GAAIK,aAAoBE,GAAiBF,EAAS,QAAUL,EACjED,EAAS,IAAIC,EAAKC,CAAM,OAExB,MAAM,IAAIG,EACR,WAAWJ,EAAI,gBAAgBM,EAAc,qDAC/C,CAEJ,CAEA,KAAK,cAAgBA,EACrB,KAAK,SAAWP,CAClB,CAEA,IAAa,MAAmB,CAC9B,MAAO,oBACT,CAEA,OAA0B,EAAgB,EAA2C,CACnF,GAAM,CAAE,YAAaS,EAErB,GAAsB,OAAOC,GAAU,WAAnCA,GAA+C,MAAM,QAAQA,CAAK,EACpE,OAAOC,EAAQD,EAAOE,EAAMC,EAAU,aAAcC,EAAS,mBAAmB,KAAK,CAAC,CAAC,EAGzF,IAAMb,EAAOS,EAAkC,KAAK,eAC9CR,EAAS,OAAOD,GAAQ,SAAW,KAAK,SAAS,IAAIA,CAAG,EAAI,IAAA,GAElE,GAAI,CAACC,EAAQ,CACX,IAAMa,EAAW,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC,EAEzC,OAAOJ,EACLD,EACAE,EACEC,EAAU,sBACVC,EAAS,mBAAmB,qBAAqB,CAAE,cAAe,KAAK,cAAe,UAAS,CAAC,EAChG,CAAE,cAAe,KAAK,cAAe,UAAS,CAChD,CACF,CACF,CAEA,OAAOE,EAAMd,EAAO,KAAKQ,EAAOD,CAAG,EAAI,GACrCQ,EAAO,OAAO,SAAW,EAAIC,EAAGD,EAAO,KAAK,EAAIN,EAAQD,EAAO,GAAGO,EAAO,MAAM,CACjF,CACF,CAEA,WAAiD,CAC/C,IAAMd,EAA6C,CAAC,EAEpD,IAAK,GAAM,CAACF,EAAKC,KAAW,KAAK,SAAUiB,EAAkBhB,EAAUF,EAAKC,EAAO,WAAW,CAAC,EAE/F,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,WAAU,cAAe,KAAK,cAAe,KAAM,oBAAqB,CAC5G,CACF,E"}
@@ -1,2 +1,2 @@
1
- const e=require("../core.cjs"),t=require("../safe-object.cjs");let n=require("@vielzeug/arsenal");function r(e,i){if((0,n.isPlainObject)(e)&&(0,n.isPlainObject)(i)){let n=t.cloneRecord(e);for(let[a,o]of Object.entries(i))t.defineOwnProperty(n,a,r(e[a],o));return n}return i}var i=class extends e.Schema{schemas;get _kind(){return`intersect`}constructor(e){super(),this.schemas=Object.freeze([...e])}_parse(e,t){let n={hasOutput:!1,issues:[],output:e};for(let i=0;i<this.schemas.length;i++){let a=this.schemas[i]._parseFullSync(e,t);a.issues.length>0?n.issues.push(...a.issues):n.hasOutput?n.output=r(n.output,a.data):(n.hasOutput=!0,n.output=a.data)}return{data:n.output,issues:n.issues,typeOk:n.issues.length===0}}async _parseAsync(e,t){let n={hasOutput:!1,issues:[],output:e};for(let i=0;i<this.schemas.length;i++){let a=await this.schemas[i]._parseFullAsync(e,t);a.issues.length>0?n.issues.push(...a.issues):n.hasOutput?n.output=r(n.output,a.data):(n.hasOutput=!0,n.output=a.data)}return{data:n.output,issues:n.issues,typeOk:n.issues.length===0}}_toDescriptorImpl(){return{...this._describeBase(),branches:this.schemas.map(e=>e.definition()),kind:`intersect`}}};exports.IntersectSchema=i;
1
+ const e=require("../_object.cjs"),t=require("../_parse.cjs"),n=require("../schema.cjs");let r=require("@vielzeug/arsenal");function i(t,n){if(!(0,r.isPlainObject)(t)||!(0,r.isPlainObject)(n))return n;let a=e.objectFromEntries(Object.entries(t));for(let[r,o]of Object.entries(n))e.defineOwnProperty(a,r,i(t[r],o));return a}var a=class extends n.Schema{schemas;constructor(e){super(),this.schemas=Object.freeze([...e])}get kind(){return`intersect`}_parse(e,n){return t.chain(t.all(this.schemas.map(t=>t._run(e,n))),n=>{let r=n.flatMap(e=>e.issues);return r.length>0?t.invalid(e,...r):t.ok(n.map(e=>e.value).reduce(i))})}_describe(){return{...this._describeBase(),branches:this.schemas.map(e=>e.definition()),kind:`intersect`}}};exports.IntersectSchema=a;
2
2
  //# sourceMappingURL=intersect.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"intersect.cjs","names":["isPlainObject","cloneRecord","Schema","require_core","require_safe_object","_vielzeug_arsenal","deepMerge","target","source","result","key","val","IntersectSchema","schemas","state","value","ctx","s"],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { Schema } from '../core';\nimport { cloneRecord, defineOwnProperty } from '../safe-object';\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/**\n * Recursively merges `source` into `target`.\n * Plain objects are merged key-by-key; all other values take the `source` value.\n */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = cloneRecord(target);\n\n for (const [key, val] of Object.entries(source)) {\n defineOwnProperty(result, key, deepMerge(target[key], val));\n }\n\n return result;\n }\n\n return source;\n}\n\n/** All schemas must pass: intersection semantics. */\nexport class IntersectSchema<T extends readonly AnySchema[]> extends Schema<\n UnionToIntersection<InferOutput<T[number]>>,\n UnionToIntersection<InferInput<T[number]>>\n> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'intersect';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = this.schemas[i]._parseFullSync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'intersect' };\n }\n}\n"],"mappings":"A,kGAaA,SAASM,EAAU,EAAiB,EAA0B,CAC5D,IAAA,EAAIN,EAAAA,cAAAA,CAAcO,CAAM,IAAA,EAAKP,EAAAA,cAAAA,CAAcQ,CAAM,EAAG,CAClD,IAAMC,EAASR,EAAAA,YAAYM,CAAM,EAEjC,IAAK,GAAM,CAACG,EAAKC,KAAQ,OAAO,QAAQH,CAAM,EAC5CJ,EAAA,kBAAkBK,EAAQC,EAAKJ,EAAUC,EAAOG,GAAMC,CAAG,CAAC,EAG5D,OAAOF,CACT,CAEA,OAAOD,CACT,CAGA,IAAaI,EAAb,cAAqEV,EAAAA,MAGnE,CACA,QAEA,IAAuB,OAAgB,CACrC,MAAO,WACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAGW,CAAO,CAAC,CAC3C,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQC,CACV,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAMN,EAAS,KAAK,QAAQ,EAAE,CAAC,eAAeM,EAAOC,CAAG,EAEpDP,EAAO,OAAO,OAAS,EACzBK,EAAM,OAAO,KAAK,GAAGL,EAAO,MAAM,EACxBK,EAAM,UAIhB,EAAM,OAASR,EAAUQ,EAAM,OAAQL,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAASA,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAMK,EAAM,OAAQ,OAAQA,EAAM,OAAQ,OAAQA,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQC,CACV,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAMN,EAAS,MAAM,KAAK,QAAQ,EAAE,CAAC,gBAAgBM,EAAOC,CAAG,EAE3DP,EAAO,OAAO,OAAS,EACzBK,EAAM,OAAO,KAAK,GAAGL,EAAO,MAAM,EACxBK,EAAM,UAIhB,EAAM,OAASR,EAAUQ,EAAM,OAAQL,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAASA,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAMK,EAAM,OAAQ,OAAQA,EAAM,OAAQ,OAAQA,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAMG,EAAE,WAAW,CAAC,EAAG,KAAM,WAAY,CACzG,CACF,E"}
1
+ {"version":3,"file":"intersect.cjs","names":["isPlainObject","objectFromEntries","Schema","chain","all","invalid","ok","require__object","require__parse","require_schema","_vielzeug_arsenal","deepMerge","target","source","merged","key","entry","IntersectSchema","schemas","schema","value","ctx","issues","results","result"],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport { defineOwnProperty, objectFromEntries } from '../_object';\nimport { all, chain, invalid, type MaybePromise, ok, type ParseValue, type RunContext } from '../_parse';\nimport { Schema } from '../schema';\nimport type { InferInput, InferOutput, SchemaDescriptor, SchemaKind } from '../types';\nimport type { UnionMembers } from './union';\n\ntype UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/** Plain objects merge key by key; any other value is replaced by `source`. */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (!isPlainObject(target) || !isPlainObject(source)) return source;\n\n const merged = objectFromEntries(Object.entries(target));\n\n for (const [key, entry] of Object.entries(source)) defineOwnProperty(merged, key, deepMerge(target[key], entry));\n\n return merged;\n}\n\n/** Every branch must parse; plain-object outputs are deep-merged. */\nexport class IntersectSchema<T extends UnionMembers> extends Schema<\n UnionToIntersection<InferOutput<T[number]>>,\n UnionToIntersection<InferInput<T[number]>>\n> {\n readonly schemas: T;\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as unknown as T;\n }\n\n override get kind(): SchemaKind {\n return 'intersect';\n }\n\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n return chain(all(this.schemas.map((schema) => schema._run(value, ctx))), (results) => {\n const issues = results.flatMap((result) => result.issues);\n\n if (issues.length > 0) return invalid(value, ...issues);\n\n return ok(results.map((result) => result.value).reduce(deepMerge));\n });\n }\n\n protected override _describe(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((schema) => schema.definition()), kind: 'intersect' };\n }\n}\n"],"mappings":"A,2HAWA,SAASW,EAAU,EAAiB,EAA0B,CAC5D,GAAI,EAAA,EAACX,EAAAA,cAAAA,CAAcY,CAAM,GAAK,EAAA,EAACZ,EAAAA,cAAAA,CAAca,CAAM,EAAG,OAAOA,EAE7D,IAAMC,EAASb,EAAAA,kBAAkB,OAAO,QAAQW,CAAM,CAAC,EAEvD,IAAK,GAAM,CAACG,EAAKC,KAAU,OAAO,QAAQH,CAAM,EAAGN,EAAA,kBAAkBO,EAAQC,EAAKJ,EAAUC,EAAOG,GAAMC,CAAK,CAAC,EAE/G,OAAOF,CACT,CAGA,IAAaG,EAAb,cAA6Df,EAAAA,MAG3D,CACA,QAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAGgB,CAAO,CAAC,CAC3C,CAEA,IAAa,MAAmB,CAC9B,MAAO,WACT,CAEA,OAA0B,EAAgB,EAA2C,CACnF,OAAOf,EAAAA,MAAMC,EAAAA,IAAI,KAAK,QAAQ,IAAK,GAAWe,EAAO,KAAKC,EAAOC,CAAG,CAAC,CAAC,EAAI,GAAY,CACpF,IAAMC,EAASC,EAAQ,QAAS,GAAWC,EAAO,MAAM,EAIxD,OAFIF,EAAO,OAAS,EAAUjB,EAAAA,QAAQe,EAAO,GAAGE,CAAM,EAE/ChB,EAAAA,GAAGiB,EAAQ,IAAK,GAAWC,EAAO,KAAK,CAAC,CAAC,OAAOb,CAAS,CAAC,CACnE,CAAC,CACH,CAEA,WAAiD,CAC/C,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAWQ,EAAO,WAAW,CAAC,EAAG,KAAM,WAAY,CACnH,CACF,E"}
@@ -1,14 +1,15 @@
1
- import type { AnySchema, InferInput, InferOutput, ParseContext, ParseValue, SchemaDescriptor } from '../core';
2
- import { Schema } from '../core';
3
- type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
4
- /** All schemas must pass: intersection semantics. */
5
- export declare class IntersectSchema<T extends readonly AnySchema[]> extends Schema<UnionToIntersection<InferOutput<T[number]>>, UnionToIntersection<InferInput<T[number]>>> {
1
+ import { type MaybePromise, type ParseValue, type RunContext } from '../_parse';
2
+ import { Schema } from '../schema';
3
+ import type { InferInput, InferOutput, SchemaDescriptor, SchemaKind } from '../types';
4
+ import type { UnionMembers } from './union';
5
+ type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
6
+ /** Every branch must parse; plain-object outputs are deep-merged. */
7
+ export declare class IntersectSchema<T extends UnionMembers> extends Schema<UnionToIntersection<InferOutput<T[number]>>, UnionToIntersection<InferInput<T[number]>>> {
6
8
  readonly schemas: T;
7
- protected get _kind(): string;
8
9
  constructor(schemas: T);
9
- protected _parse(value: unknown, ctx: ParseContext): ParseValue;
10
- protected _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue>;
11
- protected _toDescriptorImpl(): SchemaDescriptor;
10
+ get kind(): SchemaKind;
11
+ protected _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue>;
12
+ protected _describe(): SchemaDescriptor;
12
13
  }
13
14
  export {};
14
15
  //# sourceMappingURL=intersect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"intersect.d.ts","sourceRoot":"","sources":["../../src/schemas/intersect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAS,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAErH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;AAoBhH,qDAAqD;AACrD,qBAAa,eAAe,CAAC,CAAC,SAAS,SAAS,SAAS,EAAE,CAAE,SAAQ,MAAM,CACzE,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC3C,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAC3C;IACC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAEpB,cAAuB,KAAK,IAAI,MAAM,CAErC;gBAEW,OAAO,EAAE,CAAC;cAKH,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU;cAuB/C,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;cAuBzE,iBAAiB,IAAI,gBAAgB;CAGzD"}
1
+ {"version":3,"file":"intersect.d.ts","sourceRoot":"","sources":["../../src/schemas/intersect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,YAAY,EAAM,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;AAapH,qEAAqE;AACrE,qBAAa,eAAe,CAAC,CAAC,SAAS,YAAY,CAAE,SAAQ,MAAM,CACjE,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC3C,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAC3C;IACC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBAER,OAAO,EAAE,CAAC;IAKtB,IAAa,IAAI,IAAI,UAAU,CAE9B;cAEkB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;cAUjE,SAAS,IAAI,gBAAgB;CAGjD"}
@@ -1,2 +1,2 @@
1
- import{Schema as e}from"../core.js";import{cloneRecord as t,defineOwnProperty as n}from"../safe-object.js";import{isPlainObject as r}from"@vielzeug/arsenal";function i(e,a){if(r(e)&&r(a)){let r=t(e);for(let[t,o]of Object.entries(a))n(r,t,i(e[t],o));return r}return a}var a=class extends e{schemas;get _kind(){return`intersect`}constructor(e){super(),this.schemas=Object.freeze([...e])}_parse(e,t){let n={hasOutput:!1,issues:[],output:e};for(let r=0;r<this.schemas.length;r++){let a=this.schemas[r]._parseFullSync(e,t);a.issues.length>0?n.issues.push(...a.issues):n.hasOutput?n.output=i(n.output,a.data):(n.hasOutput=!0,n.output=a.data)}return{data:n.output,issues:n.issues,typeOk:n.issues.length===0}}async _parseAsync(e,t){let n={hasOutput:!1,issues:[],output:e};for(let r=0;r<this.schemas.length;r++){let a=await this.schemas[r]._parseFullAsync(e,t);a.issues.length>0?n.issues.push(...a.issues):n.hasOutput?n.output=i(n.output,a.data):(n.hasOutput=!0,n.output=a.data)}return{data:n.output,issues:n.issues,typeOk:n.issues.length===0}}_toDescriptorImpl(){return{...this._describeBase(),branches:this.schemas.map(e=>e.definition()),kind:`intersect`}}};export{a as IntersectSchema};
1
+ import{defineOwnProperty as e,objectFromEntries as t}from"../_object.js";import{all as n,chain as r,invalid as i,ok as a}from"../_parse.js";import{Schema as o}from"../schema.js";import{isPlainObject as s}from"@vielzeug/arsenal";function c(n,r){if(!s(n)||!s(r))return r;let i=t(Object.entries(n));for(let[t,a]of Object.entries(r))e(i,t,c(n[t],a));return i}var l=class extends o{schemas;constructor(e){super(),this.schemas=Object.freeze([...e])}get kind(){return`intersect`}_parse(e,t){return r(n(this.schemas.map(n=>n._run(e,t))),t=>{let n=t.flatMap(e=>e.issues);return n.length>0?i(e,...n):a(t.map(e=>e.value).reduce(c))})}_describe(){return{...this._describeBase(),branches:this.schemas.map(e=>e.definition()),kind:`intersect`}}};export{l as IntersectSchema};
2
2
  //# sourceMappingURL=intersect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"intersect.js","names":["deepMerge","isPlainObject","target","source","result","cloneRecord","key","val","defineOwnProperty","IntersectSchema","Schema","schemas","state","value","i","ctx","s"],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport type { AnySchema, InferInput, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { Schema } from '../core';\nimport { cloneRecord, defineOwnProperty } from '../safe-object';\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/**\n * Recursively merges `source` into `target`.\n * Plain objects are merged key-by-key; all other values take the `source` value.\n */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = cloneRecord(target);\n\n for (const [key, val] of Object.entries(source)) {\n defineOwnProperty(result, key, deepMerge(target[key], val));\n }\n\n return result;\n }\n\n return source;\n}\n\n/** All schemas must pass: intersection semantics. */\nexport class IntersectSchema<T extends readonly AnySchema[]> extends Schema<\n UnionToIntersection<InferOutput<T[number]>>,\n UnionToIntersection<InferInput<T[number]>>\n> {\n readonly schemas: T;\n\n protected override get _kind(): string {\n return 'intersect';\n }\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as T;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = this.schemas[i]._parseFullSync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(value, ctx);\n\n if (result.issues.length > 0) {\n state.issues.push(...result.issues);\n } else if (!state.hasOutput) {\n state.hasOutput = true;\n state.output = result.data;\n } else {\n state.output = deepMerge(state.output, result.data);\n }\n }\n\n return { data: state.output, issues: state.issues, typeOk: state.issues.length === 0 };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.definition()), kind: 'intersect' };\n }\n}\n"],"mappings":"A,6JAaA,SAASA,EAAU,EAAiB,EAA0B,CAC5D,GAAIC,EAAcC,CAAM,GAAKD,EAAcE,CAAM,EAAG,CAClD,IAAMC,EAASC,EAAYH,CAAM,EAEjC,IAAK,GAAM,CAACI,EAAKC,KAAQ,OAAO,QAAQJ,CAAM,EAC5CK,EAAkBJ,EAAQE,EAAKN,EAAUE,EAAOI,GAAMC,CAAG,CAAC,EAG5D,OAAOH,CACT,CAEA,OAAOD,CACT,CAGA,IAAaM,EAAb,cAAqEC,CAGnE,CACA,QAEA,IAAuB,OAAgB,CACrC,MAAO,WACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAGC,CAAO,CAAC,CAC3C,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQC,CACV,EAEA,IAAK,IAAIC,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAMV,EAAS,KAAK,QAAQU,EAAE,CAAC,eAAeD,EAAOE,CAAG,EAEpDX,EAAO,OAAO,OAAS,EACzBQ,EAAM,OAAO,KAAK,GAAGR,EAAO,MAAM,EACxBQ,EAAM,UAIhB,EAAM,OAASZ,EAAUY,EAAM,OAAQR,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAASA,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAMQ,EAAM,OAAQ,OAAQA,EAAM,OAAQ,OAAQA,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQC,CACV,EAEA,IAAK,IAAIC,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAMV,EAAS,MAAM,KAAK,QAAQU,EAAE,CAAC,gBAAgBD,EAAOE,CAAG,EAE3DX,EAAO,OAAO,OAAS,EACzBQ,EAAM,OAAO,KAAK,GAAGR,EAAO,MAAM,EACxBQ,EAAM,UAIhB,EAAM,OAASZ,EAAUY,EAAM,OAAQR,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAASA,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAMQ,EAAM,OAAQ,OAAQA,EAAM,OAAQ,OAAQA,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAMI,EAAE,WAAW,CAAC,EAAG,KAAM,WAAY,CACzG,CACF,E"}
1
+ {"version":3,"file":"intersect.js","names":["deepMerge","isPlainObject","target","source","merged","objectFromEntries","key","entry","defineOwnProperty","IntersectSchema","Schema","schemas","chain","all","schema","value","ctx","issues","results","result","invalid","ok"],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport { defineOwnProperty, objectFromEntries } from '../_object';\nimport { all, chain, invalid, type MaybePromise, ok, type ParseValue, type RunContext } from '../_parse';\nimport { Schema } from '../schema';\nimport type { InferInput, InferOutput, SchemaDescriptor, SchemaKind } from '../types';\nimport type { UnionMembers } from './union';\n\ntype UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/** Plain objects merge key by key; any other value is replaced by `source`. */\nfunction deepMerge(target: unknown, source: unknown): unknown {\n if (!isPlainObject(target) || !isPlainObject(source)) return source;\n\n const merged = objectFromEntries(Object.entries(target));\n\n for (const [key, entry] of Object.entries(source)) defineOwnProperty(merged, key, deepMerge(target[key], entry));\n\n return merged;\n}\n\n/** Every branch must parse; plain-object outputs are deep-merged. */\nexport class IntersectSchema<T extends UnionMembers> extends Schema<\n UnionToIntersection<InferOutput<T[number]>>,\n UnionToIntersection<InferInput<T[number]>>\n> {\n readonly schemas: T;\n\n constructor(schemas: T) {\n super();\n this.schemas = Object.freeze([...schemas]) as unknown as T;\n }\n\n override get kind(): SchemaKind {\n return 'intersect';\n }\n\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n return chain(all(this.schemas.map((schema) => schema._run(value, ctx))), (results) => {\n const issues = results.flatMap((result) => result.issues);\n\n if (issues.length > 0) return invalid(value, ...issues);\n\n return ok(results.map((result) => result.value).reduce(deepMerge));\n });\n }\n\n protected override _describe(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((schema) => schema.definition()), kind: 'intersect' };\n }\n}\n"],"mappings":"A,oOAWA,SAASA,EAAU,EAAiB,EAA0B,CAC5D,GAAI,CAACC,EAAcC,CAAM,GAAK,CAACD,EAAcE,CAAM,EAAG,OAAOA,EAE7D,IAAMC,EAASC,EAAkB,OAAO,QAAQH,CAAM,CAAC,EAEvD,IAAK,GAAM,CAACI,EAAKC,KAAU,OAAO,QAAQJ,CAAM,EAAGK,EAAkBJ,EAAQE,EAAKN,EAAUE,EAAOI,GAAMC,CAAK,CAAC,EAE/G,OAAOH,CACT,CAGA,IAAaK,EAAb,cAA6DC,CAG3D,CACA,QAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,OAAO,OAAO,CAAC,GAAGC,CAAO,CAAC,CAC3C,CAEA,IAAa,MAAmB,CAC9B,MAAO,WACT,CAEA,OAA0B,EAAgB,EAA2C,CACnF,OAAOC,EAAMC,EAAI,KAAK,QAAQ,IAAK,GAAWC,EAAO,KAAKC,EAAOC,CAAG,CAAC,CAAC,EAAI,GAAY,CACpF,IAAMC,EAASC,EAAQ,QAAS,GAAWC,EAAO,MAAM,EAIxD,OAFIF,EAAO,OAAS,EAAUG,EAAQL,EAAO,GAAGE,CAAM,EAE/CI,EAAGH,EAAQ,IAAK,GAAWC,EAAO,KAAK,CAAC,CAAC,OAAOnB,CAAS,CAAC,CACnE,CAAC,CACH,CAEA,WAAiD,CAC/C,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAWc,EAAO,WAAW,CAAC,EAAG,KAAM,WAAY,CACnH,CACF,E"}
@@ -1,2 +1,2 @@
1
- const e=require("../core.cjs");var t=class t extends e.Schema{_getter;_resolved;get _kind(){return`lazy`}constructor(e){super(),this._getter=e}_resolve(){return this._resolved??=this._getter()}_parse(e,t){let n=this._resolve()._parseFullSync(e,t);return n.issues.length===0?{data:n.data,issues:[],typeOk:!0}:{data:e,issues:n.issues,typeOk:!0}}async _parseAsync(e,t){let n=await this._resolve()._parseFullAsync(e,t);return n.issues.length===0?{data:n.data,issues:[],typeOk:!0}:{data:e,issues:n.issues,typeOk:!0}}_toDescriptorImpl(){return{...this._describeBase(),kind:`lazy`}}_construct(e){let n=new t(this._getter);return n.state=e,n}};exports.LazySchema=t;
1
+ const e=require("../_parse.cjs"),t=require("../schema.cjs");var n=class extends t.Schema{_getter;_resolved;constructor(e){super(),this._getter=e}get kind(){return`lazy`}_parse(t,n){return this._resolved??=this._getter(),e.chain(this._resolved._run(t,n),n=>n.issues.length===0?e.ok(n.value):e.invalid(t,...n.issues))}_describe(){return{...this._describeBase(),kind:`lazy`}}};exports.LazySchema=n;
2
2
  //# sourceMappingURL=lazy.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.cjs","names":["Schema","require_core","LazySchema","getter","result","value","ctx","next","state"],"sources":["../../src/schemas/lazy.ts"],"sourcesContent":["import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';\n\nimport { Schema } from '../core';\n\nexport class LazySchema<T, Input = T> extends Schema<T, Input> {\n private readonly _getter: () => Schema<T, Input>;\n private _resolved?: Schema<T, Input>;\n\n protected override get _kind(): string {\n return 'lazy';\n }\n\n constructor(getter: () => Schema<T, Input>) {\n super();\n this._getter = getter;\n }\n\n private _resolve(): Schema<T, Input> {\n const resolved = (this._resolved ??= this._getter());\n\n return resolved;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const result = this._resolve()._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const result = await this._resolve()._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n\n protected override _construct(state: SchemaState<any>): this {\n // Do not copy _resolved: each clone re-resolves from the getter on first use.\n const next = new LazySchema(this._getter) as this;\n\n next.state = state as any;\n\n return next;\n }\n}\n"],"mappings":"A,+BAIA,IAAaE,EAAb,MAAaA,UAAiCF,EAAAA,MAAiB,CAC7D,QACA,UAEA,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,YAAY,EAAgC,CAC1C,MAAM,EACN,KAAK,QAAUG,CACjB,CAEA,UAAqC,CAGnC,MAAO,MAFgB,YAAc,KAAK,QAAQ,CAGpD,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAAS,KAAK,SAAS,CAAC,CAAC,eAAeC,EAAOC,CAAG,EAIxD,OAFIF,EAAO,OAAO,SAAW,EAAU,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAE9E,CAAE,KAAMC,EAAO,OAAQD,EAAO,OAAQ,OAAQ,EAAK,CAC5D,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAAS,MAAM,KAAK,SAAS,CAAC,CAAC,gBAAgBC,EAAOC,CAAG,EAI/D,OAFIF,EAAO,OAAO,SAAW,EAAU,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAE9E,CAAE,KAAMC,EAAO,OAAQD,EAAO,OAAQ,OAAQ,EAAK,CAC5D,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,WAA8B,EAA+B,CAE3D,IAAMG,EAAO,IAAIL,EAAW,KAAK,OAAO,EAIxC,MAFA,GAAK,MAAQM,EAEND,CACT,CACF,E"}
1
+ {"version":3,"file":"lazy.cjs","names":["Schema","chain","ok","invalid","require__parse","require_schema","LazySchema","getter","value","ctx","result"],"sources":["../../src/schemas/lazy.ts"],"sourcesContent":["import { chain, invalid, type MaybePromise, ok, type ParseValue, type RunContext } from '../_parse';\nimport { Schema } from '../schema';\nimport type { AnySchema, SchemaDescriptor, SchemaKind } from '../types';\n\n/** Defers schema construction to the first parse, enabling recursive schemas. */\nexport class LazySchema<Output, Input = Output> extends Schema<Output, Input> {\n private readonly _getter: () => AnySchema;\n private _resolved?: AnySchema;\n\n constructor(getter: () => AnySchema) {\n super();\n this._getter = getter;\n }\n\n override get kind(): SchemaKind {\n return 'lazy';\n }\n\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n this._resolved ??= this._getter();\n\n return chain(this._resolved._run(value, ctx), (result) =>\n result.issues.length === 0 ? ok(result.value) : invalid(value, ...result.issues),\n );\n }\n\n /** Recursive structure has no finite descriptor; describes as `{ kind: 'lazy' }`. */\n protected override _describe(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n}\n"],"mappings":"A,4DAKA,IAAaM,EAAb,cAAwDN,EAAAA,MAAsB,CAC5E,QACA,UAEA,YAAY,EAAyB,CACnC,MAAM,EACN,KAAK,QAAUO,CACjB,CAEA,IAAa,MAAmB,CAC9B,MAAO,MACT,CAEA,OAA0B,EAAgB,EAA2C,CAGnF,MAFA,MAAK,YAAc,KAAK,QAAQ,EAEzBN,EAAAA,MAAM,KAAK,UAAU,KAAKO,EAAOC,CAAG,EAAI,GAC7CC,EAAO,OAAO,SAAW,EAAIR,EAAAA,GAAGQ,EAAO,KAAK,EAAIP,EAAAA,QAAQK,EAAO,GAAGE,EAAO,MAAM,CACjF,CACF,CAGA,WAAiD,CAC/C,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CACF,E"}
@@ -1,14 +1,14 @@
1
- import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';
2
- import { Schema } from '../core';
3
- export declare class LazySchema<T, Input = T> extends Schema<T, Input> {
1
+ import { type MaybePromise, type ParseValue, type RunContext } from '../_parse';
2
+ import { Schema } from '../schema';
3
+ import type { AnySchema, SchemaDescriptor, SchemaKind } from '../types';
4
+ /** Defers schema construction to the first parse, enabling recursive schemas. */
5
+ export declare class LazySchema<Output, Input = Output> extends Schema<Output, Input> {
4
6
  private readonly _getter;
5
7
  private _resolved?;
6
- protected get _kind(): string;
7
- constructor(getter: () => Schema<T, Input>);
8
- private _resolve;
9
- protected _parse(value: unknown, ctx: ParseContext): ParseValue;
10
- protected _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue>;
11
- protected _toDescriptorImpl(): SchemaDescriptor;
12
- protected _construct(state: SchemaState<any>): this;
8
+ constructor(getter: () => AnySchema);
9
+ get kind(): SchemaKind;
10
+ protected _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue>;
11
+ /** Recursive structure has no finite descriptor; describes as `{ kind: 'lazy' }`. */
12
+ protected _describe(): SchemaDescriptor;
13
13
  }
14
14
  //# sourceMappingURL=lazy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../../src/schemas/lazy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEvF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,qBAAa,UAAU,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,SAAS,CAAC,CAAmB;IAErC,cAAuB,KAAK,IAAI,MAAM,CAErC;gBAEW,MAAM,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;IAK1C,OAAO,CAAC,QAAQ;cAMG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU;cAQ/C,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;cAQzE,iBAAiB,IAAI,gBAAgB;cAIrC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI;CAQ7D"}
1
+ {"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../../src/schemas/lazy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,YAAY,EAAM,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAExE,iFAAiF;AACjF,qBAAa,UAAU,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAC3E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,SAAS,CAAC,CAAY;gBAElB,MAAM,EAAE,MAAM,SAAS;IAKnC,IAAa,IAAI,IAAI,UAAU,CAE9B;cAEkB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAQpF,qFAAqF;cAClE,SAAS,IAAI,gBAAgB;CAGjD"}
@@ -1,2 +1,2 @@
1
- import{Schema as e}from"../core.js";var t=class t extends e{_getter;_resolved;get _kind(){return`lazy`}constructor(e){super(),this._getter=e}_resolve(){return this._resolved??=this._getter()}_parse(e,t){let n=this._resolve()._parseFullSync(e,t);return n.issues.length===0?{data:n.data,issues:[],typeOk:!0}:{data:e,issues:n.issues,typeOk:!0}}async _parseAsync(e,t){let n=await this._resolve()._parseFullAsync(e,t);return n.issues.length===0?{data:n.data,issues:[],typeOk:!0}:{data:e,issues:n.issues,typeOk:!0}}_toDescriptorImpl(){return{...this._describeBase(),kind:`lazy`}}_construct(e){let n=new t(this._getter);return n.state=e,n}};export{t as LazySchema};
1
+ import{chain as e,invalid as t,ok as n}from"../_parse.js";import{Schema as r}from"../schema.js";var i=class extends r{_getter;_resolved;constructor(e){super(),this._getter=e}get kind(){return`lazy`}_parse(r,i){return this._resolved??=this._getter(),e(this._resolved._run(r,i),e=>e.issues.length===0?n(e.value):t(r,...e.issues))}_describe(){return{...this._describeBase(),kind:`lazy`}}};export{i as LazySchema};
2
2
  //# sourceMappingURL=lazy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.js","names":["LazySchema","Schema","getter","result","value","ctx","next","state"],"sources":["../../src/schemas/lazy.ts"],"sourcesContent":["import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';\n\nimport { Schema } from '../core';\n\nexport class LazySchema<T, Input = T> extends Schema<T, Input> {\n private readonly _getter: () => Schema<T, Input>;\n private _resolved?: Schema<T, Input>;\n\n protected override get _kind(): string {\n return 'lazy';\n }\n\n constructor(getter: () => Schema<T, Input>) {\n super();\n this._getter = getter;\n }\n\n private _resolve(): Schema<T, Input> {\n const resolved = (this._resolved ??= this._getter());\n\n return resolved;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const result = this._resolve()._parseFullSync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const result = await this._resolve()._parseFullAsync(value, ctx);\n\n if (result.issues.length === 0) return { data: result.data, issues: [], typeOk: true };\n\n return { data: value, issues: result.issues, typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n\n protected override _construct(state: SchemaState<any>): this {\n // Do not copy _resolved: each clone re-resolves from the getter on first use.\n const next = new LazySchema(this._getter) as this;\n\n next.state = state as any;\n\n return next;\n }\n}\n"],"mappings":"A,oCAIA,IAAaA,EAAb,MAAaA,UAAiCC,CAAiB,CAC7D,QACA,UAEA,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,YAAY,EAAgC,CAC1C,MAAM,EACN,KAAK,QAAUC,CACjB,CAEA,UAAqC,CAGnC,MAAO,MAFgB,YAAc,KAAK,QAAQ,CAGpD,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAMC,EAAS,KAAK,SAAS,CAAC,CAAC,eAAeC,EAAOC,CAAG,EAIxD,OAFIF,EAAO,OAAO,SAAW,EAAU,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAE9E,CAAE,KAAMC,EAAO,OAAQD,EAAO,OAAQ,OAAQ,EAAK,CAC5D,CAEA,MAAyB,YAAY,EAAgB,EAAwC,CAC3F,IAAMA,EAAS,MAAM,KAAK,SAAS,CAAC,CAAC,gBAAgBC,EAAOC,CAAG,EAI/D,OAFIF,EAAO,OAAO,SAAW,EAAU,CAAE,KAAMA,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAE9E,CAAE,KAAMC,EAAO,OAAQD,EAAO,OAAQ,OAAQ,EAAK,CAC5D,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,WAA8B,EAA+B,CAE3D,IAAMG,EAAO,IAAIN,EAAW,KAAK,OAAO,EAIxC,MAFA,GAAK,MAAQO,EAEND,CACT,CACF,E"}
1
+ {"version":3,"file":"lazy.js","names":["LazySchema","Schema","getter","chain","value","ctx","result","ok","invalid"],"sources":["../../src/schemas/lazy.ts"],"sourcesContent":["import { chain, invalid, type MaybePromise, ok, type ParseValue, type RunContext } from '../_parse';\nimport { Schema } from '../schema';\nimport type { AnySchema, SchemaDescriptor, SchemaKind } from '../types';\n\n/** Defers schema construction to the first parse, enabling recursive schemas. */\nexport class LazySchema<Output, Input = Output> extends Schema<Output, Input> {\n private readonly _getter: () => AnySchema;\n private _resolved?: AnySchema;\n\n constructor(getter: () => AnySchema) {\n super();\n this._getter = getter;\n }\n\n override get kind(): SchemaKind {\n return 'lazy';\n }\n\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n this._resolved ??= this._getter();\n\n return chain(this._resolved._run(value, ctx), (result) =>\n result.issues.length === 0 ? ok(result.value) : invalid(value, ...result.issues),\n );\n }\n\n /** Recursive structure has no finite descriptor; describes as `{ kind: 'lazy' }`. */\n protected override _describe(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n}\n"],"mappings":"A,gGAKA,IAAaA,EAAb,cAAwDC,CAAsB,CAC5E,QACA,UAEA,YAAY,EAAyB,CACnC,MAAM,EACN,KAAK,QAAUC,CACjB,CAEA,IAAa,MAAmB,CAC9B,MAAO,MACT,CAEA,OAA0B,EAAgB,EAA2C,CAGnF,MAFA,MAAK,YAAc,KAAK,QAAQ,EAEzBC,EAAM,KAAK,UAAU,KAAKC,EAAOC,CAAG,EAAI,GAC7CC,EAAO,OAAO,SAAW,EAAIC,EAAGD,EAAO,KAAK,EAAIE,EAAQJ,EAAO,GAAGE,EAAO,MAAM,CACjF,CACF,CAGA,WAAiD,CAC/C,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CACF,E"}
@@ -1,2 +1,2 @@
1
- const e=require("../errors.cjs"),t=require("../types.cjs"),n=require("../core.cjs");var r=class extends n.Schema{keySchema;valueSchema;get _kind(){return`map`}constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}_parse(n,r){if(!(n instanceof Map))return{data:n,issues:[{code:t.ErrorCode.invalid_type,message:r.messages.map.type(),path:[]}],typeOk:!1};let i=new Map,a=[],o=0;for(let[t,s]of n){let n=this.keySchema._parseFullSync(t,r),c=this.valueSchema._parseFullSync(s,r);n.issues.length>0&&a.push(...e.prependIssuePath(n.issues,o)),c.issues.length>0&&a.push(...e.prependIssuePath(c.issues,o)),n.issues.length===0&&c.issues.length===0&&i.set(n.data,c.data),o+=1}return{data:i,issues:a,typeOk:!0}}async _parseAsync(n,r){if(!(n instanceof Map))return{data:n,issues:[{code:t.ErrorCode.invalid_type,message:r.messages.map.type(),path:[]}],typeOk:!1};let i=[...n],a=await Promise.all(i.map(([e,t])=>Promise.all([this.keySchema._parseFullAsync(e,r),this.valueSchema._parseFullAsync(t,r)]))),o=[],s=new Map;for(let t=0;t<a.length;t++){let[n,r]=a[t];n.issues.length>0&&o.push(...e.prependIssuePath(n.issues,t)),r.issues.length>0&&o.push(...e.prependIssuePath(r.issues,t)),n.issues.length===0&&r.issues.length===0&&s.set(n.data,r.data)}return{data:s,issues:o,typeOk:!0}}min(n,r){return this._addConstraint((i,a)=>{let o=i;return o.size>=n?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(r??a.messages.map.min,{min:n,value:o}),{min:n})})}max(n,r){return this._addConstraint((i,a)=>{let o=i;return o.size<=n?null:e.fail(t.ErrorCode.too_big,e.resolveMessage(r??a.messages.map.max,{max:n,value:o}),{max:n})})}size(n,r){return this._addConstraint((i,a)=>{let o=i;return o.size===n?null:e.fail(t.ErrorCode.invalid_length,e.resolveMessage(r??a.messages.map.size,{exact:n,value:o}),{exact:n})})}nonEmpty(n){return this._addConstraint((r,i)=>r.size>0?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(n??i.messages.map.nonEmpty,{min:1}),{min:1}))}_toDescriptorImpl(){return{...this._describeBase(),key:this.keySchema.definition(),kind:`map`,value:this.valueSchema.definition()}}};exports.MapSchema=r;
1
+ const e=require("../_parse.cjs"),t=require("../schema.cjs"),n=require("../types.cjs");var r=class extends t.Schema{keySchema;valueSchema;constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}get kind(){return`map`}_parse(t,r){if(!(t instanceof Map))return e.invalid(t,e.issue(n.ErrorCode.invalid_type,r.messages.map.type()));let i=[...t].map(([t,n])=>e.all([this.keySchema._run(t,r),this.valueSchema._run(n,r)]));return e.chain(e.all(i),t=>{let n=[],r=new Map;return t.forEach(([t,i],a)=>{n.push(...e.prefixIssues(t.issues,a),...e.prefixIssues(i.issues,a)),t.issues.length===0&&i.issues.length===0&&r.set(t.value,i.value)}),{issues:n,typeOk:!0,value:r}})}min(t,r){return this._refine(e=>e.size>=t,(i,a)=>e.issue(n.ErrorCode.too_small,e.resolveMessage(r??a.map.min,{min:t,value:i}),{min:t}),n=>({minSize:e.atLeast(n.minSize,t)}))}max(t,r){return this._refine(e=>e.size<=t,(i,a)=>e.issue(n.ErrorCode.too_big,e.resolveMessage(r??a.map.max,{max:t,value:i}),{max:t}),n=>({maxSize:e.atMost(n.maxSize,t)}))}size(t,r){return this._refine(e=>e.size===t,(i,a)=>e.issue(n.ErrorCode.invalid_length,e.resolveMessage(r??a.map.size,{exact:t,value:i}),{exact:t}),n=>({maxSize:e.atMost(n.maxSize,t),minSize:e.atLeast(n.minSize,t)}))}nonEmpty(t){return this._refine(e=>e.size>0,(r,i)=>e.issue(n.ErrorCode.too_small,e.resolveMessage(t??i.map.nonEmpty,{value:r}),{min:1}),t=>({minSize:e.atLeast(t.minSize,1)}))}_describe(){return{...this._describeBase(),...this.state.meta,key:this.keySchema.definition(),kind:`map`,value:this.valueSchema.definition()}}};exports.MapSchema=r;
2
2
  //# sourceMappingURL=map.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"map.cjs","names":["Schema","ErrorCode","prependIssuePath","fail","resolveMessage","typed","require_errors","require_types","require_core","MapSchema","keySchema","valueSchema","value","ctx","out","issues","i","key","val","keyResult","valResult","entries","settled","typed","size","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.cjs","names":["Schema","invalid","issue","ErrorCode","all","chain","prefixIssues","resolveMessage","atLeast","atMost","require__parse","require_schema","require_types","MapSchema","keySchema","valueSchema","value","ctx","runs","key","entry","issues","output","results","index","size","message","m","current","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":"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"}