aboutsummaryrefslogtreecommitdiff
path: root/src/js/node/domain.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/node/domain.ts')
-rw-r--r--src/js/node/domain.ts60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/js/node/domain.ts b/src/js/node/domain.ts
new file mode 100644
index 000000000..b03367ff4
--- /dev/null
+++ b/src/js/node/domain.ts
@@ -0,0 +1,60 @@
+// Import Events
+var EventEmitter = require("node:events");
+
+// Export Domain
+var domain: any = {};
+domain.createDomain = domain.create = function () {
+ var d = new 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;
+};
+export default domain;