71 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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)
 |