UNPKG

crocks

Version:

A collection of well known Algebraic Datatypes for your utter enjoyment.

58 lines (43 loc) 1.24 kB
/** @license ISC License (c) copyright 2019 original and current authors */ /** @author Ian Hofmann-Hicks */ var curry = require('../core/curry') var isArray = require('../core/isArray') var isDefined = require('../core/isDefined') var isEmpty = require('../core/isEmpty') var isInteger = require('../core/isInteger') var isNil = require('../core/isNil') var isString = require('../core/isString') var errFn = function (name) { return (name + ": Array of Non-empty Strings or Integers required for second argument"); } function fn(name) { function getPathOr(def, keys, target) { if(!isArray(keys)) { throw new TypeError(errFn(name)) } if(isNil(target)) { return def } var value = target for(var i = 0; i < keys.length; i++) { var key = keys[i] if(!(isString(key) && !isEmpty(key) || isInteger(key))) { throw new TypeError(errFn(name)) } if(isNil(value)) { return def } value = value[key] if(!isDefined(value)) { return def } } return value } return curry(getPathOr) } // getPathOr :: a -> [ String | Integer ] -> b -> c var getPathOr = fn('getPathOr') getPathOr.origFn = fn module.exports = getPathOr