UNPKG

@decaf-ts/db-decorators

Version:

Agnostic database decorators and repository

34 lines 5.17 kB
import { Model, validate, } from "@decaf-ts/decorator-validation"; import { validateCompare } from "./validation.js"; /** * @description Validates the model and checks for errors * @summary Validates the current model state and optionally compares with a previous version * @template M - Type extending Model * @param {M|any} [previousVersion] - Optional previous version of the model for comparison * @param {...any[]} exclusions - Properties to exclude from validation * @return {ModelErrorDefinition|undefined} Error definition if validation fails, undefined otherwise * @function hasErrors * @memberOf module:db-decorators */ // @ts-expect-error Overriding Model prototype method with dynamic conditional return type. Model.prototype.hasErrors = function (previousVersion, ...exclusions) { if (previousVersion && !(previousVersion instanceof Model)) { exclusions.unshift(previousVersion); previousVersion = undefined; } const async = this.isAsync(); const errs = validate(this, async, ...exclusions); if (async) { return Promise.resolve(errs).then((resolvedErrs) => { if (resolvedErrs || !previousVersion) { return resolvedErrs; } return validateCompare(previousVersion, this, async, ...exclusions); }); } if (errs || !previousVersion) return errs; // @ts-expect-error Overriding Model prototype method with dynamic conditional return type. return validateCompare(previousVersion, this, async, ...exclusions); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL292ZXJyaWRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUVMLFFBQVEsR0FDVCxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsd0JBQXFCO0FBRS9DOzs7Ozs7Ozs7R0FTRztBQUNILDJGQUEyRjtBQUMzRixLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUUxQixlQUF5QixFQUN6QixHQUFHLFVBQWlCO0lBRXBCLElBQUksZUFBZSxJQUFJLENBQUMsQ0FBQyxlQUFlLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BDLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBRWxELElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDakQsSUFBSSxZQUFZLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDckMsT0FBTyxZQUFZLENBQUM7WUFDdEIsQ0FBQztZQUNELE9BQU8sZUFBZSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFRLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlO1FBQUUsT0FBTyxJQUFXLENBQUM7SUFFakQsMkZBQTJGO0lBQzNGLE9BQU8sZUFBZSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTW9kZWwsXG4gIE1vZGVsQ29uZGl0aW9uYWxBc3luYyxcbiAgdmFsaWRhdGUsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHZhbGlkYXRlQ29tcGFyZSB9IGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdGVzIHRoZSBtb2RlbCBhbmQgY2hlY2tzIGZvciBlcnJvcnNcbiAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGUgY3VycmVudCBtb2RlbCBzdGF0ZSBhbmQgb3B0aW9uYWxseSBjb21wYXJlcyB3aXRoIGEgcHJldmlvdXMgdmVyc2lvblxuICogQHRlbXBsYXRlIE0gLSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHBhcmFtIHtNfGFueX0gW3ByZXZpb3VzVmVyc2lvbl0gLSBPcHRpb25hbCBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBtb2RlbCBmb3IgY29tcGFyaXNvblxuICogQHBhcmFtIHsuLi5hbnlbXX0gZXhjbHVzaW9ucyAtIFByb3BlcnRpZXMgdG8gZXhjbHVkZSBmcm9tIHZhbGlkYXRpb25cbiAqIEByZXR1cm4ge01vZGVsRXJyb3JEZWZpbml0aW9ufHVuZGVmaW5lZH0gRXJyb3IgZGVmaW5pdGlvbiBpZiB2YWxpZGF0aW9uIGZhaWxzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKiBAZnVuY3Rpb24gaGFzRXJyb3JzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnNcbiAqL1xuLy8gQHRzLWV4cGVjdC1lcnJvciBPdmVycmlkaW5nIE1vZGVsIHByb3RvdHlwZSBtZXRob2Qgd2l0aCBkeW5hbWljIGNvbmRpdGlvbmFsIHJldHVybiB0eXBlLlxuTW9kZWwucHJvdG90eXBlLmhhc0Vycm9ycyA9IGZ1bmN0aW9uIDxNIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KFxuICB0aGlzOiBNLFxuICBwcmV2aW91c1ZlcnNpb24/OiBNIHwgYW55LFxuICAuLi5leGNsdXNpb25zOiBhbnlbXVxuKTogTW9kZWxDb25kaXRpb25hbEFzeW5jPE0+IHtcbiAgaWYgKHByZXZpb3VzVmVyc2lvbiAmJiAhKHByZXZpb3VzVmVyc2lvbiBpbnN0YW5jZW9mIE1vZGVsKSkge1xuICAgIGV4Y2x1c2lvbnMudW5zaGlmdChwcmV2aW91c1ZlcnNpb24pO1xuICAgIHByZXZpb3VzVmVyc2lvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGFzeW5jID0gdGhpcy5pc0FzeW5jKCk7XG4gIGNvbnN0IGVycnMgPSB2YWxpZGF0ZSh0aGlzLCBhc3luYywgLi4uZXhjbHVzaW9ucyk7XG5cbiAgaWYgKGFzeW5jKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlcnJzKS50aGVuKChyZXNvbHZlZEVycnMpID0+IHtcbiAgICAgIGlmIChyZXNvbHZlZEVycnMgfHwgIXByZXZpb3VzVmVyc2lvbikge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRFcnJzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcGFyZShwcmV2aW91c1ZlcnNpb24sIHRoaXMsIGFzeW5jLCAuLi5leGNsdXNpb25zKTtcbiAgICB9KSBhcyBhbnk7XG4gIH1cblxuICBpZiAoZXJycyB8fCAhcHJldmlvdXNWZXJzaW9uKSByZXR1cm4gZXJycyBhcyBhbnk7XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBPdmVycmlkaW5nIE1vZGVsIHByb3RvdHlwZSBtZXRob2Qgd2l0aCBkeW5hbWljIGNvbmRpdGlvbmFsIHJldHVybiB0eXBlLlxuICByZXR1cm4gdmFsaWRhdGVDb21wYXJlKHByZXZpb3VzVmVyc2lvbiwgdGhpcywgYXN5bmMsIC4uLmV4Y2x1c2lvbnMpO1xufTtcbiJdfQ==