react 0.5.2 → 0.6.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 (84) hide show
  1. package/.travis.yml +4 -0
  2. package/Jakefile.js +39 -0
  3. package/README.md +9 -22
  4. package/browser-test/dist.html +90 -0
  5. package/browser-test/index.html +86 -0
  6. package/browser-test/min.html +90 -0
  7. package/dist/react.js +3291 -0
  8. package/dist/react.min.js +1 -0
  9. package/doc/advanced.md +2 -2
  10. package/examples/using-events1.js +1 -1
  11. package/lib/base-task.js +116 -110
  12. package/lib/cb-task.js +71 -67
  13. package/lib/core.js +118 -119
  14. package/lib/dsl.js +120 -115
  15. package/lib/error.js +44 -36
  16. package/lib/event-collector.js +69 -56
  17. package/lib/event-manager.js +65 -58
  18. package/lib/eventemitter.js +20 -0
  19. package/lib/finalcb-first-task.js +56 -53
  20. package/lib/finalcb-task.js +55 -51
  21. package/lib/id.js +18 -7
  22. package/lib/input-parser.js +49 -41
  23. package/lib/log-events.js +79 -73
  24. package/lib/parse.js +34 -25
  25. package/lib/promise-resolve.js +42 -27
  26. package/lib/promise-task.js +78 -74
  27. package/lib/react.js +59 -0
  28. package/lib/ret-task.js +59 -55
  29. package/lib/sprintf.js +18 -0
  30. package/lib/status.js +11 -2
  31. package/lib/task.js +218 -217
  32. package/lib/track-tasks.js +72 -58
  33. package/lib/validate.js +136 -136
  34. package/lib/vcon.js +78 -69
  35. package/lib/when-task.js +69 -65
  36. package/package.json +11 -9
  37. package/src/dist.build.requirejs +20 -0
  38. package/test/ast.mocha.js +136 -0
  39. package/test/cb-task.mocha.js +220 -0
  40. package/test/core-deferred.mocha.js +143 -0
  41. package/test/core-when.mocha.js +96 -0
  42. package/test/core.mocha.js +589 -0
  43. package/test/dsl.mocha.js +350 -0
  44. package/test/event-manager.mocha.js +119 -0
  45. package/test/exec-options.mocha.js +48 -0
  46. package/test/finalcb-task.mocha.js +58 -0
  47. package/test/input-parser.mocha.js +86 -0
  48. package/test/mocha.opts +2 -0
  49. package/test/module-use.mocha.js +147 -0
  50. package/test/promise-auto-resolve.mocha.js +68 -0
  51. package/test/ret-task.mocha.js +220 -0
  52. package/test/task.mocha.js +42 -0
  53. package/test/validate-cb-task.mocha.js +100 -0
  54. package/test/validate-ret-task.mocha.js +110 -0
  55. package/test/validate.mocha.js +324 -0
  56. package/test/vcon.mocha.js +193 -0
  57. package/vendor/chai/chai.js +2038 -0
  58. package/vendor/jquery/jquery-1.7.1.js +9266 -0
  59. package/vendor/jquery/jquery-1.7.1.min.js +4 -0
  60. package/vendor/mocha/mocha.css +135 -0
  61. package/vendor/mocha/mocha.js +3589 -0
  62. package/vendor/node/util.js +531 -0
  63. package/vendor/requirejs/require.js +2053 -0
  64. package/vendor/requirejs/require.min.js +33 -0
  65. package/react.js +0 -40
  66. package/test/ast.test.js +0 -118
  67. package/test/cb-task.test.js +0 -197
  68. package/test/core-deferred.test.js +0 -134
  69. package/test/core-promised.test.js +0 -132
  70. package/test/core-when.test.js +0 -84
  71. package/test/core.test.js +0 -593
  72. package/test/dsl.test.js +0 -330
  73. package/test/event-manager.test.js +0 -102
  74. package/test/exec-options.test.js +0 -33
  75. package/test/finalcb-task.test.js +0 -38
  76. package/test/input-parser.test.js +0 -66
  77. package/test/module-use.test.js +0 -134
  78. package/test/promise-auto-resolve.test.js +0 -52
  79. package/test/ret-task.test.js +0 -199
  80. package/test/task.test.js +0 -21
  81. package/test/validate-cb-task.test.js +0 -74
  82. package/test/validate-ret-task.test.js +0 -83
  83. package/test/validate.test.js +0 -295
  84. package/test/vcon.test.js +0 -173
