ember-changeset-validations
Version:
Validations for ember-changeset
48 lines (44 loc) • 1.43 kB
JavaScript
import { A } from '@ember/array';
import { all } from 'rsvp';
import { typeOf } from '@ember/utils';
import { isPromise } from 'validated-changeset';
/**
* Rejects `true` values from an array of validations. Returns `true` when there
* are no errors, or the error object if there are errors.
*
* @private
* @param {Array} validations
* @return {Boolean|Any}
*/
function handleValidations(validations = []) {
let rejectedValidations = A(validations).reject(validation => typeOf(validation) === 'boolean' && validation);
return rejectedValidations.length === 0 || rejectedValidations;
}
/**
* Handles an array of validators and returns Promise.all if any value is a
* Promise.
*
* @public
* @param {Array} validators Array of validator functions
* @param {String} options.key
* @param {Any} options.newValue
* @param {Any} options.oldValue
* @param {Object} options.changes
* @param {Object} options.content
* @return {Promise|Boolean|Any}
*/
function handleMultipleValidations(validators, {
key,
newValue,
oldValue,
changes,
content
}) {
let validations = A(validators.map(validator => validator(key, newValue, oldValue, changes, content)));
if (A(validations).any(isPromise)) {
return all(validations).then(handleValidations);
}
return handleValidations(validations);
}
export { handleMultipleValidations as default };
//# sourceMappingURL=handle-multiple-validations.js.map