@foal/core
Version:
Full-featured Node.js framework, with no complexity
42 lines (41 loc) • 1.89 kB
JavaScript
;
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;
}