package/lib/log-events.js CHANGED
@@ -1,86 +1,92 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- /**
4
- Log events to console.error
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
5
7
 
6
- @example
7
- var react = require('react');
8
- react.logEvents(); // log all task and flow events on all react functions
9
- react.logEvents('task.*'); // log all task events on all react functions
10
- react.logEvents(flowFn); // log all task and flow events on flowFn only
11
- react.logEvents(flowFn, 'flow.*'); // log all flow events on flowFn only
12
- */
8
+ define(['util'], function (util) { // TODO replace util.inspect with something portable to browser
13
9
 
14
- var util = require('util'); // TODO replace inspect with something portable to browser
10
+ var logEventsMod = { };
11
+
12
+ /**
13
+ Log events to console.error
15
14
 
16
- var react = require('../'); // require('react');
17
- react.trackTasks(); // enable task and flow tracking
15
+ @example
16
+ var react = require('react');
17
+ react.logEvents(); // log all task and flow events on all react functions
18
+ react.logEvents('task.*'); // log all task events on all react functions
19
+ react.logEvents(flowFn); // log all task and flow events on flowFn only
20
+ react.logEvents(flowFn, 'flow.*'); // log all flow events on flowFn only
21
+ */
18
22
 
19
- var ALL_FLOW_EVENTS = 'flow.*';
20
- var ALL_TASK_EVENTS = 'task.*';
21
- var FLOW_RE = /^flow\./;
23
+ var ALL_FLOW_EVENTS = 'flow.*';
24
+ var ALL_TASK_EVENTS = 'task.*';
25
+ var FLOW_RE = /^flow\./;
22
26
 
23
- function flowLog(obj) {
24
- /*jshint validthis: true */
25
- var time = new Date();
26
- time.setTime(obj.time);
27
- var argsNoCb = obj.args.filter(function (a) { return (typeof(a) !== 'function'); });
28
- var eventTimeStr = time.toISOString();
29
- if (this.event === 'flow.complete') {
30
- var env = obj;
31
- console.error('%s: %s \tmsecs: %s \n\targs: %s \n\tresults: %s\n',
32
- this.event, env.name, env.elapsedTime, util.inspect(argsNoCb), util.inspect(env.results));
33
- } else {
34
- var name = obj.name;
35
- var args = obj.args;
36
- console.error('%s: %s \n\targs: %s\n', this.event, name, util.inspect(argsNoCb));
37
- }
38
- }
27
+ function flowLog(obj) {
28
+ /*jshint validthis: true */
29
+ var time = new Date();
30
+ time.setTime(obj.time);
31
+ var argsNoCb = obj.args.filter(function (a) { return (typeof(a) !== 'function'); });
32
+ var eventTimeStr = time.toISOString();
33
+ if (this.event === 'flow.complete') {
34
+ var env = obj;
35
+ console.error('%s: %s \tmsecs: %s \n\targs: %s \n\tresults: %s\n',
36
+ this.event, env.name, env.elapsedTime, util.inspect(argsNoCb), util.inspect(env.results));
37
+ } else {
38
+ var name = obj.name;
39
+ var args = obj.args;
40
+ console.error('%s: %s \n\targs: %s\n', this.event, name, util.inspect(argsNoCb));
41
+ }
42
+ }
39
43
 
40
- function taskLog(obj) {
41
- /*jshint validthis: true */
42
- var time = new Date();
43
- time.setTime(obj.time);
44
- var argsNoCb = obj.args.filter(function (a) { return (typeof(a) !== 'function'); });
45
- var eventTimeStr = time.toISOString();
46
- if (this.event === 'task.complete') {
47
- var task = obj;
48
- console.error('%s: %s:%s \tmsecs: %s \n\targs: %s \n\tresults: %s\n',
49
- this.event, task.env.name, task.name, task.elapsedTime, util.inspect(argsNoCb), util.inspect(task.results));
50
- } else {
51
- var name = obj.name;
52
- var args = obj.args;
53
- console.error('%s: %s:%s \n\targs: %s\n', this.event, obj.env.name, obj.name, util.inspect(argsNoCb));
44
+ function taskLog(obj) {
45
+ /*jshint validthis: true */
46
+ var time = new Date();
47
+ time.setTime(obj.time);
48
+ var argsNoCb = obj.args.filter(function (a) { return (typeof(a) !== 'function'); });
49
+ var eventTimeStr = time.toISOString();
50
+ if (this.event === 'task.complete') {
51
+ var task = obj;
52
+ console.error('%s: %s:%s \tmsecs: %s \n\targs: %s \n\tresults: %s\n',
53
+ this.event, task.env.name, task.name, task.elapsedTime, util.inspect(argsNoCb), util.inspect(task.results));
54
+ } else {
55
+ var name = obj.name;
56
+ var args = obj.args;
57
+ console.error('%s: %s:%s \n\targs: %s\n', this.event, obj.env.name, obj.name, util.inspect(argsNoCb));
58
+ }
59
+
54
60
  }
55
-
56
- }
57
61
 
58
- /**
59
- Log flow and task events for a flowFn or all of react.
60
- If called multiple times, remove previous listener (if any) before
61
- adding.
62
-
63
- @example
64
- var react = require('react');
65
- react.logEvents(flowFn, eventWildcard); //log events on flowfn matching wildcard
66
-
67
- @param flowFn Flow function or global react object
68
- @param eventWildcard wildcarded event type, if not provided use flow.* and task.*
62
+ /**
63
+ Log flow and task events for a flowFn or all of react.
64
+ If called multiple times, remove previous listener (if any) before
65
+ adding.
66
+
67
+ @example
68
+ var react = require('react');
69
+ react.logEvents(flowFn, eventWildcard); //log events on flowfn matching wildcard
70
+
71
+ @param flowFn Flow function or global react object
72
+ @param eventWildcard wildcarded event type, if not provided use flow.* and task.*
69
73
  */
70
- function logEvents(flowFn, eventWildcard) {
71
- if (!flowFn) flowFn = react; // use global
72
- if (eventWildcard && eventWildcard !== '*') {
73
- var logFn = (FLOW_RE.test(eventWildcard)) ? flowLog : taskLog;
74
- flowFn.events.removeListener(eventWildcard, logFn);
75
- flowFn.events.on(eventWildcard, logFn);
76
- } else { // none provided, use flow.* and task.*
77
- //output events as tasks start and complete
78
- flowFn.events.removeListener(ALL_FLOW_EVENTS, flowLog);
79
- flowFn.events.on(ALL_FLOW_EVENTS, flowLog);
80
- flowFn.events.removeListener(ALL_TASK_EVENTS, taskLog);
81
- flowFn.events.on(ALL_TASK_EVENTS, taskLog);
74
+ function logEvents(flowFn, eventWildcard) {
75
+ if (!flowFn) throw new Error('flowFn is required');
76
+ if (eventWildcard && eventWildcard !== '*') {
77
+ var logFn = (FLOW_RE.test(eventWildcard)) ? flowLog : taskLog;
78
+ flowFn.events.removeListener(eventWildcard, logFn);
79
+ flowFn.events.on(eventWildcard, logFn);
80
+ } else { // none provided, use flow.* and task.*
81
+ //output events as tasks start and complete
82
+ flowFn.events.removeListener(ALL_FLOW_EVENTS, flowLog);
83
+ flowFn.events.on(ALL_FLOW_EVENTS, flowLog);
84
+ flowFn.events.removeListener(ALL_TASK_EVENTS, taskLog);
85
+ flowFn.events.on(ALL_TASK_EVENTS, taskLog);
86
+ }
82
87
  }
83
- }
84
88
 
85
- module.exports = react;
86
- module.exports.logEvents = logEvents;
89
+ logEventsMod.logEvents = logEvents;
90
+ return logEventsMod;
91
+
92
+ });
package/lib/parse.js CHANGED
@@ -1,32 +1,41 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var sprintf = require('sprintf').sprintf;
4
-
5
- function splitTrimFilterArgs(commaSepArgs) { //parse 'one, two' into ['one', 'two']
6
- if (!commaSepArgs) return [];
7
- return commaSepArgs.split(',') //split on commas
8
- .map(function (s) { return s.trim(); }) //trim
9
- .filter(function (s) { return (s); }); //filter out empty strings
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
10
6
  }
11
7
 
12
- /**
13
- @param patternFn regex + fn or splitStr + fn
8
+ define(['./sprintf'], function (sprintf) {
9
+
10
+ function splitTrimFilterArgs(commaSepArgs) { //parse 'one, two' into ['one', 'two']
11
+ if (!commaSepArgs) return [];
12
+ return commaSepArgs.split(',') //split on commas
13
+ .map(function (s) { return s.trim(); }) //trim
14
+ .filter(function (s) { return (s); }); //filter out empty strings
15
+ }
16
+
17
+ /**
18
+ @param patternFn regex + fn or splitStr + fn
14
19
  */
15
- function parseReduce(accum, patternFn) {
16
- if (typeof(accum) !== 'string') return accum; // already matched
17
- var m = (patternFn.regex) ? patternFn.regex.exec(accum) : accum.split(patternFn.splitStr);
18
- if (m) return patternFn.fn(m, accum); // pass in matches and origStr, return result obj
19
- return accum; // no match, return str, will try next matcher
20
- }
20
+ function parseReduce(accum, patternFn) {
21
+ if (typeof(accum) !== 'string') return accum; // already matched
22
+ var m = (patternFn.regex) ? patternFn.regex.exec(accum) : accum.split(patternFn.splitStr);
23
+ if (m) return patternFn.fn(m, accum); // pass in matches and origStr, return result obj
24
+ return accum; // no match, return str, will try next matcher
25
+ }
21
26
 
22
- function parseStr(str, parseMatchers, errStr) {
23
- var result = parseMatchers.reduce(parseReduce, str);
24
- if (typeof(result) !== 'string') { // matched
25
- return result;
26
- } else { // no match
27
- throw new Error(sprintf(errStr, str));
28
- }
29
- }
27
+ function parseStr(str, parseMatchers, errStr) {
28
+ var result = parseMatchers.reduce(parseReduce, str);
29
+ if (typeof(result) !== 'string') { // matched
30
+ return result;
31
+ } else { // no match
32
+ throw new Error(sprintf(errStr, str));
33
+ }
34
+ }
35
+
36
+ return {
37
+ splitTrimFilterArgs: splitTrimFilterArgs,
38
+ parseStr: parseStr
39
+ };
30
40
 
31
- exports.splitTrimFilterArgs = splitTrimFilterArgs;
32
- exports.parseStr = parseStr;
41
+ });
@@ -1,35 +1,50 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- /**
4
- Auto resolve promises passed in as arguments to the flow
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
5
7
 
6
- - Detects promises by checking for .then()
7
- - Create promise name for param (param__promise)
8
- - moves existing vCon promise into the param__promise
9
- - creates WhenTask which resolves param__promise into param
8
+ define([], function () {
9
+
10
+ /**
11
+ Auto resolve promises passed in as arguments to the flow
12
+
13
+ - Detects promises by checking for .then()
14
+ - Create promise name for param (param__promise)
15
+ - moves existing vCon promise into the param__promise
16
+ - creates WhenTask which resolves param__promise into param
10
17
  */
