// This file should be ES5 compatible /* eslint prefer-spread:0, no-var:0, prefer-reflect:0, no-magic-numbers:0 */ 'use strict' module.exports = (function () { // Import Events var events = require('events') // Export Domain var domain = {} domain.createDomain = domain.create = function () { var d = new events.EventEmitter() function emitError (e) { d.emit('error', e) } d.add = function (emitter) { emitter.on('error', emitError) } d.remove = function (emitter) { emitter.removeListener('error', emitError) } d.bind = function (fn) { return function () { var args = Array.prototype.slice.call(arguments) try { fn.apply(null, args) } catch (err) { emitError(err) } } } d.intercept = function (fn) { return function (err) { if ( err ) { emitError(err) } else { var args = Array.prototype.slice.call(arguments, 1) try { fn.apply(null, args) } catch (err) { emitError(err) } } } } d.run = function (fn) { try { fn() } catch (err) { emitError(err) } return this } d.dispose = function () { this.removeAllListeners() return this } d.enter = d.exit = function () { return this } return d } return domain }).call(this)