react 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/.travis.yml +4 -0
  2. package/Jakefile.js +39 -0
  3. package/README.md +18 -26
  4. package/browser-test/dist.html +89 -0
  5. package/browser-test/index.html +85 -0
  6. package/browser-test/min.html +89 -0
  7. package/dist/react.js +3093 -0
  8. package/dist/react.min.js +1 -0
  9. package/doc/advanced.md +7 -2
  10. package/doc/simple.dot +25 -0
  11. package/doc/simple.png +0 -0
  12. package/examples/{default1.js → longer-example.js} +0 -0
  13. package/examples/{default-simple.js → simple.js} +0 -0
  14. package/examples/{ast1.js → using-ast-directly.js} +4 -0
  15. package/examples/{default-events1.js → using-events1.js} +1 -1
  16. package/examples/{default-log-events.js → using-log-events.js} +0 -0
  17. package/lib/base-task.js +116 -110
  18. package/lib/cb-task.js +71 -67
  19. package/lib/core.js +118 -107
  20. package/lib/dsl.js +120 -115
  21. package/lib/error.js +44 -36
  22. package/lib/event-collector.js +69 -53
  23. package/lib/event-manager.js +69 -55
  24. package/lib/eventemitter.js +20 -0
  25. package/lib/finalcb-first-task.js +56 -53
  26. package/lib/finalcb-task.js +55 -51
  27. package/lib/id.js +18 -6
  28. package/lib/input-parser.js +49 -41
  29. package/lib/log-events.js +79 -73
  30. package/lib/parse.js +34 -25
  31. package/lib/promise-resolve.js +42 -27
  32. package/lib/promise-task.js +78 -74
  33. package/lib/react.js +59 -0
  34. package/lib/ret-task.js +59 -55
  35. package/lib/sprintf.js +18 -0
  36. package/lib/status.js +11 -2
  37. package/lib/task.js +216 -213
  38. package/lib/track-tasks.js +72 -58
  39. package/lib/validate.js +136 -136
  40. package/lib/vcon.js +78 -69
  41. package/lib/when-task.js +69 -65
  42. package/package.json +10 -9
  43. package/src/dist.build.requirejs +20 -0
  44. package/test/ast.mocha.js +136 -0
  45. package/test/cb-task.mocha.js +220 -0
  46. package/test/core-deferred.mocha.js +143 -0
  47. package/test/core-when.mocha.js +96 -0
  48. package/test/core.mocha.js +589 -0
  49. package/test/dsl.mocha.js +350 -0
  50. package/test/event-manager.mocha.js +119 -0
  51. package/test/exec-options.mocha.js +48 -0
  52. package/test/finalcb-task.mocha.js +58 -0
  53. package/test/input-parser.mocha.js +86 -0
  54. package/test/mocha.opts +2 -0
  55. package/test/module-use.mocha.js +147 -0
  56. package/test/promise-auto-resolve.mocha.js +68 -0
  57. package/test/ret-task.mocha.js +220 -0
  58. package/test/task.mocha.js +42 -0
  59. package/test/validate-cb-task.mocha.js +100 -0
  60. package/test/validate-ret-task.mocha.js +110 -0
  61. package/test/validate.mocha.js +324 -0
  62. package/test/vcon.mocha.js +193 -0
  63. package/vendor/chai/chai.js +2038 -0
  64. package/vendor/jquery/jquery-1.7.1.js +9266 -0
  65. package/vendor/jquery/jquery-1.7.1.min.js +4 -0
  66. package/vendor/mocha/mocha.css +135 -0
  67. package/vendor/mocha/mocha.js +3589 -0
  68. package/vendor/node/util.js +531 -0
  69. package/vendor/requirejs/require.js +2053 -0
  70. package/vendor/requirejs/require.min.js +33 -0
  71. package/doc/default-simple.dot +0 -19
  72. package/doc/default-simple.dot.png +0 -0
  73. package/react.js +0 -40
  74. package/test/ast.test.js +0 -69
  75. package/test/cb-task.test.js +0 -197
  76. package/test/core-deferred.test.js +0 -134
  77. package/test/core-promised.test.js +0 -132
  78. package/test/core-when.test.js +0 -84
  79. package/test/core.test.js +0 -568
  80. package/test/dsl.test.js +0 -330
  81. package/test/event-manager.test.js +0 -102
  82. package/test/exec-options.test.js +0 -33
  83. package/test/finalcb-task.test.js +0 -38
  84. package/test/input-parser.test.js +0 -66
  85. package/test/module-use.test.js +0 -134
  86. package/test/promise-auto-resolve.test.js +0 -52
  87. package/test/ret-task.test.js +0 -199
  88. package/test/task.test.js +0 -21
  89. package/test/validate-cb-task.test.js +0 -74
  90. package/test/validate-ret-task.test.js +0 -83
  91. package/test/validate.test.js +0 -295
  92. package/test/vcon.test.js +0 -173
