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

79 lines (78 loc) 6.51 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as Ajv from 'ajv'; import { SchemaValidatorFactory } from './schemavalidatorfactory'; export class AjvSchemaValidatorFactory extends SchemaValidatorFactory { constructor() { super(); this.ajv = new Ajv({ schemaId: 'auto', allErrors: true }); } /** * @param {?} schema * @return {?} */ createValidatorFn(schema) { /** @type {?} */ const validate = this.ajv.compile(schema); return (value) => { /** @type {?} */ const valid = validate(value); if (valid) { return null; } /** @type {?} */ const schemaErrors = validate.errors.reduce((errors, error) => { /** @type {?} */ let 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 {?} */ getSchema(schema, ref) { // throws if compilation fails this.ajv.compile(schema); return this.getDefinition(schema, ref); } /** * @param {?} schema * @param {?} ref * @return {?} */ getDefinition(schema, ref) { /** @type {?} */ let foundSchema = schema; ref.split('/').slice(1).forEach(ptr => { if (ptr) { foundSchema = foundSchema[ptr]; } }); return foundSchema; } } if (false) { /** @type {?} */ AjvSchemaValidatorFactory.prototype.ajv; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWp2LXNjaGVtYS12YWxpZGF0b3ItZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zY2hlbWEtZm9ybXMvIiwic291cmNlcyI6WyJsaWIvYWp2LXNjaGVtYS12YWxpZGF0b3ItZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFHM0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbEUsTUFBTSxnQ0FBaUMsU0FBUSxzQkFBc0I7SUFJbkU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDakIsUUFBUSxFQUFFLE1BQU07WUFDaEIsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO0tBQ0o7Ozs7O0lBRUQsaUJBQWlCLENBQUMsTUFBYzs7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUMsTUFBTSxDQUFDLENBQUMsS0FBVSxFQUF1QixFQUFFOztZQUV6QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDVixNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2I7O1lBRUQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7O2dCQUU1RCxJQUFJLElBQUksQ0FBUztnQkFDakIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDOztvQkFFdEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztpQkFDM0M7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDcEQ7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHO29CQUNiLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTztvQkFDbkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2lCQUN2QixDQUFDO2dCQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRVAsTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7U0FDN0IsQ0FBQztLQUNIOzs7Ozs7SUFFRCxTQUFTLENBQUMsTUFBYyxFQUFFLEdBQVc7O1FBRW5DLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN4Qzs7Ozs7O0lBRU8sYUFBYSxDQUFDLE1BQVcsRUFBRSxHQUFXOztRQUM1QyxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDekIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNoQztTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxXQUFXLENBQUM7O0NBRXRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQWp2IGZyb20gJ2Fqdic7XG5cbmltcG9ydCB7IFNjaGVtYSwgU2NoZW1hRXJyb3JzLCBTY2hlbWFWYWxpZGF0b3JGbiB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7IFNjaGVtYVZhbGlkYXRvckZhY3RvcnkgfSBmcm9tICcuL3NjaGVtYXZhbGlkYXRvcmZhY3RvcnknO1xuXG5cbmV4cG9ydCBjbGFzcyBBanZTY2hlbWFWYWxpZGF0b3JGYWN0b3J5IGV4dGVuZHMgU2NoZW1hVmFsaWRhdG9yRmFjdG9yeSB7XG5cbiAgcHJvdGVjdGVkIGFqdjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWp2ID0gbmV3IEFqdih7XG4gICAgICBzY2hlbWFJZDogJ2F1dG8nLFxuICAgICAgYWxsRXJyb3JzOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVWYWxpZGF0b3JGbihzY2hlbWE6IFNjaGVtYSk6IFNjaGVtYVZhbGlkYXRvckZuIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9IHRoaXMuYWp2LmNvbXBpbGUoc2NoZW1hKTtcblxuICAgIHJldHVybiAodmFsdWU6IGFueSk6IFNjaGVtYUVycm9ycyB8IG51bGwgPT4ge1xuXG4gICAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlKHZhbHVlKTtcbiAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NoZW1hRXJyb3JzID0gdmFsaWRhdGUuZXJyb3JzLnJlZHVjZSgoZXJyb3JzLCBlcnJvcikgPT4ge1xuXG4gICAgICAgIGxldCBwYXRoOiBzdHJpbmc7XG4gICAgICAgIGlmIChlcnJvci5zY2hlbWFQYXRoID09PSAnIy9yZXF1aXJlZCcpIHtcbiAgICAgICAgICAvLyBkZW5vcm1hbGl6ZSByZXF1aXJlZFxuICAgICAgICAgIHBhdGggPSAnLycgKyBlcnJvci5wYXJhbXMubWlzc2luZ1Byb3BlcnR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdGggPSBlcnJvci5kYXRhUGF0aC5yZXBsYWNlKC8oXFwufFxcW3xcXF0uKS9nLCAnLycpO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yc1twYXRoXSA9IHtcbiAgICAgICAgICBjb2RlOiBlcnJvci5rZXl3b3JkLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgIH0sIHt9KTtcblxuICAgICAgcmV0dXJuIHNjaGVtYUVycm9ycyB8fCBudWxsO1xuICAgIH07XG4gIH1cblxuICBnZXRTY2hlbWEoc2NoZW1hOiBTY2hlbWEsIHJlZjogc3RyaW5nKSB7XG4gICAgLy8gdGhyb3dzIGlmIGNvbXBpbGF0aW9uIGZhaWxzXG4gICAgdGhpcy5hanYuY29tcGlsZShzY2hlbWEpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RGVmaW5pdGlvbihzY2hlbWEsIHJlZik7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmluaXRpb24oc2NoZW1hOiBhbnksIHJlZjogc3RyaW5nKSB7XG4gICAgbGV0IGZvdW5kU2NoZW1hID0gc2NoZW1hO1xuICAgIHJlZi5zcGxpdCgnLycpLnNsaWNlKDEpLmZvckVhY2gocHRyID0+IHtcbiAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgZm91bmRTY2hlbWEgPSBmb3VuZFNjaGVtYVtwdHJdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmb3VuZFNjaGVtYTtcbiAgfVxufVxuXG4iXX0=