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