@vielzeug/spell 1.1.0
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 +68 -0
- package/dist/_dev.cjs +2 -0
- package/dist/_dev.cjs.map +1 -0
- package/dist/_dev.d.ts +2 -0
- package/dist/_dev.d.ts.map +1 -0
- package/dist/_dev.js +2 -0
- package/dist/_dev.js.map +1 -0
- package/dist/core.cjs +2 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.ts +108 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -0
- package/dist/errors.cjs +3 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.ts +53 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +3 -0
- package/dist/errors.js.map +1 -0
- package/dist/formats.cjs +2 -0
- package/dist/formats.cjs.map +1 -0
- package/dist/formats.d.ts +41 -0
- package/dist/formats.d.ts.map +1 -0
- package/dist/formats.js +2 -0
- package/dist/formats.js.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/json-schema.cjs +2 -0
- package/dist/json-schema.cjs.map +1 -0
- package/dist/json-schema.d.ts +15 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +2 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/messages.cjs +2 -0
- package/dist/messages.cjs.map +1 -0
- package/dist/messages.d.ts +228 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +2 -0
- package/dist/messages.js.map +1 -0
- package/dist/s.cjs +2 -0
- package/dist/s.cjs.map +1 -0
- package/dist/s.d.ts +65 -0
- package/dist/s.d.ts.map +1 -0
- package/dist/s.js +2 -0
- package/dist/s.js.map +1 -0
- package/dist/safe-object.cjs +2 -0
- package/dist/safe-object.cjs.map +1 -0
- package/dist/safe-object.d.ts +6 -0
- package/dist/safe-object.d.ts.map +1 -0
- package/dist/safe-object.js +2 -0
- package/dist/safe-object.js.map +1 -0
- package/dist/schemas/array.cjs +2 -0
- package/dist/schemas/array.cjs.map +1 -0
- package/dist/schemas/array.d.ts +49 -0
- package/dist/schemas/array.d.ts.map +1 -0
- package/dist/schemas/array.js +2 -0
- package/dist/schemas/array.js.map +1 -0
- package/dist/schemas/bigint.cjs +2 -0
- package/dist/schemas/bigint.cjs.map +1 -0
- package/dist/schemas/bigint.d.ts +42 -0
- package/dist/schemas/bigint.d.ts.map +1 -0
- package/dist/schemas/bigint.js +2 -0
- package/dist/schemas/bigint.js.map +1 -0
- package/dist/schemas/boolean.cjs +2 -0
- package/dist/schemas/boolean.cjs.map +1 -0
- package/dist/schemas/boolean.d.ts +18 -0
- package/dist/schemas/boolean.d.ts.map +1 -0
- package/dist/schemas/boolean.js +2 -0
- package/dist/schemas/boolean.js.map +1 -0
- package/dist/schemas/date.cjs +2 -0
- package/dist/schemas/date.cjs.map +1 -0
- package/dist/schemas/date.d.ts +25 -0
- package/dist/schemas/date.d.ts.map +1 -0
- package/dist/schemas/date.js +2 -0
- package/dist/schemas/date.js.map +1 -0
- package/dist/schemas/enum.cjs +2 -0
- package/dist/schemas/enum.cjs.map +1 -0
- package/dist/schemas/enum.d.ts +14 -0
- package/dist/schemas/enum.d.ts.map +1 -0
- package/dist/schemas/enum.js +2 -0
- package/dist/schemas/enum.js.map +1 -0
- package/dist/schemas/instanceof.cjs +2 -0
- package/dist/schemas/instanceof.cjs.map +1 -0
- package/dist/schemas/instanceof.d.ts +11 -0
- package/dist/schemas/instanceof.d.ts.map +1 -0
- package/dist/schemas/instanceof.js +2 -0
- package/dist/schemas/instanceof.js.map +1 -0
- package/dist/schemas/intersect.cjs +2 -0
- package/dist/schemas/intersect.cjs.map +1 -0
- package/dist/schemas/intersect.d.ts +16 -0
- package/dist/schemas/intersect.d.ts.map +1 -0
- package/dist/schemas/intersect.js +2 -0
- package/dist/schemas/intersect.js.map +1 -0
- package/dist/schemas/lazy.cjs +2 -0
- package/dist/schemas/lazy.cjs.map +1 -0
- package/dist/schemas/lazy.d.ts +16 -0
- package/dist/schemas/lazy.d.ts.map +1 -0
- package/dist/schemas/lazy.js +2 -0
- package/dist/schemas/lazy.js.map +1 -0
- package/dist/schemas/literal.cjs +2 -0
- package/dist/schemas/literal.cjs.map +1 -0
- package/dist/schemas/literal.d.ts +11 -0
- package/dist/schemas/literal.d.ts.map +1 -0
- package/dist/schemas/literal.js +2 -0
- package/dist/schemas/literal.js.map +1 -0
- package/dist/schemas/map.cjs +2 -0
- package/dist/schemas/map.cjs.map +1 -0
- package/dist/schemas/map.d.ts +29 -0
- package/dist/schemas/map.d.ts.map +1 -0
- package/dist/schemas/map.js +2 -0
- package/dist/schemas/map.js.map +1 -0
- package/dist/schemas/never.cjs +2 -0
- package/dist/schemas/never.cjs.map +1 -0
- package/dist/schemas/never.d.ts +10 -0
- package/dist/schemas/never.d.ts.map +1 -0
- package/dist/schemas/never.js +2 -0
- package/dist/schemas/never.js.map +1 -0
- package/dist/schemas/number.cjs +2 -0
- package/dist/schemas/number.cjs.map +1 -0
- package/dist/schemas/number.d.ts +50 -0
- package/dist/schemas/number.d.ts.map +1 -0
- package/dist/schemas/number.js +2 -0
- package/dist/schemas/number.js.map +1 -0
- package/dist/schemas/object.cjs +2 -0
- package/dist/schemas/object.cjs.map +1 -0
- package/dist/schemas/object.d.ts +95 -0
- package/dist/schemas/object.d.ts.map +1 -0
- package/dist/schemas/object.js +2 -0
- package/dist/schemas/object.js.map +1 -0
- package/dist/schemas/pipe.d.ts +2 -0
- package/dist/schemas/pipe.d.ts.map +1 -0
- package/dist/schemas/raw-or.cjs +2 -0
- package/dist/schemas/raw-or.cjs.map +1 -0
- package/dist/schemas/raw-or.d.ts +17 -0
- package/dist/schemas/raw-or.d.ts.map +1 -0
- package/dist/schemas/raw-or.js +2 -0
- package/dist/schemas/raw-or.js.map +1 -0
- package/dist/schemas/record.cjs +2 -0
- package/dist/schemas/record.cjs.map +1 -0
- package/dist/schemas/record.d.ts +16 -0
- package/dist/schemas/record.d.ts.map +1 -0
- package/dist/schemas/record.js +2 -0
- package/dist/schemas/record.js.map +1 -0
- package/dist/schemas/set.cjs +2 -0
- package/dist/schemas/set.cjs.map +1 -0
- package/dist/schemas/set.d.ts +28 -0
- package/dist/schemas/set.d.ts.map +1 -0
- package/dist/schemas/set.js +2 -0
- package/dist/schemas/set.js.map +1 -0
- package/dist/schemas/string.cjs +2 -0
- package/dist/schemas/string.cjs.map +1 -0
- package/dist/schemas/string.d.ts +155 -0
- package/dist/schemas/string.d.ts.map +1 -0
- package/dist/schemas/string.js +2 -0
- package/dist/schemas/string.js.map +1 -0
- package/dist/schemas/tuple.cjs +2 -0
- package/dist/schemas/tuple.cjs.map +1 -0
- package/dist/schemas/tuple.d.ts +22 -0
- package/dist/schemas/tuple.d.ts.map +1 -0
- package/dist/schemas/tuple.js +2 -0
- package/dist/schemas/tuple.js.map +1 -0
- package/dist/schemas/union.cjs +2 -0
- package/dist/schemas/union.cjs.map +1 -0
- package/dist/schemas/union.d.ts +13 -0
- package/dist/schemas/union.d.ts.map +1 -0
- package/dist/schemas/union.js +2 -0
- package/dist/schemas/union.js.map +1 -0
- package/dist/schemas/variant.cjs +2 -0
- package/dist/schemas/variant.cjs.map +1 -0
- package/dist/schemas/variant.d.ts +26 -0
- package/dist/schemas/variant.d.ts.map +1 -0
- package/dist/schemas/variant.js +2 -0
- package/dist/schemas/variant.js.map +1 -0
- package/dist/spell.cjs +3 -0
- package/dist/spell.cjs.map +1 -0
- package/dist/spell.iife.js +3 -0
- package/dist/spell.iife.js.map +1 -0
- package/dist/spell.js +3 -0
- package/dist/spell.js.map +1 -0
- package/dist/types.cjs +2 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.ts +326 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.cjs +2 -0
- package/dist/validators.cjs.map +1 -0
- package/dist/validators.d.ts +20 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +2 -0
- package/dist/validators.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-object.cjs","names":[],"sources":["../src/safe-object.ts"],"sourcesContent":["export const UNSAFE_OBJECT_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\nexport function isUnsafeObjectKey(key: string): boolean {\n return UNSAFE_OBJECT_KEYS.has(key);\n}\n\nexport function defineOwnProperty<T>(target: Record<string, T>, key: string, value: T): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n}\n\nexport function objectFromEntries<T>(entries: Iterable<readonly [string, T]>): Record<string, T> {\n const out: Record<string, T> = {};\n\n for (const [key, value] of entries) defineOwnProperty(out, key, value);\n\n return out;\n}\n\nexport function cloneRecord<T>(source: Record<string, T>): Record<string, T> {\n return objectFromEntries(Object.entries(source));\n}\n"],"mappings":"AAAA,IAAa,EAAqB,IAAI,IAAI,CAAC,YAAa,cAAe,WAAW,CAAC,EAEnF,SAAgB,EAAkB,EAAsB,CACtD,OAAO,EAAmB,IAAI,CAAG,CACnC,CAEA,SAAgB,EAAqB,EAA2B,EAAa,EAAgB,CAC3F,OAAO,eAAe,EAAQ,EAAK,CACjC,aAAc,GACd,WAAY,GACZ,QACA,SAAU,EACZ,CAAC,CACH,CAEA,SAAgB,EAAqB,EAA4D,CAC/F,IAAM,EAAyB,CAAC,EAEhC,IAAK,GAAM,CAAC,EAAK,KAAU,EAAS,EAAkB,EAAK,EAAK,CAAK,EAErE,OAAO,CACT,CAEA,SAAgB,EAAe,EAA8C,CAC3E,OAAO,EAAkB,OAAO,QAAQ,CAAM,CAAC,CACjD"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const UNSAFE_OBJECT_KEYS: Set<string>;
|
|
2
|
+
export declare function isUnsafeObjectKey(key: string): boolean;
|
|
3
|
+
export declare function defineOwnProperty<T>(target: Record<string, T>, key: string, value: T): void;
|
|
4
|
+
export declare function objectFromEntries<T>(entries: Iterable<readonly [string, T]>): Record<string, T>;
|
|
5
|
+
export declare function cloneRecord<T>(source: Record<string, T>): Record<string, T>;
|
|
6
|
+
//# sourceMappingURL=safe-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-object.d.ts","sourceRoot":"","sources":["../src/safe-object.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,aAAqD,CAAC;AAErF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAO3F;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAM/F;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAE3E"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=new Set([`__proto__`,`constructor`,`prototype`]);function t(t){return e.has(t)}function n(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0})}function r(e){let t={};for(let[r,i]of e)n(t,r,i);return t}function i(e){return r(Object.entries(e))}export{e as UNSAFE_OBJECT_KEYS,i as cloneRecord,n as defineOwnProperty,t as isUnsafeObjectKey,r as objectFromEntries};
|
|
2
|
+
//# sourceMappingURL=safe-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-object.js","names":[],"sources":["../src/safe-object.ts"],"sourcesContent":["export const UNSAFE_OBJECT_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\nexport function isUnsafeObjectKey(key: string): boolean {\n return UNSAFE_OBJECT_KEYS.has(key);\n}\n\nexport function defineOwnProperty<T>(target: Record<string, T>, key: string, value: T): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n}\n\nexport function objectFromEntries<T>(entries: Iterable<readonly [string, T]>): Record<string, T> {\n const out: Record<string, T> = {};\n\n for (const [key, value] of entries) defineOwnProperty(out, key, value);\n\n return out;\n}\n\nexport function cloneRecord<T>(source: Record<string, T>): Record<string, T> {\n return objectFromEntries(Object.entries(source));\n}\n"],"mappings":"AAAA,IAAa,EAAqB,IAAI,IAAI,CAAC,YAAa,cAAe,WAAW,CAAC,EAEnF,SAAgB,EAAkB,EAAsB,CACtD,OAAO,EAAmB,IAAI,CAAG,CACnC,CAEA,SAAgB,EAAqB,EAA2B,EAAa,EAAgB,CAC3F,OAAO,eAAe,EAAQ,EAAK,CACjC,aAAc,GACd,WAAY,GACZ,QACA,SAAU,EACZ,CAAC,CACH,CAEA,SAAgB,EAAqB,EAA4D,CAC/F,IAAM,EAAyB,CAAC,EAEhC,IAAK,GAAM,CAAC,EAAK,KAAU,EAAS,EAAkB,EAAK,EAAK,CAAK,EAErE,OAAO,CACT,CAEA,SAAgB,EAAe,EAA8C,CAC3E,OAAO,EAAkB,OAAO,QAAQ,CAAM,CAAC,CACjD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../types.cjs"),t=require("../errors.cjs"),n=require("../messages.cjs"),r=require("../core.cjs");var i=class i extends r.Schema{itemSchema;get _kind(){return`array`}constructor(e){super(),this.itemSchema=e}_parseItemsSync(e,n){let r=[],i=[];for(let a=0;a<e.length;a++){let o=this.itemSchema._parseFullSync(e[a],n);o.issues.length===0?i.push(o.data):(r.push(...t.prependIssuePath(o.issues,a)),i.push(e[a]))}return{data:i,issues:r}}_parse(n,r){if(!Array.isArray(n))return{data:n,issues:t.fail(e.ErrorCode.invalid_type,r.messages.array.type()),typeOk:!1};let{data:i,issues:a}=this._parseItemsSync(n,r);return{data:i,issues:a,typeOk:!0}}async parseAsync(n,i){let a=i??r._makeCtx();return this._withCatchAsync(async()=>{let r=this._prepareInput(n);if(r.skip)return r.value;let i=r.value;if(!Array.isArray(i))throw new t.SpellValidationError(t.fail(e.ErrorCode.invalid_type,a.messages.array.type()));let o=await Promise.all(i.map(e=>this.itemSchema._parseFullAsync(e,a))),s=[],c=[];for(let e=0;e<o.length;e++){let n=o[e];n.issues.length===0?c.push(n.data):(s.push(...t.prependIssuePath(n.issues,e)),c.push(i[e]))}let l=await this._runValidatorsAsync(c,a),u=[...s,...l];if(u.length>0)throw new t.SpellValidationError(u);return this._runPostprocessors(c)})}min(r,i=e=>n._messages().array.min(e)){return this._addConstraint((n,a)=>n.length>=r?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(i,{min:r,value:n}),{min:r}),e=>{let t=e;return{...t,minItems:t.minItems===void 0?r:Math.max(t.minItems,r)}})}max(r,i=e=>n._messages().array.max(e)){return this._addConstraint((n,a)=>n.length<=r?null:t.fail(e.ErrorCode.too_big,t.resolveMessage(i,{max:r,value:n}),{max:r}),e=>{let t=e;return{...t,maxItems:t.maxItems===void 0?r:Math.min(t.maxItems,r)}})}length(r,i=e=>n._messages().array.length(e)){return this._addConstraint((n,a)=>n.length===r?null:t.fail(e.ErrorCode.invalid_length,t.resolveMessage(i,{exact:r,value:n}),{exact:r}),e=>({...e,maxItems:r,minItems:r}))}nonEmpty(e=()=>n._messages().array.nonEmpty()){return this.min(1,e)}unique(r,i=()=>n._messages().array.unique()){let a=typeof r==`function`&&r.length===2,o=a?r:null,s=a?i:typeof r==`function`?r:()=>n._messages().array.unique();return this._addConstraint((n,r)=>{let i=n,a;return a=o?i.every((e,t)=>i.slice(0,t).every(t=>!o(e,t))):new Set(i).size===i.length,a?null:t.fail(e.ErrorCode.invalid_unique,t.resolveMessage(s,{value:i}),{unique:!0})})}_toDescriptorImpl(){let e=this._annotations;return{...this._describeBase(),...e.maxItems===void 0?{}:{maxItems:e.maxItems},...e.minItems===void 0?{}:{minItems:e.minItems},items:this.itemSchema.toDescriptor(),kind:`array`}}_walk(e){let t=this.itemSchema.walk(e);return e.array?e.array(this,t):super._walk(e)}_equalsImpl(e){if(!(e instanceof i))return!1;let t=e,n=this._annotations,r=e._annotations;return this.itemSchema.equals(t.itemSchema)&&n.minItems===r.minItems&&n.maxItems===r.maxItems}};exports.ArraySchema=i;
|
|
2
|
+
//# sourceMappingURL=array.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.cjs","names":[],"sources":["../../src/schemas/array.ts"],"sourcesContent":["import type { Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema, SpellValidationError, _makeCtx, fail, prependIssuePath, resolveMessage } from '../core';\nimport { _messages } from '../messages';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface ArrayAnnotations extends Record<string, unknown> {\n maxItems?: number;\n minItems?: number;\n}\n\nexport class ArraySchema<T> extends Schema<T[]> {\n readonly itemSchema: Schema<T, any>;\n\n protected override get _kind(): string {\n return 'array';\n }\n\n constructor(itemSchema: Schema<T, any>) {\n super();\n this.itemSchema = itemSchema;\n }\n\n private _parseItemsSync(items: unknown[], ctx: ParseContext): { data: T[]; issues: Issue[] } {\n const issues: Issue[] = [];\n const parsed: T[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const result = this.itemSchema._parseFullSync(items[i], ctx);\n\n if (result.issues.length === 0) {\n parsed.push(result.data as T);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n parsed.push(items[i] as T);\n }\n }\n\n return { data: parsed, issues };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!Array.isArray(value)) {\n return { data: value, issues: fail(ErrorCode.invalid_type, ctx.messages.array.type()), typeOk: false };\n }\n\n const { data: items, issues } = this._parseItemsSync(value, ctx);\n\n return { data: items, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<T[]> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as T[];\n\n const raw = prepared.value;\n\n if (!Array.isArray(raw)) {\n throw new SpellValidationError(fail(ErrorCode.invalid_type, c.messages.array.type()));\n }\n\n const settled = await Promise.all(raw.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed: T[] = [];\n\n for (let i = 0; i < settled.length; i++) {\n const result = settled[i];\n\n if (result.issues.length === 0) {\n parsed.push(result.data as T);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n parsed.push(raw[i] as T);\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(parsed, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(parsed) as T[];\n });\n }\n\n min(\n length: number,\n message: MessageFn<{ min: number; value: unknown[] }> = (ctx) => _messages().array.min(ctx),\n ): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as unknown[]).length >= length) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message, { min: length, value: value as unknown[] }), {\n min: length,\n });\n },\n (current) => {\n const ann = current as ArrayAnnotations;\n\n return {\n ...ann,\n minItems: ann.minItems === undefined ? length : Math.max(ann.minItems, length),\n };\n },\n );\n }\n\n max(\n length: number,\n message: MessageFn<{ max: number; value: unknown[] }> = (ctx) => _messages().array.max(ctx),\n ): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as unknown[]).length <= length) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message, { max: length, value: value as unknown[] }), {\n max: length,\n });\n },\n (current) => {\n const ann = current as ArrayAnnotations;\n\n return {\n ...ann,\n maxItems: ann.maxItems === undefined ? length : Math.min(ann.maxItems, length),\n };\n },\n );\n }\n\n length(\n exact: number,\n message: MessageFn<{ exact: number; value: unknown[] }> = (ctx) => _messages().array.length(ctx),\n ): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as unknown[]).length === exact) return null;\n\n return fail(ErrorCode.invalid_length, resolveMessage(message, { exact, value: value as unknown[] }), { exact });\n },\n (ann) => ({ ...ann, maxItems: exact, minItems: exact }),\n );\n }\n\n nonEmpty(message: MessageFn<{ min: number; value: unknown[] }> = () => _messages().array.nonEmpty()): this {\n return this.min(1, message);\n }\n\n /**\n * Validates that all array elements are unique.\n *\n * **Default behaviour:** Uniqueness is checked using JavaScript `Set` semantics, which means\n * **referential equality** for objects. Two structurally identical objects such as\n * `{ id: 1 }` and `{ id: 1 }` are considered different values and will not be\n * flagged as duplicates.\n *\n * **Custom equality:** Pass an `equalsFn` to use structural or domain-specific comparison\n * logic (e.g. compare by a specific field, or use deep equality).\n *\n * @example\n * s.array(s.object({ id: s.number() })).unique((a, b) => a.id === b.id)\n */\n unique(\n equalsFnOrMessage?: ((a: T, b: T) => boolean) | MessageFn<{ value: unknown[] }>,\n message: MessageFn<{ value: unknown[] }> = () => _messages().array.unique(),\n ): this {\n const isCustomEqualsFn = typeof equalsFnOrMessage === 'function' && equalsFnOrMessage.length === 2;\n const equalsFn = isCustomEqualsFn ? (equalsFnOrMessage as (a: T, b: T) => boolean) : null;\n const resolvedMessage = isCustomEqualsFn\n ? message\n : typeof equalsFnOrMessage === 'function'\n ? (equalsFnOrMessage as MessageFn<{ value: unknown[] }>)\n : () => _messages().array.unique();\n\n return this._addConstraint((value, _ctx) => {\n const typed = value as T[];\n let isUnique: boolean;\n\n if (equalsFn) {\n isUnique = typed.every((a, i) => typed.slice(0, i).every((b) => !equalsFn(a, b)));\n } else {\n isUnique = new Set(typed).size === typed.length;\n }\n\n if (isUnique) return null;\n\n return fail(ErrorCode.invalid_unique, resolveMessage(resolvedMessage, { value: typed as unknown[] }), {\n unique: true,\n });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as ArrayAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.maxItems !== undefined ? { maxItems: ann.maxItems } : {}),\n ...(ann.minItems !== undefined ? { minItems: ann.minItems } : {}),\n items: this.itemSchema.toDescriptor(),\n kind: 'array',\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.array) return visitor.array(this, item);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n if (!(other instanceof ArraySchema)) return false;\n\n const o = other as ArraySchema<any>;\n\n const annotations = this._annotations as ArrayAnnotations;\n const otherAnnotations = other._annotations as ArrayAnnotations;\n\n return (\n this.itemSchema.equals(o.itemSchema as import('../core').AnySchema) &&\n annotations.minItems === otherAnnotations.minItems &&\n annotations.maxItems === otherAnnotations.maxItems\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';
|
|
2
|
+
import { Schema } from '../core';
|
|
3
|
+
export declare class ArraySchema<T> extends Schema<T[]> {
|
|
4
|
+
readonly itemSchema: Schema<T, any>;
|
|
5
|
+
protected get _kind(): string;
|
|
6
|
+
constructor(itemSchema: Schema<T, any>);
|
|
7
|
+
private _parseItemsSync;
|
|
8
|
+
protected _parse(value: unknown, ctx: ParseContext): ParseValue;
|
|
9
|
+
parseAsync(value: unknown, ctx?: ParseContext): Promise<T[]>;
|
|
10
|
+
min(length: number, message?: MessageFn<{
|
|
11
|
+
min: number;
|
|
12
|
+
value: unknown[];
|
|
13
|
+
}>): this;
|
|
14
|
+
max(length: number, message?: MessageFn<{
|
|
15
|
+
max: number;
|
|
16
|
+
value: unknown[];
|
|
17
|
+
}>): this;
|
|
18
|
+
length(exact: number, message?: MessageFn<{
|
|
19
|
+
exact: number;
|
|
20
|
+
value: unknown[];
|
|
21
|
+
}>): this;
|
|
22
|
+
nonEmpty(message?: MessageFn<{
|
|
23
|
+
min: number;
|
|
24
|
+
value: unknown[];
|
|
25
|
+
}>): this;
|
|
26
|
+
/**
|
|
27
|
+
* Validates that all array elements are unique.
|
|
28
|
+
*
|
|
29
|
+
* **Default behaviour:** Uniqueness is checked using JavaScript `Set` semantics, which means
|
|
30
|
+
* **referential equality** for objects. Two structurally identical objects such as
|
|
31
|
+
* `{ id: 1 }` and `{ id: 1 }` are considered different values and will not be
|
|
32
|
+
* flagged as duplicates.
|
|
33
|
+
*
|
|
34
|
+
* **Custom equality:** Pass an `equalsFn` to use structural or domain-specific comparison
|
|
35
|
+
* logic (e.g. compare by a specific field, or use deep equality).
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* s.array(s.object({ id: s.number() })).unique((a, b) => a.id === b.id)
|
|
39
|
+
*/
|
|
40
|
+
unique(equalsFnOrMessage?: ((a: T, b: T) => boolean) | MessageFn<{
|
|
41
|
+
value: unknown[];
|
|
42
|
+
}>, message?: MessageFn<{
|
|
43
|
+
value: unknown[];
|
|
44
|
+
}>): this;
|
|
45
|
+
protected _toDescriptorImpl(): SchemaDescriptor;
|
|
46
|
+
protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
|
|
47
|
+
protected _equalsImpl(other: import('../core').AnySchema): boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/schemas/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5F,OAAO,EAAa,MAAM,EAA0E,MAAM,SAAS,CAAC;AAUpH,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEpC,cAAuB,KAAK,IAAI,MAAM,CAErC;gBAEW,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;IAKtC,OAAO,CAAC,eAAe;cAkBJ,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU;IAUzD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAuC3E,GAAG,CACD,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAuC,GAC1F,IAAI;IAoBP,GAAG,CACD,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAuC,GAC1F,IAAI;IAoBP,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAA0C,GAC/F,IAAI;IAWP,QAAQ,CAAC,OAAO,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAsC,GAAG,IAAI;IAI1G;;;;;;;;;;;;;OAaG;IACH,MAAM,CACJ,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;QAAE,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,EAC/E,OAAO,GAAE,SAAS,CAAC;QAAE,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAoC,GAC1E,IAAI;cA2BY,iBAAiB,IAAI,gBAAgB;cAYrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;cAQ9D,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO;CAc5E"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e}from"../types.js";import{SpellValidationError as t,fail as n,prependIssuePath as r,resolveMessage as i}from"../errors.js";import{_messages as a}from"../messages.js";import{Schema as o,_makeCtx as s}from"../core.js";var c=class c extends o{itemSchema;get _kind(){return`array`}constructor(e){super(),this.itemSchema=e}_parseItemsSync(e,t){let n=[],i=[];for(let a=0;a<e.length;a++){let o=this.itemSchema._parseFullSync(e[a],t);o.issues.length===0?i.push(o.data):(n.push(...r(o.issues,a)),i.push(e[a]))}return{data:i,issues:n}}_parse(t,r){if(!Array.isArray(t))return{data:t,issues:n(e.invalid_type,r.messages.array.type()),typeOk:!1};let{data:i,issues:a}=this._parseItemsSync(t,r);return{data:i,issues:a,typeOk:!0}}async parseAsync(i,a){let o=a??s();return this._withCatchAsync(async()=>{let a=this._prepareInput(i);if(a.skip)return a.value;let s=a.value;if(!Array.isArray(s))throw new t(n(e.invalid_type,o.messages.array.type()));let c=await Promise.all(s.map(e=>this.itemSchema._parseFullAsync(e,o))),l=[],u=[];for(let e=0;e<c.length;e++){let t=c[e];t.issues.length===0?u.push(t.data):(l.push(...r(t.issues,e)),u.push(s[e]))}let d=await this._runValidatorsAsync(u,o),f=[...l,...d];if(f.length>0)throw new t(f);return this._runPostprocessors(u)})}min(t,r=e=>a().array.min(e)){return this._addConstraint((a,o)=>a.length>=t?null:n(e.too_small,i(r,{min:t,value:a}),{min:t}),e=>{let n=e;return{...n,minItems:n.minItems===void 0?t:Math.max(n.minItems,t)}})}max(t,r=e=>a().array.max(e)){return this._addConstraint((a,o)=>a.length<=t?null:n(e.too_big,i(r,{max:t,value:a}),{max:t}),e=>{let n=e;return{...n,maxItems:n.maxItems===void 0?t:Math.min(n.maxItems,t)}})}length(t,r=e=>a().array.length(e)){return this._addConstraint((a,o)=>a.length===t?null:n(e.invalid_length,i(r,{exact:t,value:a}),{exact:t}),e=>({...e,maxItems:t,minItems:t}))}nonEmpty(e=()=>a().array.nonEmpty()){return this.min(1,e)}unique(t,r=()=>a().array.unique()){let o=typeof t==`function`&&t.length===2,s=o?t:null,c=o?r:typeof t==`function`?t:()=>a().array.unique();return this._addConstraint((t,r)=>{let a=t,o;return o=s?a.every((e,t)=>a.slice(0,t).every(t=>!s(e,t))):new Set(a).size===a.length,o?null:n(e.invalid_unique,i(c,{value:a}),{unique:!0})})}_toDescriptorImpl(){let e=this._annotations;return{...this._describeBase(),...e.maxItems===void 0?{}:{maxItems:e.maxItems},...e.minItems===void 0?{}:{minItems:e.minItems},items:this.itemSchema.toDescriptor(),kind:`array`}}_walk(e){let t=this.itemSchema.walk(e);return e.array?e.array(this,t):super._walk(e)}_equalsImpl(e){if(!(e instanceof c))return!1;let t=e,n=this._annotations,r=e._annotations;return this.itemSchema.equals(t.itemSchema)&&n.minItems===r.minItems&&n.maxItems===r.maxItems}};export{c as ArraySchema};
|
|
2
|
+
//# sourceMappingURL=array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.js","names":[],"sources":["../../src/schemas/array.ts"],"sourcesContent":["import type { Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema, SpellValidationError, _makeCtx, fail, prependIssuePath, resolveMessage } from '../core';\nimport { _messages } from '../messages';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface ArrayAnnotations extends Record<string, unknown> {\n maxItems?: number;\n minItems?: number;\n}\n\nexport class ArraySchema<T> extends Schema<T[]> {\n readonly itemSchema: Schema<T, any>;\n\n protected override get _kind(): string {\n return 'array';\n }\n\n constructor(itemSchema: Schema<T, any>) {\n super();\n this.itemSchema = itemSchema;\n }\n\n private _parseItemsSync(items: unknown[], ctx: ParseContext): { data: T[]; issues: Issue[] } {\n const issues: Issue[] = [];\n const parsed: T[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const result = this.itemSchema._parseFullSync(items[i], ctx);\n\n if (result.issues.length === 0) {\n parsed.push(result.data as T);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n parsed.push(items[i] as T);\n }\n }\n\n return { data: parsed, issues };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!Array.isArray(value)) {\n return { data: value, issues: fail(ErrorCode.invalid_type, ctx.messages.array.type()), typeOk: false };\n }\n\n const { data: items, issues } = this._parseItemsSync(value, ctx);\n\n return { data: items, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<T[]> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as unknown as T[];\n\n const raw = prepared.value;\n\n if (!Array.isArray(raw)) {\n throw new SpellValidationError(fail(ErrorCode.invalid_type, c.messages.array.type()));\n }\n\n const settled = await Promise.all(raw.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed: T[] = [];\n\n for (let i = 0; i < settled.length; i++) {\n const result = settled[i];\n\n if (result.issues.length === 0) {\n parsed.push(result.data as T);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n parsed.push(raw[i] as T);\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(parsed, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(parsed) as T[];\n });\n }\n\n min(\n length: number,\n message: MessageFn<{ min: number; value: unknown[] }> = (ctx) => _messages().array.min(ctx),\n ): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as unknown[]).length >= length) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message, { min: length, value: value as unknown[] }), {\n min: length,\n });\n },\n (current) => {\n const ann = current as ArrayAnnotations;\n\n return {\n ...ann,\n minItems: ann.minItems === undefined ? length : Math.max(ann.minItems, length),\n };\n },\n );\n }\n\n max(\n length: number,\n message: MessageFn<{ max: number; value: unknown[] }> = (ctx) => _messages().array.max(ctx),\n ): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as unknown[]).length <= length) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message, { max: length, value: value as unknown[] }), {\n max: length,\n });\n },\n (current) => {\n const ann = current as ArrayAnnotations;\n\n return {\n ...ann,\n maxItems: ann.maxItems === undefined ? length : Math.min(ann.maxItems, length),\n };\n },\n );\n }\n\n length(\n exact: number,\n message: MessageFn<{ exact: number; value: unknown[] }> = (ctx) => _messages().array.length(ctx),\n ): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as unknown[]).length === exact) return null;\n\n return fail(ErrorCode.invalid_length, resolveMessage(message, { exact, value: value as unknown[] }), { exact });\n },\n (ann) => ({ ...ann, maxItems: exact, minItems: exact }),\n );\n }\n\n nonEmpty(message: MessageFn<{ min: number; value: unknown[] }> = () => _messages().array.nonEmpty()): this {\n return this.min(1, message);\n }\n\n /**\n * Validates that all array elements are unique.\n *\n * **Default behaviour:** Uniqueness is checked using JavaScript `Set` semantics, which means\n * **referential equality** for objects. Two structurally identical objects such as\n * `{ id: 1 }` and `{ id: 1 }` are considered different values and will not be\n * flagged as duplicates.\n *\n * **Custom equality:** Pass an `equalsFn` to use structural or domain-specific comparison\n * logic (e.g. compare by a specific field, or use deep equality).\n *\n * @example\n * s.array(s.object({ id: s.number() })).unique((a, b) => a.id === b.id)\n */\n unique(\n equalsFnOrMessage?: ((a: T, b: T) => boolean) | MessageFn<{ value: unknown[] }>,\n message: MessageFn<{ value: unknown[] }> = () => _messages().array.unique(),\n ): this {\n const isCustomEqualsFn = typeof equalsFnOrMessage === 'function' && equalsFnOrMessage.length === 2;\n const equalsFn = isCustomEqualsFn ? (equalsFnOrMessage as (a: T, b: T) => boolean) : null;\n const resolvedMessage = isCustomEqualsFn\n ? message\n : typeof equalsFnOrMessage === 'function'\n ? (equalsFnOrMessage as MessageFn<{ value: unknown[] }>)\n : () => _messages().array.unique();\n\n return this._addConstraint((value, _ctx) => {\n const typed = value as T[];\n let isUnique: boolean;\n\n if (equalsFn) {\n isUnique = typed.every((a, i) => typed.slice(0, i).every((b) => !equalsFn(a, b)));\n } else {\n isUnique = new Set(typed).size === typed.length;\n }\n\n if (isUnique) return null;\n\n return fail(ErrorCode.invalid_unique, resolveMessage(resolvedMessage, { value: typed as unknown[] }), {\n unique: true,\n });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as ArrayAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.maxItems !== undefined ? { maxItems: ann.maxItems } : {}),\n ...(ann.minItems !== undefined ? { minItems: ann.minItems } : {}),\n items: this.itemSchema.toDescriptor(),\n kind: 'array',\n };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.array) return visitor.array(this, item);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n if (!(other instanceof ArraySchema)) return false;\n\n const o = other as ArraySchema<any>;\n\n const annotations = this._annotations as ArrayAnnotations;\n const otherAnnotations = other._annotations as ArrayAnnotations;\n\n return (\n this.itemSchema.equals(o.itemSchema as import('../core').AnySchema) &&\n annotations.minItems === otherAnnotations.minItems &&\n annotations.maxItems === otherAnnotations.maxItems\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../types.cjs"),t=require("../errors.cjs"),n=require("../messages.cjs"),r=require("../core.cjs");var i=class i extends r.Schema{get _kind(){return`bigint`}constructor(){super((r,i)=>typeof r==`bigint`?null:t.fail(e.ErrorCode.invalid_type,(i?.messages??n._messages()).bigint.type()))}min(r,i=e=>n._messages().bigint.min(e)){return this._addConstraint((n,a)=>{let o=n;return o>=r?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(i,{min:r,value:o}),{min:r})})}max(r,i=e=>n._messages().bigint.max(e)){return this._addConstraint((n,a)=>{let o=n;return o<=r?null:t.fail(e.ErrorCode.too_big,t.resolveMessage(i,{max:r,value:o}),{max:r})})}positive(r=()=>n._messages().bigint.positive()){return this._addConstraint((n,i)=>{let a=n;return a>0n?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(r,{value:a}),{exclusive:!0,min:0n})})}negative(r=()=>n._messages().bigint.negative()){return this._addConstraint((n,i)=>{let a=n;return a<0n?null:t.fail(e.ErrorCode.too_big,t.resolveMessage(r,{value:a}),{exclusive:!0,max:0n})})}nonNegative(r=()=>n._messages().bigint.nonNegative()){return this._addConstraint((n,i)=>{let a=n;return a>=0n?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(r,{value:a}),{min:0n})})}nonPositive(r=()=>n._messages().bigint.nonPositive()){return this._addConstraint((n,i)=>{let a=n;return a<=0n?null:t.fail(e.ErrorCode.too_big,t.resolveMessage(r,{value:a}),{max:0n})})}multipleOf(r,i=e=>n._messages().bigint.multipleOf(e)){return this._addConstraint((n,a)=>{let o=n;return o%r===0n?null:t.fail(e.ErrorCode.invalid_multiple_of,t.resolveMessage(i,{step:r,value:o}),{step:r})})}_walk(e){return e.bigint?e.bigint(this):super._walk(e)}coerce(){return i.coerce()}_toDescriptorImpl(){return this.state.validators.length>0&&n._dev(`toDescriptor(): this bigint schema has constraints (e.g. min(), max(), positive()). BigInt constraints are not serializable and will not appear in toDescriptor() output.`),{...this._describeBase(),kind:`bigint`}}_equalsImpl(e){return e instanceof i}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})}};exports.BigIntSchema=i;
|
|
2
|
+
//# sourceMappingURL=bigint.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigint.cjs","names":[],"sources":["../../src/schemas/bigint.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\nimport { _messages, _dev } from '../messages';\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 ?? _messages()).bigint.type()),\n );\n }\n\n min(\n minimum: bigint,\n message: MessageFn<{ min: bigint; value: bigint }> = (ctx) => _messages().bigint.min(ctx),\n ): this {\n return this._addConstraint((value, _ctx) => {\n const typed = value as bigint;\n\n if (typed >= minimum) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message, { min: minimum, value: typed }), { min: minimum });\n });\n }\n\n max(\n maximum: bigint,\n message: MessageFn<{ max: bigint; value: bigint }> = (ctx) => _messages().bigint.max(ctx),\n ): this {\n return this._addConstraint((value, _ctx) => {\n const typed = value as bigint;\n\n if (typed <= maximum) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message, { max: maximum, value: typed }), { max: maximum });\n });\n }\n\n positive(message: MessageFn<{ value: bigint }> = () => _messages().bigint.positive()): 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, { value: typed }), { exclusive: true, min: 0n });\n });\n }\n\n negative(message: MessageFn<{ value: bigint }> = () => _messages().bigint.negative()): 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, { value: typed }), { exclusive: true, max: 0n });\n });\n }\n\n nonNegative(message: MessageFn<{ value: bigint }> = () => _messages().bigint.nonNegative()): 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, { value: typed }), { min: 0n });\n });\n }\n\n nonPositive(message: MessageFn<{ value: bigint }> = () => _messages().bigint.nonPositive()): 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, { value: typed }), { max: 0n });\n });\n }\n\n multipleOf(\n step: bigint,\n message: MessageFn<{ step: bigint; value: bigint }> = (ctx) => _messages().bigint.multipleOf(ctx),\n ): 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(ErrorCode.invalid_multiple_of, resolveMessage(message, { step, value: typed }), { step });\n });\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.bigint) return visitor.bigint(this);\n\n return super._walk(visitor);\n }\n\n /**\n * Returns a new schema that coerces the input to a bigint before validation.\n * Handles number, string (up to 1000 digits), and bigint inputs.\n *\n * Equivalent to `s.coerce.bigint()`.\n */\n coerce(): BigIntSchema<unknown> {\n return BigIntSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n if (this.state.validators.length > 0) {\n _dev(\n 'toDescriptor(): this bigint schema has constraints (e.g. min(), max(), positive()). ' +\n 'BigInt constraints are not serializable and will not appear in toDescriptor() output.',\n );\n }\n\n return { ...this._describeBase(), kind: 'bigint' };\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n return other instanceof BigIntSchema;\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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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { MessageFn, SchemaDescriptor } from '../core';
|
|
2
|
+
import { Schema } from '../core';
|
|
3
|
+
export declare class BigIntSchema<Input = bigint> extends Schema<bigint, Input> {
|
|
4
|
+
protected get _kind(): string;
|
|
5
|
+
constructor();
|
|
6
|
+
min(minimum: bigint, message?: MessageFn<{
|
|
7
|
+
min: bigint;
|
|
8
|
+
value: bigint;
|
|
9
|
+
}>): this;
|
|
10
|
+
max(maximum: bigint, message?: MessageFn<{
|
|
11
|
+
max: bigint;
|
|
12
|
+
value: bigint;
|
|
13
|
+
}>): this;
|
|
14
|
+
positive(message?: MessageFn<{
|
|
15
|
+
value: bigint;
|
|
16
|
+
}>): this;
|
|
17
|
+
negative(message?: MessageFn<{
|
|
18
|
+
value: bigint;
|
|
19
|
+
}>): this;
|
|
20
|
+
nonNegative(message?: MessageFn<{
|
|
21
|
+
value: bigint;
|
|
22
|
+
}>): this;
|
|
23
|
+
nonPositive(message?: MessageFn<{
|
|
24
|
+
value: bigint;
|
|
25
|
+
}>): this;
|
|
26
|
+
multipleOf(step: bigint, message?: MessageFn<{
|
|
27
|
+
step: bigint;
|
|
28
|
+
value: bigint;
|
|
29
|
+
}>): this;
|
|
30
|
+
protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
|
|
31
|
+
/**
|
|
32
|
+
* Returns a new schema that coerces the input to a bigint before validation.
|
|
33
|
+
* Handles number, string (up to 1000 digits), and bigint inputs.
|
|
34
|
+
*
|
|
35
|
+
* Equivalent to `s.coerce.bigint()`.
|
|
36
|
+
*/
|
|
37
|
+
coerce(): BigIntSchema<unknown>;
|
|
38
|
+
protected _toDescriptorImpl(): SchemaDescriptor;
|
|
39
|
+
protected _equalsImpl(other: import('../core').AnySchema): boolean;
|
|
40
|
+
static coerce(): BigIntSchema<unknown>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=bigint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigint.d.ts","sourceRoot":"","sources":["../../src/schemas/bigint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAmC,MAAM,EAAE,MAAM,SAAS,CAAC;AAGlE,qBAAa,YAAY,CAAC,KAAK,GAAG,MAAM,CAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IACrE,cAAuB,KAAK,IAAI,MAAM,CAErC;;IAQD,GAAG,CACD,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAwC,GACxF,IAAI;IAUP,GAAG,CACD,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAwC,GACxF,IAAI;IAUP,QAAQ,CAAC,OAAO,GAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAuC,GAAG,IAAI;IAU3F,QAAQ,CAAC,OAAO,GAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAuC,GAAG,IAAI;IAU3F,WAAW,CAAC,OAAO,GAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAA0C,GAAG,IAAI;IAUjG,WAAW,CAAC,OAAO,GAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAA0C,GAAG,IAAI;IAUjG,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAA+C,GAChG,IAAI;cAUY,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAMjF;;;;;OAKG;IACH,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC;cAIZ,iBAAiB,IAAI,gBAAgB;cAWrC,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO;IAI3E,MAAM,CAAC,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC;CA8BvC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e}from"../types.js";import{fail as t,resolveMessage as n}from"../errors.js";import{_dev as r,_messages as i}from"../messages.js";import{Schema as a}from"../core.js";var o=class o extends a{get _kind(){return`bigint`}constructor(){super((n,r)=>typeof n==`bigint`?null:t(e.invalid_type,(r?.messages??i()).bigint.type()))}min(r,a=e=>i().bigint.min(e)){return this._addConstraint((i,o)=>{let s=i;return s>=r?null:t(e.too_small,n(a,{min:r,value:s}),{min:r})})}max(r,a=e=>i().bigint.max(e)){return this._addConstraint((i,o)=>{let s=i;return s<=r?null:t(e.too_big,n(a,{max:r,value:s}),{max:r})})}positive(r=()=>i().bigint.positive()){return this._addConstraint((i,a)=>{let o=i;return o>0n?null:t(e.too_small,n(r,{value:o}),{exclusive:!0,min:0n})})}negative(r=()=>i().bigint.negative()){return this._addConstraint((i,a)=>{let o=i;return o<0n?null:t(e.too_big,n(r,{value:o}),{exclusive:!0,max:0n})})}nonNegative(r=()=>i().bigint.nonNegative()){return this._addConstraint((i,a)=>{let o=i;return o>=0n?null:t(e.too_small,n(r,{value:o}),{min:0n})})}nonPositive(r=()=>i().bigint.nonPositive()){return this._addConstraint((i,a)=>{let o=i;return o<=0n?null:t(e.too_big,n(r,{value:o}),{max:0n})})}multipleOf(r,a=e=>i().bigint.multipleOf(e)){return this._addConstraint((i,o)=>{let s=i;return s%r===0n?null:t(e.invalid_multiple_of,n(a,{step:r,value:s}),{step:r})})}_walk(e){return e.bigint?e.bigint(this):super._walk(e)}coerce(){return o.coerce()}_toDescriptorImpl(){return this.state.validators.length>0&&r(`toDescriptor(): this bigint schema has constraints (e.g. min(), max(), positive()). BigInt constraints are not serializable and will not appear in toDescriptor() output.`),{...this._describeBase(),kind:`bigint`}}_equalsImpl(e){return e instanceof o}static coerce(){return new o().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{o as BigIntSchema};
|
|
2
|
+
//# sourceMappingURL=bigint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigint.js","names":[],"sources":["../../src/schemas/bigint.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\nimport { _messages, _dev } from '../messages';\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 ?? _messages()).bigint.type()),\n );\n }\n\n min(\n minimum: bigint,\n message: MessageFn<{ min: bigint; value: bigint }> = (ctx) => _messages().bigint.min(ctx),\n ): this {\n return this._addConstraint((value, _ctx) => {\n const typed = value as bigint;\n\n if (typed >= minimum) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message, { min: minimum, value: typed }), { min: minimum });\n });\n }\n\n max(\n maximum: bigint,\n message: MessageFn<{ max: bigint; value: bigint }> = (ctx) => _messages().bigint.max(ctx),\n ): this {\n return this._addConstraint((value, _ctx) => {\n const typed = value as bigint;\n\n if (typed <= maximum) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message, { max: maximum, value: typed }), { max: maximum });\n });\n }\n\n positive(message: MessageFn<{ value: bigint }> = () => _messages().bigint.positive()): 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, { value: typed }), { exclusive: true, min: 0n });\n });\n }\n\n negative(message: MessageFn<{ value: bigint }> = () => _messages().bigint.negative()): 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, { value: typed }), { exclusive: true, max: 0n });\n });\n }\n\n nonNegative(message: MessageFn<{ value: bigint }> = () => _messages().bigint.nonNegative()): 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, { value: typed }), { min: 0n });\n });\n }\n\n nonPositive(message: MessageFn<{ value: bigint }> = () => _messages().bigint.nonPositive()): 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, { value: typed }), { max: 0n });\n });\n }\n\n multipleOf(\n step: bigint,\n message: MessageFn<{ step: bigint; value: bigint }> = (ctx) => _messages().bigint.multipleOf(ctx),\n ): 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(ErrorCode.invalid_multiple_of, resolveMessage(message, { step, value: typed }), { step });\n });\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.bigint) return visitor.bigint(this);\n\n return super._walk(visitor);\n }\n\n /**\n * Returns a new schema that coerces the input to a bigint before validation.\n * Handles number, string (up to 1000 digits), and bigint inputs.\n *\n * Equivalent to `s.coerce.bigint()`.\n */\n coerce(): BigIntSchema<unknown> {\n return BigIntSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n if (this.state.validators.length > 0) {\n _dev(\n 'toDescriptor(): this bigint schema has constraints (e.g. min(), max(), positive()). ' +\n 'BigInt constraints are not serializable and will not appear in toDescriptor() output.',\n );\n }\n\n return { ...this._describeBase(), kind: 'bigint' };\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n return other instanceof BigIntSchema;\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":"yLAKA,IAAa,EAAb,MAAa,UAAqC,CAAsB,CACtE,IAAuB,OAAgB,CACrC,MAAO,QACT,CAEA,aAAc,CACZ,OAAO,EAAO,IACZ,OAAO,GAAU,SAAW,KAAO,EAAK,EAAU,cAAe,GAAK,UAAY,EAAU,EAAA,CAAG,OAAO,KAAK,CAAC,CAC9G,CACF,CAEA,IACE,EACA,EAAsD,GAAQ,EAAU,CAAC,CAAC,OAAO,IAAI,CAAG,EAClF,CACN,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAId,OAFI,GAAS,EAAgB,KAEtB,EAAK,EAAU,UAAW,EAAe,EAAS,CAAE,IAAK,EAAS,MAAO,CAAM,CAAC,EAAG,CAAE,IAAK,CAAQ,CAAC,CAC5G,CAAC,CACH,CAEA,IACE,EACA,EAAsD,GAAQ,EAAU,CAAC,CAAC,OAAO,IAAI,CAAG,EAClF,CACN,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAId,OAFI,GAAS,EAAgB,KAEtB,EAAK,EAAU,QAAS,EAAe,EAAS,CAAE,IAAK,EAAS,MAAO,CAAM,CAAC,EAAG,CAAE,IAAK,CAAQ,CAAC,CAC1G,CAAC,CACH,CAEA,SAAS,MAA8C,EAAU,CAAC,CAAC,OAAO,SAAS,EAAS,CAC1F,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAId,OAFI,EAAQ,GAAW,KAEhB,EAAK,EAAU,UAAW,EAAe,EAAS,CAAE,MAAO,CAAM,CAAC,EAAG,CAAE,UAAW,GAAM,IAAK,EAAG,CAAC,CAC1G,CAAC,CACH,CAEA,SAAS,MAA8C,EAAU,CAAC,CAAC,OAAO,SAAS,EAAS,CAC1F,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAId,OAFI,EAAQ,GAAW,KAEhB,EAAK,EAAU,QAAS,EAAe,EAAS,CAAE,MAAO,CAAM,CAAC,EAAG,CAAE,UAAW,GAAM,IAAK,EAAG,CAAC,CACxG,CAAC,CACH,CAEA,YAAY,MAA8C,EAAU,CAAC,CAAC,OAAO,YAAY,EAAS,CAChG,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAId,OAFI,GAAS,GAAW,KAEjB,EAAK,EAAU,UAAW,EAAe,EAAS,CAAE,MAAO,CAAM,CAAC,EAAG,CAAE,IAAK,EAAG,CAAC,CACzF,CAAC,CACH,CAEA,YAAY,MAA8C,EAAU,CAAC,CAAC,OAAO,YAAY,EAAS,CAChG,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAId,OAFI,GAAS,GAAW,KAEjB,EAAK,EAAU,QAAS,EAAe,EAAS,CAAE,MAAO,CAAM,CAAC,EAAG,CAAE,IAAK,EAAG,CAAC,CACvF,CAAC,CACH,CAEA,WACE,EACA,EAAuD,GAAQ,EAAU,CAAC,CAAC,OAAO,WAAW,CAAG,EAC1F,CACN,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAId,OAFI,EAAQ,IAAS,GAAW,KAEzB,EAAK,EAAU,oBAAqB,EAAe,EAAS,CAAE,OAAM,MAAO,CAAM,CAAC,EAAG,CAAE,MAAK,CAAC,CACtG,CAAC,CACH,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,OAAe,EAAQ,OAAO,IAAI,EAEvC,MAAM,MAAM,CAAO,CAC5B,CAQA,QAAgC,CAC9B,OAAO,EAAa,OAAO,CAC7B,CAEA,mBAAyD,CAQvD,OAPI,KAAK,MAAM,WAAW,OAAS,GACjC,EACE,2KAEF,EAGK,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,QAAS,CACnD,CAEA,YAA+B,EAA6C,CAC1E,OAAO,aAAiB,CAC1B,CAEA,OAAO,QAAgC,CACrC,OAAO,IAAI,EAAa,CAAC,CAAC,WAAY,GAAmB,CACvD,GAAI,OAAO,GAAU,SAAU,OAAO,EAEtC,GAAI,OAAO,GAAU,SAAU,CAC7B,GAAI,CAAC,OAAO,SAAS,CAAK,GAAK,CAAC,OAAO,UAAU,CAAK,EAAG,OAAO,EAEhE,GAAI,CACF,OAAO,OAAO,CAAK,CACrB,MAAQ,CACN,OAAO,CACT,CACF,CAEA,GAAI,OAAO,GAAU,SAAU,CAC7B,IAAM,EAAU,EAAM,KAAK,EAG3B,GAAI,EAAQ,SAAW,GAAK,EAAQ,OAAS,IAAM,OAAO,EAE1D,GAAI,CACF,OAAO,OAAO,CAAO,CACvB,MAAQ,CACN,OAAO,CACT,CACF,CAEA,OAAO,CACT,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../types.cjs"),t=require("../messages.cjs"),n=require("../core.cjs");var r=class r extends n.Schema{get _kind(){return`boolean`}constructor(){super((n,r)=>typeof n==`boolean`?null:[{code:e.ErrorCode.invalid_type,message:(r?.messages??t._messages()).boolean.type(),path:[]}])}coerce(){return r.coerce()}_toDescriptorImpl(){return{...this._describeBase(),kind:`boolean`}}_walk(e){return e.boolean?e.boolean(this):super._walk(e)}_equalsImpl(e){return e instanceof r}static coerce(){return new r().preprocess(e=>typeof e==`boolean`?e:e===`true`||e===`1`||e===1?!0:e===`false`||e===`0`||e===0?!1:e)}};exports.BooleanSchema=r;
|
|
2
|
+
//# sourceMappingURL=boolean.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boolean.cjs","names":[],"sources":["../../src/schemas/boolean.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { _messages } from '../messages';\n\nexport class BooleanSchema<Input = boolean> extends Schema<boolean, Input> {\n protected override get _kind(): string {\n return 'boolean';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'boolean'\n ? null\n : [{ code: ErrorCode.invalid_type, message: (ctx?.messages ?? _messages()).boolean.type(), path: [] }],\n );\n }\n\n /**\n * Returns a new schema that coerces the input to a boolean before validation.\n * Accepts `'true'`, `'1'`, `1` as `true`; `'false'`, `'0'`, `0` as `false`.\n *\n * Equivalent to `s.coerce.boolean()`.\n */\n coerce(): BooleanSchema<unknown> {\n return BooleanSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'boolean' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.boolean) return visitor.boolean(this);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n return other instanceof BooleanSchema;\n }\n\n static coerce(): BooleanSchema<unknown> {\n return new BooleanSchema().preprocess((v: unknown) => {\n if (typeof v === 'boolean') return v;\n\n if (v === 'true' || v === '1' || v === 1) return true;\n\n if (v === 'false' || v === '0' || v === 0) return false;\n\n return v;\n });\n }\n}\n"],"mappings":"sFAKA,IAAa,EAAb,MAAa,UAAuC,EAAA,MAAuB,CACzE,IAAuB,OAAgB,CACrC,MAAO,SACT,CAEA,aAAc,CACZ,OAAO,EAAO,IACZ,OAAO,GAAU,UACb,KACA,CAAC,CAAE,KAAM,EAAA,UAAU,aAAc,SAAU,GAAK,UAAY,EAAA,UAAU,EAAA,CAAG,QAAQ,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,CACzG,CACF,CAQA,QAAiC,CAC/B,OAAO,EAAc,OAAO,CAC9B,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,SAAU,CACpD,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,QAAgB,EAAQ,QAAQ,IAAI,EAEzC,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAC1E,OAAO,aAAiB,CAC1B,CAEA,OAAO,QAAiC,CACtC,OAAO,IAAI,EAAc,CAAC,CAAC,WAAY,GACjC,OAAO,GAAM,UAAkB,EAE/B,IAAM,QAAU,IAAM,KAAO,IAAM,EAAU,GAE7C,IAAM,SAAW,IAAM,KAAO,IAAM,EAAU,GAE3C,CACR,CACH,CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SchemaDescriptor } from '../core';
|
|
2
|
+
import { Schema } from '../core';
|
|
3
|
+
export declare class BooleanSchema<Input = boolean> extends Schema<boolean, Input> {
|
|
4
|
+
protected get _kind(): string;
|
|
5
|
+
constructor();
|
|
6
|
+
/**
|
|
7
|
+
* Returns a new schema that coerces the input to a boolean before validation.
|
|
8
|
+
* Accepts `'true'`, `'1'`, `1` as `true`; `'false'`, `'0'`, `0` as `false`.
|
|
9
|
+
*
|
|
10
|
+
* Equivalent to `s.coerce.boolean()`.
|
|
11
|
+
*/
|
|
12
|
+
coerce(): BooleanSchema<unknown>;
|
|
13
|
+
protected _toDescriptorImpl(): SchemaDescriptor;
|
|
14
|
+
protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
|
|
15
|
+
protected _equalsImpl(other: import('../core').AnySchema): boolean;
|
|
16
|
+
static coerce(): BooleanSchema<unknown>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=boolean.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/schemas/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAa,MAAM,EAAE,MAAM,SAAS,CAAC;AAG5C,qBAAa,aAAa,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IACxE,cAAuB,KAAK,IAAI,MAAM,CAErC;;IAUD;;;;;OAKG;IACH,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC;cAIb,iBAAiB,IAAI,gBAAgB;cAIrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;cAM9D,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO;IAI3E,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC;CAWxC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e}from"../types.js";import{_messages as t}from"../messages.js";import{Schema as n}from"../core.js";var r=class r extends n{get _kind(){return`boolean`}constructor(){super((n,r)=>typeof n==`boolean`?null:[{code:e.invalid_type,message:(r?.messages??t()).boolean.type(),path:[]}])}coerce(){return r.coerce()}_toDescriptorImpl(){return{...this._describeBase(),kind:`boolean`}}_walk(e){return e.boolean?e.boolean(this):super._walk(e)}_equalsImpl(e){return e instanceof r}static coerce(){return new r().preprocess(e=>typeof e==`boolean`?e:e===`true`||e===`1`||e===1?!0:e===`false`||e===`0`||e===0?!1:e)}};export{r as BooleanSchema};
|
|
2
|
+
//# sourceMappingURL=boolean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boolean.js","names":[],"sources":["../../src/schemas/boolean.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { _messages } from '../messages';\n\nexport class BooleanSchema<Input = boolean> extends Schema<boolean, Input> {\n protected override get _kind(): string {\n return 'boolean';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'boolean'\n ? null\n : [{ code: ErrorCode.invalid_type, message: (ctx?.messages ?? _messages()).boolean.type(), path: [] }],\n );\n }\n\n /**\n * Returns a new schema that coerces the input to a boolean before validation.\n * Accepts `'true'`, `'1'`, `1` as `true`; `'false'`, `'0'`, `0` as `false`.\n *\n * Equivalent to `s.coerce.boolean()`.\n */\n coerce(): BooleanSchema<unknown> {\n return BooleanSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'boolean' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.boolean) return visitor.boolean(this);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n return other instanceof BooleanSchema;\n }\n\n static coerce(): BooleanSchema<unknown> {\n return new BooleanSchema().preprocess((v: unknown) => {\n if (typeof v === 'boolean') return v;\n\n if (v === 'true' || v === '1' || v === 1) return true;\n\n if (v === 'false' || v === '0' || v === 0) return false;\n\n return v;\n });\n }\n}\n"],"mappings":"uHAKA,IAAa,EAAb,MAAa,UAAuC,CAAuB,CACzE,IAAuB,OAAgB,CACrC,MAAO,SACT,CAEA,aAAc,CACZ,OAAO,EAAO,IACZ,OAAO,GAAU,UACb,KACA,CAAC,CAAE,KAAM,EAAU,aAAc,SAAU,GAAK,UAAY,EAAU,EAAA,CAAG,QAAQ,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,CACzG,CACF,CAQA,QAAiC,CAC/B,OAAO,EAAc,OAAO,CAC9B,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,SAAU,CACpD,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,QAAgB,EAAQ,QAAQ,IAAI,EAEzC,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAC1E,OAAO,aAAiB,CAC1B,CAEA,OAAO,QAAiC,CACtC,OAAO,IAAI,EAAc,CAAC,CAAC,WAAY,GACjC,OAAO,GAAM,UAAkB,EAE/B,IAAM,QAAU,IAAM,KAAO,IAAM,EAAU,GAE7C,IAAM,SAAW,IAAM,KAAO,IAAM,EAAU,GAE3C,CACR,CACH,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../types.cjs"),t=require("../errors.cjs"),n=require("../messages.cjs"),r=require("../core.cjs");var i=class i extends r.Schema{get _kind(){return`date`}constructor(){super((r,i)=>r instanceof Date&&!Number.isNaN(r.getTime())?null:t.fail(e.ErrorCode.invalid_date,(i?.messages??n._messages()).date.type()))}min(r,i=e=>n._messages().date.min(e)){return this._addConstraint((n,a)=>{let o=n;return o>=r?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(i,{min:r,value:o}),{min:r})})}max(r,i=e=>n._messages().date.max(e)){return this._addConstraint((n,a)=>{let o=n;return o<=r?null:t.fail(e.ErrorCode.too_big,t.resolveMessage(i,{max:r,value:o}),{max:r})})}coerce(){return i.coerce()}_toDescriptorImpl(){return{...this._describeBase(),kind:`date`}}_walk(e){return e.date?e.date(this):super._walk(e)}_equalsImpl(e){return e instanceof i}static coerce(){return new i().preprocess(e=>e instanceof Date?e:typeof e==`string`||typeof e==`number`?new Date(e):e)}};exports.DateSchema=i;
|
|
2
|
+
//# sourceMappingURL=date.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.cjs","names":[],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\nimport { _messages } from '../messages';\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 ?? _messages()).date.type()),\n );\n }\n\n min(date: Date, message: MessageFn<{ min: Date; value: Date }> = (ctx) => _messages().date.min(ctx)): 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, { min: date, value: typed }), { min: date });\n });\n }\n\n max(date: Date, message: MessageFn<{ max: Date; value: Date }> = (ctx) => _messages().date.max(ctx)): 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, { max: date, value: typed }), { max: date });\n });\n }\n\n /**\n * Returns a new schema that coerces string or number input to a `Date` before validation.\n *\n * Equivalent to `s.coerce.date()`.\n */\n coerce(): DateSchema<unknown> {\n return DateSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.date) return visitor.date(this);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n return other instanceof DateSchema;\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":"iHAKA,IAAa,EAAb,MAAa,UAAiC,EAAA,MAAoB,CAChE,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,aAAc,CACZ,OAAO,EAAO,IACZ,aAAiB,MAAQ,CAAC,OAAO,MAAM,EAAM,QAAQ,CAAC,EAClD,KACA,EAAA,KAAK,EAAA,UAAU,cAAe,GAAK,UAAY,EAAA,UAAU,EAAA,CAAG,KAAK,KAAK,CAAC,CAC7E,CACF,CAEA,IAAI,EAAY,EAAkD,GAAQ,EAAA,UAAU,CAAC,CAAC,KAAK,IAAI,CAAG,EAAS,CACzG,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAEd,OAAO,GAAS,EACZ,KACA,EAAA,KAAK,EAAA,UAAU,UAAW,EAAA,eAAe,EAAS,CAAE,IAAK,EAAM,MAAO,CAAM,CAAC,EAAG,CAAE,IAAK,CAAK,CAAC,CACnG,CAAC,CACH,CAEA,IAAI,EAAY,EAAkD,GAAQ,EAAA,UAAU,CAAC,CAAC,KAAK,IAAI,CAAG,EAAS,CACzG,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAEd,OAAO,GAAS,EACZ,KACA,EAAA,KAAK,EAAA,UAAU,QAAS,EAAA,eAAe,EAAS,CAAE,IAAK,EAAM,MAAO,CAAM,CAAC,EAAG,CAAE,IAAK,CAAK,CAAC,CACjG,CAAC,CACH,CAOA,QAA8B,CAC5B,OAAO,EAAW,OAAO,CAC3B,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,KAAa,EAAQ,KAAK,IAAI,EAEnC,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAC1E,OAAO,aAAiB,CAC1B,CAEA,OAAO,QAA8B,CACnC,OAAO,IAAI,EAAW,CAAC,CAAC,WAAY,GAC9B,aAAa,KAAa,EAE1B,OAAO,GAAM,UAAY,OAAO,GAAM,SAAiB,IAAI,KAAK,CAAC,EAE9D,CACR,CACH,CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MessageFn, SchemaDescriptor } from '../core';
|
|
2
|
+
import { Schema } from '../core';
|
|
3
|
+
export declare class DateSchema<Input = Date> extends Schema<Date, Input> {
|
|
4
|
+
protected get _kind(): string;
|
|
5
|
+
constructor();
|
|
6
|
+
min(date: Date, message?: MessageFn<{
|
|
7
|
+
min: Date;
|
|
8
|
+
value: Date;
|
|
9
|
+
}>): this;
|
|
10
|
+
max(date: Date, message?: MessageFn<{
|
|
11
|
+
max: Date;
|
|
12
|
+
value: Date;
|
|
13
|
+
}>): this;
|
|
14
|
+
/**
|
|
15
|
+
* Returns a new schema that coerces string or number input to a `Date` before validation.
|
|
16
|
+
*
|
|
17
|
+
* Equivalent to `s.coerce.date()`.
|
|
18
|
+
*/
|
|
19
|
+
coerce(): DateSchema<unknown>;
|
|
20
|
+
protected _toDescriptorImpl(): SchemaDescriptor;
|
|
21
|
+
protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
|
|
22
|
+
protected _equalsImpl(other: import('../core').AnySchema): boolean;
|
|
23
|
+
static coerce(): DateSchema<unknown>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=date.d.ts.map
|
|
@@ -0,0 +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;AAGlE,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,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAsC,GAAG,IAAI;IAU1G,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAsC,GAAG,IAAI;IAU1G;;;;OAIG;IACH,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC;cAIV,iBAAiB,IAAI,gBAAgB;cAIrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;cAM9D,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO;IAI3E,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC;CASrC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e}from"../types.js";import{fail as t,resolveMessage as n}from"../errors.js";import{_messages as r}from"../messages.js";import{Schema as i}from"../core.js";var a=class a extends i{get _kind(){return`date`}constructor(){super((n,i)=>n instanceof Date&&!Number.isNaN(n.getTime())?null:t(e.invalid_date,(i?.messages??r()).date.type()))}min(i,a=e=>r().date.min(e)){return this._addConstraint((r,o)=>{let s=r;return s>=i?null:t(e.too_small,n(a,{min:i,value:s}),{min:i})})}max(i,a=e=>r().date.max(e)){return this._addConstraint((r,o)=>{let s=r;return s<=i?null:t(e.too_big,n(a,{max:i,value:s}),{max:i})})}coerce(){return a.coerce()}_toDescriptorImpl(){return{...this._describeBase(),kind:`date`}}_walk(e){return e.date?e.date(this):super._walk(e)}_equalsImpl(e){return e instanceof a}static coerce(){return new a().preprocess(e=>e instanceof Date?e:typeof e==`string`||typeof e==`number`?new Date(e):e)}};export{a as DateSchema};
|
|
2
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","names":[],"sources":["../../src/schemas/date.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\nimport { _messages } from '../messages';\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 ?? _messages()).date.type()),\n );\n }\n\n min(date: Date, message: MessageFn<{ min: Date; value: Date }> = (ctx) => _messages().date.min(ctx)): 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, { min: date, value: typed }), { min: date });\n });\n }\n\n max(date: Date, message: MessageFn<{ max: Date; value: Date }> = (ctx) => _messages().date.max(ctx)): 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, { max: date, value: typed }), { max: date });\n });\n }\n\n /**\n * Returns a new schema that coerces string or number input to a `Date` before validation.\n *\n * Equivalent to `s.coerce.date()`.\n */\n coerce(): DateSchema<unknown> {\n return DateSchema.coerce();\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'date' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.date) return visitor.date(this);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n return other instanceof DateSchema;\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":"+KAKA,IAAa,EAAb,MAAa,UAAiC,CAAoB,CAChE,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,aAAc,CACZ,OAAO,EAAO,IACZ,aAAiB,MAAQ,CAAC,OAAO,MAAM,EAAM,QAAQ,CAAC,EAClD,KACA,EAAK,EAAU,cAAe,GAAK,UAAY,EAAU,EAAA,CAAG,KAAK,KAAK,CAAC,CAC7E,CACF,CAEA,IAAI,EAAY,EAAkD,GAAQ,EAAU,CAAC,CAAC,KAAK,IAAI,CAAG,EAAS,CACzG,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAEd,OAAO,GAAS,EACZ,KACA,EAAK,EAAU,UAAW,EAAe,EAAS,CAAE,IAAK,EAAM,MAAO,CAAM,CAAC,EAAG,CAAE,IAAK,CAAK,CAAC,CACnG,CAAC,CACH,CAEA,IAAI,EAAY,EAAkD,GAAQ,EAAU,CAAC,CAAC,KAAK,IAAI,CAAG,EAAS,CACzG,OAAO,KAAK,gBAAgB,EAAO,IAAS,CAC1C,IAAM,EAAQ,EAEd,OAAO,GAAS,EACZ,KACA,EAAK,EAAU,QAAS,EAAe,EAAS,CAAE,IAAK,EAAM,MAAO,CAAM,CAAC,EAAG,CAAE,IAAK,CAAK,CAAC,CACjG,CAAC,CACH,CAOA,QAA8B,CAC5B,OAAO,EAAW,OAAO,CAC3B,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,KAAa,EAAQ,KAAK,IAAI,EAEnC,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAC1E,OAAO,aAAiB,CAC1B,CAEA,OAAO,QAA8B,CACnC,OAAO,IAAI,EAAW,CAAC,CAAC,WAAY,GAC9B,aAAa,KAAa,EAE1B,OAAO,GAAM,UAAY,OAAO,GAAM,SAAiB,IAAI,KAAK,CAAC,EAE9D,CACR,CACH,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../types.cjs"),t=require("../messages.cjs"),n=require("../core.cjs");function r(n){let r=new Set(n);return(i,a)=>r.has(i)?null:[{code:e.ErrorCode.invalid_enum,message:(a?.messages??t._messages()).enum.invalid({values:n}),params:{values:n},path:[]}]}var i=class e extends n.Schema{values;get _kind(){return`enum`}constructor(e){super(r(e)),this.values=e}_toDescriptorImpl(){return{...this._describeBase(),kind:`enum`,values:this.values}}_walk(e){return e.enum?e.enum(this):super._walk(e)}_equalsImpl(t){return t instanceof e?JSON.stringify(this.values)===JSON.stringify(t.values):!1}};exports.EnumSchema=i;
|
|
2
|
+
//# sourceMappingURL=enum.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.cjs","names":[],"sources":["../../src/schemas/enum.ts"],"sourcesContent":["import type { SchemaDescriptor, ValidateFn } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { _messages } from '../messages';\n\nexport type EnumValues = readonly [string | number, ...(string | number)[]];\ntype EnumType<T extends EnumValues> = T[number];\n\nfunction buildEnumValidator(values: readonly unknown[]): ValidateFn {\n const set = new Set<unknown>(values);\n\n return (value, ctx) =>\n set.has(value)\n ? null\n : [\n {\n code: ErrorCode.invalid_enum,\n message: (ctx?.messages ?? _messages()).enum.invalid({ values }),\n params: { values },\n path: [],\n },\n ];\n}\n\nexport class EnumSchema<T extends EnumValues> extends Schema<EnumType<T>> {\n readonly values: T;\n\n protected override get _kind(): string {\n return 'enum';\n }\n\n constructor(values: T) {\n super(buildEnumValidator(values));\n this.values = values;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'enum', values: this.values };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.enum) return visitor.enum(this);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n if (!(other instanceof EnumSchema)) return false;\n\n return JSON.stringify(this.values) === JSON.stringify(other.values);\n }\n}\n"],"mappings":"sFAQA,SAAS,EAAmB,EAAwC,CAClE,IAAM,EAAM,IAAI,IAAa,CAAM,EAEnC,OAAQ,EAAO,IACb,EAAI,IAAI,CAAK,EACT,KACA,CACE,CACE,KAAM,EAAA,UAAU,aAChB,SAAU,GAAK,UAAY,EAAA,UAAU,EAAA,CAAG,KAAK,QAAQ,CAAE,QAAO,CAAC,EAC/D,OAAQ,CAAE,QAAO,EACjB,KAAM,CAAC,CACT,CACF,CACR,CAEA,IAAa,EAAb,MAAa,UAAyC,EAAA,MAAoB,CACxE,OAEA,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,YAAY,EAAW,CACrB,MAAM,EAAmB,CAAM,CAAC,EAChC,KAAK,OAAS,CAChB,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,OAAQ,OAAQ,KAAK,MAAO,CACtE,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,KAAa,EAAQ,KAAK,IAAI,EAEnC,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAG1E,OAFM,aAAiB,EAEhB,KAAK,UAAU,KAAK,MAAM,IAAM,KAAK,UAAU,EAAM,MAAM,EAFvB,EAG7C,CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SchemaDescriptor } from '../core';
|
|
2
|
+
import { Schema } from '../core';
|
|
3
|
+
export type EnumValues = readonly [string | number, ...(string | number)[]];
|
|
4
|
+
type EnumType<T extends EnumValues> = T[number];
|
|
5
|
+
export declare class EnumSchema<T extends EnumValues> extends Schema<EnumType<T>> {
|
|
6
|
+
readonly values: T;
|
|
7
|
+
protected get _kind(): string;
|
|
8
|
+
constructor(values: T);
|
|
9
|
+
protected _toDescriptorImpl(): SchemaDescriptor;
|
|
10
|
+
protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
|
|
11
|
+
protected _equalsImpl(other: import('../core').AnySchema): boolean;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=enum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/schemas/enum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,SAAS,CAAC;AAE5D,OAAO,EAAa,MAAM,EAAE,MAAM,SAAS,CAAC;AAG5C,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5E,KAAK,QAAQ,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAkBhD,qBAAa,UAAU,CAAC,CAAC,SAAS,UAAU,CAAE,SAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnB,cAAuB,KAAK,IAAI,MAAM,CAErC;gBAEW,MAAM,EAAE,CAAC;cAKF,iBAAiB,IAAI,gBAAgB;cAIrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;cAM9D,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO;CAK5E"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e}from"../types.js";import{_messages as t}from"../messages.js";import{Schema as n}from"../core.js";function r(n){let r=new Set(n);return(i,a)=>r.has(i)?null:[{code:e.invalid_enum,message:(a?.messages??t()).enum.invalid({values:n}),params:{values:n},path:[]}]}var i=class e extends n{values;get _kind(){return`enum`}constructor(e){super(r(e)),this.values=e}_toDescriptorImpl(){return{...this._describeBase(),kind:`enum`,values:this.values}}_walk(e){return e.enum?e.enum(this):super._walk(e)}_equalsImpl(t){return t instanceof e?JSON.stringify(this.values)===JSON.stringify(t.values):!1}};export{i as EnumSchema};
|
|
2
|
+
//# sourceMappingURL=enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.js","names":[],"sources":["../../src/schemas/enum.ts"],"sourcesContent":["import type { SchemaDescriptor, ValidateFn } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { _messages } from '../messages';\n\nexport type EnumValues = readonly [string | number, ...(string | number)[]];\ntype EnumType<T extends EnumValues> = T[number];\n\nfunction buildEnumValidator(values: readonly unknown[]): ValidateFn {\n const set = new Set<unknown>(values);\n\n return (value, ctx) =>\n set.has(value)\n ? null\n : [\n {\n code: ErrorCode.invalid_enum,\n message: (ctx?.messages ?? _messages()).enum.invalid({ values }),\n params: { values },\n path: [],\n },\n ];\n}\n\nexport class EnumSchema<T extends EnumValues> extends Schema<EnumType<T>> {\n readonly values: T;\n\n protected override get _kind(): string {\n return 'enum';\n }\n\n constructor(values: T) {\n super(buildEnumValidator(values));\n this.values = values;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'enum', values: this.values };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.enum) return visitor.enum(this);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n if (!(other instanceof EnumSchema)) return false;\n\n return JSON.stringify(this.values) === JSON.stringify(other.values);\n }\n}\n"],"mappings":"uHAQA,SAAS,EAAmB,EAAwC,CAClE,IAAM,EAAM,IAAI,IAAa,CAAM,EAEnC,OAAQ,EAAO,IACb,EAAI,IAAI,CAAK,EACT,KACA,CACE,CACE,KAAM,EAAU,aAChB,SAAU,GAAK,UAAY,EAAU,EAAA,CAAG,KAAK,QAAQ,CAAE,QAAO,CAAC,EAC/D,OAAQ,CAAE,QAAO,EACjB,KAAM,CAAC,CACT,CACF,CACR,CAEA,IAAa,EAAb,MAAa,UAAyC,CAAoB,CACxE,OAEA,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,YAAY,EAAW,CACrB,MAAM,EAAmB,CAAM,CAAC,EAChC,KAAK,OAAS,CAChB,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,OAAQ,OAAQ,KAAK,MAAO,CACtE,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,KAAa,EAAQ,KAAK,IAAI,EAEnC,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAG1E,OAFM,aAAiB,EAEhB,KAAK,UAAU,KAAK,MAAM,IAAM,KAAK,UAAU,EAAM,MAAM,EAFvB,EAG7C,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../types.cjs"),t=require("../messages.cjs"),n=require("../core.cjs");var r=class r extends n.Schema{cls;get _kind(){return`instanceof`}constructor(n){super((r,i)=>r instanceof n?null:[{code:e.ErrorCode.invalid_type,message:(i?.messages??t._messages()).instanceof.type({className:n.name}),path:[]}]),this.cls=n}_toDescriptorImpl(){return{...this._describeBase(),className:this.cls.name,kind:`instanceof`}}_walk(e){return e.instanceof?e.instanceof(this):super._walk(e)}_equalsImpl(e){return e instanceof r&&this.cls===e.cls}};exports.InstanceOfSchema=r;
|
|
2
|
+
//# sourceMappingURL=instanceof.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instanceof.cjs","names":[],"sources":["../../src/schemas/instanceof.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { _messages } from '../messages';\n\nexport class InstanceOfSchema<T> extends Schema<T> {\n readonly cls: new (...args: any[]) => T;\n\n protected override get _kind(): string {\n return 'instanceof';\n }\n\n constructor(cls: new (...args: any[]) => T) {\n super((value, ctx) =>\n value instanceof cls\n ? null\n : [\n {\n code: ErrorCode.invalid_type,\n message: (ctx?.messages ?? _messages()).instanceof.type({ className: cls.name }),\n path: [],\n },\n ],\n );\n this.cls = cls;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), className: this.cls.name, kind: 'instanceof' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.instanceof) return visitor.instanceof(this);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n return other instanceof InstanceOfSchema && this.cls === other.cls;\n }\n}\n"],"mappings":"sFAKA,IAAa,EAAb,MAAa,UAA4B,EAAA,MAAU,CACjD,IAEA,IAAuB,OAAgB,CACrC,MAAO,YACT,CAEA,YAAY,EAAgC,CAC1C,OAAO,EAAO,IACZ,aAAiB,EACb,KACA,CACE,CACE,KAAM,EAAA,UAAU,aAChB,SAAU,GAAK,UAAY,EAAA,UAAU,EAAA,CAAG,WAAW,KAAK,CAAE,UAAW,EAAI,IAAK,CAAC,EAC/E,KAAM,CAAC,CACT,CACF,CACN,EACA,KAAK,IAAM,CACb,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,UAAW,KAAK,IAAI,KAAM,KAAM,YAAa,CACjF,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,WAAmB,EAAQ,WAAW,IAAI,EAE/C,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAC1E,OAAO,aAAiB,GAAoB,KAAK,MAAQ,EAAM,GACjE,CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SchemaDescriptor } from '../core';
|
|
2
|
+
import { Schema } from '../core';
|
|
3
|
+
export declare class InstanceOfSchema<T> extends Schema<T> {
|
|
4
|
+
readonly cls: new (...args: any[]) => T;
|
|
5
|
+
protected get _kind(): string;
|
|
6
|
+
constructor(cls: new (...args: any[]) => T);
|
|
7
|
+
protected _toDescriptorImpl(): SchemaDescriptor;
|
|
8
|
+
protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
|
|
9
|
+
protected _equalsImpl(other: import('../core').AnySchema): boolean;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=instanceof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instanceof.d.ts","sourceRoot":"","sources":["../../src/schemas/instanceof.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAa,MAAM,EAAE,MAAM,SAAS,CAAC;AAG5C,qBAAa,gBAAgB,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAExC,cAAuB,KAAK,IAAI,MAAM,CAErC;gBAEW,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC;cAevB,iBAAiB,IAAI,gBAAgB;cAIrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;cAM9D,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO;CAG5E"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ErrorCode as e}from"../types.js";import{_messages as t}from"../messages.js";import{Schema as n}from"../core.js";var r=class r extends n{cls;get _kind(){return`instanceof`}constructor(n){super((r,i)=>r instanceof n?null:[{code:e.invalid_type,message:(i?.messages??t()).instanceof.type({className:n.name}),path:[]}]),this.cls=n}_toDescriptorImpl(){return{...this._describeBase(),className:this.cls.name,kind:`instanceof`}}_walk(e){return e.instanceof?e.instanceof(this):super._walk(e)}_equalsImpl(e){return e instanceof r&&this.cls===e.cls}};export{r as InstanceOfSchema};
|
|
2
|
+
//# sourceMappingURL=instanceof.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instanceof.js","names":[],"sources":["../../src/schemas/instanceof.ts"],"sourcesContent":["import type { SchemaDescriptor } from '../core';\n\nimport { ErrorCode, Schema } from '../core';\nimport { _messages } from '../messages';\n\nexport class InstanceOfSchema<T> extends Schema<T> {\n readonly cls: new (...args: any[]) => T;\n\n protected override get _kind(): string {\n return 'instanceof';\n }\n\n constructor(cls: new (...args: any[]) => T) {\n super((value, ctx) =>\n value instanceof cls\n ? null\n : [\n {\n code: ErrorCode.invalid_type,\n message: (ctx?.messages ?? _messages()).instanceof.type({ className: cls.name }),\n path: [],\n },\n ],\n );\n this.cls = cls;\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), className: this.cls.name, kind: 'instanceof' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.instanceof) return visitor.instanceof(this);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n return other instanceof InstanceOfSchema && this.cls === other.cls;\n }\n}\n"],"mappings":"uHAKA,IAAa,EAAb,MAAa,UAA4B,CAAU,CACjD,IAEA,IAAuB,OAAgB,CACrC,MAAO,YACT,CAEA,YAAY,EAAgC,CAC1C,OAAO,EAAO,IACZ,aAAiB,EACb,KACA,CACE,CACE,KAAM,EAAU,aAChB,SAAU,GAAK,UAAY,EAAU,EAAA,CAAG,WAAW,KAAK,CAAE,UAAW,EAAI,IAAK,CAAC,EAC/E,KAAM,CAAC,CACT,CACF,CACN,EACA,KAAK,IAAM,CACb,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,UAAW,KAAK,IAAI,KAAM,KAAM,YAAa,CACjF,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,WAAmB,EAAQ,WAAW,IAAI,EAE/C,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAC1E,OAAO,aAAiB,GAAoB,KAAK,MAAQ,EAAM,GACjE,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../errors.cjs"),t=require("../safe-object.cjs"),n=require("../core.cjs");let r=require("@vielzeug/arsenal");function i(e,n){if((0,r.isPlainObject)(e)&&(0,r.isPlainObject)(n)){let r=t.cloneRecord(e);for(let[a,o]of Object.entries(n))t.defineOwnProperty(r,a,i(e[a],o));return r}return n}var a=class t extends n.Schema{schemas;get _kind(){return`intersect`}constructor(e){super(),this.schemas=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(t,r){let a=r??n._makeCtx();return this._withCatchAsync(async()=>{let n=this._prepareInput(t);if(n.skip)return n.value;let r={hasOutput:!1,issues:[],output:n.value};for(let e=0;e<this.schemas.length;e++){let t=await this.schemas[e]._parseFullAsync(n.value,a);t.issues.length>0?r.issues.push(...t.issues):r.hasOutput?r.output=i(r.output,t.data):(r.hasOutput=!0,r.output=t.data)}if(r.issues.length>0)throw new e.SpellValidationError(r.issues);let o=await this._runValidatorsAsync(r.output,a);if(o.length)throw new e.SpellValidationError(o);return this._runPostprocessors(r.output)})}_toDescriptorImpl(){return{...this._describeBase(),branches:this.schemas.map(e=>e.toDescriptor()),kind:`intersect`}}_walk(e){let t=this.schemas.map(t=>t.walk(e));return e.intersect?e.intersect(this,t):super._walk(e)}_equalsImpl(e){return!(e instanceof t)||this.schemas.length!==e.schemas.length?!1:this.schemas.every((t,n)=>t.equals(e.schemas[n]))}};exports.IntersectSchema=a;
|
|
2
|
+
//# sourceMappingURL=intersect.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intersect.cjs","names":[],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { Schema, SpellValidationError, _makeCtx } 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> {\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 = schemas;\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 override async parseAsync(value: unknown, ctx?: ParseContext): Promise<UnionToIntersection<InferOutput<T[number]>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as UnionToIntersection<InferOutput<T[number]>>;\n\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: prepared.value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(prepared.value, c);\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 if (state.issues.length > 0) throw new SpellValidationError(state.issues);\n\n const validationIssues = await this._runValidatorsAsync(state.output, c);\n\n if (validationIssues.length) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(state.output) as UnionToIntersection<InferOutput<T[number]>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.toDescriptor()), kind: 'intersect' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const branches = this.schemas.map((s) => s.walk(visitor));\n\n if (visitor.intersect) return visitor.intersect(this, branches);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n if (!(other instanceof IntersectSchema)) return false;\n\n if (this.schemas.length !== other.schemas.length) return false;\n\n return this.schemas.every((s, i) => s.equals(other.schemas[i]));\n }\n}\n"],"mappings":"6HAaA,SAAS,EAAU,EAAiB,EAA0B,CAC5D,IAAA,EAAA,EAAA,cAAA,CAAkB,CAAM,IAAA,EAAA,EAAA,cAAA,CAAmB,CAAM,EAAG,CAClD,IAAM,EAAS,EAAA,YAAY,CAAM,EAEjC,IAAK,GAAM,CAAC,EAAK,KAAQ,OAAO,QAAQ,CAAM,EAC5C,EAAA,kBAAkB,EAAQ,EAAK,EAAU,EAAO,GAAM,CAAG,CAAC,EAG5D,OAAO,CACT,CAEA,OAAO,CACT,CAGA,IAAa,EAAb,MAAa,UAAwD,EAAA,MAEnE,CACA,QAEA,IAAuB,OAAgB,CACrC,MAAO,WACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,CACjB,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAM,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQ,CACV,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAM,EAAS,KAAK,QAAQ,EAAE,CAAC,eAAe,EAAO,CAAG,EAEpD,EAAO,OAAO,OAAS,EACzB,EAAM,OAAO,KAAK,GAAG,EAAO,MAAM,EACxB,EAAM,UAIhB,EAAM,OAAS,EAAU,EAAM,OAAQ,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAAS,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAM,EAAM,OAAQ,OAAQ,EAAM,OAAQ,OAAQ,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,MAAe,WAAW,EAAgB,EAA0E,CAClH,IAAM,EAAI,GAAO,EAAA,SAAS,EAE1B,OAAO,KAAK,gBAAgB,SAAY,CACtC,IAAM,EAAW,KAAK,cAAc,CAAK,EAEzC,GAAI,EAAS,KAAM,OAAO,EAAS,MAEnC,IAAM,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQ,EAAS,KACnB,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAM,EAAS,MAAM,KAAK,QAAQ,EAAE,CAAC,gBAAgB,EAAS,MAAO,CAAC,EAElE,EAAO,OAAO,OAAS,EACzB,EAAM,OAAO,KAAK,GAAG,EAAO,MAAM,EACxB,EAAM,UAIhB,EAAM,OAAS,EAAU,EAAM,OAAQ,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAAS,EAAO,KAI1B,CAEA,GAAI,EAAM,OAAO,OAAS,EAAG,MAAM,IAAI,EAAA,qBAAqB,EAAM,MAAM,EAExE,IAAM,EAAmB,MAAM,KAAK,oBAAoB,EAAM,OAAQ,CAAC,EAEvE,GAAI,EAAiB,OAAQ,MAAM,IAAI,EAAA,qBAAqB,CAAgB,EAE5E,OAAO,KAAK,mBAAmB,EAAM,MAAM,CAC7C,CAAC,CACH,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAM,EAAE,aAAa,CAAC,EAAG,KAAM,WAAY,CAC3G,CAEA,MAA4B,EAAsD,CAChF,IAAM,EAAW,KAAK,QAAQ,IAAK,GAAM,EAAE,KAAK,CAAO,CAAC,EAIxD,OAFI,EAAQ,UAAkB,EAAQ,UAAU,KAAM,CAAQ,EAEvD,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAK1E,MAJI,EAAE,aAAiB,IAEnB,KAAK,QAAQ,SAAW,EAAM,QAAQ,OAAe,GAElD,KAAK,QAAQ,OAAO,EAAG,IAAM,EAAE,OAAO,EAAM,QAAQ,EAAE,CAAC,CAChE,CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AnySchema, 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]>>> {
|
|
6
|
+
readonly schemas: T;
|
|
7
|
+
protected get _kind(): string;
|
|
8
|
+
constructor(schemas: T);
|
|
9
|
+
protected _parse(value: unknown, ctx: ParseContext): ParseValue;
|
|
10
|
+
parseAsync(value: unknown, ctx?: ParseContext): Promise<UnionToIntersection<InferOutput<T[number]>>>;
|
|
11
|
+
protected _toDescriptorImpl(): SchemaDescriptor;
|
|
12
|
+
protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
|
|
13
|
+
protected _equalsImpl(other: import('../core').AnySchema): boolean;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=intersect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intersect.d.ts","sourceRoot":"","sources":["../../src/schemas/intersect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAS,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEzG,OAAO,EAAE,MAAM,EAAkC,MAAM,SAAS,CAAC;AAGjE,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,sDAAsD;AACtD,qBAAa,eAAe,CAAC,CAAC,SAAS,SAAS,SAAS,EAAE,CAAE,SAAQ,MAAM,CACzE,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAC5C;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;IAuBzD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;cAqChG,iBAAiB,IAAI,gBAAgB;cAIrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;cAQ9D,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO;CAO5E"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{SpellValidationError as e}from"../errors.js";import{cloneRecord as t,defineOwnProperty as n}from"../safe-object.js";import{Schema as r,_makeCtx as i}from"../core.js";import{isPlainObject as a}from"@vielzeug/arsenal";function o(e,r){if(a(e)&&a(r)){let i=t(e);for(let[t,a]of Object.entries(r))n(i,t,o(e[t],a));return i}return r}var s=class t extends r{schemas;get _kind(){return`intersect`}constructor(e){super(),this.schemas=e}_parse(e,t){let n={hasOutput:!1,issues:[],output:e};for(let r=0;r<this.schemas.length;r++){let i=this.schemas[r]._parseFullSync(e,t);i.issues.length>0?n.issues.push(...i.issues):n.hasOutput?n.output=o(n.output,i.data):(n.hasOutput=!0,n.output=i.data)}return{data:n.output,issues:n.issues,typeOk:n.issues.length===0}}async parseAsync(t,n){let r=n??i();return this._withCatchAsync(async()=>{let n=this._prepareInput(t);if(n.skip)return n.value;let i={hasOutput:!1,issues:[],output:n.value};for(let e=0;e<this.schemas.length;e++){let t=await this.schemas[e]._parseFullAsync(n.value,r);t.issues.length>0?i.issues.push(...t.issues):i.hasOutput?i.output=o(i.output,t.data):(i.hasOutput=!0,i.output=t.data)}if(i.issues.length>0)throw new e(i.issues);let a=await this._runValidatorsAsync(i.output,r);if(a.length)throw new e(a);return this._runPostprocessors(i.output)})}_toDescriptorImpl(){return{...this._describeBase(),branches:this.schemas.map(e=>e.toDescriptor()),kind:`intersect`}}_walk(e){let t=this.schemas.map(t=>t.walk(e));return e.intersect?e.intersect(this,t):super._walk(e)}_equalsImpl(e){return!(e instanceof t)||this.schemas.length!==e.schemas.length?!1:this.schemas.every((t,n)=>t.equals(e.schemas[n]))}};export{s as IntersectSchema};
|
|
2
|
+
//# sourceMappingURL=intersect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intersect.js","names":[],"sources":["../../src/schemas/intersect.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { Schema, SpellValidationError, _makeCtx } 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> {\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 = schemas;\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 override async parseAsync(value: unknown, ctx?: ParseContext): Promise<UnionToIntersection<InferOutput<T[number]>>> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as UnionToIntersection<InferOutput<T[number]>>;\n\n const state: { hasOutput: boolean; issues: Issue[]; output: unknown } = {\n hasOutput: false,\n issues: [],\n output: prepared.value,\n };\n\n for (let i = 0; i < this.schemas.length; i++) {\n const result = await this.schemas[i]._parseFullAsync(prepared.value, c);\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 if (state.issues.length > 0) throw new SpellValidationError(state.issues);\n\n const validationIssues = await this._runValidatorsAsync(state.output, c);\n\n if (validationIssues.length) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(state.output) as UnionToIntersection<InferOutput<T[number]>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), branches: this.schemas.map((s) => s.toDescriptor()), kind: 'intersect' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const branches = this.schemas.map((s) => s.walk(visitor));\n\n if (visitor.intersect) return visitor.intersect(this, branches);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n if (!(other instanceof IntersectSchema)) return false;\n\n if (this.schemas.length !== other.schemas.length) return false;\n\n return this.schemas.every((s, i) => s.equals(other.schemas[i]));\n }\n}\n"],"mappings":"+NAaA,SAAS,EAAU,EAAiB,EAA0B,CAC5D,GAAI,EAAc,CAAM,GAAK,EAAc,CAAM,EAAG,CAClD,IAAM,EAAS,EAAY,CAAM,EAEjC,IAAK,GAAM,CAAC,EAAK,KAAQ,OAAO,QAAQ,CAAM,EAC5C,EAAkB,EAAQ,EAAK,EAAU,EAAO,GAAM,CAAG,CAAC,EAG5D,OAAO,CACT,CAEA,OAAO,CACT,CAGA,IAAa,EAAb,MAAa,UAAwD,CAEnE,CACA,QAEA,IAAuB,OAAgB,CACrC,MAAO,WACT,CAEA,YAAY,EAAY,CACtB,MAAM,EACN,KAAK,QAAU,CACjB,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAM,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQ,CACV,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAM,EAAS,KAAK,QAAQ,EAAE,CAAC,eAAe,EAAO,CAAG,EAEpD,EAAO,OAAO,OAAS,EACzB,EAAM,OAAO,KAAK,GAAG,EAAO,MAAM,EACxB,EAAM,UAIhB,EAAM,OAAS,EAAU,EAAM,OAAQ,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAAS,EAAO,KAI1B,CAEA,MAAO,CAAE,KAAM,EAAM,OAAQ,OAAQ,EAAM,OAAQ,OAAQ,EAAM,OAAO,SAAW,CAAE,CACvF,CAEA,MAAe,WAAW,EAAgB,EAA0E,CAClH,IAAM,EAAI,GAAO,EAAS,EAE1B,OAAO,KAAK,gBAAgB,SAAY,CACtC,IAAM,EAAW,KAAK,cAAc,CAAK,EAEzC,GAAI,EAAS,KAAM,OAAO,EAAS,MAEnC,IAAM,EAAkE,CACtE,UAAW,GACX,OAAQ,CAAC,EACT,OAAQ,EAAS,KACnB,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IAAK,CAC5C,IAAM,EAAS,MAAM,KAAK,QAAQ,EAAE,CAAC,gBAAgB,EAAS,MAAO,CAAC,EAElE,EAAO,OAAO,OAAS,EACzB,EAAM,OAAO,KAAK,GAAG,EAAO,MAAM,EACxB,EAAM,UAIhB,EAAM,OAAS,EAAU,EAAM,OAAQ,EAAO,IAAI,GAHlD,EAAM,UAAY,GAClB,EAAM,OAAS,EAAO,KAI1B,CAEA,GAAI,EAAM,OAAO,OAAS,EAAG,MAAM,IAAI,EAAqB,EAAM,MAAM,EAExE,IAAM,EAAmB,MAAM,KAAK,oBAAoB,EAAM,OAAQ,CAAC,EAEvE,GAAI,EAAiB,OAAQ,MAAM,IAAI,EAAqB,CAAgB,EAE5E,OAAO,KAAK,mBAAmB,EAAM,MAAM,CAC7C,CAAC,CACH,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,SAAU,KAAK,QAAQ,IAAK,GAAM,EAAE,aAAa,CAAC,EAAG,KAAM,WAAY,CAC3G,CAEA,MAA4B,EAAsD,CAChF,IAAM,EAAW,KAAK,QAAQ,IAAK,GAAM,EAAE,KAAK,CAAO,CAAC,EAIxD,OAFI,EAAQ,UAAkB,EAAQ,UAAU,KAAM,CAAQ,EAEvD,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAK1E,MAJI,EAAE,aAAiB,IAEnB,KAAK,QAAQ,SAAW,EAAM,QAAQ,OAAe,GAElD,KAAK,QAAQ,OAAO,EAAG,IAAM,EAAE,OAAO,EAAM,QAAQ,EAAE,CAAC,CAChE,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../errors.cjs"),t=require("../core.cjs");var n=class n extends t.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(n,r){let i=r??t._makeCtx();return this._withCatchAsync(async()=>{let t=this._prepareInput(n);if(t.skip)return t.value;let r=await this._resolve()._parseFullAsync(t.value,i);if(r.issues.length>0)throw new e.SpellValidationError(r.issues);let a=await this._runValidatorsAsync(r.data,i);if(a.length>0)throw new e.SpellValidationError(a);return this._runPostprocessors(r.data)})}_toDescriptorImpl(){return{...this._describeBase(),kind:`lazy`}}_walk(e){return e.lazy?e.lazy(this):super._walk(e)}_equalsImpl(e){return e instanceof n?this._getter===e._getter:!1}_construct(e){let t=new n(this._getter);return t.state=e,t}};exports.LazySchema=n;
|
|
2
|
+
//# sourceMappingURL=lazy.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.cjs","names":[],"sources":["../../src/schemas/lazy.ts"],"sourcesContent":["import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';\n\nimport { Schema, SpellValidationError, _makeCtx } from '../core';\n\nexport class LazySchema<T> extends Schema<T> {\n private readonly _getter: () => Schema<T, any>;\n private _resolved?: Schema<T, any>;\n\n protected override get _kind(): string {\n return 'lazy';\n }\n\n constructor(getter: () => Schema<T, any>) {\n super();\n this._getter = getter;\n }\n\n private _resolve(): Schema<T, any> {\n return (this._resolved ??= this._getter());\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 override async parseAsync(value: unknown, ctx?: ParseContext): Promise<T> {\n const c = ctx ?? _makeCtx();\n\n return this._withCatchAsync(async () => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as T;\n\n const result = await this._resolve()._parseFullAsync(prepared.value, c);\n\n if (result.issues.length > 0) throw new SpellValidationError(result.issues);\n\n const validationIssues = await this._runValidatorsAsync(result.data, c);\n\n if (validationIssues.length > 0) throw new SpellValidationError(validationIssues);\n\n return this._runPostprocessors(result.data) as T;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'lazy' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n if (visitor.lazy) return visitor.lazy(this);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n // Lazy schemas are equal only if they reference the same getter function.\n if (!(other instanceof LazySchema)) return false;\n\n return this._getter === other._getter;\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":"0DAIA,IAAa,EAAb,MAAa,UAAsB,EAAA,MAAU,CAC3C,QACA,UAEA,IAAuB,OAAgB,CACrC,MAAO,MACT,CAEA,YAAY,EAA8B,CACxC,MAAM,EACN,KAAK,QAAU,CACjB,CAEA,UAAmC,CACjC,MAAQ,MAAK,YAAc,KAAK,QAAQ,CAC1C,CAEA,OAA0B,EAAgB,EAA+B,CACvE,IAAM,EAAS,KAAK,SAAS,CAAC,CAAC,eAAe,EAAO,CAAG,EAIxD,OAFI,EAAO,OAAO,SAAW,EAAU,CAAE,KAAM,EAAO,KAAM,OAAQ,CAAC,EAAG,OAAQ,EAAK,EAE9E,CAAE,KAAM,EAAO,OAAQ,EAAO,OAAQ,OAAQ,EAAK,CAC5D,CAEA,MAAe,WAAW,EAAgB,EAAgC,CACxE,IAAM,EAAI,GAAO,EAAA,SAAS,EAE1B,OAAO,KAAK,gBAAgB,SAAY,CACtC,IAAM,EAAW,KAAK,cAAc,CAAK,EAEzC,GAAI,EAAS,KAAM,OAAO,EAAS,MAEnC,IAAM,EAAS,MAAM,KAAK,SAAS,CAAC,CAAC,gBAAgB,EAAS,MAAO,CAAC,EAEtE,GAAI,EAAO,OAAO,OAAS,EAAG,MAAM,IAAI,EAAA,qBAAqB,EAAO,MAAM,EAE1E,IAAM,EAAmB,MAAM,KAAK,oBAAoB,EAAO,KAAM,CAAC,EAEtE,GAAI,EAAiB,OAAS,EAAG,MAAM,IAAI,EAAA,qBAAqB,CAAgB,EAEhF,OAAO,KAAK,mBAAmB,EAAO,IAAI,CAC5C,CAAC,CACH,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,KAAM,MAAO,CACjD,CAEA,MAA4B,EAAsD,CAGhF,OAFI,EAAQ,KAAa,EAAQ,KAAK,IAAI,EAEnC,MAAM,MAAM,CAAO,CAC5B,CAEA,YAA+B,EAA6C,CAI1E,OAFM,aAAiB,EAEhB,KAAK,UAAY,EAAM,QAFa,EAG7C,CAEA,WAA8B,EAA+B,CAE3D,IAAM,EAAO,IAAI,EAAW,KAAK,OAAO,EAIxC,MAFA,GAAK,MAAQ,EAEN,CACT,CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ParseContext, ParseValue, SchemaDescriptor, SchemaState } from '../core';
|
|
2
|
+
import { Schema } from '../core';
|
|
3
|
+
export declare class LazySchema<T> extends Schema<T> {
|
|
4
|
+
private readonly _getter;
|
|
5
|
+
private _resolved?;
|
|
6
|
+
protected get _kind(): string;
|
|
7
|
+
constructor(getter: () => Schema<T, any>);
|
|
8
|
+
private _resolve;
|
|
9
|
+
protected _parse(value: unknown, ctx: ParseContext): ParseValue;
|
|
10
|
+
parseAsync(value: unknown, ctx?: ParseContext): Promise<T>;
|
|
11
|
+
protected _toDescriptorImpl(): SchemaDescriptor;
|
|
12
|
+
protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
|
|
13
|
+
protected _equalsImpl(other: import('../core').AnySchema): boolean;
|
|
14
|
+
protected _construct(state: SchemaState<any>): this;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=lazy.d.ts.map
|