| 'use strict'; | 
|   | 
| Object.defineProperty(exports, "__esModule", { | 
|     value: true | 
| }); | 
| exports.hasNextTick = exports.hasSetImmediate = undefined; | 
| exports.fallback = fallback; | 
| exports.wrap = wrap; | 
|   | 
| var _slice = require('./slice'); | 
|   | 
| var _slice2 = _interopRequireDefault(_slice); | 
|   | 
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | 
|   | 
| var hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate; | 
| var hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; | 
|   | 
| function fallback(fn) { | 
|     setTimeout(fn, 0); | 
| } | 
|   | 
| function wrap(defer) { | 
|     return function (fn /*, ...args*/) { | 
|         var args = (0, _slice2.default)(arguments, 1); | 
|         defer(function () { | 
|             fn.apply(null, args); | 
|         }); | 
|     }; | 
| } | 
|   | 
| var _defer; | 
|   | 
| if (hasSetImmediate) { | 
|     _defer = setImmediate; | 
| } else if (hasNextTick) { | 
|     _defer = process.nextTick; | 
| } else { | 
|     _defer = fallback; | 
| } | 
|   | 
| exports.default = wrap(_defer); |