@vielzeug/spell 2.3.0 → 3.0.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.
Files changed (129) hide show
  1. package/README.md +2 -18
  2. package/dist/core.cjs +1 -1
  3. package/dist/core.cjs.map +1 -1
  4. package/dist/core.d.ts +8 -7
  5. package/dist/core.d.ts.map +1 -1
  6. package/dist/core.js +1 -1
  7. package/dist/core.js.map +1 -1
  8. package/dist/errors.cjs +2 -2
  9. package/dist/errors.cjs.map +1 -1
  10. package/dist/errors.d.ts +1 -8
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/errors.js +2 -2
  13. package/dist/errors.js.map +1 -1
  14. package/dist/formats.cjs.map +1 -1
  15. package/dist/formats.d.ts +1 -1
  16. package/dist/formats.js.map +1 -1
  17. package/dist/index.cjs +1 -2
  18. package/dist/index.d.ts +3 -11
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -2
  21. package/dist/json-schema.cjs +1 -1
  22. package/dist/json-schema.cjs.map +1 -1
  23. package/dist/json-schema.js +1 -1
  24. package/dist/json-schema.js.map +1 -1
  25. package/dist/s.cjs +1 -1
  26. package/dist/s.cjs.map +1 -1
  27. package/dist/s.d.ts +2 -3
  28. package/dist/s.d.ts.map +1 -1
  29. package/dist/s.js +1 -1
  30. package/dist/s.js.map +1 -1
  31. package/dist/schemas/array.cjs +1 -1
  32. package/dist/schemas/array.cjs.map +1 -1
  33. package/dist/schemas/array.d.ts +2 -2
  34. package/dist/schemas/array.d.ts.map +1 -1
  35. package/dist/schemas/array.js +1 -1
  36. package/dist/schemas/array.js.map +1 -1
  37. package/dist/schemas/bigint.cjs +1 -1
  38. package/dist/schemas/bigint.cjs.map +1 -1
  39. package/dist/schemas/bigint.d.ts +0 -7
  40. package/dist/schemas/bigint.d.ts.map +1 -1
  41. package/dist/schemas/bigint.js +1 -1
  42. package/dist/schemas/bigint.js.map +1 -1
  43. package/dist/schemas/boolean.cjs +1 -1
  44. package/dist/schemas/boolean.cjs.map +1 -1
  45. package/dist/schemas/boolean.d.ts +0 -7
  46. package/dist/schemas/boolean.d.ts.map +1 -1
  47. package/dist/schemas/boolean.js +1 -1
  48. package/dist/schemas/boolean.js.map +1 -1
  49. package/dist/schemas/date.cjs +1 -1
  50. package/dist/schemas/date.cjs.map +1 -1
  51. package/dist/schemas/date.d.ts +0 -6
  52. package/dist/schemas/date.d.ts.map +1 -1
  53. package/dist/schemas/date.js +1 -1
  54. package/dist/schemas/date.js.map +1 -1
  55. package/dist/schemas/intersect.cjs +1 -1
  56. package/dist/schemas/intersect.cjs.map +1 -1
  57. package/dist/schemas/intersect.d.ts +2 -2
  58. package/dist/schemas/intersect.d.ts.map +1 -1
  59. package/dist/schemas/intersect.js +1 -1
  60. package/dist/schemas/intersect.js.map +1 -1
  61. package/dist/schemas/map.cjs +1 -1
  62. package/dist/schemas/map.cjs.map +1 -1
  63. package/dist/schemas/map.d.ts +2 -2
  64. package/dist/schemas/map.d.ts.map +1 -1
  65. package/dist/schemas/map.js +1 -1
  66. package/dist/schemas/map.js.map +1 -1
  67. package/dist/schemas/number.cjs +1 -1
  68. package/dist/schemas/number.cjs.map +1 -1
  69. package/dist/schemas/number.d.ts +0 -6
  70. package/dist/schemas/number.d.ts.map +1 -1
  71. package/dist/schemas/number.js +1 -1
  72. package/dist/schemas/number.js.map +1 -1
  73. package/dist/schemas/object.cjs +1 -1
  74. package/dist/schemas/object.cjs.map +1 -1
  75. package/dist/schemas/object.d.ts +16 -7
  76. package/dist/schemas/object.d.ts.map +1 -1
  77. package/dist/schemas/object.js +1 -1
  78. package/dist/schemas/object.js.map +1 -1
  79. package/dist/schemas/record.cjs +1 -1
  80. package/dist/schemas/record.cjs.map +1 -1
  81. package/dist/schemas/record.d.ts +2 -2
  82. package/dist/schemas/record.d.ts.map +1 -1
  83. package/dist/schemas/record.js +1 -1
  84. package/dist/schemas/record.js.map +1 -1
  85. package/dist/schemas/set.cjs +1 -1
  86. package/dist/schemas/set.cjs.map +1 -1
  87. package/dist/schemas/set.d.ts +2 -2
  88. package/dist/schemas/set.d.ts.map +1 -1
  89. package/dist/schemas/set.js +1 -1
  90. package/dist/schemas/set.js.map +1 -1
  91. package/dist/schemas/string.cjs +1 -1
  92. package/dist/schemas/string.cjs.map +1 -1
  93. package/dist/schemas/string.d.ts +0 -7
  94. package/dist/schemas/string.d.ts.map +1 -1
  95. package/dist/schemas/string.js +1 -1
  96. package/dist/schemas/string.js.map +1 -1
  97. package/dist/schemas/tuple.cjs +1 -1
  98. package/dist/schemas/tuple.cjs.map +1 -1
  99. package/dist/schemas/tuple.d.ts +12 -6
  100. package/dist/schemas/tuple.d.ts.map +1 -1
  101. package/dist/schemas/tuple.js +1 -1
  102. package/dist/schemas/tuple.js.map +1 -1
  103. package/dist/schemas/union.cjs +1 -1
  104. package/dist/schemas/union.cjs.map +1 -1
  105. package/dist/schemas/union.d.ts +2 -2
  106. package/dist/schemas/union.d.ts.map +1 -1
  107. package/dist/schemas/union.js +1 -1
  108. package/dist/schemas/union.js.map +1 -1
  109. package/dist/schemas/variant.cjs +1 -1
  110. package/dist/schemas/variant.cjs.map +1 -1
  111. package/dist/schemas/variant.d.ts +12 -2
  112. package/dist/schemas/variant.d.ts.map +1 -1
  113. package/dist/schemas/variant.js +1 -1
  114. package/dist/schemas/variant.js.map +1 -1
  115. package/dist/spell.cjs +2 -2
  116. package/dist/spell.cjs.map +1 -1
  117. package/dist/spell.iife.js +2 -2
  118. package/dist/spell.iife.js.map +1 -1
  119. package/dist/spell.js +2 -2
  120. package/dist/spell.js.map +1 -1
  121. package/dist/types.cjs +1 -1
  122. package/dist/types.cjs.map +1 -1
  123. package/dist/types.d.ts +40 -2
  124. package/dist/types.d.ts.map +1 -1
  125. package/dist/types.js +1 -1
  126. package/dist/types.js.map +1 -1
  127. package/package.json +8 -8
  128. package/dist/index.cjs.map +0 -1
  129. package/dist/index.js.map +0 -1
@@ -1,2 +1,2 @@
1
- const e=require("../types.cjs"),t=require("../errors.cjs"),n=require("../safe-object.cjs"),r=require("../core.cjs");var i=class extends r.Schema{keySchema;valueSchema;get _kind(){return`record`}checkAsync(e){return this._addCheck(e,!0)}constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}_guardRecordInput(t,n){return typeof t!=`object`||!t||Array.isArray(t)?{issues:[{code:e.ErrorCode.invalid_type,message:n.messages.object.type(),path:[]}],ok:!1}:{ok:!0,value:t}}_parseRecordEntries(e,r){let i=[],a={};for(let o of Object.keys(e)){let s=this.keySchema._parseFullSync(o,r);if(s.issues.length>0){i.push(...t.prependIssuePath(s.issues,o));continue}let c=s.data;if(n.isUnsafeObjectKey(c))continue;let l=this.valueSchema._parseFullSync(e[o],r);l.issues.length===0?n.defineOwnProperty(a,c,l.data):i.push(...t.prependIssuePath(l.issues,o))}return{issues:i,output:a}}_parse(e,t){let n=this._guardRecordInput(e,t);if(!n.ok)return{data:e,issues:n.issues,typeOk:!1};let{issues:r,output:i}=this._parseRecordEntries(n.value,t);return{data:i,issues:r,typeOk:!0}}async parseAsync(e,i){let a=i??r._makeCtx();return this._withCatchAsync(async()=>{let r=this._prepareInput(e);if(r.skip)return r.value;let i=this._guardRecordInput(r.value,a);if(!i.ok)throw new t.SpellValidationError(i.issues);let o=i.value,s=Object.keys(o),c=await Promise.all(s.map(e=>Promise.all([this.keySchema._parseFullAsync(e,a),this.valueSchema._parseFullAsync(o[e],a)]))),l=[],u={};for(let e=0;e<s.length;e++){let r=s[e],[i,a]=c[e];if(i.issues.length>0){l.push(...t.prependIssuePath(i.issues,r));continue}let o=i.data;n.isUnsafeObjectKey(o)||(a.issues.length===0?n.defineOwnProperty(u,o,a.data):l.push(...t.prependIssuePath(a.issues,r)))}let d=await this._runValidatorsAsync(u,a),f=[...l,...d];if(f.length>0)throw new t.SpellValidationError(f);return this._runPostprocessors(u)})}_toDescriptorImpl(){return{...this._describeBase(),key:this.keySchema.definition(),kind:`record`,value:this.valueSchema.definition()}}_walk(e){let t=this.keySchema.walk(e),n=this.valueSchema.walk(e);return e.record?e.record(this,t,n):super._walk(e)}};exports.RecordSchema=i;
1
+ const e=require("../errors.cjs"),t=require("../safe-object.cjs"),n=require("../types.cjs"),r=require("../core.cjs");var i=class extends r.Schema{keySchema;valueSchema;get _kind(){return`record`}checkAsync(e){return this._addCheck(e,!0)}constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}_guardRecordInput(e,t){return typeof e!=`object`||!e||Array.isArray(e)?{issues:[{code:n.ErrorCode.invalid_type,message:t.messages.object.type(),path:[]}],ok:!1}:{ok:!0,value:e}}_parseRecordEntries(n,r){let i=[],a={};for(let o of Object.keys(n)){let s=this.keySchema._parseFullSync(o,r);if(s.issues.length>0){i.push(...e.prependIssuePath(s.issues,o));continue}let c=s.data;if(t.isUnsafeObjectKey(c))continue;let l=this.valueSchema._parseFullSync(n[o],r);l.issues.length===0?t.defineOwnProperty(a,c,l.data):i.push(...e.prependIssuePath(l.issues,o))}return{issues:i,output:a}}_parse(e,t){let n=this._guardRecordInput(e,t);if(!n.ok)return{data:e,issues:n.issues,typeOk:!1};let{issues:r,output:i}=this._parseRecordEntries(n.value,t);return{data:i,issues:r,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=this._guardRecordInput(r.value,a);if(!i.ok)throw new e.SpellValidationError(i.issues);let o=i.value,s=Object.keys(o),c=await Promise.all(s.map(e=>Promise.all([this.keySchema._parseFullAsync(e,a),this.valueSchema._parseFullAsync(o[e],a)]))),l=[],u={};for(let n=0;n<s.length;n++){let r=s[n],[i,a]=c[n];if(i.issues.length>0){l.push(...e.prependIssuePath(i.issues,r));continue}let o=i.data;t.isUnsafeObjectKey(o)||(a.issues.length===0?t.defineOwnProperty(u,o,a.data):l.push(...e.prependIssuePath(a.issues,r)))}let d=await this._runValidatorsAsync(u,a),f=[...l,...d];if(f.length>0)throw new e.SpellValidationError(f);return this._runPostprocessors(u)})}_toDescriptorImpl(){return{...this._describeBase(),key:this.keySchema.definition(),kind:`record`,value:this.valueSchema.definition()}}_walk(e){let t=this.keySchema.walk(e),n=this.valueSchema.walk(e);return e.record?e.record(this,t,n):super._walk(e)}};exports.RecordSchema=i;
2
2
  //# sourceMappingURL=record.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"record.cjs","names":[],"sources":["../../src/schemas/record.ts"],"sourcesContent":["import type {\n AnySchema,\n CheckContext,\n InferOutput,\n InferSchemaMode,\n Issue,\n MergeSchemaModes,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateResult,\n} from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\nimport { defineOwnProperty, isUnsafeObjectKey } from '../safe-object';\n\nexport class RecordSchema<\n K extends AnySchema,\n V extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<K | V>>,\n> extends Schema<Record<InferOutput<K> & string, InferOutput<V>>, unknown, Mode> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'record';\n }\n\n override checkAsync(\n this: RecordSchema<K, V, 'sync'>,\n fn: (value: Record<InferOutput<K> & string, InferOutput<V>>, ctx: CheckContext) => Promise<ValidateResult>,\n ): RecordSchema<K, V, 'async'> {\n return this._addCheck(fn, true) as unknown as RecordSchema<K, V, 'async'>;\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n private _guardRecordInput(\n value: unknown,\n ctx: ParseContext,\n ): { ok: true; value: Record<string, unknown> } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { ok: true, value: value as Record<string, unknown> };\n }\n\n private _parseRecordEntries(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): { issues: Issue[]; output: Record<string, unknown> } {\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (const key of Object.keys(obj)) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n const valResult = this.valueSchema._parseFullSync(obj[key], ctx);\n\n if (valResult.issues.length === 0) {\n defineOwnProperty(output, parsedKey, valResult.data);\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n return { issues, output };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardRecordInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { issues, output } = this._parseRecordEntries(guarded.value, ctx);\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(\n value: unknown,\n ctx?: ParseContext,\n ): Promise<Record<InferOutput<K> & string, InferOutput<V>>> {\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 Record<InferOutput<K> & string, InferOutput<V>>;\n\n const guarded = this._guardRecordInput(prepared.value, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const obj = guarded.value;\n const keys = Object.keys(obj);\n const settled = await Promise.all(\n keys.map((key) =>\n Promise.all([this.keySchema._parseFullAsync(key, c), this.valueSchema._parseFullAsync(obj[key], c)]),\n ),\n );\n\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n if (valResult.issues.length === 0) {\n defineOwnProperty(output, parsedKey, valResult.data);\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as Record<InferOutput<K> & string, InferOutput<V>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'record',\n value: this.valueSchema.definition(),\n };\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const key = this.keySchema.walk(visitor);\n const value = this.valueSchema.walk(visitor);\n\n if (visitor.record) return visitor.record(this, key, value);\n\n return super._walk(visitor);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"record.cjs","names":[],"sources":["../../src/schemas/record.ts"],"sourcesContent":["import type {\n AnySchema,\n CheckContext,\n InferInput,\n InferOutput,\n InferSchemaMode,\n Issue,\n MergeSchemaModes,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateResult,\n} from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\nimport { defineOwnProperty, isUnsafeObjectKey } from '../safe-object';\n\nexport class RecordSchema<\n K extends AnySchema,\n V extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<K | V>>,\n> extends Schema<Record<InferOutput<K> & string, InferOutput<V>>, Record<InferInput<K> & string, InferInput<V>>, Mode> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'record';\n }\n\n override checkAsync(\n this: RecordSchema<K, V, 'sync'>,\n fn: (value: Record<InferOutput<K> & string, InferOutput<V>>, ctx: CheckContext) => Promise<ValidateResult>,\n ): RecordSchema<K, V, 'async'> {\n return this._addCheck(fn, true) as unknown as RecordSchema<K, V, 'async'>;\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n private _guardRecordInput(\n value: unknown,\n ctx: ParseContext,\n ): { ok: true; value: Record<string, unknown> } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { ok: true, value: value as Record<string, unknown> };\n }\n\n private _parseRecordEntries(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): { issues: Issue[]; output: Record<string, unknown> } {\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (const key of Object.keys(obj)) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n const valResult = this.valueSchema._parseFullSync(obj[key], ctx);\n\n if (valResult.issues.length === 0) {\n defineOwnProperty(output, parsedKey, valResult.data);\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n return { issues, output };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardRecordInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { issues, output } = this._parseRecordEntries(guarded.value, ctx);\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(\n value: unknown,\n ctx?: ParseContext,\n ): Promise<Record<InferOutput<K> & string, InferOutput<V>>> {\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 Record<InferOutput<K> & string, InferOutput<V>>;\n\n const guarded = this._guardRecordInput(prepared.value, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const obj = guarded.value;\n const keys = Object.keys(obj);\n const settled = await Promise.all(\n keys.map((key) =>\n Promise.all([this.keySchema._parseFullAsync(key, c), this.valueSchema._parseFullAsync(obj[key], c)]),\n ),\n );\n\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n if (valResult.issues.length === 0) {\n defineOwnProperty(output, parsedKey, valResult.data);\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as Record<InferOutput<K> & string, InferOutput<V>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'record',\n value: this.valueSchema.definition(),\n };\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const key = this.keySchema.walk(visitor);\n const value = this.valueSchema.walk(visitor);\n\n if (visitor.record) return visitor.record(this, key, value);\n\n return super._walk(visitor);\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import type { AnySchema, CheckContext, InferOutput, InferSchemaMode, MergeSchemaModes, ParseContext, ParseValue, SchemaDescriptor, SchemaMode, SchemaWalker, ValidateResult } from '../core';
