All files / src lock.js

100% Statements 14/14
75% Branches 3/4
100% Functions 3/3
100% Lines 14/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31          1x 1x 1x   1x 2x 1x     2x 2x   2x   1x 1x     1x 1x 1x          
 
/**
 * @param {Raid::Signal} signal - the Raid::Signal to attach to
 * @returns {Func} void - a function to dispose the current update function
 */
export const lock = signal => {
  let dispose = null
  let cached = []
 
  return fn => {
    if (dispose) {
      dispose()
    }
 
    cached.push(fn)
    dispose = signal.register(fn)
 
    return () => {
      // Dispose from signal, dump from cached update array
      dispose()
      cached.pop()
 
      // If there was a previous one, reinstate it
      let last = cached.pop()
      Eif (last) {
        dispose = signal.register(last)
      }
    }
  }
}