ajv-keywords icon indicating copy to clipboard operation
ajv-keywords copied to clipboard

Example of async keyword with a standalone gen

Open manuganji opened this issue 2 years ago • 0 comments
trafficstars

Hi,

I tried to follow your doc on adding keywords with a compile function. When I try to generate the standalone validator, I get

ValueError: CodeGen: "code" for keyword0 not defined

This is the keyword code for reference:

ajv.addKeyword({
	keyword: "notExists",
	async: true,
	schema: true,
	valid: true,
	modifying: false,
	error: {
		message: ({data, schema, gen}) => {
			return gen.name(schema.column) + " already exists";
		}
	},
	type: ["string", "number"],
	schemaType: "object",
	compile: (schema) => {
		return async function (data) {
			try {
				const res = await fetch(`/api/ajv/exists`, {
					body: JSON.stringify({
						column: schema.column,
						table: schema.table,
						value: data,
					}),
					method: "GET",
				}).then<boolean>((res) => res.json());
				return !res;
			} catch (e) {
				return true;
			}
		};
	},
	metaSchema: {
		type: "object",
		properties: {
			column: { type: "string" },
			table: { type: "string" },
		},
		required: ["column", "table"],
	},
});```

manuganji avatar Sep 24 '23 11:09 manuganji