11
18
 
12
19
 
13
- var react = require('../'); // require('react');
14
-
15
- var PROMISE_SUFFIX = '__promise'; // added to param names that are promises
16
-
17
- react.events.on(react.events.TYPES.EXEC_TASKS_PRECREATE, function (env) {
18
- var vConValues = env.vCon.values;
19
- var promiseParams = env.ast.inParams.filter(function (p) {
20
- var value = vConValues[p];
21
- return (value && typeof(value.then) === 'function');
22
- });
23
- promiseParams.forEach(function (p) {
24
- var promiseName = p + PROMISE_SUFFIX;
25
- vConValues[promiseName] = vConValues[p];
26
- vConValues[p] = undefined;
27
- env.taskDefs.push({
28
- type: 'when',
29
- a: [promiseName],
30
- out: [p]
20
+ var PROMISE_SUFFIX = '__promise'; // added to param names that are promises
21
+
22
+ var resolvingPromises = false;
23
+
24
+ function resolvePromises(react) {
25
+ if (resolvingPromises) return; // already resolving
26
+ resolvingPromises = true;
27
+
28
+ react.events.on(react.events.TYPES.EXEC_TASKS_PRECREATE, function (env) {
29
+ var vConValues = env.vCon.values;
30
+ var promiseParams = env.ast.inParams.filter(function (p) {
31
+ var value = vConValues[p];
32
+ return (value && typeof(value.then) === 'function');
33
+ });
34
+ promiseParams.forEach(function (p) {
35
+ var promiseName = p + PROMISE_SUFFIX;
36
+ vConValues[promiseName] = vConValues[p];
37
+ vConValues[p] = undefined;
38
+ env.taskDefs.push({
39
+ type: 'when',
40
+ a: [promiseName],
41
+ out: [p]
42
+ });
43
+ });
31
44
  });
32
- });
33
- });
34
45
 
35
- module.exports = react; // return react
46
+ }
47
+
48
+ return resolvePromises;
49
+
50
+ });
@@ -1,89 +1,93 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- /**
4
- PromiseTask is a task which executes a fn that returns a promise
5
- and when it completes it sets the values in vCon
6
- */
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
7
7
 
