react 0.5.1 → 0.6.2

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 (88) hide show
  1. package/.travis.yml +5 -0
  2. package/Jakefile.js +39 -0
  3. package/README.md +17 -24
  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 +3094 -0
  8. package/dist/react.min.js +22 -0
  9. package/doc/advanced.md +2 -2
  10. package/doc/simple.dot +25 -0
  11. package/doc/simple.png +0 -0
  12. package/examples/using-events1.js +1 -1
  13. package/lib/base-task.js +116 -110
  14. package/lib/cb-task.js +71 -67
  15. package/lib/core.js +116 -117
  16. package/lib/dsl.js +120 -115
  17. package/lib/error.js +44 -36
  18. package/lib/event-collector.js +69 -56
  19. package/lib/event-manager.js +69 -56
  20. package/lib/eventemitter.js +20 -0
  21. package/lib/finalcb-first-task.js +56 -53
  22. package/lib/finalcb-task.js +55 -51
  23. package/lib/id.js +18 -7
  24. package/lib/input-parser.js +49 -41
  25. package/lib/log-events.js +79 -73
  26. package/lib/parse.js +34 -25
  27. package/lib/promise-resolve.js +42 -27
  28. package/lib/promise-task.js +78 -74
  29. package/lib/react.js +59 -0
  30. package/lib/ret-task.js +59 -55
  31. package/lib/sprintf.js +18 -0
  32. package/lib/status.js +11 -2
  33. package/lib/task.js +215 -217
  34. package/lib/track-tasks.js +72 -58
  35. package/lib/validate.js +136 -136
  36. package/lib/vcon.js +78 -69
  37. package/lib/when-task.js +69 -65
  38. package/package.json +10 -9
  39. package/src/dist.build.requirejs +20 -0
  40. package/test/ast.mocha.js +136 -0
  41. package/test/cb-task.mocha.js +220 -0
  42. package/test/core-deferred.mocha.js +143 -0
  43. package/test/core-when.mocha.js +96 -0
  44. package/test/core.mocha.js +589 -0
  45. package/test/dsl.mocha.js +350 -0
  46. package/test/event-manager.mocha.js +119 -0
  47. package/test/exec-options.mocha.js +48 -0
  48. package/test/finalcb-task.mocha.js +58 -0
  49. package/test/input-parser.mocha.js +86 -0
  50. package/test/mocha.opts +2 -0
  51. package/test/module-use.mocha.js +147 -0
  52. package/test/promise-auto-resolve.mocha.js +68 -0
  53. package/test/ret-task.mocha.js +220 -0
  54. package/test/task.mocha.js +42 -0
  55. package/test/validate-cb-task.mocha.js +100 -0
  56. package/test/validate-ret-task.mocha.js +110 -0
  57. package/test/validate.mocha.js +324 -0
  58. package/test/vcon.mocha.js +193 -0
  59. package/vendor/chai/chai.js +2038 -0
  60. package/vendor/jquery/jquery-1.7.1.js +9266 -0
  61. package/vendor/jquery/jquery-1.7.1.min.js +4 -0
  62. package/vendor/mocha/mocha.css +135 -0
  63. package/vendor/mocha/mocha.js +3589 -0
  64. package/vendor/node/util.js +531 -0
  65. package/vendor/requirejs/require.js +2053 -0
  66. package/vendor/requirejs/require.min.js +33 -0
  67. package/doc/default-simple.dot +0 -19
  68. package/doc/default-simple.dot.png +0 -0
  69. package/react.js +0 -40
  70. package/test/ast.test.js +0 -95
  71. package/test/cb-task.test.js +0 -197
  72. package/test/core-deferred.test.js +0 -134
  73. package/test/core-promised.test.js +0 -132
  74. package/test/core-when.test.js +0 -84
  75. package/test/core.test.js +0 -593
  76. package/test/dsl.test.js +0 -330
  77. package/test/event-manager.test.js +0 -102
  78. package/test/exec-options.test.js +0 -33
  79. package/test/finalcb-task.test.js +0 -38
  80. package/test/input-parser.test.js +0 -66
  81. package/test/module-use.test.js +0 -134
  82. package/test/promise-auto-resolve.test.js +0 -52
  83. package/test/ret-task.test.js +0 -199
  84. package/test/task.test.js +0 -21
  85. package/test/validate-cb-task.test.js +0 -74
  86. package/test/validate-ret-task.test.js +0 -83
  87. package/test/validate.test.js +0 -295
  88. 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,68 +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 AST_EVENTS_RE = /^ast\./;
