ngx-schema-forms
Version:
New features: - Ajv schema validator. - Angular forms compatible: Property tree is created using FormGroup, FormArray and FormControl classes. - Array now properly loads initial data from model. - WidgetTyep: WidgetRegistry now supports WidgetType, now wo
98 lines (97 loc) • 7.21 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import * as Ajv from 'ajv';
import { SchemaValidatorFactory } from './schemavalidatorfactory';
var AjvSchemaValidatorFactory = /** @class */ (function (_super) {
tslib_1.__extends(AjvSchemaValidatorFactory, _super);
function AjvSchemaValidatorFactory() {
var _this = _super.call(this) || this;
_this.ajv = new Ajv({
schemaId: 'auto',
allErrors: true
});
return _this;
}
/**
* @param {?} schema
* @return {?}
*/
AjvSchemaValidatorFactory.prototype.createValidatorFn = /**
* @param {?} schema
* @return {?}
*/
function (schema) {
/** @type {?} */
var validate = this.ajv.compile(schema);
return function (value) {
/** @type {?} */
var valid = validate(value);
if (valid) {
return null;
}
/** @type {?} */
var schemaErrors = validate.errors.reduce(function (errors, error) {
/** @type {?} */
var path;
if (error.schemaPath === '#/required') {
// denormalize required
path = '/' + error.params.missingProperty;
}
else {
path = error.dataPath.replace(/(\.|\[|\].)/g, '/');
}
errors[path] = {
code: error.keyword,
message: error.message
};
return errors;
}, {});
return schemaErrors || null;
};
};
/**
* @param {?} schema
* @param {?} ref
* @return {?}
*/
AjvSchemaValidatorFactory.prototype.getSchema = /**
* @param {?} schema
* @param {?} ref
* @return {?}
*/
function (schema, ref) {
// throws if compilation fails
this.ajv.compile(schema);
return this.getDefinition(schema, ref);
};
/**
* @param {?} schema
* @param {?} ref
* @return {?}
*/
AjvSchemaValidatorFactory.prototype.getDefinition = /**
* @param {?} schema
* @param {?} ref
* @return {?}
*/
function (schema, ref) {
/** @type {?} */
var foundSchema = schema;
ref.split('/').slice(1).forEach(function (ptr) {
if (ptr) {
foundSchema = foundSchema[ptr];
}
});
return foundSchema;
};
return AjvSchemaValidatorFactory;
}(SchemaValidatorFactory));
export { AjvSchemaValidatorFactory };
if (false) {
/** @type {?} */
AjvSchemaValidatorFactory.prototype.ajv;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWp2LXNjaGVtYS12YWxpZGF0b3ItZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zY2hlbWEtZm9ybXMvIiwic291cmNlcyI6WyJsaWIvYWp2LXNjaGVtYS12YWxpZGF0b3ItZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBRzNCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2xFLElBQUE7SUFBK0MscURBQXNCO0lBSW5FO1FBQUEsWUFDRSxpQkFBTyxTQUtSO1FBSkMsS0FBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUNqQixRQUFRLEVBQUUsTUFBTTtZQUNoQixTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDLENBQUM7O0tBQ0o7Ozs7O0lBRUQscURBQWlCOzs7O0lBQWpCLFVBQWtCLE1BQWM7O1FBQzlCLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLE1BQU0sQ0FBQyxVQUFDLEtBQVU7O1lBRWhCLElBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUM7YUFDYjs7WUFFRCxJQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFDLE1BQU0sRUFBRSxLQUFLOztnQkFFeEQsSUFBSSxJQUFJLENBQVM7Z0JBQ2pCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQzs7b0JBRXRDLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7aUJBQzNDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQ3BEO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRztvQkFDYixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU87b0JBQ25CLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztpQkFDdkIsQ0FBQztnQkFDRixNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVQLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1NBQzdCLENBQUM7S0FDSDs7Ozs7O0lBRUQsNkNBQVM7Ozs7O0lBQVQsVUFBVSxNQUFjLEVBQUUsR0FBVzs7UUFFbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFekIsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3hDOzs7Ozs7SUFFTyxpREFBYTs7Ozs7Y0FBQyxNQUFXLEVBQUUsR0FBVzs7UUFDNUMsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLEdBQUc7WUFDakMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDUixXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQzs7b0NBOUR2QjtFQU0rQyxzQkFBc0IsRUEwRHBFLENBQUE7QUExREQscUNBMERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQWp2IGZyb20gJ2Fqdic7XG5cbmltcG9ydCB7IFNjaGVtYSwgU2NoZW1hRXJyb3JzLCBTY2hlbWFWYWxpZGF0b3JGbiB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7IFNjaGVtYVZhbGlkYXRvckZhY3RvcnkgfSBmcm9tICcuL3NjaGVtYXZhbGlkYXRvcmZhY3RvcnknO1xuXG5cbmV4cG9ydCBjbGFzcyBBanZTY2hlbWFWYWxpZGF0b3JGYWN0b3J5IGV4dGVuZHMgU2NoZW1hVmFsaWRhdG9yRmFjdG9yeSB7XG5cbiAgcHJvdGVjdGVkIGFqdjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWp2ID0gbmV3IEFqdih7XG4gICAgICBzY2hlbWFJZDogJ2F1dG8nLFxuICAgICAgYWxsRXJyb3JzOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVWYWxpZGF0b3JGbihzY2hlbWE6IFNjaGVtYSk6IFNjaGVtYVZhbGlkYXRvckZuIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9IHRoaXMuYWp2LmNvbXBpbGUoc2NoZW1hKTtcblxuICAgIHJldHVybiAodmFsdWU6IGFueSk6IFNjaGVtYUVycm9ycyB8IG51bGwgPT4ge1xuXG4gICAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlKHZhbHVlKTtcbiAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NoZW1hRXJyb3JzID0gdmFsaWRhdGUuZXJyb3JzLnJlZHVjZSgoZXJyb3JzLCBlcnJvcikgPT4ge1xuXG4gICAgICAgIGxldCBwYXRoOiBzdHJpbmc7XG4gICAgICAgIGlmIChlcnJvci5zY2hlbWFQYXRoID09PSAnIy9yZXF1aXJlZCcpIHtcbiAgICAgICAgICAvLyBkZW5vcm1hbGl6ZSByZXF1aXJlZFxuICAgICAgICAgIHBhdGggPSAnLycgKyBlcnJvci5wYXJhbXMubWlzc2luZ1Byb3BlcnR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdGggPSBlcnJvci5kYXRhUGF0aC5yZXBsYWNlKC8oXFwufFxcW3xcXF0uKS9nLCAnLycpO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yc1twYXRoXSA9IHtcbiAgICAgICAgICBjb2RlOiBlcnJvci5rZXl3b3JkLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgIH0sIHt9KTtcblxuICAgICAgcmV0dXJuIHNjaGVtYUVycm9ycyB8fCBudWxsO1xuICAgIH07XG4gIH1cblxuICBnZXRTY2hlbWEoc2NoZW1hOiBTY2hlbWEsIHJlZjogc3RyaW5nKSB7XG4gICAgLy8gdGhyb3dzIGlmIGNvbXBpbGF0aW9uIGZhaWxzXG4gICAgdGhpcy5hanYuY29tcGlsZShzY2hlbWEpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RGVmaW5pdGlvbihzY2hlbWEsIHJlZik7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmluaXRpb24oc2NoZW1hOiBhbnksIHJlZjogc3RyaW5nKSB7XG4gICAgbGV0IGZvdW5kU2NoZW1hID0gc2NoZW1hO1xuICAgIHJlZi5zcGxpdCgnLycpLnNsaWNlKDEpLmZvckVhY2gocHRyID0+IHtcbiAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgZm91bmRTY2hlbWEgPSBmb3VuZFNjaGVtYVtwdHJdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmb3VuZFNjaGVtYTtcbiAgfVxufVxuXG4iXX0=