Blame view

node_modules/d/auto-bind.js 1.2 KB
f7563de62   Palak Handa   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  'use strict';
  
  var copy             = require('es5-ext/object/copy')
    , normalizeOptions = require('es5-ext/object/normalize-options')
    , ensureCallable   = require('es5-ext/object/valid-callable')
    , map              = require('es5-ext/object/map')
    , callable         = require('es5-ext/object/valid-callable')
    , validValue       = require('es5-ext/object/valid-value')
  
    , bind = Function.prototype.bind, defineProperty = Object.defineProperty
    , hasOwnProperty = Object.prototype.hasOwnProperty
    , define;
  
  define = function (name, desc, options) {
  	var value = validValue(desc) && callable(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 (options.resolveContext != null) ensureCallable(options.resolveContext);
  	return map(props, function (desc, name) { return define(name, desc, options); });
  };