7
- var TASK_EVENTS_RE = /^task\./;
8
- var FLOW_EVENTS_RE = /^flow\./;
8
+ define([], function () {
9
9
 
10
- /**
11
- 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
12
15
 
13
- @example
14
- var EventCollector = require('react/lib/event-collector');
15
- var collector = new EventCollector();
16
+ var AST_EVENTS_RE = /^ast\./;
17
+ var TASK_EVENTS_RE = /^task\./;
18
+ var FLOW_EVENTS_RE = /^flow\./;
16
19
 
17
- collector.capture(); // capture all flow and task events for all react flows
18
- collector.capture('flow.*'); // capture all flow events for all react flows
19
- collector.capture(flowFn, 'task.*'); // capture task events on a flow
20
- collector.capture(flowFn, 'flow.*'); // add capture flow events on a flow
20
+ /**
21
+ Accumulator to make it easy to capture events
21
22
 
22
- var events = collector.list(); // retrieve the list of events
23
- collector.clear(); // clear the list of events;
24
- */
25
- function EventCollector() {
26
- this.events = [];
27
- }
23
+ @example
24
+ var react = require('react');
25
+ var collector = react.createEventCollector();
26
+ collector.capture(); // capture all flow and task events for all react flows
27
+ collector.capture('flow.*'); // capture all flow events for all react flows
28
+ collector.capture(flowFn, 'task.*'); // capture task events on a flow
29
+ collector.capture(flowFn, 'flow.*'); // add capture flow events on a flow
30
+ var events = collector.list(); // retrieve the list of events
31
+ collector.clear(); // clear the list of events;
32
+ */
33
+ function EventCollector() {
34
+ this.events = [];
35
+ }
28
36
 
29
- /**
30
- register listener to capture events for a specific flow
31
- @param flowFn the react flow function or can pass global react
32
- @param eventId event id or wildcarded id
33
- */
34
- EventCollector.prototype.capture = function (flowFn, eventId) {
35
- /*jshint validthis: true */
36
- if (!eventId && typeof(flowFn) === 'string') { // only eventId provided
37
- eventId = flowFn;
38
- flowFn = react; // global react
39
- } else if (!flowFn) flowFn = react; // global react
40
- if (!eventId) eventId = '*'; // default to all
41
- var emitter = flowFn.events;
42
- var self = this;
43
- function accumEvents(obj) {
44
- var eventObject = {
45
- event: this.event,
46
- 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);
47
66
  };
48
- if (FLOW_EVENTS_RE.test(this.event)) {
49
- eventObject.env = obj;
50
- } else if (TASK_EVENTS_RE.test(this.event)) {
51
- eventObject.task = obj;
52
- } else if (AST_EVENTS_RE.test(this.event)) {
53
- eventObject.ast = obj;
54
- }
55
- self.events.push(eventObject);
56
- }
57
- emitter.on(eventId, accumEvents);
58
- };
59
67
 
60
- EventCollector.prototype.list = function () {
61
- return this.events;
62
- };
68
+ EventCollector.prototype.list = function () {
69
+ return this.events;
70
+ };
63
71
 
64
- EventCollector.prototype.clear = function () {
65
- this.events = []; // clear
66
- };
72
+ EventCollector.prototype.clear = function () {
73
+ this.events = []; // clear
74
+ };
75
+
76
+ return new EventCollector();
77
+ }
67
78
 