1
+ import type { AnySchema, CheckContext, InferInput, InferOutput, InferSchemaMode, MergeSchemaModes, ParseContext, ParseValue, SchemaDescriptor, SchemaMode, SchemaWalker, ValidateResult } from '../core';
2
2
  import { Schema } from '../core';
3
- export declare class RecordSchema<K extends AnySchema, V extends AnySchema, Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<K | V>>> extends Schema<Record<InferOutput<K> & string, InferOutput<V>>, unknown, Mode> {
3
+ export declare class RecordSchema<K extends AnySchema, V extends AnySchema, Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<K | V>>> extends Schema<Record<InferOutput<K> & string, InferOutput<V>>, Record<InferInput<K> & string, InferInput<V>>, Mode> {
4
4
  readonly keySchema: K;
5
5
  readonly valueSchema: V;
6
6
  protected get _kind(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/schemas/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,eAAe,EAEf,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAyC,MAAM,EAAwB,MAAM,SAAS,CAAC;AAG9F,qBAAa,YAAY,CACvB,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,EACnB,IAAI,SAAS,UAAU,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAClE,SAAQ,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC;IAC9E,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAExB,cAAuB,KAAK,IAAI,MAAM,CAErC;IAEQ,UAAU,CACjB,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAChC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,GACzG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;gBAIlB,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IAMxC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,mBAAmB;cAiCR,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU;IAUzD,UAAU,CACvB,KAAK,EAAE,OAAO,EACd,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;cAsDxC,iBAAiB,IAAI,gBAAgB;cASrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;CAQhE"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/schemas/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EAEf,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAyC,MAAM,EAAwB,MAAM,SAAS,CAAC;AAG9F,qBAAa,YAAY,CACvB,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,EACnB,IAAI,SAAS,UAAU,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAClE,SAAQ,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACpH,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAExB,cAAuB,KAAK,IAAI,MAAM,CAErC;IAEQ,UAAU,CACjB,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAChC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,GACzG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;gBAIlB,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IAMxC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,mBAAmB;cAiCR,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU;IAUzD,UAAU,CACvB,KAAK,EAAE,OAAO,EACd,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;cAsDxC,iBAAiB,IAAI,gBAAgB;cASrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;CAQhE"}
@@ -1,2 +1,2 @@
1
- import{ErrorCode as e}from"../types.js";import{SpellValidationError as t,prependIssuePath as n}from"../errors.js";import{defineOwnProperty as r,isUnsafeObjectKey as i}from"../safe-object.js";import{Schema as a,_makeCtx as o}from"../core.js";var s=class extends a{keySchema;valueSchema;get _kind(){return`record`}checkAsync(e){return this._addCheck(e,!0)}constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}_guardRecordInput(t,n){return typeof t!=`object`||!t||Array.isArray(t)?{issues:[{code:e.invalid_type,message:n.messages.object.type(),path:[]}],ok:!1}:{ok:!0,value:t}}_parseRecordEntries(e,t){let a=[],o={};for(let s of Object.keys(e)){let c=this.keySchema._parseFullSync(s,t);if(c.issues.length>0){a.push(...n(c.issues,s));continue}let l=c.data;if(i(l))continue;let u=this.valueSchema._parseFullSync(e[s],t);u.issues.length===0?r(o,l,u.data):a.push(...n(u.issues,s))}return{issues:a,output:o}}_parse(e,t){let n=this._guardRecordInput(e,t);if(!n.ok)return{data:e,issues:n.issues,typeOk:!1};let{issues:r,output:i}=this._parseRecordEntries(n.value,t);return{data:i,issues:r,typeOk:!0}}async parseAsync(e,a){let s=a??o();return this._withCatchAsync(async()=>{let a=this._prepareInput(e);if(a.skip)return a.value;let o=this._guardRecordInput(a.value,s);if(!o.ok)throw new t(o.issues);let c=o.value,l=Object.keys(c),u=await Promise.all(l.map(e=>Promise.all([this.keySchema._parseFullAsync(e,s),this.valueSchema._parseFullAsync(c[e],s)]))),d=[],f={};for(let e=0;e<l.length;e++){let t=l[e],[a,o]=u[e];if(a.issues.length>0){d.push(...n(a.issues,t));continue}let s=a.data;i(s)||(o.issues.length===0?r(f,s,o.data):d.push(...n(o.issues,t)))}let p=await this._runValidatorsAsync(f,s),m=[...d,...p];if(m.length>0)throw new t(m);return this._runPostprocessors(f)})}_toDescriptorImpl(){return{...this._describeBase(),key:this.keySchema.definition(),kind:`record`,value:this.valueSchema.definition()}}_walk(e){let t=this.keySchema.walk(e),n=this.valueSchema.walk(e);return e.record?e.record(this,t,n):super._walk(e)}};export{s as RecordSchema};
1
+ import{SpellValidationError as e,prependIssuePath as t}from"../errors.js";import{defineOwnProperty as n,isUnsafeObjectKey as r}from"../safe-object.js";import{ErrorCode as i}from"../types.js";import{Schema as a,_makeCtx as o}from"../core.js";var s=class extends a{keySchema;valueSchema;get _kind(){return`record`}checkAsync(e){return this._addCheck(e,!0)}constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}_guardRecordInput(e,t){return typeof e!=`object`||!e||Array.isArray(e)?{issues:[{code:i.invalid_type,message:t.messages.object.type(),path:[]}],ok:!1}:{ok:!0,value:e}}_parseRecordEntries(e,i){let a=[],o={};for(let s of Object.keys(e)){let c=this.keySchema._parseFullSync(s,i);if(c.issues.length>0){a.push(...t(c.issues,s));continue}let l=c.data;if(r(l))continue;let u=this.valueSchema._parseFullSync(e[s],i);u.issues.length===0?n(o,l,u.data):a.push(...t(u.issues,s))}return{issues:a,output:o}}_parse(e,t){let n=this._guardRecordInput(e,t);if(!n.ok)return{data:e,issues:n.issues,typeOk:!1};let{issues:r,output:i}=this._parseRecordEntries(n.value,t);return{data:i,issues:r,typeOk:!0}}async parseAsync(i,a){let s=a??o();return this._withCatchAsync(async()=>{let a=this._prepareInput(i);if(a.skip)return a.value;let o=this._guardRecordInput(a.value,s);if(!o.ok)throw new e(o.issues);let c=o.value,l=Object.keys(c),u=await Promise.all(l.map(e=>Promise.all([this.keySchema._parseFullAsync(e,s),this.valueSchema._parseFullAsync(c[e],s)]))),d=[],f={};for(let e=0;e<l.length;e++){let i=l[e],[a,o]=u[e];if(a.issues.length>0){d.push(...t(a.issues,i));continue}let s=a.data;r(s)||(o.issues.length===0?n(f,s,o.data):d.push(...t(o.issues,i)))}let p=await this._runValidatorsAsync(f,s),m=[...d,...p];if(m.length>0)throw new e(m);return this._runPostprocessors(f)})}_toDescriptorImpl(){return{...this._describeBase(),key:this.keySchema.definition(),kind:`record`,value:this.valueSchema.definition()}}_walk(e){let t=this.keySchema.walk(e),n=this.valueSchema.walk(e);return e.record?e.record(this,t,n):super._walk(e)}};export{s as RecordSchema};
2
2
  //# sourceMappingURL=record.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"record.js","names":[],"sources":["../../src/schemas/record.ts"],"sourcesContent":["import type {\n AnySchema,\n CheckContext,\n InferOutput,\n InferSchemaMode,\n Issue,\n MergeSchemaModes,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateResult,\n} from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\nimport { defineOwnProperty, isUnsafeObjectKey } from '../safe-object';\n\nexport class RecordSchema<\n K extends AnySchema,\n V extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<K | V>>,\n> extends Schema<Record<InferOutput<K> & string, InferOutput<V>>, unknown, Mode> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'record';\n }\n\n override checkAsync(\n this: RecordSchema<K, V, 'sync'>,\n fn: (value: Record<InferOutput<K> & string, InferOutput<V>>, ctx: CheckContext) => Promise<ValidateResult>,\n ): RecordSchema<K, V, 'async'> {\n return this._addCheck(fn, true) as unknown as RecordSchema<K, V, 'async'>;\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n private _guardRecordInput(\n value: unknown,\n ctx: ParseContext,\n ): { ok: true; value: Record<string, unknown> } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { ok: true, value: value as Record<string, unknown> };\n }\n\n private _parseRecordEntries(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): { issues: Issue[]; output: Record<string, unknown> } {\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (const key of Object.keys(obj)) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n const valResult = this.valueSchema._parseFullSync(obj[key], ctx);\n\n if (valResult.issues.length === 0) {\n defineOwnProperty(output, parsedKey, valResult.data);\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n return { issues, output };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardRecordInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { issues, output } = this._parseRecordEntries(guarded.value, ctx);\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(\n value: unknown,\n ctx?: ParseContext,\n ): Promise<Record<InferOutput<K> & string, InferOutput<V>>> {\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 Record<InferOutput<K> & string, InferOutput<V>>;\n\n const guarded = this._guardRecordInput(prepared.value, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const obj = guarded.value;\n const keys = Object.keys(obj);\n const settled = await Promise.all(\n keys.map((key) =>\n Promise.all([this.keySchema._parseFullAsync(key, c), this.valueSchema._parseFullAsync(obj[key], c)]),\n ),\n );\n\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n if (valResult.issues.length === 0) {\n defineOwnProperty(output, parsedKey, valResult.data);\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as Record<InferOutput<K> & string, InferOutput<V>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'record',\n value: this.valueSchema.definition(),\n };\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const key = this.keySchema.walk(visitor);\n const value = this.valueSchema.walk(visitor);\n\n if (visitor.record) return visitor.record(this, key, value);\n\n return super._walk(visitor);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"record.js","names":[],"sources":["../../src/schemas/record.ts"],"sourcesContent":["import type {\n AnySchema,\n CheckContext,\n InferInput,\n InferOutput,\n InferSchemaMode,\n Issue,\n MergeSchemaModes,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateResult,\n} from '../core';\n\nimport { _makeCtx, ErrorCode, prependIssuePath, Schema, SpellValidationError } from '../core';\nimport { defineOwnProperty, isUnsafeObjectKey } from '../safe-object';\n\nexport class RecordSchema<\n K extends AnySchema,\n V extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<K | V>>,\n> extends Schema<Record<InferOutput<K> & string, InferOutput<V>>, Record<InferInput<K> & string, InferInput<V>>, Mode> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'record';\n }\n\n override checkAsync(\n this: RecordSchema<K, V, 'sync'>,\n fn: (value: Record<InferOutput<K> & string, InferOutput<V>>, ctx: CheckContext) => Promise<ValidateResult>,\n ): RecordSchema<K, V, 'async'> {\n return this._addCheck(fn, true) as unknown as RecordSchema<K, V, 'async'>;\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n private _guardRecordInput(\n value: unknown,\n ctx: ParseContext,\n ): { ok: true; value: Record<string, unknown> } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { ok: true, value: value as Record<string, unknown> };\n }\n\n private _parseRecordEntries(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): { issues: Issue[]; output: Record<string, unknown> } {\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (const key of Object.keys(obj)) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n const valResult = this.valueSchema._parseFullSync(obj[key], ctx);\n\n if (valResult.issues.length === 0) {\n defineOwnProperty(output, parsedKey, valResult.data);\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n return { issues, output };\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardRecordInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { issues, output } = this._parseRecordEntries(guarded.value, ctx);\n\n return { data: output, issues, typeOk: true };\n }\n\n override async parseAsync(\n value: unknown,\n ctx?: ParseContext,\n ): Promise<Record<InferOutput<K> & string, InferOutput<V>>> {\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 Record<InferOutput<K> & string, InferOutput<V>>;\n\n const guarded = this._guardRecordInput(prepared.value, c);\n\n if (!guarded.ok) throw new SpellValidationError(guarded.issues);\n\n const obj = guarded.value;\n const keys = Object.keys(obj);\n const settled = await Promise.all(\n keys.map((key) =>\n Promise.all([this.keySchema._parseFullAsync(key, c), this.valueSchema._parseFullAsync(obj[key], c)]),\n ),\n );\n\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) {\n issues.push(...prependIssuePath(keyResult.issues, key));\n continue;\n }\n\n const parsedKey = keyResult.data as string;\n\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(parsedKey)) continue;\n\n if (valResult.issues.length === 0) {\n defineOwnProperty(output, parsedKey, valResult.data);\n } else {\n issues.push(...prependIssuePath(valResult.issues, key));\n }\n }\n\n const validationIssues = await this._runValidatorsAsync(output, c);\n const allIssues = [...issues, ...validationIssues];\n\n if (allIssues.length > 0) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(output) as Record<InferOutput<K> & string, InferOutput<V>>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'record',\n value: this.valueSchema.definition(),\n };\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const key = this.keySchema.walk(visitor);\n const value = this.valueSchema.walk(visitor);\n\n if (visitor.record) return visitor.record(this, key, value);\n\n return super._walk(visitor);\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("../types.cjs"),t=require("../errors.cjs"),n=require("../core.cjs");var r=class extends n.Schema{itemSchema;get _kind(){return`set`}checkAsync(e){return this._addCheck(e,!0)}constructor(e){super(),this.itemSchema=e}_parse(n,r){if(!(n instanceof Set))return{data:n,issues:[{code:e.ErrorCode.invalid_type,message:r.messages.set.type(),path:[]}],typeOk:!1};let i=[],a=new Set,o=0;for(let e of n){let n=this.itemSchema._parseFullSync(e,r);n.issues.length===0?a.add(n.data):i.push(...t.prependIssuePath(n.issues,o)),o+=1}return{data:a,issues:i,typeOk:!0}}async parseAsync(r,i){let a=i??n._makeCtx();return this._withCatchAsync(async()=>{let n=this._prepareInput(r);if(n.skip)return n.value;let i=n.value;if(!(i instanceof Set))throw new t.SpellValidationError([{code:e.ErrorCode.invalid_type,message:a.messages.set.type(),path:[]}]);let o=[...i],s=await Promise.all(o.map(e=>this.itemSchema._parseFullAsync(e,a))),c=[],l=new Set;for(let e=0;e<s.length;e++){let n=s[e];n.issues.length===0?l.add(n.data):c.push(...t.prependIssuePath(n.issues,e))}let u=await this._runValidatorsAsync(l,a),d=[...c,...u];if(d.length>0)throw new t.SpellValidationError(d);return this._runPostprocessors(l)})}min(n,r){return this._addConstraint((i,a)=>{let o=i;return o.size>=n?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(r??a.messages.set.min,{min:n,value:o}),{min:n})})}max(n,r){return this._addConstraint((i,a)=>{let o=i;return o.size<=n?null:t.fail(e.ErrorCode.too_big,t.resolveMessage(r??a.messages.set.max,{max:n,value:o}),{max:n})})}size(n,r){return this._addConstraint((i,a)=>{let o=i;return o.size===n?null:t.fail(e.ErrorCode.invalid_length,t.resolveMessage(r??a.messages.set.size,{exact:n,value:o}),{exact:n})})}nonEmpty(n){return this._addConstraint((r,i)=>r.size>0?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(n??i.messages.set.nonEmpty,{min:1}),{min:1}))}_toDescriptorImpl(){return{...this._describeBase(),items:this.itemSchema.definition(),kind:`set`}}_walk(e){let t=this.itemSchema.walk(e);return e.set?e.set(this,t):super._walk(e)}};exports.SetSchema=r;
