@awesomeniko/kafka-trail
Version:
A Node.js library for managing message queue with Kafka
57 lines • 1.98 kB
JavaScript
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