30070f7f9c
CD / Release (push) Successful in 33s
Refactoring the action from a composite to Node action. This change improves security through pinning of packages as well as better test-ability and error handling. Reviewed-on: #47 Co-authored-by: Timo Behrendt <t.behrendt@t00n.de> Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
26 lines
711 B
TypeScript
26 lines
711 B
TypeScript
import Ajv from "ajv";
|
|
|
|
export const validateJson = async (jsonFileContent: string): Promise<void> => {
|
|
const jsonObject = JSON.parse(jsonFileContent);
|
|
|
|
const schema = jsonObject["$schema"];
|
|
if (!schema) {
|
|
throw new Error("No schema found in JSON file.");
|
|
}
|
|
|
|
const schemaUrl = new URL(schema);
|
|
|
|
const schemaContent = await fetch(schemaUrl.toString());
|
|
const schemaText = await schemaContent.text();
|
|
const schemaObject = JSON.parse(schemaText);
|
|
|
|
const validator = new Ajv({
|
|
strict: false,
|
|
});
|
|
const validate = validator.compile(schemaObject);
|
|
const isValid = validate(jsonObject);
|
|
if (!isValid) {
|
|
throw new Error(`JSON file is not valid: ${validator.errorsText()}`);
|
|
}
|
|
};
|