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