react 0.5.2 → 0.6.0
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.
- package/.travis.yml +4 -0
- package/Jakefile.js +39 -0
- package/README.md +9 -22
- package/browser-test/dist.html +90 -0
- package/browser-test/index.html +86 -0
- package/browser-test/min.html +90 -0
- package/dist/react.js +3291 -0
- package/dist/react.min.js +1 -0
- package/doc/advanced.md +2 -2
- package/examples/using-events1.js +1 -1
- package/lib/base-task.js +116 -110
- package/lib/cb-task.js +71 -67
- package/lib/core.js +118 -119
- package/lib/dsl.js +120 -115
- package/lib/error.js +44 -36
- package/lib/event-collector.js +69 -56
- package/lib/event-manager.js +65 -58
- package/lib/eventemitter.js +20 -0
- package/lib/finalcb-first-task.js +56 -53
- package/lib/finalcb-task.js +55 -51
- package/lib/id.js +18 -7
- package/lib/input-parser.js +49 -41
- package/lib/log-events.js +79 -73
- package/lib/parse.js +34 -25
- package/lib/promise-resolve.js +42 -27
- package/lib/promise-task.js +78 -74
- package/lib/react.js +59 -0
- package/lib/ret-task.js +59 -55
- package/lib/sprintf.js +18 -0
- package/lib/status.js +11 -2
- package/lib/task.js +218 -217
- package/lib/track-tasks.js +72 -58
- package/lib/validate.js +136 -136
- package/lib/vcon.js +78 -69
- package/lib/when-task.js +69 -65
- package/package.json +11 -9
- package/src/dist.build.requirejs +20 -0
- package/test/ast.mocha.js +136 -0
- package/test/cb-task.mocha.js +220 -0
- package/test/core-deferred.mocha.js +143 -0
- package/test/core-when.mocha.js +96 -0
- package/test/core.mocha.js +589 -0
- package/test/dsl.mocha.js +350 -0
- package/test/event-manager.mocha.js +119 -0
- package/test/exec-options.mocha.js +48 -0
- package/test/finalcb-task.mocha.js +58 -0
- package/test/input-parser.mocha.js +86 -0
- package/test/mocha.opts +2 -0
- package/test/module-use.mocha.js +147 -0
- package/test/promise-auto-resolve.mocha.js +68 -0
- package/test/ret-task.mocha.js +220 -0
- package/test/task.mocha.js +42 -0
- package/test/validate-cb-task.mocha.js +100 -0
- package/test/validate-ret-task.mocha.js +110 -0
- package/test/validate.mocha.js +324 -0
- package/test/vcon.mocha.js +193 -0
- package/vendor/chai/chai.js +2038 -0
- package/vendor/jquery/jquery-1.7.1.js +9266 -0
- package/vendor/jquery/jquery-1.7.1.min.js +4 -0
- package/vendor/mocha/mocha.css +135 -0
- package/vendor/mocha/mocha.js +3589 -0
- package/vendor/node/util.js +531 -0
- package/vendor/requirejs/require.js +2053 -0
- package/vendor/requirejs/require.min.js +33 -0
- package/react.js +0 -40
- package/test/ast.test.js +0 -118
- package/test/cb-task.test.js +0 -197
- package/test/core-deferred.test.js +0 -134
- package/test/core-promised.test.js +0 -132
- package/test/core-when.test.js +0 -84
- package/test/core.test.js +0 -593
- package/test/dsl.test.js +0 -330
- package/test/event-manager.test.js +0 -102
- package/test/exec-options.test.js +0 -33
- package/test/finalcb-task.test.js +0 -38
- package/test/input-parser.test.js +0 -66
- package/test/module-use.test.js +0 -134
- package/test/promise-auto-resolve.test.js +0 -52
- package/test/ret-task.test.js +0 -199
- package/test/task.test.js +0 -21
- package/test/validate-cb-task.test.js +0 -74
- package/test/validate-ret-task.test.js +0 -83
- package/test/validate.test.js +0 -295
- package/test/vcon.test.js +0 -173
package/lib/dsl.js
CHANGED
|
@@ -1,133 +1,138 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
/*
|
|
2
|
+
/*global define:true */
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
var tutil = require('./task.js');
|
|
4
|
+
if (typeof define !== 'function') {
|
|
5
|
+
var define = require('amdefine')(module);
|
|
6
|
+
}
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
16
|
-
var
|
|
17
|
-
var
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
obj
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
78
|
+
/**
|
|
79
|
+
Parse the variable arguments into in/out params, options, tasks
|
|
77
80
|
*/
|
|
78
|
-
function parseVargs(vargs) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
-
|
|
133
|
-
|
|
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
|
-
|
|
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
|
|
12
|
-
if (!fn) return 'undefined';
|
|
13
|
-
return (fn && fn.name) ? fn.name : fn;
|
|
14
|
-
}
|
|
8
|
+
define(['util'], function (util) {
|
|
15
9
|
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
15
|
+
|
|
16
|
+
function fName(fn) {
|
|
17
|
+
if (!fn) return 'undefined';
|
|
18
|
+
return (fn && fn.name) ? fn.name : fn;
|
|
28
19
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
47
|
-
exports.augmentError = augmentError;
|
|
55
|
+
});
|
package/lib/event-collector.js
CHANGED
|
@@ -1,68 +1,81 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
/*global define:true */
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
if (typeof define !== 'function') {
|
|
5
|
+
var define = require('amdefine')(module);
|
|
6
|
+
}
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
var TASK_EVENTS_RE = /^task\./;
|
|
8
|
-
var FLOW_EVENTS_RE = /^flow\./;
|
|
8
|
+
define([], function () {
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
|
|
10
|
+
/**
|
|
11
|
+
create an instance of the event collector
|
|
12
|
+
*/
|
|
13
|
+
function instantiate(react) {
|
|
14
|
+
react.trackTasks(); // enable task tracking
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
var AST_EVENTS_RE = /^ast\./;
|
|
17
|
+
var TASK_EVENTS_RE = /^task\./;
|
|
18
|
+
var FLOW_EVENTS_RE = /^flow\./;
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
EventCollector.prototype.capture = function (flowFn, eventId) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
62
|
-
};
|
|
68
|
+
EventCollector.prototype.list = function () {
|
|
69
|
+
return this.events;
|
|
70
|
+
};
|
|
63
71
|
|
|
64
|
-
EventCollector.prototype.clear = function () {
|
|
65
|
-
|
|
66
|
-
};
|
|
72
|
+
EventCollector.prototype.clear = function () {
|
|
73
|
+
this.events = []; // clear
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
return new EventCollector();
|
|
77
|
+
}
|
|
67
78
|
|
|
68
|
-
|
|
79
|
+
return instantiate; // return the factory for creating EventCollector
|
|
80
|
+
|
|
81
|
+
});
|