68
- module.exports = EventCollector;
79
+ return instantiate; // return the factory for creating EventCollector
80
+
81
+ });
@@ -1,72 +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
- AST_DEFINED: 'ast.defined', // ast
14
- FLOW_BEGIN: 'flow.begin', // env
15
- TASK_BEGIN: 'task.begin', // task
16
- TASK_COMPLETE: 'task.complete', // task
17
- TASK_ERRORED: 'task.errored', // task
18
- FLOW_COMPLETE: 'flow.complete', // env
19
- FLOW_ERRORED: 'flow.errored', // env
17
+ var PASS_EVENTS_PROCESS_RE = /^ast.defined$/; // events to pass up to global process
20
18
 
21
- // Internal Hooks
22
- EXEC_FLOW_START: 'exec.flow.start', // env
23
- EXEC_INPUT_PREPROCESS: 'exec.input.preprocess', // parsedInput
24
- EXEC_TASKS_PRECREATE: 'exec.tasks.precreate', // env
25
- EXEC_OUTTASK_CREATE: 'exec.outTask.create', // outTaskOptions
26
- EXEC_TASK_START: 'exec.task.start', // task
27
- EXEC_TASK_COMPLETE: 'exec.task.complete', // task
28
- EXEC_TASK_ERRORED: 'exec.task.errored', // task
29
- EXEC_FLOW_COMPLETE: 'exec.flow.complete', // env
30
- EXEC_FLOW_ERRORED: 'exec.flow.errored' // env
31
- };
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
32
28
 
33
- /**
34
- Event manager which emits events up to its parent if exists.
35
- Allows a hierarchy of emitters, which communicate up the
36
- 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.
37
45
  */
38
- function EventManager() {
39
- }
46
+ function EventManager() {
47
+ }
40
48
 
41
- EventManager.create = function () { return new EventManager(); };
49
+ EventManager.create = function () { return new EventManager(); };
42
50
 
43
- EventManager.TYPES = TYPES;
44
- EventManager.prototype.TYPES = TYPES;
51
+ EventManager.TYPES = TYPES;
52
+ EventManager.prototype.TYPES = TYPES;
45
53
 
46
- EventManager.prototype.isEnabled = function () { // if has listener or an ancestor has listener
47
- return (this.emitter || (this.parent && this.parent.isEnabled()));
48
- };
54
+ EventManager.prototype.isEnabled = function () { // if has listener or an ancestor has listener
55
+ return !!(this.emitter || (this.parent && this.parent.isEnabled()));
56
+ };
49
57
 
50
- /**
51
- Add listener. Wildcard events are allowed like 'foo.*'
52
- Use '*' to listen to any event
58
+ /**
59
+ Add listener. Wildcard events are allowed like 'foo.*'
60
+ Use '*' to listen to any event
53
61
  */
54
- EventManager.prototype.on = function (event, listener) {
55
- if (!this.emitter) this.emitter = new EventEmitter2(EVENT_EMITTER2_CONFIG);
56
- if (event === '*') this.emitter.onAny(listener);
57
- else this.emitter.on(event, listener);
58
- };
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
+ };
59
67
 
60
- EventManager.prototype.emit = function (event, arg1, arg2, argN) {
61
- if (event === undefined) throw new Error('event is undefined');
62
- if (this.emitter) this.emitter.emit.apply(this.emitter, arguments);
63
- if (this.parent && this.parent.isEnabled()) this.parent.emit.apply(this.parent, arguments);
64
- };
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
+ };
65
76
 
66
- EventManager.prototype.removeListener = function (event, listener) {
67
- if (this.emitter) this.emitter.removeListener.apply(this.emitter, arguments);
68
- };
77
+ EventManager.prototype.removeListener = function (event, listener) {
78
+ if (this.emitter) this.emitter.removeListener.apply(this.emitter, arguments);
79
+ };
69
80
 
70
81
 
71
- module.exports = EventManager;
72
- 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
+ });