@vielzeug/spell 26.11.9 → 26.11.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/README.md +1 -1
  2. package/dist/_dev.cjs.map +1 -1
  3. package/dist/_dev.js.map +1 -1
  4. package/dist/_object.cjs +2 -0
  5. package/dist/_object.cjs.map +1 -0
  6. package/dist/_object.d.ts +9 -0
  7. package/dist/_object.d.ts.map +1 -0
  8. package/dist/_object.js +2 -0
  9. package/dist/_object.js.map +1 -0
  10. package/dist/_parse.cjs +2 -0
  11. package/dist/_parse.cjs.map +1 -0
  12. package/dist/_parse.d.ts +38 -0
  13. package/dist/_parse.d.ts.map +1 -0
  14. package/dist/_parse.js +2 -0
  15. package/dist/_parse.js.map +1 -0
  16. package/dist/errors.cjs +2 -2
  17. package/dist/errors.cjs.map +1 -1
  18. package/dist/errors.d.ts +15 -26
  19. package/dist/errors.d.ts.map +1 -1
  20. package/dist/errors.js +2 -2
  21. package/dist/errors.js.map +1 -1
  22. package/dist/index.cjs +1 -1
  23. package/dist/index.d.ts +4 -4
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/json.cjs +2 -1
  27. package/dist/json.cjs.map +1 -0
  28. package/dist/json.d.ts +8 -1
  29. package/dist/json.d.ts.map +1 -1
  30. package/dist/json.js +2 -1
  31. package/dist/json.js.map +1 -0
  32. package/dist/messages.cjs +1 -1
  33. package/dist/messages.cjs.map +1 -1
  34. package/dist/messages.d.ts +7 -6
  35. package/dist/messages.d.ts.map +1 -1
  36. package/dist/messages.js +1 -1
  37. package/dist/messages.js.map +1 -1
  38. package/dist/predicates.cjs +2 -1
  39. package/dist/predicates.cjs.map +1 -0
  40. package/dist/predicates.d.ts +41 -2
  41. package/dist/predicates.d.ts.map +1 -1
  42. package/dist/predicates.js +2 -1
  43. package/dist/predicates.js.map +1 -0
  44. package/dist/s.cjs +1 -1
  45. package/dist/s.cjs.map +1 -1
  46. package/dist/s.d.ts +21 -22
  47. package/dist/s.d.ts.map +1 -1
  48. package/dist/s.js +1 -1
  49. package/dist/s.js.map +1 -1
  50. package/dist/schema.cjs +2 -0
  51. package/dist/schema.cjs.map +1 -0
  52. package/dist/schema.d.ts +93 -0
  53. package/dist/schema.d.ts.map +1 -0
  54. package/dist/schema.js +2 -0
  55. package/dist/schema.js.map +1 -0
  56. package/dist/schemas/array.cjs +1 -1
  57. package/dist/schemas/array.cjs.map +1 -1
  58. package/dist/schemas/array.d.ts +22 -32
  59. package/dist/schemas/array.d.ts.map +1 -1
  60. package/dist/schemas/array.js +1 -1
  61. package/dist/schemas/array.js.map +1 -1
  62. package/dist/schemas/bigint.cjs +1 -1
  63. package/dist/schemas/bigint.cjs.map +1 -1
  64. package/dist/schemas/bigint.d.ts +14 -18
  65. package/dist/schemas/bigint.d.ts.map +1 -1
  66. package/dist/schemas/bigint.js +1 -1
  67. package/dist/schemas/bigint.js.map +1 -1
  68. package/dist/schemas/date.cjs +1 -1
  69. package/dist/schemas/date.cjs.map +1 -1
  70. package/dist/schemas/date.d.ts +7 -6
  71. package/dist/schemas/date.d.ts.map +1 -1
  72. package/dist/schemas/date.js +1 -1
  73. package/dist/schemas/date.js.map +1 -1
  74. package/dist/schemas/discriminated-union.cjs +2 -0
  75. package/dist/schemas/discriminated-union.cjs.map +1 -0
  76. package/dist/schemas/discriminated-union.d.ts +39 -0
  77. package/dist/schemas/discriminated-union.d.ts.map +1 -0
  78. package/dist/schemas/discriminated-union.js +2 -0
  79. package/dist/schemas/discriminated-union.js.map +1 -0
  80. package/dist/schemas/intersect.cjs +1 -1
  81. package/dist/schemas/intersect.cjs.map +1 -1
  82. package/dist/schemas/intersect.d.ts +10 -9
  83. package/dist/schemas/intersect.d.ts.map +1 -1
  84. package/dist/schemas/intersect.js +1 -1
  85. package/dist/schemas/intersect.js.map +1 -1
  86. package/dist/schemas/lazy.cjs +1 -1
  87. package/dist/schemas/lazy.cjs.map +1 -1
  88. package/dist/schemas/lazy.d.ts +10 -10
  89. package/dist/schemas/lazy.d.ts.map +1 -1
  90. package/dist/schemas/lazy.js +1 -1
  91. package/dist/schemas/lazy.js.map +1 -1
  92. package/dist/schemas/map.cjs +1 -1
  93. package/dist/schemas/map.cjs.map +1 -1
  94. package/dist/schemas/map.d.ts +8 -7
  95. package/dist/schemas/map.d.ts.map +1 -1
  96. package/dist/schemas/map.js +1 -1
  97. package/dist/schemas/map.js.map +1 -1
  98. package/dist/schemas/number.cjs +1 -1
  99. package/dist/schemas/number.cjs.map +1 -1
  100. package/dist/schemas/number.d.ts +20 -27
  101. package/dist/schemas/number.d.ts.map +1 -1
  102. package/dist/schemas/number.js +1 -1
  103. package/dist/schemas/number.js.map +1 -1
  104. package/dist/schemas/object.cjs +1 -1
  105. package/dist/schemas/object.cjs.map +1 -1
  106. package/dist/schemas/object.d.ts +40 -88
  107. package/dist/schemas/object.d.ts.map +1 -1
  108. package/dist/schemas/object.js +1 -1
  109. package/dist/schemas/object.js.map +1 -1
  110. package/dist/schemas/primitives.cjs +2 -0
  111. package/dist/schemas/primitives.cjs.map +1 -0
  112. package/dist/schemas/primitives.d.ts +38 -0
  113. package/dist/schemas/primitives.d.ts.map +1 -0
  114. package/dist/schemas/primitives.js +2 -0
  115. package/dist/schemas/primitives.js.map +1 -0
  116. package/dist/schemas/record.cjs +1 -1
  117. package/dist/schemas/record.cjs.map +1 -1
  118. package/dist/schemas/record.d.ts +7 -8
  119. package/dist/schemas/record.d.ts.map +1 -1
  120. package/dist/schemas/record.js +1 -1
  121. package/dist/schemas/record.js.map +1 -1
  122. package/dist/schemas/set.cjs +1 -1
  123. package/dist/schemas/set.cjs.map +1 -1
  124. package/dist/schemas/set.d.ts +8 -7
  125. package/dist/schemas/set.d.ts.map +1 -1
  126. package/dist/schemas/set.js +1 -1
  127. package/dist/schemas/set.js.map +1 -1
  128. package/dist/schemas/string.cjs +1 -1
  129. package/dist/schemas/string.cjs.map +1 -1
  130. package/dist/schemas/string.d.ts +42 -98
  131. package/dist/schemas/string.d.ts.map +1 -1
  132. package/dist/schemas/string.js +1 -1
  133. package/dist/schemas/string.js.map +1 -1
  134. package/dist/schemas/tuple.cjs +1 -1
  135. package/dist/schemas/tuple.cjs.map +1 -1
  136. package/dist/schemas/tuple.d.ts +9 -9
  137. package/dist/schemas/tuple.d.ts.map +1 -1
  138. package/dist/schemas/tuple.js +1 -1
  139. package/dist/schemas/tuple.js.map +1 -1
  140. package/dist/schemas/union.cjs +1 -1
  141. package/dist/schemas/union.cjs.map +1 -1
  142. package/dist/schemas/union.d.ts +9 -7
  143. package/dist/schemas/union.d.ts.map +1 -1
  144. package/dist/schemas/union.js +1 -1
  145. package/dist/schemas/union.js.map +1 -1
  146. package/dist/spell.cjs +2 -2
  147. package/dist/spell.cjs.map +1 -1
  148. package/dist/spell.iife.js +2 -2
  149. package/dist/spell.iife.js.map +1 -1
  150. package/dist/spell.js +842 -1601
  151. package/dist/spell.js.map +1 -1
  152. package/dist/types.cjs +1 -1
  153. package/dist/types.cjs.map +1 -1
  154. package/dist/types.d.ts +151 -265
  155. package/dist/types.d.ts.map +1 -1
  156. package/dist/types.js +1 -1
  157. package/dist/types.js.map +1 -1
  158. package/package.json +2 -2
  159. package/dist/core.cjs +0 -2
  160. package/dist/core.cjs.map +0 -1
  161. package/dist/core.d.ts +0 -101
  162. package/dist/core.d.ts.map +0 -1
  163. package/dist/core.js +0 -2
  164. package/dist/core.js.map +0 -1
  165. package/dist/formats.cjs +0 -2
  166. package/dist/formats.cjs.map +0 -1
  167. package/dist/formats.d.ts +0 -41
  168. package/dist/formats.d.ts.map +0 -1
  169. package/dist/formats.js +0 -2
  170. package/dist/formats.js.map +0 -1
  171. package/dist/json-schema.cjs +0 -2
  172. package/dist/json-schema.cjs.map +0 -1
  173. package/dist/json-schema.d.ts +0 -5
  174. package/dist/json-schema.d.ts.map +0 -1
  175. package/dist/json-schema.js +0 -2
  176. package/dist/json-schema.js.map +0 -1
  177. package/dist/safe-object.cjs +0 -2
  178. package/dist/safe-object.cjs.map +0 -1
  179. package/dist/safe-object.d.ts +0 -6
  180. package/dist/safe-object.d.ts.map +0 -1
  181. package/dist/safe-object.js +0 -2
  182. package/dist/safe-object.js.map +0 -1
  183. package/dist/schemas/boolean.cjs +0 -2
  184. package/dist/schemas/boolean.cjs.map +0 -1
  185. package/dist/schemas/boolean.d.ts +0 -9
  186. package/dist/schemas/boolean.d.ts.map +0 -1
  187. package/dist/schemas/boolean.js +0 -2
  188. package/dist/schemas/boolean.js.map +0 -1
  189. package/dist/schemas/enum.cjs +0 -2
  190. package/dist/schemas/enum.cjs.map +0 -1
  191. package/dist/schemas/enum.d.ts +0 -12
  192. package/dist/schemas/enum.d.ts.map +0 -1
  193. package/dist/schemas/enum.js +0 -2
  194. package/dist/schemas/enum.js.map +0 -1
  195. package/dist/schemas/instanceof.cjs +0 -2
  196. package/dist/schemas/instanceof.cjs.map +0 -1
  197. package/dist/schemas/instanceof.d.ts +0 -9
  198. package/dist/schemas/instanceof.d.ts.map +0 -1
  199. package/dist/schemas/instanceof.js +0 -2
  200. package/dist/schemas/instanceof.js.map +0 -1
  201. package/dist/schemas/literal.cjs +0 -2
  202. package/dist/schemas/literal.cjs.map +0 -1
  203. package/dist/schemas/literal.d.ts +0 -9
  204. package/dist/schemas/literal.d.ts.map +0 -1
  205. package/dist/schemas/literal.js +0 -2
  206. package/dist/schemas/literal.js.map +0 -1
  207. package/dist/schemas/never.cjs +0 -2
  208. package/dist/schemas/never.cjs.map +0 -1
  209. package/dist/schemas/never.d.ts +0 -8
  210. package/dist/schemas/never.d.ts.map +0 -1
  211. package/dist/schemas/never.js +0 -2
  212. package/dist/schemas/never.js.map +0 -1
  213. package/dist/schemas/raw-or.cjs +0 -2
  214. package/dist/schemas/raw-or.cjs.map +0 -1
  215. package/dist/schemas/raw-or.d.ts +0 -17
  216. package/dist/schemas/raw-or.d.ts.map +0 -1
  217. package/dist/schemas/raw-or.js +0 -2
  218. package/dist/schemas/raw-or.js.map +0 -1
  219. package/dist/schemas/variant.cjs +0 -2
  220. package/dist/schemas/variant.cjs.map +0 -1
  221. package/dist/schemas/variant.d.ts +0 -37
  222. package/dist/schemas/variant.d.ts.map +0 -1
  223. package/dist/schemas/variant.js +0 -2
  224. package/dist/schemas/variant.js.map +0 -1
  225. package/dist/tolerate.cjs +0 -2
  226. package/dist/tolerate.cjs.map +0 -1
  227. package/dist/tolerate.d.ts +0 -10
  228. package/dist/tolerate.d.ts.map +0 -1
  229. package/dist/tolerate.js +0 -2
  230. package/dist/tolerate.js.map +0 -1
  231. package/dist/validators.cjs +0 -2
  232. package/dist/validators.cjs.map +0 -1
  233. package/dist/validators.d.ts +0 -20
  234. package/dist/validators.d.ts.map +0 -1
  235. package/dist/validators.js +0 -2
  236. package/dist/validators.js.map +0 -1
