UNPKG

@awesomeniko/kafka-trail

Version:

A Node.js library for managing message queue with Kafka

71 lines 2.35 kB
import { KTSchemaValidationError } from "../schema-errors.js"; const deriveSchemaMeta = (schema) => { const schemaNameCandidate = schema["x-schema-name"] ?? schema.title ?? schema.$id; const schemaVersionCandidate = schema["x-schema-version"] ?? schema.schemaVersion ?? schema.version; const schemaIdCandidate = schema.$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 createAjvCodec = (params) => { const serialize = params.serialize ?? JSON.stringify; const parse = params.parse ?? ((data) => JSON.parse(data)); const ensureValid = (data, source) => { if (!params.validate(data)) { throw new KTSchemaValidationError({ message: `AJV validation failed during ${source}`, source, details: params.validate.errors, }); } return data; }; const codec = { encode(data) { const validData = ensureValid(data, 'encode'); return serialize(validData); }, decode(data) { const stringData = Buffer.isBuffer(data) ? data.toString() : data; const parsed = parse(stringData); return ensureValid(parsed, 'decode'); }, validate(data) { ensureValid(data, 'validate'); }, }; codec.schemaMeta = { provider: "ajv", ...params.schemaMeta, }; return codec; }; export const createAjvCodecFromSchema = (params) => { const validate = params.ajv.compile(params.schema); const schemaDerivedMeta = deriveSchemaMeta(params.schema); const createParams = { validate, schemaMeta: { ...schemaDerivedMeta, ...params.schemaMeta, }, }; if (params.serialize) { createParams.serialize = params.serialize; } if (params.parse) { createParams.parse = params.parse; } return createAjvCodec(createParams); }; //# sourceMappingURL=ajv-adapter.js.map