1
+ const e=require("../errors.cjs"),t=require("../types.cjs"),n=require("../core.cjs");var r=class extends n.Schema{itemSchema;get _kind(){return`set`}checkAsync(e){return this._addCheck(e,!0)}constructor(e){super(),this.itemSchema=e}_parse(n,r){if(!(n instanceof Set))return{data:n,issues:[{code:t.ErrorCode.invalid_type,message:r.messages.set.type(),path:[]}],typeOk:!1};let i=[],a=new Set,o=0;for(let t of n){let n=this.itemSchema._parseFullSync(t,r);n.issues.length===0?a.add(n.data):i.push(...e.prependIssuePath(n.issues,o)),o+=1}return{data:a,issues:i,typeOk:!0}}async parseAsync(r,i){let a=i??n._makeCtx();return this._withCatchAsync(async()=>{let n=this._prepareInput(r);if(n.skip)return n.value;let i=n.value;if(!(i instanceof Set))throw new e.SpellValidationError([{code:t.ErrorCode.invalid_type,message:a.messages.set.type(),path:[]}]);let o=[...i],s=await Promise.all(o.map(e=>this.itemSchema._parseFullAsync(e,a))),c=[],l=new Set;for(let t=0;t<s.length;t++){let n=s[t];n.issues.length===0?l.add(n.data):c.push(...e.prependIssuePath(n.issues,t))}let u=await this._runValidatorsAsync(l,a),d=[...c,...u];if(d.length>0)throw new e.SpellValidationError(d);return this._runPostprocessors(l)})}min(n,r){return this._addConstraint((i,a)=>{let o=i;return o.size>=n?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(r??a.messages.set.min,{min:n,value:o}),{min:n})})}max(n,r){return this._addConstraint((i,a)=>{let o=i;return o.size<=n?null:e.fail(t.ErrorCode.too_big,e.resolveMessage(r??a.messages.set.max,{max:n,value:o}),{max:n})})}size(n,r){return this._addConstraint((i,a)=>{let o=i;return o.size===n?null:e.fail(t.ErrorCode.invalid_length,e.resolveMessage(r??a.messages.set.size,{exact:n,value:o}),{exact:n})})}nonEmpty(n){return this._addConstraint((r,i)=>r.size>0?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(n??i.messages.set.nonEmpty,{min:1}),{min:1}))}_toDescriptorImpl(){return{...this._describeBase(),items:this.itemSchema.definition(),kind:`set`}}_walk(e){let t=this.itemSchema.walk(e);return e.set?e.set(this,t):super._walk(e)}};exports.SetSchema=r;
2
2
  //# sourceMappingURL=set.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"set.cjs","names":[],"sources":["../../src/schemas/set.ts"],"sourcesContent":["import type {\n AnySchema,\n CheckContext,\n InferOutput,\n InferSchemaMode,\n Issue,\n MergeSchemaModes,\n MessageFn,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateResult,\n} from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\nexport class SetSchema<\n T extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<T>>,\n> extends Schema<Set<InferOutput<T>>, unknown, Mode> {\n readonly itemSchema: T;\n\n protected override get _kind(): string {\n return 'set';\n }\n\n override checkAsync(\n this: SetSchema<T, 'sync'>,\n fn: (value: Set<InferOutput<T>>, ctx: CheckContext) => Promise<ValidateResult>,\n ): SetSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as SetSchema<T, 'async'>;\n }\n\n constructor(itemSchema: T) {\n super();\n this.itemSchema = itemSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Set)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.set.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<T>>();\n let i = 0;\n\n for (const item of value) {\n const result = this.itemSchema._parseFullSync(item, ctx);\n\n if (result.issues.length === 0) {\n parsed.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n }\n\n i += 1;\n }\n\n return { data: parsed, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<Set<InferOutput<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 Set<InferOutput<T>>;\n\n const raw = prepared.value;\n\n if (!(raw instanceof Set)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.set.type(), path: [] }]);\n }\n\n const items = [...raw];\n const settled = await Promise.all(items.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<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.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\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 Set<InferOutput<T>>;\n });\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.set.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.set.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), items: this.itemSchema.definition(), kind: 'set' };\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.set) return visitor.set(this, item);\n\n return super._walk(visitor);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"set.cjs","names":[],"sources":["../../src/schemas/set.ts"],"sourcesContent":["import type {\n AnySchema,\n CheckContext,\n InferInput,\n InferOutput,\n InferSchemaMode,\n Issue,\n MergeSchemaModes,\n MessageFn,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateResult,\n} from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\nexport class SetSchema<\n T extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<T>>,\n> extends Schema<Set<InferOutput<T>>, Set<InferInput<T>>, Mode> {\n readonly itemSchema: T;\n\n protected override get _kind(): string {\n return 'set';\n }\n\n override checkAsync(\n this: SetSchema<T, 'sync'>,\n fn: (value: Set<InferOutput<T>>, ctx: CheckContext) => Promise<ValidateResult>,\n ): SetSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as SetSchema<T, 'async'>;\n }\n\n constructor(itemSchema: T) {\n super();\n this.itemSchema = itemSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Set)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.set.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<T>>();\n let i = 0;\n\n for (const item of value) {\n const result = this.itemSchema._parseFullSync(item, ctx);\n\n if (result.issues.length === 0) {\n parsed.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n }\n\n i += 1;\n }\n\n return { data: parsed, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<Set<InferOutput<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 Set<InferOutput<T>>;\n\n const raw = prepared.value;\n\n if (!(raw instanceof Set)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.set.type(), path: [] }]);\n }\n\n const items = [...raw];\n const settled = await Promise.all(items.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<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.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\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 Set<InferOutput<T>>;\n });\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.set.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.set.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), items: this.itemSchema.definition(), kind: 'set' };\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.set) return visitor.set(this, item);\n\n return super._walk(visitor);\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import type { AnySchema, CheckContext, InferOutput, InferSchemaMode, MergeSchemaModes, MessageFn, ParseContext, ParseValue, SchemaDescriptor, SchemaMode, SchemaWalker, ValidateResult } from '../core';
