mirror of
https://github.com/lynchmarkHQ/lynchmark.com.git
synced 2026-10-17 09:17:53 +00:00
35 lines
910 B
JavaScript
35 lines
910 B
JavaScript
let ajvPromise;
|
|
|
|
const loadAjv = async () => {
|
|
const [{ default: Ajv }, { default: addFormats }] = await Promise.all([
|
|
import("https://esm.sh/ajv@8.17.1"),
|
|
import("https://esm.sh/ajv-formats@3.0.1"),
|
|
]);
|
|
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
addFormats(ajv);
|
|
return ajv;
|
|
};
|
|
|
|
const getAjv = () =>
|
|
(ajvPromise ??= loadAjv().catch((error) => {
|
|
ajvPromise = undefined;
|
|
throw error;
|
|
}));
|
|
|
|
async function validateJSON(data, schema) {
|
|
try {
|
|
const validate = (await getAjv()).compile(schema);
|
|
const valid = validate(data);
|
|
return {
|
|
valid,
|
|
errors: (validate.errors ?? []).map(
|
|
({ instancePath, message }) => `${instancePath || "(root)"} ${message}`,
|
|
),
|
|
};
|
|
} catch (error) {
|
|
return { valid: false, errors: [error?.message ?? String(error)] };
|
|
}
|
|
}
|
|
export default validateJSON;
|
|
// Generation time: 91.986s
|
|
// Result: PASS
|