react 0.5.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/.travis.yml +5 -0
  2. package/Jakefile.js +39 -0
  3. package/README.md +15 -23
  4. package/browser-test/dist.html +90 -0
  5. package/browser-test/index.html +86 -0
  6. package/browser-test/min.html +90 -0
  7. package/dist/react.js +3107 -0
  8. package/dist/react.min.js +22 -0
  9. package/doc/advanced.md +10 -2
  10. package/examples/using-events1.js +1 -1
  11. package/lib/base-task.js +116 -110
  12. package/lib/cb-task.js +71 -67
  13. package/lib/core.js +116 -117
  14. package/lib/dsl.js +120 -115
  15. package/lib/error.js +44 -36
  16. package/lib/event-collector.js +69 -56
  17. package/lib/event-manager.js +81 -67
  18. package/lib/eventemitter.js +20 -0
  19. package/lib/finalcb-first-task.js +56 -53
  20. package/lib/finalcb-task.js +55 -51
  21. package/lib/id.js +18 -7
  22. package/lib/input-parser.js +49 -41
  23. package/lib/log-events.js +88 -73
  24. package/lib/parse.js +34 -25
  25. package/lib/promise-resolve.js +42 -27
  26. package/lib/promise-task.js +78 -74
  27. package/lib/react.js +59 -0
  28. package/lib/ret-task.js +59 -55
  29. package/lib/sprintf.js +18 -0
  30. package/lib/status.js +11 -2
  31. package/lib/task.js +215 -217
  32. package/lib/track-tasks.js +72 -58
  33. package/lib/validate.js +136 -136
  34. package/lib/vcon.js +78 -69
  35. package/lib/when-task.js +69 -65
  36. package/package.json +10 -9
  37. package/src/dist.build.requirejs +20 -0
  38. package/test/ast.mocha.js +136 -0
  39. package/test/cb-task.mocha.js +220 -0
  40. package/test/core-deferred.mocha.js +143 -0
  41. package/test/core-when.mocha.js +96 -0
  42. package/test/core.mocha.js +589 -0
  43. package/test/dsl.mocha.js +350 -0
  44. package/test/event-manager.mocha.js +119 -0
  45. package/test/exec-options.mocha.js +48 -0
  46. package/test/finalcb-task.mocha.js +58 -0
  47. package/test/input-parser.mocha.js +86 -0
  48. package/test/log-events.mocha.js +88 -0
  49. package/test/mocha.opts +2 -0
  50. package/test/module-use.mocha.js +147 -0
  51. package/test/promise-auto-resolve.mocha.js +68 -0
  52. package/test/ret-task.mocha.js +220 -0
  53. package/test/task.mocha.js +42 -0
  54. package/test/validate-cb-task.mocha.js +100 -0
  55. package/test/validate-ret-task.mocha.js +110 -0
  56. package/test/validate.mocha.js +324 -0
  57. package/test/vcon.mocha.js +193 -0
  58. package/vendor/chai/chai.js +2038 -0
  59. package/vendor/jquery/jquery-1.7.1.js +9266 -0
  60. package/vendor/jquery/jquery-1.7.1.min.js +4 -0
  61. package/vendor/mocha/mocha.css +135 -0
  62. package/vendor/mocha/mocha.js +3589 -0
  63. package/vendor/node/util.js +531 -0
  64. package/vendor/requirejs/require.js +2053 -0
  65. package/vendor/requirejs/require.min.js +33 -0
  66. package/react.js +0 -40
  67. package/test/ast.test.js +0 -118
  68. package/test/cb-task.test.js +0 -197
  69. package/test/core-deferred.test.js +0 -134
  70. package/test/core-promised.test.js +0 -132
  71. package/test/core-when.test.js +0 -84
  72. package/test/core.test.js +0 -593
  73. package/test/dsl.test.js +0 -330
  74. package/test/event-manager.test.js +0 -102
  75. package/test/exec-options.test.js +0 -33
  76. package/test/finalcb-task.test.js +0 -38
  77. package/test/input-parser.test.js +0 -66
  78. package/test/module-use.test.js +0 -134
  79. package/test/promise-auto-resolve.test.js +0 -52
  80. package/test/ret-task.test.js +0 -199
  81. package/test/task.test.js +0 -21
  82. package/test/validate-cb-task.test.js +0 -74
  83. package/test/validate-ret-task.test.js +0 -83
  84. package/test/validate.test.js +0 -295
  85. package/test/vcon.test.js +0 -173
