You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ensure.js 926B

1234567891011121314151617181920212223242526272829
  1. "use strict";
  2. var resolveException = require("../lib/resolve-exception")
  3. , isValue = require("../value/is")
  4. , is = require("./is");
  5. var resolveCoercedValue = function (value, coerceItem) {
  6. var coercedValue = [];
  7. var iterator = value[Symbol.iterator]();
  8. var item;
  9. while (!(item = iterator.next()).done) {
  10. var newItemValue = coerceItem(item.value);
  11. if (!isValue(newItemValue)) throw new Error("Stop propagation");
  12. coercedValue.push(newItemValue);
  13. }
  14. return coercedValue;
  15. };
  16. module.exports = function (value/*, options*/) {
  17. var options = arguments[1];
  18. if (is(value, options)) {
  19. if (!options) return value;
  20. if (typeof options.coerceItem !== "function") return value;
  21. try { return resolveCoercedValue(value, options.coerceItem); }
  22. catch (error) {
  23. // Ignore, let validation error propagate
  24. }
  25. }
  26. return resolveException(value, "%v is not expected iterable value", options);
  27. };