mirror of
https://github.com/lynchmarkHQ/lynchmark.com.git
synced 2026-10-17 01:07:53 +00:00
40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
let _ajvP
|
|
|
|
const _ajv = async () => {
|
|
if (_ajvP) return _ajvP
|
|
_ajvP = (async () => {
|
|
const [{ default: Ajv }, { default: addFormats }] = await Promise.all([
|
|
import("https://esm.sh/ajv@8.12.0"),
|
|
import("https://esm.sh/ajv-formats@2.1.1")
|
|
])
|
|
const ajv = new Ajv({ allErrors: true, strict: false, allowUnionTypes: true })
|
|
addFormats(ajv)
|
|
return ajv
|
|
})()
|
|
return _ajvP
|
|
}
|
|
|
|
const _err = e => {
|
|
let p = e.instancePath || ""
|
|
let m = e.message || "is invalid"
|
|
if (e.keyword === "required" && e.params?.missingProperty) {
|
|
p += `/${e.params.missingProperty}`
|
|
m = "is required"
|
|
} else if (e.keyword === "additionalProperties" && e.params?.additionalProperty) {
|
|
p += `/${e.params.additionalProperty}`
|
|
m = "is not allowed"
|
|
}
|
|
return `${p || "/"} ${m}`.trim()
|
|
}
|
|
|
|
async function validateJSON(json, schema) {
|
|
let ajv, v
|
|
try { ajv = await _ajv() } catch (e) { return { valid: false, errors: [String(e?.message || e)] } }
|
|
try { v = ajv.compile(schema) } catch (e) { return { valid: false, errors: [String(e?.message || e)] } }
|
|
|
|
const valid = !!v(json)
|
|
return { valid, errors: valid ? [] : (v.errors || []).map(_err) }
|
|
}
|
|
export default validateJSON;
|
|
// Generation time: 95.873s
|
|
// Result: PASS
|