summary refs log tree commit diff
path: root/util/src/schemas/Validator.ts
diff options
context:
space:
mode:
Diffstat (limited to 'util/src/schemas/Validator.ts')
-rw-r--r--util/src/schemas/Validator.ts54
1 files changed, 0 insertions, 54 deletions
diff --git a/util/src/schemas/Validator.ts b/util/src/schemas/Validator.ts
deleted file mode 100644

index e5f12ac5..00000000 --- a/util/src/schemas/Validator.ts +++ /dev/null
@@ -1,54 +0,0 @@ -import Ajv from "ajv"; -import addFormats from "ajv-formats"; -import fs from "fs"; -import path from "path"; - -const SchemaPath = path.join(__dirname, "..", "..", "..", "api", "assets", "schemas.json"); -const schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" })); - -export const ajv = new Ajv({ - allErrors: true, - parseDate: true, - allowDate: true, - schemas, - coerceTypes: true, - messages: true, - strict: true, - strictRequired: true -}); - -addFormats(ajv); - -export function validateSchema<G>(schema: string, data: G): G { - const valid = ajv.validate(schema, normalizeBody(data)); - if (!valid) throw ajv.errors; - return data; -} - -// Normalizer is introduced to workaround https://github.com/ajv-validator/ajv/issues/1287 -// this removes null values as ajv doesn't treat them as undefined -// normalizeBody allows to handle circular structures without issues -// taken from https://github.com/serverless/serverless/blob/master/lib/classes/ConfigSchemaHandler/index.js#L30 (MIT license) -export const normalizeBody = (body: any = {}) => { - const normalizedObjectsSet = new WeakSet(); - const normalizeObject = (object: any) => { - if (normalizedObjectsSet.has(object)) return; - normalizedObjectsSet.add(object); - if (Array.isArray(object)) { - for (const [index, value] of object.entries()) { - if (typeof value === "object") normalizeObject(value); - } - } else { - for (const [key, value] of Object.entries(object)) { - if (value == null) { - if (key === "icon" || key === "avatar" || key === "banner" || key === "splash" || key === "discovery_splash") continue; - delete object[key]; - } else if (typeof value === "object") { - normalizeObject(value); - } - } - } - }; - normalizeObject(body); - return body; -}; \ No newline at end of file