1
+ import type { AnySchema, CheckContext, InferInput, InferOutput, InferSchemaMode, MergeSchemaModes, MessageFn, ParseContext, ParseValue, SchemaDescriptor, SchemaMode, SchemaWalker, ValidateResult } from '../core';
2
2
  import { Schema } from '../core';
3
- export declare class SetSchema<T extends AnySchema, Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<T>>> extends Schema<Set<InferOutput<T>>, unknown, Mode> {
3
+ export declare class SetSchema<T extends AnySchema, Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<T>>> extends Schema<Set<InferOutput<T>>, Set<InferInput<T>>, Mode> {
4
4
  readonly itemSchema: T;
5
5
  protected get _kind(): string;
6
6
  checkAsync(this: SetSchema<T, 'sync'>, fn: (value: Set<InferOutput<T>>, ctx: CheckContext) => Promise<ValidateResult>): SetSchema<T, 'async'>;
@@ -1 +1 @@
1
- {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/schemas/set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,eAAe,EAEf,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAA+D,MAAM,EAAwB,MAAM,SAAS,CAAC;AAEpH,qBAAa,SAAS,CACpB,CAAC,SAAS,SAAS,EACnB,IAAI,SAAS,UAAU,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAC9D,SAAQ,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAEvB,cAAuB,KAAK,IAAI,MAAM,CAErC;IAEQ,UAAU,CACjB,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAC1B,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,GAC7E,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;gBAIZ,UAAU,EAAE,CAAC;cAKN,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU;IA4BzD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAuC3F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAYlF,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAYlF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IActF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;cAUjC,iBAAiB,IAAI,gBAAgB;cAIrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;CAOhE"}
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/schemas/set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EAEf,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAA+D,MAAM,EAAwB,MAAM,SAAS,CAAC;AAEpH,qBAAa,SAAS,CACpB,CAAC,SAAS,SAAS,EACnB,IAAI,SAAS,UAAU,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAC9D,SAAQ,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC7D,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAEvB,cAAuB,KAAK,IAAI,MAAM,CAErC;IAEQ,UAAU,CACjB,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAC1B,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,GAC7E,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;gBAIZ,UAAU,EAAE,CAAC;cAKN,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU;IA4BzD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAuC3F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAYlF,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAYlF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IActF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;cAUjC,iBAAiB,IAAI,gBAAgB;cAIrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;CAOhE"}
@@ -1,2 +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{Schema as a,_makeCtx as o}from"../core.js";var s=class extends a{itemSchema;get _kind(){return`set`}checkAsync(e){return this._addCheck(e,!0)}constructor(e){super(),this.itemSchema=e}_parse(t,n){if(!(t instanceof Set))return{data:t,issues:[{code:e.invalid_type,message:n.messages.set.type(),path:[]}],typeOk:!1};let i=[],a=new Set,o=0;for(let e of t){let t=this.itemSchema._parseFullSync(e,n);t.issues.length===0?a.add(t.data):i.push(...r(t.issues,o)),o+=1}return{data:a,issues:i,typeOk:!0}}async parseAsync(n,i){let a=i??o();return this._withCatchAsync(async()=>{let i=this._prepareInput(n);if(i.skip)return i.value;let o=i.value;if(!(o instanceof Set))throw new t([{code:e.invalid_type,message:a.messages.set.type(),path:[]}]);let s=[...o],c=await Promise.all(s.map(e=>this.itemSchema._parseFullAsync(e,a))),l=[],u=new Set;for(let e=0;e<c.length;e++){let t=c[e];t.issues.length===0?u.add(t.data):l.push(...r(t.issues,e))}let d=await this._runValidatorsAsync(u,a),f=[...l,...d];if(f.length>0)throw new t(f);return this._runPostprocessors(u)})}min(t,r){return this._addConstraint((a,o)=>{let s=a;return s.size>=t?null:n(e.too_small,i(r??o.messages.set.min,{min:t,value:s}),{min:t})})}max(t,r){return this._addConstraint((a,o)=>{let s=a;return s.size<=t?null:n(e.too_big,i(r??o.messages.set.max,{max:t,value:s}),{max:t})})}size(t,r){return this._addConstraint((a,o)=>{let s=a;return s.size===t?null:n(e.invalid_length,i(r??o.messages.set.size,{exact:t,value:s}),{exact:t})})}nonEmpty(t){return this._addConstraint((r,a)=>r.size>0?null:n(e.too_small,i(t??a.messages.set.nonEmpty,{min:1}),{min:1}))}_toDescriptorImpl(){return{...this._describeBase(),items:this.itemSchema.definition(),kind:`set`}}_walk(e){let t=this.itemSchema.walk(e);return e.set?e.set(this,t):super._walk(e)}};export{s as SetSchema};
1
+ import{SpellValidationError as e,fail as t,prependIssuePath as n,resolveMessage as r}from"../errors.js";import{ErrorCode as i}from"../types.js";import{Schema as a,_makeCtx as o}from"../core.js";var s=class extends a{itemSchema;get _kind(){return`set`}checkAsync(e){return this._addCheck(e,!0)}constructor(e){super(),this.itemSchema=e}_parse(e,t){if(!(e instanceof Set))return{data:e,issues:[{code:i.invalid_type,message:t.messages.set.type(),path:[]}],typeOk:!1};let r=[],a=new Set,o=0;for(let i of e){let e=this.itemSchema._parseFullSync(i,t);e.issues.length===0?a.add(e.data):r.push(...n(e.issues,o)),o+=1}return{data:a,issues:r,typeOk:!0}}async parseAsync(t,r){let a=r??o();return this._withCatchAsync(async()=>{let r=this._prepareInput(t);if(r.skip)return r.value;let o=r.value;if(!(o instanceof Set))throw new e([{code:i.invalid_type,message:a.messages.set.type(),path:[]}]);let s=[...o],c=await Promise.all(s.map(e=>this.itemSchema._parseFullAsync(e,a))),l=[],u=new Set;for(let e=0;e<c.length;e++){let t=c[e];t.issues.length===0?u.add(t.data):l.push(...n(t.issues,e))}let d=await this._runValidatorsAsync(u,a),f=[...l,...d];if(f.length>0)throw new e(f);return this._runPostprocessors(u)})}min(e,n){return this._addConstraint((a,o)=>{let s=a;return s.size>=e?null:t(i.too_small,r(n??o.messages.set.min,{min:e,value:s}),{min:e})})}max(e,n){return this._addConstraint((a,o)=>{let s=a;return s.size<=e?null:t(i.too_big,r(n??o.messages.set.max,{max:e,value:s}),{max:e})})}size(e,n){return this._addConstraint((a,o)=>{let s=a;return s.size===e?null:t(i.invalid_length,r(n??o.messages.set.size,{exact:e,value:s}),{exact:e})})}nonEmpty(e){return this._addConstraint((n,a)=>n.size>0?null:t(i.too_small,r(e??a.messages.set.nonEmpty,{min:1}),{min:1}))}_toDescriptorImpl(){return{...this._describeBase(),items:this.itemSchema.definition(),kind:`set`}}_walk(e){let t=this.itemSchema.walk(e);return e.set?e.set(this,t):super._walk(e)}};export{s as SetSchema};
2
2
  //# sourceMappingURL=set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"set.js","names":[],"sources":["../../src/schemas/set.ts"],"sourcesContent":["import type {\n AnySchema,\n CheckContext,\n InferOutput,\n InferSchemaMode,\n Issue,\n MergeSchemaModes,\n MessageFn,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateResult,\n} from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\nexport class SetSchema<\n T extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<T>>,\n> extends Schema<Set<InferOutput<T>>, unknown, Mode> {\n readonly itemSchema: T;\n\n protected override get _kind(): string {\n return 'set';\n }\n\n override checkAsync(\n this: SetSchema<T, 'sync'>,\n fn: (value: Set<InferOutput<T>>, ctx: CheckContext) => Promise<ValidateResult>,\n ): SetSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as SetSchema<T, 'async'>;\n }\n\n constructor(itemSchema: T) {\n super();\n this.itemSchema = itemSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Set)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.set.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<T>>();\n let i = 0;\n\n for (const item of value) {\n const result = this.itemSchema._parseFullSync(item, ctx);\n\n if (result.issues.length === 0) {\n parsed.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n }\n\n i += 1;\n }\n\n return { data: parsed, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<Set<InferOutput<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 Set<InferOutput<T>>;\n\n const raw = prepared.value;\n\n if (!(raw instanceof Set)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.set.type(), path: [] }]);\n }\n\n const items = [...raw];\n const settled = await Promise.all(items.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<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.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\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 Set<InferOutput<T>>;\n });\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.set.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.set.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), items: this.itemSchema.definition(), kind: 'set' };\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.set) return visitor.set(this, item);\n\n return super._walk(visitor);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"set.js","names":[],"sources":["../../src/schemas/set.ts"],"sourcesContent":["import type {\n AnySchema,\n CheckContext,\n InferInput,\n InferOutput,\n InferSchemaMode,\n Issue,\n MergeSchemaModes,\n MessageFn,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n SchemaMode,\n SchemaWalker,\n ValidateResult,\n} from '../core';\n\nimport { _makeCtx, ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError } from '../core';\n\nexport class SetSchema<\n T extends AnySchema,\n Mode extends SchemaMode = MergeSchemaModes<InferSchemaMode<T>>,\n> extends Schema<Set<InferOutput<T>>, Set<InferInput<T>>, Mode> {\n readonly itemSchema: T;\n\n protected override get _kind(): string {\n return 'set';\n }\n\n override checkAsync(\n this: SetSchema<T, 'sync'>,\n fn: (value: Set<InferOutput<T>>, ctx: CheckContext) => Promise<ValidateResult>,\n ): SetSchema<T, 'async'> {\n return this._addCheck(fn, true) as unknown as SetSchema<T, 'async'>;\n }\n\n constructor(itemSchema: T) {\n super();\n this.itemSchema = itemSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Set)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.set.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<T>>();\n let i = 0;\n\n for (const item of value) {\n const result = this.itemSchema._parseFullSync(item, ctx);\n\n if (result.issues.length === 0) {\n parsed.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\n }\n\n i += 1;\n }\n\n return { data: parsed, issues, typeOk: true };\n }\n\n override async parseAsync(value: unknown, ctx?: ParseContext): Promise<Set<InferOutput<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 Set<InferOutput<T>>;\n\n const raw = prepared.value;\n\n if (!(raw instanceof Set)) {\n throw new SpellValidationError([{ code: ErrorCode.invalid_type, message: c.messages.set.type(), path: [] }]);\n }\n\n const items = [...raw];\n const settled = await Promise.all(items.map((item) => this.itemSchema._parseFullAsync(item, c)));\n\n const issues: Issue[] = [];\n const parsed = new Set<InferOutput<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.add(result.data as InferOutput<T>);\n } else {\n issues.push(...prependIssuePath(result.issues, i));\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 Set<InferOutput<T>>;\n });\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.set.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Set<unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.set.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Set<unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.set.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), items: this.itemSchema.definition(), kind: 'set' };\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.set) return visitor.set(this, item);\n\n return super._walk(visitor);\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("../types.cjs"),t=require("../errors.cjs");require("../_dev.cjs");const n=require("../core.cjs"),r=require("../formats.cjs");var i=class i extends n.Schema{get _kind(){return`string`}checkAsync(e){return this._addCheck(e,!0)}constructor(){super((n,r)=>typeof n==`string`?null:t.fail(e.ErrorCode.invalid_type,r.messages.string.type()))}min(n,r){return this._addConstraint((i,a)=>i.length>=n?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(r??a.messages.string.min,{min:n,value:i}),{min:n}),e=>{let t=e;return{...t,minLength:t.minLength===void 0?n:Math.max(t.minLength,n)}})}max(n,r){return this._addConstraint((i,a)=>i.length<=n?null:t.fail(e.ErrorCode.too_big,t.resolveMessage(r??a.messages.string.max,{max:n,value:i}),{max:n}),e=>{let t=e;return{...t,maxLength:t.maxLength===void 0?n:Math.min(t.maxLength,n)}})}length(n,r){return this._addConstraint((i,a)=>i.length===n?null:t.fail(e.ErrorCode.invalid_length,t.resolveMessage(r??a.messages.string.length,{exact:n,value:i}),{exact:n}),e=>({...e,maxLength:n,minLength:n}))}nonEmpty(n){return this._addConstraint((r,i)=>r.length>0?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(n??i.messages.string.nonEmpty,{min:1,value:r}),{min:1}),e=>{let t=e;return{...t,minLength:Math.max(t.minLength??0,1)}})}startsWith(n,r){return this._addConstraint((i,a)=>i.startsWith(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r??a.messages.string.startsWith,{prefix:n,value:i}),{prefix:n}))}endsWith(n,r){return this._addConstraint((i,a)=>i.endsWith(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r??a.messages.string.endsWith,{suffix:n,value:i}),{suffix:n}))}includes(n,r){return this._addConstraint((i,a)=>i.includes(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r??a.messages.string.includes,{substr:n,value:i}),{includes:n}))}regex(n,r){let i=new RegExp(n.source,n.flags.replace(/[gy]/g,``));return this._addConstraint((n,a)=>i.test(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r??a.messages.string.regex,{value:n}),{pattern:i.source}),e=>{let t=e;return t.pattern===null?t:t.pattern===void 0?{...t,pattern:i.source}:t.pattern===i.source?t:{...t,pattern:null}})}email(n){return this._addConstraint((i,a)=>r.isEmail(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.email,{value:i}),{format:`email`}),e=>({...e,format:`email`}))}url(n={}){let{message:i,protocols:a=[`http`,`https`]}=n;return this._addConstraint((n,o)=>r.isUrl(n,a)?null:t.fail(e.ErrorCode.invalid_url,t.resolveMessage(i??o.messages.string.url,{value:n}),{format:`url`}),e=>({...e,format:`uri`}))}uuid(n){return this._addConstraint((i,a)=>r.isUuid(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.uuid,{value:i}),{format:`uuid`}),e=>({...e,format:`uuid`}))}isoDate(n){return this._addConstraint((i,a)=>r.isIsoDate(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.date,{value:i}),{format:`iso-date`}),e=>({...e,format:`date`}))}isoDateTime(n){return this._addConstraint((i,a)=>r.isIsoDateTime(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.dateTime,{value:i}),{format:`iso-datetime`}),e=>({...e,format:`date-time`}))}ip(n){return this._addConstraint((i,a)=>r.isIp(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.ip,{value:i}),{format:`ip`}))}cuid(n){return this._addConstraint((i,a)=>r.isCuid(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.cuid,{value:i}),{format:`cuid`}))}cuid2(n){return this._addConstraint((i,a)=>r.isCuid2(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.cuid2,{value:i}),{format:`cuid2`}))}ulid(n){return this._addConstraint((i,a)=>r.isUlid(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.ulid,{value:i}),{format:`ulid`}))}nanoid(n,i){return this._addConstraint((a,o)=>r.isNanoid(a,n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(i??o.messages.string.nanoid,{value:a}),{format:`nanoid`}))}base64(n){return this._addConstraint((i,a)=>r.isBase64(i)?null:t.fail(e.ErrorCode.invalid_base64,t.resolveMessage(n??a.messages.string.base64,{value:i}),{format:`base64`}),e=>({...e,contentEncoding:`base64`}))}base64url(n){return this._addConstraint((i,a)=>r.isBase64url(i)?null:t.fail(e.ErrorCode.invalid_base64,t.resolveMessage(n??a.messages.string.base64url,{value:i}),{format:`base64url`}))}hex(n){return this._addConstraint((i,a)=>r.isHex(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.hex,{value:i}),{format:`hex`}))}hexColor(n){return this._addConstraint((i,a)=>r.isHexColor(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.hexColor,{value:i}),{format:`hex-color`}))}emoji(n){return this._addConstraint((i,a)=>r.isEmoji(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.emoji,{value:i}),{format:`emoji`}))}jwt(n){return this._addConstraint((i,a)=>r.isJwt(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.jwt,{value:i}),{format:`jwt`}))}time(n){return this._addConstraint((i,a)=>r.isTime(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.time,{value:i}),{format:`time`}))}duration(n){return this._addConstraint((i,a)=>r.isDuration(i)?null:t.fail(e.ErrorCode.invalid_duration,t.resolveMessage(n??a.messages.string.duration,{value:i}),{format:`duration`}),e=>({...e,format:`duration`}))}semver(n){return this._addConstraint((i,a)=>r.isSemver(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.semver,{value:i}),{format:`semver`}))}slug(n){return this._addConstraint((i,a)=>r.isSlug(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.slug,{value:i}),{format:`slug`}))}numeric(n){return this._addConstraint((i,a)=>r.isNumeric(i)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.numeric,{value:i}),{format:`numeric`}))}coerce(){return i.coerce()}trim(){return this.preprocess(e=>typeof e==`string`?e.trim():e)}lowercase(){return this.preprocess(e=>typeof e==`string`?e.toLowerCase():e)}uppercase(){return this.preprocess(e=>typeof e==`string`?e.toUpperCase():e)}_walk(e){return e.string?e.string(this):super._walk(e)}_toDescriptorImpl(){let e=this._annotations;return{...this._describeBase(),...e.contentEncoding===void 0?{}:{contentEncoding:e.contentEncoding},...e.format===void 0?{}:{format:e.format},...e.maxLength===void 0?{}:{maxLength:e.maxLength},...e.minLength===void 0?{}:{minLength:e.minLength},...e.pattern===void 0?{}:{pattern:e.pattern},kind:`string`}}static coerce(){return new i().preprocess(e=>e==null?e:String(e))}};exports.StringSchema=i;
1
+ const e=require("../errors.cjs");require("../_dev.cjs");const t=require("../types.cjs"),n=require("../core.cjs"),r=require("../formats.cjs");var i=class i extends n.Schema{get _kind(){return`string`}checkAsync(e){return this._addCheck(e,!0)}constructor(){super((n,r)=>typeof n==`string`?null:e.fail(t.ErrorCode.invalid_type,r.messages.string.type()))}min(n,r){return this._addConstraint((i,a)=>i.length>=n?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(r??a.messages.string.min,{min:n,value:i}),{min:n}),e=>{let t=e;return{...t,minLength:t.minLength===void 0?n:Math.max(t.minLength,n)}})}max(n,r){return this._addConstraint((i,a)=>i.length<=n?null:e.fail(t.ErrorCode.too_big,e.resolveMessage(r??a.messages.string.max,{max:n,value:i}),{max:n}),e=>{let t=e;return{...t,maxLength:t.maxLength===void 0?n:Math.min(t.maxLength,n)}})}length(n,r){return this._addConstraint((i,a)=>i.length===n?null:e.fail(t.ErrorCode.invalid_length,e.resolveMessage(r??a.messages.string.length,{exact:n,value:i}),{exact:n}),e=>({...e,maxLength:n,minLength:n}))}nonEmpty(n){return this._addConstraint((r,i)=>r.length>0?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(n??i.messages.string.nonEmpty,{min:1,value:r}),{min:1}),e=>{let t=e;return{...t,minLength:Math.max(t.minLength??0,1)}})}startsWith(n,r){return this._addConstraint((i,a)=>i.startsWith(n)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(r??a.messages.string.startsWith,{prefix:n,value:i}),{prefix:n}))}endsWith(n,r){return this._addConstraint((i,a)=>i.endsWith(n)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(r??a.messages.string.endsWith,{suffix:n,value:i}),{suffix:n}))}includes(n,r){return this._addConstraint((i,a)=>i.includes(n)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(r??a.messages.string.includes,{substr:n,value:i}),{includes:n}))}regex(n,r){let i=new RegExp(n.source,n.flags.replace(/[gy]/g,``));return this._addConstraint((n,a)=>i.test(n)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(r??a.messages.string.regex,{value:n}),{pattern:i.source}),e=>{let t=e;return t.pattern===null?t:t.pattern===void 0?{...t,pattern:i.source}:t.pattern===i.source?t:{...t,pattern:null}})}email(n){return this._addConstraint((i,a)=>r.isEmail(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.email,{value:i}),{format:`email`}),e=>({...e,format:`email`}))}url(n={}){let{message:i,protocols:a=[`http`,`https`]}=n;return this._addConstraint((n,o)=>r.isUrl(n,a)?null:e.fail(t.ErrorCode.invalid_url,e.resolveMessage(i??o.messages.string.url,{value:n}),{format:`url`}),e=>({...e,format:`uri`}))}uuid(n){return this._addConstraint((i,a)=>r.isUuid(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.uuid,{value:i}),{format:`uuid`}),e=>({...e,format:`uuid`}))}isoDate(n){return this._addConstraint((i,a)=>r.isIsoDate(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.date,{value:i}),{format:`iso-date`}),e=>({...e,format:`date`}))}isoDateTime(n){return this._addConstraint((i,a)=>r.isIsoDateTime(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.dateTime,{value:i}),{format:`iso-datetime`}),e=>({...e,format:`date-time`}))}ip(n){return this._addConstraint((i,a)=>r.isIp(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.ip,{value:i}),{format:`ip`}))}cuid(n){return this._addConstraint((i,a)=>r.isCuid(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.cuid,{value:i}),{format:`cuid`}))}cuid2(n){return this._addConstraint((i,a)=>r.isCuid2(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.cuid2,{value:i}),{format:`cuid2`}))}ulid(n){return this._addConstraint((i,a)=>r.isUlid(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.ulid,{value:i}),{format:`ulid`}))}nanoid(n,i){return this._addConstraint((a,o)=>r.isNanoid(a,n)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(i??o.messages.string.nanoid,{value:a}),{format:`nanoid`}))}base64(n){return this._addConstraint((i,a)=>r.isBase64(i)?null:e.fail(t.ErrorCode.invalid_base64,e.resolveMessage(n??a.messages.string.base64,{value:i}),{format:`base64`}),e=>({...e,contentEncoding:`base64`}))}base64url(n){return this._addConstraint((i,a)=>r.isBase64url(i)?null:e.fail(t.ErrorCode.invalid_base64,e.resolveMessage(n??a.messages.string.base64url,{value:i}),{format:`base64url`}))}hex(n){return this._addConstraint((i,a)=>r.isHex(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.hex,{value:i}),{format:`hex`}))}hexColor(n){return this._addConstraint((i,a)=>r.isHexColor(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.hexColor,{value:i}),{format:`hex-color`}))}emoji(n){return this._addConstraint((i,a)=>r.isEmoji(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.emoji,{value:i}),{format:`emoji`}))}jwt(n){return this._addConstraint((i,a)=>r.isJwt(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.jwt,{value:i}),{format:`jwt`}))}time(n){return this._addConstraint((i,a)=>r.isTime(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.time,{value:i}),{format:`time`}))}duration(n){return this._addConstraint((i,a)=>r.isDuration(i)?null:e.fail(t.ErrorCode.invalid_duration,e.resolveMessage(n??a.messages.string.duration,{value:i}),{format:`duration`}),e=>({...e,format:`duration`}))}semver(n){return this._addConstraint((i,a)=>r.isSemver(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.semver,{value:i}),{format:`semver`}))}slug(n){return this._addConstraint((i,a)=>r.isSlug(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.slug,{value:i}),{format:`slug`}))}numeric(n){return this._addConstraint((i,a)=>r.isNumeric(i)?null:e.fail(t.ErrorCode.invalid_string,e.resolveMessage(n??a.messages.string.numeric,{value:i}),{format:`numeric`}))}trim(){return this.preprocess(e=>typeof e==`string`?e.trim():e)}lowercase(){return this.preprocess(e=>typeof e==`string`?e.toLowerCase():e)}uppercase(){return this.preprocess(e=>typeof e==`string`?e.toUpperCase():e)}_walk(e){return e.string?e.string(this):super._walk(e)}_toDescriptorImpl(){let e=this._annotations;return{...this._describeBase(),...e.contentEncoding===void 0?{}:{contentEncoding:e.contentEncoding},...e.format===void 0?{}:{format:e.format},...e.maxLength===void 0?{}:{maxLength:e.maxLength},...e.minLength===void 0?{}:{minLength:e.minLength},...e.pattern===void 0?{}:{pattern:e.pattern},kind:`string`}}static coerce(){return new i().preprocess(e=>e==null?e:String(e))}};exports.StringSchema=i;
2
2
  //# sourceMappingURL=string.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"string.cjs","names":[],"sources":["../../src/schemas/string.ts"],"sourcesContent":["import { warn } from '../_dev';\nimport type { CheckContext, MessageFn, SchemaDescriptor, SchemaMode, SchemaWalker, ValidateResult } from '../core';\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\nimport {\n isBase64,\n isBase64url,\n isCuid,\n isCuid2,\n isDuration,\n isEmail,\n isEmoji,\n isHex,\n isHexColor,\n isIp,\n isIsoDate,\n isIsoDateTime,\n isJwt,\n isNanoid,\n isNumeric,\n isSemver,\n isSlug,\n isTime,\n isUlid,\n isUrl,\n isUuid,\n} from '../formats';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface StringAnnotations extends Record<string, unknown> {\n contentEncoding?: string;\n format?: string;\n maxLength?: number;\n minLength?: number;\n pattern?: string | null;\n}\n\ntype UrlOptions = {\n message?: MessageFn<{ value: string }>;\n protocols?: readonly string[];\n};\n\nexport class StringSchema<Input = string, Mode extends SchemaMode = 'sync'> extends Schema<string, Input, Mode> {\n protected override get _kind(): string {\n return 'string';\n }\n\n override checkAsync(\n this: StringSchema<Input, 'sync'>,\n fn: (value: string, ctx: CheckContext) => Promise<ValidateResult>,\n ): StringSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as StringSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'string' ? null : fail(ErrorCode.invalid_type, ctx!.messages.string.type()),\n );\n }\n\n min(length: number, message?: MessageFn<{ min: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length >= length) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.string.min, { min: length, value: value as string }),\n {\n min: length,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return {\n ...ann,\n minLength: ann.minLength === undefined ? length : Math.max(ann.minLength, length),\n };\n },\n );\n }\n\n max(length: number, message?: MessageFn<{ max: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length <= length) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.string.max, { max: length, value: value as string }),\n {\n max: length,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return {\n ...ann,\n maxLength: ann.maxLength === undefined ? length : Math.min(ann.maxLength, length),\n };\n },\n );\n }\n\n length(exact: number, message?: MessageFn<{ exact: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.string.length, { exact, value: value as string }),\n { exact },\n );\n },\n (ann) => ({ ...ann, maxLength: exact, minLength: exact }),\n );\n }\n\n nonEmpty(message?: MessageFn<{ min: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.string.nonEmpty, { min: 1, value: value as string }),\n { min: 1 },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return { ...ann, minLength: Math.max(ann.minLength ?? 0, 1) };\n },\n );\n }\n\n startsWith(prefix: string, message?: MessageFn<{ prefix: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).startsWith(prefix)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.startsWith, { prefix, value: value as string }),\n { prefix },\n );\n });\n }\n\n endsWith(suffix: string, message?: MessageFn<{ suffix: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).endsWith(suffix)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.endsWith, { suffix, value: value as string }),\n { suffix },\n );\n });\n }\n\n includes(substr: string, message?: MessageFn<{ substr: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).includes(substr)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.includes, { substr, value: value as string }),\n {\n includes: substr,\n },\n );\n });\n }\n\n /**\n * Validates that the string matches the given regular expression.\n *\n * **Security note:** Stateful `/g` and `/y` flags are stripped automatically to prevent\n * `lastIndex`-based bugs. However, caller-supplied patterns with catastrophic backtracking\n * (e.g. `/(a+)+$/`) are a ReDoS risk when validating untrusted input in server-side contexts.\n * Prefer well-tested, bounded patterns for user-facing validation.\n *\n */\n regex(pattern: RegExp, message?: MessageFn<{ value: string }>): this {\n const safePattern = new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''));\n\n return this._addConstraint(\n (value, ctx) => {\n // Caller-supplied regexes still run against untrusted strings; spell can\n // neutralize stateful /g and /y flags but cannot make arbitrary patterns\n // immune to catastrophic backtracking without breaking the API.\n if (safePattern.test(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.regex, { value: value as string }),\n {\n pattern: safePattern.source,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n if (ann.pattern === null) return ann; // already ambiguous\n\n if (ann.pattern === undefined) return { ...ann, pattern: safePattern.source };\n\n if (ann.pattern !== safePattern.source) {\n warn(\n '[spell] Multiple .regex() constraints detected on a single string schema. ' +\n 'JSON Schema `pattern` cannot represent multiple patterns and will be omitted from definition output.',\n );\n\n return { ...ann, pattern: null };\n }\n\n return ann;\n },\n );\n }\n\n email(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isEmail(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.email, { value: value as string }),\n { format: 'email' },\n );\n },\n (ann) => ({ ...ann, format: 'email' }),\n );\n }\n\n url(options: UrlOptions = {}): this {\n const { message, protocols = ['http', 'https'] } = options;\n\n return this._addConstraint(\n (value, ctx) => {\n if (isUrl(value as string, protocols)) return null;\n\n return fail(\n ErrorCode.invalid_url,\n resolveMessage(message ?? ctx!.messages.string.url, { value: value as string }),\n { format: 'url' },\n );\n },\n (ann) => ({ ...ann, format: 'uri' }),\n );\n }\n\n uuid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isUuid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.uuid, { value: value as string }),\n { format: 'uuid' },\n );\n },\n (ann) => ({ ...ann, format: 'uuid' }),\n );\n }\n\n isoDate(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isIsoDate(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.date, { value: value as string }),\n {\n format: 'iso-date',\n },\n );\n },\n (ann) => ({ ...ann, format: 'date' }),\n );\n }\n\n isoDateTime(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isIsoDateTime(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.dateTime, { value: value as string }),\n {\n format: 'iso-datetime',\n },\n );\n },\n (ann) => ({ ...ann, format: 'date-time' }),\n );\n }\n\n ip(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isIp(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.ip, { value: value as string }),\n { format: 'ip' },\n );\n });\n }\n\n cuid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isCuid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.cuid, { value: value as string }),\n { format: 'cuid' },\n );\n });\n }\n\n cuid2(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isCuid2(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.cuid2, { value: value as string }),\n { format: 'cuid2' },\n );\n });\n }\n\n ulid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isUlid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.ulid, { value: value as string }),\n { format: 'ulid' },\n );\n });\n }\n\n nanoid(length?: number, message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isNanoid(value as string, length)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.nanoid, { value: value as string }),\n { format: 'nanoid' },\n );\n });\n }\n\n base64(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isBase64(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_base64,\n resolveMessage(message ?? ctx!.messages.string.base64, { value: value as string }),\n {\n format: 'base64',\n },\n );\n },\n (ann) => ({ ...ann, contentEncoding: 'base64' }),\n );\n }\n\n base64url(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isBase64url(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_base64,\n resolveMessage(message ?? ctx!.messages.string.base64url, { value: value as string }),\n {\n format: 'base64url',\n },\n );\n });\n }\n\n hex(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isHex(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.hex, { value: value as string }),\n { format: 'hex' },\n );\n });\n }\n\n hexColor(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isHexColor(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.hexColor, { value: value as string }),\n {\n format: 'hex-color',\n },\n );\n });\n }\n\n emoji(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isEmoji(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.emoji, { value: value as string }),\n { format: 'emoji' },\n );\n });\n }\n\n jwt(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isJwt(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.jwt, { value: value as string }),\n { format: 'jwt' },\n );\n });\n }\n\n time(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isTime(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.time, { value: value as string }),\n { format: 'time' },\n );\n });\n }\n\n duration(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isDuration(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_duration,\n resolveMessage(message ?? ctx!.messages.string.duration, { value: value as string }),\n {\n format: 'duration',\n },\n );\n },\n (ann) => ({ ...ann, format: 'duration' }),\n );\n }\n\n semver(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isSemver(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.semver, { value: value as string }),\n { format: 'semver' },\n );\n });\n }\n\n slug(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isSlug(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.slug, { value: value as string }),\n { format: 'slug' },\n );\n });\n }\n\n numeric(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isNumeric(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.numeric, { value: value as string }),\n { format: 'numeric' },\n );\n });\n }\n\n /**\n * Returns a new schema that coerces the input to a string via `String(value)` before validation.\n * `null` and `undefined` are passed through unchanged.\n *\n * Equivalent to `s.coerce.string()`.\n */\n coerce(): StringSchema<unknown> {\n return StringSchema.coerce();\n }\n\n /**\n * **Note:** `trim()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n trim(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.trim() : v));\n }\n\n /**\n * **Note:** `lowercase()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n lowercase(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.toLowerCase() : v));\n }\n\n /**\n * **Note:** `uppercase()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n uppercase(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.toUpperCase() : v));\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n if (visitor.string) return visitor.string(this);\n\n return super._walk(visitor);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as StringAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.contentEncoding !== undefined ? { contentEncoding: ann.contentEncoding } : {}),\n ...(ann.format !== undefined ? { format: ann.format } : {}),\n ...(ann.maxLength !== undefined ? { maxLength: ann.maxLength } : {}),\n ...(ann.minLength !== undefined ? { minLength: ann.minLength } : {}),\n ...(ann.pattern !== undefined ? { pattern: ann.pattern } : {}),\n kind: 'string',\n };\n }\n\n static coerce(): StringSchema<unknown> {\n return new StringSchema().preprocess((v: unknown) => (v == null ? v : String(v)));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"string.cjs","names":[],"sources":["../../src/schemas/string.ts"],"sourcesContent":["import { warn } from '../_dev';\nimport type { CheckContext, MessageFn, SchemaDescriptor, SchemaMode, SchemaWalker, ValidateResult } from '../core';\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\nimport {\n isBase64,\n isBase64url,\n isCuid,\n isCuid2,\n isDuration,\n isEmail,\n isEmoji,\n isHex,\n isHexColor,\n isIp,\n isIsoDate,\n isIsoDateTime,\n isJwt,\n isNanoid,\n isNumeric,\n isSemver,\n isSlug,\n isTime,\n isUlid,\n isUrl,\n isUuid,\n} from '../formats';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface StringAnnotations extends Record<string, unknown> {\n contentEncoding?: string;\n format?: string;\n maxLength?: number;\n minLength?: number;\n pattern?: string | null;\n}\n\ntype UrlOptions = {\n message?: MessageFn<{ value: string }>;\n protocols?: readonly string[];\n};\n\nexport class StringSchema<Input = string, Mode extends SchemaMode = 'sync'> extends Schema<string, Input, Mode> {\n protected override get _kind(): string {\n return 'string';\n }\n\n override checkAsync(\n this: StringSchema<Input, 'sync'>,\n fn: (value: string, ctx: CheckContext) => Promise<ValidateResult>,\n ): StringSchema<Input, 'async'> {\n return this._addCheck(fn, true) as unknown as StringSchema<Input, 'async'>;\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'string' ? null : fail(ErrorCode.invalid_type, ctx!.messages.string.type()),\n );\n }\n\n min(length: number, message?: MessageFn<{ min: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length >= length) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.string.min, { min: length, value: value as string }),\n {\n min: length,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return {\n ...ann,\n minLength: ann.minLength === undefined ? length : Math.max(ann.minLength, length),\n };\n },\n );\n }\n\n max(length: number, message?: MessageFn<{ max: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length <= length) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.string.max, { max: length, value: value as string }),\n {\n max: length,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return {\n ...ann,\n maxLength: ann.maxLength === undefined ? length : Math.min(ann.maxLength, length),\n };\n },\n );\n }\n\n length(exact: number, message?: MessageFn<{ exact: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.string.length, { exact, value: value as string }),\n { exact },\n );\n },\n (ann) => ({ ...ann, maxLength: exact, minLength: exact }),\n );\n }\n\n nonEmpty(message?: MessageFn<{ min: number; value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as string).length > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.string.nonEmpty, { min: 1, value: value as string }),\n { min: 1 },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n return { ...ann, minLength: Math.max(ann.minLength ?? 0, 1) };\n },\n );\n }\n\n startsWith(prefix: string, message?: MessageFn<{ prefix: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).startsWith(prefix)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.startsWith, { prefix, value: value as string }),\n { prefix },\n );\n });\n }\n\n endsWith(suffix: string, message?: MessageFn<{ suffix: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).endsWith(suffix)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.endsWith, { suffix, value: value as string }),\n { suffix },\n );\n });\n }\n\n includes(substr: string, message?: MessageFn<{ substr: string; value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if ((value as string).includes(substr)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.includes, { substr, value: value as string }),\n {\n includes: substr,\n },\n );\n });\n }\n\n /**\n * Validates that the string matches the given regular expression.\n *\n * **Security note:** Stateful `/g` and `/y` flags are stripped automatically to prevent\n * `lastIndex`-based bugs. However, caller-supplied patterns with catastrophic backtracking\n * (e.g. `/(a+)+$/`) are a ReDoS risk when validating untrusted input in server-side contexts.\n * Prefer well-tested, bounded patterns for user-facing validation.\n *\n */\n regex(pattern: RegExp, message?: MessageFn<{ value: string }>): this {\n const safePattern = new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''));\n\n return this._addConstraint(\n (value, ctx) => {\n // Caller-supplied regexes still run against untrusted strings; spell can\n // neutralize stateful /g and /y flags but cannot make arbitrary patterns\n // immune to catastrophic backtracking without breaking the API.\n if (safePattern.test(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.regex, { value: value as string }),\n {\n pattern: safePattern.source,\n },\n );\n },\n (current) => {\n const ann = current as StringAnnotations;\n\n if (ann.pattern === null) return ann; // already ambiguous\n\n if (ann.pattern === undefined) return { ...ann, pattern: safePattern.source };\n\n if (ann.pattern !== safePattern.source) {\n warn(\n '[spell] Multiple .regex() constraints detected on a single string schema. ' +\n 'JSON Schema `pattern` cannot represent multiple patterns and will be omitted from definition output.',\n );\n\n return { ...ann, pattern: null };\n }\n\n return ann;\n },\n );\n }\n\n email(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isEmail(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.email, { value: value as string }),\n { format: 'email' },\n );\n },\n (ann) => ({ ...ann, format: 'email' }),\n );\n }\n\n url(options: UrlOptions = {}): this {\n const { message, protocols = ['http', 'https'] } = options;\n\n return this._addConstraint(\n (value, ctx) => {\n if (isUrl(value as string, protocols)) return null;\n\n return fail(\n ErrorCode.invalid_url,\n resolveMessage(message ?? ctx!.messages.string.url, { value: value as string }),\n { format: 'url' },\n );\n },\n (ann) => ({ ...ann, format: 'uri' }),\n );\n }\n\n uuid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isUuid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.uuid, { value: value as string }),\n { format: 'uuid' },\n );\n },\n (ann) => ({ ...ann, format: 'uuid' }),\n );\n }\n\n isoDate(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isIsoDate(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.date, { value: value as string }),\n {\n format: 'iso-date',\n },\n );\n },\n (ann) => ({ ...ann, format: 'date' }),\n );\n }\n\n isoDateTime(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isIsoDateTime(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.dateTime, { value: value as string }),\n {\n format: 'iso-datetime',\n },\n );\n },\n (ann) => ({ ...ann, format: 'date-time' }),\n );\n }\n\n ip(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isIp(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.ip, { value: value as string }),\n { format: 'ip' },\n );\n });\n }\n\n cuid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isCuid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.cuid, { value: value as string }),\n { format: 'cuid' },\n );\n });\n }\n\n cuid2(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isCuid2(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.cuid2, { value: value as string }),\n { format: 'cuid2' },\n );\n });\n }\n\n ulid(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isUlid(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.ulid, { value: value as string }),\n { format: 'ulid' },\n );\n });\n }\n\n nanoid(length?: number, message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isNanoid(value as string, length)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.nanoid, { value: value as string }),\n { format: 'nanoid' },\n );\n });\n }\n\n base64(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isBase64(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_base64,\n resolveMessage(message ?? ctx!.messages.string.base64, { value: value as string }),\n {\n format: 'base64',\n },\n );\n },\n (ann) => ({ ...ann, contentEncoding: 'base64' }),\n );\n }\n\n base64url(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isBase64url(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_base64,\n resolveMessage(message ?? ctx!.messages.string.base64url, { value: value as string }),\n {\n format: 'base64url',\n },\n );\n });\n }\n\n hex(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isHex(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.hex, { value: value as string }),\n { format: 'hex' },\n );\n });\n }\n\n hexColor(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isHexColor(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.hexColor, { value: value as string }),\n {\n format: 'hex-color',\n },\n );\n });\n }\n\n emoji(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isEmoji(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.emoji, { value: value as string }),\n { format: 'emoji' },\n );\n });\n }\n\n jwt(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isJwt(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.jwt, { value: value as string }),\n { format: 'jwt' },\n );\n });\n }\n\n time(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isTime(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.time, { value: value as string }),\n { format: 'time' },\n );\n });\n }\n\n duration(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (isDuration(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_duration,\n resolveMessage(message ?? ctx!.messages.string.duration, { value: value as string }),\n {\n format: 'duration',\n },\n );\n },\n (ann) => ({ ...ann, format: 'duration' }),\n );\n }\n\n semver(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isSemver(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.semver, { value: value as string }),\n { format: 'semver' },\n );\n });\n }\n\n slug(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isSlug(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.slug, { value: value as string }),\n { format: 'slug' },\n );\n });\n }\n\n numeric(message?: MessageFn<{ value: string }>): this {\n return this._addConstraint((value, ctx) => {\n if (isNumeric(value as string)) return null;\n\n return fail(\n ErrorCode.invalid_string,\n resolveMessage(message ?? ctx!.messages.string.numeric, { value: value as string }),\n { format: 'numeric' },\n );\n });\n }\n\n /**\n * **Note:** `trim()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n trim(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.trim() : v));\n }\n\n /**\n * **Note:** `lowercase()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n lowercase(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.toLowerCase() : v));\n }\n\n /**\n * **Note:** `uppercase()` adds a preprocessor. Preprocessors are not serializable —\n * `definition()` throws because preprocessors are not serializable.\n */\n uppercase(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.toUpperCase() : v));\n }\n\n protected override _walk<R>(visitor: SchemaWalker<R>): R | null {\n if (visitor.string) return visitor.string(this);\n\n return super._walk(visitor);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as StringAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.contentEncoding !== undefined ? { contentEncoding: ann.contentEncoding } : {}),\n ...(ann.format !== undefined ? { format: ann.format } : {}),\n ...(ann.maxLength !== undefined ? { maxLength: ann.maxLength } : {}),\n ...(ann.minLength !== undefined ? { minLength: ann.minLength } : {}),\n ...(ann.pattern !== undefined ? { pattern: ann.pattern } : {}),\n kind: 'string',\n };\n }\n\n static coerce(): StringSchema<unknown> {\n return new StringSchema().preprocess((v: unknown) => (v == null ? v : String(v)));\n }\n}\n"],"mappings":"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"}
