sveltekit-superforms
Version:
Making SvelteKit forms a pleasure to use!
49 lines (48 loc) • 1.61 kB
JavaScript
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);