index.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // This file should be ES5 compatible
  2. /* eslint prefer-spread:0, no-var:0, prefer-reflect:0, no-magic-numbers:0 */
  3. "use strict";
  4. module.exports = function() {
  5. // Import Events
  6. var events = require("events");
  7. // Export Domain
  8. var domain = {};
  9. domain.createDomain = domain.create = function() {
  10. var d = new events.EventEmitter();
  11. function emitError(e) {
  12. d.emit("error", e);
  13. }
  14. d.add = function(emitter) {
  15. emitter.on("error", emitError);
  16. };
  17. d.remove = function(emitter) {
  18. emitter.removeListener("error", emitError);
  19. };
  20. d.bind = function(fn) {
  21. return function() {
  22. var args = Array.prototype.slice.call(arguments);
  23. try {
  24. fn.apply(null, args);
  25. } catch (err) {
  26. emitError(err);
  27. }
  28. };
  29. };
  30. d.intercept = function(fn) {
  31. return function(err) {
  32. if (err) {
  33. emitError(err);
  34. } else {
  35. var args = Array.prototype.slice.call(arguments, 1);
  36. try {
  37. fn.apply(null, args);
  38. } catch (err) {
  39. emitError(err);
  40. }
  41. }
  42. };
  43. };
  44. d.run = function(fn) {
  45. try {
  46. fn();
  47. } catch (err) {
  48. emitError(err);
  49. }
  50. return this;
  51. };
  52. d.dispose = function() {
  53. this.removeAllListeners();
  54. return this;
  55. };
  56. d.enter = d.exit = function() {
  57. return this;
  58. };
  59. return d;
  60. };
  61. return domain;
  62. }.call(this);