UNPKG

crocks

Version:

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

58 lines (43 loc) 1.3 kB
/** @license ISC License (c) copyright 2019 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var ref = require('../core/Maybe'); var Nothing = ref.Nothing; var Just = ref.Just; 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') function fn(name) { function getPath(keys, target) { if(!isArray(keys)) { throw new TypeError((name + ": Array of Non-empty Strings or Integers required for first argument")) } if(isNil(target)) { return Nothing() } 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((name + ": Array of Non-empty Strings or Integers required for first argument")) } if(isNil(value)) { return Nothing() } value = value[key] if(!isDefined(value)) { return Nothing() } } return Just(value) } return curry(getPath) } var getPath = fn('getPath') getPath.origFn = fn module.exports = getPath