package/dist/types.js CHANGED
@@ -1,2 +1,2 @@
1
- var e={custom:`custom`,invalid_base64:`invalid_base64`,invalid_date:`invalid_date`,invalid_duration:`invalid_duration`,invalid_enum:`invalid_enum`,invalid_finite:`invalid_finite`,invalid_integer:`invalid_integer`,invalid_keys:`invalid_keys`,invalid_length:`invalid_length`,invalid_literal:`invalid_literal`,invalid_multiple_of:`invalid_multiple_of`,invalid_safe:`invalid_safe`,invalid_string:`invalid_string`,invalid_type:`invalid_type`,invalid_union:`invalid_union`,invalid_unique:`invalid_unique`,invalid_url:`invalid_url`,invalid_variant:`invalid_variant`,too_big:`too_big`,too_small:`too_small`};export{e as ErrorCode};
1
+ var e={custom:`custom`,invalid_date:`invalid_date`,invalid_discriminator:`invalid_discriminator`,invalid_enum:`invalid_enum`,invalid_finite:`invalid_finite`,invalid_format:`invalid_format`,invalid_integer:`invalid_integer`,invalid_keys:`invalid_keys`,invalid_length:`invalid_length`,invalid_literal:`invalid_literal`,invalid_multiple_of:`invalid_multiple_of`,invalid_safe:`invalid_safe`,invalid_type:`invalid_type`,invalid_union:`invalid_union`,invalid_unique:`invalid_unique`,too_big:`too_big`,too_small:`too_small`};export{e as ErrorCode};
2
2
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["ErrorCode"],"sources":["../src/types.ts"],"sourcesContent":["/* -------------------- Error Codes -------------------- */\n\nexport const ErrorCode = {\n custom: 'custom',\n invalid_base64: 'invalid_base64',\n invalid_date: 'invalid_date',\n invalid_duration: 'invalid_duration',\n invalid_enum: 'invalid_enum',\n invalid_finite: 'invalid_finite',\n invalid_integer: 'invalid_integer',\n invalid_keys: 'invalid_keys',\n invalid_length: 'invalid_length',\n invalid_literal: 'invalid_literal',\n invalid_multiple_of: 'invalid_multiple_of',\n invalid_safe: 'invalid_safe',\n invalid_string: 'invalid_string',\n invalid_type: 'invalid_type',\n invalid_union: 'invalid_union',\n invalid_unique: 'invalid_unique',\n invalid_url: 'invalid_url',\n invalid_variant: 'invalid_variant',\n too_big: 'too_big',\n too_small: 'too_small',\n} as const;\n\nexport type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];\n\n/* -------------------- Messages -------------------- */\n\n/**\n * A validation message: either a static string or a function that receives context and returns a string.\n * **Note:** Static string values are used verbatim with no interpolation. Use the function form\n * for context-dependent messages (e.g. `(ctx) => \\`Must be at least ${ctx.min}\\``).\n */\nexport type MessageFn<Ctx extends Record<string, unknown> = Record<string, unknown>> = string | ((ctx: Ctx) => string);\n\n/* -------------------- JSON Schema -------------------- */\n\n/** Plain JSON Schema object (targeting JSON Schema 2020-12). */\nexport type JsonSchema = Record<string, unknown>;\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly '~standard': StandardSchemaV1.Props<Input, Output>;\n}\n\nexport declare namespace StandardSchemaV1 {\n interface Props<Input = unknown, Output = Input> {\n readonly types?: Types<Input, Output> | undefined;\n readonly validate: (value: unknown, options?: Options | undefined) => Result<Output> | Promise<Result<Output>>;\n readonly vendor: string;\n readonly version: 1;\n }\n\n type Result<Output> = { readonly issues: readonly Issue[] } | { readonly issues?: undefined; readonly value: Output };\n\n interface Options {\n readonly libraryOptions?: Record<string, unknown> | undefined;\n }\n\n interface Issue {\n readonly message: string;\n readonly path?: readonly (PropertyKey | PathSegment)[] | undefined;\n }\n\n interface PathSegment {\n readonly key: PropertyKey;\n }\n\n interface Types<Input = unknown, Output = Input> {\n readonly input: Input;\n readonly output: Output;\n }\n\n type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema['~standard']['types']>['input'];\n type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema['~standard']['types']>['output'];\n}\n\n/* -------------------- Issues -------------------- */\n\n/**\n * A typed discriminated union of all issues emitted by built-in validators.\n *\n * Narrowing on `code` gives precise access to `params`:\n * ```ts\n * if (error.code === 'too_small') {\n * const min = error.params.min; // number | bigint | Date\n * }\n * ```\n */\nexport type Issue =\n | { code: 'custom'; message: string; params?: Record<string, unknown>; path: (string | number)[] }\n | { code: 'invalid_base64'; message: string; params: { format: string }; path: (string | number)[] }\n | { code: 'invalid_date'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_duration'; message: string; params: { format: string }; path: (string | number)[] }\n | { code: 'invalid_enum'; message: string; params: { values: readonly unknown[] }; path: (string | number)[] }\n | { code: 'invalid_finite'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_integer'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_keys'; message: string; params: { keys: string[] }; path: (string | number)[] }\n | { code: 'invalid_length'; message: string; params: { exact: number }; path: (string | number)[] }\n | { code: 'invalid_literal'; message: string; params: { expected: unknown }; path: (string | number)[] }\n | { code: 'invalid_multiple_of'; message: string; params: { step: number | bigint }; path: (string | number)[] }\n | { code: 'invalid_safe'; message: string; params?: undefined; path: (string | number)[] }\n | {\n code: 'invalid_string';\n message: string;\n params: { format?: string; includes?: string; pattern?: string; prefix?: string; suffix?: string };\n path: (string | number)[];\n }\n | { code: 'invalid_type'; message: string; params?: undefined; path: (string | number)[] }\n | { code: 'invalid_union'; message: string; params: { errors: Issue[][] }; path: (string | number)[] }\n | { code: 'invalid_unique'; message: string; params: { unique: true }; path: (string | number)[] }\n | { code: 'invalid_url'; message: string; params: { format: string }; path: (string | number)[] }\n | {\n code: 'invalid_variant';\n message: string;\n params: { discriminator: string; expected: string[] };\n path: (string | number)[];\n }\n | {\n code: 'too_big';\n message: string;\n params: { exclusive?: boolean; max: number | bigint | Date };\n path: (string | number)[];\n }\n | {\n code: 'too_small';\n message: string;\n params: { exclusive?: boolean; min: number | bigint | Date };\n path: (string | number)[];\n }\n | { code: string & {}; message: string; params?: Record<string, unknown>; path: (string | number)[] };\n\n/** ParseContext carries the active message set through the parse pipeline. */\nexport type ParseContext = {\n messages: import('./messages').Messages;\n};\n\n/**\n * Validator function. Receives the value after type-checking and the active ParseContext.\n * Returns an Issue array on failure, null on success, or a Promise for async validators.\n */\nexport type ValidateFn = (value: unknown, ctx?: ParseContext) => Issue[] | null | Promise<Issue[] | null>;\n\nexport type CheckContext = {\n addIssue: (issue: {\n code: string;\n message: string;\n params?: Record<string, unknown>;\n path?: (string | number)[];\n }) => void;\n};\n\n/**\n * Return type of a `check()` callback.\n * - `string`: validation failed; the string becomes the error message.\n * - `false`: validation failed with no message (use `addIssue` for a message).\n * - `true` / `null` / `void`: validation passed.\n *\n * The shorthand `condition || 'message'` works naturally:\n * ```ts\n * s.string().check((value) => value.length > 0 || 'Cannot be empty')\n * ```\n */\nexport type ValidateResult = boolean | null | undefined | string;\n\n/** Re-exported from errors for convenience: defined there. */\nexport type { FlatError, FlatErrorFirst } from './errors';\n\ntype BaseDescriptor = {\n description?: string;\n isNullable?: boolean;\n isOptional?: boolean;\n};\n\nexport type SchemaDescriptor = BaseDescriptor &\n (\n | { kind: 'unknown' | 'never' | 'boolean' | 'bigint' | 'date' | 'lazy' }\n | { className: string; kind: 'instanceof' }\n | {\n contentEncoding?: string;\n format?: string;\n kind: 'string';\n maxLength?: number;\n minLength?: number;\n pattern?: string | null;\n }\n | {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n kind: 'number';\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n }\n | { kind: 'literal'; value: string | number | boolean | null | undefined }\n | { kind: 'enum'; values: readonly (string | number)[] }\n | { items: SchemaDescriptor; kind: 'array'; maxItems?: number; minItems?: number }\n | { items: SchemaDescriptor[]; kind: 'tuple'; rest: SchemaDescriptor | null }\n | { fields: Record<string, SchemaDescriptor>; kind: 'object'; strict: boolean }\n | { key: SchemaDescriptor; kind: 'record'; value: SchemaDescriptor }\n | { items: SchemaDescriptor; kind: 'set' }\n | { key: SchemaDescriptor; kind: 'map'; value: SchemaDescriptor }\n | { branches: SchemaDescriptor[]; kind: 'union' | 'intersect' }\n | { branches: Record<string, SchemaDescriptor>; discriminator: string; kind: 'variant' }\n | { from: SchemaDescriptor; kind: 'pipe'; to: SchemaDescriptor }\n );\n\n/* -------------------- ParseResult (forward-references SpellValidationError) -------------------- */\n\nimport type { Schema } from './core';\n// Import only the type to avoid circular dependencies\nimport type { SpellValidationError } from './errors';\n\nexport type ParseResult<T> = { data: T; success: true } | { error: SpellValidationError; success: false };\n\n/* -------------------- Schema execution mode / Infer (forward-references Schema) -------------------- */\n\n/** Structural marker for a schema's input type. Emitted so public types can key on it. */\nexport const schemaInput = Symbol('spell.schemaInput');\n/** Structural marker for a schema's output type. Emitted so public types can key on it. */\nexport const schemaOutput = Symbol('spell.schemaOutput');\nexport declare const schemaAcceptsMissing: unique symbol;\nexport type AcceptsMissing = { readonly [schemaAcceptsMissing]: true };\n\n/** A structural schema surface accepted by composition helpers. */\nexport type SchemaSurface<Output = unknown, Input = Output> = {\n /** @internal */\n _parseFullAsync(value: unknown, ctx?: ParseContext): Promise<{ data: unknown; issues: Issue[] }>;\n /** @internal */\n _parseFullSync(value: unknown, ctx?: ParseContext): { data: unknown; issues: Issue[] };\n safeParseAsync(value: unknown, ctx?: ParseContext): Promise<ParseResult<Output>>;\n definition(): SchemaDescriptor;\n isOptional: boolean;\n optional(): SchemaSurface<Output | undefined, Input | undefined>;\n required(): SchemaSurface<Exclude<Output, undefined>, Exclude<Input, undefined>>;\n readonly [schemaInput]: Input;\n readonly [schemaOutput]: Output;\n};\n\nexport type AnySchema<Output = unknown, Input = Output> = SchemaSurface<Output, Input>;\n\n/**\n * The synchronous parse capability every schema carries. UI adapters that accept\n * `AnySchema` cannot call `safeParse` on it (the surface type omits it); type adapter\n * parameters against this instead.\n *\n * The shape is structural, so a schema with async checks is assignable to it; calling\n * `safeParse` on one returns a failed `ParseResult` (\"parse() cannot evaluate async\n * checks\"). Use `safeParseAsync` when async checks may be present.\n */\nexport type SyncParsable<T = unknown> = { safeParse(value: unknown): ParseResult<T> };\n\n/**\n * An issue path in either shape: spell-native `(string | number)[]` or the\n * Standard Schema `(PropertyKey | { key })[]` format.\n */\nexport type IssuePathSegment = PropertyKey | { readonly key: PropertyKey };\nexport type IssuePath = readonly IssuePathSegment[];\n\nexport type InferOutput<T> =\n T extends Schema<infer Output, unknown>\n ? Output\n : T extends { readonly [schemaOutput]: infer Output }\n ? Output\n : never;\ntype RawInferInput<T> = T extends { readonly [schemaInput]: infer Input } ? Input : unknown;\nexport type InferInput<T> = T extends AcceptsMissing ? RawInferInput<T> | undefined : RawInferInput<T>;\nexport type Infer<T> = InferOutput<T>;\n\n/** Re-exported for convenience: defined in messages.ts. */\nexport type { Messages } from './messages';\n"],"mappings":"AAEA,IAAaA,EAAY,CACvB,OAAQ,SACR,eAAgB,iBAChB,aAAc,eACd,iBAAkB,mBAClB,aAAc,eACd,eAAgB,iBAChB,gBAAiB,kBACjB,aAAc,eACd,eAAgB,iBAChB,gBAAiB,kBACjB,oBAAqB,sBACrB,aAAc,eACd,eAAgB,iBAChB,aAAc,eACd,cAAe,gBACf,eAAgB,iBAChB,YAAa,cACb,gBAAiB,kBACjB,QAAS,UACT,UAAW,WACb,E"}
1
+ {"version":3,"file":"types.js","names":["ErrorCode"],"sources":["../src/types.ts"],"sourcesContent":["import type { SpellValidationError } from './errors';\nimport type { Messages } from './messages';\nimport type { Schema } from './schema';\n\n/* -------------------- Error codes -------------------- */\n\nexport const ErrorCode = {\n custom: 'custom',\n invalid_date: 'invalid_date',\n invalid_discriminator: 'invalid_discriminator',\n invalid_enum: 'invalid_enum',\n invalid_finite: 'invalid_finite',\n invalid_format: 'invalid_format',\n invalid_integer: 'invalid_integer',\n invalid_keys: 'invalid_keys',\n invalid_length: 'invalid_length',\n invalid_literal: 'invalid_literal',\n invalid_multiple_of: 'invalid_multiple_of',\n invalid_safe: 'invalid_safe',\n invalid_type: 'invalid_type',\n invalid_union: 'invalid_union',\n invalid_unique: 'invalid_unique',\n too_big: 'too_big',\n too_small: 'too_small',\n} as const;\n\nexport type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];\n\n/* -------------------- Issues -------------------- */\n\ntype IssueOf<C extends string, P> = { code: C; message: string; path: (string | number)[] } & (undefined extends P\n ? { params?: P }\n : { params: P });\n\n/**\n * A typed discriminated union of all issues emitted by built-in validators.\n * Narrowing on `code` gives precise access to `params`:\n *\n * ```ts\n * if (issue.code === 'too_small') issue.params.min; // number | bigint | Date\n * ```\n */\nexport type Issue =\n | IssueOf<'custom', Record<string, unknown> | undefined>\n | IssueOf<'invalid_date', undefined>\n | IssueOf<'invalid_discriminator', { discriminator: string; expected: string[] }>\n | IssueOf<'invalid_enum', { values: readonly unknown[] }>\n | IssueOf<'invalid_finite', undefined>\n | IssueOf<'invalid_format', { format: string; includes?: string; pattern?: string; prefix?: string; suffix?: string }>\n | IssueOf<'invalid_integer', undefined>\n | IssueOf<'invalid_keys', { keys: string[] }>\n | IssueOf<'invalid_length', { exact: number }>\n | IssueOf<'invalid_literal', { expected: unknown }>\n | IssueOf<'invalid_multiple_of', { step: number | bigint }>\n | IssueOf<'invalid_safe', undefined>\n | IssueOf<'invalid_type', undefined>\n | IssueOf<'invalid_union', { errors: Issue[][] }>\n | IssueOf<'invalid_unique', undefined>\n | IssueOf<'too_big', { exclusive?: boolean; max: number | bigint | Date }>\n | IssueOf<'too_small', { exclusive?: boolean; min: number | bigint | Date }>\n | { code: string & {}; message: string; params?: Record<string, unknown>; path: (string | number)[] };\n\n/**\n * An issue path in either shape: spell-native `(string | number)[]` or the\n * Standard Schema `(PropertyKey | { key })[]` format.\n */\nexport type IssuePathSegment = PropertyKey | { readonly key: PropertyKey };\nexport type IssuePath = readonly IssuePathSegment[];\n\n/* -------------------- Messages and contexts -------------------- */\n\n/**\n * A validation message: a static string used verbatim, or a function of the constraint context\n * (e.g. `({ min }) => \\`At least ${min}\\``).\n */\nexport type MessageFn<Ctx extends Record<string, unknown> = Record<string, unknown>> = string | ((ctx: Ctx) => string);\n\n/** Carries the active message set through a parse. Create one with `createParseContext()`. */\nexport type ParseContext = { readonly messages: Messages };\n\nexport type CheckContext = {\n addIssue: (issue: {\n code: string;\n message: string;\n params?: Record<string, unknown>;\n path?: (string | number)[];\n }) => void;\n};\n\n/**\n * Return type of a `check()` callback.\n * - `string`: validation failed; the string becomes the error message.\n * - `false`: validation failed (with the default message unless `addIssue` reported one).\n * - `true` / `null` / `undefined`: validation passed.\n *\n * ```ts\n * s.string().check((value) => value.length > 0 || 'Cannot be empty');\n * ```\n */\nexport type ValidateResult = boolean | null | undefined | string;\n\nexport type ParseResult<T> = { data: T; success: true } | { error: SpellValidationError; success: false };\n\n/* -------------------- Definitions -------------------- */\n\n/** A regular expression captured as data. */\nexport type PatternDescriptor = { readonly flags: string; readonly source: string };\n\ntype BaseDescriptor = {\n description?: string;\n isNullable?: true;\n isOptional?: true;\n};\n\ntype NumericBounds<N> = {\n exclusiveMaximum?: N;\n exclusiveMinimum?: N;\n maximum?: N;\n minimum?: N;\n multipleOf?: N;\n};\n\n/** Declarative, frozen description of a schema returned by `schema.definition()`. */\nexport type SchemaDescriptor = BaseDescriptor &\n (\n | { kind: 'unknown' | 'never' | 'boolean' | 'lazy' }\n | ({ kind: 'bigint' } & NumericBounds<bigint>)\n | ({ finite?: true; integer?: true; kind: 'number' } & NumericBounds<number>)\n | {\n formats?: readonly string[];\n kind: 'string';\n maxLength?: number;\n minLength?: number;\n patterns?: readonly PatternDescriptor[];\n }\n | { kind: 'date'; maximum?: string; minimum?: string }\n | { className: string; kind: 'instanceof' }\n | { kind: 'literal'; value: string | number | boolean | null | undefined }\n | { kind: 'enum'; values: readonly (string | number)[] }\n | { items: SchemaDescriptor; kind: 'array'; maxItems?: number; minItems?: number; uniqueItems?: true }\n | { items: readonly SchemaDescriptor[]; kind: 'tuple'; rest: SchemaDescriptor | null }\n | {\n fields: Readonly<Record<string, SchemaDescriptor>>;\n kind: 'object';\n strict: boolean;\n tolerated?: readonly string[];\n }\n | { key: SchemaDescriptor; kind: 'record'; value: SchemaDescriptor }\n | { items: SchemaDescriptor; kind: 'set'; maxSize?: number; minSize?: number }\n | { key: SchemaDescriptor; kind: 'map'; maxSize?: number; minSize?: number; value: SchemaDescriptor }\n | { branches: readonly SchemaDescriptor[]; kind: 'union' | 'intersect' }\n | { branches: Readonly<Record<string, SchemaDescriptor>>; discriminator: string; kind: 'discriminatedUnion' }\n | { from: SchemaDescriptor; kind: 'pipe'; to: SchemaDescriptor }\n );\n\nexport type SchemaKind = SchemaDescriptor['kind'];\n\n/* -------------------- Standard Schema v1 -------------------- */\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly '~standard': StandardSchemaV1.Props<Input, Output>;\n}\n\nexport declare namespace StandardSchemaV1 {\n interface Props<Input = unknown, Output = Input> {\n readonly types?: Types<Input, Output> | undefined;\n readonly validate: (value: unknown, options?: Options | undefined) => Result<Output> | Promise<Result<Output>>;\n readonly vendor: string;\n readonly version: 1;\n }\n\n type Result<Output> = { readonly issues: readonly Issue[] } | { readonly issues?: undefined; readonly value: Output };\n\n interface Options {\n readonly libraryOptions?: Record<string, unknown> | undefined;\n }\n\n interface Issue {\n readonly message: string;\n readonly path?: readonly (PropertyKey | PathSegment)[] | undefined;\n }\n\n interface PathSegment {\n readonly key: PropertyKey;\n }\n\n interface Types<Input = unknown, Output = Input> {\n readonly input: Input;\n readonly output: Output;\n }\n\n type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema['~standard']['types']>['input'];\n type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema['~standard']['types']>['output'];\n}\n\n/* -------------------- Inference -------------------- */\n\n/** Structural marker for a schema's input type. */\nexport const schemaInput = Symbol('spell.schemaInput');\n/** Structural marker for a schema's output type. */\nexport const schemaOutput = Symbol('spell.schemaOutput');\nexport declare const schemaAcceptsMissing: unique symbol;\n/** Marks a schema whose input may be missing (`optional()`, `nullish()`, `default()`, `catch()`). */\nexport type AcceptsMissing = { readonly [schemaAcceptsMissing]: true };\n\n/** Any schema. Use as a generic constraint: `<T extends AnySchema>`. */\nexport type AnySchema = Schema<unknown, unknown>;\n\nexport type InferOutput<T> = T extends { readonly [schemaOutput]: infer Output } ? Output : never;\ntype RawInferInput<T> = T extends { readonly [schemaInput]: infer Input } ? Input : unknown;\nexport type InferInput<T> = T extends AcceptsMissing ? RawInferInput<T> | undefined : RawInferInput<T>;\nexport type Infer<T> = InferOutput<T>;\n"],"mappings":"AAMA,IAAaA,EAAY,CACvB,OAAQ,SACR,aAAc,eACd,sBAAuB,wBACvB,aAAc,eACd,eAAgB,iBAChB,eAAgB,iBAChB,gBAAiB,kBACjB,aAAc,eACd,eAAgB,iBAChB,gBAAiB,kBACjB,oBAAqB,sBACrB,aAAc,eACd,aAAc,eACd,cAAe,gBACf,eAAgB,iBAChB,QAAS,UACT,UAAW,WACb,E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vielzeug/spell",
3
- "version": "26.11.9",
3
+ "version": "26.11.10",
4
4
  "description": "Zero-dependency schema validation with Standard Schema interoperability",
5
5
  "repository": {
6
6
  "type": "git",
@@ -62,7 +62,7 @@
62
62
  "test:types": "tsc -p tsconfig.types.json"
63
63
  },
64
64
  "dependencies": {
65
- "@vielzeug/arsenal": "26.11.9"
65
+ "@vielzeug/arsenal": "26.11.10"
66
66
  },
67
67
  "devDependencies": {
68
68
  "@types/node": "^26.6.6",
package/dist/core.cjs DELETED
@@ -1,2 +0,0 @@
1
- const e=require("./errors.cjs"),t=require("./messages.cjs"),n=require("./safe-object.cjs"),r=require("./types.cjs");let i=require("@vielzeug/arsenal");function a(e){if(typeof e!=`object`||!e||Object.isFrozen(e))return e;for(let t of Object.values(e))a(t);return Object.freeze(e)}function o(e){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(e=>o(e));if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map){let t=new Map;for(let[n,r]of e.entries())t.set(o(n),o(r));return t}if(e instanceof Set)return new Set([...e.values()].map(e=>o(e)));if((0,i.isPlainObject)(e)){let t={};for(let[r,i]of Object.entries(e))n.defineOwnProperty(t,r,o(i));return t}return e}function s(){return{hasAsyncChecks:!1,hasRuntimeChecks:!1,isNullable:!1,isOptional:!1,postprocessors:[],preprocessors:[],validators:[]}}function c(e){return{catch:e.catch,defaultValue:e.defaultValue,description:e.description,hasAsyncChecks:e.hasAsyncChecks,hasRuntimeChecks:e.hasRuntimeChecks,isNullable:e.isNullable,isOptional:e.isOptional,postprocessors:[...e.postprocessors],preprocessors:[...e.preprocessors],validators:[...e.validators]}}function l(e){return e?{messages:e}:t.createParseContext()}function u(e,t,n){let i=[...t];return typeof e==`string`?i.push({code:r.ErrorCode.custom,message:e,path:[]}):e===!1&&i.length===0&&i.push({code:r.ErrorCode.custom,message:n.messages.check.default(),path:[]}),i.length?i:null}var d=class{state;_annotations={};_typeValidator=null;get"~standard"(){return{validate:async e=>{let t=await this.safeParseAsync(e);return t.success?{value:t.data}:{issues:t.error.issues.map(({message:e,path:t})=>({message:e,path:t}))}},vendor:`vielzeug`,version:1}}constructor(e){this.state=s(),this._typeValidator=e??null}parse(t,n){if(this.state.hasAsyncChecks)throw new e.SpellValidationError([{code:r.ErrorCode.custom,message:`parse() cannot evaluate async checks. Use parseAsync().`,path:[]}]);let i=n??l();return this._withCatch(()=>{let n=this._prepareInput(t);if(n.skip)return n.value;let r=this._parse(n.value,i),a=r.typeOk?this._runValidatorsSync(r.data,i):[],o=[...r.issues,...a];if(o.length)throw new e.SpellValidationError(o);return this._runPostprocessors(r.data)})}safeParse(t,n){try{return{data:this.parse(t,n),success:!0}}catch(t){if(t instanceof e.SpellValidationError)return{error:t,success:!1};throw t}}async parseAsync(t,n){let r=n??l();return this._withCatchAsync(async()=>{let n=this._prepareInput(t);if(n.skip)return n.value;let i=await this._parseAsync(n.value,r),a=i.typeOk?await this._runValidatorsAsync(i.data,r):[],o=[...i.issues,...a];if(o.length)throw new e.SpellValidationError(o);return this._runPostprocessors(i.data)})}async safeParseAsync(t,n){try{return{data:await this.parseAsync(t,n),success:!0}}catch(t){if(t instanceof e.SpellValidationError)return{error:t,success:!1};throw t}}_parseFullSync(t,n){if(this.state.hasAsyncChecks)throw new e.SpellValidationError([{code:r.ErrorCode.custom,message:`Sync parsing cannot evaluate async checks. Use parseAsync().`,path:[]}]);let i=n??l(),a=this._prepareInput(t);if(a.skip)return{data:a.value,issues:[]};let o=this._parse(a.value,i),s=o.typeOk?this._runValidatorsSync(o.data,i):[],c=[...o.issues,...s];return c.length>0?this.state.catch?{data:this.state.catch(),issues:[]}:{data:o.data,issues:c}:{data:this._runPostprocessors(o.data),issues:[]}}async _parseFullAsync(e,t){let n=t??l(),r=this._prepareInput(e);if(r.skip)return{data:r.value,issues:[]};let i=await this._parseAsync(r.value,n),a=i.typeOk?await this._runValidatorsAsync(i.data,n):[],o=[...i.issues,...a];return o.length>0?this.state.catch?{data:this.state.catch(),issues:[]}:{data:i.data,issues:o}:{data:this._runPostprocessors(i.data),issues:[]}}check(e){return this._addCheck(e,!1)}checkAsync(e){return this._addCheck(e,!0)}_addCheck(e,t){let n=this._addConstraint((t,n)=>{let r=[],i=e(t,{addIssue:e=>r.push({...e,path:e.path??[]})});return i instanceof Promise?i.then(e=>u(e,r,n)):u(i,r,n)});return n.state.hasRuntimeChecks=!0,t&&(n.state.hasAsyncChecks=!0),n}optional(){let e=this._clone();return e.state.isOptional=!0,e}nullable(){let e=this._clone();return e.state.isNullable=!0,e}nullish(){let e=this._clone();return e.state.isOptional=!0,e.state.isNullable=!0,e}required(){let e=this._clone();return e.state.isOptional=!1,e}default(e){let t=this._clone();return t.state.defaultValue=typeof e==`function`?e:()=>o(e),t}catch(e){let t=this._clone();return t.state.catch=typeof e==`function`?e:()=>o(e),t}transform(e){let t=this._clone();return t.state.postprocessors.push(e),t}preprocess(e){let t=this._clone();return t.state.preprocessors.push(e),t}pipe(e){return new f(this,e)}label(e){let t=this._clone();return t.state.description=e,t}definition(){if(this.state.catch||this.state.defaultValue||this.state.postprocessors.length>0||this.state.preprocessors.length>0||this.state.hasRuntimeChecks)throw new e.SpellDefinitionError(`Schemas with checks, transforms, defaults, catches, or preprocessors have no declarative definition.`);return a(this._toDescriptorImpl())}get description(){return this.state.description}get isOptional(){return this.state.isOptional}get isNullable(){return this.state.isNullable}is(e){return this.safeParse(e).success}assert(t,n){let r=this._parseFullSync(t);if(r.issues.length===0)return;let i=n?r.issues.map(e=>({...e,message:e.path.length===0?`${n}: ${e.message}`:e.message})):r.issues;throw new e.SpellValidationError(i)}get kind(){return this._kind}get _kind(){return`unknown`}_describeBase(){return{...this.state.description===void 0?{}:{description:this.state.description},...this.state.isNullable?{isNullable:!0}:{},...this.state.isOptional?{isOptional:!0}:{}}}_addConstraint(e,t){let n=this._clone();return n.state.validators.push(e),t&&(n._annotations=t({...n._annotations})),n}_construct(e){let t=Object.assign(Object.create(Object.getPrototypeOf(this)),this,{state:e});return t._annotations={...this._annotations},t}_clone(){return this._construct(c(this.state))}_copyStateTo(e){return e.state=c(this.state),e}_toDescriptorImpl(){return{...this._describeBase(),kind:`unknown`}}_withCatch(t){if(!this.state.catch)return t();try{return t()}catch(t){if(t instanceof e.SpellValidationError)return this.state.catch();throw t}}async _withCatchAsync(t){if(!this.state.catch)return t();try{return await t()}catch(t){if(t instanceof e.SpellValidationError)return this.state.catch();throw t}}_prepareInput(e){let t=this._runPreprocessors(e),n=t===void 0&&this.state.defaultValue?this.state.defaultValue():t;return this.state.isOptional&&n===void 0||this.state.isNullable&&n===null?{skip:!0,value:n}:{skip:!1,value:n}}_runPreprocessors(e){let t=e;for(let e of this.state.preprocessors)t=e(t);return t}_runPostprocessors(e){let t=e;for(let e of this.state.postprocessors)t=e(t);return t}_runValidatorsSync(t,n){if(this._typeValidator){let i=this._typeValidator(t,n);if(i instanceof Promise)throw new e.SpellValidationError([{code:r.ErrorCode.custom,message:`Type validator returned a Promise. Use parseAsync() for async validation.`,path:[]}]);if(i&&i.length>0)return i}let i=[];for(let a of this.state.validators){let o=a(t,n);if(o instanceof Promise)throw new e.SpellValidationError([{code:r.ErrorCode.custom,message:`Sync parsing received an async check. Use checkAsync() and parseAsync().`,path:[]}]);o&&i.push(...o)}return i}async _runValidatorsAsync(e,t){if(this._typeValidator){let n=await this._typeValidator(e,t);if(n&&n.length>0)return n}let n=[];for(let r of this.state.validators){let i=await r(e,t);i&&n.push(...i)}return n}_parse(e,t){return{data:e,issues:[],typeOk:!0}}_parseAsync(e,t){return Promise.resolve(this._parse(e,t))}},f=class extends d{from;to;get _kind(){return`pipe`}constructor(e,t){super(),this.from=e,this.to=t}_parse(e,t){let n=this.from._parseFullSync(e,t);if(n.issues.length>0)return{data:e,issues:n.issues,typeOk:!1};let r=this.to._parseFullSync(n.data,t);return r.issues.length>0?{data:n.data,issues:r.issues,typeOk:!1}:{data:r.data,issues:[],typeOk:!0}}async _parseAsync(e,t){let n=await this.from._parseFullAsync(e,t);if(n.issues.length>0)return{data:e,issues:n.issues,typeOk:!1};let r=await this.to._parseFullAsync(n.data,t);return r.issues.length>0?{data:n.data,issues:r.issues,typeOk:!1}:{data:r.data,issues:[],typeOk:!0}}_toDescriptorImpl(){return{...this._describeBase(),from:this.from.definition(),kind:`pipe`,to:this.to.definition()}}};exports.ErrorCode=r.ErrorCode,exports.PipeSchema=f,exports.Schema=d,exports.SpellDefinitionError=e.SpellDefinitionError,exports.SpellError=e.SpellError,exports.SpellValidationError=e.SpellValidationError,exports._makeCtx=l,exports.fail=e.fail,exports.joinIssuePath=e.joinIssuePath,exports.prependIssuePath=e.prependIssuePath,exports.resolveMessage=e.resolveMessage;
2
- //# sourceMappingURL=core.cjs.map
package/dist/core.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.cjs","names":["isPlainObject","createParseContext","ErrorCode","SpellValidationError","SpellDefinitionError","require_errors","require_messages","require_safe_object","require_types","_vielzeug_arsenal","deepFreeze","value","child","materializeValue","item","out","key","mapValue","entry","defaultState","cloneState","state","_makeCtx","messages","normalizeValidateResult","issues","ctxIssues","result","ctx","Schema","typeValidator","c","prepared","core","validationIssues","allIssues","error","fn","next","issue","r","async","cloned","defaultValue","fallback","PipeSchema","description","label","validator","mergeAnnotations","target","processed","withDefault","current","preprocess","postprocess","typeResult","validate","_value","from","to","first","second"],"sources":["../src/core.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport { SpellDefinitionError, SpellValidationError } from './errors';\nimport { createParseContext } from './messages';\nimport { defineOwnProperty } from './safe-object';\nimport {\n type AcceptsMissing,\n type AnySchema,\n type CheckContext,\n ErrorCode,\n type FlatError,\n type FlatErrorFirst,\n type Infer,\n type InferInput,\n type InferOutput,\n type Issue,\n type IssuePath,\n type IssuePathSegment,\n type JsonSchema,\n type MessageFn,\n type Messages,\n type ParseContext,\n type ParseResult,\n type SchemaDescriptor,\n type StandardSchemaV1,\n type SyncParsable,\n schemaInput,\n schemaOutput,\n type ValidateFn,\n type ValidateResult,\n} from './types';\n\nexport {\n fail,\n joinIssuePath,\n prependIssuePath,\n resolveMessage,\n SpellDefinitionError,\n SpellError,\n SpellValidationError,\n} from './errors';\nexport {\n type AcceptsMissing,\n type AnySchema,\n type CheckContext,\n ErrorCode,\n type FlatError,\n type FlatErrorFirst,\n type Infer,\n type InferInput,\n type InferOutput,\n type Issue,\n type IssuePath,\n type IssuePathSegment,\n type JsonSchema,\n type MessageFn,\n type Messages,\n type ParseContext,\n type ParseResult,\n type SchemaDescriptor,\n type StandardSchemaV1,\n type SyncParsable,\n type ValidateFn,\n type ValidateResult,\n};\n\nfunction deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== 'object' || Object.isFrozen(value)) return value;\n\n for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child);\n\n return Object.freeze(value);\n}\n\nfunction materializeValue<T>(value: T): T {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => materializeValue(item)) as T;\n\n if (value instanceof Date) return new Date(value.getTime()) as T;\n\n if (value instanceof Map) {\n const out = new Map<unknown, unknown>();\n\n for (const [key, mapValue] of value.entries()) out.set(materializeValue(key), materializeValue(mapValue));\n\n return out as T;\n }\n\n if (value instanceof Set) return new Set([...value.values()].map((item) => materializeValue(item))) as T;\n\n if (isPlainObject(value)) {\n const out: Record<string, unknown> = {};\n\n for (const [key, entry] of Object.entries(value)) defineOwnProperty(out, key, materializeValue(entry));\n\n return out as T;\n }\n\n return value;\n}\n\n/* -------------------- Schema State -------------------- */\n\ntype Preprocessor = (value: unknown) => unknown;\ntype Postprocessor = (value: unknown) => unknown;\n\nexport interface SchemaState<Output = unknown> {\n catch?: () => Output;\n defaultValue?: () => Output;\n description?: string;\n hasAsyncChecks: boolean;\n hasRuntimeChecks: boolean;\n isNullable: boolean;\n isOptional: boolean;\n postprocessors: Postprocessor[];\n preprocessors: Preprocessor[];\n validators: ValidateFn[];\n}\n\nfunction defaultState<Output>(): SchemaState<Output> {\n return {\n hasAsyncChecks: false,\n hasRuntimeChecks: false,\n isNullable: false,\n isOptional: false,\n postprocessors: [],\n preprocessors: [],\n validators: [],\n };\n}\n\nfunction cloneState<Output>(state: SchemaState<Output>): SchemaState<Output> {\n return {\n catch: state.catch,\n defaultValue: state.defaultValue,\n description: state.description,\n hasAsyncChecks: state.hasAsyncChecks,\n hasRuntimeChecks: state.hasRuntimeChecks,\n isNullable: state.isNullable,\n isOptional: state.isOptional,\n postprocessors: [...state.postprocessors],\n preprocessors: [...state.preprocessors],\n validators: [...state.validators],\n };\n}\n\n/* -------------------- Parse-value return type -------------------- */\n\n/** Parse-value return type for `_parse` implementations. Emitted as part of the public class surface. */\nexport type ParseValue = { data: unknown; issues: Issue[]; typeOk: boolean };\n\n/* -------------------- ParseContext default -------------------- */\n\n/** @internal */\nexport function _makeCtx(messages?: Messages): ParseContext {\n return messages ? { messages } : createParseContext();\n}\n\n/* -------------------- ValidateResult normalizer -------------------- */\n\nfunction normalizeValidateResult(result: ValidateResult, ctxIssues: Issue[], ctx: ParseContext): Issue[] | null {\n const issues = [...ctxIssues];\n\n if (typeof result === 'string') {\n issues.push({ code: ErrorCode.custom, message: result, path: [] });\n } else if (result === false && issues.length === 0) {\n issues.push({ code: ErrorCode.custom, message: ctx.messages.check.default(), path: [] });\n }\n\n return issues.length ? issues : null;\n}\n\n/* -------------------- Base Schema -------------------- */\n\nexport class Schema<Output = unknown, Input = Output> implements StandardSchemaV1<Input, Output> {\n declare readonly [schemaInput]: Input;\n declare readonly [schemaOutput]: Output;\n\n protected state: SchemaState<Output>;\n\n protected _annotations: Record<string, unknown> = {};\n\n private _typeValidator: ValidateFn | null = null;\n\n get '~standard'(): StandardSchemaV1.Props<Input, Output> {\n return {\n validate: async (value) => {\n const result = await this.safeParseAsync(value);\n\n if (result.success) return { value: result.data };\n\n return { issues: result.error.issues.map(({ message, path }) => ({ message, path })) };\n },\n vendor: 'vielzeug',\n version: 1,\n };\n }\n\n constructor(typeValidator?: ValidateFn) {\n this.state = defaultState<Output>();\n this._typeValidator = typeValidator ?? null;\n }\n\n /* -------------------- Parse -------------------- */\n\n parse(value: unknown, ctx?: ParseContext): Output {\n if (this.state.hasAsyncChecks) {\n throw new SpellValidationError([\n { code: ErrorCode.custom, message: 'parse() cannot evaluate async checks. Use parseAsync().', path: [] },\n ]);\n }\n\n const c = ctx ?? _makeCtx();\n\n return this._withCatch(() => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as Output;\n\n const core = this._parse(prepared.value, c);\n const validationIssues = core.typeOk ? this._runValidatorsSync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(core.data) as Output;\n });\n }\n\n safeParse(value: unknown, ctx?: ParseContext): ParseResult<Output> {\n try {\n return {\n data: (this.parse as unknown as (value: unknown, ctx?: ParseContext) => Output)(value, ctx),\n success: true,\n };\n } catch (error) {\n if (error instanceof SpellValidationError) return { error, success: false };\n\n throw error;\n }\n }\n\n async parseAsync(value: unknown, ctx?: ParseContext): Promise<Output> {\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 Output;\n\n const core = await this._parseAsync(prepared.value, c);\n const validationIssues = core.typeOk ? await this._runValidatorsAsync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(core.data) as Output;\n });\n }\n\n async safeParseAsync(value: unknown, ctx?: ParseContext): Promise<ParseResult<Output>> {\n try {\n return { data: await this.parseAsync(value, ctx), success: true };\n } catch (error) {\n if (error instanceof SpellValidationError) return { error, success: false };\n\n throw error;\n }\n }\n\n /**\n * Internal full parse without throwing. Returns { data, issues }.\n * Used by composite schemas (array, object, union, etc.) to avoid\n * the try/catch + object allocation overhead of safeParse().\n * @internal\n */\n _parseFullSync(value: unknown, ctx?: ParseContext): { data: unknown; issues: Issue[] } {\n if (this.state.hasAsyncChecks) {\n throw new SpellValidationError([\n { code: ErrorCode.custom, message: 'Sync parsing cannot evaluate async checks. Use parseAsync().', path: [] },\n ]);\n }\n\n const c = ctx ?? _makeCtx();\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return { data: prepared.value, issues: [] };\n\n const core = this._parse(prepared.value, c);\n const validationIssues = core.typeOk ? this._runValidatorsSync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length > 0) {\n if (this.state.catch) return { data: this.state.catch(), issues: [] };\n\n return { data: core.data, issues: allIssues };\n }\n\n return { data: this._runPostprocessors(core.data), issues: [] };\n }\n\n /**\n * Async version of _parseFullSync.\n * @internal\n */\n async _parseFullAsync(value: unknown, ctx?: ParseContext): Promise<{ data: unknown; issues: Issue[] }> {\n const c = ctx ?? _makeCtx();\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return { data: prepared.value, issues: [] };\n\n const core = await this._parseAsync(prepared.value, c);\n const validationIssues = core.typeOk ? await this._runValidatorsAsync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length > 0) {\n if (this.state.catch) return { data: this.state.catch(), issues: [] };\n\n return { data: core.data, issues: allIssues };\n }\n\n return { data: this._runPostprocessors(core.data), issues: [] };\n }\n\n /* -------------------- Validators -------------------- */\n\n /**\n * Add a synchronous domain rule. For asynchronous work, use `checkAsync()`;\n * making execution mode explicit prevents unchecked Promise-returning callbacks.\n */\n check<F extends (value: Output, ctx: CheckContext) => ValidateResult | Promise<ValidateResult>>(\n fn: ReturnType<F> extends PromiseLike<unknown> ? never : F,\n ): this {\n return this._addCheck(fn as (value: Output, ctx: CheckContext) => ValidateResult, false);\n }\n\n checkAsync(fn: (value: Output, ctx: CheckContext) => Promise<ValidateResult>): this {\n return this._addCheck(fn, true);\n }\n\n protected _addCheck(\n fn:\n | ((value: Output, ctx: CheckContext) => ValidateResult)\n | ((value: Output, ctx: CheckContext) => Promise<ValidateResult>),\n async: boolean,\n ): this {\n const validator: ValidateFn = (value, ctx) => {\n const ctxIssues: Issue[] = [];\n const checkCtx: CheckContext = {\n addIssue: (issue) => ctxIssues.push({ ...issue, path: issue.path ?? [] } as Issue),\n };\n const result = fn(value as Output, checkCtx);\n\n if (result instanceof Promise) {\n return result.then((r) => normalizeValidateResult(r, ctxIssues, ctx!));\n }\n\n return normalizeValidateResult(result, ctxIssues, ctx!);\n };\n\n const next = this._addConstraint(validator);\n\n next.state.hasRuntimeChecks = true;\n\n if (async) next.state.hasAsyncChecks = true;\n\n return next;\n }\n\n /* -------------------- Nullability / Optionality -------------------- */\n\n optional(): Schema<Output | undefined, Input | undefined> & AcceptsMissing {\n const cloned = this._clone() as unknown as Schema<Output | undefined, Input | undefined>;\n\n cloned.state.isOptional = true;\n\n return cloned as Schema<Output | undefined, Input | undefined> & AcceptsMissing;\n }\n\n nullable(): Schema<Output | null, Input | null> {\n const cloned = this._clone() as unknown as Schema<Output | null, Input | null>;\n\n cloned.state.isNullable = true;\n\n return cloned;\n }\n\n nullish(): Schema<Output | null | undefined, Input | null | undefined> & AcceptsMissing {\n const cloned = this._clone() as unknown as Schema<Output | null | undefined, Input | null | undefined>;\n\n cloned.state.isOptional = true;\n cloned.state.isNullable = true;\n\n return cloned as Schema<Output | null | undefined, Input | null | undefined> & AcceptsMissing;\n }\n\n required(): Schema<Exclude<Output, undefined>, Exclude<Input, undefined>> {\n const cloned = this._clone() as unknown as Schema<Exclude<Output, undefined>, Exclude<Input, undefined>>;\n\n cloned.state.isOptional = false;\n\n return cloned;\n }\n\n /* -------------------- Transforms -------------------- */\n\n default(defaultValue: Output | (() => Output)): this & AcceptsMissing {\n const cloned = this._clone();\n\n cloned.state.defaultValue =\n typeof defaultValue === 'function' ? (defaultValue as () => Output) : () => materializeValue(defaultValue);\n\n return cloned as this & AcceptsMissing;\n }\n\n catch(fallback: Output | (() => Output)): this & AcceptsMissing {\n const cloned = this._clone();\n\n cloned.state.catch = typeof fallback === 'function' ? (fallback as () => Output) : () => materializeValue(fallback);\n\n return cloned as this & AcceptsMissing;\n }\n\n transform<NewOutput>(fn: (value: Output) => NewOutput): Schema<NewOutput, Input> {\n const next = this._clone() as unknown as Schema<NewOutput, Input>;\n\n next.state.postprocessors.push(fn as (v: unknown) => unknown);\n\n return next;\n }\n\n preprocess(fn: (value: unknown) => unknown): this {\n const cloned = this._clone();\n\n cloned.state.preprocessors.push(fn);\n\n return cloned;\n }\n\n pipe<B extends AnySchema>(next: B): PipeSchema<B, this> {\n return new PipeSchema(this, next);\n }\n\n /* -------------------- Introspection -------------------- */\n\n label(description: string): this {\n const cloned = this._clone();\n\n cloned.state.description = description;\n\n return cloned;\n }\n\n definition(): SchemaDescriptor {\n if (\n this.state.catch ||\n this.state.defaultValue ||\n this.state.postprocessors.length > 0 ||\n this.state.preprocessors.length > 0 ||\n this.state.hasRuntimeChecks\n ) {\n throw new SpellDefinitionError(\n 'Schemas with checks, transforms, defaults, catches, or preprocessors have no declarative definition.',\n );\n }\n\n return deepFreeze(this._toDescriptorImpl()) as SchemaDescriptor;\n }\n\n get description(): string | undefined {\n return this.state.description;\n }\n\n get isOptional(): boolean {\n return this.state.isOptional;\n }\n\n get isNullable(): boolean {\n return this.state.isNullable;\n }\n\n is(value: unknown): value is Output {\n return this.safeParse(value).success;\n }\n\n assert(value: unknown, label?: string): asserts value is Output {\n const result = this._parseFullSync(value);\n\n if (result.issues.length === 0) return;\n\n const issues = label\n ? result.issues.map((issue) => ({\n ...issue,\n message: issue.path.length === 0 ? `${label}: ${issue.message}` : issue.message,\n }))\n : result.issues;\n\n throw new SpellValidationError(issues);\n }\n\n get kind(): string {\n return this._kind;\n }\n\n protected get _kind(): string {\n return 'unknown';\n }\n\n /* -------------------- Protected helpers -------------------- */\n\n protected _describeBase(): { description?: string; isNullable?: true; isOptional?: true } {\n return {\n ...(this.state.description !== undefined ? { description: this.state.description } : {}),\n ...(this.state.isNullable ? { isNullable: true as const } : {}),\n ...(this.state.isOptional ? { isOptional: true as const } : {}),\n };\n }\n\n protected _addConstraint(\n validator: ValidateFn,\n mergeAnnotations?: (current: Record<string, unknown>) => Record<string, unknown>,\n ): this {\n const next = this._clone();\n\n next.state.validators.push(validator);\n\n if (mergeAnnotations) {\n next._annotations = mergeAnnotations({ ...next._annotations });\n }\n\n return next;\n }\n\n protected _construct(state: SchemaState<any>): this {\n const next = Object.assign(Object.create(Object.getPrototypeOf(this)), this, { state }) as this;\n\n next._annotations = { ...this._annotations };\n\n return next;\n }\n\n protected _clone(): this {\n return this._construct(cloneState(this.state));\n }\n\n protected _copyStateTo<T extends Schema<any, any>>(target: T): T {\n target.state = cloneState(this.state);\n\n return target;\n }\n\n protected _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'unknown' };\n }\n\n /* -------------------- Private -------------------- */\n\n private _withCatch<T>(fn: () => T): T {\n if (!this.state.catch) return fn();\n\n try {\n return fn();\n } catch (error) {\n if (error instanceof SpellValidationError) return this.state.catch() as unknown as T;\n\n throw error;\n }\n }\n\n protected async _withCatchAsync<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.state.catch) return fn();\n\n try {\n return await fn();\n } catch (error) {\n if (error instanceof SpellValidationError) return this.state.catch() as unknown as T;\n\n throw error;\n }\n }\n\n protected _prepareInput(value: unknown): { skip: true; value: null | undefined } | { skip: false; value: unknown } {\n const processed = this._runPreprocessors(value);\n const withDefault = processed === undefined && this.state.defaultValue ? this.state.defaultValue() : processed;\n\n if ((this.state.isOptional && withDefault === undefined) || (this.state.isNullable && withDefault === null)) {\n return { skip: true, value: withDefault };\n }\n\n return { skip: false, value: withDefault };\n }\n\n protected _runPreprocessors(value: unknown): unknown {\n let current = value;\n\n for (const preprocess of this.state.preprocessors) current = preprocess(current);\n\n return current;\n }\n\n protected _runPostprocessors(value: unknown): unknown {\n let current = value;\n\n for (const postprocess of this.state.postprocessors) current = postprocess(current);\n\n return current;\n }\n\n private _runValidatorsSync(value: unknown, ctx: ParseContext): Issue[] {\n if (this._typeValidator) {\n const typeResult = this._typeValidator(value, ctx);\n\n if (typeResult instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Type validator returned a Promise. Use parseAsync() for async validation.',\n path: [],\n },\n ]);\n }\n\n if (typeResult && typeResult.length > 0) return typeResult;\n }\n\n const issues: Issue[] = [];\n\n for (const validate of this.state.validators) {\n const result = validate(value, ctx);\n\n if (result instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Sync parsing received an async check. Use checkAsync() and parseAsync().',\n path: [],\n },\n ]);\n }\n\n if (result) issues.push(...result);\n }\n\n return issues;\n }\n\n protected async _runValidatorsAsync(value: unknown, ctx: ParseContext): Promise<Issue[]> {\n if (this._typeValidator) {\n const typeResult = await this._typeValidator(value, ctx);\n\n if (typeResult && typeResult.length > 0) return typeResult;\n }\n\n const issues: Issue[] = [];\n\n for (const validate of this.state.validators) {\n const result = await validate(value, ctx);\n\n if (result) issues.push(...result);\n }\n\n return issues;\n }\n\n protected _parse(_value: unknown, _ctx: ParseContext): ParseValue {\n return { data: _value, issues: [], typeOk: true };\n }\n\n /**\n * Async counterpart of `_parse`. Composites override this to parse their\n * children through `_parseFullAsync`, which keeps async checks reachable at\n * any nesting depth. The default defers to the synchronous `_parse`.\n */\n protected _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n return Promise.resolve(this._parse(value, ctx));\n }\n}\n\n/* -------------------- PipeSchema -------------------- */\n\nexport class PipeSchema<To extends AnySchema, From extends AnySchema> extends Schema<\n InferOutput<To>,\n InferInput<From>\n> {\n readonly from: From;\n readonly to: To;\n\n protected override get _kind(): string {\n return 'pipe';\n }\n\n constructor(from: From, to: To) {\n super();\n this.from = from;\n this.to = to;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const first = this.from._parseFullSync(value, ctx);\n\n if (first.issues.length > 0) return { data: value, issues: first.issues, typeOk: false };\n\n const second = this.to._parseFullSync(first.data, ctx);\n\n return second.issues.length > 0\n ? { data: first.data, issues: second.issues, typeOk: false }\n : { data: second.data, issues: [], typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const first = await this.from._parseFullAsync(value, ctx);\n\n if (first.issues.length > 0) return { data: value, issues: first.issues, typeOk: false };\n\n const second = await this.to._parseFullAsync(first.data, ctx);\n\n return second.issues.length > 0\n ? { data: first.data, issues: second.issues, typeOk: false }\n : { data: second.data, issues: [], typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n from: this.from.definition(),\n kind: 'pipe',\n to: this.to.definition(),\n };\n }\n}\n"],"mappings":"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"}
package/dist/core.d.ts DELETED
@@ -1,101 +0,0 @@
1
- import { type AcceptsMissing, type AnySchema, type CheckContext, ErrorCode, type FlatError, type FlatErrorFirst, type Infer, type InferInput, type InferOutput, type Issue, type IssuePath, type IssuePathSegment, type JsonSchema, type MessageFn, type Messages, type ParseContext, type ParseResult, type SchemaDescriptor, type StandardSchemaV1, type SyncParsable, schemaInput, schemaOutput, type ValidateFn, type ValidateResult } from './types';
2
- export { fail, joinIssuePath, prependIssuePath, resolveMessage, SpellDefinitionError, SpellError, SpellValidationError, } from './errors';
3
- export { type AcceptsMissing, type AnySchema, type CheckContext, ErrorCode, type FlatError, type FlatErrorFirst, type Infer, type InferInput, type InferOutput, type Issue, type IssuePath, type IssuePathSegment, type JsonSchema, type MessageFn, type Messages, type ParseContext, type ParseResult, type SchemaDescriptor, type StandardSchemaV1, type SyncParsable, type ValidateFn, type ValidateResult, };
4
- type Preprocessor = (value: unknown) => unknown;
5
- type Postprocessor = (value: unknown) => unknown;
6
- export interface SchemaState<Output = unknown> {
7
- catch?: () => Output;
8
- defaultValue?: () => Output;
9
- description?: string;
10
- hasAsyncChecks: boolean;
11
- hasRuntimeChecks: boolean;
12
- isNullable: boolean;
13
- isOptional: boolean;
14
- postprocessors: Postprocessor[];
15
- preprocessors: Preprocessor[];
16
- validators: ValidateFn[];
17
- }
18
- /** Parse-value return type for `_parse` implementations. Emitted as part of the public class surface. */
19
- export type ParseValue = {
20
- data: unknown;
21
- issues: Issue[];
22
- typeOk: boolean;
23
- };
24
- export declare class Schema<Output = unknown, Input = Output> implements StandardSchemaV1<Input, Output> {
25
- readonly [schemaInput]: Input;
26
- readonly [schemaOutput]: Output;
27
- protected state: SchemaState<Output>;
28
- protected _annotations: Record<string, unknown>;
29
- private _typeValidator;
30
- get '~standard'(): StandardSchemaV1.Props<Input, Output>;
31
- constructor(typeValidator?: ValidateFn);
32
- parse(value: unknown, ctx?: ParseContext): Output;
33
- safeParse(value: unknown, ctx?: ParseContext): ParseResult<Output>;
34
- parseAsync(value: unknown, ctx?: ParseContext): Promise<Output>;
35
- safeParseAsync(value: unknown, ctx?: ParseContext): Promise<ParseResult<Output>>;
36
- /**
37
- * Add a synchronous domain rule. For asynchronous work, use `checkAsync()`;
38
- * making execution mode explicit prevents unchecked Promise-returning callbacks.
39
- */
40
- check<F extends (value: Output, ctx: CheckContext) => ValidateResult | Promise<ValidateResult>>(fn: ReturnType<F> extends PromiseLike<unknown> ? never : F): this;
41
- checkAsync(fn: (value: Output, ctx: CheckContext) => Promise<ValidateResult>): this;
42
- protected _addCheck(fn: ((value: Output, ctx: CheckContext) => ValidateResult) | ((value: Output, ctx: CheckContext) => Promise<ValidateResult>), async: boolean): this;
43
- optional(): Schema<Output | undefined, Input | undefined> & AcceptsMissing;
44
- nullable(): Schema<Output | null, Input | null>;
45
- nullish(): Schema<Output | null | undefined, Input | null | undefined> & AcceptsMissing;
46
- required(): Schema<Exclude<Output, undefined>, Exclude<Input, undefined>>;
47
- default(defaultValue: Output | (() => Output)): this & AcceptsMissing;
48
- catch(fallback: Output | (() => Output)): this & AcceptsMissing;
49
- transform<NewOutput>(fn: (value: Output) => NewOutput): Schema<NewOutput, Input>;
50
- preprocess(fn: (value: unknown) => unknown): this;
51
- pipe<B extends AnySchema>(next: B): PipeSchema<B, this>;
52
- label(description: string): this;
53
- definition(): SchemaDescriptor;
54
- get description(): string | undefined;
55
- get isOptional(): boolean;
56
- get isNullable(): boolean;
57
- is(value: unknown): value is Output;
58
- assert(value: unknown, label?: string): asserts value is Output;
59
- get kind(): string;
60
- protected get _kind(): string;
61
- protected _describeBase(): {
62
- description?: string;
63
- isNullable?: true;
64
- isOptional?: true;
65
- };
66
- protected _addConstraint(validator: ValidateFn, mergeAnnotations?: (current: Record<string, unknown>) => Record<string, unknown>): this;
67
- protected _construct(state: SchemaState<any>): this;
68
- protected _clone(): this;
69
- protected _copyStateTo<T extends Schema<any, any>>(target: T): T;
70
- protected _toDescriptorImpl(): SchemaDescriptor;
71
- private _withCatch;
72
- protected _withCatchAsync<T>(fn: () => Promise<T>): Promise<T>;
73
- protected _prepareInput(value: unknown): {
74
- skip: true;
75
- value: null | undefined;
76
- } | {
77
- skip: false;
78
- value: unknown;
79
- };
80
- protected _runPreprocessors(value: unknown): unknown;
81
- protected _runPostprocessors(value: unknown): unknown;
82
- private _runValidatorsSync;
83
- protected _runValidatorsAsync(value: unknown, ctx: ParseContext): Promise<Issue[]>;
84
- protected _parse(_value: unknown, _ctx: ParseContext): ParseValue;
85
- /**
86
- * Async counterpart of `_parse`. Composites override this to parse their
87
- * children through `_parseFullAsync`, which keeps async checks reachable at
88
- * any nesting depth. The default defers to the synchronous `_parse`.
89
- */
90
- protected _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue>;
91
- }
92
- export declare class PipeSchema<To extends AnySchema, From extends AnySchema> extends Schema<InferOutput<To>, InferInput<From>> {
93
- readonly from: From;
94
- readonly to: To;
95
- protected get _kind(): string;
96
- constructor(from: From, to: To);
97
- protected _parse(value: unknown, ctx: ParseContext): ParseValue;
98
- protected _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue>;
99
- protected _toDescriptorImpl(): SchemaDescriptor;
100
- }
101
- //# sourceMappingURL=core.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
package/dist/core.js DELETED
@@ -1,2 +0,0 @@
1
- import{SpellDefinitionError as e,SpellError as t,SpellValidationError as n,fail as r,joinIssuePath as i,prependIssuePath as a,resolveMessage as o}from"./errors.js";import{createParseContext as s}from"./messages.js";import{defineOwnProperty as c}from"./safe-object.js";import{ErrorCode as l}from"./types.js";import{isPlainObject as u}from"@vielzeug/arsenal";function d(e){if(typeof e!=`object`||!e||Object.isFrozen(e))return e;for(let t of Object.values(e))d(t);return Object.freeze(e)}function f(e){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(e=>f(e));if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map){let t=/* @__PURE__ */ new Map;for(let[n,r]of e.entries())t.set(f(n),f(r));return t}if(e instanceof Set)return new Set([...e.values()].map(e=>f(e)));if(u(e)){let t={};for(let[n,r]of Object.entries(e))c(t,n,f(r));return t}return e}function p(){return{hasAsyncChecks:!1,hasRuntimeChecks:!1,isNullable:!1,isOptional:!1,postprocessors:[],preprocessors:[],validators:[]}}function m(e){return{catch:e.catch,defaultValue:e.defaultValue,description:e.description,hasAsyncChecks:e.hasAsyncChecks,hasRuntimeChecks:e.hasRuntimeChecks,isNullable:e.isNullable,isOptional:e.isOptional,postprocessors:[...e.postprocessors],preprocessors:[...e.preprocessors],validators:[...e.validators]}}function h(e){return e?{messages:e}:s()}function g(e,t,n){let r=[...t];return typeof e==`string`?r.push({code:l.custom,message:e,path:[]}):e===!1&&r.length===0&&r.push({code:l.custom,message:n.messages.check.default(),path:[]}),r.length?r:null}var _=class{state;_annotations={};_typeValidator=null;get"~standard"(){return{validate:async e=>{let t=await this.safeParseAsync(e);return t.success?{value:t.data}:{issues:t.error.issues.map(({message:e,path:t})=>({message:e,path:t}))}},vendor:`vielzeug`,version:1}}constructor(e){this.state=p(),this._typeValidator=e??null}parse(e,t){if(this.state.hasAsyncChecks)throw new n([{code:l.custom,message:`parse() cannot evaluate async checks. Use parseAsync().`,path:[]}]);let r=t??h();return this._withCatch(()=>{let t=this._prepareInput(e);if(t.skip)return t.value;let i=this._parse(t.value,r),a=i.typeOk?this._runValidatorsSync(i.data,r):[],o=[...i.issues,...a];if(o.length)throw new n(o);return this._runPostprocessors(i.data)})}safeParse(e,t){try{return{data:this.parse(e,t),success:!0}}catch(e){if(e instanceof n)return{error:e,success:!1};throw e}}async parseAsync(e,t){let r=t??h();return this._withCatchAsync(async()=>{let t=this._prepareInput(e);if(t.skip)return t.value;let i=await this._parseAsync(t.value,r),a=i.typeOk?await this._runValidatorsAsync(i.data,r):[],o=[...i.issues,...a];if(o.length)throw new n(o);return this._runPostprocessors(i.data)})}async safeParseAsync(e,t){try{return{data:await this.parseAsync(e,t),success:!0}}catch(e){if(e instanceof n)return{error:e,success:!1};throw e}}_parseFullSync(e,t){if(this.state.hasAsyncChecks)throw new n([{code:l.custom,message:`Sync parsing cannot evaluate async checks. Use parseAsync().`,path:[]}]);let r=t??h(),i=this._prepareInput(e);if(i.skip)return{data:i.value,issues:[]};let a=this._parse(i.value,r),o=a.typeOk?this._runValidatorsSync(a.data,r):[],s=[...a.issues,...o];return s.length>0?this.state.catch?{data:this.state.catch(),issues:[]}:{data:a.data,issues:s}:{data:this._runPostprocessors(a.data),issues:[]}}async _parseFullAsync(e,t){let n=t??h(),r=this._prepareInput(e);if(r.skip)return{data:r.value,issues:[]};let i=await this._parseAsync(r.value,n),a=i.typeOk?await this._runValidatorsAsync(i.data,n):[],o=[...i.issues,...a];return o.length>0?this.state.catch?{data:this.state.catch(),issues:[]}:{data:i.data,issues:o}:{data:this._runPostprocessors(i.data),issues:[]}}check(e){return this._addCheck(e,!1)}checkAsync(e){return this._addCheck(e,!0)}_addCheck(e,t){let n=this._addConstraint((t,n)=>{let r=[],i=e(t,{addIssue:e=>r.push({...e,path:e.path??[]})});return i instanceof Promise?i.then(e=>g(e,r,n)):g(i,r,n)});return n.state.hasRuntimeChecks=!0,t&&(n.state.hasAsyncChecks=!0),n}optional(){let e=this._clone();return e.state.isOptional=!0,e}nullable(){let e=this._clone();return e.state.isNullable=!0,e}nullish(){let e=this._clone();return e.state.isOptional=!0,e.state.isNullable=!0,e}required(){let e=this._clone();return e.state.isOptional=!1,e}default(e){let t=this._clone();return t.state.defaultValue=typeof e==`function`?e:()=>f(e),t}catch(e){let t=this._clone();return t.state.catch=typeof e==`function`?e:()=>f(e),t}transform(e){let t=this._clone();return t.state.postprocessors.push(e),t}preprocess(e){let t=this._clone();return t.state.preprocessors.push(e),t}pipe(e){return new v(this,e)}label(e){let t=this._clone();return t.state.description=e,t}definition(){if(this.state.catch||this.state.defaultValue||this.state.postprocessors.length>0||this.state.preprocessors.length>0||this.state.hasRuntimeChecks)throw new e(`Schemas with checks, transforms, defaults, catches, or preprocessors have no declarative definition.`);return d(this._toDescriptorImpl())}get description(){return this.state.description}get isOptional(){return this.state.isOptional}get isNullable(){return this.state.isNullable}is(e){return this.safeParse(e).success}assert(e,t){let r=this._parseFullSync(e);if(r.issues.length===0)return;let i=t?r.issues.map(e=>({...e,message:e.path.length===0?`${t}: ${e.message}`:e.message})):r.issues;throw new n(i)}get kind(){return this._kind}get _kind(){return`unknown`}_describeBase(){return{...this.state.description===void 0?{}:{description:this.state.description},...this.state.isNullable?{isNullable:!0}:{},...this.state.isOptional?{isOptional:!0}:{}}}_addConstraint(e,t){let n=this._clone();return n.state.validators.push(e),t&&(n._annotations=t({...n._annotations})),n}_construct(e){let t=Object.assign(Object.create(Object.getPrototypeOf(this)),this,{state:e});return t._annotations={...this._annotations},t}_clone(){return this._construct(m(this.state))}_copyStateTo(e){return e.state=m(this.state),e}_toDescriptorImpl(){return{...this._describeBase(),kind:`unknown`}}_withCatch(e){if(!this.state.catch)return e();try{return e()}catch(e){if(e instanceof n)return this.state.catch();throw e}}async _withCatchAsync(e){if(!this.state.catch)return e();try{return await e()}catch(e){if(e instanceof n)return this.state.catch();throw e}}_prepareInput(e){let t=this._runPreprocessors(e),n=t===void 0&&this.state.defaultValue?this.state.defaultValue():t;return this.state.isOptional&&n===void 0||this.state.isNullable&&n===null?{skip:!0,value:n}:{skip:!1,value:n}}_runPreprocessors(e){let t=e;for(let e of this.state.preprocessors)t=e(t);return t}_runPostprocessors(e){let t=e;for(let e of this.state.postprocessors)t=e(t);return t}_runValidatorsSync(e,t){if(this._typeValidator){let r=this._typeValidator(e,t);if(r instanceof Promise)throw new n([{code:l.custom,message:`Type validator returned a Promise. Use parseAsync() for async validation.`,path:[]}]);if(r&&r.length>0)return r}let r=[];for(let i of this.state.validators){let a=i(e,t);if(a instanceof Promise)throw new n([{code:l.custom,message:`Sync parsing received an async check. Use checkAsync() and parseAsync().`,path:[]}]);a&&r.push(...a)}return r}async _runValidatorsAsync(e,t){if(this._typeValidator){let n=await this._typeValidator(e,t);if(n&&n.length>0)return n}let n=[];for(let r of this.state.validators){let i=await r(e,t);i&&n.push(...i)}return n}_parse(e,t){return{data:e,issues:[],typeOk:!0}}_parseAsync(e,t){return Promise.resolve(this._parse(e,t))}},v=class extends _{from;to;get _kind(){return`pipe`}constructor(e,t){super(),this.from=e,this.to=t}_parse(e,t){let n=this.from._parseFullSync(e,t);if(n.issues.length>0)return{data:e,issues:n.issues,typeOk:!1};let r=this.to._parseFullSync(n.data,t);return r.issues.length>0?{data:n.data,issues:r.issues,typeOk:!1}:{data:r.data,issues:[],typeOk:!0}}async _parseAsync(e,t){let n=await this.from._parseFullAsync(e,t);if(n.issues.length>0)return{data:e,issues:n.issues,typeOk:!1};let r=await this.to._parseFullAsync(n.data,t);return r.issues.length>0?{data:n.data,issues:r.issues,typeOk:!1}:{data:r.data,issues:[],typeOk:!0}}_toDescriptorImpl(){return{...this._describeBase(),from:this.from.definition(),kind:`pipe`,to:this.to.definition()}}};export{l as ErrorCode,v as PipeSchema,_ as Schema,e as SpellDefinitionError,t as SpellError,n as SpellValidationError,h as _makeCtx,r as fail,i as joinIssuePath,a as prependIssuePath,o as resolveMessage};
2
- //# sourceMappingURL=core.js.map
package/dist/core.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.js","names":["deepFreeze","value","child","materializeValue","item","out","key","mapValue","isPlainObject","entry","defineOwnProperty","defaultState","cloneState","state","_makeCtx","messages","createParseContext","normalizeValidateResult","issues","ctxIssues","result","ErrorCode","ctx","Schema","typeValidator","SpellValidationError","c","prepared","core","validationIssues","allIssues","error","fn","next","issue","r","async","cloned","defaultValue","fallback","PipeSchema","description","SpellDefinitionError","label","validator","mergeAnnotations","target","processed","withDefault","current","preprocess","postprocess","typeResult","validate","_value","from","to","first","second","SpellError","fail","joinIssuePath","prependIssuePath","resolveMessage"],"sources":["../src/core.ts"],"sourcesContent":["import { isPlainObject } from '@vielzeug/arsenal';\n\nimport { SpellDefinitionError, SpellValidationError } from './errors';\nimport { createParseContext } from './messages';\nimport { defineOwnProperty } from './safe-object';\nimport {\n type AcceptsMissing,\n type AnySchema,\n type CheckContext,\n ErrorCode,\n type FlatError,\n type FlatErrorFirst,\n type Infer,\n type InferInput,\n type InferOutput,\n type Issue,\n type IssuePath,\n type IssuePathSegment,\n type JsonSchema,\n type MessageFn,\n type Messages,\n type ParseContext,\n type ParseResult,\n type SchemaDescriptor,\n type StandardSchemaV1,\n type SyncParsable,\n schemaInput,\n schemaOutput,\n type ValidateFn,\n type ValidateResult,\n} from './types';\n\nexport {\n fail,\n joinIssuePath,\n prependIssuePath,\n resolveMessage,\n SpellDefinitionError,\n SpellError,\n SpellValidationError,\n} from './errors';\nexport {\n type AcceptsMissing,\n type AnySchema,\n type CheckContext,\n ErrorCode,\n type FlatError,\n type FlatErrorFirst,\n type Infer,\n type InferInput,\n type InferOutput,\n type Issue,\n type IssuePath,\n type IssuePathSegment,\n type JsonSchema,\n type MessageFn,\n type Messages,\n type ParseContext,\n type ParseResult,\n type SchemaDescriptor,\n type StandardSchemaV1,\n type SyncParsable,\n type ValidateFn,\n type ValidateResult,\n};\n\nfunction deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== 'object' || Object.isFrozen(value)) return value;\n\n for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child);\n\n return Object.freeze(value);\n}\n\nfunction materializeValue<T>(value: T): T {\n if (value == null || typeof value !== 'object') return value;\n\n if (Array.isArray(value)) return value.map((item) => materializeValue(item)) as T;\n\n if (value instanceof Date) return new Date(value.getTime()) as T;\n\n if (value instanceof Map) {\n const out = new Map<unknown, unknown>();\n\n for (const [key, mapValue] of value.entries()) out.set(materializeValue(key), materializeValue(mapValue));\n\n return out as T;\n }\n\n if (value instanceof Set) return new Set([...value.values()].map((item) => materializeValue(item))) as T;\n\n if (isPlainObject(value)) {\n const out: Record<string, unknown> = {};\n\n for (const [key, entry] of Object.entries(value)) defineOwnProperty(out, key, materializeValue(entry));\n\n return out as T;\n }\n\n return value;\n}\n\n/* -------------------- Schema State -------------------- */\n\ntype Preprocessor = (value: unknown) => unknown;\ntype Postprocessor = (value: unknown) => unknown;\n\nexport interface SchemaState<Output = unknown> {\n catch?: () => Output;\n defaultValue?: () => Output;\n description?: string;\n hasAsyncChecks: boolean;\n hasRuntimeChecks: boolean;\n isNullable: boolean;\n isOptional: boolean;\n postprocessors: Postprocessor[];\n preprocessors: Preprocessor[];\n validators: ValidateFn[];\n}\n\nfunction defaultState<Output>(): SchemaState<Output> {\n return {\n hasAsyncChecks: false,\n hasRuntimeChecks: false,\n isNullable: false,\n isOptional: false,\n postprocessors: [],\n preprocessors: [],\n validators: [],\n };\n}\n\nfunction cloneState<Output>(state: SchemaState<Output>): SchemaState<Output> {\n return {\n catch: state.catch,\n defaultValue: state.defaultValue,\n description: state.description,\n hasAsyncChecks: state.hasAsyncChecks,\n hasRuntimeChecks: state.hasRuntimeChecks,\n isNullable: state.isNullable,\n isOptional: state.isOptional,\n postprocessors: [...state.postprocessors],\n preprocessors: [...state.preprocessors],\n validators: [...state.validators],\n };\n}\n\n/* -------------------- Parse-value return type -------------------- */\n\n/** Parse-value return type for `_parse` implementations. Emitted as part of the public class surface. */\nexport type ParseValue = { data: unknown; issues: Issue[]; typeOk: boolean };\n\n/* -------------------- ParseContext default -------------------- */\n\n/** @internal */\nexport function _makeCtx(messages?: Messages): ParseContext {\n return messages ? { messages } : createParseContext();\n}\n\n/* -------------------- ValidateResult normalizer -------------------- */\n\nfunction normalizeValidateResult(result: ValidateResult, ctxIssues: Issue[], ctx: ParseContext): Issue[] | null {\n const issues = [...ctxIssues];\n\n if (typeof result === 'string') {\n issues.push({ code: ErrorCode.custom, message: result, path: [] });\n } else if (result === false && issues.length === 0) {\n issues.push({ code: ErrorCode.custom, message: ctx.messages.check.default(), path: [] });\n }\n\n return issues.length ? issues : null;\n}\n\n/* -------------------- Base Schema -------------------- */\n\nexport class Schema<Output = unknown, Input = Output> implements StandardSchemaV1<Input, Output> {\n declare readonly [schemaInput]: Input;\n declare readonly [schemaOutput]: Output;\n\n protected state: SchemaState<Output>;\n\n protected _annotations: Record<string, unknown> = {};\n\n private _typeValidator: ValidateFn | null = null;\n\n get '~standard'(): StandardSchemaV1.Props<Input, Output> {\n return {\n validate: async (value) => {\n const result = await this.safeParseAsync(value);\n\n if (result.success) return { value: result.data };\n\n return { issues: result.error.issues.map(({ message, path }) => ({ message, path })) };\n },\n vendor: 'vielzeug',\n version: 1,\n };\n }\n\n constructor(typeValidator?: ValidateFn) {\n this.state = defaultState<Output>();\n this._typeValidator = typeValidator ?? null;\n }\n\n /* -------------------- Parse -------------------- */\n\n parse(value: unknown, ctx?: ParseContext): Output {\n if (this.state.hasAsyncChecks) {\n throw new SpellValidationError([\n { code: ErrorCode.custom, message: 'parse() cannot evaluate async checks. Use parseAsync().', path: [] },\n ]);\n }\n\n const c = ctx ?? _makeCtx();\n\n return this._withCatch(() => {\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return prepared.value as Output;\n\n const core = this._parse(prepared.value, c);\n const validationIssues = core.typeOk ? this._runValidatorsSync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(core.data) as Output;\n });\n }\n\n safeParse(value: unknown, ctx?: ParseContext): ParseResult<Output> {\n try {\n return {\n data: (this.parse as unknown as (value: unknown, ctx?: ParseContext) => Output)(value, ctx),\n success: true,\n };\n } catch (error) {\n if (error instanceof SpellValidationError) return { error, success: false };\n\n throw error;\n }\n }\n\n async parseAsync(value: unknown, ctx?: ParseContext): Promise<Output> {\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 Output;\n\n const core = await this._parseAsync(prepared.value, c);\n const validationIssues = core.typeOk ? await this._runValidatorsAsync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length) throw new SpellValidationError(allIssues);\n\n return this._runPostprocessors(core.data) as Output;\n });\n }\n\n async safeParseAsync(value: unknown, ctx?: ParseContext): Promise<ParseResult<Output>> {\n try {\n return { data: await this.parseAsync(value, ctx), success: true };\n } catch (error) {\n if (error instanceof SpellValidationError) return { error, success: false };\n\n throw error;\n }\n }\n\n /**\n * Internal full parse without throwing. Returns { data, issues }.\n * Used by composite schemas (array, object, union, etc.) to avoid\n * the try/catch + object allocation overhead of safeParse().\n * @internal\n */\n _parseFullSync(value: unknown, ctx?: ParseContext): { data: unknown; issues: Issue[] } {\n if (this.state.hasAsyncChecks) {\n throw new SpellValidationError([\n { code: ErrorCode.custom, message: 'Sync parsing cannot evaluate async checks. Use parseAsync().', path: [] },\n ]);\n }\n\n const c = ctx ?? _makeCtx();\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return { data: prepared.value, issues: [] };\n\n const core = this._parse(prepared.value, c);\n const validationIssues = core.typeOk ? this._runValidatorsSync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length > 0) {\n if (this.state.catch) return { data: this.state.catch(), issues: [] };\n\n return { data: core.data, issues: allIssues };\n }\n\n return { data: this._runPostprocessors(core.data), issues: [] };\n }\n\n /**\n * Async version of _parseFullSync.\n * @internal\n */\n async _parseFullAsync(value: unknown, ctx?: ParseContext): Promise<{ data: unknown; issues: Issue[] }> {\n const c = ctx ?? _makeCtx();\n const prepared = this._prepareInput(value);\n\n if (prepared.skip) return { data: prepared.value, issues: [] };\n\n const core = await this._parseAsync(prepared.value, c);\n const validationIssues = core.typeOk ? await this._runValidatorsAsync(core.data, c) : [];\n const allIssues = [...core.issues, ...validationIssues];\n\n if (allIssues.length > 0) {\n if (this.state.catch) return { data: this.state.catch(), issues: [] };\n\n return { data: core.data, issues: allIssues };\n }\n\n return { data: this._runPostprocessors(core.data), issues: [] };\n }\n\n /* -------------------- Validators -------------------- */\n\n /**\n * Add a synchronous domain rule. For asynchronous work, use `checkAsync()`;\n * making execution mode explicit prevents unchecked Promise-returning callbacks.\n */\n check<F extends (value: Output, ctx: CheckContext) => ValidateResult | Promise<ValidateResult>>(\n fn: ReturnType<F> extends PromiseLike<unknown> ? never : F,\n ): this {\n return this._addCheck(fn as (value: Output, ctx: CheckContext) => ValidateResult, false);\n }\n\n checkAsync(fn: (value: Output, ctx: CheckContext) => Promise<ValidateResult>): this {\n return this._addCheck(fn, true);\n }\n\n protected _addCheck(\n fn:\n | ((value: Output, ctx: CheckContext) => ValidateResult)\n | ((value: Output, ctx: CheckContext) => Promise<ValidateResult>),\n async: boolean,\n ): this {\n const validator: ValidateFn = (value, ctx) => {\n const ctxIssues: Issue[] = [];\n const checkCtx: CheckContext = {\n addIssue: (issue) => ctxIssues.push({ ...issue, path: issue.path ?? [] } as Issue),\n };\n const result = fn(value as Output, checkCtx);\n\n if (result instanceof Promise) {\n return result.then((r) => normalizeValidateResult(r, ctxIssues, ctx!));\n }\n\n return normalizeValidateResult(result, ctxIssues, ctx!);\n };\n\n const next = this._addConstraint(validator);\n\n next.state.hasRuntimeChecks = true;\n\n if (async) next.state.hasAsyncChecks = true;\n\n return next;\n }\n\n /* -------------------- Nullability / Optionality -------------------- */\n\n optional(): Schema<Output | undefined, Input | undefined> & AcceptsMissing {\n const cloned = this._clone() as unknown as Schema<Output | undefined, Input | undefined>;\n\n cloned.state.isOptional = true;\n\n return cloned as Schema<Output | undefined, Input | undefined> & AcceptsMissing;\n }\n\n nullable(): Schema<Output | null, Input | null> {\n const cloned = this._clone() as unknown as Schema<Output | null, Input | null>;\n\n cloned.state.isNullable = true;\n\n return cloned;\n }\n\n nullish(): Schema<Output | null | undefined, Input | null | undefined> & AcceptsMissing {\n const cloned = this._clone() as unknown as Schema<Output | null | undefined, Input | null | undefined>;\n\n cloned.state.isOptional = true;\n cloned.state.isNullable = true;\n\n return cloned as Schema<Output | null | undefined, Input | null | undefined> & AcceptsMissing;\n }\n\n required(): Schema<Exclude<Output, undefined>, Exclude<Input, undefined>> {\n const cloned = this._clone() as unknown as Schema<Exclude<Output, undefined>, Exclude<Input, undefined>>;\n\n cloned.state.isOptional = false;\n\n return cloned;\n }\n\n /* -------------------- Transforms -------------------- */\n\n default(defaultValue: Output | (() => Output)): this & AcceptsMissing {\n const cloned = this._clone();\n\n cloned.state.defaultValue =\n typeof defaultValue === 'function' ? (defaultValue as () => Output) : () => materializeValue(defaultValue);\n\n return cloned as this & AcceptsMissing;\n }\n\n catch(fallback: Output | (() => Output)): this & AcceptsMissing {\n const cloned = this._clone();\n\n cloned.state.catch = typeof fallback === 'function' ? (fallback as () => Output) : () => materializeValue(fallback);\n\n return cloned as this & AcceptsMissing;\n }\n\n transform<NewOutput>(fn: (value: Output) => NewOutput): Schema<NewOutput, Input> {\n const next = this._clone() as unknown as Schema<NewOutput, Input>;\n\n next.state.postprocessors.push(fn as (v: unknown) => unknown);\n\n return next;\n }\n\n preprocess(fn: (value: unknown) => unknown): this {\n const cloned = this._clone();\n\n cloned.state.preprocessors.push(fn);\n\n return cloned;\n }\n\n pipe<B extends AnySchema>(next: B): PipeSchema<B, this> {\n return new PipeSchema(this, next);\n }\n\n /* -------------------- Introspection -------------------- */\n\n label(description: string): this {\n const cloned = this._clone();\n\n cloned.state.description = description;\n\n return cloned;\n }\n\n definition(): SchemaDescriptor {\n if (\n this.state.catch ||\n this.state.defaultValue ||\n this.state.postprocessors.length > 0 ||\n this.state.preprocessors.length > 0 ||\n this.state.hasRuntimeChecks\n ) {\n throw new SpellDefinitionError(\n 'Schemas with checks, transforms, defaults, catches, or preprocessors have no declarative definition.',\n );\n }\n\n return deepFreeze(this._toDescriptorImpl()) as SchemaDescriptor;\n }\n\n get description(): string | undefined {\n return this.state.description;\n }\n\n get isOptional(): boolean {\n return this.state.isOptional;\n }\n\n get isNullable(): boolean {\n return this.state.isNullable;\n }\n\n is(value: unknown): value is Output {\n return this.safeParse(value).success;\n }\n\n assert(value: unknown, label?: string): asserts value is Output {\n const result = this._parseFullSync(value);\n\n if (result.issues.length === 0) return;\n\n const issues = label\n ? result.issues.map((issue) => ({\n ...issue,\n message: issue.path.length === 0 ? `${label}: ${issue.message}` : issue.message,\n }))\n : result.issues;\n\n throw new SpellValidationError(issues);\n }\n\n get kind(): string {\n return this._kind;\n }\n\n protected get _kind(): string {\n return 'unknown';\n }\n\n /* -------------------- Protected helpers -------------------- */\n\n protected _describeBase(): { description?: string; isNullable?: true; isOptional?: true } {\n return {\n ...(this.state.description !== undefined ? { description: this.state.description } : {}),\n ...(this.state.isNullable ? { isNullable: true as const } : {}),\n ...(this.state.isOptional ? { isOptional: true as const } : {}),\n };\n }\n\n protected _addConstraint(\n validator: ValidateFn,\n mergeAnnotations?: (current: Record<string, unknown>) => Record<string, unknown>,\n ): this {\n const next = this._clone();\n\n next.state.validators.push(validator);\n\n if (mergeAnnotations) {\n next._annotations = mergeAnnotations({ ...next._annotations });\n }\n\n return next;\n }\n\n protected _construct(state: SchemaState<any>): this {\n const next = Object.assign(Object.create(Object.getPrototypeOf(this)), this, { state }) as this;\n\n next._annotations = { ...this._annotations };\n\n return next;\n }\n\n protected _clone(): this {\n return this._construct(cloneState(this.state));\n }\n\n protected _copyStateTo<T extends Schema<any, any>>(target: T): T {\n target.state = cloneState(this.state);\n\n return target;\n }\n\n protected _toDescriptorImpl(): SchemaDescriptor {\n return { ...this._describeBase(), kind: 'unknown' };\n }\n\n /* -------------------- Private -------------------- */\n\n private _withCatch<T>(fn: () => T): T {\n if (!this.state.catch) return fn();\n\n try {\n return fn();\n } catch (error) {\n if (error instanceof SpellValidationError) return this.state.catch() as unknown as T;\n\n throw error;\n }\n }\n\n protected async _withCatchAsync<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.state.catch) return fn();\n\n try {\n return await fn();\n } catch (error) {\n if (error instanceof SpellValidationError) return this.state.catch() as unknown as T;\n\n throw error;\n }\n }\n\n protected _prepareInput(value: unknown): { skip: true; value: null | undefined } | { skip: false; value: unknown } {\n const processed = this._runPreprocessors(value);\n const withDefault = processed === undefined && this.state.defaultValue ? this.state.defaultValue() : processed;\n\n if ((this.state.isOptional && withDefault === undefined) || (this.state.isNullable && withDefault === null)) {\n return { skip: true, value: withDefault };\n }\n\n return { skip: false, value: withDefault };\n }\n\n protected _runPreprocessors(value: unknown): unknown {\n let current = value;\n\n for (const preprocess of this.state.preprocessors) current = preprocess(current);\n\n return current;\n }\n\n protected _runPostprocessors(value: unknown): unknown {\n let current = value;\n\n for (const postprocess of this.state.postprocessors) current = postprocess(current);\n\n return current;\n }\n\n private _runValidatorsSync(value: unknown, ctx: ParseContext): Issue[] {\n if (this._typeValidator) {\n const typeResult = this._typeValidator(value, ctx);\n\n if (typeResult instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Type validator returned a Promise. Use parseAsync() for async validation.',\n path: [],\n },\n ]);\n }\n\n if (typeResult && typeResult.length > 0) return typeResult;\n }\n\n const issues: Issue[] = [];\n\n for (const validate of this.state.validators) {\n const result = validate(value, ctx);\n\n if (result instanceof Promise) {\n throw new SpellValidationError([\n {\n code: ErrorCode.custom,\n message: 'Sync parsing received an async check. Use checkAsync() and parseAsync().',\n path: [],\n },\n ]);\n }\n\n if (result) issues.push(...result);\n }\n\n return issues;\n }\n\n protected async _runValidatorsAsync(value: unknown, ctx: ParseContext): Promise<Issue[]> {\n if (this._typeValidator) {\n const typeResult = await this._typeValidator(value, ctx);\n\n if (typeResult && typeResult.length > 0) return typeResult;\n }\n\n const issues: Issue[] = [];\n\n for (const validate of this.state.validators) {\n const result = await validate(value, ctx);\n\n if (result) issues.push(...result);\n }\n\n return issues;\n }\n\n protected _parse(_value: unknown, _ctx: ParseContext): ParseValue {\n return { data: _value, issues: [], typeOk: true };\n }\n\n /**\n * Async counterpart of `_parse`. Composites override this to parse their\n * children through `_parseFullAsync`, which keeps async checks reachable at\n * any nesting depth. The default defers to the synchronous `_parse`.\n */\n protected _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n return Promise.resolve(this._parse(value, ctx));\n }\n}\n\n/* -------------------- PipeSchema -------------------- */\n\nexport class PipeSchema<To extends AnySchema, From extends AnySchema> extends Schema<\n InferOutput<To>,\n InferInput<From>\n> {\n readonly from: From;\n readonly to: To;\n\n protected override get _kind(): string {\n return 'pipe';\n }\n\n constructor(from: From, to: To) {\n super();\n this.from = from;\n this.to = to;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const first = this.from._parseFullSync(value, ctx);\n\n if (first.issues.length > 0) return { data: value, issues: first.issues, typeOk: false };\n\n const second = this.to._parseFullSync(first.data, ctx);\n\n return second.issues.length > 0\n ? { data: first.data, issues: second.issues, typeOk: false }\n : { data: second.data, issues: [], typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const first = await this.from._parseFullAsync(value, ctx);\n\n if (first.issues.length > 0) return { data: value, issues: first.issues, typeOk: false };\n\n const second = await this.to._parseFullAsync(first.data, ctx);\n\n return second.issues.length > 0\n ? { data: first.data, issues: second.issues, typeOk: false }\n : { data: second.data, issues: [], typeOk: true };\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n from: this.from.definition(),\n kind: 'pipe',\n to: this.to.definition(),\n };\n }\n}\n"],"mappings":"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"}
package/dist/formats.cjs DELETED
@@ -1,2 +0,0 @@
1
- function e(e){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(e)}var t=new Set([`http`,`https`]);function n(e,n){try{let r=new URL(e);return(n?new Set(n.map(e=>e.toLowerCase())):t).has(r.protocol.replace(`:`,``).toLowerCase())}catch{return!1}}function r(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}function i(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString().startsWith(e)}function a(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})?$/.test(e)&&!Number.isNaN(new Date(e).getTime())}function o(e){if(/^(\d{1,3}\.){3}\d{1,3}$/.test(e))return e.split(`.`).every(e=>{let t=parseInt(e,10);return t>=0&&t<=255});try{return new URL(`http://[${e}]/`),!0}catch{return!1}}function s(e){return/^c[a-z0-9]{8,}$/.test(e)}function c(e){return/^[a-z][a-z0-9]{23}$/.test(e)}function l(e){return/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(e)}function u(e,t=21){return e.length===t&&/^[A-Za-z0-9_-]+$/.test(e)}function d(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(e)}function f(e){return e.length===0||e.length%4==1?!1:/^[A-Za-z0-9_-]*={0,2}$/.test(e)}function p(e){return/^[A-Fa-f0-9]+$/.test(e)}function m(e){return/^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(e)}function h(e){return/^\p{Extended_Pictographic}+$/u.test(e)}function g(e){return/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(e)}function _(e){return/^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/.test(e)}function v(e){return/^P(?=\d|T\d)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(\d+H)?(\d+M)?(\d+(?:\.\d+)?S)?)?$/.test(e)}function y(e){return/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/.test(e)}function b(e){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(e)}function x(e){return/^[-+]?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?$/i.test(e)}exports.isBase64=d,exports.isBase64url=f,exports.isCuid=s,exports.isCuid2=c,exports.isDuration=v,exports.isEmail=e,exports.isEmoji=h,exports.isHex=p,exports.isHexColor=m,exports.isIp=o,exports.isIsoDate=i,exports.isIsoDateTime=a,exports.isJwt=g,exports.isNanoid=u,exports.isNumeric=x,exports.isSemver=y,exports.isSlug=b,exports.isTime=_,exports.isUlid=l,exports.isUrl=n,exports.isUuid=r;
2
- //# sourceMappingURL=formats.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formats.cjs","names":["isEmail","v","_DEFAULT_URL_PROTOCOLS","isUrl","parsed","protocols","p","isUuid","isIsoDate","d","isIsoDateTime","isIp","n","o","isCuid","isCuid2","isUlid","isNanoid","length","isBase64","isBase64url","isHex","isHexColor","isEmoji","isJwt","isTime","isDuration","isSemver","isSlug","isNumeric"],"sources":["../src/formats.ts"],"sourcesContent":["/**\n * Pure string format validators.\n *\n * All functions take a `string` and return `boolean`. They are exported as part of the\n * public API so callers can use them independently of any Schema.\n *\n * ```ts\n * import { isEmail, isUuid } from '@vielzeug/spell/predicates';\n * isEmail('foo@bar.com'); // true\n * ```\n */\n\nexport function isEmail(v: string): boolean {\n return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(v);\n}\n\nconst _DEFAULT_URL_PROTOCOLS = new Set(['http', 'https']);\n\nexport function isUrl(v: string, protocols?: readonly string[]): boolean {\n try {\n const parsed = new URL(v);\n const allowed = protocols ? new Set(protocols.map((p) => p.toLowerCase())) : _DEFAULT_URL_PROTOCOLS;\n\n return allowed.has(parsed.protocol.replace(':', '').toLowerCase());\n } catch {\n return false;\n }\n}\n\nexport function isUuid(v: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v);\n}\n\nexport function isIsoDate(v: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(v)) return false;\n\n const d = new Date(v);\n\n return !Number.isNaN(d.getTime()) && d.toISOString().startsWith(v);\n}\n\nexport function isIsoDateTime(v: string): boolean {\n return (\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})?$/.test(v) &&\n !Number.isNaN(new Date(v).getTime())\n );\n}\n\nexport function isIp(v: string): boolean {\n // IPv4\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(v)) {\n return v.split('.').every((o) => {\n const n = parseInt(o, 10);\n\n return n >= 0 && n <= 255;\n });\n }\n\n // IPv6: rely on URL parser\n try {\n new URL(`http://[${v}]/`);\n\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isCuid(v: string): boolean {\n return /^c[a-z0-9]{8,}$/.test(v);\n}\n\nexport function isCuid2(v: string): boolean {\n return /^[a-z][a-z0-9]{23}$/.test(v);\n}\n\nexport function isUlid(v: string): boolean {\n return /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(v);\n}\n\n/**\n * Validates a NanoID string. The default NanoID length is 21 characters; pass a\n * custom length to validate IDs generated with non-default sizes.\n */\nexport function isNanoid(v: string, length = 21): boolean {\n return v.length === length && /^[A-Za-z0-9_-]+$/.test(v);\n}\n\nexport function isBase64(v: string): boolean {\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(v);\n}\n\n/**\n * Validates a base64url-encoded string (RFC 4648 §5). Accepts unpadded and padded forms.\n * A string whose length % 4 === 1 is never valid base64url.\n */\nexport function isBase64url(v: string): boolean {\n if (v.length === 0 || v.length % 4 === 1) return false;\n\n return /^[A-Za-z0-9_-]*={0,2}$/.test(v);\n}\n\nexport function isHex(v: string): boolean {\n return /^[A-Fa-f0-9]+$/.test(v);\n}\n\nexport function isHexColor(v: string): boolean {\n return /^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(v);\n}\n\nexport function isEmoji(v: string): boolean {\n return /^\\p{Extended_Pictographic}+$/u.test(v);\n}\n\nexport function isJwt(v: string): boolean {\n return /^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/.test(v);\n}\n\nexport function isTime(v: string): boolean {\n return /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/.test(v);\n}\n\nexport function isDuration(v: string): boolean {\n return /^P(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+(?:\\.\\d+)?S)?)?$/.test(v);\n}\n\nexport function isSemver(v: string): boolean {\n return /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/.test(\n v,\n );\n}\n\nexport function isSlug(v: string): boolean {\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(v);\n}\n\nexport function isNumeric(v: string): boolean {\n return /^[-+]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?$/i.test(v);\n}\n"],"mappings":"AAYA,SAAgBA,EAAQ,EAAoB,CAC1C,MAAO,mDAAmD,KAAKC,CAAC,CAClE,CAEA,IAAMC,EAAyB,IAAI,IAAI,CAAC,OAAQ,OAAO,CAAC,EAExD,SAAgBC,EAAM,EAAW,EAAwC,CACvE,GAAI,CACF,IAAMC,EAAS,IAAI,IAAIH,CAAC,EAGxB,OAFgBI,EAAY,IAAI,IAAIA,EAAU,IAAK,GAAMC,EAAE,YAAY,CAAC,CAAC,EAAIJ,EAAA,CAE9D,IAAIE,EAAO,SAAS,QAAQ,IAAK,EAAE,CAAC,CAAC,YAAY,CAAC,CACnE,MAAQ,CACN,MAAO,EACT,CACF,CAEA,SAAgBG,EAAO,EAAoB,CACzC,MAAO,kEAAkE,KAAKN,CAAC,CACjF,CAEA,SAAgBO,EAAU,EAAoB,CAC5C,GAAI,CAAC,sBAAsB,KAAKP,CAAC,EAAG,MAAO,GAE3C,IAAMQ,EAAI,IAAI,KAAKR,CAAC,EAEpB,MAAO,CAAC,OAAO,MAAMQ,EAAE,QAAQ,CAAC,GAAKA,EAAE,YAAY,CAAC,CAAC,WAAWR,CAAC,CACnE,CAEA,SAAgBS,EAAc,EAAoB,CAChD,MACE,6EAA6E,KAAKT,CAAC,GACnF,CAAC,OAAO,MAAM,IAAI,KAAKA,CAAC,CAAC,CAAC,QAAQ,CAAC,CAEvC,CAEA,SAAgBU,EAAK,EAAoB,CAEvC,GAAI,0BAA0B,KAAKV,CAAC,EAClC,OAAOA,EAAE,MAAM,GAAG,CAAC,CAAC,MAAO,GAAM,CAC/B,IAAMW,EAAI,SAASC,EAAG,EAAE,EAExB,OAAOD,GAAK,GAAKA,GAAK,GACxB,CAAC,EAIH,GAAI,CAGF,OAFA,IAAI,IAAI,WAAWX,EAAE,GAAG,EAEjB,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAEA,SAAgBa,EAAO,EAAoB,CACzC,MAAO,kBAAkB,KAAKb,CAAC,CACjC,CAEA,SAAgBc,EAAQ,EAAoB,CAC1C,MAAO,sBAAsB,KAAKd,CAAC,CACrC,CAEA,SAAgBe,EAAO,EAAoB,CACzC,MAAO,gCAAgC,KAAKf,CAAC,CAC/C,CAMA,SAAgBgB,EAAS,EAAW,EAAS,GAAa,CACxD,OAAOhB,EAAE,SAAWiB,GAAU,mBAAmB,KAAKjB,CAAC,CACzD,CAEA,SAAgBkB,EAAS,EAAoB,CAC3C,MAAO,mFAAmF,KAAKlB,CAAC,CAClG,CAMA,SAAgBmB,EAAY,EAAoB,CAG9C,OAFInB,EAAE,SAAW,GAAKA,EAAE,OAAS,GAAM,EAAU,GAE1C,yBAAyB,KAAKA,CAAC,CACxC,CAEA,SAAgBoB,EAAM,EAAoB,CACxC,MAAO,iBAAiB,KAAKpB,CAAC,CAChC,CAEA,SAAgBqB,EAAW,EAAoB,CAC7C,MAAO,sDAAsD,KAAKrB,CAAC,CACrE,CAEA,SAAgBsB,EAAQ,EAAoB,CAC1C,MAAO,gCAAgC,KAAKtB,CAAC,CAC/C,CAEA,SAAgBuB,EAAM,EAAoB,CACxC,MAAO,mDAAmD,KAAKvB,CAAC,CAClE,CAEA,SAAgBwB,EAAO,EAAoB,CACzC,MAAO,2CAA2C,KAAKxB,CAAC,CAC1D,CAEA,SAAgByB,EAAW,EAAoB,CAC7C,MAAO,+EAA+E,KAAKzB,CAAC,CAC9F,CAEA,SAAgB0B,EAAS,EAAoB,CAC3C,MAAO,sLAAsL,KAC3L1B,CACF,CACF,CAEA,SAAgB2B,EAAO,EAAoB,CACzC,MAAO,6BAA6B,KAAK3B,CAAC,CAC5C,CAEA,SAAgB4B,EAAU,EAAoB,CAC5C,MAAO,4CAA4C,KAAK5B,CAAC,CAC3D,C"}
package/dist/formats.d.ts DELETED
@@ -1,41 +0,0 @@
1
- /**
2
- * Pure string format validators.
3
- *
4
- * All functions take a `string` and return `boolean`. They are exported as part of the
5
- * public API so callers can use them independently of any Schema.
6
- *
7
- * ```ts
8
- * import { isEmail, isUuid } from '@vielzeug/spell/predicates';
9
- * isEmail('foo@bar.com'); // true
10
- * ```
11
- */
12
- export declare function isEmail(v: string): boolean;
13
- export declare function isUrl(v: string, protocols?: readonly string[]): boolean;
14
- export declare function isUuid(v: string): boolean;
15
- export declare function isIsoDate(v: string): boolean;
16
- export declare function isIsoDateTime(v: string): boolean;
17
- export declare function isIp(v: string): boolean;
18
- export declare function isCuid(v: string): boolean;
19
- export declare function isCuid2(v: string): boolean;
20
- export declare function isUlid(v: string): boolean;
21
- /**
22
- * Validates a NanoID string. The default NanoID length is 21 characters; pass a
23
- * custom length to validate IDs generated with non-default sizes.
24
- */
25
- export declare function isNanoid(v: string, length?: number): boolean;
26
- export declare function isBase64(v: string): boolean;
27
- /**
28
- * Validates a base64url-encoded string (RFC 4648 §5). Accepts unpadded and padded forms.
29
- * A string whose length % 4 === 1 is never valid base64url.
30
- */
31
- export declare function isBase64url(v: string): boolean;
32
- export declare function isHex(v: string): boolean;
33
- export declare function isHexColor(v: string): boolean;
34
- export declare function isEmoji(v: string): boolean;
35
- export declare function isJwt(v: string): boolean;
36
- export declare function isTime(v: string): boolean;
37
- export declare function isDuration(v: string): boolean;
38
- export declare function isSemver(v: string): boolean;
39
- export declare function isSlug(v: string): boolean;
40
- export declare function isNumeric(v: string): boolean;
41
- //# sourceMappingURL=formats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../src/formats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE1C;AAID,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CASvE;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzC;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAM5C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAKhD;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAkBvC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzC;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE1C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,OAAO,CAExD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI9C;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAExC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE1C;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAExC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI3C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzC;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5C"}
package/dist/formats.js DELETED
@@ -1,2 +0,0 @@
1
- function e(e){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(e)}var t=/* @__PURE__ */ new Set([`http`,`https`]);function n(e,n){try{let r=new URL(e);return(n?new Set(n.map(e=>e.toLowerCase())):t).has(r.protocol.replace(`:`,``).toLowerCase())}catch{return!1}}function r(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}function i(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString().startsWith(e)}function a(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})?$/.test(e)&&!Number.isNaN(new Date(e).getTime())}function o(e){if(/^(\d{1,3}\.){3}\d{1,3}$/.test(e))return e.split(`.`).every(e=>{let t=parseInt(e,10);return t>=0&&t<=255});try{return new URL(`http://[${e}]/`),!0}catch{return!1}}function s(e){return/^c[a-z0-9]{8,}$/.test(e)}function c(e){return/^[a-z][a-z0-9]{23}$/.test(e)}function l(e){return/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(e)}function u(e,t=21){return e.length===t&&/^[A-Za-z0-9_-]+$/.test(e)}function d(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(e)}function f(e){return e.length===0||e.length%4==1?!1:/^[A-Za-z0-9_-]*={0,2}$/.test(e)}function p(e){return/^[A-Fa-f0-9]+$/.test(e)}function m(e){return/^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(e)}function h(e){return/^\p{Extended_Pictographic}+$/u.test(e)}function g(e){return/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(e)}function _(e){return/^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/.test(e)}function v(e){return/^P(?=\d|T\d)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(\d+H)?(\d+M)?(\d+(?:\.\d+)?S)?)?$/.test(e)}function y(e){return/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/.test(e)}function b(e){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(e)}function x(e){return/^[-+]?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?$/i.test(e)}export{d as isBase64,f as isBase64url,s as isCuid,c as isCuid2,v as isDuration,e as isEmail,h as isEmoji,p as isHex,m as isHexColor,o as isIp,i as isIsoDate,a as isIsoDateTime,g as isJwt,u as isNanoid,x as isNumeric,y as isSemver,b as isSlug,_ as isTime,l as isUlid,n as isUrl,r as isUuid};
2
- //# sourceMappingURL=formats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formats.js","names":["isEmail","v","_DEFAULT_URL_PROTOCOLS","isUrl","parsed","protocols","p","isUuid","isIsoDate","d","isIsoDateTime","isIp","n","o","isCuid","isCuid2","isUlid","isNanoid","length","isBase64","isBase64url","isHex","isHexColor","isEmoji","isJwt","isTime","isDuration","isSemver","isSlug","isNumeric"],"sources":["../src/formats.ts"],"sourcesContent":["/**\n * Pure string format validators.\n *\n * All functions take a `string` and return `boolean`. They are exported as part of the\n * public API so callers can use them independently of any Schema.\n *\n * ```ts\n * import { isEmail, isUuid } from '@vielzeug/spell/predicates';\n * isEmail('foo@bar.com'); // true\n * ```\n */\n\nexport function isEmail(v: string): boolean {\n return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(v);\n}\n\nconst _DEFAULT_URL_PROTOCOLS = new Set(['http', 'https']);\n\nexport function isUrl(v: string, protocols?: readonly string[]): boolean {\n try {\n const parsed = new URL(v);\n const allowed = protocols ? new Set(protocols.map((p) => p.toLowerCase())) : _DEFAULT_URL_PROTOCOLS;\n\n return allowed.has(parsed.protocol.replace(':', '').toLowerCase());\n } catch {\n return false;\n }\n}\n\nexport function isUuid(v: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v);\n}\n\nexport function isIsoDate(v: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(v)) return false;\n\n const d = new Date(v);\n\n return !Number.isNaN(d.getTime()) && d.toISOString().startsWith(v);\n}\n\nexport function isIsoDateTime(v: string): boolean {\n return (\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:\\d{2})?$/.test(v) &&\n !Number.isNaN(new Date(v).getTime())\n );\n}\n\nexport function isIp(v: string): boolean {\n // IPv4\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(v)) {\n return v.split('.').every((o) => {\n const n = parseInt(o, 10);\n\n return n >= 0 && n <= 255;\n });\n }\n\n // IPv6: rely on URL parser\n try {\n new URL(`http://[${v}]/`);\n\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isCuid(v: string): boolean {\n return /^c[a-z0-9]{8,}$/.test(v);\n}\n\nexport function isCuid2(v: string): boolean {\n return /^[a-z][a-z0-9]{23}$/.test(v);\n}\n\nexport function isUlid(v: string): boolean {\n return /^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(v);\n}\n\n/**\n * Validates a NanoID string. The default NanoID length is 21 characters; pass a\n * custom length to validate IDs generated with non-default sizes.\n */\nexport function isNanoid(v: string, length = 21): boolean {\n return v.length === length && /^[A-Za-z0-9_-]+$/.test(v);\n}\n\nexport function isBase64(v: string): boolean {\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(v);\n}\n\n/**\n * Validates a base64url-encoded string (RFC 4648 §5). Accepts unpadded and padded forms.\n * A string whose length % 4 === 1 is never valid base64url.\n */\nexport function isBase64url(v: string): boolean {\n if (v.length === 0 || v.length % 4 === 1) return false;\n\n return /^[A-Za-z0-9_-]*={0,2}$/.test(v);\n}\n\nexport function isHex(v: string): boolean {\n return /^[A-Fa-f0-9]+$/.test(v);\n}\n\nexport function isHexColor(v: string): boolean {\n return /^#(?:[A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/.test(v);\n}\n\nexport function isEmoji(v: string): boolean {\n return /^\\p{Extended_Pictographic}+$/u.test(v);\n}\n\nexport function isJwt(v: string): boolean {\n return /^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/.test(v);\n}\n\nexport function isTime(v: string): boolean {\n return /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/.test(v);\n}\n\nexport function isDuration(v: string): boolean {\n return /^P(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+(?:\\.\\d+)?S)?)?$/.test(v);\n}\n\nexport function isSemver(v: string): boolean {\n return /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/.test(\n v,\n );\n}\n\nexport function isSlug(v: string): boolean {\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(v);\n}\n\nexport function isNumeric(v: string): boolean {\n return /^[-+]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?$/i.test(v);\n}\n"],"mappings":"AAYA,SAAgBA,EAAQ,EAAoB,CAC1C,MAAO,mDAAmD,KAAKC,CAAC,CAClE,CAEA,IAAMC,kBAAyB,IAAI,IAAI,CAAC,OAAQ,OAAO,CAAC,EAExD,SAAgBC,EAAM,EAAW,EAAwC,CACvE,GAAI,CACF,IAAMC,EAAS,IAAI,IAAIH,CAAC,EAGxB,OAFgBI,EAAY,IAAI,IAAIA,EAAU,IAAK,GAAMC,EAAE,YAAY,CAAC,CAAC,EAAIJ,EAAA,CAE9D,IAAIE,EAAO,SAAS,QAAQ,IAAK,EAAE,CAAC,CAAC,YAAY,CAAC,CACnE,MAAQ,CACN,MAAO,EACT,CACF,CAEA,SAAgBG,EAAO,EAAoB,CACzC,MAAO,kEAAkE,KAAKN,CAAC,CACjF,CAEA,SAAgBO,EAAU,EAAoB,CAC5C,GAAI,CAAC,sBAAsB,KAAKP,CAAC,EAAG,MAAO,GAE3C,IAAMQ,EAAI,IAAI,KAAKR,CAAC,EAEpB,MAAO,CAAC,OAAO,MAAMQ,EAAE,QAAQ,CAAC,GAAKA,EAAE,YAAY,CAAC,CAAC,WAAWR,CAAC,CACnE,CAEA,SAAgBS,EAAc,EAAoB,CAChD,MACE,6EAA6E,KAAKT,CAAC,GACnF,CAAC,OAAO,MAAM,IAAI,KAAKA,CAAC,CAAC,CAAC,QAAQ,CAAC,CAEvC,CAEA,SAAgBU,EAAK,EAAoB,CAEvC,GAAI,0BAA0B,KAAKV,CAAC,EAClC,OAAOA,EAAE,MAAM,GAAG,CAAC,CAAC,MAAO,GAAM,CAC/B,IAAMW,EAAI,SAASC,EAAG,EAAE,EAExB,OAAOD,GAAK,GAAKA,GAAK,GACxB,CAAC,EAIH,GAAI,CAGF,OAFA,IAAI,IAAI,WAAWX,EAAE,GAAG,EAEjB,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAEA,SAAgBa,EAAO,EAAoB,CACzC,MAAO,kBAAkB,KAAKb,CAAC,CACjC,CAEA,SAAgBc,EAAQ,EAAoB,CAC1C,MAAO,sBAAsB,KAAKd,CAAC,CACrC,CAEA,SAAgBe,EAAO,EAAoB,CACzC,MAAO,gCAAgC,KAAKf,CAAC,CAC/C,CAMA,SAAgBgB,EAAS,EAAW,EAAS,GAAa,CACxD,OAAOhB,EAAE,SAAWiB,GAAU,mBAAmB,KAAKjB,CAAC,CACzD,CAEA,SAAgBkB,EAAS,EAAoB,CAC3C,MAAO,mFAAmF,KAAKlB,CAAC,CAClG,CAMA,SAAgBmB,EAAY,EAAoB,CAG9C,OAFInB,EAAE,SAAW,GAAKA,EAAE,OAAS,GAAM,EAAU,GAE1C,yBAAyB,KAAKA,CAAC,CACxC,CAEA,SAAgBoB,EAAM,EAAoB,CACxC,MAAO,iBAAiB,KAAKpB,CAAC,CAChC,CAEA,SAAgBqB,EAAW,EAAoB,CAC7C,MAAO,sDAAsD,KAAKrB,CAAC,CACrE,CAEA,SAAgBsB,EAAQ,EAAoB,CAC1C,MAAO,gCAAgC,KAAKtB,CAAC,CAC/C,CAEA,SAAgBuB,EAAM,EAAoB,CACxC,MAAO,mDAAmD,KAAKvB,CAAC,CAClE,CAEA,SAAgBwB,EAAO,EAAoB,CACzC,MAAO,2CAA2C,KAAKxB,CAAC,CAC1D,CAEA,SAAgByB,EAAW,EAAoB,CAC7C,MAAO,+EAA+E,KAAKzB,CAAC,CAC9F,CAEA,SAAgB0B,EAAS,EAAoB,CAC3C,MAAO,sLAAsL,KAC3L1B,CACF,CACF,CAEA,SAAgB2B,EAAO,EAAoB,CACzC,MAAO,6BAA6B,KAAK3B,CAAC,CAC5C,CAEA,SAAgB4B,EAAU,EAAoB,CAC5C,MAAO,4CAA4C,KAAK5B,CAAC,CAC3D,C"}
@@ -1,2 +0,0 @@
1
- const e=require("./safe-object.cjs");function t(e){return n(e)}function n(e){let t=r(e),n=t;return e.isNullable&&(n={anyOf:[t,{type:`null`}]}),e.description&&(n={...n,description:e.description}),n}function r(t){switch(t.kind){case`unknown`:return{};case`array`:{let e={items:n(t.items),type:`array`};return t.minItems!==void 0&&(e.minItems=t.minItems),t.maxItems!==void 0&&(e.maxItems=t.maxItems),e}case`bigint`:return{type:`integer`};case`boolean`:return{type:`boolean`};case`date`:return{$comment:`Date objects are not representable in JSON Schema. Validate as a string with a date format in JSON contexts.`};case`enum`:return{enum:[...t.values]};case`instanceof`:return{$comment:`Instances of "${t.className}" are not representable in JSON Schema.`};case`intersect`:return{allOf:t.branches.map(n)};case`lazy`:return{};case`literal`:return t.value===null?{type:`null`}:t.value===void 0?{}:{const:t.value};case`map`:return{$comment:`Map type: represented as an object with arbitrary string keys.`,additionalProperties:n(t.value),type:`object`};case`never`:return{not:{}};case`number`:{let e={type:t.typeHint===`integer`?`integer`:`number`};return t.minimum!==void 0&&(e.minimum=t.minimum),t.maximum!==void 0&&(e.maximum=t.maximum),t.exclusiveMinimum!==void 0&&(e.exclusiveMinimum=t.exclusiveMinimum),t.exclusiveMaximum!==void 0&&(e.exclusiveMaximum=t.exclusiveMaximum),t.multipleOf!==void 0&&(e.multipleOf=t.multipleOf),e}case`object`:{let r={},i=[];for(let[a,o]of Object.entries(t.fields))e.defineOwnProperty(r,a,n(o)),o.isOptional||i.push(a);let a={properties:r,type:`object`};return i.length>0&&(a.required=i),t.strict&&(a.additionalProperties=!1),a}case`pipe`:return n(t.to);case`record`:return{additionalProperties:n(t.value),type:`object`};case`set`:return{$comment:`Set<T>: no standard JSON Schema equivalent; treated as an ordered unique-item array.`,items:n(t.items),type:`array`,uniqueItems:!0};case`string`:{let e={type:`string`};return t.minLength!==void 0&&(e.minLength=t.minLength),t.maxLength!==void 0&&(e.maxLength=t.maxLength),t.pattern!=null&&(e.pattern=t.pattern),t.format!==void 0&&(e.format=t.format),t.contentEncoding!==void 0&&(e.contentEncoding=t.contentEncoding),e}case`tuple`:{let e={prefixItems:t.items.map(n),type:`array`};return e.items=t.rest!==null&&n(t.rest),e}case`union`:return{anyOf:t.branches.map(n)};case`variant`:return{discriminator:{propertyName:t.discriminator},oneOf:Object.values(t.branches).map(n)}}}exports.definitionToJsonSchema=t,exports.descriptorToJsonSchema=n;
2
- //# sourceMappingURL=json-schema.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-schema.cjs","names":["require_safe_object","definitionToJsonSchema","descriptorToJsonSchema","definition","base","_descriptorToBase","d","result","out","properties","required","key","fieldDescriptor"],"sources":["../src/json-schema.ts"],"sourcesContent":["import { defineOwnProperty } from './safe-object';\nimport type { JsonSchema, SchemaDescriptor } from './types';\n\nexport function definitionToJsonSchema(definition: SchemaDescriptor): JsonSchema {\n return descriptorToJsonSchema(definition);\n}\n\n/** Converts a schema definition to a draft 2020-12-compatible JSON Schema object. */\nexport function descriptorToJsonSchema(d: SchemaDescriptor): JsonSchema {\n const base = _descriptorToBase(d);\n let result: JsonSchema = base;\n\n if (d.isNullable) result = { anyOf: [base, { type: 'null' }] };\n\n if (d.description) result = { ...result, description: d.description };\n\n return result;\n}\n\nfunction _descriptorToBase(d: SchemaDescriptor): JsonSchema {\n switch (d.kind) {\n case 'unknown':\n return {};\n\n case 'array': {\n const out: JsonSchema = { items: descriptorToJsonSchema(d.items), type: 'array' };\n\n if (d.minItems !== undefined) out.minItems = d.minItems;\n\n if (d.maxItems !== undefined) out.maxItems = d.maxItems;\n\n return out;\n }\n\n case 'bigint':\n return { type: 'integer' };\n\n case 'boolean':\n return { type: 'boolean' };\n\n case 'date':\n return {\n $comment:\n 'Date objects are not representable in JSON Schema. Validate as a string with a date format in JSON contexts.',\n };\n\n case 'enum':\n return { enum: [...d.values] };\n\n case 'instanceof':\n return {\n $comment: `Instances of \"${d.className}\" are not representable in JSON Schema.`,\n };\n\n case 'intersect':\n return { allOf: d.branches.map(descriptorToJsonSchema) };\n\n case 'lazy':\n return {};\n\n case 'literal':\n if (d.value === null) return { type: 'null' };\n\n if (d.value === undefined) return {};\n\n return { const: d.value };\n\n case 'map':\n return {\n $comment: 'Map type: represented as an object with arbitrary string keys.',\n additionalProperties: descriptorToJsonSchema(d.value),\n type: 'object',\n };\n\n case 'never':\n return { not: {} };\n\n case 'number': {\n const out: JsonSchema = { type: d.typeHint === 'integer' ? 'integer' : 'number' };\n\n if (d.minimum !== undefined) out.minimum = d.minimum;\n\n if (d.maximum !== undefined) out.maximum = d.maximum;\n\n if (d.exclusiveMinimum !== undefined) out.exclusiveMinimum = d.exclusiveMinimum;\n\n if (d.exclusiveMaximum !== undefined) out.exclusiveMaximum = d.exclusiveMaximum;\n\n if (d.multipleOf !== undefined) out.multipleOf = d.multipleOf;\n\n return out;\n }\n\n case 'object': {\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const [key, fieldDescriptor] of Object.entries(d.fields)) {\n defineOwnProperty(properties, key, descriptorToJsonSchema(fieldDescriptor));\n\n if (!fieldDescriptor.isOptional) required.push(key);\n }\n\n const out: JsonSchema = { properties, type: 'object' };\n\n if (required.length > 0) out.required = required;\n\n if (d.strict) out.additionalProperties = false;\n\n return out;\n }\n\n case 'pipe':\n return descriptorToJsonSchema(d.to);\n\n case 'record':\n return {\n additionalProperties: descriptorToJsonSchema(d.value),\n type: 'object',\n };\n\n case 'set':\n return {\n $comment: 'Set<T>: no standard JSON Schema equivalent; treated as an ordered unique-item array.',\n items: descriptorToJsonSchema(d.items),\n type: 'array',\n uniqueItems: true,\n };\n\n case 'string': {\n const out: JsonSchema = { type: 'string' };\n\n if (d.minLength !== undefined) out.minLength = d.minLength;\n\n if (d.maxLength !== undefined) out.maxLength = d.maxLength;\n\n if (d.pattern != null) out.pattern = d.pattern;\n\n if (d.format !== undefined) out.format = d.format;\n\n if (d.contentEncoding !== undefined) out.contentEncoding = d.contentEncoding;\n\n return out;\n }\n\n case 'tuple': {\n const out: JsonSchema = {\n prefixItems: d.items.map(descriptorToJsonSchema),\n type: 'array',\n };\n\n if (d.rest !== null) {\n out.items = descriptorToJsonSchema(d.rest);\n } else {\n out.items = false;\n }\n\n return out;\n }\n\n case 'union':\n return { anyOf: d.branches.map(descriptorToJsonSchema) };\n case 'variant':\n return {\n discriminator: { propertyName: d.discriminator },\n oneOf: Object.values(d.branches).map(descriptorToJsonSchema),\n };\n }\n}\n"],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { JsonSchema, SchemaDescriptor } from './types';
2
- export declare function definitionToJsonSchema(definition: SchemaDescriptor): JsonSchema;
3
- /** Converts a schema definition to a draft 2020-12-compatible JSON Schema object. */
4
- export declare function descriptorToJsonSchema(d: SchemaDescriptor): JsonSchema;
5
- //# sourceMappingURL=json-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5D,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,gBAAgB,GAAG,UAAU,CAE/E;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAStE"}
@@ -1,2 +0,0 @@
1
- import{defineOwnProperty as e}from"./safe-object.js";function t(e){return n(e)}function n(e){let t=r(e),n=t;return e.isNullable&&(n={anyOf:[t,{type:`null`}]}),e.description&&(n={...n,description:e.description}),n}function r(t){switch(t.kind){case`unknown`:return{};case`array`:{let e={items:n(t.items),type:`array`};return t.minItems!==void 0&&(e.minItems=t.minItems),t.maxItems!==void 0&&(e.maxItems=t.maxItems),e}case`bigint`:return{type:`integer`};case`boolean`:return{type:`boolean`};case`date`:return{$comment:`Date objects are not representable in JSON Schema. Validate as a string with a date format in JSON contexts.`};case`enum`:return{enum:[...t.values]};case`instanceof`:return{$comment:`Instances of "${t.className}" are not representable in JSON Schema.`};case`intersect`:return{allOf:t.branches.map(n)};case`lazy`:return{};case`literal`:return t.value===null?{type:`null`}:t.value===void 0?{}:{const:t.value};case`map`:return{$comment:`Map type: represented as an object with arbitrary string keys.`,additionalProperties:n(t.value),type:`object`};case`never`:return{not:{}};case`number`:{let e={type:t.typeHint===`integer`?`integer`:`number`};return t.minimum!==void 0&&(e.minimum=t.minimum),t.maximum!==void 0&&(e.maximum=t.maximum),t.exclusiveMinimum!==void 0&&(e.exclusiveMinimum=t.exclusiveMinimum),t.exclusiveMaximum!==void 0&&(e.exclusiveMaximum=t.exclusiveMaximum),t.multipleOf!==void 0&&(e.multipleOf=t.multipleOf),e}case`object`:{let r={},i=[];for(let[a,o]of Object.entries(t.fields))e(r,a,n(o)),o.isOptional||i.push(a);let a={properties:r,type:`object`};return i.length>0&&(a.required=i),t.strict&&(a.additionalProperties=!1),a}case`pipe`:return n(t.to);case`record`:return{additionalProperties:n(t.value),type:`object`};case`set`:return{$comment:`Set<T>: no standard JSON Schema equivalent; treated as an ordered unique-item array.`,items:n(t.items),type:`array`,uniqueItems:!0};case`string`:{let e={type:`string`};return t.minLength!==void 0&&(e.minLength=t.minLength),t.maxLength!==void 0&&(e.maxLength=t.maxLength),t.pattern!=null&&(e.pattern=t.pattern),t.format!==void 0&&(e.format=t.format),t.contentEncoding!==void 0&&(e.contentEncoding=t.contentEncoding),e}case`tuple`:{let e={prefixItems:t.items.map(n),type:`array`};return e.items=t.rest!==null&&n(t.rest),e}case`union`:return{anyOf:t.branches.map(n)};case`variant`:return{discriminator:{propertyName:t.discriminator},oneOf:Object.values(t.branches).map(n)}}}export{t as definitionToJsonSchema,n as descriptorToJsonSchema};
2
- //# sourceMappingURL=json-schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-schema.js","names":["definitionToJsonSchema","descriptorToJsonSchema","definition","base","_descriptorToBase","d","result","out","properties","required","key","fieldDescriptor","defineOwnProperty"],"sources":["../src/json-schema.ts"],"sourcesContent":["import { defineOwnProperty } from './safe-object';\nimport type { JsonSchema, SchemaDescriptor } from './types';\n\nexport function definitionToJsonSchema(definition: SchemaDescriptor): JsonSchema {\n return descriptorToJsonSchema(definition);\n}\n\n/** Converts a schema definition to a draft 2020-12-compatible JSON Schema object. */\nexport function descriptorToJsonSchema(d: SchemaDescriptor): JsonSchema {\n const base = _descriptorToBase(d);\n let result: JsonSchema = base;\n\n if (d.isNullable) result = { anyOf: [base, { type: 'null' }] };\n\n if (d.description) result = { ...result, description: d.description };\n\n return result;\n}\n\nfunction _descriptorToBase(d: SchemaDescriptor): JsonSchema {\n switch (d.kind) {\n case 'unknown':\n return {};\n\n case 'array': {\n const out: JsonSchema = { items: descriptorToJsonSchema(d.items), type: 'array' };\n\n if (d.minItems !== undefined) out.minItems = d.minItems;\n\n if (d.maxItems !== undefined) out.maxItems = d.maxItems;\n\n return out;\n }\n\n case 'bigint':\n return { type: 'integer' };\n\n case 'boolean':\n return { type: 'boolean' };\n\n case 'date':\n return {\n $comment:\n 'Date objects are not representable in JSON Schema. Validate as a string with a date format in JSON contexts.',\n };\n\n case 'enum':\n return { enum: [...d.values] };\n\n case 'instanceof':\n return {\n $comment: `Instances of \"${d.className}\" are not representable in JSON Schema.`,\n };\n\n case 'intersect':\n return { allOf: d.branches.map(descriptorToJsonSchema) };\n\n case 'lazy':\n return {};\n\n case 'literal':\n if (d.value === null) return { type: 'null' };\n\n if (d.value === undefined) return {};\n\n return { const: d.value };\n\n case 'map':\n return {\n $comment: 'Map type: represented as an object with arbitrary string keys.',\n additionalProperties: descriptorToJsonSchema(d.value),\n type: 'object',\n };\n\n case 'never':\n return { not: {} };\n\n case 'number': {\n const out: JsonSchema = { type: d.typeHint === 'integer' ? 'integer' : 'number' };\n\n if (d.minimum !== undefined) out.minimum = d.minimum;\n\n if (d.maximum !== undefined) out.maximum = d.maximum;\n\n if (d.exclusiveMinimum !== undefined) out.exclusiveMinimum = d.exclusiveMinimum;\n\n if (d.exclusiveMaximum !== undefined) out.exclusiveMaximum = d.exclusiveMaximum;\n\n if (d.multipleOf !== undefined) out.multipleOf = d.multipleOf;\n\n return out;\n }\n\n case 'object': {\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const [key, fieldDescriptor] of Object.entries(d.fields)) {\n defineOwnProperty(properties, key, descriptorToJsonSchema(fieldDescriptor));\n\n if (!fieldDescriptor.isOptional) required.push(key);\n }\n\n const out: JsonSchema = { properties, type: 'object' };\n\n if (required.length > 0) out.required = required;\n\n if (d.strict) out.additionalProperties = false;\n\n return out;\n }\n\n case 'pipe':\n return descriptorToJsonSchema(d.to);\n\n case 'record':\n return {\n additionalProperties: descriptorToJsonSchema(d.value),\n type: 'object',\n };\n\n case 'set':\n return {\n $comment: 'Set<T>: no standard JSON Schema equivalent; treated as an ordered unique-item array.',\n items: descriptorToJsonSchema(d.items),\n type: 'array',\n uniqueItems: true,\n };\n\n case 'string': {\n const out: JsonSchema = { type: 'string' };\n\n if (d.minLength !== undefined) out.minLength = d.minLength;\n\n if (d.maxLength !== undefined) out.maxLength = d.maxLength;\n\n if (d.pattern != null) out.pattern = d.pattern;\n\n if (d.format !== undefined) out.format = d.format;\n\n if (d.contentEncoding !== undefined) out.contentEncoding = d.contentEncoding;\n\n return out;\n }\n\n case 'tuple': {\n const out: JsonSchema = {\n prefixItems: d.items.map(descriptorToJsonSchema),\n type: 'array',\n };\n\n if (d.rest !== null) {\n out.items = descriptorToJsonSchema(d.rest);\n } else {\n out.items = false;\n }\n\n return out;\n }\n\n case 'union':\n return { anyOf: d.branches.map(descriptorToJsonSchema) };\n case 'variant':\n return {\n discriminator: { propertyName: d.discriminator },\n oneOf: Object.values(d.branches).map(descriptorToJsonSchema),\n };\n }\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- var e=new Set([`__proto__`,`constructor`,`prototype`]);function t(t){return e.has(t)}function n(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0})}function r(e){let t={};for(let[r,i]of e)n(t,r,i);return t}function i(e){return r(Object.entries(e))}exports.UNSAFE_OBJECT_KEYS=e,exports.cloneRecord=i,exports.defineOwnProperty=n,exports.isUnsafeObjectKey=t,exports.objectFromEntries=r;
2
- //# sourceMappingURL=safe-object.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"safe-object.cjs","names":["UNSAFE_OBJECT_KEYS","isUnsafeObjectKey","key","defineOwnProperty","target","objectFromEntries","out","value","entries","cloneRecord","source"],"sources":["../src/safe-object.ts"],"sourcesContent":["export const UNSAFE_OBJECT_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\nexport function isUnsafeObjectKey(key: string): boolean {\n return UNSAFE_OBJECT_KEYS.has(key);\n}\n\nexport function defineOwnProperty<T>(target: Record<string, T>, key: string, value: T): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n });\n}\n\nexport function objectFromEntries<T>(entries: Iterable<readonly [string, T]>): Record<string, T> {\n const out: Record<string, T> = {};\n\n for (const [key, value] of entries) defineOwnProperty(out, key, value);\n\n return out;\n}\n\nexport function cloneRecord<T>(source: Record<string, T>): Record<string, T> {\n return objectFromEntries(Object.entries(source));\n}\n"],"mappings":"AAAA,IAAaA,EAAqB,IAAI,IAAI,CAAC,YAAa,cAAe,WAAW,CAAC,EAEnF,SAAgBC,EAAkB,EAAsB,CACtD,OAAOD,EAAmB,IAAIE,CAAG,CACnC,CAEA,SAAgBC,EAAqB,EAA2B,EAAa,EAAgB,CAC3F,OAAO,eAAeC,EAAQF,EAAK,CACjC,aAAc,GACd,WAAY,GACZ,QACA,SAAU,EACZ,CAAC,CACH,CAEA,SAAgBG,EAAqB,EAA4D,CAC/F,IAAMC,EAAyB,CAAC,EAEhC,IAAK,GAAM,CAACJ,EAAKK,KAAUC,EAASL,EAAkBG,EAAKJ,EAAKK,CAAK,EAErE,OAAOD,CACT,CAEA,SAAgBG,EAAe,EAA8C,CAC3E,OAAOJ,EAAkB,OAAO,QAAQK,CAAM,CAAC,CACjD,C"}