mirror of
				https://github.com/cp6/my-idlers.git
				synced 2025-11-04 08:09:09 +00:00 
			
		
		
		
	
		
			
	
	
		
			34 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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); });
							 | 
						||
| 
								 | 
							
								};
							 |