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