@vielzeug/spell 1.2.2 → 2.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 (176) hide show
  1. package/README.md +4 -4
  2. package/dist/_dev.cjs +1 -1
  3. package/dist/_dev.cjs.map +1 -1
  4. package/dist/_dev.js +1 -1
  5. package/dist/_dev.js.map +1 -1
  6. package/dist/core.cjs +1 -1
  7. package/dist/core.cjs.map +1 -1
  8. package/dist/core.d.ts +29 -43
  9. package/dist/core.d.ts.map +1 -1
  10. package/dist/core.js +1 -1
  11. package/dist/core.js.map +1 -1
  12. package/dist/errors.cjs +2 -2
  13. package/dist/errors.cjs.map +1 -1
  14. package/dist/errors.d.ts +9 -11
  15. package/dist/errors.d.ts.map +1 -1
  16. package/dist/errors.js +2 -2
  17. package/dist/errors.js.map +1 -1
  18. package/dist/index.cjs +2 -1
  19. package/dist/index.cjs.map +1 -0
  20. package/dist/index.d.ts +11 -5
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -1
  23. package/dist/index.js.map +1 -0
  24. package/dist/json-schema.cjs +1 -1
  25. package/dist/json-schema.cjs.map +1 -1
  26. package/dist/json-schema.d.ts +3 -13
  27. package/dist/json-schema.d.ts.map +1 -1
  28. package/dist/json-schema.js +1 -1
  29. package/dist/json-schema.js.map +1 -1
  30. package/dist/json.cjs +1 -0
  31. package/dist/json.d.ts +2 -0
  32. package/dist/json.d.ts.map +1 -0
  33. package/dist/json.js +1 -0
  34. package/dist/messages.cjs +1 -1
  35. package/dist/messages.cjs.map +1 -1
  36. package/dist/messages.d.ts +3 -35
  37. package/dist/messages.d.ts.map +1 -1
  38. package/dist/messages.js +1 -1
  39. package/dist/messages.js.map +1 -1
  40. package/dist/predicates.cjs +1 -0
  41. package/dist/predicates.d.ts +3 -0
  42. package/dist/predicates.d.ts.map +1 -0
  43. package/dist/predicates.js +1 -0
  44. package/dist/s.cjs +1 -1
  45. package/dist/s.cjs.map +1 -1
  46. package/dist/s.d.ts +12 -14
  47. package/dist/s.d.ts.map +1 -1
  48. package/dist/s.js +1 -1
  49. package/dist/s.js.map +1 -1
  50. package/dist/schemas/array.cjs +1 -1
  51. package/dist/schemas/array.cjs.map +1 -1
  52. package/dist/schemas/array.d.ts +7 -7
  53. package/dist/schemas/array.d.ts.map +1 -1
  54. package/dist/schemas/array.js +1 -1
  55. package/dist/schemas/array.js.map +1 -1
  56. package/dist/schemas/bigint.cjs +1 -1
  57. package/dist/schemas/bigint.cjs.map +1 -1
  58. package/dist/schemas/bigint.d.ts +2 -2
  59. package/dist/schemas/bigint.d.ts.map +1 -1
  60. package/dist/schemas/bigint.js +1 -1
  61. package/dist/schemas/bigint.js.map +1 -1
  62. package/dist/schemas/boolean.cjs +1 -1
  63. package/dist/schemas/boolean.cjs.map +1 -1
  64. package/dist/schemas/boolean.d.ts +2 -2
  65. package/dist/schemas/boolean.d.ts.map +1 -1
  66. package/dist/schemas/boolean.js +1 -1
  67. package/dist/schemas/boolean.js.map +1 -1
  68. package/dist/schemas/date.cjs +1 -1
  69. package/dist/schemas/date.cjs.map +1 -1
  70. package/dist/schemas/date.d.ts +2 -2
  71. package/dist/schemas/date.d.ts.map +1 -1
  72. package/dist/schemas/date.js +1 -1
  73. package/dist/schemas/date.js.map +1 -1
  74. package/dist/schemas/enum.cjs +1 -1
  75. package/dist/schemas/enum.cjs.map +1 -1
  76. package/dist/schemas/enum.d.ts +2 -2
  77. package/dist/schemas/enum.d.ts.map +1 -1
  78. package/dist/schemas/enum.js +1 -1
  79. package/dist/schemas/enum.js.map +1 -1
  80. package/dist/schemas/instanceof.cjs +1 -1
  81. package/dist/schemas/instanceof.cjs.map +1 -1
  82. package/dist/schemas/instanceof.d.ts +2 -2
  83. package/dist/schemas/instanceof.d.ts.map +1 -1
  84. package/dist/schemas/instanceof.js +1 -1
  85. package/dist/schemas/instanceof.js.map +1 -1
  86. package/dist/schemas/intersect.cjs +1 -1
  87. package/dist/schemas/intersect.cjs.map +1 -1
  88. package/dist/schemas/intersect.d.ts +2 -2
  89. package/dist/schemas/intersect.d.ts.map +1 -1
  90. package/dist/schemas/intersect.js +1 -1
  91. package/dist/schemas/intersect.js.map +1 -1
  92. package/dist/schemas/lazy.cjs +1 -1
  93. package/dist/schemas/lazy.cjs.map +1 -1
  94. package/dist/schemas/lazy.d.ts +3 -3
  95. package/dist/schemas/lazy.d.ts.map +1 -1
  96. package/dist/schemas/lazy.js +1 -1
  97. package/dist/schemas/lazy.js.map +1 -1
  98. package/dist/schemas/literal.cjs +1 -1
  99. package/dist/schemas/literal.cjs.map +1 -1
  100. package/dist/schemas/literal.d.ts +2 -2
  101. package/dist/schemas/literal.d.ts.map +1 -1
  102. package/dist/schemas/literal.js +1 -1
  103. package/dist/schemas/literal.js.map +1 -1
  104. package/dist/schemas/map.cjs +1 -1
  105. package/dist/schemas/map.cjs.map +1 -1
  106. package/dist/schemas/map.d.ts +7 -7
  107. package/dist/schemas/map.d.ts.map +1 -1
  108. package/dist/schemas/map.js +1 -1
  109. package/dist/schemas/map.js.map +1 -1
  110. package/dist/schemas/never.cjs +1 -1
  111. package/dist/schemas/never.cjs.map +1 -1
  112. package/dist/schemas/never.d.ts +2 -2
  113. package/dist/schemas/never.d.ts.map +1 -1
  114. package/dist/schemas/never.js +1 -1
  115. package/dist/schemas/never.js.map +1 -1
  116. package/dist/schemas/number.cjs +1 -1
  117. package/dist/schemas/number.cjs.map +1 -1
  118. package/dist/schemas/number.d.ts +3 -3
  119. package/dist/schemas/number.d.ts.map +1 -1
  120. package/dist/schemas/number.js +1 -1
  121. package/dist/schemas/number.js.map +1 -1
  122. package/dist/schemas/object.cjs +1 -1
  123. package/dist/schemas/object.cjs.map +1 -1
  124. package/dist/schemas/object.d.ts +21 -15
  125. package/dist/schemas/object.d.ts.map +1 -1
  126. package/dist/schemas/object.js +1 -1
  127. package/dist/schemas/object.js.map +1 -1
  128. package/dist/schemas/record.cjs +1 -1
  129. package/dist/schemas/record.cjs.map +1 -1
  130. package/dist/schemas/record.d.ts +7 -7
  131. package/dist/schemas/record.d.ts.map +1 -1
  132. package/dist/schemas/record.js +1 -1
  133. package/dist/schemas/record.js.map +1 -1
  134. package/dist/schemas/set.cjs +1 -1
  135. package/dist/schemas/set.cjs.map +1 -1
  136. package/dist/schemas/set.d.ts +6 -6
  137. package/dist/schemas/set.d.ts.map +1 -1
  138. package/dist/schemas/set.js +1 -1
  139. package/dist/schemas/set.js.map +1 -1
  140. package/dist/schemas/string.cjs +1 -1
  141. package/dist/schemas/string.cjs.map +1 -1
  142. package/dist/schemas/string.d.ts +6 -12
  143. package/dist/schemas/string.d.ts.map +1 -1
  144. package/dist/schemas/string.js +1 -1
  145. package/dist/schemas/string.js.map +1 -1
  146. package/dist/schemas/tuple.cjs +1 -1
  147. package/dist/schemas/tuple.cjs.map +1 -1
  148. package/dist/schemas/tuple.d.ts +3 -3
  149. package/dist/schemas/tuple.d.ts.map +1 -1
  150. package/dist/schemas/tuple.js +1 -1
  151. package/dist/schemas/tuple.js.map +1 -1
  152. package/dist/schemas/union.cjs +1 -1
  153. package/dist/schemas/union.cjs.map +1 -1
  154. package/dist/schemas/union.d.ts +2 -2
  155. package/dist/schemas/union.d.ts.map +1 -1
  156. package/dist/schemas/union.js +1 -1
  157. package/dist/schemas/union.js.map +1 -1
  158. package/dist/schemas/variant.cjs +1 -1
  159. package/dist/schemas/variant.cjs.map +1 -1
  160. package/dist/schemas/variant.d.ts +7 -5
  161. package/dist/schemas/variant.d.ts.map +1 -1
  162. package/dist/schemas/variant.js +1 -1
  163. package/dist/schemas/variant.js.map +1 -1
  164. package/dist/spell.cjs +2 -2
  165. package/dist/spell.cjs.map +1 -1
  166. package/dist/spell.iife.js +2 -2
  167. package/dist/spell.iife.js.map +1 -1
  168. package/dist/spell.js +2 -2
  169. package/dist/spell.js.map +1 -1
  170. package/dist/types.cjs +1 -1
  171. package/dist/types.cjs.map +1 -1
  172. package/dist/types.d.ts +61 -26
  173. package/dist/types.d.ts.map +1 -1
  174. package/dist/types.js +1 -1
  175. package/dist/types.js.map +1 -1
  176. package/package.json +18 -5
