UNPKG

@awesomeniko/kafka-trail

Version:

A Node.js library for managing message queue with Kafka

57 lines 1.98 kB
import { KTSchemaValidationError } from "../schema-errors.js"; const deriveSchemaMeta = (schemaMeta) => { if (!schemaMeta || typeof schemaMeta !== "object") { return {}; } const metaRecord = schemaMeta; const schemaNameCandidate = metaRecord.schemaName ?? metaRecord.id ?? metaRecord.title; const schemaVersionCandidate = metaRecord.schemaVersion ?? metaRecord.version; const schemaIdCandidate = metaRecord.schemaId ?? metaRecord.id; const result = {}; if (typeof schemaNameCandidate === "string") { result.schemaName = schemaNameCandidate; } if (typeof schemaVersionCandidate === "string") { result.schemaVersion = schemaVersionCandidate; } if (typeof schemaIdCandidate === "string") { result.schemaId = schemaIdCandidate; } return result; }; export const createZodCodec = (schema, options) => { const parseWithSchema = (value, source) => { const result = schema.safeParse(value); if (!result.success) { throw new KTSchemaValidationError({ message: `Zod validation failed during ${source}: ${result.error.message}`, source, details: result.error, }); } return result.data; }; const codec = { encode(data) { return JSON.stringify(parseWithSchema(data, 'encode')); }, decode(data) { const stringData = Buffer.isBuffer(data) ? data.toString() : data; const parsed = JSON.parse(stringData); return parseWithSchema(parsed, 'decode'); }, validate(data) { parseWithSchema(data, 'validate'); }, }; const schemaDerivedMeta = deriveSchemaMeta(schema.meta?.()); codec.schemaMeta = { provider: "zod", ...schemaDerivedMeta, ...options?.schemaMeta, }; return codec; }; //# sourceMappingURL=zod-adapter.js.map