You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							70 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							70 lines
						
					
					
						
							1.3 KiB
						
					
					
				// 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)
 | 
						|
 |