@@ -1,16 +1,16 @@
1
- import type { ParseContext, ParseValue, SchemaDescriptor } from '../core';
1
+ import type { AnySchema, InferOutput, ParseContext, ParseValue, SchemaDescriptor } from '../core';
2
2
  import { Schema } from '../core';
3
- export declare class RecordSchema<K extends string, V> extends Schema<Record<K, V>> {
4
- readonly keySchema: Schema<K, any>;
5
- readonly valueSchema: Schema<V, any>;
3
+ export declare class RecordSchema<K extends AnySchema, V extends AnySchema, Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<import('../core').InferSchemaMode<K | V>>> extends Schema<Record<InferOutput<K> & string, InferOutput<V>>, unknown, Mode> {
4
+ readonly keySchema: K;
5
+ readonly valueSchema: V;
6
6
  protected get _kind(): string;
7
- constructor(keySchema: Schema<K, any>, valueSchema: Schema<V, any>);
7
+ checkAsync(this: RecordSchema<K, V, 'sync'>, fn: (value: Record<InferOutput<K> & string, InferOutput<V>>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>): RecordSchema<K, V, 'async'>;
8
+ constructor(keySchema: K, valueSchema: V);
8
9
  private _guardRecordInput;
9
10
  private _parseRecordEntries;
10
11
  protected _parse(value: unknown, ctx: ParseContext): ParseValue;
11
- parseAsync(value: unknown, ctx?: ParseContext): Promise<Record<K, V>>;
12
+ parseAsync(value: unknown, ctx?: ParseContext): Promise<Record<InferOutput<K> & string, InferOutput<V>>>;
12
13
  protected _toDescriptorImpl(): SchemaDescriptor;
13
14
  protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
14
- protected _equalsImpl(other: import('../core').AnySchema): boolean;
15
15
  }
16
16
  //# sourceMappingURL=record.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/schemas/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEjF,OAAO,EAA+B,MAAM,EAAkC,MAAM,SAAS,CAAC;AAI9F,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,CAAE,SAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAErC,cAAuB,KAAK,IAAI,MAAM,CAErC;gBAEW,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;IAMlE,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,mBAAmB;cAsCR,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU;IAUzD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;cA2DjE,iBAAiB,IAAI,gBAAgB;cASrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;cAS9D,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO;CAK5E"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/schemas/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAS,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEzG,OAAO,EAA+B,MAAM,EAAkC,MAAM,SAAS,CAAC;AAG9F,qBAAa,YAAY,CACvB,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,EACnB,IAAI,SAAS,OAAO,SAAS,EAAE,UAAU,GAAG,OAAO,SAAS,EAAE,gBAAgB,CAC5E,OAAO,SAAS,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CACzC,CACD,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,CACF,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EACtD,GAAG,EAAE,OAAO,SAAS,EAAE,YAAY,KAChC,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,CAAC,GAC7C,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;gBAIlB,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IAMxC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,mBAAmB;cAsCR,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;cA2DxC,iBAAiB,IAAI,gBAAgB;cASrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;CAQlF"}
@@ -1,2 +1,2 @@
1
- import{ErrorCode as e}from"../types.js";import{SpellValidationError as t,prependIssuePath as n}from"../errors.js";import{isUnsafeObjectKey as r}from"../safe-object.js";import"../messages.js";import{Schema as i,_makeCtx as a}from"../core.js";var o=class o extends i{keySchema;valueSchema;get _kind(){return`record`}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 i=[],a={};for(let o of Object.keys(e)){let s=this.keySchema._parseFullSync(o,t);if(s.issues.length>0){i.push(...n(s.issues,o));continue}let c=s.data;if(r(c))continue;let l=this.valueSchema._parseFullSync(e[o],t);l.issues.length===0?Object.defineProperty(a,c,{configurable:!0,enumerable:!0,value:l.data,writable:!0}):i.push(...n(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 o=i??a();return this._withCatchAsync(async()=>{let i=this._prepareInput(e);if(i.skip)return i.value;let a=this._guardRecordInput(i.value,o);if(!a.ok)throw new t(a.issues);let s=a.value,c=Object.keys(s),l=await Promise.all(c.map(e=>Promise.all([this.keySchema._parseFullAsync(e,o),this.valueSchema._parseFullAsync(s[e],o)]))),u=[],d={};for(let e=0;e<c.length;e++){let t=c[e],[i,a]=l[e];if(i.issues.length>0){u.push(...n(i.issues,t));continue}let o=i.data;r(o)||(a.issues.length===0?Object.defineProperty(d,o,{configurable:!0,enumerable:!0,value:a.data,writable:!0}):u.push(...n(a.issues,t)))}let f=await this._runValidatorsAsync(d,o),p=[...u,...f];if(p.length>0)throw new t(p);return this._runPostprocessors(d)})}_toDescriptorImpl(){return{...this._describeBase(),key:this.keySchema.toDescriptor(),kind:`record`,value:this.valueSchema.toDescriptor()}}_walk(e){let t=this.keySchema.walk(e),n=this.valueSchema.walk(e);return e.record?e.record(this,t,n):super._walk(e)}_equalsImpl(e){return e instanceof o?this.keySchema.equals(e.keySchema)&&this.valueSchema.equals(e.valueSchema):!1}};export{o as RecordSchema};
1
+ import{ErrorCode as e}from"../types.js";import{SpellValidationError as t,prependIssuePath as n}from"../errors.js";import{isUnsafeObjectKey as r}from"../safe-object.js";import{Schema as i,_makeCtx as a}from"../core.js";var o=class extends i{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 i=[],a={};for(let o of Object.keys(e)){let s=this.keySchema._parseFullSync(o,t);if(s.issues.length>0){i.push(...n(s.issues,o));continue}let c=s.data;if(r(c))continue;let l=this.valueSchema._parseFullSync(e[o],t);l.issues.length===0?Object.defineProperty(a,c,{configurable:!0,enumerable:!0,value:l.data,writable:!0}):i.push(...n(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 o=i??a();return this._withCatchAsync(async()=>{let i=this._prepareInput(e);if(i.skip)return i.value;let a=this._guardRecordInput(i.value,o);if(!a.ok)throw new t(a.issues);let s=a.value,c=Object.keys(s),l=await Promise.all(c.map(e=>Promise.all([this.keySchema._parseFullAsync(e,o),this.valueSchema._parseFullAsync(s[e],o)]))),u=[],d={};for(let e=0;e<c.length;e++){let t=c[e],[i,a]=l[e];if(i.issues.length>0){u.push(...n(i.issues,t));continue}let o=i.data;r(o)||(a.issues.length===0?Object.defineProperty(d,o,{configurable:!0,enumerable:!0,value:a.data,writable:!0}):u.push(...n(a.issues,t)))}let f=await this._runValidatorsAsync(d,o),p=[...u,...f];if(p.length>0)throw new t(p);return this._runPostprocessors(d)})}_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{o 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 { Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, prependIssuePath, Schema, SpellValidationError, _makeCtx } from '../core';\nimport { _messages } from '../messages';\nimport { isUnsafeObjectKey } from '../safe-object';\n\nexport class RecordSchema<K extends string, V> extends Schema<Record<K, V>> {\n readonly keySchema: Schema<K, any>;\n readonly valueSchema: Schema<V, any>;\n\n protected override get _kind(): string {\n return 'record';\n }\n\n constructor(keySchema: Schema<K, any>, valueSchema: Schema<V, any>) {\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 Object.defineProperty(output, parsedKey, {\n configurable: true,\n enumerable: true,\n value: valResult.data,\n writable: true,\n });\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(value: unknown, ctx?: ParseContext): Promise<Record<K, 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<K, 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 Object.defineProperty(output, parsedKey, {\n configurable: true,\n enumerable: true,\n value: valResult.data,\n writable: true,\n });\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<K, V>;\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.toDescriptor(),\n kind: 'record',\n value: this.valueSchema.toDescriptor(),\n };\n }\n\n protected override _walk<R>(visitor: import('../core').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 protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n if (!(other instanceof RecordSchema)) return false;\n\n return this.keySchema.equals(other.keySchema) && this.valueSchema.equals(other.valueSchema);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"record.js","names":[],"sources":["../../src/schemas/record.ts"],"sourcesContent":["import type { AnySchema, InferOutput, Issue, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, prependIssuePath, Schema, SpellValidationError, _makeCtx } from '../core';\nimport { isUnsafeObjectKey } from '../safe-object';\n\nexport class RecordSchema<\n K extends AnySchema,\n V extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<\n import('../core').InferSchemaMode<K | V>\n >,\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: (\n value: Record<InferOutput<K> & string, InferOutput<V>>,\n ctx: import('../core').CheckContext,\n ) => Promise<import('../core').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 Object.defineProperty(output, parsedKey, {\n configurable: true,\n enumerable: true,\n value: valResult.data,\n writable: true,\n });\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 Object.defineProperty(output, parsedKey, {\n configurable: true,\n enumerable: true,\n value: valResult.data,\n writable: true,\n });\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: import('../core').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("../messages.cjs"),r=require("../core.cjs");var i=class i extends r.Schema{itemSchema;get _kind(){return`set`}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(n,i){let a=i??r._makeCtx();return this._withCatchAsync(async()=>{let r=this._prepareInput(n);if(r.skip)return r.value;let i=r.value;if(!(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(r,i=e=>n._messages().set.min(e)){return this._addConstraint((n,a)=>{let o=n;return o.size>=r?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(i,{min:r,value:o}),{min:r})})}max(r,i=e=>n._messages().set.max(e)){return this._addConstraint((n,a)=>{let o=n;return o.size<=r?null:t.fail(e.ErrorCode.too_big,t.resolveMessage(i,{max:r,value:o}),{max:r})})}size(r,i=e=>n._messages().set.size(e)){return this._addConstraint((n,a)=>{let o=n;return o.size===r?null:t.fail(e.ErrorCode.invalid_length,t.resolveMessage(i,{exact:r,value:o}),{exact:r})})}nonEmpty(r=()=>n._messages().set.nonEmpty()){return this._addConstraint((n,i)=>n.size>0?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(r,{min:1}),{min:1}))}_toDescriptorImpl(){return{...this._describeBase(),items:this.itemSchema.toDescriptor(),kind:`set`}}_walk(e){let t=this.itemSchema.walk(e);return e.set?e.set(this,t):super._walk(e)}_equalsImpl(e){return e instanceof i?this.itemSchema.equals(e.itemSchema):!1}};exports.SetSchema=i;
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;
2
2
  //# sourceMappingURL=set.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"set.cjs","names":[],"sources":["../../src/schemas/set.ts"],"sourcesContent":["import type { Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError, _makeCtx } from '../core';\nimport { _messages } from '../messages';\n\nexport class SetSchema<T> extends Schema<Set<T>> {\n readonly itemSchema: Schema<T, any>;\n\n protected override get _kind(): string {\n return 'set';\n }\n\n constructor(itemSchema: Schema<T, any>) {\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<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 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<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<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<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 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<T>;\n });\n }\n\n min(\n size: number,\n message: MessageFn<{ min: number; value: Set<unknown> }> = (ctx) => _messages().set.min(ctx),\n ): 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, { min: size, value: typed }), { min: size });\n });\n }\n\n max(\n size: number,\n message: MessageFn<{ max: number; value: Set<unknown> }> = (ctx) => _messages().set.max(ctx),\n ): 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, { max: size, value: typed }), { max: size });\n });\n }\n\n size(\n exact: number,\n message: MessageFn<{ exact: number; value: Set<unknown> }> = (ctx) => _messages().set.size(ctx),\n ): 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(ErrorCode.invalid_length, resolveMessage(message, { exact, value: typed }), { exact });\n });\n }\n\n nonEmpty(message: MessageFn<{ min: number }> = () => _messages().set.nonEmpty()): 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, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), items: this.itemSchema.toDescriptor(), kind: 'set' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.set) return visitor.set(this, item);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n if (!(other instanceof SetSchema)) return false;\n\n return this.itemSchema.equals(other.itemSchema);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"set.cjs","names":[],"sources":["../../src/schemas/set.ts"],"sourcesContent":["import type { AnySchema, InferOutput, Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError, _makeCtx } from '../core';\n\nexport class SetSchema<\n T extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<import('../core').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: import('../core').CheckContext) => Promise<import('../core').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: import('../core').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":"oFAIA,IAAa,EAAb,cAGU,EAAA,MAA2C,CACnD,WAEA,IAAuB,OAAgB,CACrC,MAAO,KACT,CAEA,WAEE,EACuB,CACvB,OAAO,KAAK,UAAU,EAAI,EAAI,CAChC,CAEA,YAAY,EAAe,CACzB,MAAM,EACN,KAAK,WAAa,CACpB,CAEA,OAA0B,EAAgB,EAA+B,CACvE,GAAI,EAAE,aAAiB,KACrB,MAAO,CACL,KAAM,EACN,OAAQ,CAAC,CAAE,KAAM,EAAA,UAAU,aAAc,QAAS,EAAI,SAAS,IAAI,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,EACrF,OAAQ,EACV,EAGF,IAAM,EAAkB,CAAC,EACnB,EAAS,IAAI,IACf,EAAI,EAER,IAAK,IAAM,KAAQ,EAAO,CACxB,IAAM,EAAS,KAAK,WAAW,eAAe,EAAM,CAAG,EAEnD,EAAO,OAAO,SAAW,EAC3B,EAAO,IAAI,EAAO,IAAsB,EAExC,EAAO,KAAK,GAAG,EAAA,iBAAiB,EAAO,OAAQ,CAAC,CAAC,EAGnD,GAAK,CACP,CAEA,MAAO,CAAE,KAAM,EAAQ,SAAQ,OAAQ,EAAK,CAC9C,CAEA,MAAe,WAAW,EAAgB,EAAkD,CAC1F,IAAM,EAAI,GAAO,EAAA,SAAS,EAE1B,OAAO,KAAK,gBAAgB,SAAY,CACtC,IAAM,EAAW,KAAK,cAAc,CAAK,EAEzC,GAAI,EAAS,KAAM,OAAO,EAAS,MAEnC,IAAM,EAAM,EAAS,MAErB,GAAI,EAAE,aAAe,KACnB,MAAM,IAAI,EAAA,qBAAqB,CAAC,CAAE,KAAM,EAAA,UAAU,aAAc,QAAS,EAAE,SAAS,IAAI,KAAK,EAAG,KAAM,CAAC,CAAE,CAAC,CAAC,EAG7G,IAAM,EAAQ,CAAC,GAAG,CAAG,EACf,EAAU,MAAM,QAAQ,IAAI,EAAM,IAAK,GAAS,KAAK,WAAW,gBAAgB,EAAM,CAAC,CAAC,CAAC,EAEzF,EAAkB,CAAC,EACnB,EAAS,IAAI,IAEnB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,IAAM,EAAS,EAAQ,GAEnB,EAAO,OAAO,SAAW,EAC3B,EAAO,IAAI,EAAO,IAAsB,EAExC,EAAO,KAAK,GAAG,EAAA,iBAAiB,EAAO,OAAQ,CAAC,CAAC,CAErD,CAEA,IAAM,EAAmB,MAAM,KAAK,oBAAoB,EAAQ,CAAC,EAC3D,EAAY,CAAC,GAAG,EAAQ,GAAG,CAAgB,EAEjD,GAAI,EAAU,OAAS,EAAG,MAAM,IAAI,EAAA,qBAAqB,CAAS,EAElE,OAAO,KAAK,mBAAmB,CAAM,CACvC,CAAC,CACH,CAEA,IAAI,EAAc,EAAiE,CACjF,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAM,EAAQ,EAId,OAFI,EAAM,MAAQ,EAAa,KAExB,EAAA,KAAK,EAAA,UAAU,UAAW,EAAA,eAAe,GAAW,EAAK,SAAS,IAAI,IAAK,CAAE,IAAK,EAAM,MAAO,CAAM,CAAC,EAAG,CAC9G,IAAK,CACP,CAAC,CACH,CAAC,CACH,CAEA,IAAI,EAAc,EAAiE,CACjF,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAM,EAAQ,EAId,OAFI,EAAM,MAAQ,EAAa,KAExB,EAAA,KAAK,EAAA,UAAU,QAAS,EAAA,eAAe,GAAW,EAAK,SAAS,IAAI,IAAK,CAAE,IAAK,EAAM,MAAO,CAAM,CAAC,EAAG,CAC5G,IAAK,CACP,CAAC,CACH,CAAC,CACH,CAEA,KAAK,EAAe,EAAmE,CACrF,OAAO,KAAK,gBAAgB,EAAO,IAAQ,CACzC,IAAM,EAAQ,EAId,OAFI,EAAM,OAAS,EAAc,KAE1B,EAAA,KACL,EAAA,UAAU,eACV,EAAA,eAAe,GAAW,EAAK,SAAS,IAAI,KAAM,CAAE,QAAO,MAAO,CAAM,CAAC,EACzE,CAAE,OAAM,CACV,CACF,CAAC,CACH,CAEA,SAAS,EAA4C,CACnD,OAAO,KAAK,gBAAgB,EAAO,IAG7B,EAAM,KAAO,EAAU,KAEpB,EAAA,KAAK,EAAA,UAAU,UAAW,EAAA,eAAe,GAAW,EAAK,SAAS,IAAI,SAAU,CAAE,IAAK,CAAE,CAAC,EAAG,CAAE,IAAK,CAAE,CAAC,CAC/G,CACH,CAEA,mBAAyD,CACvD,MAAO,CAAE,GAAG,KAAK,cAAc,EAAG,MAAO,KAAK,WAAW,WAAW,EAAG,KAAM,KAAM,CACrF,CAEA,MAA4B,EAAsD,CAChF,IAAM,EAAO,KAAK,WAAW,KAAK,CAAO,EAIzC,OAFI,EAAQ,IAAY,EAAQ,IAAI,KAAM,CAAI,EAEvC,MAAM,MAAM,CAAO,CAC5B,CACF"}
@@ -1,11 +1,12 @@
1
- import type { MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';
1
+ import type { AnySchema, InferOutput, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';
2
2
  import { Schema } from '../core';
3
- export declare class SetSchema<T> extends Schema<Set<T>> {
4
- readonly itemSchema: Schema<T, any>;
3
+ export declare class SetSchema<T extends AnySchema, Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<import('../core').InferSchemaMode<T>>> extends Schema<Set<InferOutput<T>>, unknown, Mode> {
4
+ readonly itemSchema: T;
5
5
  protected get _kind(): string;
6
- constructor(itemSchema: Schema<T, any>);
6
+ checkAsync(this: SetSchema<T, 'sync'>, fn: (value: Set<InferOutput<T>>, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>): SetSchema<T, 'async'>;
7
+ constructor(itemSchema: T);
7
8
  protected _parse(value: unknown, ctx: ParseContext): ParseValue;
8
- parseAsync(value: unknown, ctx?: ParseContext): Promise<Set<T>>;
9
+ parseAsync(value: unknown, ctx?: ParseContext): Promise<Set<InferOutput<T>>>;
9
10
  min(size: number, message?: MessageFn<{
10
11
  min: number;
11
12
  value: Set<unknown>;
@@ -23,6 +24,5 @@ export declare class SetSchema<T> extends Schema<Set<T>> {
23
24
  }>): this;
24
25
  protected _toDescriptorImpl(): SchemaDescriptor;
25
26
  protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
26
- protected _equalsImpl(other: import('../core').AnySchema): boolean;
27
27
  }
28
28
  //# sourceMappingURL=set.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/schemas/set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5F,OAAO,EAAqD,MAAM,EAAkC,MAAM,SAAS,CAAC;AAGpH,qBAAa,SAAS,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEpC,cAAuB,KAAK,IAAI,MAAM,CAErC;gBAEW,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;cAKnB,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,CAAC,CAAC,CAAC;IAuC9E,GAAG,CACD,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KAAE,CAAqC,GAC3F,IAAI;IAUP,GAAG,CACD,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KAAE,CAAqC,GAC3F,IAAI;IAUP,IAAI,CACF,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KAAE,CAAsC,GAC9F,IAAI;IAUP,QAAQ,CAAC,OAAO,GAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAoC,GAAG,IAAI;cAUnE,iBAAiB,IAAI,gBAAgB;cAIrC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;cAQ9D,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO;CAK5E"}
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/schemas/set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAS,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEpH,OAAO,EAAqD,MAAM,EAAkC,MAAM,SAAS,CAAC;AAEpH,qBAAa,SAAS,CACpB,CAAC,SAAS,SAAS,EACnB,IAAI,SAAS,OAAO,SAAS,EAAE,UAAU,GAAG,OAAO,SAAS,EAAE,gBAAgB,CAAC,OAAO,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CACpH,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,OAAO,SAAS,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,CAAC,GACjH,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,OAAO,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;CAOlF"}
@@ -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{_messages as a}from"../messages.js";import{Schema as o,_makeCtx as s}from"../core.js";var c=class c extends o{itemSchema;get _kind(){return`set`}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??s();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=e=>a().set.min(e)){return this._addConstraint((a,o)=>{let s=a;return s.size>=t?null:n(e.too_small,i(r,{min:t,value:s}),{min:t})})}max(t,r=e=>a().set.max(e)){return this._addConstraint((a,o)=>{let s=a;return s.size<=t?null:n(e.too_big,i(r,{max:t,value:s}),{max:t})})}size(t,r=e=>a().set.size(e)){return this._addConstraint((a,o)=>{let s=a;return s.size===t?null:n(e.invalid_length,i(r,{exact:t,value:s}),{exact:t})})}nonEmpty(t=()=>a().set.nonEmpty()){return this._addConstraint((r,a)=>r.size>0?null:n(e.too_small,i(t,{min:1}),{min:1}))}_toDescriptorImpl(){return{...this._describeBase(),items:this.itemSchema.toDescriptor(),kind:`set`}}_walk(e){let t=this.itemSchema.walk(e);return e.set?e.set(this,t):super._walk(e)}_equalsImpl(e){return e instanceof c?this.itemSchema.equals(e.itemSchema):!1}};export{c as SetSchema};
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};
2
2
  //# sourceMappingURL=set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"set.js","names":[],"sources":["../../src/schemas/set.ts"],"sourcesContent":["import type { Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError, _makeCtx } from '../core';\nimport { _messages } from '../messages';\n\nexport class SetSchema<T> extends Schema<Set<T>> {\n readonly itemSchema: Schema<T, any>;\n\n protected override get _kind(): string {\n return 'set';\n }\n\n constructor(itemSchema: Schema<T, any>) {\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<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 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<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<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<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 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<T>;\n });\n }\n\n min(\n size: number,\n message: MessageFn<{ min: number; value: Set<unknown> }> = (ctx) => _messages().set.min(ctx),\n ): 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, { min: size, value: typed }), { min: size });\n });\n }\n\n max(\n size: number,\n message: MessageFn<{ max: number; value: Set<unknown> }> = (ctx) => _messages().set.max(ctx),\n ): 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, { max: size, value: typed }), { max: size });\n });\n }\n\n size(\n exact: number,\n message: MessageFn<{ exact: number; value: Set<unknown> }> = (ctx) => _messages().set.size(ctx),\n ): 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(ErrorCode.invalid_length, resolveMessage(message, { exact, value: typed }), { exact });\n });\n }\n\n nonEmpty(message: MessageFn<{ min: number }> = () => _messages().set.nonEmpty()): 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, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), items: this.itemSchema.toDescriptor(), kind: 'set' };\n }\n\n protected override _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null {\n const item = this.itemSchema.walk(visitor);\n\n if (visitor.set) return visitor.set(this, item);\n\n return super._walk(visitor);\n }\n\n protected override _equalsImpl(other: import('../core').AnySchema): boolean {\n if (!(other instanceof SetSchema)) return false;\n\n return this.itemSchema.equals(other.itemSchema);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"set.js","names":[],"sources":["../../src/schemas/set.ts"],"sourcesContent":["import type { AnySchema, InferOutput, Issue, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, prependIssuePath, resolveMessage, Schema, SpellValidationError, _makeCtx } from '../core';\n\nexport class SetSchema<\n T extends AnySchema,\n Mode extends import('../core').SchemaMode = import('../core').MergeSchemaModes<import('../core').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: import('../core').CheckContext) => Promise<import('../core').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: import('../core').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"),n=require("../messages.cjs"),r=require("../core.cjs"),i=require("../formats.cjs");var a=class a extends r.Schema{get _kind(){return`string`}constructor(){super((r,i)=>typeof r==`string`?null:t.fail(e.ErrorCode.invalid_type,(i?.messages??n._messages()).string.type()))}min(r,i=e=>n._messages().string.min(e)){return this._addConstraint((n,a)=>n.length>=r?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(i,{min:r,value:n}),{min:r}),e=>{let t=e;return{...t,minLength:t.minLength===void 0?r:Math.max(t.minLength,r)}})}max(r,i=e=>n._messages().string.max(e)){return this._addConstraint((n,a)=>n.length<=r?null:t.fail(e.ErrorCode.too_big,t.resolveMessage(i,{max:r,value:n}),{max:r}),e=>{let t=e;return{...t,maxLength:t.maxLength===void 0?r:Math.min(t.maxLength,r)}})}length(r,i=e=>n._messages().string.length(e)){return this._addConstraint((n,a)=>n.length===r?null:t.fail(e.ErrorCode.invalid_length,t.resolveMessage(i,{exact:r,value:n}),{exact:r}),e=>({...e,maxLength:r,minLength:r}))}nonempty(e=()=>n._messages().string.nonEmpty()){return this.nonEmpty(e)}nonEmpty(r=()=>n._messages().string.nonEmpty()){return this._addConstraint((n,i)=>n.length>0?null:t.fail(e.ErrorCode.too_small,t.resolveMessage(r,{min:1,value:n}),{min:1}),e=>{let t=e;return{...t,minLength:Math.max(t.minLength??0,1)}})}startsWith(r,i=e=>n._messages().string.startsWith(e)){return this._addConstraint((n,a)=>n.startsWith(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(i,{prefix:r,value:n}),{prefix:r}))}endsWith(r,i=e=>n._messages().string.endsWith(e)){return this._addConstraint((n,a)=>n.endsWith(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(i,{suffix:r,value:n}),{suffix:r}))}includes(r,i=e=>n._messages().string.includes(e)){return this._addConstraint((n,a)=>n.includes(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(i,{substr:r,value:n}),{includes:r}))}regex(r,i=e=>n._messages().string.regex(e)){let a=new RegExp(r.source,r.flags.replace(/[gy]/g,``));return this._addConstraint((n,r)=>a.test(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(i,{value:n}),{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:(n._dev("[spell] Multiple .regex() constraints detected on a single string schema. JSON Schema `pattern` cannot represent multiple patterns and will be omitted from toJsonSchema() output."),{...t,pattern:null})})}email(r=()=>n._messages().string.email()){return this._addConstraint((n,a)=>i.isEmail(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`email`}),e=>({...e,format:`email`}))}url(r={}){let{message:a=()=>n._messages().string.url(),protocols:o=[`http`,`https`]}=r;return this._addConstraint((n,r)=>i.isUrl(n,o)?null:t.fail(e.ErrorCode.invalid_url,t.resolveMessage(a,{value:n}),{format:`url`}),e=>({...e,format:`uri`}))}uuid(r=()=>n._messages().string.uuid()){return this._addConstraint((n,a)=>i.isUuid(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`uuid`}),e=>({...e,format:`uuid`}))}isoDate(r=()=>n._messages().string.date()){return this._addConstraint((n,a)=>i.isIsoDate(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`iso-date`}),e=>({...e,format:`date`}))}isoDateTime(r=()=>n._messages().string.dateTime()){return this._addConstraint((n,a)=>i.isIsoDateTime(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`iso-datetime`}),e=>({...e,format:`date-time`}))}ip(r=()=>n._messages().string.ip()){return this._addConstraint((n,a)=>i.isIp(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`ip`}))}cuid(r=()=>n._messages().string.cuid()){return this._addConstraint((n,a)=>i.isCuid(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`cuid`}))}cuid2(r=()=>n._messages().string.cuid2()){return this._addConstraint((n,a)=>i.isCuid2(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`cuid2`}))}ulid(r=()=>n._messages().string.ulid()){return this._addConstraint((n,a)=>i.isUlid(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`ulid`}))}nanoid(r,a=()=>n._messages().string.nanoid()){return this._addConstraint((n,o)=>i.isNanoid(n,r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(a,{value:n}),{format:`nanoid`}))}base64(r=()=>n._messages().string.base64()){return this._addConstraint((n,a)=>i.isBase64(n)?null:t.fail(e.ErrorCode.invalid_base64,t.resolveMessage(r,{value:n}),{format:`base64`}),e=>({...e,contentEncoding:`base64`}))}base64url(r=()=>n._messages().string.base64url()){return this._addConstraint((n,a)=>i.isBase64url(n)?null:t.fail(e.ErrorCode.invalid_base64,t.resolveMessage(r,{value:n}),{format:`base64url`}))}hex(r=()=>n._messages().string.hex()){return this._addConstraint((n,a)=>i.isHex(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`hex`}))}hexColor(r=()=>n._messages().string.hexColor()){return this._addConstraint((n,a)=>i.isHexColor(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`hex-color`}))}emoji(r=()=>n._messages().string.emoji()){return this._addConstraint((n,a)=>i.isEmoji(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`emoji`}))}jwt(r=()=>n._messages().string.jwt()){return this._addConstraint((n,a)=>i.isJwt(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`jwt`}))}time(r=()=>n._messages().string.time()){return this._addConstraint((n,a)=>i.isTime(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`time`}))}duration(r=()=>n._messages().string.duration()){return this._addConstraint((n,a)=>i.isDuration(n)?null:t.fail(e.ErrorCode.invalid_duration,t.resolveMessage(r,{value:n}),{format:`duration`}),e=>({...e,format:`duration`}))}semver(r=()=>n._messages().string.semver()){return this._addConstraint((n,a)=>i.isSemver(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`semver`}))}slug(r=()=>n._messages().string.slug()){return this._addConstraint((n,a)=>i.isSlug(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`slug`}))}numeric(r=()=>n._messages().string.numeric()){return this._addConstraint((n,a)=>i.isNumeric(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r,{value:n}),{format:`numeric`}))}coerce(){return a.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`}}_equalsImpl(e){return e instanceof a?this._annotationsEqual(e):!1}static coerce(){return new a().preprocess(e=>e==null?e:String(e))}};exports.StringSchema=a;
1
+ const e=require("../types.cjs"),t=require("../errors.cjs"),n=require("../messages.cjs"),r=require("../core.cjs"),i=require("../formats.cjs");var a=class a extends r.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(e){return this.nonEmpty(e)}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(r,i){let a=new RegExp(r.source,r.flags.replace(/[gy]/g,``));return this._addConstraint((n,r)=>a.test(n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(i??r.messages.string.regex,{value:n}),{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:(n._dev("[spell] Multiple .regex() constraints detected on a single string schema. JSON Schema `pattern` cannot represent multiple patterns and will be omitted from definition output."),{...t,pattern:null})})}email(n){return this._addConstraint((r,a)=>i.isEmail(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.email,{value:r}),{format:`email`}),e=>({...e,format:`email`}))}url(n={}){let{message:r,protocols:a=[`http`,`https`]}=n;return this._addConstraint((n,o)=>i.isUrl(n,a)?null:t.fail(e.ErrorCode.invalid_url,t.resolveMessage(r??o.messages.string.url,{value:n}),{format:`url`}),e=>({...e,format:`uri`}))}uuid(n){return this._addConstraint((r,a)=>i.isUuid(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.uuid,{value:r}),{format:`uuid`}),e=>({...e,format:`uuid`}))}isoDate(n){return this._addConstraint((r,a)=>i.isIsoDate(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.date,{value:r}),{format:`iso-date`}),e=>({...e,format:`date`}))}isoDateTime(n){return this._addConstraint((r,a)=>i.isIsoDateTime(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.dateTime,{value:r}),{format:`iso-datetime`}),e=>({...e,format:`date-time`}))}ip(n){return this._addConstraint((r,a)=>i.isIp(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.ip,{value:r}),{format:`ip`}))}cuid(n){return this._addConstraint((r,a)=>i.isCuid(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.cuid,{value:r}),{format:`cuid`}))}cuid2(n){return this._addConstraint((r,a)=>i.isCuid2(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.cuid2,{value:r}),{format:`cuid2`}))}ulid(n){return this._addConstraint((r,a)=>i.isUlid(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.ulid,{value:r}),{format:`ulid`}))}nanoid(n,r){return this._addConstraint((a,o)=>i.isNanoid(a,n)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(r??o.messages.string.nanoid,{value:a}),{format:`nanoid`}))}base64(n){return this._addConstraint((r,a)=>i.isBase64(r)?null:t.fail(e.ErrorCode.invalid_base64,t.resolveMessage(n??a.messages.string.base64,{value:r}),{format:`base64`}),e=>({...e,contentEncoding:`base64`}))}base64url(n){return this._addConstraint((r,a)=>i.isBase64url(r)?null:t.fail(e.ErrorCode.invalid_base64,t.resolveMessage(n??a.messages.string.base64url,{value:r}),{format:`base64url`}))}hex(n){return this._addConstraint((r,a)=>i.isHex(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.hex,{value:r}),{format:`hex`}))}hexColor(n){return this._addConstraint((r,a)=>i.isHexColor(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.hexColor,{value:r}),{format:`hex-color`}))}emoji(n){return this._addConstraint((r,a)=>i.isEmoji(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.emoji,{value:r}),{format:`emoji`}))}jwt(n){return this._addConstraint((r,a)=>i.isJwt(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.jwt,{value:r}),{format:`jwt`}))}time(n){return this._addConstraint((r,a)=>i.isTime(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.time,{value:r}),{format:`time`}))}duration(n){return this._addConstraint((r,a)=>i.isDuration(r)?null:t.fail(e.ErrorCode.invalid_duration,t.resolveMessage(n??a.messages.string.duration,{value:r}),{format:`duration`}),e=>({...e,format:`duration`}))}semver(n){return this._addConstraint((r,a)=>i.isSemver(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.semver,{value:r}),{format:`semver`}))}slug(n){return this._addConstraint((r,a)=>i.isSlug(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.slug,{value:r}),{format:`slug`}))}numeric(n){return this._addConstraint((r,a)=>i.isNumeric(r)?null:t.fail(e.ErrorCode.invalid_string,t.resolveMessage(n??a.messages.string.numeric,{value:r}),{format:`numeric`}))}coerce(){return a.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 a().preprocess(e=>e==null?e:String(e))}};exports.StringSchema=a;
2
2
  //# sourceMappingURL=string.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"string.cjs","names":[],"sources":["../../src/schemas/string.ts"],"sourcesContent":["import type { AnySchema, MessageFn, SchemaDescriptor } from '../core';\n\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';\nimport { _messages, _dev } from '../messages';\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> extends Schema<string, Input> {\n protected override get _kind(): string {\n return 'string';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'string' ? null : fail(ErrorCode.invalid_type, (ctx?.messages ?? _messages()).string.type()),\n );\n }\n\n min(length: number, message: MessageFn<{ min: number; value: string }> = (ctx) => _messages().string.min(ctx)): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as string).length >= length) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message, { min: length, value: value as string }), {\n min: length,\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 }> = (ctx) => _messages().string.max(ctx)): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as string).length <= length) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message, { max: length, value: value as string }), {\n max: length,\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(\n exact: number,\n message: MessageFn<{ exact: number; value: string }> = (ctx) => _messages().string.length(ctx),\n ): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as string).length === exact) return null;\n\n return fail(ErrorCode.invalid_length, resolveMessage(message, { exact, value: value as string }), { exact });\n },\n (ann) => ({ ...ann, maxLength: exact, minLength: exact }),\n );\n }\n\n /**\n * Alias for `.nonEmpty()` — validates that the string is not empty.\n * Provided for discoverability alongside `ArraySchema.nonEmpty()`.\n */\n nonempty(message: MessageFn<{ min: number; value: string }> = () => _messages().string.nonEmpty()): this {\n return this.nonEmpty(message);\n }\n\n nonEmpty(message: MessageFn<{ min: number; value: string }> = () => _messages().string.nonEmpty()): this {\n return this._addConstraint(\n (value, _ctx) => {\n if ((value as string).length > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message, { min: 1, value: value as string }), { min: 1 });\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(\n prefix: string,\n message: MessageFn<{ prefix: string; value: string }> = (ctx) => _messages().string.startsWith(ctx),\n ): this {\n return this._addConstraint((value, _ctx) => {\n if ((value as string).startsWith(prefix)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { prefix, value: value as string }), { prefix });\n });\n }\n\n endsWith(\n suffix: string,\n message: MessageFn<{ suffix: string; value: string }> = (ctx) => _messages().string.endsWith(ctx),\n ): this {\n return this._addConstraint((value, _ctx) => {\n if ((value as string).endsWith(suffix)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { suffix, value: value as string }), { suffix });\n });\n }\n\n includes(\n substr: string,\n message: MessageFn<{ substr: string; value: string }> = (ctx) => _messages().string.includes(ctx),\n ): this {\n return this._addConstraint((value, _ctx) => {\n if ((value as string).includes(substr)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { substr, value: value as string }), {\n includes: substr,\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 * **`.equals()` note:** `.equals()` only compares descriptor-level annotations, never runtime\n * validator behavior. Chaining more than one `.regex()` collapses the descriptor `pattern` to\n * `null` (ambiguous), so two schemas with *different* pairs of regexes can compare equal even\n * though they accept different strings. This mirrors `.equals()`'s general limitation of\n * ignoring custom `.validate()`/`.refine()` logic — avoid relying on `.equals()` for schemas\n * with more than one `.regex()` constraint.\n */\n regex(pattern: RegExp, message: MessageFn<{ value: string }> = (ctx) => _messages().string.regex(ctx)): 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(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), {\n pattern: safePattern.source,\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 _dev(\n '[spell] Multiple .regex() constraints detected on a single string schema. ' +\n 'JSON Schema `pattern` cannot represent multiple patterns and will be omitted from toJsonSchema() output.',\n );\n\n return { ...ann, pattern: null };\n }\n\n return ann;\n },\n );\n }\n\n email(message: MessageFn<{ value: string }> = () => _messages().string.email()): this {\n return this._addConstraint(\n (value, _ctx) => {\n if (isEmail(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'email' });\n },\n (ann) => ({ ...ann, format: 'email' }),\n );\n }\n\n url(options: UrlOptions = {}): this {\n const { message = () => _messages().string.url(), 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(ErrorCode.invalid_url, resolveMessage(message, { value: value as string }), { format: 'url' });\n },\n (ann) => ({ ...ann, format: 'uri' }),\n );\n }\n\n uuid(message: MessageFn<{ value: string }> = () => _messages().string.uuid()): this {\n return this._addConstraint(\n (value, _ctx) => {\n if (isUuid(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'uuid' });\n },\n (ann) => ({ ...ann, format: 'uuid' }),\n );\n }\n\n isoDate(message: MessageFn<{ value: string }> = () => _messages().string.date()): this {\n return this._addConstraint(\n (value, _ctx) => {\n if (isIsoDate(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), {\n format: 'iso-date',\n });\n },\n (ann) => ({ ...ann, format: 'date' }),\n );\n }\n\n isoDateTime(message: MessageFn<{ value: string }> = () => _messages().string.dateTime()): this {\n return this._addConstraint(\n (value, _ctx) => {\n if (isIsoDateTime(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), {\n format: 'iso-datetime',\n });\n },\n (ann) => ({ ...ann, format: 'date-time' }),\n );\n }\n\n ip(message: MessageFn<{ value: string }> = () => _messages().string.ip()): this {\n return this._addConstraint((value, _ctx) => {\n if (isIp(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'ip' });\n });\n }\n\n cuid(message: MessageFn<{ value: string }> = () => _messages().string.cuid()): this {\n return this._addConstraint((value, _ctx) => {\n if (isCuid(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'cuid' });\n });\n }\n\n cuid2(message: MessageFn<{ value: string }> = () => _messages().string.cuid2()): this {\n return this._addConstraint((value, _ctx) => {\n if (isCuid2(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'cuid2' });\n });\n }\n\n ulid(message: MessageFn<{ value: string }> = () => _messages().string.ulid()): this {\n return this._addConstraint((value, _ctx) => {\n if (isUlid(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'ulid' });\n });\n }\n\n nanoid(length?: number, message: MessageFn<{ value: string }> = () => _messages().string.nanoid()): this {\n return this._addConstraint((value, _ctx) => {\n if (isNanoid(value as string, length)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'nanoid' });\n });\n }\n\n base64(message: MessageFn<{ value: string }> = () => _messages().string.base64()): this {\n return this._addConstraint(\n (value, _ctx) => {\n if (isBase64(value as string)) return null;\n\n return fail(ErrorCode.invalid_base64, resolveMessage(message, { value: value as string }), {\n format: 'base64',\n });\n },\n (ann) => ({ ...ann, contentEncoding: 'base64' }),\n );\n }\n\n base64url(message: MessageFn<{ value: string }> = () => _messages().string.base64url()): this {\n return this._addConstraint((value, _ctx) => {\n if (isBase64url(value as string)) return null;\n\n return fail(ErrorCode.invalid_base64, resolveMessage(message, { value: value as string }), {\n format: 'base64url',\n });\n });\n }\n\n hex(message: MessageFn<{ value: string }> = () => _messages().string.hex()): this {\n return this._addConstraint((value, _ctx) => {\n if (isHex(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'hex' });\n });\n }\n\n hexColor(message: MessageFn<{ value: string }> = () => _messages().string.hexColor()): this {\n return this._addConstraint((value, _ctx) => {\n if (isHexColor(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), {\n format: 'hex-color',\n });\n });\n }\n\n emoji(message: MessageFn<{ value: string }> = () => _messages().string.emoji()): this {\n return this._addConstraint((value, _ctx) => {\n if (isEmoji(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'emoji' });\n });\n }\n\n jwt(message: MessageFn<{ value: string }> = () => _messages().string.jwt()): this {\n return this._addConstraint((value, _ctx) => {\n if (isJwt(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'jwt' });\n });\n }\n\n time(message: MessageFn<{ value: string }> = () => _messages().string.time()): this {\n return this._addConstraint((value, _ctx) => {\n if (isTime(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'time' });\n });\n }\n\n duration(message: MessageFn<{ value: string }> = () => _messages().string.duration()): this {\n return this._addConstraint(\n (value, _ctx) => {\n if (isDuration(value as string)) return null;\n\n return fail(ErrorCode.invalid_duration, resolveMessage(message, { value: value as string }), {\n format: 'duration',\n });\n },\n (ann) => ({ ...ann, format: 'duration' }),\n );\n }\n\n semver(message: MessageFn<{ value: string }> = () => _messages().string.semver()): this {\n return this._addConstraint((value, _ctx) => {\n if (isSemver(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'semver' });\n });\n }\n\n slug(message: MessageFn<{ value: string }> = () => _messages().string.slug()): this {\n return this._addConstraint((value, _ctx) => {\n if (isSlug(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'slug' });\n });\n }\n\n numeric(message: MessageFn<{ value: string }> = () => _messages().string.numeric()): this {\n return this._addConstraint((value, _ctx) => {\n if (isNumeric(value as string)) return null;\n\n return fail(ErrorCode.invalid_string, resolveMessage(message, { value: value as string }), { format: 'numeric' });\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 * `toDescriptor()` will warn if preprocessors are present.\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 * `toDescriptor()` will warn if preprocessors are present.\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 * `toDescriptor()` will warn if preprocessors are present.\n */\n uppercase(): this {\n return this.preprocess((v: unknown) => (typeof v === 'string' ? v.toUpperCase() : v));\n }\n\n protected override _walk<R>(visitor: import('../core').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 protected override _equalsImpl(other: AnySchema): boolean {\n if (!(other instanceof StringSchema)) return false;\n\n return this._annotationsEqual(other);\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 type { MessageFn, SchemaDescriptor } from '../core';\n\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';\nimport { _dev } from '../messages';\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 import('../core').SchemaMode = 'sync'> extends Schema<\n string,\n Input,\n Mode\n> {\n protected override get _kind(): string {\n return 'string';\n }\n\n override checkAsync(\n this: StringSchema<Input, 'sync'>,\n fn: (value: string, ctx: import('../core').CheckContext) => Promise<import('../core').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 /**\n * Alias for `.nonEmpty()` — validates that the string is not empty.\n * Provided for discoverability alongside `ArraySchema.nonEmpty()`.\n */\n nonempty(message?: MessageFn<{ min: number; value: string }>): this {\n return this.nonEmpty(message);\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 _dev(\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: import('../core').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,4 +1,4 @@
