l0bsterssg

node.js static responsive blog post generator
Log | Files | Refs | README

once.js (935B)


      1 var wrappy = require('wrappy')
      2 module.exports = wrappy(once)
      3 module.exports.strict = wrappy(onceStrict)
      4 
      5 once.proto = once(function () {
      6   Object.defineProperty(Function.prototype, 'once', {
      7     value: function () {
      8       return once(this)
      9     },
     10     configurable: true
     11   })
     12 
     13   Object.defineProperty(Function.prototype, 'onceStrict', {
     14     value: function () {
     15       return onceStrict(this)
     16     },
     17     configurable: true
     18   })
     19 })
     20 
     21 function once (fn) {
     22   var f = function () {
     23     if (f.called) return f.value
     24     f.called = true
     25     return f.value = fn.apply(this, arguments)
     26   }
     27   f.called = false
     28   return f
     29 }
     30 
     31 function onceStrict (fn) {
     32   var f = function () {
     33     if (f.called)
     34       throw new Error(f.onceError)
     35     f.called = true
     36     return f.value = fn.apply(this, arguments)
     37   }
     38   var name = fn.name || 'Function wrapped with `once`'
     39   f.onceError = name + " shouldn't be called more than once"
     40   f.called = false
     41   return f
     42 }