@@ -111,13 +111,6 @@ export declare class StringSchema<Input = string, Mode extends SchemaMode = 'syn
111
111
  numeric(message?: MessageFn<{
112
112
  value: string;
113
113
  }>): this;
114
- /**
115
- * Returns a new schema that coerces the input to a string via `String(value)` before validation.
116
- * `null` and `undefined` are passed through unchanged.
117
- *
118
- * Equivalent to `s.coerce.string()`.
119
- */
120
- coerce(): StringSchema<unknown>;
121
114
  /**
122
115
  * **Note:** `trim()` adds a preprocessor. Preprocessors are not serializable —
123
116
  * `definition()` throws because preprocessors are not serializable.
@@ -1 +1 @@
1
- {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/schemas/string.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnH,OAAO,EAAmC,MAAM,EAAE,MAAM,SAAS,CAAC;AAmClE,KAAK,UAAU,GAAG;IAChB,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,qBAAa,YAAY,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,SAAS,UAAU,GAAG,MAAM,CAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IAC7G,cAAuB,KAAK,IAAI,MAAM,CAErC;IAEQ,UAAU,CACjB,IAAI,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EACjC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,GAChE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;;IAU/B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAwB9E,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAwB9E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAelF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAmBnE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYxF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYtF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IActF;;;;;;;;OAQG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAuCpE,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAenD,GAAG,CAAC,OAAO,GAAE,UAAe,GAAG,IAAI;IAiBnC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAelD,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAiBrD,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAiBzD,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYhD,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYlD,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYnD,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYlD,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYrE,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAiBpD,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAcvD,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYjD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IActD,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYnD,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYjD,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYlD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAiBtD,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYpD,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYlD,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAYrD;;;;;OAKG;IACH,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC;IAI/B;;;OAGG;IACH,IAAI,IAAI,IAAI;IAIZ;;;OAGG;IACH,SAAS,IAAI,IAAI;IAIjB;;;OAGG;IACH,SAAS,IAAI,IAAI;cAIE,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;cAM5C,iBAAiB,IAAI,gBAAgB;IAcxD,MAAM,CAAC,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC;CAGvC"}
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/schemas/string.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{ErrorCode as e}from"../types.js";import{fail as t,resolveMessage as n}from"../errors.js";import"../_dev.js";import{Schema as r}from"../core.js";import{isBase64 as i,isBase64url as a,isCuid as o,isCuid2 as s,isDuration as c,isEmail as l,isEmoji as u,isHex as d,isHexColor as f,isIp as p,isIsoDate as m,isIsoDateTime as h,isJwt as g,isNanoid as _,isNumeric as v,isSemver as y,isSlug as b,isTime as x,isUlid as S,isUrl as C,isUuid as w}from"../formats.js";var T=class T extends r{get _kind(){return`string`}checkAsync(e){return this._addCheck(e,!0)}constructor(){super((n,r)=>typeof n==`string`?null:t(e.invalid_type,r.messages.string.type()))}min(r,i){return this._addConstraint((a,o)=>a.length>=r?null:t(e.too_small,n(i??o.messages.string.min,{min:r,value:a}),{min:r}),e=>{let t=e;return{...t,minLength:t.minLength===void 0?r:Math.max(t.minLength,r)}})}max(r,i){return this._addConstraint((a,o)=>a.length<=r?null:t(e.too_big,n(i??o.messages.string.max,{max:r,value:a}),{max:r}),e=>{let t=e;return{...t,maxLength:t.maxLength===void 0?r:Math.min(t.maxLength,r)}})}length(r,i){return this._addConstraint((a,o)=>a.length===r?null:t(e.invalid_length,n(i??o.messages.string.length,{exact:r,value:a}),{exact:r}),e=>({...e,maxLength:r,minLength:r}))}nonEmpty(r){return this._addConstraint((i,a)=>i.length>0?null:t(e.too_small,n(r??a.messages.string.nonEmpty,{min:1,value:i}),{min:1}),e=>{let t=e;return{...t,minLength:Math.max(t.minLength??0,1)}})}startsWith(r,i){return this._addConstraint((a,o)=>a.startsWith(r)?null:t(e.invalid_string,n(i??o.messages.string.startsWith,{prefix:r,value:a}),{prefix:r}))}endsWith(r,i){return this._addConstraint((a,o)=>a.endsWith(r)?null:t(e.invalid_string,n(i??o.messages.string.endsWith,{suffix:r,value:a}),{suffix:r}))}includes(r,i){return this._addConstraint((a,o)=>a.includes(r)?null:t(e.invalid_string,n(i??o.messages.string.includes,{substr:r,value:a}),{includes:r}))}regex(r,i){let a=new RegExp(r.source,r.flags.replace(/[gy]/g,``));return this._addConstraint((r,o)=>a.test(r)?null:t(e.invalid_string,n(i??o.messages.string.regex,{value:r}),{pattern:a.source}),e=>{let t=e;return t.pattern===null?t:t.pattern===void 0?{...t,pattern:a.source}:t.pattern===a.source?t:{...t,pattern:null}})}email(r){return this._addConstraint((i,a)=>l(i)?null:t(e.invalid_string,n(r??a.messages.string.email,{value:i}),{format:`email`}),e=>({...e,format:`email`}))}url(r={}){let{message:i,protocols:a=[`http`,`https`]}=r;return this._addConstraint((r,o)=>C(r,a)?null:t(e.invalid_url,n(i??o.messages.string.url,{value:r}),{format:`url`}),e=>({...e,format:`uri`}))}uuid(r){return this._addConstraint((i,a)=>w(i)?null:t(e.invalid_string,n(r??a.messages.string.uuid,{value:i}),{format:`uuid`}),e=>({...e,format:`uuid`}))}isoDate(r){return this._addConstraint((i,a)=>m(i)?null:t(e.invalid_string,n(r??a.messages.string.date,{value:i}),{format:`iso-date`}),e=>({...e,format:`date`}))}isoDateTime(r){return this._addConstraint((i,a)=>h(i)?null:t(e.invalid_string,n(r??a.messages.string.dateTime,{value:i}),{format:`iso-datetime`}),e=>({...e,format:`date-time`}))}ip(r){return this._addConstraint((i,a)=>p(i)?null:t(e.invalid_string,n(r??a.messages.string.ip,{value:i}),{format:`ip`}))}cuid(r){return this._addConstraint((i,a)=>o(i)?null:t(e.invalid_string,n(r??a.messages.string.cuid,{value:i}),{format:`cuid`}))}cuid2(r){return this._addConstraint((i,a)=>s(i)?null:t(e.invalid_string,n(r??a.messages.string.cuid2,{value:i}),{format:`cuid2`}))}ulid(r){return this._addConstraint((i,a)=>S(i)?null:t(e.invalid_string,n(r??a.messages.string.ulid,{value:i}),{format:`ulid`}))}nanoid(r,i){return this._addConstraint((a,o)=>_(a,r)?null:t(e.invalid_string,n(i??o.messages.string.nanoid,{value:a}),{format:`nanoid`}))}base64(r){return this._addConstraint((a,o)=>i(a)?null:t(e.invalid_base64,n(r??o.messages.string.base64,{value:a}),{format:`base64`}),e=>({...e,contentEncoding:`base64`}))}base64url(r){return this._addConstraint((i,o)=>a(i)?null:t(e.invalid_base64,n(r??o.messages.string.base64url,{value:i}),{format:`base64url`}))}hex(r){return this._addConstraint((i,a)=>d(i)?null:t(e.invalid_string,n(r??a.messages.string.hex,{value:i}),{format:`hex`}))}hexColor(r){return this._addConstraint((i,a)=>f(i)?null:t(e.invalid_string,n(r??a.messages.string.hexColor,{value:i}),{format:`hex-color`}))}emoji(r){return this._addConstraint((i,a)=>u(i)?null:t(e.invalid_string,n(r??a.messages.string.emoji,{value:i}),{format:`emoji`}))}jwt(r){return this._addConstraint((i,a)=>g(i)?null:t(e.invalid_string,n(r??a.messages.string.jwt,{value:i}),{format:`jwt`}))}time(r){return this._addConstraint((i,a)=>x(i)?null:t(e.invalid_string,n(r??a.messages.string.time,{value:i}),{format:`time`}))}duration(r){return this._addConstraint((i,a)=>c(i)?null:t(e.invalid_duration,n(r??a.messages.string.duration,{value:i}),{format:`duration`}),e=>({...e,format:`duration`}))}semver(r){return this._addConstraint((i,a)=>y(i)?null:t(e.invalid_string,n(r??a.messages.string.semver,{value:i}),{format:`semver`}))}slug(r){return this._addConstraint((i,a)=>b(i)?null:t(e.invalid_string,n(r??a.messages.string.slug,{value:i}),{format:`slug`}))}numeric(r){return this._addConstraint((i,a)=>v(i)?null:t(e.invalid_string,n(r??a.messages.string.numeric,{value:i}),{format:`numeric`}))}coerce(){return T.coerce()}trim(){return this.preprocess(e=>typeof e==`string`?e.trim():e)}lowercase(){return this.preprocess(e=>typeof e==`string`?e.toLowerCase():e)}uppercase(){return this.preprocess(e=>typeof e==`string`?e.toUpperCase():e)}_walk(e){return e.string?e.string(this):super._walk(e)}_toDescriptorImpl(){let e=this._annotations;return{...this._describeBase(),...e.contentEncoding===void 0?{}:{contentEncoding:e.contentEncoding},...e.format===void 0?{}:{format:e.format},...e.maxLength===void 0?{}:{maxLength:e.maxLength},...e.minLength===void 0?{}:{minLength:e.minLength},...e.pattern===void 0?{}:{pattern:e.pattern},kind:`string`}}static coerce(){return new T().preprocess(e=>e==null?e:String(e))}};export{T as StringSchema};
1
+ import{fail as e,resolveMessage as t}from"../errors.js";import"../_dev.js";import{ErrorCode as n}from"../types.js";import{Schema as r}from"../core.js";import{isBase64 as i,isBase64url as a,isCuid as o,isCuid2 as s,isDuration as c,isEmail as l,isEmoji as u,isHex as d,isHexColor as f,isIp as p,isIsoDate as m,isIsoDateTime as h,isJwt as g,isNanoid as _,isNumeric as v,isSemver as y,isSlug as b,isTime as x,isUlid as S,isUrl as C,isUuid as w}from"../formats.js";var T=class T extends r{get _kind(){return`string`}checkAsync(e){return this._addCheck(e,!0)}constructor(){super((t,r)=>typeof t==`string`?null:e(n.invalid_type,r.messages.string.type()))}min(r,i){return this._addConstraint((a,o)=>a.length>=r?null:e(n.too_small,t(i??o.messages.string.min,{min:r,value:a}),{min:r}),e=>{let t=e;return{...t,minLength:t.minLength===void 0?r:Math.max(t.minLength,r)}})}max(r,i){return this._addConstraint((a,o)=>a.length<=r?null:e(n.too_big,t(i??o.messages.string.max,{max:r,value:a}),{max:r}),e=>{let t=e;return{...t,maxLength:t.maxLength===void 0?r:Math.min(t.maxLength,r)}})}length(r,i){return this._addConstraint((a,o)=>a.length===r?null:e(n.invalid_length,t(i??o.messages.string.length,{exact:r,value:a}),{exact:r}),e=>({...e,maxLength:r,minLength:r}))}nonEmpty(r){return this._addConstraint((i,a)=>i.length>0?null:e(n.too_small,t(r??a.messages.string.nonEmpty,{min:1,value:i}),{min:1}),e=>{let t=e;return{...t,minLength:Math.max(t.minLength??0,1)}})}startsWith(r,i){return this._addConstraint((a,o)=>a.startsWith(r)?null:e(n.invalid_string,t(i??o.messages.string.startsWith,{prefix:r,value:a}),{prefix:r}))}endsWith(r,i){return this._addConstraint((a,o)=>a.endsWith(r)?null:e(n.invalid_string,t(i??o.messages.string.endsWith,{suffix:r,value:a}),{suffix:r}))}includes(r,i){return this._addConstraint((a,o)=>a.includes(r)?null:e(n.invalid_string,t(i??o.messages.string.includes,{substr:r,value:a}),{includes:r}))}regex(r,i){let a=new RegExp(r.source,r.flags.replace(/[gy]/g,``));return this._addConstraint((r,o)=>a.test(r)?null:e(n.invalid_string,t(i??o.messages.string.regex,{value:r}),{pattern:a.source}),e=>{let t=e;return t.pattern===null?t:t.pattern===void 0?{...t,pattern:a.source}:t.pattern===a.source?t:{...t,pattern:null}})}email(r){return this._addConstraint((i,a)=>l(i)?null:e(n.invalid_string,t(r??a.messages.string.email,{value:i}),{format:`email`}),e=>({...e,format:`email`}))}url(r={}){let{message:i,protocols:a=[`http`,`https`]}=r;return this._addConstraint((r,o)=>C(r,a)?null:e(n.invalid_url,t(i??o.messages.string.url,{value:r}),{format:`url`}),e=>({...e,format:`uri`}))}uuid(r){return this._addConstraint((i,a)=>w(i)?null:e(n.invalid_string,t(r??a.messages.string.uuid,{value:i}),{format:`uuid`}),e=>({...e,format:`uuid`}))}isoDate(r){return this._addConstraint((i,a)=>m(i)?null:e(n.invalid_string,t(r??a.messages.string.date,{value:i}),{format:`iso-date`}),e=>({...e,format:`date`}))}isoDateTime(r){return this._addConstraint((i,a)=>h(i)?null:e(n.invalid_string,t(r??a.messages.string.dateTime,{value:i}),{format:`iso-datetime`}),e=>({...e,format:`date-time`}))}ip(r){return this._addConstraint((i,a)=>p(i)?null:e(n.invalid_string,t(r??a.messages.string.ip,{value:i}),{format:`ip`}))}cuid(r){return this._addConstraint((i,a)=>o(i)?null:e(n.invalid_string,t(r??a.messages.string.cuid,{value:i}),{format:`cuid`}))}cuid2(r){return this._addConstraint((i,a)=>s(i)?null:e(n.invalid_string,t(r??a.messages.string.cuid2,{value:i}),{format:`cuid2`}))}ulid(r){return this._addConstraint((i,a)=>S(i)?null:e(n.invalid_string,t(r??a.messages.string.ulid,{value:i}),{format:`ulid`}))}nanoid(r,i){return this._addConstraint((a,o)=>_(a,r)?null:e(n.invalid_string,t(i??o.messages.string.nanoid,{value:a}),{format:`nanoid`}))}base64(r){return this._addConstraint((a,o)=>i(a)?null:e(n.invalid_base64,t(r??o.messages.string.base64,{value:a}),{format:`base64`}),e=>({...e,contentEncoding:`base64`}))}base64url(r){return this._addConstraint((i,o)=>a(i)?null:e(n.invalid_base64,t(r??o.messages.string.base64url,{value:i}),{format:`base64url`}))}hex(r){return this._addConstraint((i,a)=>d(i)?null:e(n.invalid_string,t(r??a.messages.string.hex,{value:i}),{format:`hex`}))}hexColor(r){return this._addConstraint((i,a)=>f(i)?null:e(n.invalid_string,t(r??a.messages.string.hexColor,{value:i}),{format:`hex-color`}))}emoji(r){return this._addConstraint((i,a)=>u(i)?null:e(n.invalid_string,t(r??a.messages.string.emoji,{value:i}),{format:`emoji`}))}jwt(r){return this._addConstraint((i,a)=>g(i)?null:e(n.invalid_string,t(r??a.messages.string.jwt,{value:i}),{format:`jwt`}))}time(r){return this._addConstraint((i,a)=>x(i)?null:e(n.invalid_string,t(r??a.messages.string.time,{value:i}),{format:`time`}))}duration(r){return this._addConstraint((i,a)=>c(i)?null:e(n.invalid_duration,t(r??a.messages.string.duration,{value:i}),{format:`duration`}),e=>({...e,format:`duration`}))}semver(r){return this._addConstraint((i,a)=>y(i)?null:e(n.invalid_string,t(r??a.messages.string.semver,{value:i}),{format:`semver`}))}slug(r){return this._addConstraint((i,a)=>b(i)?null:e(n.invalid_string,t(r??a.messages.string.slug,{value:i}),{format:`slug`}))}numeric(r){return this._addConstraint((i,a)=>v(i)?null:e(n.invalid_string,t(r??a.messages.string.numeric,{value:i}),{format:`numeric`}))}trim(){return this.preprocess(e=>typeof e==`string`?e.trim():e)}lowercase(){return this.preprocess(e=>typeof e==`string`?e.toLowerCase():e)}uppercase(){return this.preprocess(e=>typeof e==`string`?e.toUpperCase():e)}_walk(e){return e.string?e.string(this):super._walk(e)}_toDescriptorImpl(){let e=this._annotations;return{...this._describeBase(),...e.contentEncoding===void 0?{}:{contentEncoding:e.contentEncoding},...e.format===void 0?{}:{format:e.format},...e.maxLength===void 0?{}:{maxLength:e.maxLength},...e.minLength===void 0?{}:{minLength:e.minLength},...e.pattern===void 0?{}:{pattern:e.pattern},kind:`string`}}static coerce(){return new T().preprocess(e=>e==null?e:String(e))}};export{T as StringSchema};
2
2
  //# sourceMappingURL=string.js.map