@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.
- package/README.md +1 -1
- package/dist/_dev.cjs.map +1 -1
- package/dist/_dev.js.map +1 -1
- package/dist/_object.cjs +2 -0
- package/dist/_object.cjs.map +1 -0
- package/dist/_object.d.ts +9 -0
- package/dist/_object.d.ts.map +1 -0
- package/dist/_object.js +2 -0
- package/dist/_object.js.map +1 -0
- package/dist/_parse.cjs +2 -0
- package/dist/_parse.cjs.map +1 -0
- package/dist/_parse.d.ts +38 -0
- package/dist/_parse.d.ts.map +1 -0
- package/dist/_parse.js +2 -0
- package/dist/_parse.js.map +1 -0
- package/dist/errors.cjs +2 -2
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +15 -26
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/json.cjs +2 -1
- package/dist/json.cjs.map +1 -0
- package/dist/json.d.ts +8 -1
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +2 -1
- package/dist/json.js.map +1 -0
- package/dist/messages.cjs +1 -1
- package/dist/messages.cjs.map +1 -1
- package/dist/messages.d.ts +7 -6
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +1 -1
- package/dist/messages.js.map +1 -1
- package/dist/predicates.cjs +2 -1
- package/dist/predicates.cjs.map +1 -0
- package/dist/predicates.d.ts +41 -2
- package/dist/predicates.d.ts.map +1 -1
- package/dist/predicates.js +2 -1
- package/dist/predicates.js.map +1 -0
- package/dist/s.cjs +1 -1
- package/dist/s.cjs.map +1 -1
- package/dist/s.d.ts +21 -22
- package/dist/s.d.ts.map +1 -1
- package/dist/s.js +1 -1
- package/dist/s.js.map +1 -1
- package/dist/schema.cjs +2 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.ts +93 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/schemas/array.cjs +1 -1
- package/dist/schemas/array.cjs.map +1 -1
- package/dist/schemas/array.d.ts +22 -32
- package/dist/schemas/array.d.ts.map +1 -1
- package/dist/schemas/array.js +1 -1
- package/dist/schemas/array.js.map +1 -1
- package/dist/schemas/bigint.cjs +1 -1
- package/dist/schemas/bigint.cjs.map +1 -1
- package/dist/schemas/bigint.d.ts +14 -18
- package/dist/schemas/bigint.d.ts.map +1 -1
- package/dist/schemas/bigint.js +1 -1
- package/dist/schemas/bigint.js.map +1 -1
- package/dist/schemas/date.cjs +1 -1
- package/dist/schemas/date.cjs.map +1 -1
- package/dist/schemas/date.d.ts +7 -6
- package/dist/schemas/date.d.ts.map +1 -1
- package/dist/schemas/date.js +1 -1
- package/dist/schemas/date.js.map +1 -1
- package/dist/schemas/discriminated-union.cjs +2 -0
- package/dist/schemas/discriminated-union.cjs.map +1 -0
- package/dist/schemas/discriminated-union.d.ts +39 -0
- package/dist/schemas/discriminated-union.d.ts.map +1 -0
- package/dist/schemas/discriminated-union.js +2 -0
- package/dist/schemas/discriminated-union.js.map +1 -0
- package/dist/schemas/intersect.cjs +1 -1
- package/dist/schemas/intersect.cjs.map +1 -1
- package/dist/schemas/intersect.d.ts +10 -9
- package/dist/schemas/intersect.d.ts.map +1 -1
- package/dist/schemas/intersect.js +1 -1
- package/dist/schemas/intersect.js.map +1 -1
- package/dist/schemas/lazy.cjs +1 -1
- package/dist/schemas/lazy.cjs.map +1 -1
- package/dist/schemas/lazy.d.ts +10 -10
- package/dist/schemas/lazy.d.ts.map +1 -1
- package/dist/schemas/lazy.js +1 -1
- package/dist/schemas/lazy.js.map +1 -1
- package/dist/schemas/map.cjs +1 -1
- package/dist/schemas/map.cjs.map +1 -1
- package/dist/schemas/map.d.ts +8 -7
- package/dist/schemas/map.d.ts.map +1 -1
- package/dist/schemas/map.js +1 -1
- package/dist/schemas/map.js.map +1 -1
- package/dist/schemas/number.cjs +1 -1
- package/dist/schemas/number.cjs.map +1 -1
- package/dist/schemas/number.d.ts +20 -27
- package/dist/schemas/number.d.ts.map +1 -1
- package/dist/schemas/number.js +1 -1
- package/dist/schemas/number.js.map +1 -1
- package/dist/schemas/object.cjs +1 -1
- package/dist/schemas/object.cjs.map +1 -1
- package/dist/schemas/object.d.ts +40 -88
- package/dist/schemas/object.d.ts.map +1 -1
- package/dist/schemas/object.js +1 -1
- package/dist/schemas/object.js.map +1 -1
- package/dist/schemas/primitives.cjs +2 -0
- package/dist/schemas/primitives.cjs.map +1 -0
- package/dist/schemas/primitives.d.ts +38 -0
- package/dist/schemas/primitives.d.ts.map +1 -0
- package/dist/schemas/primitives.js +2 -0
- package/dist/schemas/primitives.js.map +1 -0
- package/dist/schemas/record.cjs +1 -1
- package/dist/schemas/record.cjs.map +1 -1
- package/dist/schemas/record.d.ts +7 -8
- package/dist/schemas/record.d.ts.map +1 -1
- package/dist/schemas/record.js +1 -1
- package/dist/schemas/record.js.map +1 -1
- package/dist/schemas/set.cjs +1 -1
- package/dist/schemas/set.cjs.map +1 -1
- package/dist/schemas/set.d.ts +8 -7
- package/dist/schemas/set.d.ts.map +1 -1
- package/dist/schemas/set.js +1 -1
- package/dist/schemas/set.js.map +1 -1
- package/dist/schemas/string.cjs +1 -1
- package/dist/schemas/string.cjs.map +1 -1
- package/dist/schemas/string.d.ts +42 -98
- package/dist/schemas/string.d.ts.map +1 -1
- package/dist/schemas/string.js +1 -1
- package/dist/schemas/string.js.map +1 -1
- package/dist/schemas/tuple.cjs +1 -1
- package/dist/schemas/tuple.cjs.map +1 -1
- package/dist/schemas/tuple.d.ts +9 -9
- package/dist/schemas/tuple.d.ts.map +1 -1
- package/dist/schemas/tuple.js +1 -1
- package/dist/schemas/tuple.js.map +1 -1
- package/dist/schemas/union.cjs +1 -1
- package/dist/schemas/union.cjs.map +1 -1
- package/dist/schemas/union.d.ts +9 -7
- package/dist/schemas/union.d.ts.map +1 -1
- package/dist/schemas/union.js +1 -1
- package/dist/schemas/union.js.map +1 -1
- package/dist/spell.cjs +2 -2
- package/dist/spell.cjs.map +1 -1
- package/dist/spell.iife.js +2 -2
- package/dist/spell.iife.js.map +1 -1
- package/dist/spell.js +842 -1601
- package/dist/spell.js.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +151 -265
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/dist/core.cjs +0 -2
- package/dist/core.cjs.map +0 -1
- package/dist/core.d.ts +0 -101
- package/dist/core.d.ts.map +0 -1
- package/dist/core.js +0 -2
- package/dist/core.js.map +0 -1
- package/dist/formats.cjs +0 -2
- package/dist/formats.cjs.map +0 -1
- package/dist/formats.d.ts +0 -41
- package/dist/formats.d.ts.map +0 -1
- package/dist/formats.js +0 -2
- package/dist/formats.js.map +0 -1
- package/dist/json-schema.cjs +0 -2
- package/dist/json-schema.cjs.map +0 -1
- package/dist/json-schema.d.ts +0 -5
- package/dist/json-schema.d.ts.map +0 -1
- package/dist/json-schema.js +0 -2
- package/dist/json-schema.js.map +0 -1
- package/dist/safe-object.cjs +0 -2
- package/dist/safe-object.cjs.map +0 -1
- package/dist/safe-object.d.ts +0 -6
- package/dist/safe-object.d.ts.map +0 -1
- package/dist/safe-object.js +0 -2
- package/dist/safe-object.js.map +0 -1
- package/dist/schemas/boolean.cjs +0 -2
- package/dist/schemas/boolean.cjs.map +0 -1
- package/dist/schemas/boolean.d.ts +0 -9
- package/dist/schemas/boolean.d.ts.map +0 -1
- package/dist/schemas/boolean.js +0 -2
- package/dist/schemas/boolean.js.map +0 -1
- package/dist/schemas/enum.cjs +0 -2
- package/dist/schemas/enum.cjs.map +0 -1
- package/dist/schemas/enum.d.ts +0 -12
- package/dist/schemas/enum.d.ts.map +0 -1
- package/dist/schemas/enum.js +0 -2
- package/dist/schemas/enum.js.map +0 -1
- package/dist/schemas/instanceof.cjs +0 -2
- package/dist/schemas/instanceof.cjs.map +0 -1
- package/dist/schemas/instanceof.d.ts +0 -9
- package/dist/schemas/instanceof.d.ts.map +0 -1
- package/dist/schemas/instanceof.js +0 -2
- package/dist/schemas/instanceof.js.map +0 -1
- package/dist/schemas/literal.cjs +0 -2
- package/dist/schemas/literal.cjs.map +0 -1
- package/dist/schemas/literal.d.ts +0 -9
- package/dist/schemas/literal.d.ts.map +0 -1
- package/dist/schemas/literal.js +0 -2
- package/dist/schemas/literal.js.map +0 -1
- package/dist/schemas/never.cjs +0 -2
- package/dist/schemas/never.cjs.map +0 -1
- package/dist/schemas/never.d.ts +0 -8
- package/dist/schemas/never.d.ts.map +0 -1
- package/dist/schemas/never.js +0 -2
- package/dist/schemas/never.js.map +0 -1
- package/dist/schemas/raw-or.cjs +0 -2
- package/dist/schemas/raw-or.cjs.map +0 -1
- package/dist/schemas/raw-or.d.ts +0 -17
- package/dist/schemas/raw-or.d.ts.map +0 -1
- package/dist/schemas/raw-or.js +0 -2
- package/dist/schemas/raw-or.js.map +0 -1
- package/dist/schemas/variant.cjs +0 -2
- package/dist/schemas/variant.cjs.map +0 -1
- package/dist/schemas/variant.d.ts +0 -37
- package/dist/schemas/variant.d.ts.map +0 -1
- package/dist/schemas/variant.js +0 -2
- package/dist/schemas/variant.js.map +0 -1
- package/dist/tolerate.cjs +0 -2
- package/dist/tolerate.cjs.map +0 -1
- package/dist/tolerate.d.ts +0 -10
- package/dist/tolerate.d.ts.map +0 -1
- package/dist/tolerate.js +0 -2
- package/dist/tolerate.js.map +0 -1
- package/dist/validators.cjs +0 -2
- package/dist/validators.cjs.map +0 -1
- package/dist/validators.d.ts +0 -20
- package/dist/validators.d.ts.map +0 -1
- package/dist/validators.js +0 -2
- package/dist/validators.js.map +0 -1
package/dist/schemas/bigint.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
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","
|
|
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"}
|
package/dist/schemas/date.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../
|
|
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","
|
|
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"}
|
package/dist/schemas/date.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { Schema } from '../
|
|
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
|
-
|
|
5
|
-
|
|
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
|
|
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,
|
|
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"}
|
package/dist/schemas/date.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
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
|
package/dist/schemas/date.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","names":["DateSchema","Schema","value","
|
|
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("../
|
|
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","
|
|
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
|
|
2
|
-
import { Schema } from '../
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
10
|
-
protected
|
|
11
|
-
protected
|
|
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":"
|
|
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{
|
|
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","
|
|
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"}
|
package/dist/schemas/lazy.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../
|
|
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","
|
|
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"}
|
package/dist/schemas/lazy.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { Schema } from '../
|
|
3
|
-
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
protected
|
|
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,
|
|
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"}
|
package/dist/schemas/lazy.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
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
|
package/dist/schemas/lazy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy.js","names":["LazySchema","Schema","getter","
|
|
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"}
|
package/dist/schemas/map.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../
|
|
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
|
package/dist/schemas/map.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.cjs","names":["Schema","ErrorCode","
|
|
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":"A,sFA2BA,IAAaa,EAAb,cAAyEb,EAAAA,MAGvE,CACA,UACA,YAEA,YAAY,EAAc,EAAgB,CACxC,MAAM,EACN,KAAK,UAAYc,EACjB,KAAK,YAAcC,CACrB,CAEA,IAAa,MAAmB,CAC9B,MAAO,KACT,CAGA,OAA0B,EAAgB,EAA2C,CACnF,GAAI,EAAEC,aAAiB,KAAM,OAAOf,EAAAA,QAAQe,EAAOd,EAAAA,MAAMC,EAAAA,UAAU,aAAcc,EAAI,SAAS,IAAI,KAAK,CAAC,CAAC,EAEzG,IAAMC,EAAO,CAAC,GAAGF,CAAK,CAAC,CAAC,KAAK,CAACG,EAAKC,KACjChB,EAAAA,IAAI,CAAC,KAAK,UAAU,KAAKe,EAAKF,CAAG,EAAG,KAAK,YAAY,KAAKG,EAAOH,CAAG,CAAC,CAAC,CACxE,EAEA,OAAOZ,EAAAA,MAAMD,EAAAA,IAAIc,CAAI,EAAI,GAAY,CACnC,IAAMG,EAAkB,CAAC,EACnBC,EAAS,IAAI,IAQnB,OANAC,EAAQ,SAAS,CAACJ,EAAKC,GAAQ,IAAU,CACvCC,EAAO,KAAK,GAAGf,EAAAA,aAAaa,EAAK,OAAQK,CAAK,EAAG,GAAGlB,EAAAA,aAAac,EAAO,OAAQI,CAAK,CAAC,EAElFL,EAAK,OAAO,SAAW,GAAKC,EAAO,OAAO,SAAW,GAAGE,EAAO,IAAIH,EAAK,MAAOC,EAAO,KAAK,CACjG,CAAC,EAEM,CAAE,SAAQ,OAAQ,GAAM,MAAOE,CAAO,CAC/C,CAAC,CACH,CAEA,IAAI,EAAc,EAA0E,CAC1F,OAAO,KAAK,QACT,GAAUN,EAAM,MAAQS,GACxB,EAAO,IACNvB,EAAAA,MAAMC,EAAAA,UAAU,UAAWI,EAAAA,eAAemB,GAAWC,EAAE,IAAI,IAAK,CAAE,IAAKF,EAAM,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAK,CAAC,EACrG,IAAa,CAAE,QAASjB,EAAAA,QAAQoB,EAAQ,QAASH,CAAI,CAAE,EAC1D,CACF,CAEA,IAAI,EAAc,EAA0E,CAC1F,OAAO,KAAK,QACT,GAAUT,EAAM,MAAQS,GACxB,EAAO,IAAMvB,EAAAA,MAAMC,EAAAA,UAAU,QAASI,EAAAA,eAAemB,GAAWC,EAAE,IAAI,IAAK,CAAE,IAAKF,EAAM,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAK,CAAC,EAC/G,IAAa,CAAE,QAAShB,EAAAA,OAAOmB,EAAQ,QAASH,CAAI,CAAE,EACzD,CACF,CAEA,KAAK,EAAe,EAA4E,CAC9F,OAAO,KAAK,QACT,GAAUT,EAAM,OAASa,GACzB,EAAO,IAAM3B,EAAAA,MAAMC,EAAAA,UAAU,eAAgBI,EAAAA,eAAemB,GAAWC,EAAE,IAAI,KAAM,CAAE,QAAO,OAAM,CAAC,EAAG,CAAE,OAAM,CAAC,EAC/G,IAAa,CAAE,QAASlB,EAAAA,OAAOmB,EAAQ,QAASC,CAAK,EAAG,QAASrB,EAAAA,QAAQoB,EAAQ,QAASC,CAAK,CAAE,EACpG,CACF,CAEA,SAAS,EAA6D,CACpE,OAAO,KAAK,QACT,GAAUb,EAAM,KAAO,GACvB,EAAO,IAAMd,EAAAA,MAAMC,EAAAA,UAAU,UAAWI,EAAAA,eAAemB,GAAWC,EAAE,IAAI,SAAU,CAAE,OAAM,CAAC,EAAG,CAAE,IAAK,CAAE,CAAC,EACxG,IAAa,CAAE,QAASnB,EAAAA,QAAQoB,EAAQ,QAAS,CAAC,CAAE,EACvD,CACF,CAEA,WAAiD,CAC/C,MAAO,CACL,GAAG,KAAK,cAAc,EACtB,GAAI,KAAK,MAAM,KACf,IAAK,KAAK,UAAU,WAAW,EAC/B,KAAM,MACN,MAAO,KAAK,YAAY,WAAW,CACrC,CACF,CACF,E"}
|