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
						
					
					
				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
 | 
						|
}
 |