crocks
Version:
A collection of well known Algebraic Datatypes for your utter enjoyment.
41 lines (31 loc) • 929 B
JavaScript
/** @license ISC License (c) copyright 2019 original and current authors */
/** @author Ian Hofmann-Hicks (evil) */
var curry = require('../core/curry')
var isDefined = require('../core/isDefined')
var isEmpty = require('../core/isEmpty')
var isNil = require('../core/isNil')
var isInteger = require('../core/isInteger')
var isString = require('../core/isString')
var ref = require('../core/Maybe');
var Nothing = ref.Nothing;
var Just = ref.Just;
function fn(name) {
function getProp(key, target) {
if(!(isString(key) && !isEmpty(key) || isInteger(key))) {
throw new TypeError((name + ": Non-empty String or Integer required for first argument"))
}
if(isNil(target)) {
return Nothing()
}
var value = target[key]
return isDefined(value)
? Just(value)
: Nothing()
}
return curry(getProp)
}
var getProp =
fn('getProp')
getProp.origFn =
fn
module.exports = getProp