Projekt

Obecné

Profil

Stáhnout (935 Bajtů) Statistiky
| Větev: | Revize:
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
}
(3-3/4)