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.
Files changed (55) hide show
  1. package/.travis.yml +5 -3
  2. package/README.md +10 -1
  3. package/dist/react.js +179 -145
  4. package/dist/react.min.js +1 -1
  5. package/doc/advanced.md +1 -1
  6. package/lib/base-task.js +16 -19
  7. package/lib/cb-task.js +5 -5
  8. package/lib/core.js +5 -5
  9. package/lib/dsl.js +29 -29
  10. package/lib/error.js +4 -4
  11. package/lib/event-collector.js +6 -6
  12. package/lib/event-manager.js +1 -1
  13. package/lib/eventemitter.js +3 -3
  14. package/lib/finalcb-first-task.js +4 -4
  15. package/lib/finalcb-task.js +4 -4
  16. package/lib/id.js +3 -3
  17. package/lib/input-parser.js +10 -10
  18. package/lib/log-events.js +1 -1
  19. package/lib/parse.js +3 -3
  20. package/lib/promise-resolve.js +4 -4
  21. package/lib/promise-task.js +4 -4
  22. package/lib/react.js +1 -1
  23. package/lib/ret-task.js +4 -4
  24. package/lib/sprintf.js +4 -4
  25. package/lib/status.js +3 -3
  26. package/lib/task.js +12 -12
  27. package/lib/track-tasks.js +4 -4
  28. package/lib/validate.js +8 -8
  29. package/lib/vcon.js +28 -5
  30. package/lib/when-task.js +7 -8
  31. package/package.json +7 -7
  32. package/test/ast.mocha.js +4 -4
  33. package/test/cb-task.mocha.js +17 -17
  34. package/test/core-deferred.mocha.js +8 -8
  35. package/test/core-when.mocha.js +7 -7
  36. package/test/core.mocha.js +52 -52
  37. package/test/dsl.mocha.js +14 -12
  38. package/test/event-manager.mocha.js +2 -2
  39. package/test/exec-options.mocha.js +4 -4
  40. package/test/finalcb-task.mocha.js +1 -1
  41. package/test/input-parser.mocha.js +1 -1
  42. package/test/log-events.mocha.js +1 -1
  43. package/test/module-use.mocha.js +24 -7
  44. package/test/promise-auto-resolve.mocha.js +4 -4
  45. package/test/ret-task.mocha.js +18 -18
  46. package/test/task.mocha.js +3 -3
  47. package/test/validate-cb-task.mocha.js +11 -11
  48. package/test/validate-ret-task.mocha.js +14 -14
  49. package/test/validate.mocha.js +57 -57
  50. package/test/vcon.mocha.js +13 -13
  51. package/vendor/chai/chai.js +3371 -1158
  52. package/vendor/requirejs/require.js +1447 -1455
  53. package/vendor/requirejs/require.min.js +31 -28
  54. package/vendor/mocha/mocha.css +0 -135
  55. package/vendor/mocha/mocha.js +0 -3589
package/.travis.yml CHANGED
@@ -1,5 +1,7 @@
1
1
  language: node_js
2
2
  node_js:
3
- - 0.6
4
- - 0.7
5
- - 0.8
3
+ - "0.6"
4
+ - "0.7"
5
+ - "0.8"
6
+ - "0.10"
7
+ - "0.11"
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. This is reserved for future use.
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 = new Object;
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 = new Object;
27
+ this.listenerTree = {};
19
28
  }
20
29
  }
21
30
  }
22
31
 
23
32
  function EventEmitter(conf) {
24
- this._events = new Object;
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] = new Object;
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
- if (!isObjProperty(objPropStr)) return true; // NOT obj prop, just simple arg, ret true
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
- BaseTask.prototype.getMethodObj = function (vCon) { //obj.prop.prop2, returns obj.prop or undefined
1402
- var name = this.f;
1403
- if (!name) return undefined;
1404
- var nameAndProps = name.split('.');
1405
- nameAndProps.pop(); // pop off last one
1406
- if (!nameAndProps.length) return undefined;
1407
- var result = nameAndProps.reduce(function (accObj, prop) {
1408
- if (accObj === undefined || accObj === null) return undefined; // prevent exception
1409
- return accObj[prop];
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
- var taskDef = outTaskOptions.taskDef;
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
- return nameAndProps.reduce(function (accObj, prop) {
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
- var taskDef = outTaskOptions.taskDef;
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
- return errors;
2316
+ return errors;
2283
2317
  }
2284
2318
 
2285
2319
  function validateTaskNamesUnique(tasks) {
2286
- if (!Array.isArray(tasks)) return [];
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
- var OUTPUT_STYLES = {
2379
- CALLBACK: 'cb',
2380
- NONE: 'none'
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
- var args = inputArgs.filter(nonExecOptionsFilter);
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
- /*jshint regexp: false */
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
- fn: function (m, origStr) {
2648
- var inParams = parse.splitTrimFilterArgs(m[0]);
2649
- var lastParam = inParams[inParams.length - 1];
2650
- var type = (lastParam && CB_NAMES_RE.test(lastParam)) ? 'cb' : 'ret';
2651
- var outParams = parse.splitTrimFilterArgs(m[1]);
2652
- var firstOutParam = outParams[0];
2653
- if (type === 'cb' && (!firstOutParam || !ERR_NAMES_RE.test(firstOutParam))) {
2654
- throw new Error(sprintf(MISSING_ERR, origStr)); // found cb, but no err param
2655
- } else if (type === 'ret' && firstOutParam && ERR_NAMES_RE.test(firstOutParam)) {
2656
- throw new Error(sprintf(MISSING_CB, origStr)); // found err but not cb param
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
- var errors = reactFn.setAndValidateAST(ast);
2754
+ var errors = reactFn.setAndValidateAST(ast);
2721
2755
  if (errors.length) {
2722
2756
  var errorStr = errors.join('\n');
2723
- throw new Error(errorStr);
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
- var PROMISE_SUFFIX = '__promise'; // added to param names that are promises
2974
+ var PROMISE_SUFFIX = '__promise'; // added to param names that are promises
2941
2975
 
2942
- var resolvingPromises = false;
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