|  | // 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) |