package/lib/error.js CHANGED
@@ -1,47 +1,55 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var util = require('util');
4
-
5
- function ensureStackTraceLimitSet(stackTraceLimit) {
6
- if (!Error.stackTraceLimit || Error.stackTraceLimit < stackTraceLimit) {
7
- Error.stackTraceLimit = stackTraceLimit;
8
- }
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
9
6
  }
10
7
 
11
- function fName(fn) {
12
- if (!fn) return 'undefined';
13
- return (fn && fn.name) ? fn.name : fn;
14
- }
8
+ define(['util'], function (util) {
15
9
 
16
- function formatErrorMeta(err) {
17
- if (!err.meta) return;
18
- var vcon = err.meta.vcon;
19
- var task = err.meta.task;
20
- var errString = '\n\n';
21
- if (task && task.f && task.a) {
22
- errString += ('Error occurs in Task function: ' + fName(task.f) + '(' + task.a.join(',') + ')\n\n');
10
+ function ensureStackTraceLimitSet(stackTraceLimit) {
11
+ if (!Error.stackTraceLimit || Error.stackTraceLimit < stackTraceLimit) {
12
+ Error.stackTraceLimit = stackTraceLimit;
13
+ }
23
14
  }
24
- if (vcon) {
25
- errString += 'Variable Context: \n';
26
- errString += util.inspect(vcon);
27
- errString += '\n\n';
15
+
16
+ function fName(fn) {
17
+ if (!fn) return 'undefined';
18
+ return (fn && fn.name) ? fn.name : fn;
28
19
  }
29
- if (task && task.f) {
30
- errString += 'Task Source:\n\n';
31
- errString += task.f.toString(); //TODO need to pretty print function, gets collapsed
32
- errString += '\n\n';
20
+
21
+ function formatErrorMeta(err) {
22
+ if (!err.meta) return;
23
+ var vcon = err.meta.vcon;
24
+ var task = err.meta.task;
25
+ var errString = '\n\n';
26
+ if (task && task.f && task.a) {
27
+ errString += ('Error occurs in Task function: ' + fName(task.f) + '(' + task.a.join(',') + ')\n\n');
28
+ }
29
+ if (vcon) {
30
+ errString += 'Variable Context: \n';
31
+ errString += util.inspect(vcon);
32
+ errString += '\n\n';
33
+ }
34
+ if (task && task.f) {
35
+ errString += 'Task Source:\n\n';
36
+ errString += task.f.toString(); //TODO need to pretty print function, gets collapsed
37
+ errString += '\n\n';
38
+ }
39
+ return errString;
33
40
  }
34
- return errString;
35
- }
36
41
 
37
- function augmentError(err, meta) {
38
- if (typeof(err) === 'string') { err = new Error(err); } //props will be lost on non-objects
39
- var origMsg = err.toString();
40
- err.meta = meta;
41
- err.toString = function () { return origMsg + formatErrorMeta(err); };
42
- return err;
43
- }
42
+ function augmentError(err, meta) {
43
+ if (typeof(err) === 'string') { err = new Error(err); } //props will be lost on non-objects
44
+ var origMsg = err.toString();
45
+ err.meta = meta;
46
+ err.toString = function () { return origMsg + formatErrorMeta(err); };
47
+ return err;
48
+ }
44
49
 
50
+ return {
51
+ ensureStackTraceLimitSet: ensureStackTraceLimitSet,
52
+ augmentError: augmentError
53
+ };
45
54
 
46
- exports.ensureStackTraceLimitSet = ensureStackTraceLimitSet;
47
- exports.augmentError = augmentError;
55
+ });
@@ -1,65 +1,81 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var react = require('../'); // require('react');
4
- react.trackTasks(); // enable task tracking
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
5
7
 
6
- var TASK_EVENTS_RE = /^task\./;
7
- var FLOW_EVENTS_RE = /^flow\./;
8
+ define([], function () {
8
9
 
9
- /**
10
- Accumulator to make it easy to capture events
10
+ /**
11
+ create an instance of the event collector
12
+ */
13
+ function instantiate(react) {
14
+ react.trackTasks(); // enable task tracking
11
15
 
12
- @example
13
- var EventCollector = require('react/lib/event-collector');
14
- var collector = new EventCollector();
16
+ var AST_EVENTS_RE = /^ast\./;
17
+ var TASK_EVENTS_RE = /^task\./;
18
+ var FLOW_EVENTS_RE = /^flow\./;
15
19
 
16
- collector.capture(); // capture all flow and task events for all react flows
17
- collector.capture('flow.*'); // capture all flow events for all react flows
18
- collector.capture(flowFn, 'task.*'); // capture task events on a flow
19
- collector.capture(flowFn, 'flow.*'); // add capture flow events on a flow
20
+ /**
21
+ Accumulator to make it easy to capture events
20
22
 
21
- var events = collector.list(); // retrieve the list of events
22
- collector.clear(); // clear the list of events;
23
- */
24
- function EventCollector() {
25
- this.events = [];
26
- }
23
+ @example
24
+ var react = require('react');
25
+ var collector = react.createEventCollector();
26
+ collector.capture(); // capture all flow and task events for all react flows
27
+ collector.capture('flow.*'); // capture all flow events for all react flows
28
+ collector.capture(flowFn, 'task.*'); // capture task events on a flow
29
+ collector.capture(flowFn, 'flow.*'); // add capture flow events on a flow
30
+ var events = collector.list(); // retrieve the list of events
31
+ collector.clear(); // clear the list of events;
32
+ */
33
+ function EventCollector() {
34
+ this.events = [];
35
+ }
27
36
 
28
- /**
29
- register listener to capture events for a specific flow
30
- @param flowFn the react flow function or can pass global react
31
- @param eventId event id or wildcarded id
32
- */
33
- EventCollector.prototype.capture = function (flowFn, eventId) {
34
- /*jshint validthis: true */
35
- if (!eventId && typeof(flowFn) === 'string') { // only eventId provided
36
- eventId = flowFn;
37
- flowFn = react; // global react
38
- } else if (!flowFn) flowFn = react; // global react
39
- if (!eventId) eventId = '*'; // default to all
40
- var emitter = flowFn.events;
41
- var self = this;
42
- function accumEvents(obj) {
43
- var eventObject = {
44
- event: this.event,
45
- time: Date.now()
37
+ /**
38
+ register listener to capture events for a specific flow
39
+ @param flowFn the react flow function or can pass global react
40
+ @param eventId event id or wildcarded id
41
+ */
42
+ EventCollector.prototype.capture = function (flowFn, eventId) {
43
+ /*jshint validthis: true */
44
+ if (!eventId && typeof(flowFn) === 'string') { // only eventId provided
45
+ eventId = flowFn;
46
+ flowFn = react; // global react
47
+ } else if (!flowFn) flowFn = react; // global react
48
+ if (!eventId) eventId = '*'; // default to all
49
+ var emitter = flowFn.events;
50
+ var self = this;
51
+ function accumEvents(obj) {
52
+ var eventObject = {
53
+ event: this.event,
54
+ time: Date.now()
55
+ };
56
+ if (FLOW_EVENTS_RE.test(this.event)) {
57
+ eventObject.env = obj;
58
+ } else if (TASK_EVENTS_RE.test(this.event)) {
59
+ eventObject.task = obj;
60
+ } else if (AST_EVENTS_RE.test(this.event)) {
61
+ eventObject.ast = obj;
62
+ }
63
+ self.events.push(eventObject);
64
+ }
65
+ emitter.on(eventId, accumEvents);
46
66
  };
47
- if (FLOW_EVENTS_RE.test(this.event)) {
48
- eventObject.env = obj;
49
- } else if (TASK_EVENTS_RE.test(this.event)) {
50
- eventObject.task = obj;
51
- }
52
- self.events.push(eventObject);
53
- }
54
- emitter.on(eventId, accumEvents);
55
- };
56
67
 
57
- EventCollector.prototype.list = function () {
58
- return this.events;
59
- };
68
+ EventCollector.prototype.list = function () {
69
+ return this.events;
70
+ };
60
71
 
61
- EventCollector.prototype.clear = function () {
62
- this.events = []; // clear
63
- };
72
+ EventCollector.prototype.clear = function () {
73
+ this.events = []; // clear
74
+ };
75
+
76
+ return new EventCollector();
77
+ }
64
78
 
65
- module.exports = EventCollector;
79
+ return instantiate; // return the factory for creating EventCollector
80
+
81
+ });
@@ -1,71 +1,85 @@
1
1
  'use strict';
2
+ /*global define:true process:false*/
2
3
 
3
- var EventEmitter2 = require('eventemitter2').EventEmitter2;
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
7
+
8
+ define(['./eventemitter'], function (EventEmitter) {
9
+ /*jshint regexp:false */
4
10
 
5
- var EVENT_EMITTER2_CONFIG = {
6
- wildcard: true, // should the event emitter use wildcards.
7
- delimiter: '.', // the delimiter used to segment namespaces, defaults to `.`.
8
- maxListeners: 30 // the max number of listeners that can be assigned to an event, defaults to 10.
9
- };
11
+ var EVENT_EMITTER2_CONFIG = {
12
+ wildcard: true, // should the event emitter use wildcards.
13
+ delimiter: '.', // the delimiter used to segment namespaces, defaults to `.`.
14
+ maxListeners: 30 // the max number of listeners that can be assigned to an event, defaults to 10.
15
+ };
10
16
 
11
- var TYPES = {
12
- // Flow monitoring events and their params
13
- FLOW_BEGIN: 'flow.begin', // env
14
- TASK_BEGIN: 'task.begin', // task
15
- TASK_COMPLETE: 'task.complete', // task
16
- TASK_ERRORED: 'task.errored', // task
17
- FLOW_COMPLETE: 'flow.complete', // env
18
- FLOW_ERRORED: 'flow.errored', // env
17
+ var PASS_EVENTS_PROCESS_RE = /^ast.defined$/; // events to pass up to global process
19
18
 
20
- // Internal Hooks
21
- EXEC_FLOW_START: 'exec.flow.start', // env
22
- EXEC_INPUT_PREPROCESS: 'exec.input.preprocess', // parsedInput
23
- EXEC_TASKS_PRECREATE: 'exec.tasks.precreate', // env
24
- EXEC_OUTTASK_CREATE: 'exec.outTask.create', // outTaskOptions
25
- EXEC_TASK_START: 'exec.task.start', // task
26
- EXEC_TASK_COMPLETE: 'exec.task.complete', // task
27
- EXEC_TASK_ERRORED: 'exec.task.errored', // task
28
- EXEC_FLOW_COMPLETE: 'exec.flow.complete', // env
29
- EXEC_FLOW_ERRORED: 'exec.flow.errored' // env
30
- };
19
+ var TYPES = {
20
+ // Flow monitoring events and their params
21
+ AST_DEFINED: 'ast.defined', // ast
22
+ FLOW_BEGIN: 'flow.begin', // env
23
+ TASK_BEGIN: 'task.begin', // task
24
+ TASK_COMPLETE: 'task.complete', // task
25
+ TASK_ERRORED: 'task.errored', // task
26
+ FLOW_COMPLETE: 'flow.complete', // env
27
+ FLOW_ERRORED: 'flow.errored', // env
31
28
 
32
- /**
33
- Event manager which emits events up to its parent if exists.
34
- Allows a hierarchy of emitters, which communicate up the
35
- chain.
29
+ // Internal Hooks
30
+ EXEC_FLOW_START: 'exec.flow.start', // env
31
+ EXEC_INPUT_PREPROCESS: 'exec.input.preprocess', // parsedInput
32
+ EXEC_TASKS_PRECREATE: 'exec.tasks.precreate', // env
33
+ EXEC_OUTTASK_CREATE: 'exec.outTask.create', // outTaskOptions
34
+ EXEC_TASK_START: 'exec.task.start', // task
35
+ EXEC_TASK_COMPLETE: 'exec.task.complete', // task
36
+ EXEC_TASK_ERRORED: 'exec.task.errored', // task
37
+ EXEC_FLOW_COMPLETE: 'exec.flow.complete', // env
38
+ EXEC_FLOW_ERRORED: 'exec.flow.errored' // env
39
+ };
40
+
41
+ /**
42
+ Event manager which emits events up to its parent if exists.
43
+ Allows a hierarchy of emitters, which communicate up the
44
+ chain.
36
45
  */
37
- function EventManager() {
38
- }
46
+ function EventManager() {
47
+ }
39
48
 
40
- EventManager.create = function () { return new EventManager(); };
49
+ EventManager.create = function () { return new EventManager(); };
41
50
 
42
- EventManager.TYPES = TYPES;
43
- EventManager.prototype.TYPES = TYPES;
51
+ EventManager.TYPES = TYPES;
52
+ EventManager.prototype.TYPES = TYPES;
44
53
 
45
- EventManager.prototype.isEnabled = function () { // if has listener or an ancestor has listener
46
- return (this.emitter || (this.parent && this.parent.isEnabled()));
47
- };
54
+ EventManager.prototype.isEnabled = function () { // if has listener or an ancestor has listener
55
+ return !!(this.emitter || (this.parent && this.parent.isEnabled()));
56
+ };
48
57
 
49
- /**
50
- Add listener. Wildcard events are allowed like 'foo.*'
51
- Use '*' to listen to any event
58
+ /**
59
+ Add listener. Wildcard events are allowed like 'foo.*'
60
+ Use '*' to listen to any event
52
61
  */
53
- EventManager.prototype.on = function (event, listener) {
54
- if (!this.emitter) this.emitter = new EventEmitter2(EVENT_EMITTER2_CONFIG);
55
- if (event === '*') this.emitter.onAny(listener);
56
- else this.emitter.on(event, listener);
57
- };
62
+ EventManager.prototype.on = function (event, listener) {
63
+ if (!this.emitter) this.emitter = new EventEmitter(EVENT_EMITTER2_CONFIG);
64
+ if (event === '*') this.emitter.onAny(listener);
65
+ else this.emitter.on(event, listener);
66
+ };
58
67
 
59
- EventManager.prototype.emit = function (event, arg1, arg2, argN) {
60
- if (event === undefined) throw new Error('event is undefined');
61
- if (this.emitter) this.emitter.emit.apply(this.emitter, arguments);
62
- if (this.parent && this.parent.isEnabled()) this.parent.emit.apply(this.parent, arguments);
63
- };
68
+ EventManager.prototype.emit = function (event, arg1, arg2, argN) {
69
+ if (event === undefined) throw new Error('event is undefined');
70
+ if (this.emitter) this.emitter.emit.apply(this.emitter, arguments);
71
+ if (this.parent && this.parent.isEnabled()) this.parent.emit.apply(this.parent, arguments);
72
+ if (PASS_EVENTS_PROCESS_RE.test(event) && typeof(process) !== 'undefined' && process.emit) {
73
+ process.emit.apply(process, arguments); // pass some to process
74
+ }
75
+ };
64
76
 
65
- EventManager.prototype.removeListener = function (event, listener) {
66
- if (this.emitter) this.emitter.removeListener.apply(this.emitter, arguments);
67
- };
77
+ EventManager.prototype.removeListener = function (event, listener) {
78
+ if (this.emitter) this.emitter.removeListener.apply(this.emitter, arguments);
79
+ };
68
80
 
69
81
 
70
- module.exports = EventManager;
71
- module.exports.global = EventManager.create(); // create one top level emitter
82
+ EventManager.global = EventManager.create(); // create one top level emitter
83
+ return EventManager;
84
+
85
+ });
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+ /*global define:true EventEmitter2:true */
3
+
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
7
+
8
+ define(['eventemitter2'], function (EventEmitterMod) {
9
+
10
+ /**
11
+ Abstract the details of getting an EventEmitter
12
+ */
13
+
14
+ // EventEmitter doesn't return itself in browser so need to get the global
15
+ // EventEmitter api changed, so accomodate which ever version is available
16
+ var EventEmitter = (EventEmitterMod) ?
17
+ ((EventEmitterMod.EventEmitter2) ? EventEmitterMod.EventEmitter2 : EventEmitterMod) : EventEmitter2;
18
+ return EventEmitter;
19
+
20
+ });
@@ -1,65 +1,68 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var sprintf = require('sprintf').sprintf;
4
- var util = require('util');
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
5
7
 
6
- var STATUS = require('./status.js');
7
- var VContext = require('./vcon.js');
8
- var EventManager = require('./event-manager.js');
8
+ define(['./sprintf', 'util', './status', './vcon', './event-manager'],
9
+ function (sprintf, util, STATUS, VContext, EventManager) {
9
10
 
10
- var OUTTASK_A_REQ = 'ast.outTask.a should be an array of string param names';
11
+ var OUTTASK_A_REQ = 'ast.outTask.a should be an array of string param names';
11
12
 
12
- function FinalCbFirstSuccTask(outTaskOptions) {
13
- var taskDef = outTaskOptions.taskDef;
14
- if (typeof(outTaskOptions.cbFunc) !== 'function') throw new Error('callback is not a function');
15
- var self = this;
16
- for (var k in taskDef) {
17
- if (true) self[k] = taskDef[k]; // if to make jshint happy
13
+ function FinalCbFirstSuccTask(outTaskOptions) {
14
+ var taskDef = outTaskOptions.taskDef;
15
+ if (typeof(outTaskOptions.cbFunc) !== 'function') throw new Error('callback is not a function');
16
+ var self = this;
17
+ for (var k in taskDef) {
18
+ if (true) self[k] = taskDef[k]; // if to make jshint happy
19
+ }
20
+ this.f = outTaskOptions.cbFunc;
21
+ this.tasks = outTaskOptions.tasks;
22
+ this.vCon = outTaskOptions.vCon;
23
+ this.retValue = outTaskOptions.retValue;
24
+ this.env = outTaskOptions.env;
18
25
  }
19
- this.f = outTaskOptions.cbFunc;
20
- this.tasks = outTaskOptions.tasks;
21
- this.vCon = outTaskOptions.vCon;
22
- this.retValue = outTaskOptions.retValue;
23
- this.env = outTaskOptions.env;
24
- }
25
-
26
- function format_error(errmsg, obj) {
27
- return sprintf('%s - %s', errmsg, util.inspect(obj));
28
- }
29
26
 
30
- FinalCbFirstSuccTask.validate = function (taskDef) {
31
- var errors = [];
32
- if (! (Array.isArray(taskDef.a) &&
33
- taskDef.a.every(function (x) { return (typeof(x) === 'string'); }))) {
34
- errors.push(format_error(OUTTASK_A_REQ, taskDef));
27
+ function format_error(errmsg, obj) {
28
+ return sprintf('%s - %s', errmsg, util.inspect(obj));
35
29
  }
36
- return errors;
37
- };
38
30
 
39
- /**
40
- is ready to exit when any task comes back with non-null defined value
31
+ FinalCbFirstSuccTask.validate = function (taskDef) {
32
+ var errors = [];
33
+ if (! (Array.isArray(taskDef.a) &&
34
+ taskDef.a.every(function (x) { return (typeof(x) === 'string'); }))) {
35
+ errors.push(format_error(OUTTASK_A_REQ, taskDef));
36
+ }
37
+ return errors;
38
+ };
39
+
40
+ /**
41
+ is ready to exit when any task comes back with non-null defined value
41
42
  */
42
- FinalCbFirstSuccTask.prototype.isReady = function () {
43
- var lastres = this.vCon.getLastResults();
44
- if (!lastres) return false; // no results yet
45
- return (lastres.some(function (v) { return (v !== undefined && v !== null); }));
46
- };
43
+ FinalCbFirstSuccTask.prototype.isReady = function () {
44
+ var lastres = this.vCon.getLastResults();
45
+ if (!lastres) return false; // no results yet
46
+ return (lastres.some(function (v) { return (v !== undefined && v !== null); }));
47
+ };
47
48
 
48
- FinalCbFirstSuccTask.prototype.exec = function (err) {
49
- if (!this.f) return; //must have already been called
50
- if (err) {
51
- this.env.error = err;
52
- this.env.flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_ERRORED, this.env);
53
- this.f.call(null, err); //call the final callback with the first error hit
54
- } else { // no error, call with args
55
- var vCon = this.vCon;
56
- var finalArgs = this.a.map(function (k) { return vCon.getVar(k); });
57
- finalArgs.unshift(null); //unshift err=null to front
58
- this.env.results = finalArgs;
59
- this.env.flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_COMPLETE, this.env);
60
- this.f.apply(null, finalArgs);
61
- }
62
- this.f = null; // prevent multiple calls
63
- };
49
+ FinalCbFirstSuccTask.prototype.exec = function (err) {
50
+ if (!this.f) return; //must have already been called
51
+ if (err) {
52
+ this.env.error = err;
53
+ this.env.flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_ERRORED, this.env);
54
+ this.f.call(null, err); //call the final callback with the first error hit
55
+ } else { // no error, call with args
56
+ var vCon = this.vCon;
57
+ var finalArgs = this.a.map(function (k) { return vCon.getVar(k); });
58
+ finalArgs.unshift(null); //unshift err=null to front
59
+ this.env.results = finalArgs;
60
+ this.env.flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_COMPLETE, this.env);
61
+ this.f.apply(null, finalArgs);
62
+ }
63
+ this.f = null; // prevent multiple calls
64
+ };
65
+
66
+ return FinalCbFirstSuccTask;
64
67
 
65
- module.exports = FinalCbFirstSuccTask;
68
+ });