File: //proc/1526/task/1530/cwd/linde-ai/html/node_modules/thunky/index.js
'use strict'
var nextTick = nextTickArgs
process.nextTick(upgrade, 42) // pass 42 and see if upgrade is called with it
module.exports = thunky
function thunky (fn) {
  var state = run
  return thunk
  function thunk (callback) {
    state(callback || noop)
  }
  function run (callback) {
    var stack = [callback]
    state = wait
    fn(done)
    function wait (callback) {
      stack.push(callback)
    }
    function done (err) {
      var args = arguments
      state = isError(err) ? run : finished
      while (stack.length) finished(stack.shift())
      function finished (callback) {
        nextTick(apply, callback, args)
      }
    }
  }
}
function isError (err) { // inlined from util so this works in the browser
  return Object.prototype.toString.call(err) === '[object Error]'
}
function noop () {}
function apply (callback, args) {
  callback.apply(null, args)
}
function upgrade (val) {
  if (val === 42) nextTick = process.nextTick
}
function nextTickArgs (fn, a, b) {
  process.nextTick(function () {
    fn(a, b)
  })
}