react 0.6.1 → 0.7.1
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 +5 -2
- package/README.md +15 -3
- package/browser-test/dist.html +1 -0
- package/browser-test/index.html +1 -0
- package/browser-test/min.html +1 -0
- package/dist/react.js +370 -322
- package/dist/react.min.js +22 -1
- package/doc/advanced.md +11 -2
- package/lib/base-task.js +16 -19
- package/lib/cb-task.js +5 -5
- package/lib/core.js +5 -5
- package/lib/dsl.js +29 -29
- package/lib/error.js +4 -4
- package/lib/event-collector.js +6 -6
- package/lib/event-manager.js +7 -3
- package/lib/eventemitter.js +3 -3
- package/lib/finalcb-first-task.js +4 -4
- package/lib/finalcb-task.js +4 -4
- package/lib/id.js +3 -3
- package/lib/input-parser.js +10 -10
- package/lib/log-events.js +23 -14
- package/lib/parse.js +3 -3
- package/lib/promise-resolve.js +4 -4
- package/lib/promise-task.js +4 -4
- package/lib/react.js +7 -7
- package/lib/ret-task.js +4 -4
- package/lib/sprintf.js +4 -4
- package/lib/status.js +3 -3
- package/lib/task.js +12 -12
- package/lib/track-tasks.js +4 -4
- package/lib/validate.js +8 -8
- package/lib/vcon.js +28 -5
- package/lib/when-task.js +7 -8
- package/package.json +17 -7
- package/test/ast.mocha.js +4 -4
- package/test/cb-task.mocha.js +17 -17
- package/test/core-deferred.mocha.js +8 -8
- package/test/core-when.mocha.js +7 -7
- package/test/core.mocha.js +52 -52
- package/test/dsl.mocha.js +45 -43
- package/test/event-manager.mocha.js +2 -2
- package/test/exec-options.mocha.js +4 -4
- package/test/finalcb-task.mocha.js +6 -6
- package/test/input-parser.mocha.js +1 -1
- package/test/log-events.mocha.js +88 -0
- package/test/module-use.mocha.js +24 -7
- package/test/promise-auto-resolve.mocha.js +4 -4
- package/test/ret-task.mocha.js +18 -18
- package/test/task.mocha.js +3 -3
- package/test/validate-cb-task.mocha.js +11 -11
- package/test/validate-ret-task.mocha.js +14 -14
- package/test/validate.mocha.js +57 -57
- package/test/vcon.mocha.js +13 -13
- package/vendor/chai/chai.js +3371 -1158
- package/vendor/requirejs/require.js +1447 -1455
- package/vendor/requirejs/require.min.js +31 -28
- package/vendor/mocha/mocha.css +0 -135
- package/vendor/mocha/mocha.js +0 -3589
package/.travis.yml
CHANGED
package/README.md
CHANGED
|
@@ -16,9 +16,15 @@ Also "Reactive Programming" or "Dataflow" describe defining flow which reacts to
|
|
|
16
16
|
|
|
17
17
|
It takes inspiration from several projects including:
|
|
18
18
|
|
|
19
|
-
- Tim Caswell and Elijah Insua's [conductor](https://github.com/
|
|
19
|
+
- Tim Caswell and Elijah Insua's [conductor](https://github.com/tmpvar/conductor) - [Article](http://howtonode.org/step-of-conductor)
|
|
20
20
|
- Caolan McMahon's [async](https://github.com/caolan/async)
|
|
21
21
|
|
|
22
|
+
## Example Video and Comparison
|
|
23
|
+
|
|
24
|
+
Ryan Atkinson did a nice job of demonstrating some of the power of react as compared to async and native callback code. http://www.youtube.com/embed/5EDucc56UnA?rel=0
|
|
25
|
+
|
|
26
|
+
You can read more and see his example site here https://github.com/ryanatkn/react-writeup
|
|
27
|
+
|
|
22
28
|
|
|
23
29
|
## Goals
|
|
24
30
|
|
|
@@ -38,9 +44,11 @@ It takes inspiration from several projects including:
|
|
|
38
44
|
- class method calls
|
|
39
45
|
- selectFirst flow where the first task that returns defined, non-null value is used
|
|
40
46
|
- promise style functions - also automatic resolution of promise inputs (optionally loaded with `react.resolvePromises();`)
|
|
41
|
-
- use of resulting flow function as callback style or promise style (if no callback provided) (provided via plugin corresponding to the promise library used) See https://github.com/jeffbski/react-deferred
|
|
47
|
+
- use of resulting flow function as callback style or promise style (if no callback provided) (provided via plugin corresponding to the promise library used) See https://github.com/jeffbski/react-deferred and https://github.com/jeffbski/react-q
|
|
48
|
+
- supports ES5 browsers (can work with others by using polyfills)
|
|
42
49
|
- (planned) iteration on arrays, streams, sockets
|
|
43
50
|
- (planned) event emitter integration
|
|
51
|
+
- tested on node 0.8, 0.10, 0.11
|
|
44
52
|
|
|
45
53
|
The tasks can be mixed, meaning you can use async, sync, object method calls, class method calls, etc in the same flow.
|
|
46
54
|
|
|
@@ -156,7 +164,7 @@ var fn = react('loadRender', 'fooPath, barPath, barP2, cb -> err, renderedOut',
|
|
|
156
164
|
|
|
157
165
|
1. **flow/function name** - string - represents the name of the flow or function that will be created. React will use the name when generating events so you can monitor progress and performance and also when errors occur.
|
|
158
166
|
2. **in/out flow parameter definition** - string - the inputs and outputs for the flow function. The parameters are specified in one single string for easy typing, separated by commas. The output follows the input after being separated by a `->`. Use the parameter name `cb` or `callback` to specify the Node style callback and `err` to represent the error parameter as the first output parameter of the callback. Literal values can also be specified directly (true, false, numbers, this, null). Literal strings can simply be quoted using single or double quotes.
|
|
159
|
-
3. **optional flow options** - object - If an object is provided immediately after the in/out flow def, then these options will be provided to react to customize the flow.
|
|
167
|
+
3. **optional flow options** - object - If an object is provided immediately after the in/out flow def, then these options will be provided to react to customize the flow. The `locals` property can contain an object map of any local variables you want to reference in the flow (other than what is passed in as parameters). For example: `{ locals: { foo: foo, bar: bar }}` would make local vars available in the flow. Note that global variables are already available in the flow.
|
|
160
168
|
4. **function reference or method string** - Specify the function to be called for this task, or if calling a method off of an object being passed in or returned by a task, use a string to specify like `'obj.method'`. These can be asynchronous Node-style callback `cb(err, ...)` functions or synchronous functions which simply return values directly.
|
|
161
169
|
5. **in/out task parameter definition** - string - similar to the in/out flow parameter definition above, these are the inputs and outputs that are passed to a task function and returned from a task function. The inputs will need to match either those from the flow inputs or outputs from other tasks that will run before this task. React will use the inputs as dependencies, so it will invoke and wait for response from the tasks that provide the dependent inputs. So simply by specifying inputs and outputs for the tasks, React will prioritize and parallelize tasks to run as fast as possible. Use `cb` or `callback` along with `err` to specify asynchronous Node style `cb(err, ...)` task, or omit both to specify a synchronous task.A synchronous task can only have a single return parameter.
|
|
162
170
|
6. **optional task options** - object - if an object is provided this can be used to specify additional options for this task. Currently the valid options for a task are:
|
|
@@ -186,6 +194,10 @@ See the [Advanced React](https://github.com/jeffbski/react/blob/master/doc/advan
|
|
|
186
194
|
|
|
187
195
|
## Status
|
|
188
196
|
|
|
197
|
+
- 2013-05-23 - Allow use of globals without needing to specify in locals, move 'use strict' into define, upgrade amdefine@0.0.5, eventemitter@0.4.11, requirejs@2.1.6, mocha@1.10.0, chai@1.6.0, jake@0.5.15 (v0.7.0)
|
|
198
|
+
- 2013-04-12 - Update to test on node 0.8, 0.10, 0.11
|
|
199
|
+
- 2012-10-17 - Fix issue with logEvents and provide way to disable logEvents(false) (v0.6.3)
|
|
200
|
+
- 2012-09-12 - Upgrade RequireJS@2.0.6, mocha@1.4.2, chai@1.2.0, jake@0.3.16. Update travis config to include Node 0.8 (v0.6.2)
|
|
189
201
|
- 2012-04-25 - Browser compatibility issue with process check, (v0.6.1)
|
|
190
202
|
- 2012-04-05 - Remove dependency on sprint, use util.format
|
|
191
203
|
- 2012-03-28 - Make react AMD-enabled and compatible with ES5 browsers and node.js, provide single file dist and min, add browser tests (v0.6.0)
|
package/browser-test/dist.html
CHANGED
package/browser-test/index.html
CHANGED
package/browser-test/min.html
CHANGED
package/dist/react.js
CHANGED
|
@@ -7,21 +7,31 @@
|
|
|
7
7
|
var defaultMaxListeners = 10;
|
|
8
8
|
|
|
9
9
|
function init() {
|
|
10
|
-
this._events =
|
|
10
|
+
this._events = {};
|
|
11
|
+
if (this._conf) {
|
|
12
|
+
configure.call(this, this._conf);
|
|
13
|
+
}
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
function configure(conf) {
|
|
14
17
|
if (conf) {
|
|
18
|
+
|
|
19
|
+
this._conf = conf;
|
|
20
|
+
|
|
15
21
|
conf.delimiter && (this.delimiter = conf.delimiter);
|
|
22
|
+
conf.maxListeners && (this._events.maxListeners = conf.maxListeners);
|
|
16
23
|
conf.wildcard && (this.wildcard = conf.wildcard);
|
|
24
|
+
conf.newListener && (this.newListener = conf.newListener);
|
|
25
|
+
|
|
17
26
|
if (this.wildcard) {
|
|
18
|
-
this.listenerTree =
|
|
27
|
+
this.listenerTree = {};
|
|
19
28
|
}
|
|
20
29
|
}
|
|
21
30
|
}
|
|
22
31
|
|
|
23
32
|
function EventEmitter(conf) {
|
|
24
|
-
this._events =
|
|
33
|
+
this._events = {};
|
|
34
|
+
this.newListener = false;
|
|
25
35
|
configure.call(this, conf);
|
|
26
36
|
}
|
|
27
37
|
|
|
@@ -155,7 +165,7 @@
|
|
|
155
165
|
while (name) {
|
|
156
166
|
|
|
157
167
|
if (!tree[name]) {
|
|
158
|
-
tree[name] =
|
|
168
|
+
tree[name] = {};
|
|
159
169
|
}
|
|
160
170
|
|
|
161
171
|
tree = tree[name];
|
|
@@ -210,6 +220,8 @@
|
|
|
210
220
|
EventEmitter.prototype.setMaxListeners = function(n) {
|
|
211
221
|
this._events || init.call(this);
|
|
212
222
|
this._events.maxListeners = n;
|
|
223
|
+
if (!this._conf) this._conf = {};
|
|
224
|
+
this._conf.maxListeners = n;
|
|
213
225
|
};
|
|
214
226
|
|
|
215
227
|
EventEmitter.prototype.event = '';
|
|
@@ -241,11 +253,12 @@
|
|
|
241
253
|
};
|
|
242
254
|
|
|
243
255
|
EventEmitter.prototype.emit = function() {
|
|
256
|
+
|
|
244
257
|
this._events || init.call(this);
|
|
245
258
|
|
|
246
259
|
var type = arguments[0];
|
|
247
260
|
|
|
248
|
-
if (type === 'newListener') {
|
|
261
|
+
if (type === 'newListener' && !this.newListener) {
|
|
249
262
|
if (!this._events.newListener) { return false; }
|
|
250
263
|
}
|
|
251
264
|
|
|
@@ -547,12 +560,12 @@
|
|
|
547
560
|
|
|
548
561
|
}(typeof process !== 'undefined' && typeof process.title !== 'undefined' && typeof exports !== 'undefined' ? exports : window);
|
|
549
562
|
|
|
550
|
-
|
|
551
563
|
/*global define:true EventEmitter2:true */
|
|
552
564
|
|
|
553
565
|
|
|
554
566
|
|
|
555
567
|
define('react/eventemitter',['eventemitter2'], function (EventEmitterMod) {
|
|
568
|
+
|
|
556
569
|
|
|
557
570
|
/**
|
|
558
571
|
Abstract the details of getting an EventEmitter
|
|
@@ -563,8 +576,8 @@ define('react/eventemitter',['eventemitter2'], function (EventEmitterMod) {
|
|
|
563
576
|
var EventEmitter = (EventEmitterMod) ?
|
|
564
577
|
((EventEmitterMod.EventEmitter2) ? EventEmitterMod.EventEmitter2 : EventEmitterMod) : EventEmitter2;
|
|
565
578
|
return EventEmitter;
|
|
566
|
-
|
|
567
|
-
});
|
|
579
|
+
|
|
580
|
+
});
|
|
568
581
|
/*global define:true */
|
|
569
582
|
|
|
570
583
|
|
|
@@ -1094,12 +1107,12 @@ exports._extend = function(origin, add) {
|
|
|
1094
1107
|
};
|
|
1095
1108
|
|
|
1096
1109
|
});
|
|
1097
|
-
|
|
1098
1110
|
/*global define:true */
|
|
1099
1111
|
|
|
1100
1112
|
|
|
1101
1113
|
|
|
1102
1114
|
define('react/error',['util'], function (util) {
|
|
1115
|
+
|
|
1103
1116
|
|
|
1104
1117
|
function ensureStackTraceLimitSet(stackTraceLimit) {
|
|
1105
1118
|
if (!Error.stackTraceLimit || Error.stackTraceLimit < stackTraceLimit) {
|
|
@@ -1130,7 +1143,7 @@ define('react/error',['util'], function (util) {
|
|
|
1130
1143
|
errString += task.f.toString(); //TODO need to pretty print function, gets collapsed
|
|
1131
1144
|
errString += '\n\n';
|
|
1132
1145
|
}
|
|
1133
|
-
return errString;
|
|
1146
|
+
return errString;
|
|
1134
1147
|
}
|
|
1135
1148
|
|
|
1136
1149
|
function augmentError(err, meta) {
|
|
@@ -1143,10 +1156,26 @@ define('react/error',['util'], function (util) {
|
|
|
1143
1156
|
|
|
1144
1157
|
return {
|
|
1145
1158
|
ensureStackTraceLimitSet: ensureStackTraceLimitSet,
|
|
1146
|
-
augmentError: augmentError
|
|
1159
|
+
augmentError: augmentError
|
|
1147
1160
|
};
|
|
1148
1161
|
|
|
1149
|
-
});
|
|
1162
|
+
});
|
|
1163
|
+
/*global define:true sprint:true */
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
|
|
1167
|
+
define('react/sprintf',['util'], function (util) {
|
|
1168
|
+
|
|
1169
|
+
|
|
1170
|
+
/**
|
|
1171
|
+
Abstract the details of getting a sprintf function.
|
|
1172
|
+
Currently using the simple format capabilities of node's util.format
|
|
1173
|
+
*/
|
|
1174
|
+
|
|
1175
|
+
var sprintf = util.format;
|
|
1176
|
+
return sprintf;
|
|
1177
|
+
|
|
1178
|
+
});
|
|
1150
1179
|
(function (root, factory) {
|
|
1151
1180
|
/*global define:true */
|
|
1152
1181
|
|
|
@@ -1178,112 +1207,24 @@ define('react/error',['util'], function (util) {
|
|
|
1178
1207
|
}));
|
|
1179
1208
|
|
|
1180
1209
|
|
|
1181
|
-
|
|
1182
1210
|
/*global define:true */
|
|
1183
1211
|
|
|
1184
1212
|
|
|
1185
1213
|
|
|
1186
1214
|
define('react/status',[], function () {
|
|
1187
1215
|
|
|
1216
|
+
|
|
1188
1217
|
var STATUS = { READY: 'ready', RUNNING: 'running', ERRORED: 'errored', COMPLETE: 'complete' };
|
|
1189
1218
|
|
|
1190
1219
|
return STATUS;
|
|
1191
1220
|
|
|
1192
|
-
});
|
|
1193
|
-
|
|
1194
|
-
/*global define:true */
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
define('react/vcon',[], function () {
|
|
1199
|
-
|
|
1200
|
-
var LAST_RESULTS_KEY = ':LAST_RESULTS';
|
|
1201
|
-
|
|
1202
|
-
function VContext() {
|
|
1203
|
-
}
|
|
1204
|
-
|
|
1205
|
-
VContext.prototype.getLastResults = function () { return this.getVar(LAST_RESULTS_KEY); };
|
|
1206
|
-
VContext.prototype.setLastResults = function (args) { this.setVar(LAST_RESULTS_KEY, args); };
|
|
1207
|
-
|
|
1208
|
-
VContext.prototype.getVar = function (name) { //name might be simple or obj.prop, also literals
|
|
1209
|
-
/*jshint regexp: false */
|
|
1210
|
-
var vConValues = this.values;
|
|
1211
|
-
if (typeof(name) !== 'string') return name; // literal boolean or number
|
|
1212
|
-
name = name.trim();
|
|
1213
|
-
// literal checks need to match what is in validate.js
|
|
1214
|
-
if (name === 'true') return true;
|
|
1215
|
-
if (name === 'false') return false;
|
|
1216
|
-
if (name === 'null') return null;
|
|
1217
|
-
if (/^-?[0-9]+$/.test(name)) return parseInt(name, 10); //int
|
|
1218
|
-
if (/^-?[0-9.]+$/.test(name)) return parseFloat(name); //float
|
|
1219
|
-
var m = /^("|')([^\1]*)\1$/.exec(name); //check for quoted string " or '
|
|
1220
|
-
if (m) return m[2]; // if is quoted str, return inside of the quotes
|
|
1221
|
-
var nameAndProps = name.split('.');
|
|
1222
|
-
return nameAndProps.reduce(function (accObj, prop) {
|
|
1223
|
-
if (accObj === undefined || accObj === null) return undefined; // prevent exception
|
|
1224
|
-
return accObj[prop];
|
|
1225
|
-
}, vConValues); // vCon['foo']['bar']
|
|
1226
|
-
};
|
|
1227
|
-
|
|
1228
|
-
/**
|
|
1229
|
-
Saves all the results from a task as a unit, also sets special
|
|
1230
|
-
variable :LAST_RESULTS which keeps an array of the last values
|
|
1231
|
-
which can be used for chaining and testing last results, etc.
|
|
1232
|
-
*/
|
|
1233
|
-
VContext.prototype.saveResults = function (paramArr, valuesArr) { // set values for params
|
|
1234
|
-
var self = this;
|
|
1235
|
-
paramArr.forEach(function (k, idx) { //save values to v context
|
|
1236
|
-
self.setVar(k, (valuesArr[idx] !== undefined) ? valuesArr[idx] : null); //upgrade any undefined to null
|
|
1237
|
-
});
|
|
1238
|
-
this.setLastResults(valuesArr);
|
|
1239
|
-
};
|
|
1240
|
-
|
|
1241
|
-
VContext.prototype.setVar = function (name, value) { //name might be simple or obj.prop
|
|
1242
|
-
if (!name) return; // if name is undefined or null, then discard
|
|
1243
|
-
var vConValues = this.values;
|
|
1244
|
-
var nameAndProps = name.split('.');
|
|
1245
|
-
var lastProp = nameAndProps.pop();
|
|
1246
|
-
var obj = nameAndProps.reduce(function (accObj, prop) {
|
|
1247
|
-
var o = accObj[prop];
|
|
1248
|
-
if (o === undefined || o === null) { // if doesn't exist create it
|
|
1249
|
-
o = accObj[prop] = { };
|
|
1250
|
-
}
|
|
1251
|
-
return o;
|
|
1252
|
-
}, vConValues); // vCon['foo']['bar']
|
|
1253
|
-
obj[lastProp] = value;
|
|
1254
|
-
};
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
/**
|
|
1258
|
-
Create Variable Context using arguments passed in.
|
|
1259
|
-
Ignore extra arguments passed in. Locals can be
|
|
1260
|
-
passed into seed the VContext otherwise empty {}
|
|
1261
|
-
will be used
|
|
1262
|
-
@param self used to pass 'this' context in
|
|
1263
|
-
*/
|
|
1264
|
-
VContext.create = function (args, inParams, locals, self) {
|
|
1265
|
-
var initValues = {};
|
|
1266
|
-
if (self) initValues['this'] = self;
|
|
1267
|
-
if (locals) Object.keys(locals).forEach(function (k) { initValues[k] = locals[k]; }); // copy over keys
|
|
1268
|
-
var vContext = new VContext();
|
|
1269
|
-
vContext.values = args.reduce(function (vcon, x, idx) { // create vCon start with input args
|
|
1270
|
-
var param = inParams[idx];
|
|
1271
|
-
if (param) vcon[param] = (x !== undefined) ? x : null; // upgrade undefined to null
|
|
1272
|
-
return vcon;
|
|
1273
|
-
}, initValues);
|
|
1274
|
-
return vContext;
|
|
1275
|
-
};
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
return VContext;
|
|
1279
|
-
|
|
1280
|
-
});
|
|
1281
|
-
|
|
1221
|
+
});
|
|
1282
1222
|
/*global define:true process:false*/
|
|
1283
1223
|
|
|
1284
1224
|
|
|
1285
1225
|
|
|
1286
1226
|
define('react/event-manager',['./eventemitter'], function (EventEmitter) {
|
|
1227
|
+
|
|
1287
1228
|
/*jshint regexp:false */
|
|
1288
1229
|
|
|
1289
1230
|
var EVENT_EMITTER2_CONFIG = {
|
|
@@ -1356,12 +1297,15 @@ define('react/event-manager',['./eventemitter'], function (EventEmitter) {
|
|
|
1356
1297
|
if (this.emitter) this.emitter.removeListener.apply(this.emitter, arguments);
|
|
1357
1298
|
};
|
|
1358
1299
|
|
|
1300
|
+
EventManager.prototype.removeAllListeners = function (event) {
|
|
1301
|
+
if (this.emitter) this.emitter.removeAllListeners.apply(this.emitter, arguments);
|
|
1302
|
+
};
|
|
1303
|
+
|
|
1359
1304
|
|
|
1360
1305
|
EventManager.global = EventManager.create(); // create one top level emitter
|
|
1361
1306
|
return EventManager;
|
|
1362
|
-
|
|
1363
|
-
});
|
|
1364
1307
|
|
|
1308
|
+
});
|
|
1365
1309
|
/*global define:true */
|
|
1366
1310
|
|
|
1367
1311
|
|
|
@@ -1369,6 +1313,7 @@ define('react/event-manager',['./eventemitter'], function (EventEmitter) {
|
|
|
1369
1313
|
define('react/base-task',['ensure-array', './status', './event-manager'],
|
|
1370
1314
|
function (array, STATUS, EventManager) {
|
|
1371
1315
|
|
|
1316
|
+
|
|
1372
1317
|
function BaseTask() {
|
|
1373
1318
|
}
|
|
1374
1319
|
|
|
@@ -1428,7 +1373,7 @@ define('react/base-task',['ensure-array', './status', './event-manager'],
|
|
|
1428
1373
|
to this if they want to do this check.
|
|
1429
1374
|
*/
|
|
1430
1375
|
BaseTask.prototype.parentExists = function (objPropStr, vCon) {
|
|
1431
|
-
|
|
1376
|
+
if (!isObjProperty(objPropStr)) return true; // NOT obj prop, just simple arg, ret true
|
|
1432
1377
|
var nameAndProps = objPropStr.split('.');
|
|
1433
1378
|
nameAndProps.pop(); // pop off final prop
|
|
1434
1379
|
var parent = nameAndProps.reduce(function (accObj, prop) {
|
|
@@ -1464,120 +1409,28 @@ define('react/base-task',['ensure-array', './status', './event-manager'],
|
|
|
1464
1409
|
BaseTask.prototype.isMethodCall = function () {
|
|
1465
1410
|
/*jshint regexp: false */
|
|
1466
1411
|
return (typeof(this.f) === 'string' && /^.*\..*$/.test(this.f)); //str contains .
|
|
1467
|
-
};
|
|
1468
|
-
|
|
1469
|
-
BaseTask.prototype.getMethodObj = function (vCon) { //obj.prop.prop2, returns obj.prop or undefined
|
|
1470
|
-
var name = this.f;
|
|
1471
|
-
if (!name) return undefined;
|
|
1472
|
-
var nameAndProps = name.split('.');
|
|
1473
|
-
nameAndProps.pop(); // pop off last one
|
|
1474
|
-
if (!nameAndProps.length) return undefined;
|
|
1475
|
-
var result = nameAndProps.reduce(function (accObj, prop) {
|
|
1476
|
-
if (accObj === undefined || accObj === null) return undefined; // prevent exception
|
|
1477
|
-
return accObj[prop];
|
|
1478
|
-
}, vCon.values); // vCon['foo']['bar']
|
|
1479
|
-
return result;
|
|
1480
|
-
};
|
|
1481
|
-
|
|
1482
|
-
return BaseTask;
|
|
1483
|
-
|
|
1484
|
-
});
|
|
1485
|
-
|
|
1486
|
-
/*global define:true */
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
define('react/input-parser',['./event-manager'], function (EventManager) {
|
|
1491
|
-
|
|
1492
|
-
var defaultExecOptions = {
|
|
1493
|
-
reactExecOptions: true,
|
|
1494
|
-
outputStyle: 'cb',
|
|
1495
1412
|
};
|
|
1496
1413
|
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
function nonExecOptionsFilter(x) { return !isExecOptions(x); }
|
|
1505
|
-
function mergeExecOptions(accum, options) {
|
|
1506
|
-
Object.keys(options).forEach(function (k) { accum[k] = options[k]; });
|
|
1507
|
-
return accum;
|
|
1508
|
-
}
|
|
1509
|
-
|
|
1510
|
-
function splitArgs(args, inParams, style) {
|
|
1511
|
-
var result = { };
|
|
1512
|
-
result.args = inParams.map(function (p) { return args.shift(); }); // take args for input params first
|
|
1513
|
-
if (style === OUTPUT_STYLES.CALLBACK && args.length) result.cb = args.shift(); // next take the cb
|
|
1514
|
-
result.extra = args; // these remaining were after the callback
|
|
1414
|
+
BaseTask.prototype.getMethodObj = function (vCon) { //obj.prop.prop2, returns obj.prop or undefined
|
|
1415
|
+
var name = this.f;
|
|
1416
|
+
if (!name) return undefined;
|
|
1417
|
+
var nameAndProps = name.split('.');
|
|
1418
|
+
nameAndProps.pop(); // pop off last one
|
|
1419
|
+
if (!nameAndProps.length) return undefined;
|
|
1420
|
+
var result = vCon.resolveNameArr(nameAndProps);
|
|
1515
1421
|
return result;
|
|
1516
|
-
}
|
|
1517
|
-
|
|
1518
|
-
function inputParser(inputArgs, ast) {
|
|
1519
|
-
var parsedInput = { };
|
|
1520
|
-
var execOptionsArr = inputArgs.filter(execOptionsFilter);
|
|
1521
|
-
execOptionsArr.unshift(defaultExecOptions);
|
|
1522
|
-
parsedInput.options = execOptionsArr.reduce(mergeExecOptions, {});
|
|
1523
|
-
|
|
1524
|
-
var args = inputArgs.filter(nonExecOptionsFilter);
|
|
1525
|
-
var splitResult = splitArgs(args, ast.inParams, parsedInput.options.outputStyle);
|
|
1526
|
-
parsedInput.args = splitResult.args;
|
|
1527
|
-
parsedInput.cb = splitResult.cb;
|
|
1528
|
-
if (splitResult.outputStyle) parsedInput.options.outputStyle = splitResult.outputStyle;
|
|
1529
|
-
if (splitResult.extra) parsedInput.extraArgs = splitResult.extra;
|
|
1530
|
-
EventManager.global.emit(EventManager.TYPES.EXEC_INPUT_PREPROCESS, parsedInput); // hook
|
|
1531
|
-
return parsedInput;
|
|
1532
|
-
}
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
inputParser.defaultExecOptions = defaultExecOptions;
|
|
1536
|
-
return inputParser;
|
|
1537
|
-
|
|
1538
|
-
});
|
|
1539
|
-
|
|
1540
|
-
/*global define:true */
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
define('react/id',[], function () {
|
|
1545
|
-
|
|
1546
|
-
var startingId = 0;
|
|
1547
|
-
|
|
1548
|
-
function createUniqueId() {
|
|
1549
|
-
startingId += 1;
|
|
1550
|
-
if (startingId === Number.MAX_VALUE) startingId = 0; // if hits this start over //TODO need something better?
|
|
1551
|
-
return startingId;
|
|
1552
|
-
}
|
|
1553
|
-
|
|
1554
|
-
return {
|
|
1555
|
-
createUniqueId: createUniqueId
|
|
1556
1422
|
};
|
|
1557
1423
|
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
/*global define:true sprint:true */
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
define('react/sprintf',['util'], function (util) {
|
|
1424
|
+
return BaseTask;
|
|
1565
1425
|
|
|
1566
|
-
|
|
1567
|
-
Abstract the details of getting a sprintf function.
|
|
1568
|
-
Currently using the simple format capabilities of node's util.format
|
|
1569
|
-
*/
|
|
1570
|
-
|
|
1571
|
-
var sprintf = util.format;
|
|
1572
|
-
return sprintf;
|
|
1573
|
-
|
|
1574
|
-
});
|
|
1426
|
+
});
|
|
1575
1427
|
|
|
1576
1428
|
/*global define:true */
|
|
1577
1429
|
|
|
1578
1430
|
|
|
1579
1431
|
|
|
1580
1432
|
define('react/cb-task',['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
1433
|
+
|
|
1581
1434
|
|
|
1582
1435
|
function format_error(errmsg, obj) {
|
|
1583
1436
|
return sprintf('%s - %s', errmsg, util.inspect(obj));
|
|
@@ -1627,7 +1480,7 @@ define('react/cb-task',['util', './sprintf', './base-task'], function (util, spr
|
|
|
1627
1480
|
vCon.saveResults(self.out, args);
|
|
1628
1481
|
self.complete(args);
|
|
1629
1482
|
contExec();
|
|
1630
|
-
};
|
|
1483
|
+
};
|
|
1631
1484
|
};
|
|
1632
1485
|
|
|
1633
1486
|
CbTask.prototype.exec = function exec(vCon, handleError, contExec) {
|
|
@@ -1645,22 +1498,22 @@ define('react/cb-task',['util', './sprintf', './base-task'], function (util, spr
|
|
|
1645
1498
|
} else if (typeof(func) === 'string') {
|
|
1646
1499
|
func = vCon.getVar(func); // we want the actual fn from this string
|
|
1647
1500
|
}
|
|
1648
|
-
func.apply(bindObj, args);
|
|
1501
|
+
func.apply(bindObj, args);
|
|
1649
1502
|
} catch (err) { //catch and handle the task error, calling final cb
|
|
1650
1503
|
handleError(this, err);
|
|
1651
|
-
}
|
|
1504
|
+
}
|
|
1652
1505
|
};
|
|
1653
1506
|
|
|
1654
1507
|
return CbTask;
|
|
1655
1508
|
|
|
1656
|
-
});
|
|
1657
|
-
|
|
1509
|
+
});
|
|
1658
1510
|
|
|
1659
1511
|
/*global define:true */
|
|
1660
1512
|
|
|
1661
1513
|
|
|
1662
1514
|
|
|
1663
1515
|
define('react/promise-task',['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
1516
|
+
|
|
1664
1517
|
|
|
1665
1518
|
/**
|
|
1666
1519
|
PromiseTask is a task which executes a fn that returns a promise
|
|
@@ -1697,7 +1550,7 @@ define('react/promise-task',['util', './sprintf', './base-task'], function (util
|
|
|
1697
1550
|
taskDef.a.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
1698
1551
|
errors.push(format_error(A_REQ, taskDef));
|
|
1699
1552
|
}
|
|
1700
|
-
if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
|
|
1553
|
+
if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
|
|
1701
1554
|
taskDef.out.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
1702
1555
|
errors.push(format_error(OUT_REQ, taskDef));
|
|
1703
1556
|
}
|
|
@@ -1740,19 +1593,19 @@ define('react/promise-task',['util', './sprintf', './base-task'], function (util
|
|
|
1740
1593
|
}
|
|
1741
1594
|
} catch (err) { //catch and handle the task error, calling final cb
|
|
1742
1595
|
handleError(this, err);
|
|
1743
|
-
}
|
|
1596
|
+
}
|
|
1744
1597
|
};
|
|
1745
1598
|
|
|
1746
1599
|
return PromiseTask;
|
|
1747
1600
|
|
|
1748
|
-
});
|
|
1749
|
-
|
|
1601
|
+
});
|
|
1750
1602
|
/*global define:true */
|
|
1751
1603
|
|
|
1752
1604
|
|
|
1753
1605
|
|
|
1754
1606
|
define('react/ret-task',['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
1755
1607
|
|
|
1608
|
+
|
|
1756
1609
|
function format_error(errmsg, obj) {
|
|
1757
1610
|
return sprintf('%s - %s', errmsg, util.inspect(obj));
|
|
1758
1611
|
}
|
|
@@ -1796,7 +1649,7 @@ define('react/ret-task',['util', './sprintf', './base-task'], function (util, sp
|
|
|
1796
1649
|
RetTask.prototype.exec = function exec(vCon, handleError, contExec) {
|
|
1797
1650
|
try {
|
|
1798
1651
|
var args = this.a.map(function (k) { return vCon.getVar(k); }); //get args from vCon
|
|
1799
|
-
this.start(args); //note the start time, args
|
|
1652
|
+
this.start(args); //note the start time, args
|
|
1800
1653
|
var func = this.f;
|
|
1801
1654
|
var bindObj = vCon.getVar('this'); //global space or the original this
|
|
1802
1655
|
if (this.isMethodCall()) { //if method call then reset func and bindObj
|
|
@@ -1814,14 +1667,14 @@ define('react/ret-task',['util', './sprintf', './base-task'], function (util, sp
|
|
|
1814
1667
|
|
|
1815
1668
|
return RetTask;
|
|
1816
1669
|
|
|
1817
|
-
});
|
|
1818
|
-
|
|
1670
|
+
});
|
|
1819
1671
|
/*global define:true */
|
|
1820
1672
|
|
|
1821
1673
|
|
|
1822
1674
|
|
|
1823
1675
|
define('react/when-task',['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
1824
1676
|
|
|
1677
|
+
|
|
1825
1678
|
/**
|
|
1826
1679
|
When task which checks if is a promise (has a then method)
|
|
1827
1680
|
and waits for it to resolve.
|
|
@@ -1845,19 +1698,18 @@ define('react/when-task',['util', './sprintf', './base-task'], function (util, s
|
|
|
1845
1698
|
WhenTask.prototype = new BaseTask();
|
|
1846
1699
|
WhenTask.prototype.constructor = WhenTask;
|
|
1847
1700
|
|
|
1848
|
-
WhenTask.prototype.f = function when() { // just here to keep validations happy
|
|
1849
|
-
}
|
|
1701
|
+
WhenTask.prototype.f = function when() { }; // just here to keep validations happy
|
|
1850
1702
|
|
|
1851
1703
|
WhenTask.validate = function (taskDef) {
|
|
1852
1704
|
var errors = [];
|
|
1853
1705
|
if (!taskDef.a || !taskDef.out) {
|
|
1854
1706
|
errors.push(format_error(REQ, taskDef));
|
|
1855
1707
|
} else {
|
|
1856
|
-
if (! (Array.isArray(taskDef.a) && taskDef.a.length === 1 &&
|
|
1708
|
+
if (! (Array.isArray(taskDef.a) && taskDef.a.length === 1 &&
|
|
1857
1709
|
taskDef.a.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
1858
1710
|
errors.push(format_error(A_REQ, taskDef));
|
|
1859
1711
|
}
|
|
1860
|
-
if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
|
|
1712
|
+
if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
|
|
1861
1713
|
taskDef.out.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
1862
1714
|
errors.push(format_error(OUT_REQ, taskDef));
|
|
1863
1715
|
}
|
|
@@ -1892,25 +1744,25 @@ define('react/when-task',['util', './sprintf', './base-task'], function (util, s
|
|
|
1892
1744
|
}
|
|
1893
1745
|
} catch (err) { //catch and handle the task error, calling final cb
|
|
1894
1746
|
handleError(this, err);
|
|
1895
|
-
}
|
|
1747
|
+
}
|
|
1896
1748
|
};
|
|
1897
1749
|
|
|
1898
1750
|
return WhenTask;
|
|
1899
1751
|
|
|
1900
|
-
});
|
|
1901
|
-
|
|
1752
|
+
});
|
|
1902
1753
|
/*global define:true */
|
|
1903
1754
|
|
|
1904
1755
|
|
|
1905
1756
|
|
|
1906
1757
|
define('react/finalcb-task',['./sprintf', 'util', './status', './event-manager'],
|
|
1907
1758
|
function (sprintf, util, STATUS, EventManager) {
|
|
1759
|
+
|
|
1908
1760
|
|
|
1909
1761
|
var OUTTASK_A_REQ = 'ast.outTask.a should be an array of string param names';
|
|
1910
1762
|
|
|
1911
1763
|
function FinalCbTask(outTaskOptions) {
|
|
1912
|
-
|
|
1913
|
-
if (typeof(outTaskOptions.cbFunc) !== 'function') throw new Error('callback is not a function');
|
|
1764
|
+
var taskDef = outTaskOptions.taskDef;
|
|
1765
|
+
if (typeof(outTaskOptions.cbFunc) !== 'function') throw new Error('callback is not a function');
|
|
1914
1766
|
var self = this;
|
|
1915
1767
|
for (var k in taskDef) {
|
|
1916
1768
|
if (true) self[k] = taskDef[k]; // if to make jshint happy
|
|
@@ -1960,7 +1812,118 @@ define('react/finalcb-task',['./sprintf', 'util', './status', './event-manager']
|
|
|
1960
1812
|
|
|
1961
1813
|
return FinalCbTask;
|
|
1962
1814
|
|
|
1963
|
-
});
|
|
1815
|
+
});
|
|
1816
|
+
/*global define:true */
|
|
1817
|
+
|
|
1818
|
+
|
|
1819
|
+
|
|
1820
|
+
define('react/vcon',[], function () {
|
|
1821
|
+
|
|
1822
|
+
|
|
1823
|
+
var LAST_RESULTS_KEY = ':LAST_RESULTS';
|
|
1824
|
+
|
|
1825
|
+
function VContext() {
|
|
1826
|
+
}
|
|
1827
|
+
|
|
1828
|
+
VContext.prototype.getLastResults = function () { return this.getVar(LAST_RESULTS_KEY); };
|
|
1829
|
+
VContext.prototype.setLastResults = function (args) { this.setVar(LAST_RESULTS_KEY, args); };
|
|
1830
|
+
|
|
1831
|
+
VContext.prototype.getVar = function (name) { //name might be simple or obj.prop, also literals
|
|
1832
|
+
/*jshint regexp: false */
|
|
1833
|
+
var vConValues = this.values;
|
|
1834
|
+
if (typeof(name) !== 'string') return name; // literal boolean or number
|
|
1835
|
+
name = name.trim();
|
|
1836
|
+
// literal checks need to match what is in validate.js
|
|
1837
|
+
if (name === 'true') return true;
|
|
1838
|
+
if (name === 'false') return false;
|
|
1839
|
+
if (name === 'null') return null;
|
|
1840
|
+
if (/^-?[0-9]+$/.test(name)) return parseInt(name, 10); //int
|
|
1841
|
+
if (/^-?[0-9.]+$/.test(name)) return parseFloat(name); //float
|
|
1842
|
+
var m = /^("|')([^\1]*)\1$/.exec(name); //check for quoted string " or '
|
|
1843
|
+
if (m) return m[2]; // if is quoted str, return inside of the quotes
|
|
1844
|
+
var nameAndProps = name.split('.');
|
|
1845
|
+
var result = this.resolveNameArr(nameAndProps);
|
|
1846
|
+
return result;
|
|
1847
|
+
};
|
|
1848
|
+
|
|
1849
|
+
VContext.prototype.resolveNameArr = function (nameAndProps) {
|
|
1850
|
+
var vConValues = this.values;
|
|
1851
|
+
var result = nameAndProps.reduce(function (accObj, prop) {
|
|
1852
|
+
if (accObj === undefined || accObj === null) return undefined; // prevent exception
|
|
1853
|
+
return accObj[prop];
|
|
1854
|
+
}, vConValues); // vCon['foo']['bar']
|
|
1855
|
+
if (result === undefined && this.global !== undefined) { // see if matches any global
|
|
1856
|
+
result = nameAndProps.reduce(function (accObj, prop) {
|
|
1857
|
+
if (accObj === undefined || accObj === null) return undefined; // prevent exception
|
|
1858
|
+
return accObj[prop];
|
|
1859
|
+
}, this.global); // global['foo']['bar']
|
|
1860
|
+
}
|
|
1861
|
+
return result;
|
|
1862
|
+
};
|
|
1863
|
+
|
|
1864
|
+
/**
|
|
1865
|
+
Saves all the results from a task as a unit, also sets special
|
|
1866
|
+
variable :LAST_RESULTS which keeps an array of the last values
|
|
1867
|
+
which can be used for chaining and testing last results, etc.
|
|
1868
|
+
*/
|
|
1869
|
+
VContext.prototype.saveResults = function (paramArr, valuesArr) { // set values for params
|
|
1870
|
+
var self = this;
|
|
1871
|
+
paramArr.forEach(function (k, idx) { //save values to v context
|
|
1872
|
+
self.setVar(k, (valuesArr[idx] !== undefined) ? valuesArr[idx] : null); //upgrade any undefined to null
|
|
1873
|
+
});
|
|
1874
|
+
this.setLastResults(valuesArr);
|
|
1875
|
+
};
|
|
1876
|
+
|
|
1877
|
+
VContext.prototype.setVar = function (name, value) { //name might be simple or obj.prop
|
|
1878
|
+
if (!name) return; // if name is undefined or null, then discard
|
|
1879
|
+
var vConValues = this.values;
|
|
1880
|
+
var nameAndProps = name.split('.');
|
|
1881
|
+
var lastProp = nameAndProps.pop();
|
|
1882
|
+
var obj = nameAndProps.reduce(function (accObj, prop) {
|
|
1883
|
+
var o = accObj[prop];
|
|
1884
|
+
if (o === undefined || o === null) { // if doesn't exist create it
|
|
1885
|
+
o = accObj[prop] = { };
|
|
1886
|
+
}
|
|
1887
|
+
return o;
|
|
1888
|
+
}, vConValues); // vCon['foo']['bar']
|
|
1889
|
+
obj[lastProp] = value;
|
|
1890
|
+
};
|
|
1891
|
+
|
|
1892
|
+
|
|
1893
|
+
/**
|
|
1894
|
+
Create Variable Context using arguments passed in.
|
|
1895
|
+
Ignore extra arguments passed in. Locals can be
|
|
1896
|
+
passed into seed the VContext otherwise empty {}
|
|
1897
|
+
will be used
|
|
1898
|
+
@param self used to pass 'this' context in
|
|
1899
|
+
*/
|
|
1900
|
+
VContext.create = function (args, inParams, locals, self) {
|
|
1901
|
+
/*jshint validthis:true, evil:true */
|
|
1902
|
+
var initValues = {};
|
|
1903
|
+
if (self) initValues['this'] = self;
|
|
1904
|
+
if (locals) Object.keys(locals).forEach(function (k) { initValues[k] = locals[k]; }); // copy over keys
|
|
1905
|
+
var vContext = new VContext();
|
|
1906
|
+
vContext.values = args.reduce(function (vcon, x, idx) { // create vCon start with input args
|
|
1907
|
+
var param = inParams[idx];
|
|
1908
|
+
if (param) vcon[param] = (x !== undefined) ? x : null; // upgrade undefined to null
|
|
1909
|
+
return vcon;
|
|
1910
|
+
}, initValues);
|
|
1911
|
+
|
|
1912
|
+
// add in global
|
|
1913
|
+
if (typeof global === 'object') { // node.js and modern browsers expose global
|
|
1914
|
+
vContext.global = global;
|
|
1915
|
+
} else { // try to access this using Function eval of this
|
|
1916
|
+
// http://stackoverflow.com/questions/3277182/how-to-get-the-global-object-in-javascript
|
|
1917
|
+
vContext.global = new Function('return this')();
|
|
1918
|
+
}
|
|
1919
|
+
|
|
1920
|
+
return vContext;
|
|
1921
|
+
};
|
|
1922
|
+
|
|
1923
|
+
|
|
1924
|
+
return VContext;
|
|
1925
|
+
|
|
1926
|
+
});
|
|
1964
1927
|
|
|
1965
1928
|
/*global define:true */
|
|
1966
1929
|
|
|
@@ -1968,12 +1931,13 @@ define('react/finalcb-task',['./sprintf', 'util', './status', './event-manager']
|
|
|
1968
1931
|
|
|
1969
1932
|
define('react/finalcb-first-task',['./sprintf', 'util', './status', './vcon', './event-manager'],
|
|
1970
1933
|
function (sprintf, util, STATUS, VContext, EventManager) {
|
|
1934
|
+
|
|
1971
1935
|
|
|
1972
1936
|
var OUTTASK_A_REQ = 'ast.outTask.a should be an array of string param names';
|
|
1973
1937
|
|
|
1974
1938
|
function FinalCbFirstSuccTask(outTaskOptions) {
|
|
1975
|
-
|
|
1976
|
-
if (typeof(outTaskOptions.cbFunc) !== 'function') throw new Error('callback is not a function');
|
|
1939
|
+
var taskDef = outTaskOptions.taskDef;
|
|
1940
|
+
if (typeof(outTaskOptions.cbFunc) !== 'function') throw new Error('callback is not a function');
|
|
1977
1941
|
var self = this;
|
|
1978
1942
|
for (var k in taskDef) {
|
|
1979
1943
|
if (true) self[k] = taskDef[k]; // if to make jshint happy
|
|
@@ -2026,8 +1990,7 @@ define('react/finalcb-first-task',['./sprintf', 'util', './status', './vcon', '.
|
|
|
2026
1990
|
|
|
2027
1991
|
return FinalCbFirstSuccTask;
|
|
2028
1992
|
|
|
2029
|
-
});
|
|
2030
|
-
|
|
1993
|
+
});
|
|
2031
1994
|
/*global define:true */
|
|
2032
1995
|
|
|
2033
1996
|
|
|
@@ -2039,6 +2002,7 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2039
2002
|
RetTask, WhenTask, FinalCbTask, FinalCbFirstSuccTask,
|
|
2040
2003
|
STATUS, error, VContext, EventManager) {
|
|
2041
2004
|
|
|
2005
|
+
|
|
2042
2006
|
var TASK_TYPES = {
|
|
2043
2007
|
cb: CbTask,
|
|
2044
2008
|
ret: RetTask,
|
|
@@ -2073,13 +2037,13 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2073
2037
|
*/
|
|
2074
2038
|
function setMissingType(taskDef) {
|
|
2075
2039
|
if (taskDef.type) return taskDef; //already set, return
|
|
2076
|
-
taskDef.type = 'cb';
|
|
2040
|
+
taskDef.type = 'cb';
|
|
2077
2041
|
return taskDef;
|
|
2078
2042
|
}
|
|
2079
2043
|
|
|
2080
2044
|
function setMissingOutTaskType(taskDef) {
|
|
2081
2045
|
if (!taskDef.type) taskDef.type = Object.keys(OUT_TASK_TYPES)[0]; //use first outTask type as default
|
|
2082
|
-
}
|
|
2046
|
+
}
|
|
2083
2047
|
|
|
2084
2048
|
function ensureAfterArrStrings(taskDef) { // convert any fn to str, and make sure is array
|
|
2085
2049
|
if (!taskDef.after) return;
|
|
@@ -2092,14 +2056,14 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2092
2056
|
@returns array of errors for taskDef, could be empty
|
|
2093
2057
|
*/
|
|
2094
2058
|
function validate(taskDef) {
|
|
2095
|
-
if (!taskDef || typeof(taskDef) !== 'object') {
|
|
2059
|
+
if (!taskDef || typeof(taskDef) !== 'object') {
|
|
2096
2060
|
return [format_error(TASKDEF_IS_OBJECT, taskDef)];
|
|
2097
2061
|
}
|
|
2098
2062
|
setMissingType(taskDef);
|
|
2099
2063
|
ensureAfterArrStrings(taskDef);
|
|
2100
2064
|
var errors = [];
|
|
2101
2065
|
errors = errors.concat(validateTaskType(taskDef));
|
|
2102
|
-
errors = errors.concat(validateTask(taskDef));
|
|
2066
|
+
errors = errors.concat(validateTask(taskDef));
|
|
2103
2067
|
return errors;
|
|
2104
2068
|
}
|
|
2105
2069
|
|
|
@@ -2126,13 +2090,13 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2126
2090
|
setMissingOutTaskType(taskDef);
|
|
2127
2091
|
var taskCons = OUT_TASK_TYPES[taskDef.type];
|
|
2128
2092
|
errors = errors.concat(taskCons.validate(taskDef));
|
|
2129
|
-
return errors;
|
|
2093
|
+
return errors;
|
|
2130
2094
|
}
|
|
2131
2095
|
|
|
2132
2096
|
|
|
2133
2097
|
function validateLocalFunctions(inParams, taskDefs, locals) {
|
|
2134
2098
|
var errors = [];
|
|
2135
|
-
function foo() { } //used to mock args as fns for validation check
|
|
2099
|
+
function foo() { } //used to mock args as fns for validation check
|
|
2136
2100
|
var mock_args = inParams.map(function (p) { return foo; }); //mock args with fns
|
|
2137
2101
|
var vCon = VContext.create(mock_args, inParams, locals);
|
|
2138
2102
|
var tasks = taskDefs.map(create);
|
|
@@ -2205,7 +2169,7 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2205
2169
|
var TaskConstructor = outTaskOptions.TaskConstructor; // hook could have changed
|
|
2206
2170
|
return new TaskConstructor(outTaskOptions);
|
|
2207
2171
|
}
|
|
2208
|
-
|
|
2172
|
+
|
|
2209
2173
|
function createErrorHandler(vCon, outTask) {
|
|
2210
2174
|
return function handleError(task, err) {
|
|
2211
2175
|
task.status = STATUS.ERRORED;
|
|
@@ -2223,7 +2187,7 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2223
2187
|
|
|
2224
2188
|
function execTasks(tasksReady, vCon, handleError, contExec) {
|
|
2225
2189
|
tasksReady.forEach(function (t) { t.status = STATUS.READY; }); //set ready first, no double exec
|
|
2226
|
-
tasksReady.forEach(function (t) { t.exec(vCon, handleError, contExec); });
|
|
2190
|
+
tasksReady.forEach(function (t) { t.exec(vCon, handleError, contExec); });
|
|
2227
2191
|
}
|
|
2228
2192
|
|
|
2229
2193
|
/**
|
|
@@ -2254,7 +2218,7 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2254
2218
|
|
|
2255
2219
|
function serializeTasks(tasks) { // conveniently set after for each task idx > 0
|
|
2256
2220
|
nameTasks(tasks);
|
|
2257
|
-
tasks.forEach(function (t, idx, arr) { if (idx !== 0) t.after = [arr[idx - 1].name]; });
|
|
2221
|
+
tasks.forEach(function (t, idx, arr) { if (idx !== 0) t.after = [arr[idx - 1].name]; });
|
|
2258
2222
|
return tasks;
|
|
2259
2223
|
}
|
|
2260
2224
|
|
|
@@ -2275,15 +2239,15 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2275
2239
|
findReadyAndExec: findReadyAndExec
|
|
2276
2240
|
};
|
|
2277
2241
|
|
|
2278
|
-
});
|
|
2279
|
-
|
|
2242
|
+
});
|
|
2280
2243
|
/*global define:true */
|
|
2281
2244
|
|
|
2282
2245
|
|
|
2283
2246
|
|
|
2284
2247
|
define('react/validate',['util', './sprintf', 'ensure-array', './task'], function (util, sprintf, array, taskUtil) {
|
|
2285
|
-
/*jshint latedef:false */
|
|
2286
2248
|
|
|
2249
|
+
/*jshint latedef:false */
|
|
2250
|
+
|
|
2287
2251
|
var AST_IS_OBJECT = 'ast must be an object with inParams, tasks, and outTask';
|
|
2288
2252
|
var INPARAMS_ARR_STR = 'ast.inParams must be an array of strings';
|
|
2289
2253
|
var TASKS_ARR = 'ast.tasks must be an array of tasks';
|
|
@@ -2293,7 +2257,7 @@ define('react/validate',['util', './sprintf', 'ensure-array', './task'], functio
|
|
|
2293
2257
|
var MISSING_INPUTS = 'missing or mispelled variable referenced in flow definition: %s';
|
|
2294
2258
|
|
|
2295
2259
|
// match any of our literals true, false, int, float, quoted strings, or is property (has dot), match vcon.js
|
|
2296
|
-
var LITERAL_OR_PROP_RE = /^(true|false|this|null|\-?[0-9\.]+)$|'|"|\./i;
|
|
2260
|
+
var LITERAL_OR_PROP_RE = /^(true|false|this|null|\-?[0-9\.]+)$|'|"|\./i;
|
|
2297
2261
|
|
|
2298
2262
|
function format_error(errmsg, obj) {
|
|
2299
2263
|
return sprintf('%s - %s', errmsg, util.inspect(obj));
|
|
@@ -2349,11 +2313,11 @@ define('react/validate',['util', './sprintf', 'ensure-array', './task'], functio
|
|
|
2349
2313
|
tasks.forEach(function (t) {
|
|
2350
2314
|
errors = errors.concat(taskUtil.validate(t));
|
|
2351
2315
|
});
|
|
2352
|
-
|
|
2316
|
+
return errors;
|
|
2353
2317
|
}
|
|
2354
2318
|
|
|
2355
2319
|
function validateTaskNamesUnique(tasks) {
|
|
2356
|
-
|
|
2320
|
+
if (!Array.isArray(tasks)) return [];
|
|
2357
2321
|
var errors = [];
|
|
2358
2322
|
var namedTasks = tasks.filter(function (t) { return (t.name); });
|
|
2359
2323
|
var names = namedTasks.map(function (t) { return t.name; });
|
|
@@ -2361,7 +2325,7 @@ define('react/validate',['util', './sprintf', 'ensure-array', './task'], functio
|
|
|
2361
2325
|
if (accum[name]) errors.push(sprintf('%s %s', NAMES_UNIQUE, name));
|
|
2362
2326
|
else accum[name] = true;
|
|
2363
2327
|
return accum;
|
|
2364
|
-
}, {});
|
|
2328
|
+
}, {});
|
|
2365
2329
|
return errors;
|
|
2366
2330
|
}
|
|
2367
2331
|
|
|
@@ -2427,13 +2391,86 @@ define('react/validate',['util', './sprintf', 'ensure-array', './task'], functio
|
|
|
2427
2391
|
if (!isLiteralOrProp(p) && !names[p]) accum.push(sprintf(MISSING_INPUTS, p)); // add error if missing
|
|
2428
2392
|
return accum;
|
|
2429
2393
|
}, errors);
|
|
2430
|
-
return errors;
|
|
2394
|
+
return errors;
|
|
2431
2395
|
}
|
|
2432
2396
|
|
|
2433
2397
|
return validate;
|
|
2434
2398
|
|
|
2435
|
-
});
|
|
2399
|
+
});
|
|
2400
|
+
/*global define:true */
|
|
2401
|
+
|
|
2402
|
+
|
|
2436
2403
|
|
|
2404
|
+
define('react/input-parser',['./event-manager'], function (EventManager) {
|
|
2405
|
+
|
|
2406
|
+
|
|
2407
|
+
var defaultExecOptions = {
|
|
2408
|
+
reactExecOptions: true,
|
|
2409
|
+
outputStyle: 'cb',
|
|
2410
|
+
};
|
|
2411
|
+
|
|
2412
|
+
var OUTPUT_STYLES = {
|
|
2413
|
+
CALLBACK: 'cb',
|
|
2414
|
+
NONE: 'none'
|
|
2415
|
+
};
|
|
2416
|
+
|
|
2417
|
+
function isExecOptions(x) { return (x && x.reactExecOptions); }
|
|
2418
|
+
function execOptionsFilter(x) { return isExecOptions(x); }
|
|
2419
|
+
function nonExecOptionsFilter(x) { return !isExecOptions(x); }
|
|
2420
|
+
function mergeExecOptions(accum, options) {
|
|
2421
|
+
Object.keys(options).forEach(function (k) { accum[k] = options[k]; });
|
|
2422
|
+
return accum;
|
|
2423
|
+
}
|
|
2424
|
+
|
|
2425
|
+
function splitArgs(args, inParams, style) {
|
|
2426
|
+
var result = { };
|
|
2427
|
+
result.args = inParams.map(function (p) { return args.shift(); }); // take args for input params first
|
|
2428
|
+
if (style === OUTPUT_STYLES.CALLBACK && args.length) result.cb = args.shift(); // next take the cb
|
|
2429
|
+
result.extra = args; // these remaining were after the callback
|
|
2430
|
+
return result;
|
|
2431
|
+
}
|
|
2432
|
+
|
|
2433
|
+
function inputParser(inputArgs, ast) {
|
|
2434
|
+
var parsedInput = { };
|
|
2435
|
+
var execOptionsArr = inputArgs.filter(execOptionsFilter);
|
|
2436
|
+
execOptionsArr.unshift(defaultExecOptions);
|
|
2437
|
+
parsedInput.options = execOptionsArr.reduce(mergeExecOptions, {});
|
|
2438
|
+
|
|
2439
|
+
var args = inputArgs.filter(nonExecOptionsFilter);
|
|
2440
|
+
var splitResult = splitArgs(args, ast.inParams, parsedInput.options.outputStyle);
|
|
2441
|
+
parsedInput.args = splitResult.args;
|
|
2442
|
+
parsedInput.cb = splitResult.cb;
|
|
2443
|
+
if (splitResult.outputStyle) parsedInput.options.outputStyle = splitResult.outputStyle;
|
|
2444
|
+
if (splitResult.extra) parsedInput.extraArgs = splitResult.extra;
|
|
2445
|
+
EventManager.global.emit(EventManager.TYPES.EXEC_INPUT_PREPROCESS, parsedInput); // hook
|
|
2446
|
+
return parsedInput;
|
|
2447
|
+
}
|
|
2448
|
+
|
|
2449
|
+
|
|
2450
|
+
inputParser.defaultExecOptions = defaultExecOptions;
|
|
2451
|
+
return inputParser;
|
|
2452
|
+
|
|
2453
|
+
});
|
|
2454
|
+
/*global define:true */
|
|
2455
|
+
|
|
2456
|
+
|
|
2457
|
+
|
|
2458
|
+
define('react/id',[], function () {
|
|
2459
|
+
|
|
2460
|
+
|
|
2461
|
+
var startingId = 0;
|
|
2462
|
+
|
|
2463
|
+
function createUniqueId() {
|
|
2464
|
+
startingId += 1;
|
|
2465
|
+
if (startingId === Number.MAX_VALUE) startingId = 0; // if hits this start over //TODO need something better?
|
|
2466
|
+
return startingId;
|
|
2467
|
+
}
|
|
2468
|
+
|
|
2469
|
+
return {
|
|
2470
|
+
createUniqueId: createUniqueId
|
|
2471
|
+
};
|
|
2472
|
+
|
|
2473
|
+
});
|
|
2437
2474
|
/*global define:true */
|
|
2438
2475
|
|
|
2439
2476
|
|
|
@@ -2442,6 +2479,7 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2442
2479
|
'./vcon', './event-manager', './input-parser', './id', './sprintf'],
|
|
2443
2480
|
function (EventEmitter, error, validate, taskUtil, STATUS,
|
|
2444
2481
|
VContext, EventManager, inputParser, idGenerator, sprintf) {
|
|
2482
|
+
|
|
2445
2483
|
|
|
2446
2484
|
var reactOptions = {
|
|
2447
2485
|
stackTraceLimitMin: 30
|
|
@@ -2456,7 +2494,7 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2456
2494
|
return Object.keys(reactOptions).reduce(function (accum, k) {
|
|
2457
2495
|
if (!accum[k]) accum[k] = reactOptions[k];
|
|
2458
2496
|
return accum;
|
|
2459
|
-
}, parsedOptions);
|
|
2497
|
+
}, parsedOptions);
|
|
2460
2498
|
}
|
|
2461
2499
|
|
|
2462
2500
|
/**
|
|
@@ -2513,7 +2551,7 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2513
2551
|
});
|
|
2514
2552
|
Object.freeze(newAST);
|
|
2515
2553
|
}
|
|
2516
|
-
flowEmitter.emit(EventManager.TYPES.AST_DEFINED, ast);
|
|
2554
|
+
flowEmitter.emit(EventManager.TYPES.AST_DEFINED, ast);
|
|
2517
2555
|
return errors;
|
|
2518
2556
|
}
|
|
2519
2557
|
|
|
@@ -2537,7 +2575,7 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2537
2575
|
env.taskDefs = ast.tasks.slice(); // create copy
|
|
2538
2576
|
env.outTaskDef = Object.create(ast.outTask); // create copy
|
|
2539
2577
|
reactEmitter.emit(EventManager.TYPES.EXEC_TASKS_PRECREATE, env); // hook
|
|
2540
|
-
|
|
2578
|
+
|
|
2541
2579
|
var tasks = env.taskDefs.map(taskUtil.create);
|
|
2542
2580
|
var tasksByName = taskUtil.nameTasks(tasks); // map names to working tasks
|
|
2543
2581
|
var outTask = taskUtil.createOutTask(env.outTaskDef, parsedInput.cb, tasks, vCon, env.options, env);
|
|
@@ -2568,13 +2606,13 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2568
2606
|
reactFactory.options = reactOptions; // global react options
|
|
2569
2607
|
reactFactory.events = reactEmitter; // global react emitter
|
|
2570
2608
|
return reactFactory; // module returns reactFactory to create a react fn
|
|
2571
|
-
});
|
|
2572
|
-
|
|
2609
|
+
});
|
|
2573
2610
|
/*global define:true */
|
|
2574
2611
|
|
|
2575
2612
|
|
|
2576
2613
|
|
|
2577
2614
|
define('react/parse',['./sprintf'], function (sprintf) {
|
|
2615
|
+
|
|
2578
2616
|
|
|
2579
2617
|
function splitTrimFilterArgs(commaSepArgs) { //parse 'one, two' into ['one', 'two']
|
|
2580
2618
|
if (!commaSepArgs) return [];
|
|
@@ -2599,7 +2637,7 @@ define('react/parse',['./sprintf'], function (sprintf) {
|
|
|
2599
2637
|
return result;
|
|
2600
2638
|
} else { // no match
|
|
2601
2639
|
throw new Error(sprintf(errStr, str));
|
|
2602
|
-
}
|
|
2640
|
+
}
|
|
2603
2641
|
}
|
|
2604
2642
|
|
|
2605
2643
|
return {
|
|
@@ -2607,8 +2645,7 @@ define('react/parse',['./sprintf'], function (sprintf) {
|
|
|
2607
2645
|
parseStr: parseStr
|
|
2608
2646
|
};
|
|
2609
2647
|
|
|
2610
|
-
});
|
|
2611
|
-
|
|
2648
|
+
});
|
|
2612
2649
|
|
|
2613
2650
|
/*global define:true */
|
|
2614
2651
|
|
|
@@ -2616,7 +2653,8 @@ define('react/parse',['./sprintf'], function (sprintf) {
|
|
|
2616
2653
|
|
|
2617
2654
|
define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
2618
2655
|
function (sprintf, core, parse, taskUtil) {
|
|
2619
|
-
|
|
2656
|
+
|
|
2657
|
+
/*jshint regexp: false */
|
|
2620
2658
|
|
|
2621
2659
|
var MISSING_NAME = 'first flow parameter should be the flow name, but found in/out def: %s';
|
|
2622
2660
|
var INOUT_PARAMS_NO_MATCH = 'params in wrong format, wanted "foo, bar, cb -> err, baz" - found: %s';
|
|
@@ -2640,23 +2678,23 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2640
2678
|
|
|
2641
2679
|
var inOutDefParse = {
|
|
2642
2680
|
splitStr: '->',
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
}
|
|
2654
|
-
return {
|
|
2655
|
-
type: type,
|
|
2656
|
-
inDef: filterOutTrailingCbParam(inParams),
|
|
2657
|
-
outDef: filterOutLeadingErrParam(outParams)
|
|
2658
|
-
};
|
|
2681
|
+
fn: function (m, origStr) {
|
|
2682
|
+
var inParams = parse.splitTrimFilterArgs(m[0]);
|
|
2683
|
+
var lastParam = inParams[inParams.length - 1];
|
|
2684
|
+
var type = (lastParam && CB_NAMES_RE.test(lastParam)) ? 'cb' : 'ret';
|
|
2685
|
+
var outParams = parse.splitTrimFilterArgs(m[1]);
|
|
2686
|
+
var firstOutParam = outParams[0];
|
|
2687
|
+
if (type === 'cb' && (!firstOutParam || !ERR_NAMES_RE.test(firstOutParam))) {
|
|
2688
|
+
throw new Error(sprintf(MISSING_ERR, origStr)); // found cb, but no err param
|
|
2689
|
+
} else if (type === 'ret' && firstOutParam && ERR_NAMES_RE.test(firstOutParam)) {
|
|
2690
|
+
throw new Error(sprintf(MISSING_CB, origStr)); // found err but not cb param
|
|
2659
2691
|
}
|
|
2692
|
+
return {
|
|
2693
|
+
type: type,
|
|
2694
|
+
inDef: filterOutTrailingCbParam(inParams),
|
|
2695
|
+
outDef: filterOutLeadingErrParam(outParams)
|
|
2696
|
+
};
|
|
2697
|
+
}
|
|
2660
2698
|
};
|
|
2661
2699
|
|
|
2662
2700
|
function parseInOutParams(str) {
|
|
@@ -2692,11 +2730,11 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2692
2730
|
// if next arg is object, shift it off as options
|
|
2693
2731
|
var options = (vargs.length && typeof(vargs[0]) === 'object') ? vargs.shift() : { };
|
|
2694
2732
|
var taskDefArr = vargs; // rest are for the tasks
|
|
2695
|
-
var defObj = {
|
|
2733
|
+
var defObj = {
|
|
2696
2734
|
inOutParamStr: inOutParamStr,
|
|
2697
2735
|
taskDefArr: taskDefArr,
|
|
2698
2736
|
options: options
|
|
2699
|
-
|
|
2737
|
+
};
|
|
2700
2738
|
return defObj;
|
|
2701
2739
|
}
|
|
2702
2740
|
|
|
@@ -2704,7 +2742,7 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2704
2742
|
function dslDefine(name, arg1, arg2, argN) {
|
|
2705
2743
|
var reactFn = core();
|
|
2706
2744
|
if (name && INOUT_RE.test(name)) throw new Error(sprintf(MISSING_NAME, name));
|
|
2707
|
-
var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
|
|
2745
|
+
var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
|
|
2708
2746
|
var inOutDef = parseInOutParams(defObj.inOutParamStr);
|
|
2709
2747
|
var ast = {
|
|
2710
2748
|
name: name,
|
|
@@ -2713,18 +2751,18 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2713
2751
|
outTask: { a: inOutDef.outDef }
|
|
2714
2752
|
};
|
|
2715
2753
|
if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
|
|
2716
|
-
|
|
2754
|
+
var errors = reactFn.setAndValidateAST(ast);
|
|
2717
2755
|
if (errors.length) {
|
|
2718
2756
|
var errorStr = errors.join('\n');
|
|
2719
|
-
|
|
2757
|
+
throw new Error(errorStr);
|
|
2720
2758
|
}
|
|
2721
2759
|
return reactFn;
|
|
2722
|
-
|
|
2760
|
+
}
|
|
2723
2761
|
|
|
2724
2762
|
function selectFirst(name, arg1, arg2, argN) {
|
|
2725
2763
|
var reactFn = core();
|
|
2726
|
-
var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
|
|
2727
|
-
var inOutDef = parseInOutParams(defObj.inOutParamStr);
|
|
2764
|
+
var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
|
|
2765
|
+
var inOutDef = parseInOutParams(defObj.inOutParamStr);
|
|
2728
2766
|
var tasks = taskUtil.serializeTasks(parseTasks(defObj.taskDefArr));
|
|
2729
2767
|
var ast = {
|
|
2730
2768
|
name: name,
|
|
@@ -2732,7 +2770,7 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2732
2770
|
tasks: tasks,
|
|
2733
2771
|
outTask: { type: 'finalcbFirst', a: inOutDef.outDef },
|
|
2734
2772
|
};
|
|
2735
|
-
if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
|
|
2773
|
+
if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
|
|
2736
2774
|
var errors = reactFn.setAndValidateAST(ast);
|
|
2737
2775
|
if (errors.length) {
|
|
2738
2776
|
var errorStr = errors.join('\n');
|
|
@@ -2743,15 +2781,15 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2743
2781
|
|
|
2744
2782
|
dslDefine.selectFirst = selectFirst;
|
|
2745
2783
|
return dslDefine;
|
|
2746
|
-
|
|
2747
|
-
});
|
|
2748
2784
|
|
|
2785
|
+
});
|
|
2749
2786
|
/*global define:true */
|
|
2750
2787
|
|
|
2751
2788
|
|
|
2752
2789
|
|
|
2753
2790
|
define('react/track-tasks',[], function () {
|
|
2754
2791
|
|
|
2792
|
+
|
|
2755
2793
|
/**
|
|
2756
2794
|
Track the tasks, start, complete, args, results, elapsed time
|
|
2757
2795
|
Emits events that can be monitored
|
|
@@ -2814,18 +2852,18 @@ define('react/track-tasks',[], function () {
|
|
|
2814
2852
|
|
|
2815
2853
|
}
|
|
2816
2854
|
|
|
2817
|
-
return trackTasks;
|
|
2818
|
-
|
|
2819
|
-
});
|
|
2855
|
+
return trackTasks;
|
|
2820
2856
|
|
|
2857
|
+
});
|
|
2821
2858
|
/*global define:true */
|
|
2822
2859
|
|
|
2823
2860
|
|
|
2824
2861
|
|
|
2825
2862
|
define('react/log-events',['util'], function (util) { // TODO replace util.inspect with something portable to browser
|
|
2863
|
+
|
|
2826
2864
|
|
|
2827
2865
|
var logEventsMod = { };
|
|
2828
|
-
|
|
2866
|
+
|
|
2829
2867
|
/**
|
|
2830
2868
|
Log events to console.error
|
|
2831
2869
|
|
|
@@ -2837,31 +2875,31 @@ define('react/log-events',['util'], function (util) { // TODO replace util.inspe
|
|
|
2837
2875
|
react.logEvents(flowFn, 'flow.*'); // log all flow events on flowFn only
|
|
2838
2876
|
*/
|
|
2839
2877
|
|
|
2840
|
-
|
|
2878
|
+
var ALL_FLOW_EVENTS = 'flow.*';
|
|
2841
2879
|
var ALL_TASK_EVENTS = 'task.*';
|
|
2842
2880
|
var FLOW_RE = /^flow\./;
|
|
2843
2881
|
|
|
2844
2882
|
function flowLog(obj) {
|
|
2845
2883
|
/*jshint validthis: true */
|
|
2846
2884
|
var time = new Date();
|
|
2847
|
-
|
|
2885
|
+
time.setTime(obj.startTime);
|
|
2848
2886
|
var argsNoCb = obj.args.filter(function (a) { return (typeof(a) !== 'function'); });
|
|
2849
2887
|
var eventTimeStr = time.toISOString();
|
|
2850
2888
|
if (this.event === 'flow.complete') {
|
|
2851
|
-
var env = obj;
|
|
2889
|
+
var env = obj;
|
|
2852
2890
|
console.error('%s: %s \tmsecs: %s \n\targs: %s \n\tresults: %s\n',
|
|
2853
|
-
this.event, env.name, env.elapsedTime, util.inspect(argsNoCb), util.inspect(env.results));
|
|
2891
|
+
this.event, env.name, env.elapsedTime, util.inspect(argsNoCb), util.inspect(env.results));
|
|
2854
2892
|
} else {
|
|
2855
2893
|
var name = obj.name;
|
|
2856
2894
|
var args = obj.args;
|
|
2857
2895
|
console.error('%s: %s \n\targs: %s\n', this.event, name, util.inspect(argsNoCb));
|
|
2858
|
-
}
|
|
2896
|
+
}
|
|
2859
2897
|
}
|
|
2860
2898
|
|
|
2861
2899
|
function taskLog(obj) {
|
|
2862
2900
|
/*jshint validthis: true */
|
|
2863
2901
|
var time = new Date();
|
|
2864
|
-
time.setTime(obj.
|
|
2902
|
+
time.setTime(obj.startTime);
|
|
2865
2903
|
var argsNoCb = obj.args.filter(function (a) { return (typeof(a) !== 'function'); });
|
|
2866
2904
|
var eventTimeStr = time.toISOString();
|
|
2867
2905
|
if (this.event === 'task.complete') {
|
|
@@ -2873,46 +2911,55 @@ define('react/log-events',['util'], function (util) { // TODO replace util.inspe
|
|
|
2873
2911
|
var args = obj.args;
|
|
2874
2912
|
console.error('%s: %s:%s \n\targs: %s\n', this.event, obj.env.name, obj.name, util.inspect(argsNoCb));
|
|
2875
2913
|
}
|
|
2876
|
-
|
|
2914
|
+
|
|
2877
2915
|
}
|
|
2878
2916
|
|
|
2879
2917
|
/**
|
|
2880
2918
|
Log flow and task events for a flowFn or all of react.
|
|
2881
2919
|
If called multiple times, remove previous listener (if any) before
|
|
2882
2920
|
adding.
|
|
2883
|
-
|
|
2921
|
+
|
|
2884
2922
|
@example
|
|
2885
2923
|
var react = require('react');
|
|
2886
2924
|
react.logEvents(flowFn, eventWildcard); //log events on flowfn matching wildcard
|
|
2887
|
-
|
|
2925
|
+
|
|
2888
2926
|
@param flowFn Flow function or global react object
|
|
2889
2927
|
@param eventWildcard wildcarded event type, if not provided use flow.* and task.*
|
|
2890
2928
|
*/
|
|
2891
2929
|
function logEvents(flowFn, eventWildcard) {
|
|
2892
2930
|
if (!flowFn) throw new Error('flowFn is required');
|
|
2893
|
-
if (
|
|
2931
|
+
if (!flowFn.events._loggingEvents) flowFn.events._loggingEvents = [];
|
|
2932
|
+
if (eventWildcard === false) { // turn off logging
|
|
2933
|
+
flowFn.events._loggingEvents.forEach(function (evt) {
|
|
2934
|
+
flowFn.events.removeAllListeners(evt);
|
|
2935
|
+
});
|
|
2936
|
+
flowFn.events._loggingEvents.length = 0; // clear
|
|
2937
|
+
} else if (eventWildcard && eventWildcard !== '*') {
|
|
2894
2938
|
var logFn = (FLOW_RE.test(eventWildcard)) ? flowLog : taskLog;
|
|
2895
2939
|
flowFn.events.removeListener(eventWildcard, logFn);
|
|
2896
2940
|
flowFn.events.on(eventWildcard, logFn);
|
|
2941
|
+
flowFn.events._loggingEvents.push(eventWildcard);
|
|
2897
2942
|
} else { // none provided, use flow.* and task.*
|
|
2898
2943
|
//output events as tasks start and complete
|
|
2899
2944
|
flowFn.events.removeListener(ALL_FLOW_EVENTS, flowLog);
|
|
2900
2945
|
flowFn.events.on(ALL_FLOW_EVENTS, flowLog);
|
|
2946
|
+
flowFn.events._loggingEvents.push(ALL_FLOW_EVENTS);
|
|
2901
2947
|
flowFn.events.removeListener(ALL_TASK_EVENTS, taskLog);
|
|
2902
|
-
flowFn.events.on(ALL_TASK_EVENTS, taskLog);
|
|
2948
|
+
flowFn.events.on(ALL_TASK_EVENTS, taskLog);
|
|
2949
|
+
flowFn.events._loggingEvents.push(ALL_TASK_EVENTS);
|
|
2903
2950
|
}
|
|
2904
2951
|
}
|
|
2905
2952
|
|
|
2906
2953
|
logEventsMod.logEvents = logEvents;
|
|
2907
2954
|
return logEventsMod;
|
|
2908
2955
|
|
|
2909
|
-
});
|
|
2910
|
-
|
|
2956
|
+
});
|
|
2911
2957
|
/*global define:true */
|
|
2912
2958
|
|
|
2913
2959
|
|
|
2914
2960
|
|
|
2915
2961
|
define('react/promise-resolve',[], function () {
|
|
2962
|
+
|
|
2916
2963
|
|
|
2917
2964
|
/**
|
|
2918
2965
|
Auto resolve promises passed in as arguments to the flow
|
|
@@ -2924,9 +2971,9 @@ define('react/promise-resolve',[], function () {
|
|
|
2924
2971
|
*/
|
|
2925
2972
|
|
|
2926
2973
|
|
|
2927
|
-
|
|
2974
|
+
var PROMISE_SUFFIX = '__promise'; // added to param names that are promises
|
|
2928
2975
|
|
|
2929
|
-
|
|
2976
|
+
var resolvingPromises = false;
|
|
2930
2977
|
|
|
2931
2978
|
function resolvePromises(react) {
|
|
2932
2979
|
if (resolvingPromises) return; // already resolving
|
|
@@ -2954,13 +3001,13 @@ define('react/promise-resolve',[], function () {
|
|
|
2954
3001
|
|
|
2955
3002
|
return resolvePromises;
|
|
2956
3003
|
|
|
2957
|
-
});
|
|
2958
|
-
|
|
3004
|
+
});
|
|
2959
3005
|
/*global define:true */
|
|
2960
3006
|
|
|
2961
3007
|
|
|
2962
3008
|
|
|
2963
3009
|
define('react/event-collector',[], function () {
|
|
3010
|
+
|
|
2964
3011
|
|
|
2965
3012
|
/**
|
|
2966
3013
|
create an instance of the event collector
|
|
@@ -3013,9 +3060,9 @@ define('react/event-collector',[], function () {
|
|
|
3013
3060
|
} else if (TASK_EVENTS_RE.test(this.event)) {
|
|
3014
3061
|
eventObject.task = obj;
|
|
3015
3062
|
} else if (AST_EVENTS_RE.test(this.event)) {
|
|
3016
|
-
eventObject.ast = obj;
|
|
3063
|
+
eventObject.ast = obj;
|
|
3017
3064
|
}
|
|
3018
|
-
self.events.push(eventObject);
|
|
3065
|
+
self.events.push(eventObject);
|
|
3019
3066
|
}
|
|
3020
3067
|
emitter.on(eventId, accumEvents);
|
|
3021
3068
|
};
|
|
@@ -3028,22 +3075,22 @@ define('react/event-collector',[], function () {
|
|
|
3028
3075
|
this.events = []; // clear
|
|
3029
3076
|
};
|
|
3030
3077
|
|
|
3031
|
-
return new EventCollector();
|
|
3078
|
+
return new EventCollector();
|
|
3032
3079
|
}
|
|
3033
3080
|
|
|
3034
3081
|
return instantiate; // return the factory for creating EventCollector
|
|
3035
|
-
|
|
3036
|
-
});
|
|
3037
3082
|
|
|
3083
|
+
});
|
|
3038
3084
|
/*global define:true */
|
|
3039
3085
|
|
|
3040
3086
|
|
|
3041
3087
|
|
|
3042
|
-
define('react',['./core', './dsl', './track-tasks', './log-events', './promise-resolve', './event-collector'],
|
|
3088
|
+
define('react/react',['./core', './dsl', './track-tasks', './log-events', './promise-resolve', './event-collector'],
|
|
3043
3089
|
function (core, dsl, trackTasksFn, logEventsMod, resolvePromisesFn, eventCollectorFactory) {
|
|
3090
|
+
|
|
3044
3091
|
|
|
3045
3092
|
var react = dsl; // core + default dsl
|
|
3046
|
-
|
|
3093
|
+
|
|
3047
3094
|
/**
|
|
3048
3095
|
Enable detection of promises and resolution
|
|
3049
3096
|
*/
|
|
@@ -3057,8 +3104,8 @@ define('react',['./core', './dsl', './track-tasks', './log-events', './promise-r
|
|
|
3057
3104
|
*/
|
|
3058
3105
|
function trackTasks() {
|
|
3059
3106
|
trackTasksFn(react);
|
|
3060
|
-
}
|
|
3061
|
-
|
|
3107
|
+
}
|
|
3108
|
+
|
|
3062
3109
|
/**
|
|
3063
3110
|
If called, load the built-in plugin for log events and invoke
|
|
3064
3111
|
|
|
@@ -3066,7 +3113,7 @@ define('react',['./core', './dsl', './track-tasks', './log-events', './promise-r
|
|
|
3066
3113
|
@param eventWildcard [string] pattern to log events for
|
|
3067
3114
|
*/
|
|
3068
3115
|
function logEvents(flowFn, eventWildcard) {
|
|
3069
|
-
if (
|
|
3116
|
+
if (typeof(flowFn) !== 'function') { // only wildcard provided
|
|
3070
3117
|
eventWildcard = flowFn;
|
|
3071
3118
|
flowFn = undefined;
|
|
3072
3119
|
}
|
|
@@ -3087,7 +3134,8 @@ define('react',['./core', './dsl', './track-tasks', './log-events', './promise-r
|
|
|
3087
3134
|
react.logEvents = logEvents; // enable event logging
|
|
3088
3135
|
react.resolvePromises = resolvePromises; // enable promise resolution
|
|
3089
3136
|
react.trackTasks = trackTasks; // enable tracking of tasks
|
|
3090
|
-
react.createEventCollector = createEventCollector; // create instance of EventCollector
|
|
3137
|
+
react.createEventCollector = createEventCollector; // create instance of EventCollector
|
|
3091
3138
|
return react;
|
|
3092
|
-
|
|
3093
|
-
});
|
|
3139
|
+
|
|
3140
|
+
});
|
|
3141
|
+
define('react', ['react/react'], function (main) { return main; });
|