2023-10-07 20:48:35 +02:00
|
|
|
import Ajv from "https://esm.sh/ajv@8.8.1?pin=v58";
|
|
|
|
import addFormats from "https://esm.sh/ajv-formats@2.1.1";
|
|
|
|
import yaml from "npm:js-yaml";
|
|
|
|
|
2023-10-07 20:01:09 +02:00
|
|
|
import { W3PData } from "./w3pdata.js";
|
|
|
|
|
2023-10-07 20:48:35 +02:00
|
|
|
const w3pd = new W3PData();
|
|
|
|
await w3pd.init();
|
|
|
|
|
|
|
|
const ajv = new Ajv({ strict: false });
|
|
|
|
addFormats(ajv);
|
|
|
|
|
|
|
|
async function loadSchemas() {
|
|
|
|
const out = {};
|
|
|
|
for await (const f of Deno.readDir(schemaDir)) {
|
|
|
|
const col = f.name.split(".")[0];
|
|
|
|
out[col] = yaml.load(await Deno.readTextFile(`${schemaDir}/${f.name}`));
|
|
|
|
}
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|
|
|
|
const matrix = {
|
|
|
|
categories: "category",
|
|
|
|
projects: "project",
|
|
|
|
};
|
|
|
|
|
|
|
|
const schemaDir = "./schema";
|
|
|
|
const schemas = await loadSchemas();
|
|
|
|
|
|
|
|
for (const col of Object.keys(w3pd.data)) {
|
|
|
|
const validator = ajv.compile(schemas[matrix[col]]);
|
2023-10-07 20:01:09 +02:00
|
|
|
|
2023-10-07 20:48:35 +02:00
|
|
|
for (const item of w3pd.data[col]) {
|
2023-10-07 21:06:05 +02:00
|
|
|
|
|
|
|
if(Object.keys(item).length === 1) {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
2023-10-07 21:42:53 +02:00
|
|
|
Deno.test(`${col}/${item.id} ` + (col === 'projects' ? `[${item.categories?.join(', ')}]` : ''), () => {
|
2023-10-07 20:48:35 +02:00
|
|
|
if (!validator(item)) {
|
|
|
|
throw validator.errors;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|