1
- import type { AnySchema, MessageFn, SchemaDescriptor } from '../core';
1
+ import type { MessageFn, SchemaDescriptor } from '../core';
2
2
  import { Schema } from '../core';
3
3
  type UrlOptions = {
4
4
  message?: MessageFn<{
@@ -6,8 +6,9 @@ type UrlOptions = {
6
6
  }>;
7
7
  protocols?: readonly string[];
8
8
  };
9
- export declare class StringSchema<Input = string> extends Schema<string, Input> {
9
+ export declare class StringSchema<Input = string, Mode extends import('../core').SchemaMode = 'sync'> extends Schema<string, Input, Mode> {
10
10
  protected get _kind(): string;
11
+ checkAsync(this: StringSchema<Input, 'sync'>, fn: (value: string, ctx: import('../core').CheckContext) => Promise<import('../core').ValidateResult>): StringSchema<Input, 'async'>;
11
12
  constructor();
12
13
  min(length: number, message?: MessageFn<{
13
14
  min: number;
@@ -53,12 +54,6 @@ export declare class StringSchema<Input = string> extends Schema<string, Input>
53
54
  * (e.g. `/(a+)+$/`) are a ReDoS risk when validating untrusted input in server-side contexts.
54
55
  * Prefer well-tested, bounded patterns for user-facing validation.
55
56
  *
56
- * **`.equals()` note:** `.equals()` only compares descriptor-level annotations, never runtime
57
- * validator behavior. Chaining more than one `.regex()` collapses the descriptor `pattern` to
58
- * `null` (ambiguous), so two schemas with *different* pairs of regexes can compare equal even
59
- * though they accept different strings. This mirrors `.equals()`'s general limitation of
60
- * ignoring custom `.validate()`/`.refine()` logic — avoid relying on `.equals()` for schemas
61
- * with more than one `.regex()` constraint.
62
57
  */
63
58
  regex(pattern: RegExp, message?: MessageFn<{
64
59
  value: string;
@@ -133,22 +128,21 @@ export declare class StringSchema<Input = string> extends Schema<string, Input>
133
128
  coerce(): StringSchema<unknown>;
134
129
  /**
135
130
  * **Note:** `trim()` adds a preprocessor. Preprocessors are not serializable —
136
- * `toDescriptor()` will warn if preprocessors are present.
131
+ * `definition()` throws because preprocessors are not serializable.
137
132
  */
138
133
  trim(): this;
139
134
  /**
140
135
  * **Note:** `lowercase()` adds a preprocessor. Preprocessors are not serializable —
141
- * `toDescriptor()` will warn if preprocessors are present.
136
+ * `definition()` throws because preprocessors are not serializable.
142
137
  */
143
138
  lowercase(): this;
144
139
  /**
145
140
  * **Note:** `uppercase()` adds a preprocessor. Preprocessors are not serializable —
146
- * `toDescriptor()` will warn if preprocessors are present.
141
+ * `definition()` throws because preprocessors are not serializable.
147
142
  */
148
143
  uppercase(): this;
149
144
  protected _walk<R>(visitor: import('../core').SchemaWalker<R>): R | null;
150
145
  protected _toDescriptorImpl(): SchemaDescriptor;
151
- protected _equalsImpl(other: AnySchema): boolean;
152
146
  static coerce(): StringSchema<unknown>;
153
147
  }
154
148
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/schemas/string.ts"],"names":[],"mappings":"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"}
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 as r,_messages as i}from"../messages.js";import{Schema as a}from"../core.js";import{isBase64 as o,isBase64url as s,isCuid as c,isCuid2 as l,isDuration as u,isEmail as d,isEmoji as f,isHex as p,isHexColor as m,isIp as h,isIsoDate as g,isIsoDateTime as _,isJwt as v,isNanoid as y,isNumeric as b,isSemver as x,isSlug as S,isTime as C,isUlid as w,isUrl as T,isUuid as E}from"../formats.js";var D=class D extends a{get _kind(){return`string`}constructor(){super((n,r)=>typeof n==`string`?null:t(e.invalid_type,(r?.messages??i()).string.type()))}min(r,a=e=>i().string.min(e)){return this._addConstraint((i,o)=>i.length>=r?null:t(e.too_small,n(a,{min:r,value:i}),{min:r}),e=>{let t=e;return{...t,minLength:t.minLength===void 0?r:Math.max(t.minLength,r)}})}max(r,a=e=>i().string.max(e)){return this._addConstraint((i,o)=>i.length<=r?null:t(e.too_big,n(a,{max:r,value:i}),{max:r}),e=>{let t=e;return{...t,maxLength:t.maxLength===void 0?r:Math.min(t.maxLength,r)}})}length(r,a=e=>i().string.length(e)){return this._addConstraint((i,o)=>i.length===r?null:t(e.invalid_length,n(a,{exact:r,value:i}),{exact:r}),e=>({...e,maxLength:r,minLength:r}))}nonempty(e=()=>i().string.nonEmpty()){return this.nonEmpty(e)}nonEmpty(r=()=>i().string.nonEmpty()){return this._addConstraint((i,a)=>i.length>0?null:t(e.too_small,n(r,{min:1,value:i}),{min:1}),e=>{let t=e;return{...t,minLength:Math.max(t.minLength??0,1)}})}startsWith(r,a=e=>i().string.startsWith(e)){return this._addConstraint((i,o)=>i.startsWith(r)?null:t(e.invalid_string,n(a,{prefix:r,value:i}),{prefix:r}))}endsWith(r,a=e=>i().string.endsWith(e)){return this._addConstraint((i,o)=>i.endsWith(r)?null:t(e.invalid_string,n(a,{suffix:r,value:i}),{suffix:r}))}includes(r,a=e=>i().string.includes(e)){return this._addConstraint((i,o)=>i.includes(r)?null:t(e.invalid_string,n(a,{substr:r,value:i}),{includes:r}))}regex(a,o=e=>i().string.regex(e)){let s=new RegExp(a.source,a.flags.replace(/[gy]/g,``));return this._addConstraint((r,i)=>s.test(r)?null:t(e.invalid_string,n(o,{value:r}),{pattern:s.source}),e=>{let t=e;return t.pattern===null?t:t.pattern===void 0?{...t,pattern:s.source}:t.pattern===s.source?t:(r("[spell] Multiple .regex() constraints detected on a single string schema. JSON Schema `pattern` cannot represent multiple patterns and will be omitted from toJsonSchema() output."),{...t,pattern:null})})}email(r=()=>i().string.email()){return this._addConstraint((i,a)=>d(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`email`}),e=>({...e,format:`email`}))}url(r={}){let{message:a=()=>i().string.url(),protocols:o=[`http`,`https`]}=r;return this._addConstraint((r,i)=>T(r,o)?null:t(e.invalid_url,n(a,{value:r}),{format:`url`}),e=>({...e,format:`uri`}))}uuid(r=()=>i().string.uuid()){return this._addConstraint((i,a)=>E(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`uuid`}),e=>({...e,format:`uuid`}))}isoDate(r=()=>i().string.date()){return this._addConstraint((i,a)=>g(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`iso-date`}),e=>({...e,format:`date`}))}isoDateTime(r=()=>i().string.dateTime()){return this._addConstraint((i,a)=>_(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`iso-datetime`}),e=>({...e,format:`date-time`}))}ip(r=()=>i().string.ip()){return this._addConstraint((i,a)=>h(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`ip`}))}cuid(r=()=>i().string.cuid()){return this._addConstraint((i,a)=>c(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`cuid`}))}cuid2(r=()=>i().string.cuid2()){return this._addConstraint((i,a)=>l(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`cuid2`}))}ulid(r=()=>i().string.ulid()){return this._addConstraint((i,a)=>w(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`ulid`}))}nanoid(r,a=()=>i().string.nanoid()){return this._addConstraint((i,o)=>y(i,r)?null:t(e.invalid_string,n(a,{value:i}),{format:`nanoid`}))}base64(r=()=>i().string.base64()){return this._addConstraint((i,a)=>o(i)?null:t(e.invalid_base64,n(r,{value:i}),{format:`base64`}),e=>({...e,contentEncoding:`base64`}))}base64url(r=()=>i().string.base64url()){return this._addConstraint((i,a)=>s(i)?null:t(e.invalid_base64,n(r,{value:i}),{format:`base64url`}))}hex(r=()=>i().string.hex()){return this._addConstraint((i,a)=>p(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`hex`}))}hexColor(r=()=>i().string.hexColor()){return this._addConstraint((i,a)=>m(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`hex-color`}))}emoji(r=()=>i().string.emoji()){return this._addConstraint((i,a)=>f(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`emoji`}))}jwt(r=()=>i().string.jwt()){return this._addConstraint((i,a)=>v(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`jwt`}))}time(r=()=>i().string.time()){return this._addConstraint((i,a)=>C(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`time`}))}duration(r=()=>i().string.duration()){return this._addConstraint((i,a)=>u(i)?null:t(e.invalid_duration,n(r,{value:i}),{format:`duration`}),e=>({...e,format:`duration`}))}semver(r=()=>i().string.semver()){return this._addConstraint((i,a)=>x(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`semver`}))}slug(r=()=>i().string.slug()){return this._addConstraint((i,a)=>S(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`slug`}))}numeric(r=()=>i().string.numeric()){return this._addConstraint((i,a)=>b(i)?null:t(e.invalid_string,n(r,{value:i}),{format:`numeric`}))}coerce(){return D.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`}}_equalsImpl(e){return e instanceof D?this._annotationsEqual(e):!1}static coerce(){return new D().preprocess(e=>e==null?e:String(e))}};export{D as StringSchema};
1
+ import{ErrorCode as e}from"../types.js";import{fail as t,resolveMessage as n}from"../errors.js";import{_dev as r}from"../messages.js";import{Schema as i}from"../core.js";import{isBase64 as a,isBase64url as o,isCuid as s,isCuid2 as c,isDuration as l,isEmail as u,isEmoji as d,isHex as f,isHexColor as p,isIp as m,isIsoDate as h,isIsoDateTime as g,isJwt as _,isNanoid as v,isNumeric as y,isSemver as b,isSlug as x,isTime as S,isUlid as C,isUrl as w,isUuid as T}from"../formats.js";var E=class E extends i{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(e){return this.nonEmpty(e)}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(i,a){let o=new RegExp(i.source,i.flags.replace(/[gy]/g,``));return this._addConstraint((r,i)=>o.test(r)?null:t(e.invalid_string,n(a??i.messages.string.regex,{value:r}),{pattern:o.source}),e=>{let t=e;return t.pattern===null?t:t.pattern===void 0?{...t,pattern:o.source}:t.pattern===o.source?t:(r("[spell] Multiple .regex() constraints detected on a single string schema. JSON Schema `pattern` cannot represent multiple patterns and will be omitted from definition output."),{...t,pattern:null})})}email(r){return this._addConstraint((i,a)=>u(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)=>w(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)=>T(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)=>h(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)=>g(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)=>m(i)?null:t(e.invalid_string,n(r??a.messages.string.ip,{value:i}),{format:`ip`}))}cuid(r){return this._addConstraint((i,a)=>s(i)?null:t(e.invalid_string,n(r??a.messages.string.cuid,{value:i}),{format:`cuid`}))}cuid2(r){return this._addConstraint((i,a)=>c(i)?null:t(e.invalid_string,n(r??a.messages.string.cuid2,{value:i}),{format:`cuid2`}))}ulid(r){return this._addConstraint((i,a)=>C(i)?null:t(e.invalid_string,n(r??a.messages.string.ulid,{value:i}),{format:`ulid`}))}nanoid(r,i){return this._addConstraint((a,o)=>v(a,r)?null:t(e.invalid_string,n(i??o.messages.string.nanoid,{value:a}),{format:`nanoid`}))}base64(r){return this._addConstraint((i,o)=>a(i)?null:t(e.invalid_base64,n(r??o.messages.string.base64,{value:i}),{format:`base64`}),e=>({...e,contentEncoding:`base64`}))}base64url(r){return this._addConstraint((i,a)=>o(i)?null:t(e.invalid_base64,n(r??a.messages.string.base64url,{value:i}),{format:`base64url`}))}hex(r){return this._addConstraint((i,a)=>f(i)?null:t(e.invalid_string,n(r??a.messages.string.hex,{value:i}),{format:`hex`}))}hexColor(r){return this._addConstraint((i,a)=>p(i)?null:t(e.invalid_string,n(r??a.messages.string.hexColor,{value:i}),{format:`hex-color`}))}emoji(r){return this._addConstraint((i,a)=>d(i)?null:t(e.invalid_string,n(r??a.messages.string.emoji,{value:i}),{format:`emoji`}))}jwt(r){return this._addConstraint((i,a)=>_(i)?null:t(e.invalid_string,n(r??a.messages.string.jwt,{value:i}),{format:`jwt`}))}time(r){return this._addConstraint((i,a)=>S(i)?null:t(e.invalid_string,n(r??a.messages.string.time,{value:i}),{format:`time`}))}duration(r){return this._addConstraint((i,a)=>l(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)=>b(i)?null:t(e.invalid_string,n(r??a.messages.string.semver,{value:i}),{format:`semver`}))}slug(r){return this._addConstraint((i,a)=>x(i)?null:t(e.invalid_string,n(r??a.messages.string.slug,{value:i}),{format:`slug`}))}numeric(r){return this._addConstraint((i,a)=>y(i)?null:t(e.invalid_string,n(r??a.messages.string.numeric,{value:i}),{format:`numeric`}))}coerce(){return E.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 E().preprocess(e=>e==null?e:String(e))}};export{E as StringSchema};
2
2
  //# sourceMappingURL=string.js.map