You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					43 lines
				
				935 B
			
		
		
			
		
	
	
					43 lines
				
				935 B
			| 
											3 years ago
										 | var wrappy = require('wrappy') | ||
|  | module.exports = wrappy(once) | ||
|  | module.exports.strict = wrappy(onceStrict) | ||
|  | 
 | ||
|  | once.proto = once(function () { | ||
|  |   Object.defineProperty(Function.prototype, 'once', { | ||
|  |     value: function () { | ||
|  |       return once(this) | ||
|  |     }, | ||
|  |     configurable: true | ||
|  |   }) | ||
|  | 
 | ||
|  |   Object.defineProperty(Function.prototype, 'onceStrict', { | ||
|  |     value: function () { | ||
|  |       return onceStrict(this) | ||
|  |     }, | ||
|  |     configurable: true | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | function once (fn) { | ||
|  |   var f = function () { | ||
|  |     if (f.called) return f.value | ||
|  |     f.called = true | ||
|  |     return f.value = fn.apply(this, arguments) | ||
|  |   } | ||
|  |   f.called = false | ||
|  |   return f | ||
|  | } | ||
|  | 
 | ||
|  | function onceStrict (fn) { | ||
|  |   var f = function () { | ||
|  |     if (f.called) | ||
|  |       throw new Error(f.onceError) | ||
|  |     f.called = true | ||
|  |     return f.value = fn.apply(this, arguments) | ||
|  |   } | ||
|  |   var name = fn.name || 'Function wrapped with `once`' | ||
|  |   f.onceError = name + " shouldn't be called more than once" | ||
|  |   f.called = false | ||
|  |   return f | ||
|  | } |