UNPKG

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
/** * @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=