react 0.6.3 → 0.7.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 +5 -3
- package/README.md +10 -1
- package/dist/react.js +179 -145
- package/dist/react.min.js +1 -1
- package/doc/advanced.md +1 -1
- 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 +1 -1
- 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 +1 -1
- package/lib/parse.js +3 -3
- package/lib/promise-resolve.js +4 -4
- package/lib/promise-task.js +4 -4
- package/lib/react.js +1 -1
- 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 +7 -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 +14 -12
- package/test/event-manager.mocha.js +2 -2
- package/test/exec-options.mocha.js +4 -4
- package/test/finalcb-task.mocha.js +1 -1
- package/test/input-parser.mocha.js +1 -1
- package/test/log-events.mocha.js +1 -1
- 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
|
@@ -19,6 +19,12 @@ It takes inspiration from several projects including:
|
|
|
19
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
|
|
|
@@ -42,6 +48,7 @@ It takes inspiration from several projects including:
|
|
|
42
48
|
- supports ES5 browsers (can work with others by using polyfills)
|
|
43
49
|
- (planned) iteration on arrays, streams, sockets
|
|
44
50
|
- (planned) event emitter integration
|
|
51
|
+
- tested on node 0.8, 0.10, 0.11
|
|
45
52
|
|
|
46
53
|
The tasks can be mixed, meaning you can use async, sync, object method calls, class method calls, etc in the same flow.
|
|
47
54
|
|
|
@@ -157,7 +164,7 @@ var fn = react('loadRender', 'fooPath, barPath, barP2, cb -> err, renderedOut',
|
|
|
157
164
|
|
|
158
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.
|
|
159
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.
|
|
160
|
-
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.
|
|
161
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.
|
|
162
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.
|
|
163
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:
|
|
@@ -187,6 +194,8 @@ See the [Advanced React](https://github.com/jeffbski/react/blob/master/doc/advan
|
|
|
187
194
|
|
|
188
195
|
## Status
|
|
189
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
|
|
190
199
|
- 2012-10-17 - Fix issue with logEvents and provide way to disable logEvents(false) (v0.6.3)
|
|
191
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)
|
|
192
201
|
- 2012-04-25 - Browser compatibility issue with process check, (v0.6.1)
|
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,26 +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
|
-
});
|
|
1150
|
-
|
|
1162
|
+
});
|
|
1151
1163
|
/*global define:true sprint:true */
|
|
1152
1164
|
|
|
1153
1165
|
|
|
1154
1166
|
|
|
1155
1167
|
define('react/sprintf',['util'], function (util) {
|
|
1168
|
+
|
|
1156
1169
|
|
|
1157
1170
|
/**
|
|
1158
1171
|
Abstract the details of getting a sprintf function.
|
|
1159
1172
|
Currently using the simple format capabilities of node's util.format
|
|
1160
1173
|
*/
|
|
1161
|
-
|
|
1174
|
+
|
|
1162
1175
|
var sprintf = util.format;
|
|
1163
1176
|
return sprintf;
|
|
1164
|
-
|
|
1165
|
-
});
|
|
1177
|
+
|
|
1178
|
+
});
|
|
1166
1179
|
(function (root, factory) {
|
|
1167
1180
|
/*global define:true */
|
|
1168
1181
|
|
|
@@ -1194,24 +1207,24 @@ define('react/sprintf',['util'], function (util) {
|
|
|
1194
1207
|
}));
|
|
1195
1208
|
|
|
1196
1209
|
|
|
1197
|
-
|
|
1198
1210
|
/*global define:true */
|
|
1199
1211
|
|
|
1200
1212
|
|
|
1201
1213
|
|
|
1202
1214
|
define('react/status',[], function () {
|
|
1203
1215
|
|
|
1216
|
+
|
|
1204
1217
|
var STATUS = { READY: 'ready', RUNNING: 'running', ERRORED: 'errored', COMPLETE: 'complete' };
|
|
1205
1218
|
|
|
1206
1219
|
return STATUS;
|
|
1207
1220
|
|
|
1208
|
-
});
|
|
1209
|
-
|
|
1221
|
+
});
|
|
1210
1222
|
/*global define:true process:false*/
|
|
1211
1223
|
|
|
1212
1224
|
|
|
1213
1225
|
|
|
1214
1226
|
define('react/event-manager',['./eventemitter'], function (EventEmitter) {
|
|
1227
|
+
|
|
1215
1228
|
/*jshint regexp:false */
|
|
1216
1229
|
|
|
1217
1230
|
var EVENT_EMITTER2_CONFIG = {
|
|
@@ -1293,7 +1306,6 @@ define('react/event-manager',['./eventemitter'], function (EventEmitter) {
|
|
|
1293
1306
|
return EventManager;
|
|
1294
1307
|
|
|
1295
1308
|
});
|
|
1296
|
-
|
|
1297
1309
|
/*global define:true */
|
|
1298
1310
|
|
|
1299
1311
|
|
|
@@ -1301,6 +1313,7 @@ define('react/event-manager',['./eventemitter'], function (EventEmitter) {
|
|
|
1301
1313
|
define('react/base-task',['ensure-array', './status', './event-manager'],
|
|
1302
1314
|
function (array, STATUS, EventManager) {
|
|
1303
1315
|
|
|
1316
|
+
|
|
1304
1317
|
function BaseTask() {
|
|
1305
1318
|
}
|
|
1306
1319
|
|
|
@@ -1360,7 +1373,7 @@ define('react/base-task',['ensure-array', './status', './event-manager'],
|
|
|
1360
1373
|
to this if they want to do this check.
|
|
1361
1374
|
*/
|
|
1362
1375
|
BaseTask.prototype.parentExists = function (objPropStr, vCon) {
|
|
1363
|
-
|
|
1376
|
+
if (!isObjProperty(objPropStr)) return true; // NOT obj prop, just simple arg, ret true
|
|
1364
1377
|
var nameAndProps = objPropStr.split('.');
|
|
1365
1378
|
nameAndProps.pop(); // pop off final prop
|
|
1366
1379
|
var parent = nameAndProps.reduce(function (accObj, prop) {
|
|
@@ -1396,23 +1409,20 @@ define('react/base-task',['ensure-array', './status', './event-manager'],
|
|
|
1396
1409
|
BaseTask.prototype.isMethodCall = function () {
|
|
1397
1410
|
/*jshint regexp: false */
|
|
1398
1411
|
return (typeof(this.f) === 'string' && /^.*\..*$/.test(this.f)); //str contains .
|
|
1399
|
-
|
|
1412
|
+
};
|
|
1400
1413
|
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
}, vCon.values); // vCon['foo']['bar']
|
|
1411
|
-
return result;
|
|
1412
|
-
};
|
|
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);
|
|
1421
|
+
return result;
|
|
1422
|
+
};
|
|
1413
1423
|
|
|
1414
1424
|
return BaseTask;
|
|
1415
|
-
|
|
1425
|
+
|
|
1416
1426
|
});
|
|
1417
1427
|
|
|
1418
1428
|
/*global define:true */
|
|
@@ -1420,6 +1430,7 @@ define('react/base-task',['ensure-array', './status', './event-manager'],
|
|
|
1420
1430
|
|
|
1421
1431
|
|
|
1422
1432
|
define('react/cb-task',['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
1433
|
+
|
|
1423
1434
|
|
|
1424
1435
|
function format_error(errmsg, obj) {
|
|
1425
1436
|
return sprintf('%s - %s', errmsg, util.inspect(obj));
|
|
@@ -1469,7 +1480,7 @@ define('react/cb-task',['util', './sprintf', './base-task'], function (util, spr
|
|
|
1469
1480
|
vCon.saveResults(self.out, args);
|
|
1470
1481
|
self.complete(args);
|
|
1471
1482
|
contExec();
|
|
1472
|
-
};
|
|
1483
|
+
};
|
|
1473
1484
|
};
|
|
1474
1485
|
|
|
1475
1486
|
CbTask.prototype.exec = function exec(vCon, handleError, contExec) {
|
|
@@ -1487,22 +1498,22 @@ define('react/cb-task',['util', './sprintf', './base-task'], function (util, spr
|
|
|
1487
1498
|
} else if (typeof(func) === 'string') {
|
|
1488
1499
|
func = vCon.getVar(func); // we want the actual fn from this string
|
|
1489
1500
|
}
|
|
1490
|
-
func.apply(bindObj, args);
|
|
1501
|
+
func.apply(bindObj, args);
|
|
1491
1502
|
} catch (err) { //catch and handle the task error, calling final cb
|
|
1492
1503
|
handleError(this, err);
|
|
1493
|
-
}
|
|
1504
|
+
}
|
|
1494
1505
|
};
|
|
1495
1506
|
|
|
1496
1507
|
return CbTask;
|
|
1497
1508
|
|
|
1498
|
-
});
|
|
1499
|
-
|
|
1509
|
+
});
|
|
1500
1510
|
|
|
1501
1511
|
/*global define:true */
|
|
1502
1512
|
|
|
1503
1513
|
|
|
1504
1514
|
|
|
1505
1515
|
define('react/promise-task',['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
1516
|
+
|
|
1506
1517
|
|
|
1507
1518
|
/**
|
|
1508
1519
|
PromiseTask is a task which executes a fn that returns a promise
|
|
@@ -1539,7 +1550,7 @@ define('react/promise-task',['util', './sprintf', './base-task'], function (util
|
|
|
1539
1550
|
taskDef.a.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
1540
1551
|
errors.push(format_error(A_REQ, taskDef));
|
|
1541
1552
|
}
|
|
1542
|
-
if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
|
|
1553
|
+
if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
|
|
1543
1554
|
taskDef.out.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
1544
1555
|
errors.push(format_error(OUT_REQ, taskDef));
|
|
1545
1556
|
}
|
|
@@ -1582,19 +1593,19 @@ define('react/promise-task',['util', './sprintf', './base-task'], function (util
|
|
|
1582
1593
|
}
|
|
1583
1594
|
} catch (err) { //catch and handle the task error, calling final cb
|
|
1584
1595
|
handleError(this, err);
|
|
1585
|
-
}
|
|
1596
|
+
}
|
|
1586
1597
|
};
|
|
1587
1598
|
|
|
1588
1599
|
return PromiseTask;
|
|
1589
1600
|
|
|
1590
|
-
});
|
|
1591
|
-
|
|
1601
|
+
});
|
|
1592
1602
|
/*global define:true */
|
|
1593
1603
|
|
|
1594
1604
|
|
|
1595
1605
|
|
|
1596
1606
|
define('react/ret-task',['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
1597
1607
|
|
|
1608
|
+
|
|
1598
1609
|
function format_error(errmsg, obj) {
|
|
1599
1610
|
return sprintf('%s - %s', errmsg, util.inspect(obj));
|
|
1600
1611
|
}
|
|
@@ -1638,7 +1649,7 @@ define('react/ret-task',['util', './sprintf', './base-task'], function (util, sp
|
|
|
1638
1649
|
RetTask.prototype.exec = function exec(vCon, handleError, contExec) {
|
|
1639
1650
|
try {
|
|
1640
1651
|
var args = this.a.map(function (k) { return vCon.getVar(k); }); //get args from vCon
|
|
1641
|
-
this.start(args); //note the start time, args
|
|
1652
|
+
this.start(args); //note the start time, args
|
|
1642
1653
|
var func = this.f;
|
|
1643
1654
|
var bindObj = vCon.getVar('this'); //global space or the original this
|
|
1644
1655
|
if (this.isMethodCall()) { //if method call then reset func and bindObj
|
|
@@ -1656,14 +1667,14 @@ define('react/ret-task',['util', './sprintf', './base-task'], function (util, sp
|
|
|
1656
1667
|
|
|
1657
1668
|
return RetTask;
|
|
1658
1669
|
|
|
1659
|
-
});
|
|
1660
|
-
|
|
1670
|
+
});
|
|
1661
1671
|
/*global define:true */
|
|
1662
1672
|
|
|
1663
1673
|
|
|
1664
1674
|
|
|
1665
1675
|
define('react/when-task',['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
1666
1676
|
|
|
1677
|
+
|
|
1667
1678
|
/**
|
|
1668
1679
|
When task which checks if is a promise (has a then method)
|
|
1669
1680
|
and waits for it to resolve.
|
|
@@ -1687,19 +1698,18 @@ define('react/when-task',['util', './sprintf', './base-task'], function (util, s
|
|
|
1687
1698
|
WhenTask.prototype = new BaseTask();
|
|
1688
1699
|
WhenTask.prototype.constructor = WhenTask;
|
|
1689
1700
|
|
|
1690
|
-
WhenTask.prototype.f = function when() { // just here to keep validations happy
|
|
1691
|
-
}
|
|
1701
|
+
WhenTask.prototype.f = function when() { }; // just here to keep validations happy
|
|
1692
1702
|
|
|
1693
1703
|
WhenTask.validate = function (taskDef) {
|
|
1694
1704
|
var errors = [];
|
|
1695
1705
|
if (!taskDef.a || !taskDef.out) {
|
|
1696
1706
|
errors.push(format_error(REQ, taskDef));
|
|
1697
1707
|
} else {
|
|
1698
|
-
if (! (Array.isArray(taskDef.a) && taskDef.a.length === 1 &&
|
|
1708
|
+
if (! (Array.isArray(taskDef.a) && taskDef.a.length === 1 &&
|
|
1699
1709
|
taskDef.a.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
1700
1710
|
errors.push(format_error(A_REQ, taskDef));
|
|
1701
1711
|
}
|
|
1702
|
-
if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
|
|
1712
|
+
if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
|
|
1703
1713
|
taskDef.out.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
1704
1714
|
errors.push(format_error(OUT_REQ, taskDef));
|
|
1705
1715
|
}
|
|
@@ -1734,25 +1744,25 @@ define('react/when-task',['util', './sprintf', './base-task'], function (util, s
|
|
|
1734
1744
|
}
|
|
1735
1745
|
} catch (err) { //catch and handle the task error, calling final cb
|
|
1736
1746
|
handleError(this, err);
|
|
1737
|
-
}
|
|
1747
|
+
}
|
|
1738
1748
|
};
|
|
1739
1749
|
|
|
1740
1750
|
return WhenTask;
|
|
1741
1751
|
|
|
1742
|
-
});
|
|
1743
|
-
|
|
1752
|
+
});
|
|
1744
1753
|
/*global define:true */
|
|
1745
1754
|
|
|
1746
1755
|
|
|
1747
1756
|
|
|
1748
1757
|
define('react/finalcb-task',['./sprintf', 'util', './status', './event-manager'],
|
|
1749
1758
|
function (sprintf, util, STATUS, EventManager) {
|
|
1759
|
+
|
|
1750
1760
|
|
|
1751
1761
|
var OUTTASK_A_REQ = 'ast.outTask.a should be an array of string param names';
|
|
1752
1762
|
|
|
1753
1763
|
function FinalCbTask(outTaskOptions) {
|
|
1754
|
-
|
|
1755
|
-
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');
|
|
1756
1766
|
var self = this;
|
|
1757
1767
|
for (var k in taskDef) {
|
|
1758
1768
|
if (true) self[k] = taskDef[k]; // if to make jshint happy
|
|
@@ -1802,14 +1812,14 @@ define('react/finalcb-task',['./sprintf', 'util', './status', './event-manager']
|
|
|
1802
1812
|
|
|
1803
1813
|
return FinalCbTask;
|
|
1804
1814
|
|
|
1805
|
-
});
|
|
1806
|
-
|
|
1815
|
+
});
|
|
1807
1816
|
/*global define:true */
|
|
1808
1817
|
|
|
1809
1818
|
|
|
1810
1819
|
|
|
1811
1820
|
define('react/vcon',[], function () {
|
|
1812
1821
|
|
|
1822
|
+
|
|
1813
1823
|
var LAST_RESULTS_KEY = ':LAST_RESULTS';
|
|
1814
1824
|
|
|
1815
1825
|
function VContext() {
|
|
@@ -1832,10 +1842,23 @@ define('react/vcon',[], function () {
|
|
|
1832
1842
|
var m = /^("|')([^\1]*)\1$/.exec(name); //check for quoted string " or '
|
|
1833
1843
|
if (m) return m[2]; // if is quoted str, return inside of the quotes
|
|
1834
1844
|
var nameAndProps = name.split('.');
|
|
1835
|
-
|
|
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) {
|
|
1836
1852
|
if (accObj === undefined || accObj === null) return undefined; // prevent exception
|
|
1837
1853
|
return accObj[prop];
|
|
1838
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;
|
|
1839
1862
|
};
|
|
1840
1863
|
|
|
1841
1864
|
/**
|
|
@@ -1865,7 +1888,7 @@ define('react/vcon',[], function () {
|
|
|
1865
1888
|
}, vConValues); // vCon['foo']['bar']
|
|
1866
1889
|
obj[lastProp] = value;
|
|
1867
1890
|
};
|
|
1868
|
-
|
|
1891
|
+
|
|
1869
1892
|
|
|
1870
1893
|
/**
|
|
1871
1894
|
Create Variable Context using arguments passed in.
|
|
@@ -1875,6 +1898,7 @@ define('react/vcon',[], function () {
|
|
|
1875
1898
|
@param self used to pass 'this' context in
|
|
1876
1899
|
*/
|
|
1877
1900
|
VContext.create = function (args, inParams, locals, self) {
|
|
1901
|
+
/*jshint validthis:true, evil:true */
|
|
1878
1902
|
var initValues = {};
|
|
1879
1903
|
if (self) initValues['this'] = self;
|
|
1880
1904
|
if (locals) Object.keys(locals).forEach(function (k) { initValues[k] = locals[k]; }); // copy over keys
|
|
@@ -1884,13 +1908,22 @@ define('react/vcon',[], function () {
|
|
|
1884
1908
|
if (param) vcon[param] = (x !== undefined) ? x : null; // upgrade undefined to null
|
|
1885
1909
|
return vcon;
|
|
1886
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
|
+
|
|
1887
1920
|
return vContext;
|
|
1888
1921
|
};
|
|
1889
1922
|
|
|
1890
1923
|
|
|
1891
1924
|
return VContext;
|
|
1892
1925
|
|
|
1893
|
-
});
|
|
1926
|
+
});
|
|
1894
1927
|
|
|
1895
1928
|
/*global define:true */
|
|
1896
1929
|
|
|
@@ -1898,12 +1931,13 @@ define('react/vcon',[], function () {
|
|
|
1898
1931
|
|
|
1899
1932
|
define('react/finalcb-first-task',['./sprintf', 'util', './status', './vcon', './event-manager'],
|
|
1900
1933
|
function (sprintf, util, STATUS, VContext, EventManager) {
|
|
1934
|
+
|
|
1901
1935
|
|
|
1902
1936
|
var OUTTASK_A_REQ = 'ast.outTask.a should be an array of string param names';
|
|
1903
1937
|
|
|
1904
1938
|
function FinalCbFirstSuccTask(outTaskOptions) {
|
|
1905
|
-
|
|
1906
|
-
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');
|
|
1907
1941
|
var self = this;
|
|
1908
1942
|
for (var k in taskDef) {
|
|
1909
1943
|
if (true) self[k] = taskDef[k]; // if to make jshint happy
|
|
@@ -1956,8 +1990,7 @@ define('react/finalcb-first-task',['./sprintf', 'util', './status', './vcon', '.
|
|
|
1956
1990
|
|
|
1957
1991
|
return FinalCbFirstSuccTask;
|
|
1958
1992
|
|
|
1959
|
-
});
|
|
1960
|
-
|
|
1993
|
+
});
|
|
1961
1994
|
/*global define:true */
|
|
1962
1995
|
|
|
1963
1996
|
|
|
@@ -1969,6 +2002,7 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
1969
2002
|
RetTask, WhenTask, FinalCbTask, FinalCbFirstSuccTask,
|
|
1970
2003
|
STATUS, error, VContext, EventManager) {
|
|
1971
2004
|
|
|
2005
|
+
|
|
1972
2006
|
var TASK_TYPES = {
|
|
1973
2007
|
cb: CbTask,
|
|
1974
2008
|
ret: RetTask,
|
|
@@ -2003,13 +2037,13 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2003
2037
|
*/
|
|
2004
2038
|
function setMissingType(taskDef) {
|
|
2005
2039
|
if (taskDef.type) return taskDef; //already set, return
|
|
2006
|
-
taskDef.type = 'cb';
|
|
2040
|
+
taskDef.type = 'cb';
|
|
2007
2041
|
return taskDef;
|
|
2008
2042
|
}
|
|
2009
2043
|
|
|
2010
2044
|
function setMissingOutTaskType(taskDef) {
|
|
2011
2045
|
if (!taskDef.type) taskDef.type = Object.keys(OUT_TASK_TYPES)[0]; //use first outTask type as default
|
|
2012
|
-
}
|
|
2046
|
+
}
|
|
2013
2047
|
|
|
2014
2048
|
function ensureAfterArrStrings(taskDef) { // convert any fn to str, and make sure is array
|
|
2015
2049
|
if (!taskDef.after) return;
|
|
@@ -2022,14 +2056,14 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2022
2056
|
@returns array of errors for taskDef, could be empty
|
|
2023
2057
|
*/
|
|
2024
2058
|
function validate(taskDef) {
|
|
2025
|
-
if (!taskDef || typeof(taskDef) !== 'object') {
|
|
2059
|
+
if (!taskDef || typeof(taskDef) !== 'object') {
|
|
2026
2060
|
return [format_error(TASKDEF_IS_OBJECT, taskDef)];
|
|
2027
2061
|
}
|
|
2028
2062
|
setMissingType(taskDef);
|
|
2029
2063
|
ensureAfterArrStrings(taskDef);
|
|
2030
2064
|
var errors = [];
|
|
2031
2065
|
errors = errors.concat(validateTaskType(taskDef));
|
|
2032
|
-
errors = errors.concat(validateTask(taskDef));
|
|
2066
|
+
errors = errors.concat(validateTask(taskDef));
|
|
2033
2067
|
return errors;
|
|
2034
2068
|
}
|
|
2035
2069
|
|
|
@@ -2056,13 +2090,13 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2056
2090
|
setMissingOutTaskType(taskDef);
|
|
2057
2091
|
var taskCons = OUT_TASK_TYPES[taskDef.type];
|
|
2058
2092
|
errors = errors.concat(taskCons.validate(taskDef));
|
|
2059
|
-
return errors;
|
|
2093
|
+
return errors;
|
|
2060
2094
|
}
|
|
2061
2095
|
|
|
2062
2096
|
|
|
2063
2097
|
function validateLocalFunctions(inParams, taskDefs, locals) {
|
|
2064
2098
|
var errors = [];
|
|
2065
|
-
function foo() { } //used to mock args as fns for validation check
|
|
2099
|
+
function foo() { } //used to mock args as fns for validation check
|
|
2066
2100
|
var mock_args = inParams.map(function (p) { return foo; }); //mock args with fns
|
|
2067
2101
|
var vCon = VContext.create(mock_args, inParams, locals);
|
|
2068
2102
|
var tasks = taskDefs.map(create);
|
|
@@ -2135,7 +2169,7 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2135
2169
|
var TaskConstructor = outTaskOptions.TaskConstructor; // hook could have changed
|
|
2136
2170
|
return new TaskConstructor(outTaskOptions);
|
|
2137
2171
|
}
|
|
2138
|
-
|
|
2172
|
+
|
|
2139
2173
|
function createErrorHandler(vCon, outTask) {
|
|
2140
2174
|
return function handleError(task, err) {
|
|
2141
2175
|
task.status = STATUS.ERRORED;
|
|
@@ -2153,7 +2187,7 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2153
2187
|
|
|
2154
2188
|
function execTasks(tasksReady, vCon, handleError, contExec) {
|
|
2155
2189
|
tasksReady.forEach(function (t) { t.status = STATUS.READY; }); //set ready first, no double exec
|
|
2156
|
-
tasksReady.forEach(function (t) { t.exec(vCon, handleError, contExec); });
|
|
2190
|
+
tasksReady.forEach(function (t) { t.exec(vCon, handleError, contExec); });
|
|
2157
2191
|
}
|
|
2158
2192
|
|
|
2159
2193
|
/**
|
|
@@ -2184,7 +2218,7 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2184
2218
|
|
|
2185
2219
|
function serializeTasks(tasks) { // conveniently set after for each task idx > 0
|
|
2186
2220
|
nameTasks(tasks);
|
|
2187
|
-
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]; });
|
|
2188
2222
|
return tasks;
|
|
2189
2223
|
}
|
|
2190
2224
|
|
|
@@ -2205,15 +2239,15 @@ function (util, sprintf, array, CbTask, PromiseTask,
|
|
|
2205
2239
|
findReadyAndExec: findReadyAndExec
|
|
2206
2240
|
};
|
|
2207
2241
|
|
|
2208
|
-
});
|
|
2209
|
-
|
|
2242
|
+
});
|
|
2210
2243
|
/*global define:true */
|
|
2211
2244
|
|
|
2212
2245
|
|
|
2213
2246
|
|
|
2214
2247
|
define('react/validate',['util', './sprintf', 'ensure-array', './task'], function (util, sprintf, array, taskUtil) {
|
|
2215
|
-
/*jshint latedef:false */
|
|
2216
2248
|
|
|
2249
|
+
/*jshint latedef:false */
|
|
2250
|
+
|
|
2217
2251
|
var AST_IS_OBJECT = 'ast must be an object with inParams, tasks, and outTask';
|
|
2218
2252
|
var INPARAMS_ARR_STR = 'ast.inParams must be an array of strings';
|
|
2219
2253
|
var TASKS_ARR = 'ast.tasks must be an array of tasks';
|
|
@@ -2223,7 +2257,7 @@ define('react/validate',['util', './sprintf', 'ensure-array', './task'], functio
|
|
|
2223
2257
|
var MISSING_INPUTS = 'missing or mispelled variable referenced in flow definition: %s';
|
|
2224
2258
|
|
|
2225
2259
|
// match any of our literals true, false, int, float, quoted strings, or is property (has dot), match vcon.js
|
|
2226
|
-
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;
|
|
2227
2261
|
|
|
2228
2262
|
function format_error(errmsg, obj) {
|
|
2229
2263
|
return sprintf('%s - %s', errmsg, util.inspect(obj));
|
|
@@ -2279,11 +2313,11 @@ define('react/validate',['util', './sprintf', 'ensure-array', './task'], functio
|
|
|
2279
2313
|
tasks.forEach(function (t) {
|
|
2280
2314
|
errors = errors.concat(taskUtil.validate(t));
|
|
2281
2315
|
});
|
|
2282
|
-
|
|
2316
|
+
return errors;
|
|
2283
2317
|
}
|
|
2284
2318
|
|
|
2285
2319
|
function validateTaskNamesUnique(tasks) {
|
|
2286
|
-
|
|
2320
|
+
if (!Array.isArray(tasks)) return [];
|
|
2287
2321
|
var errors = [];
|
|
2288
2322
|
var namedTasks = tasks.filter(function (t) { return (t.name); });
|
|
2289
2323
|
var names = namedTasks.map(function (t) { return t.name; });
|
|
@@ -2291,7 +2325,7 @@ define('react/validate',['util', './sprintf', 'ensure-array', './task'], functio
|
|
|
2291
2325
|
if (accum[name]) errors.push(sprintf('%s %s', NAMES_UNIQUE, name));
|
|
2292
2326
|
else accum[name] = true;
|
|
2293
2327
|
return accum;
|
|
2294
|
-
}, {});
|
|
2328
|
+
}, {});
|
|
2295
2329
|
return errors;
|
|
2296
2330
|
}
|
|
2297
2331
|
|
|
@@ -2357,28 +2391,28 @@ define('react/validate',['util', './sprintf', 'ensure-array', './task'], functio
|
|
|
2357
2391
|
if (!isLiteralOrProp(p) && !names[p]) accum.push(sprintf(MISSING_INPUTS, p)); // add error if missing
|
|
2358
2392
|
return accum;
|
|
2359
2393
|
}, errors);
|
|
2360
|
-
return errors;
|
|
2394
|
+
return errors;
|
|
2361
2395
|
}
|
|
2362
2396
|
|
|
2363
2397
|
return validate;
|
|
2364
2398
|
|
|
2365
|
-
});
|
|
2366
|
-
|
|
2399
|
+
});
|
|
2367
2400
|
/*global define:true */
|
|
2368
2401
|
|
|
2369
2402
|
|
|
2370
2403
|
|
|
2371
2404
|
define('react/input-parser',['./event-manager'], function (EventManager) {
|
|
2405
|
+
|
|
2372
2406
|
|
|
2373
2407
|
var defaultExecOptions = {
|
|
2374
2408
|
reactExecOptions: true,
|
|
2375
2409
|
outputStyle: 'cb',
|
|
2376
2410
|
};
|
|
2377
2411
|
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2412
|
+
var OUTPUT_STYLES = {
|
|
2413
|
+
CALLBACK: 'cb',
|
|
2414
|
+
NONE: 'none'
|
|
2415
|
+
};
|
|
2382
2416
|
|
|
2383
2417
|
function isExecOptions(x) { return (x && x.reactExecOptions); }
|
|
2384
2418
|
function execOptionsFilter(x) { return isExecOptions(x); }
|
|
@@ -2394,16 +2428,16 @@ define('react/input-parser',['./event-manager'], function (EventManager) {
|
|
|
2394
2428
|
if (style === OUTPUT_STYLES.CALLBACK && args.length) result.cb = args.shift(); // next take the cb
|
|
2395
2429
|
result.extra = args; // these remaining were after the callback
|
|
2396
2430
|
return result;
|
|
2397
|
-
|
|
2398
|
-
|
|
2431
|
+
}
|
|
2432
|
+
|
|
2399
2433
|
function inputParser(inputArgs, ast) {
|
|
2400
2434
|
var parsedInput = { };
|
|
2401
2435
|
var execOptionsArr = inputArgs.filter(execOptionsFilter);
|
|
2402
2436
|
execOptionsArr.unshift(defaultExecOptions);
|
|
2403
2437
|
parsedInput.options = execOptionsArr.reduce(mergeExecOptions, {});
|
|
2404
2438
|
|
|
2405
|
-
|
|
2406
|
-
var splitResult = splitArgs(args, ast.inParams, parsedInput.options.outputStyle);
|
|
2439
|
+
var args = inputArgs.filter(nonExecOptionsFilter);
|
|
2440
|
+
var splitResult = splitArgs(args, ast.inParams, parsedInput.options.outputStyle);
|
|
2407
2441
|
parsedInput.args = splitResult.args;
|
|
2408
2442
|
parsedInput.cb = splitResult.cb;
|
|
2409
2443
|
if (splitResult.outputStyle) parsedInput.options.outputStyle = splitResult.outputStyle;
|
|
@@ -2416,14 +2450,14 @@ define('react/input-parser',['./event-manager'], function (EventManager) {
|
|
|
2416
2450
|
inputParser.defaultExecOptions = defaultExecOptions;
|
|
2417
2451
|
return inputParser;
|
|
2418
2452
|
|
|
2419
|
-
});
|
|
2420
|
-
|
|
2453
|
+
});
|
|
2421
2454
|
/*global define:true */
|
|
2422
2455
|
|
|
2423
2456
|
|
|
2424
2457
|
|
|
2425
2458
|
define('react/id',[], function () {
|
|
2426
2459
|
|
|
2460
|
+
|
|
2427
2461
|
var startingId = 0;
|
|
2428
2462
|
|
|
2429
2463
|
function createUniqueId() {
|
|
@@ -2436,8 +2470,7 @@ define('react/id',[], function () {
|
|
|
2436
2470
|
createUniqueId: createUniqueId
|
|
2437
2471
|
};
|
|
2438
2472
|
|
|
2439
|
-
});
|
|
2440
|
-
|
|
2473
|
+
});
|
|
2441
2474
|
/*global define:true */
|
|
2442
2475
|
|
|
2443
2476
|
|
|
@@ -2446,6 +2479,7 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2446
2479
|
'./vcon', './event-manager', './input-parser', './id', './sprintf'],
|
|
2447
2480
|
function (EventEmitter, error, validate, taskUtil, STATUS,
|
|
2448
2481
|
VContext, EventManager, inputParser, idGenerator, sprintf) {
|
|
2482
|
+
|
|
2449
2483
|
|
|
2450
2484
|
var reactOptions = {
|
|
2451
2485
|
stackTraceLimitMin: 30
|
|
@@ -2460,7 +2494,7 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2460
2494
|
return Object.keys(reactOptions).reduce(function (accum, k) {
|
|
2461
2495
|
if (!accum[k]) accum[k] = reactOptions[k];
|
|
2462
2496
|
return accum;
|
|
2463
|
-
}, parsedOptions);
|
|
2497
|
+
}, parsedOptions);
|
|
2464
2498
|
}
|
|
2465
2499
|
|
|
2466
2500
|
/**
|
|
@@ -2517,7 +2551,7 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2517
2551
|
});
|
|
2518
2552
|
Object.freeze(newAST);
|
|
2519
2553
|
}
|
|
2520
|
-
flowEmitter.emit(EventManager.TYPES.AST_DEFINED, ast);
|
|
2554
|
+
flowEmitter.emit(EventManager.TYPES.AST_DEFINED, ast);
|
|
2521
2555
|
return errors;
|
|
2522
2556
|
}
|
|
2523
2557
|
|
|
@@ -2541,7 +2575,7 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2541
2575
|
env.taskDefs = ast.tasks.slice(); // create copy
|
|
2542
2576
|
env.outTaskDef = Object.create(ast.outTask); // create copy
|
|
2543
2577
|
reactEmitter.emit(EventManager.TYPES.EXEC_TASKS_PRECREATE, env); // hook
|
|
2544
|
-
|
|
2578
|
+
|
|
2545
2579
|
var tasks = env.taskDefs.map(taskUtil.create);
|
|
2546
2580
|
var tasksByName = taskUtil.nameTasks(tasks); // map names to working tasks
|
|
2547
2581
|
var outTask = taskUtil.createOutTask(env.outTaskDef, parsedInput.cb, tasks, vCon, env.options, env);
|
|
@@ -2572,13 +2606,13 @@ define('react/core',['./eventemitter', './error', './validate', './task', './sta
|
|
|
2572
2606
|
reactFactory.options = reactOptions; // global react options
|
|
2573
2607
|
reactFactory.events = reactEmitter; // global react emitter
|
|
2574
2608
|
return reactFactory; // module returns reactFactory to create a react fn
|
|
2575
|
-
});
|
|
2576
|
-
|
|
2609
|
+
});
|
|
2577
2610
|
/*global define:true */
|
|
2578
2611
|
|
|
2579
2612
|
|
|
2580
2613
|
|
|
2581
2614
|
define('react/parse',['./sprintf'], function (sprintf) {
|
|
2615
|
+
|
|
2582
2616
|
|
|
2583
2617
|
function splitTrimFilterArgs(commaSepArgs) { //parse 'one, two' into ['one', 'two']
|
|
2584
2618
|
if (!commaSepArgs) return [];
|
|
@@ -2603,7 +2637,7 @@ define('react/parse',['./sprintf'], function (sprintf) {
|
|
|
2603
2637
|
return result;
|
|
2604
2638
|
} else { // no match
|
|
2605
2639
|
throw new Error(sprintf(errStr, str));
|
|
2606
|
-
}
|
|
2640
|
+
}
|
|
2607
2641
|
}
|
|
2608
2642
|
|
|
2609
2643
|
return {
|
|
@@ -2611,8 +2645,7 @@ define('react/parse',['./sprintf'], function (sprintf) {
|
|
|
2611
2645
|
parseStr: parseStr
|
|
2612
2646
|
};
|
|
2613
2647
|
|
|
2614
|
-
});
|
|
2615
|
-
|
|
2648
|
+
});
|
|
2616
2649
|
|
|
2617
2650
|
/*global define:true */
|
|
2618
2651
|
|
|
@@ -2620,7 +2653,8 @@ define('react/parse',['./sprintf'], function (sprintf) {
|
|
|
2620
2653
|
|
|
2621
2654
|
define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
2622
2655
|
function (sprintf, core, parse, taskUtil) {
|
|
2623
|
-
|
|
2656
|
+
|
|
2657
|
+
/*jshint regexp: false */
|
|
2624
2658
|
|
|
2625
2659
|
var MISSING_NAME = 'first flow parameter should be the flow name, but found in/out def: %s';
|
|
2626
2660
|
var INOUT_PARAMS_NO_MATCH = 'params in wrong format, wanted "foo, bar, cb -> err, baz" - found: %s';
|
|
@@ -2644,23 +2678,23 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2644
2678
|
|
|
2645
2679
|
var inOutDefParse = {
|
|
2646
2680
|
splitStr: '->',
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
}
|
|
2658
|
-
return {
|
|
2659
|
-
type: type,
|
|
2660
|
-
inDef: filterOutTrailingCbParam(inParams),
|
|
2661
|
-
outDef: filterOutLeadingErrParam(outParams)
|
|
2662
|
-
};
|
|
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
|
|
2663
2691
|
}
|
|
2692
|
+
return {
|
|
2693
|
+
type: type,
|
|
2694
|
+
inDef: filterOutTrailingCbParam(inParams),
|
|
2695
|
+
outDef: filterOutLeadingErrParam(outParams)
|
|
2696
|
+
};
|
|
2697
|
+
}
|
|
2664
2698
|
};
|
|
2665
2699
|
|
|
2666
2700
|
function parseInOutParams(str) {
|
|
@@ -2696,11 +2730,11 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2696
2730
|
// if next arg is object, shift it off as options
|
|
2697
2731
|
var options = (vargs.length && typeof(vargs[0]) === 'object') ? vargs.shift() : { };
|
|
2698
2732
|
var taskDefArr = vargs; // rest are for the tasks
|
|
2699
|
-
var defObj = {
|
|
2733
|
+
var defObj = {
|
|
2700
2734
|
inOutParamStr: inOutParamStr,
|
|
2701
2735
|
taskDefArr: taskDefArr,
|
|
2702
2736
|
options: options
|
|
2703
|
-
|
|
2737
|
+
};
|
|
2704
2738
|
return defObj;
|
|
2705
2739
|
}
|
|
2706
2740
|
|
|
@@ -2708,7 +2742,7 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2708
2742
|
function dslDefine(name, arg1, arg2, argN) {
|
|
2709
2743
|
var reactFn = core();
|
|
2710
2744
|
if (name && INOUT_RE.test(name)) throw new Error(sprintf(MISSING_NAME, name));
|
|
2711
|
-
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
|
|
2712
2746
|
var inOutDef = parseInOutParams(defObj.inOutParamStr);
|
|
2713
2747
|
var ast = {
|
|
2714
2748
|
name: name,
|
|
@@ -2717,18 +2751,18 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2717
2751
|
outTask: { a: inOutDef.outDef }
|
|
2718
2752
|
};
|
|
2719
2753
|
if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
|
|
2720
|
-
|
|
2754
|
+
var errors = reactFn.setAndValidateAST(ast);
|
|
2721
2755
|
if (errors.length) {
|
|
2722
2756
|
var errorStr = errors.join('\n');
|
|
2723
|
-
|
|
2757
|
+
throw new Error(errorStr);
|
|
2724
2758
|
}
|
|
2725
2759
|
return reactFn;
|
|
2726
|
-
|
|
2760
|
+
}
|
|
2727
2761
|
|
|
2728
2762
|
function selectFirst(name, arg1, arg2, argN) {
|
|
2729
2763
|
var reactFn = core();
|
|
2730
|
-
var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
|
|
2731
|
-
var inOutDef = parseInOutParams(defObj.inOutParamStr);
|
|
2764
|
+
var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
|
|
2765
|
+
var inOutDef = parseInOutParams(defObj.inOutParamStr);
|
|
2732
2766
|
var tasks = taskUtil.serializeTasks(parseTasks(defObj.taskDefArr));
|
|
2733
2767
|
var ast = {
|
|
2734
2768
|
name: name,
|
|
@@ -2736,7 +2770,7 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2736
2770
|
tasks: tasks,
|
|
2737
2771
|
outTask: { type: 'finalcbFirst', a: inOutDef.outDef },
|
|
2738
2772
|
};
|
|
2739
|
-
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]; });
|
|
2740
2774
|
var errors = reactFn.setAndValidateAST(ast);
|
|
2741
2775
|
if (errors.length) {
|
|
2742
2776
|
var errorStr = errors.join('\n');
|
|
@@ -2747,15 +2781,15 @@ define('react/dsl',['./sprintf', './core', './parse', './task'],
|
|
|
2747
2781
|
|
|
2748
2782
|
dslDefine.selectFirst = selectFirst;
|
|
2749
2783
|
return dslDefine;
|
|
2750
|
-
|
|
2751
|
-
});
|
|
2752
2784
|
|
|
2785
|
+
});
|
|
2753
2786
|
/*global define:true */
|
|
2754
2787
|
|
|
2755
2788
|
|
|
2756
2789
|
|
|
2757
2790
|
define('react/track-tasks',[], function () {
|
|
2758
2791
|
|
|
2792
|
+
|
|
2759
2793
|
/**
|
|
2760
2794
|
Track the tasks, start, complete, args, results, elapsed time
|
|
2761
2795
|
Emits events that can be monitored
|
|
@@ -2818,15 +2852,15 @@ define('react/track-tasks',[], function () {
|
|
|
2818
2852
|
|
|
2819
2853
|
}
|
|
2820
2854
|
|
|
2821
|
-
return trackTasks;
|
|
2822
|
-
|
|
2823
|
-
});
|
|
2855
|
+
return trackTasks;
|
|
2824
2856
|
|
|
2857
|
+
});
|
|
2825
2858
|
/*global define:true */
|
|
2826
2859
|
|
|
2827
2860
|
|
|
2828
2861
|
|
|
2829
2862
|
define('react/log-events',['util'], function (util) { // TODO replace util.inspect with something portable to browser
|
|
2863
|
+
|
|
2830
2864
|
|
|
2831
2865
|
var logEventsMod = { };
|
|
2832
2866
|
|
|
@@ -2920,12 +2954,12 @@ define('react/log-events',['util'], function (util) { // TODO replace util.inspe
|
|
|
2920
2954
|
return logEventsMod;
|
|
2921
2955
|
|
|
2922
2956
|
});
|
|
2923
|
-
|
|
2924
2957
|
/*global define:true */
|
|
2925
2958
|
|
|
2926
2959
|
|
|
2927
2960
|
|
|
2928
2961
|
define('react/promise-resolve',[], function () {
|
|
2962
|
+
|
|
2929
2963
|
|
|
2930
2964
|
/**
|
|
2931
2965
|
Auto resolve promises passed in as arguments to the flow
|
|
@@ -2937,9 +2971,9 @@ define('react/promise-resolve',[], function () {
|
|
|
2937
2971
|
*/
|
|
2938
2972
|
|
|
2939
2973
|
|
|
2940
|
-
|
|
2974
|
+
var PROMISE_SUFFIX = '__promise'; // added to param names that are promises
|
|
2941
2975
|
|
|
2942
|
-
|
|
2976
|
+
var resolvingPromises = false;
|
|
2943
2977
|
|
|
2944
2978
|
function resolvePromises(react) {
|
|
2945
2979
|
if (resolvingPromises) return; // already resolving
|
|
@@ -2967,13 +3001,13 @@ define('react/promise-resolve',[], function () {
|
|
|
2967
3001
|
|
|
2968
3002
|
return resolvePromises;
|
|
2969
3003
|
|
|
2970
|
-
});
|
|
2971
|
-
|
|
3004
|
+
});
|
|
2972
3005
|
/*global define:true */
|
|
2973
3006
|
|
|
2974
3007
|
|
|
2975
3008
|
|
|
2976
3009
|
define('react/event-collector',[], function () {
|
|
3010
|
+
|
|
2977
3011
|
|
|
2978
3012
|
/**
|
|
2979
3013
|
create an instance of the event collector
|
|
@@ -3026,9 +3060,9 @@ define('react/event-collector',[], function () {
|
|
|
3026
3060
|
} else if (TASK_EVENTS_RE.test(this.event)) {
|
|
3027
3061
|
eventObject.task = obj;
|
|
3028
3062
|
} else if (AST_EVENTS_RE.test(this.event)) {
|
|
3029
|
-
eventObject.ast = obj;
|
|
3063
|
+
eventObject.ast = obj;
|
|
3030
3064
|
}
|
|
3031
|
-
self.events.push(eventObject);
|
|
3065
|
+
self.events.push(eventObject);
|
|
3032
3066
|
}
|
|
3033
3067
|
emitter.on(eventId, accumEvents);
|
|
3034
3068
|
};
|
|
@@ -3041,19 +3075,19 @@ define('react/event-collector',[], function () {
|
|
|
3041
3075
|
this.events = []; // clear
|
|
3042
3076
|
};
|
|
3043
3077
|
|
|
3044
|
-
return new EventCollector();
|
|
3078
|
+
return new EventCollector();
|
|
3045
3079
|
}
|
|
3046
3080
|
|
|
3047
3081
|
return instantiate; // return the factory for creating EventCollector
|
|
3048
|
-
|
|
3049
|
-
});
|
|
3050
3082
|
|
|
3083
|
+
});
|
|
3051
3084
|
/*global define:true */
|
|
3052
3085
|
|
|
3053
3086
|
|
|
3054
3087
|
|
|
3055
3088
|
define('react/react',['./core', './dsl', './track-tasks', './log-events', './promise-resolve', './event-collector'],
|
|
3056
3089
|
function (core, dsl, trackTasksFn, logEventsMod, resolvePromisesFn, eventCollectorFactory) {
|
|
3090
|
+
|
|
3057
3091
|
|
|
3058
3092
|
var react = dsl; // core + default dsl
|
|
3059
3093
|
|