UNPKG

sveltekit-superforms

Version:

Making SvelteKit forms a pleasure to use!

49 lines (48 loc) 1.61 kB
import { safeParseAsync, toJSONSchema, $ZodDiscriminatedUnion } from 'zod/v4/core'; import { createAdapter } from './adapters.js'; import { memoize } from '../memoize.js'; const defaultJSONSchemaOptions = { unrepresentable: 'any', override: (ctx) => { const def = ctx.zodSchema._zod.def; if (def.type === 'date') { ctx.jsonSchema.type = 'string'; ctx.jsonSchema.format = 'date-time'; } } }; /* @__NO_SIDE_EFFECTS__ */ export const zodToJSONSchema = (schema, options) => { return toJSONSchema(schema, { ...defaultJSONSchemaOptions, ...options }); }; async function validate(schema, data, error) { const result = await safeParseAsync(schema, data, { error }); if (result.success) { return { data: result.data, success: true }; } return { issues: result.error.issues.map(({ message, path }) => ({ message, path })), success: false }; } function _zod4(schema, options) { return createAdapter({ superFormValidationLibrary: 'zod4', validate: async (data) => { return validate(schema, data, options?.error); }, jsonSchema: options?.jsonSchema ?? zodToJSONSchema(schema, options?.config), defaults: options?.defaults }); } function _zod4Client(schema, options) { return { superFormValidationLibrary: 'zod4', validate: async (data) => validate(schema, data, options?.error) }; } export const zod = /* @__PURE__ */ memoize(_zod4); export const zodClient = /* @__PURE__ */ memoize(_zod4Client);