All files / lib handlerEnforcer.js

25% Statements 9/36
0% Branches 0/4
0% Functions 0/9
30% Lines 9/30
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48  1x   1x   1x               1x                                                 1x   1x   1x   1x   1x  
'use strict'
const handlerEnforcer = module.exports = { }
 
const debug = require('./debugging.js')
 
handlerEnforcer.wrap = handlers => {
  handlers.search = handlerEnforcer._search(handlers)
  handlers.find = handlerEnforcer._find(handlers)
  handlers.create = handlerEnforcer._create(handlers)
  handlers.update = handlerEnforcer._update(handlers)
  handlers.delete = handlerEnforcer._delete(handlers)
}
 
handlerEnforcer._wrapHandler = (handlers, operation, outCount) => {
  if (typeof outCount !== 'number') {
    throw new Error('Invalid use of handlerEnforcer._wrapHandler!')
  }
 
  const original = handlers[operation]
  if (!original) return null
  return function () {
    const argsIn = Array.prototype.slice.call(arguments)
    const requestParams = argsIn[0].params
    const callback = argsIn.pop()
    argsIn.push(function () {
      let argsOut = Array.prototype.slice.call(arguments)
      argsOut = argsOut.slice(0, outCount)
      // $FlowFixMe: We've already ruled out any other possible types for outCount?
      while (argsOut.length < outCount) {
        argsOut.push(null)
      }
      debug.handler[operation](JSON.stringify(requestParams), JSON.stringify(argsOut))
      return callback.apply(null, argsOut)
    })
    original.apply(handlers, argsIn)
  }
}
 
handlerEnforcer._search = handlers => handlerEnforcer._wrapHandler(handlers, 'search', 3)
 
handlerEnforcer._find = handlers => handlerEnforcer._wrapHandler(handlers, 'find', 2)
 
handlerEnforcer._create = handlers => handlerEnforcer._wrapHandler(handlers, 'create', 2)
 
handlerEnforcer._update = handlers => handlerEnforcer._wrapHandler(handlers, 'update', 2)
 
handlerEnforcer._delete = handlers => handlerEnforcer._wrapHandler(handlers, 'delete', 1)