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