UNPKG

@foal/core

Version:

Full-featured Node.js framework, with no complexity

42 lines (41 loc) 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._instanceWrapper = void 0; exports.getAjvInstance = getAjvInstance; // 3p const ajv_1 = require("ajv"); const core_1 = require("../../core"); const ajv_formats_1 = require("ajv-formats"); // This is a little hack to test the customized configuration of `getAjvInstance`. // tslint:disable-next-line:variable-name exports._instanceWrapper = { instance: undefined }; /** * Return the Ajv instance used internally by FoalTS validation hooks. * * It has this default configuration: * - coerceTypes: true (Change data type of data to match `type` keyword.) * - removeAdditional: true (Remove additional properties when `additionalProperties` keyword is false.) * - useDefaults: true (Replace missing properties and items with the values from corresponding `default` keyword) * * * @export * @returns {Ajv} The AJV instance */ function getAjvInstance() { if (!exports._instanceWrapper.instance) { exports._instanceWrapper.instance = new ajv_1.default({ $data: core_1.Config.get('settings.ajv.$data', 'boolean'), allErrors: core_1.Config.get('settings.ajv.allErrors', 'boolean'), coerceTypes: core_1.Config.get('settings.ajv.coerceTypes', 'boolean|string', true), removeAdditional: core_1.Config.get('settings.ajv.removeAdditional', 'boolean|string', true), useDefaults: core_1.Config.get('settings.ajv.useDefaults', 'boolean|string', true), strict: core_1.Config.get('settings.ajv.strict', 'boolean|string'), }); exports._instanceWrapper.instance.addKeyword({ keyword: 'components' }); exports._instanceWrapper.instance.addKeyword({ keyword: 'example' }); (0, ajv_formats_1.default)(exports._instanceWrapper.instance); } return exports._instanceWrapper.instance; }