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