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

115 lines (114 loc) 8.76 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import * as ZSchema from 'z-schema'; import { SchemaValidatorFactory } from './schemavalidatorfactory'; var ZSchemaValidatorFactory = /** @class */ (function (_super) { tslib_1.__extends(ZSchemaValidatorFactory, _super); function ZSchemaValidatorFactory() { var _this = _super.call(this) || this; _this.zschema = new ZSchema({ breakOnFirstError: false }); return _this; } /** * @param {?} schema * @return {?} */ ZSchemaValidatorFactory.prototype.createValidatorFn = /** * @param {?} schema * @return {?} */ function (schema) { var _this = this; return function (value) { if (schema["type"] === 'number' || schema["type"] === 'integer') { value = +value; } _this.zschema.validate(value, schema); /** @type {?} */ var errors = _this.zschema.getLastErrors(); if (!errors) { return null; } _this.denormalizeRequiredPropertyPaths(errors); /** @type {?} */ var schemaErrors = errors.reduce(function (_errors, error) { error.path = error.path.slice(1); _errors[error.path] = error; return _errors; }, {}); return schemaErrors || null; }; }; /** * @param {?} schema * @param {?} ref * @return {?} */ ZSchemaValidatorFactory.prototype.getSchema = /** * @param {?} schema * @param {?} ref * @return {?} */ function (schema, ref) { /** @type {?} */ var isValid = this.zschema.compileSchema(schema); if (isValid) { return this.getDefinition(schema, ref); } else { throw this.zschema.getLastError(); } }; /** * @param {?} err * @return {?} */ ZSchemaValidatorFactory.prototype.denormalizeRequiredPropertyPaths = /** * @param {?} err * @return {?} */ function (err) { if (err && err.length) { err = err.map(function (error) { /** @type {?} */ var code = 'OBJECT_MISSING_REQUIRED_PROPERTY'; if (error.path === '#/' && error.code === code) { error.path = "" + error.path + error.params[0]; } return error; }); } }; /** * @param {?} schema * @param {?} ref * @return {?} */ ZSchemaValidatorFactory.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 ZSchemaValidatorFactory; }(SchemaValidatorFactory)); export { ZSchemaValidatorFactory }; if (false) { /** @type {?} */ ZSchemaValidatorFactory.prototype.zschema; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiei1zY2hlbWEtdmFsaWRhdG9yLWZhY3RvcnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc2NoZW1hLWZvcm1zLyIsInNvdXJjZXMiOlsibGliL3otc2NoZW1hLXZhbGlkYXRvci1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxVQUFVLENBQUM7QUFHcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbEUsSUFBQTtJQUE2QyxtREFBc0I7SUFJakU7UUFBQSxZQUNFLGlCQUFPLFNBSVI7UUFIQyxLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDO1lBQ3ZCLGlCQUFpQixFQUFFLEtBQUs7U0FDM0IsQ0FBQyxDQUFDOztLQUNKOzs7OztJQUVELG1EQUFpQjs7OztJQUFqQixVQUFrQixNQUFjO1FBQWhDLGlCQXVCQztRQXRCQyxNQUFNLENBQUMsVUFBQyxLQUFVO1lBRWhCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sYUFBVSxRQUFRLElBQUksTUFBTSxhQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQzthQUNoQjtZQUVELEtBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzs7WUFDckMsSUFBTSxNQUFNLEdBQUcsS0FBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM1QyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQzthQUNiO1lBRUQsS0FBSSxDQUFDLGdDQUFnQyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztZQUU5QyxJQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQUMsT0FBTyxFQUFFLEtBQUs7Z0JBQ2hELEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ2hCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFUCxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztTQUM3QixDQUFDO0tBQ0g7Ozs7OztJQUVELDJDQUFTOzs7OztJQUFULFVBQVUsTUFBVyxFQUFFLEdBQVc7O1FBRWhDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDeEM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNuQztLQUNGOzs7OztJQUVPLGtFQUFnQzs7OztjQUFDLEdBQVU7UUFDakQsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQUEsS0FBSzs7Z0JBQ2pCLElBQU0sSUFBSSxHQUFHLGtDQUFrQyxDQUFDO2dCQUNoRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQy9DLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFHLENBQUM7aUJBQ2hEO2dCQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDZCxDQUFDLENBQUM7U0FDSjs7Ozs7OztJQUdLLCtDQUFhOzs7OztjQUFDLE1BQVcsRUFBRSxHQUFXOztRQUM1QyxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDekIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztZQUNqQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNSLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDOztrQ0F2RXZCO0VBTTZDLHNCQUFzQixFQW1FbEUsQ0FBQTtBQW5FRCxtQ0FtRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBaU2NoZW1hIGZyb20gJ3otc2NoZW1hJztcblxuaW1wb3J0IHsgU2NoZW1hLCBTY2hlbWFFcnJvcnMsIFNjaGVtYVZhbGlkYXRvckZuIH0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHsgU2NoZW1hVmFsaWRhdG9yRmFjdG9yeSB9IGZyb20gJy4vc2NoZW1hdmFsaWRhdG9yZmFjdG9yeSc7XG5cblxuZXhwb3J0IGNsYXNzIFpTY2hlbWFWYWxpZGF0b3JGYWN0b3J5IGV4dGVuZHMgU2NoZW1hVmFsaWRhdG9yRmFjdG9yeSB7XG5cbiAgcHJvdGVjdGVkIHpzY2hlbWE7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnpzY2hlbWEgPSBuZXcgWlNjaGVtYSh7XG4gICAgICAgIGJyZWFrT25GaXJzdEVycm9yOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlVmFsaWRhdG9yRm4oc2NoZW1hOiBTY2hlbWEpOiBTY2hlbWFWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuICh2YWx1ZTogYW55KTogU2NoZW1hRXJyb3JzIHwgbnVsbCA9PiB7XG5cbiAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gJ251bWJlcicgfHwgc2NoZW1hLnR5cGUgPT09ICdpbnRlZ2VyJykge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy56c2NoZW1hLnZhbGlkYXRlKHZhbHVlLCBzY2hlbWEpO1xuICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy56c2NoZW1hLmdldExhc3RFcnJvcnMoKTtcbiAgICAgIGlmICghZXJyb3JzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlbm9ybWFsaXplUmVxdWlyZWRQcm9wZXJ0eVBhdGhzKGVycm9ycyk7XG5cbiAgICAgIGNvbnN0IHNjaGVtYUVycm9ycyA9IGVycm9ycy5yZWR1Y2UoKF9lcnJvcnMsIGVycm9yKSA9PiB7XG4gICAgICAgIGVycm9yLnBhdGggPSBlcnJvci5wYXRoLnNsaWNlKDEpO1xuICAgICAgICBfZXJyb3JzW2Vycm9yLnBhdGhdID0gZXJyb3I7XG4gICAgICAgIHJldHVybiBfZXJyb3JzO1xuICAgICAgfSwge30pO1xuXG4gICAgICByZXR1cm4gc2NoZW1hRXJyb3JzIHx8IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIGdldFNjaGVtYShzY2hlbWE6IGFueSwgcmVmOiBzdHJpbmcpIHtcbiAgICAvLyBjaGVjayBkZWZpbml0aW9ucyBhcmUgdmFsaWRcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy56c2NoZW1hLmNvbXBpbGVTY2hlbWEoc2NoZW1hKTtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVmaW5pdGlvbihzY2hlbWEsIHJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IHRoaXMuenNjaGVtYS5nZXRMYXN0RXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlbm9ybWFsaXplUmVxdWlyZWRQcm9wZXJ0eVBhdGhzKGVycjogYW55W10pIHtcbiAgICBpZiAoZXJyICYmIGVyci5sZW5ndGgpIHtcbiAgICAgIGVyciA9IGVyci5tYXAoZXJyb3IgPT4ge1xuICAgICAgICBjb25zdCBjb2RlID0gJ09CSkVDVF9NSVNTSU5HX1JFUVVJUkVEX1BST1BFUlRZJztcbiAgICAgICAgaWYgKGVycm9yLnBhdGggPT09ICcjLycgJiYgZXJyb3IuY29kZSA9PT0gY29kZSkge1xuICAgICAgICAgIGVycm9yLnBhdGggPSBgJHtlcnJvci5wYXRofSR7ZXJyb3IucGFyYW1zWzBdfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZpbml0aW9uKHNjaGVtYTogYW55LCByZWY6IHN0cmluZykge1xuICAgIGxldCBmb3VuZFNjaGVtYSA9IHNjaGVtYTtcbiAgICByZWYuc3BsaXQoJy8nKS5zbGljZSgxKS5mb3JFYWNoKHB0ciA9PiB7XG4gICAgICBpZiAocHRyKSB7XG4gICAgICAgIGZvdW5kU2NoZW1hID0gZm91bmRTY2hlbWFbcHRyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm91bmRTY2hlbWE7XG4gIH1cbn1cblxuIl19