UNPKG

foop

Version:

interfaces that describe their intentions.

120 lines (102 loc) 10.3 kB
// nth arg // toArr // // anyKeyVal // // // until // or(where, flip2(where)) // // dot stuff wrap // !dottable // dumping here // https://github.com/andrewplummer/Sugar/blob/master/lib/number.js#L64 var identity = require('../fp/identity') var arity = require('../fp/arity') var mapArray = require('../loop/flipped/mapArrayFlipped') var argsToArr = require('../cast/argumentsToArray') var ENV_DEBUG = true // const at = obj => propOrIndexAkaKey => obj[propOrIndexAkaKey] // const evolutionAt = at(evolution, identity) // @TODO need `length` arg for safety // @curried 2 // could pass in an array that could `evolve` ? // or object with indexes to prevent `holes` ? var _coerceArgs = function(fn, evolution) { // const fnLength = fn.length return arity(fn.length, function() { if (ENV_DEBUG) { console.log('coerce_arguments_before', arguments, '\n') } var args = argsToArr.apply(null, arguments) var evolved = mapArray(args, function (index) { var arg = args[index] var evolver = evolution[index] console.log({arg: arg, index: index, evolver: evolver}) if (evolver) { return evolver(arg) } else { return arg } }) if (ENV_DEBUG) { console.log('coerce_arguments_after', evolved, '\n') } return fn.apply(this, evolved) }) } // const nativeToPairs = new Map() // nativeToPairs // .set(Function, [isFunction, toFunction]) // .set(Array, [isArray, toArray]) // .set(String, [isString, toString]) // .set(Date, [isDate, toDate]) // .set(Number, [isNumber, toNumber]) // .set(Object, [isObj, toObj]) // .set(Boolean, [isBoolean, toBoolean]) // .set(RegExp, [isRegExp, toRegExp]) // .set(Map, [isMap, toMap]) // .set(Set, [isSet, toSet]) // nativeToPairs.set(null, [isNull, toNumber]) // // const coerceNative = function(fn, evolutions) { // return arity(fn.length, function() {}) // } // const coerceArgs = curry(2, _coerceArgs) var coerceArgs = _coerceArgs // toPlainObject var toLength = require('./toLength') var toObject = require('./toObj') var toNumber = require('./toNumber') var toInteger = require('./toInteger') var toBoolean = require('./toBoolean') var toArray = require('./toArray') var toString = require('./toString') // https://github.com/the-grid/finitedomain/blob/master/src/trie.js#L78 // https://github.com/the-grid/finitedomain/blob/master/src/domain.js#L1192 // http://jscoercion.qfox.nl/ // // @TODO coerce returned // @TODO if obj, check .cast or .toArray etc // @TODO coerce nested // @TODO coerceWhen or `coerceFromTo` function example( strictArray, strictString, strictNumber, strictBoolean, stringOrNumber ) { var hack = strictArray.slice() hack.push(strictString) if (strictBoolean) { hack = hack.concat([strictNumber, stringOrNumber]) } arguments[arguments.length + 1] = hack return argsToArr.apply(null, arguments) } // http://airbnb.io/projects/hypernova/ // could use the property order and then it is a schema that could be a fn... var result = coerceArgs(example, [toArray, toString, toNumber, toBoolean]) console.log(result('eh', 10, '100', 0)) //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VvcmNlQXJncy5qcyIsInNvdXJjZXMiOlsiY2VvcmNlQXJncy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBudGggYXJnXG4vLyB0b0FyclxuLy9cbi8vIGFueUtleVZhbFxuLy9cbi8vIC8vIHVudGlsXG4vLyBvcih3aGVyZSwgZmxpcDIod2hlcmUpKVxuLy9cbi8vIGRvdCBzdHVmZiB3cmFwXG4vLyAhZG90dGFibGVcblxuLy8gZHVtcGluZyBoZXJlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYW5kcmV3cGx1bW1lci9TdWdhci9ibG9iL21hc3Rlci9saWIvbnVtYmVyLmpzI0w2NFxuXG5jb25zdCBpZGVudGl0eSA9IHJlcXVpcmUoJy4uL2ZwL2lkZW50aXR5JylcbmNvbnN0IGFyaXR5ID0gcmVxdWlyZSgnLi4vZnAvYXJpdHknKVxuY29uc3QgbWFwQXJyYXkgPSByZXF1aXJlKCcuLi9sb29wL2ZsaXBwZWQvbWFwQXJyYXlGbGlwcGVkJylcbmNvbnN0IGFyZ3NUb0FyciA9IHJlcXVpcmUoJy4uL2Nhc3QvYXJndW1lbnRzVG9BcnJheScpXG5cbmNvbnN0IEVOVl9ERUJVRyA9IHRydWVcbi8vIGNvbnN0IGF0ID0gb2JqID0+IHByb3BPckluZGV4QWthS2V5ID0+IG9ialtwcm9wT3JJbmRleEFrYUtleV1cbi8vIGNvbnN0IGV2b2x1dGlvbkF0ID0gYXQoZXZvbHV0aW9uLCBpZGVudGl0eSlcblxuLy8gQFRPRE8gbmVlZCBgbGVuZ3RoYCBhcmcgZm9yIHNhZmV0eVxuLy8gQGN1cnJpZWQgMlxuLy8gY291bGQgcGFzcyBpbiBhbiBhcnJheSB0aGF0IGNvdWxkIGBldm9sdmVgID9cbi8vIG9yIG9iamVjdCB3aXRoIGluZGV4ZXMgdG8gcHJldmVudCBgaG9sZXNgID9cbmNvbnN0IF9jb2VyY2VBcmdzID0gZnVuY3Rpb24oZm4sIGV2b2x1dGlvbikge1xuICAvLyBjb25zdCBmbkxlbmd0aCA9IGZuLmxlbmd0aFxuICByZXR1cm4gYXJpdHkoZm4ubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoRU5WX0RFQlVHKSB7XG4gICAgICBjb25zb2xlLmxvZygnY29lcmNlX2FyZ3VtZW50c19iZWZvcmUnLCBhcmd1bWVudHMsICdcXG4nKVxuICAgIH1cblxuICAgIGxldCBhcmdzID0gYXJnc1RvQXJyLmFwcGx5KG51bGwsIGFyZ3VtZW50cylcbiAgICBsZXQgZXZvbHZlZCA9IG1hcEFycmF5KGFyZ3MsIGluZGV4ID0+IHtcbiAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaW5kZXhdXG4gICAgICBjb25zdCBldm9sdmVyID0gZXZvbHV0aW9uW2luZGV4XVxuICAgICAgY29uc29sZS5sb2coe2FyZywgaW5kZXgsIGV2b2x2ZXJ9KVxuXG4gICAgICBpZiAoZXZvbHZlcikge1xuICAgICAgICByZXR1cm4gZXZvbHZlcihhcmcpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFyZ1xuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAoRU5WX0RFQlVHKSB7XG4gICAgICBjb25zb2xlLmxvZygnY29lcmNlX2FyZ3VtZW50c19hZnRlcicsIGV2b2x2ZWQsICdcXG4nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBldm9sdmVkKVxuICB9KVxufVxuXG4vLyBjb25zdCBuYXRpdmVUb1BhaXJzID0gbmV3IE1hcCgpXG4vLyBuYXRpdmVUb1BhaXJzXG4vLyAgIC5zZXQoRnVuY3Rpb24sIFtpc0Z1bmN0aW9uLCB0b0Z1bmN0aW9uXSlcbi8vICAgLnNldChBcnJheSwgW2lzQXJyYXksIHRvQXJyYXldKVxuLy8gICAuc2V0KFN0cmluZywgW2lzU3RyaW5nLCB0b1N0cmluZ10pXG4vLyAgIC5zZXQoRGF0ZSwgW2lzRGF0ZSwgdG9EYXRlXSlcbi8vICAgLnNldChOdW1iZXIsIFtpc051bWJlciwgdG9OdW1iZXJdKVxuLy8gICAuc2V0KE9iamVjdCwgW2lzT2JqLCB0b09ial0pXG4vLyAgIC5zZXQoQm9vbGVhbiwgW2lzQm9vbGVhbiwgdG9Cb29sZWFuXSlcbi8vICAgLnNldChSZWdFeHAsIFtpc1JlZ0V4cCwgdG9SZWdFeHBdKVxuLy8gICAuc2V0KE1hcCwgW2lzTWFwLCB0b01hcF0pXG4vLyAgIC5zZXQoU2V0LCBbaXNTZXQsIHRvU2V0XSlcbi8vIG5hdGl2ZVRvUGFpcnMuc2V0KG51bGwsIFtpc051bGwsIHRvTnVtYmVyXSlcbi8vXG4vLyBjb25zdCBjb2VyY2VOYXRpdmUgPSBmdW5jdGlvbihmbiwgZXZvbHV0aW9ucykge1xuLy8gICByZXR1cm4gYXJpdHkoZm4ubGVuZ3RoLCBmdW5jdGlvbigpIHt9KVxuLy8gfVxuXG4vLyBjb25zdCBjb2VyY2VBcmdzID0gY3VycnkoMiwgX2NvZXJjZUFyZ3MpXG5jb25zdCBjb2VyY2VBcmdzID0gX2NvZXJjZUFyZ3NcblxuLy8gdG9QbGFpbk9iamVjdFxuY29uc3QgdG9MZW5ndGggPSByZXF1aXJlKCcuL3RvTGVuZ3RoJylcbmNvbnN0IHRvT2JqZWN0ID0gcmVxdWlyZSgnLi90b09iaicpXG5jb25zdCB0b051bWJlciA9IHJlcXVpcmUoJy4vdG9OdW1iZXInKVxuY29uc3QgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKVxuY29uc3QgdG9Cb29sZWFuID0gcmVxdWlyZSgnLi90b0Jvb2xlYW4nKVxuY29uc3QgdG9BcnJheSA9IHJlcXVpcmUoJy4vdG9BcnJheScpXG5jb25zdCB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGhlLWdyaWQvZmluaXRlZG9tYWluL2Jsb2IvbWFzdGVyL3NyYy90cmllLmpzI0w3OFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RoZS1ncmlkL2Zpbml0ZWRvbWFpbi9ibG9iL21hc3Rlci9zcmMvZG9tYWluLmpzI0wxMTkyXG4vLyBodHRwOi8vanNjb2VyY2lvbi5xZm94Lm5sL1xuLy9cbi8vIEBUT0RPIGNvZXJjZSByZXR1cm5lZFxuLy8gQFRPRE8gaWYgb2JqLCBjaGVjayAuY2FzdCBvciAudG9BcnJheSBldGNcbi8vIEBUT0RPIGNvZXJjZSBuZXN0ZWRcbi8vIEBUT0RPIGNvZXJjZVdoZW4gb3IgYGNvZXJjZUZyb21Ub2BcbmZ1bmN0aW9uIGV4YW1wbGUoXG4gIHN0cmljdEFycmF5LFxuICBzdHJpY3RTdHJpbmcsXG4gIHN0cmljdE51bWJlcixcbiAgc3RyaWN0Qm9vbGVhbixcbiAgc3RyaW5nT3JOdW1iZXJcbikge1xuICB2YXIgaGFjayA9IHN0cmljdEFycmF5LnNsaWNlKClcbiAgaGFjay5wdXNoKHN0cmljdFN0cmluZylcblxuICBpZiAoc3RyaWN0Qm9vbGVhbikge1xuICAgIGhhY2sgPSBoYWNrLmNvbmNhdChbc3RyaWN0TnVtYmVyLCBzdHJpbmdPck51bWJlcl0pXG4gIH1cblxuICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCArIDFdID0gaGFja1xuXG4gIHJldHVybiBhcmdzVG9BcnIuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxufVxuXG4vLyBodHRwOi8vYWlyYm5iLmlvL3Byb2plY3RzL2h5cGVybm92YS9cbi8vIGNvdWxkIHVzZSB0aGUgcHJvcGVydHkgb3JkZXIgYW5kIHRoZW4gaXQgaXMgYSBzY2hlbWEgdGhhdCBjb3VsZCBiZSBhIGZuLi4uXG5jb25zdCByZXN1bHQgPSBjb2VyY2VBcmdzKGV4YW1wbGUsIFt0b0FycmF5LCB0b1N0cmluZywgdG9OdW1iZXIsIHRvQm9vbGVhbl0pXG5cbmNvbnNvbGUubG9nKHJlc3VsdCgnZWgnLCAxMCwgJzEwMCcsIDApKVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFjQUEsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDMUNBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNwQ0EsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsaUNBQWlDLENBQUM7QUFDM0RBLEdBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixD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