Spaces:
Runtime error
Runtime error
; | |
var isValue = require("type/value/is") | |
, ensureValue = require("type/value/ensure") | |
, ensurePlainFunction = require("type/plain-function/ensure") | |
, copy = require("es5-ext/object/copy") | |
, normalizeOptions = require("es5-ext/object/normalize-options") | |
, map = require("es5-ext/object/map"); | |
var bind = Function.prototype.bind | |
, defineProperty = Object.defineProperty | |
, hasOwnProperty = Object.prototype.hasOwnProperty | |
, define; | |
define = function (name, desc, options) { | |
var value = ensureValue(desc) && ensurePlainFunction(desc.value), dgs; | |
dgs = copy(desc); | |
delete dgs.writable; | |
delete dgs.value; | |
dgs.get = function () { | |
if (!options.overwriteDefinition && hasOwnProperty.call(this, name)) return value; | |
desc.value = bind.call(value, options.resolveContext ? options.resolveContext(this) : this); | |
defineProperty(this, name, desc); | |
return this[name]; | |
}; | |
return dgs; | |
}; | |
module.exports = function (props/*, options*/) { | |
var options = normalizeOptions(arguments[1]); | |
if (isValue(options.resolveContext)) ensurePlainFunction(options.resolveContext); | |
return map(props, function (desc, name) { return define(name, desc, options); }); | |
}; | |