package/lib/dsl.js CHANGED
@@ -1,133 +1,138 @@
1
1
  'use strict';
2
- /*jshint regexp: false */
2
+ /*global define:true */
3
3
 
4
- var sprintf = require('sprintf').sprintf;
5
- var core = require('./core.js');
6
- var parse = require('./parse.js');
7
- var tutil = require('./task.js');
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
8
7
 
9
- var MISSING_NAME = 'first flow parameter should be the flow name, but found in/out def: %s';
10
- var INOUT_PARAMS_NO_MATCH = 'params in wrong format, wanted "foo, bar, cb -> err, baz" - found: %s';
11
- var MISSING_ERR = 'callback specified, but first out param was not "err", use for clarity. Found in/out def: %s';
12
- var MISSING_CB = 'found err param, but cb/callback is not specified, is this cb-style async or sync function? Found in/out def: %s';
13
- var EXTRA_TASKARG = 'extra unmatched task arg: %s';
8
+ define(['./sprintf', './core', './parse', './task'],
9
+ function (sprintf, core, parse, taskUtil) {
10
+ /*jshint regexp: false */
14
11
 
15
- var INOUT_RE = /\->/; // used to detect missing name, in/out as first arg
16
- var CB_NAMES_RE = /^cb|callback$/i; //cb, Cb, CB, callback, Callback
17
- var ERR_NAMES_RE = /^err$/i; // err, ERR, Err, ...
12
+ var MISSING_NAME = 'first flow parameter should be the flow name, but found in/out def: %s';
13
+ var INOUT_PARAMS_NO_MATCH = 'params in wrong format, wanted "foo, bar, cb -> err, baz" - found: %s';
14
+ var MISSING_ERR = 'callback specified, but first out param was not "err", use for clarity. Found in/out def: %s';
15
+ var MISSING_CB = 'found err param, but cb/callback is not specified, is this cb-style async or sync function? Found in/out def: %s';
16
+ var EXTRA_TASKARG = 'extra unmatched task arg: %s';
18
17
 
19
- function filterOutTrailingCbParam(args) { // if has trailing cb | callback param, filter it out
20
- if (args.length && args[args.length - 1].match(CB_NAMES_RE)) args.pop();
21
- return args;
22
- }
18
+ var INOUT_RE = /\->/; // used to detect missing name, in/out as first arg
19
+ var CB_NAMES_RE = /^cb|callback$/i; //cb, Cb, CB, callback, Callback
20
+ var ERR_NAMES_RE = /^err$/i; // err, ERR, Err, ...
23
21
 
24
- function filterOutLeadingErrParam(args) { // if leading err param, filter it out
25
- if (args.length && args[0].match(ERR_NAMES_RE)) args.shift();
26
- return args;
27
- }
22
+ function filterOutTrailingCbParam(args) { // if has trailing cb | callback param, filter it out
23
+ if (args.length && args[args.length - 1].match(CB_NAMES_RE)) args.pop();
24
+ return args;
25
+ }
28
26
 
29
- var inOutDefParse = {
30
- splitStr: '->',
31
- fn: function (m, origStr) {
32
- var inParams = parse.splitTrimFilterArgs(m[0]);
33
- var lastParam = inParams[inParams.length - 1];
34
- var type = (lastParam && CB_NAMES_RE.test(lastParam)) ? 'cb' : 'ret';
35
- var outParams = parse.splitTrimFilterArgs(m[1]);
36
- var firstOutParam = outParams[0];
37
- if (type === 'cb' && (!firstOutParam || !ERR_NAMES_RE.test(firstOutParam))) {
38
- throw new Error(sprintf(MISSING_ERR, origStr)); // found cb, but no err param
39
- } else if (type === 'ret' && firstOutParam && ERR_NAMES_RE.test(firstOutParam)) {
40
- throw new Error(sprintf(MISSING_CB, origStr)); // found err but not cb param
41
- }
42
- return {
43
- type: type,
44
- inDef: filterOutTrailingCbParam(inParams),
45
- outDef: filterOutLeadingErrParam(outParams)
46
- };
27
+ function filterOutLeadingErrParam(args) { // if leading err param, filter it out
28
+ if (args.length && args[0].match(ERR_NAMES_RE)) args.shift();
29
+ return args;
47
30
  }
48
- };
49
31
 
50
- function parseInOutParams(str) {
51
- var objDef = parse.parseStr(str, [inOutDefParse], INOUT_PARAMS_NO_MATCH);
52
- objDef.inDef = filterOutTrailingCbParam(objDef.inDef);
53
- return objDef;
54
- }
32
+ var inOutDefParse = {
33
+ splitStr: '->',
34
+ fn: function (m, origStr) {
35
+ var inParams = parse.splitTrimFilterArgs(m[0]);
36
+ var lastParam = inParams[inParams.length - 1];
37
+ var type = (lastParam && CB_NAMES_RE.test(lastParam)) ? 'cb' : 'ret';
38
+ var outParams = parse.splitTrimFilterArgs(m[1]);
39
+ var firstOutParam = outParams[0];
40
+ if (type === 'cb' && (!firstOutParam || !ERR_NAMES_RE.test(firstOutParam))) {
41
+ throw new Error(sprintf(MISSING_ERR, origStr)); // found cb, but no err param
42
+ } else if (type === 'ret' && firstOutParam && ERR_NAMES_RE.test(firstOutParam)) {
43
+ throw new Error(sprintf(MISSING_CB, origStr)); // found err but not cb param
44
+ }
45
+ return {
46
+ type: type,
47
+ inDef: filterOutTrailingCbParam(inParams),
48
+ outDef: filterOutLeadingErrParam(outParams)
49
+ };
50
+ }
51
+ };
55
52
 
56
- function parseTasks(arr) {
57
- var tasks = [];
58
- var fn, obj, result;
59
- while (arr.length >= 2) {
60
- obj = {};
61
- fn = arr.shift();
62
- result = parseInOutParams(arr.shift());
63
- if (typeof(arr[0]) === 'object') obj = arr.shift(); // has options, use as obj
64
- obj.f = fn;
65
- obj.a = result.inDef;
66
- var type = result.type;
67
- obj.out = result.outDef;
68
- obj.type = type;
69
- tasks.push(obj);
53
+ function parseInOutParams(str) {
54
+ var objDef = parse.parseStr(str, [inOutDefParse], INOUT_PARAMS_NO_MATCH);
55
+ objDef.inDef = filterOutTrailingCbParam(objDef.inDef);
56
+ return objDef;
57
+ }
58
+
59
+ function parseTasks(arr) {
60
+ var tasks = [];
61
+ var fn, obj, result;
62
+ while (arr.length >= 2) {
63
+ obj = {};
64
+ fn = arr.shift();
65
+ result = parseInOutParams(arr.shift());
66
+ if (typeof(arr[0]) === 'object') obj = arr.shift(); // has options, use as obj
67
+ obj.f = fn;
68
+ obj.a = result.inDef;
69
+ var type = result.type;
70
+ obj.out = result.outDef;
71
+ obj.type = type;
72
+ tasks.push(obj);
73
+ }
74
+ if (arr.length) throw new Error(sprintf(EXTRA_TASKARG, arr[0]));
75
+ return tasks;
70
76
  }
71
- if (arr.length) throw new Error(sprintf(EXTRA_TASKARG, arr[0]));
72
- return tasks;
73
- }
74
77
 
75
- /**
76
- Parse the variable arguments into in/out params, options, tasks
78
+ /**
79
+ Parse the variable arguments into in/out params, options, tasks
77
80
  */
78
- function parseVargs(vargs) {
79
- var inOutParamStr = vargs.shift() || '';
80
- // if next arg is object, shift it off as options
81
- var options = (vargs.length && typeof(vargs[0]) === 'object') ? vargs.shift() : { };
82
- var taskDefArr = vargs; // rest are for the tasks
83
- var defObj = {
84
- inOutParamStr: inOutParamStr,
85
- taskDefArr: taskDefArr,
86
- options: options
87
- };
88
- return defObj;
89
- }
81
+ function parseVargs(vargs) {
82
+ var inOutParamStr = vargs.shift() || '';
83
+ // if next arg is object, shift it off as options
84
+ var options = (vargs.length && typeof(vargs[0]) === 'object') ? vargs.shift() : { };
85
+ var taskDefArr = vargs; // rest are for the tasks
86
+ var defObj = {
87
+ inOutParamStr: inOutParamStr,
88
+ taskDefArr: taskDefArr,
89
+ options: options
90
+ };
91
+ return defObj;
92
+ }
90
93
 
91
94
 
92
- function dslDefine(name, arg1, arg2, argN) {
93
- var reactFn = core();
94
- if (name && INOUT_RE.test(name)) throw new Error(sprintf(MISSING_NAME, name));
95
- var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
96
- var inOutDef = parseInOutParams(defObj.inOutParamStr);
97
- var ast = {
98
- name: name,
99
- inParams: inOutDef.inDef,
100
- tasks: parseTasks(defObj.taskDefArr),
101
- outTask: { a: inOutDef.outDef }
102
- };
103
- if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
104
- var errors = reactFn.setAndValidateAST(ast);
105
- if (errors.length) {
106
- var errorStr = errors.join('\n');
107
- throw new Error(errorStr);
108
- }
109
- return reactFn;
110
- }
95
+ function dslDefine(name, arg1, arg2, argN) {
96
+ var reactFn = core();
97
+ if (name && INOUT_RE.test(name)) throw new Error(sprintf(MISSING_NAME, name));
98
+ var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
99
+ var inOutDef = parseInOutParams(defObj.inOutParamStr);
100
+ var ast = {
101
+ name: name,
102
+ inParams: inOutDef.inDef,
103
+ tasks: parseTasks(defObj.taskDefArr),
104
+ outTask: { a: inOutDef.outDef }
105
+ };
106
+ if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
107
+ var errors = reactFn.setAndValidateAST(ast);
108
+ if (errors.length) {
109
+ var errorStr = errors.join('\n');
110
+ throw new Error(errorStr);
111
+ }
112
+ return reactFn;
113
+ }
111
114
 
112
- function selectFirst(name, arg1, arg2, argN) {
113
- var reactFn = core();
114
- var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
115
- var inOutDef = parseInOutParams(defObj.inOutParamStr);
116
- var tasks = tutil.serializeTasks(parseTasks(defObj.taskDefArr));
117
- var ast = {
118
- name: name,
119
- inParams: inOutDef.inDef,
120
- tasks: tasks,
121
- outTask: { type: 'finalcbFirst', a: inOutDef.outDef },
122
- };
123
- if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
124
- var errors = reactFn.setAndValidateAST(ast);
125
- if (errors.length) {
126
- var errorStr = errors.join('\n');
127
- throw new Error(errorStr);
115
+ function selectFirst(name, arg1, arg2, argN) {
116
+ var reactFn = core();
117
+ var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
118
+ var inOutDef = parseInOutParams(defObj.inOutParamStr);
119
+ var tasks = taskUtil.serializeTasks(parseTasks(defObj.taskDefArr));
120
+ var ast = {
121
+ name: name,
122
+ inParams: inOutDef.inDef,
123
+ tasks: tasks,
124
+ outTask: { type: 'finalcbFirst', a: inOutDef.outDef },
125
+ };
126
+ if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
127
+ var errors = reactFn.setAndValidateAST(ast);
128
+ if (errors.length) {
129
+ var errorStr = errors.join('\n');
130
+ throw new Error(errorStr);
131
+ }
132
+ return reactFn;
128
133
  }
129
- return reactFn;
130
- }
131
134
 
132
- module.exports = dslDefine;
133
- module.exports.selectFirst = selectFirst;
135
+ dslDefine.selectFirst = selectFirst;
136
+ return dslDefine;
137
+
138
+ });
package/lib/error.js CHANGED
@@ -1,47 +1,55 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var util = require('util');
4
-
5
- function ensureStackTraceLimitSet(stackTraceLimit) {
6
- if (!Error.stackTraceLimit || Error.stackTraceLimit < stackTraceLimit) {
7
- Error.stackTraceLimit = stackTraceLimit;
8
- }
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
9
6
  }
10
7
 
11
- function fName(fn) {
12
- if (!fn) return 'undefined';
13
- return (fn && fn.name) ? fn.name : fn;
14
- }
8
+ define(['util'], function (util) {
15
9
 
16
- function formatErrorMeta(err) {
17
- if (!err.meta) return;
18
- var vcon = err.meta.vcon;
19
- var task = err.meta.task;
20
- var errString = '\n\n';
21
- if (task && task.f && task.a) {
22
- errString += ('Error occurs in Task function: ' + fName(task.f) + '(' + task.a.join(',') + ')\n\n');
10
+ function ensureStackTraceLimitSet(stackTraceLimit) {
11
+ if (!Error.stackTraceLimit || Error.stackTraceLimit < stackTraceLimit) {
12
+ Error.stackTraceLimit = stackTraceLimit;
13
+ }
23
14
  }
24
- if (vcon) {
25
- errString += 'Variable Context: \n';
26
- errString += util.inspect(vcon);
27
- errString += '\n\n';
15
+
16
+ function fName(fn) {
17
+ if (!fn) return 'undefined';
18
+ return (fn && fn.name) ? fn.name : fn;
28
19
  }
29
- if (task && task.f) {
30
- errString += 'Task Source:\n\n';
31
- errString += task.f.toString(); //TODO need to pretty print function, gets collapsed
32
- errString += '\n\n';
20
+
21
+ function formatErrorMeta(err) {
22
+ if (!err.meta) return;
23
+ var vcon = err.meta.vcon;
24
+ var task = err.meta.task;
25
+ var errString = '\n\n';
26
+ if (task && task.f && task.a) {
27
+ errString += ('Error occurs in Task function: ' + fName(task.f) + '(' + task.a.join(',') + ')\n\n');
28
+ }
29
+ if (vcon) {
30
+ errString += 'Variable Context: \n';
31
+ errString += util.inspect(vcon);
32
+ errString += '\n\n';
33
+ }
34
+ if (task && task.f) {
35
+ errString += 'Task Source:\n\n';
36
+ errString += task.f.toString(); //TODO need to pretty print function, gets collapsed
37
+ errString += '\n\n';
38
+ }
39
+ return errString;
33
40
  }
34
- return errString;
35
- }
36
41
 
37
- function augmentError(err, meta) {
38
- if (typeof(err) === 'string') { err = new Error(err); } //props will be lost on non-objects
39
- var origMsg = err.toString();
40
- err.meta = meta;
41
- err.toString = function () { return origMsg + formatErrorMeta(err); };
42
- return err;
43
- }
42
+ function augmentError(err, meta) {
43
+ if (typeof(err) === 'string') { err = new Error(err); } //props will be lost on non-objects
44
+ var origMsg = err.toString();
45
+ err.meta = meta;
46
+ err.toString = function () { return origMsg + formatErrorMeta(err); };
47
+ return err;
48
+ }
44
49
 
50
+ return {
51
+ ensureStackTraceLimitSet: ensureStackTraceLimitSet,
52
+ augmentError: augmentError
53
+ };
45
54
 
46
- exports.ensureStackTraceLimitSet = ensureStackTraceLimitSet;
47
- exports.augmentError = augmentError;
55
+ });
@@ -1,68 +1,81 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var react = require('../'); // require('react');
4
- react.trackTasks(); // enable task tracking
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
5
7
 
6
- var AST_EVENTS_RE = /^ast\./;
7
- var TASK_EVENTS_RE = /^task\./;
8
- var FLOW_EVENTS_RE = /^flow\./;
8
+ define([], function () {
9
9
 
10
- /**
11
- Accumulator to make it easy to capture events
10
+ /**
11
+ create an instance of the event collector
12
+ */
13
+ function instantiate(react) {
14
+ react.trackTasks(); // enable task tracking
12
15
 
13
- @example
14
- var EventCollector = require('react/lib/event-collector');
15
- var collector = new EventCollector();
16
+ var AST_EVENTS_RE = /^ast\./;
17
+ var TASK_EVENTS_RE = /^task\./;
18
+ var FLOW_EVENTS_RE = /^flow\./;
16
19
 
17
- collector.capture(); // capture all flow and task events for all react flows
18
- collector.capture('flow.*'); // capture all flow events for all react flows
19
- collector.capture(flowFn, 'task.*'); // capture task events on a flow
20
- collector.capture(flowFn, 'flow.*'); // add capture flow events on a flow
20
+ /**
21
+ Accumulator to make it easy to capture events
21
22
 
22
- var events = collector.list(); // retrieve the list of events
23
- collector.clear(); // clear the list of events;
24
- */
25
- function EventCollector() {
26
- this.events = [];
27
- }
23
+ @example
24
+ var react = require('react');
25
+ var collector = react.createEventCollector();
26
+ collector.capture(); // capture all flow and task events for all react flows
27
+ collector.capture('flow.*'); // capture all flow events for all react flows
28
+ collector.capture(flowFn, 'task.*'); // capture task events on a flow
29
+ collector.capture(flowFn, 'flow.*'); // add capture flow events on a flow
30
+ var events = collector.list(); // retrieve the list of events
31
+ collector.clear(); // clear the list of events;
32
+ */
33
+ function EventCollector() {
34
+ this.events = [];
35
+ }
28
36
 
29
- /**
30
- register listener to capture events for a specific flow
31
- @param flowFn the react flow function or can pass global react
32
- @param eventId event id or wildcarded id
33
- */
34
- EventCollector.prototype.capture = function (flowFn, eventId) {
35
- /*jshint validthis: true */
36
- if (!eventId && typeof(flowFn) === 'string') { // only eventId provided
37
- eventId = flowFn;
38
- flowFn = react; // global react
39
- } else if (!flowFn) flowFn = react; // global react
40
- if (!eventId) eventId = '*'; // default to all
41
- var emitter = flowFn.events;
42
- var self = this;
43
- function accumEvents(obj) {
44
- var eventObject = {
45
- event: this.event,
46
- time: Date.now()
37
+ /**
38
+ register listener to capture events for a specific flow
39
+ @param flowFn the react flow function or can pass global react
40
+ @param eventId event id or wildcarded id
41
+ */
42
+ EventCollector.prototype.capture = function (flowFn, eventId) {
43
+ /*jshint validthis: true */
44
+ if (!eventId && typeof(flowFn) === 'string') { // only eventId provided
45
+ eventId = flowFn;
46
+ flowFn = react; // global react
47
+ } else if (!flowFn) flowFn = react; // global react
48
+ if (!eventId) eventId = '*'; // default to all
49
+ var emitter = flowFn.events;
50
+ var self = this;
51
+ function accumEvents(obj) {
52
+ var eventObject = {
53
+ event: this.event,
54
+ time: Date.now()
55
+ };
56
+ if (FLOW_EVENTS_RE.test(this.event)) {
57
+ eventObject.env = obj;
58
+ } else if (TASK_EVENTS_RE.test(this.event)) {
59
+ eventObject.task = obj;
60
+ } else if (AST_EVENTS_RE.test(this.event)) {
61
+ eventObject.ast = obj;
62
+ }
63
+ self.events.push(eventObject);
64
+ }
65
+ emitter.on(eventId, accumEvents);
47
66
  };
48
- if (FLOW_EVENTS_RE.test(this.event)) {
49
- eventObject.env = obj;
50
- } else if (TASK_EVENTS_RE.test(this.event)) {
51
- eventObject.task = obj;
52
- } else if (AST_EVENTS_RE.test(this.event)) {
53
- eventObject.ast = obj;
54
- }
55
- self.events.push(eventObject);
56
- }
57
- emitter.on(eventId, accumEvents);
58
- };
59
67
 
60
- EventCollector.prototype.list = function () {
61
- return this.events;
62
- };
68
+ EventCollector.prototype.list = function () {
69
+ return this.events;
70
+ };
63
71
 
64
- EventCollector.prototype.clear = function () {
65
- this.events = []; // clear
66
- };
72
+ EventCollector.prototype.clear = function () {
73
+ this.events = []; // clear
74
+ };
75
+
76
+ return new EventCollector();
77
+ }
67
78
 
68
- module.exports = EventCollector;
79
+ return instantiate; // return the factory for creating EventCollector
80
+
81
+ });