8
- var util = require('util');
9
- var sprintf = require('sprintf').sprintf;
8
+ define(['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
10
9
 
11
- var BaseTask = require('./base-task.js');
10
+ /**
11
+ PromiseTask is a task which executes a fn that returns a promise
12
+ and when it completes it sets the values in vCon
13
+ */
12
14
 
13
- function format_error(errmsg, obj) {
14
- return sprintf('%s - %s', errmsg, util.inspect(obj));
15
- }
15
+ function format_error(errmsg, obj) {
16
+ return sprintf('%s - %s', errmsg, util.inspect(obj));
17
+ }
16
18
 
17
- var REQ = 'promiseTask requires f, a, out';
18
- var FN_REQ = 'promiseTask requires f to be a function or string';
19
- var A_REQ = 'promiseTask requires a to be an array of string param names';
20
- var OUT_REQ = 'promiseTask requires out to be an array[1] of string param names';
19
+ var REQ = 'promiseTask requires f, a, out';
20
+ var FN_REQ = 'promiseTask requires f to be a function or string';
21
+ var A_REQ = 'promiseTask requires a to be an array of string param names';
22
+ var OUT_REQ = 'promiseTask requires out to be an array[1] of string param names';
21
23
 
22
- function PromiseTask(taskDef) {
23
- var self = this;
24
- Object.keys(taskDef).forEach(function (k) { self[k] = taskDef[k]; });
25
- }
24
+ function PromiseTask(taskDef) {
25
+ var self = this;
26
+ Object.keys(taskDef).forEach(function (k) { self[k] = taskDef[k]; });
27
+ }
26
28
 
27
- PromiseTask.prototype = new BaseTask();
28
- PromiseTask.prototype.constructor = PromiseTask;
29
+ PromiseTask.prototype = new BaseTask();
30
+ PromiseTask.prototype.constructor = PromiseTask;
29
31
 
30
- PromiseTask.validate = function (taskDef) {
31
- var errors = [];
32
- if (!taskDef.f || !taskDef.a || !taskDef.out) {
33
- errors.push(format_error(REQ, taskDef));
34
- } else {
35
- var ftype = typeof(taskDef.f);
36
- if (! ((taskDef.f instanceof Function) || (ftype === 'string'))) {
37
- errors.push(format_error(FN_REQ, taskDef));
32
+ PromiseTask.validate = function (taskDef) {
33
+ var errors = [];
34
+ if (!taskDef.f || !taskDef.a || !taskDef.out) {
35
+ errors.push(format_error(REQ, taskDef));
36
+ } else {
37
+ var ftype = typeof(taskDef.f);
38
+ if (! ((taskDef.f instanceof Function) || (ftype === 'string'))) {
39
+ errors.push(format_error(FN_REQ, taskDef));
40
+ }
41
+ if (! (Array.isArray(taskDef.a) &&
42
+ taskDef.a.every(function (x) { return (typeof(x) === 'string'); }))) {
43
+ errors.push(format_error(A_REQ, taskDef));
44
+ }
45
+ if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
46
+ taskDef.out.every(function (x) { return (typeof(x) === 'string'); }))) {
47
+ errors.push(format_error(OUT_REQ, taskDef));
48
+ }
38
49
  }
39
- if (! (Array.isArray(taskDef.a) &&
40
- taskDef.a.every(function (x) { return (typeof(x) === 'string'); }))) {
41
- errors.push(format_error(A_REQ, taskDef));
42
- }
43
- if (! (Array.isArray(taskDef.out) && taskDef.out.length <= 1 &&
44
- taskDef.out.every(function (x) { return (typeof(x) === 'string'); }))) {
45
- errors.push(format_error(OUT_REQ, taskDef));
46
- }
47
- }
48
- return errors;
49
- };
50
+ return errors;
51
+ };
50
52
 
51
- PromiseTask.prototype.prepare = function prepare(handleTaskError, vCon, contExec) {
52
- var self = this;
53
- this.nextFn = function (arg) {
54
- var args = Array.prototype.slice.call(arguments);
55
- vCon.saveResults(self.out, args);
56
- self.complete(args);
57
- contExec();
53
+ PromiseTask.prototype.prepare = function prepare(handleTaskError, vCon, contExec) {
54
+ var self = this;
55
+ this.nextFn = function (arg) {
56
+ var args = Array.prototype.slice.call(arguments);
57
+ vCon.saveResults(self.out, args);
58
+ self.complete(args);
59
+ contExec();
60
+ };
61
+ this.failFn = function (err) {
62
+ handleTaskError(self, err);
63
+ };
58
64
  };
59
- this.failFn = function (err) {
60
- handleTaskError(self, err);
65
+
66
+ PromiseTask.prototype.exec = function exec(vCon, handleError, contExec) {
67
+ try {
68
+ var args = this.a.map(function (k) { return vCon.getVar(k); }); //get args from vCon
69
+ //console.error('PromiseTask.exec.args=', args);
70
+ //console.error('PromiseTask.exec.vCon=', vCon);
71
+ this.start(args); //note the start time, args
72
+ var func = this.f;
73
+ var bindObj = vCon.getVar('this'); //global space or the original this
74
+ if (this.isMethodCall()) { //if method call then reset func and bindObj
75
+ func = vCon.getVar(this.f);
76
+ bindObj = this.getMethodObj(vCon);
77
+ } else if (typeof(func) === 'string') {
78
+ func = vCon.getVar(func); // we want the actual fn from this string
79
+ }
80
+ var retValue = func.apply(bindObj, args);
81
+ if (retValue && typeof(retValue.then) === 'function') { // is a promise
82
+ retValue.then(this.nextFn, this.failFn);
83
+ } else { // just a value, proceed now
84
+ this.nextFn(retValue);
85
+ }
86
+ } catch (err) { //catch and handle the task error, calling final cb
87
+ handleError(this, err);
88
+ }
61
89
  };
62
- };
63
90
 
64
- PromiseTask.prototype.exec = function exec(vCon, handleError, contExec) {
65
- try {
66
- var args = this.a.map(function (k) { return vCon.getVar(k); }); //get args from vCon
67
- //console.error('PromiseTask.exec.args=', args);
68
- //console.error('PromiseTask.exec.vCon=', vCon);
69
- this.start(args); //note the start time, args
70
- var func = this.f;
71
- var bindObj = vCon.getVar('this'); //global space or the original this
72
- if (this.isMethodCall()) { //if method call then reset func and bindObj
73
- func = vCon.getVar(this.f);
74
- bindObj = this.getMethodObj(vCon);
75
- } else if (typeof(func) === 'string') {
76
- func = vCon.getVar(func); // we want the actual fn from this string
77
- }
78
- var retValue = func.apply(bindObj, args);
79
- if (retValue && typeof(retValue.then) === 'function') { // is a promise
80
- retValue.then(this.nextFn, this.failFn);
81
- } else { // just a value, proceed now
82
- this.nextFn(retValue);
83
- }
84
- } catch (err) { //catch and handle the task error, calling final cb
85
- handleError(this, err);
86
- }
87
- };
91
+ return PromiseTask;
88
92
 
89
- module.exports = PromiseTask;
93
+ });