Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80522 views
1
/*global define:false require:false */
2
module.exports = (function(){
3
// Import Events
4
var events = require('events')
5
6
// Export Domain
7
var domain = {}
8
domain.createDomain = domain.create = function(){
9
var d = new events.EventEmitter()
10
11
function emitError(e) {
12
d.emit('error', e)
13
}
14
15
d.add = function(emitter){
16
emitter.on('error', emitError)
17
}
18
d.remove = function(emitter){
19
emitter.removeListener('error', emitError)
20
}
21
d.bind = function(fn){
22
return function(){
23
var args = Array.prototype.slice.call(arguments)
24
try {
25
fn.apply(null, args)
26
}
27
catch (err){
28
emitError(err)
29
}
30
}
31
}
32
d.intercept = function(fn){
33
return function(err){
34
if ( err ) {
35
emitError(err)
36
}
37
else {
38
var args = Array.prototype.slice.call(arguments, 1)
39
try {
40
fn.apply(null, args)
41
}
42
catch (err){
43
emitError(err)
44
}
45
}
46
}
47
}
48
d.run = function(fn){
49
try {
50
fn()
51
}
52
catch (err) {
53
emitError(err)
54
}
55
return this
56
};
57
d.dispose = function(){
58
this.removeAllListeners()
59
return this
60
};
61
d.enter = d.exit = function(){
62
return this
63
}
64
return d
65
};
66
return domain
67
}).call(this)
68