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/status.js CHANGED
@@ -1,5 +1,14 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var STATUS = { READY: 'ready', RUNNING: 'running', ERRORED: 'errored', COMPLETE: 'complete' };
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
4
7
 
5
- module.exports = STATUS;
8
+ define([], function () {
9
+
10
+ var STATUS = { READY: 'ready', RUNNING: 'running', ERRORED: 'errored', COMPLETE: 'complete' };
11
+
12
+ return STATUS;
13
+
14
+ });
package/lib/task.js CHANGED
@@ -1,248 +1,251 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var util = require('util');
4
- var sprintf = require('sprintf').sprintf;
5
- var array = require('ensure-array');
6
- var CbTask = require('./cb-task.js');
7
- var PromiseTask = require('./promise-task.js');
8
- var RetTask = require('./ret-task.js');
9
- var WhenTask = require('./when-task.js');
10
- var FinalCbTask = require('./finalcb-task.js');
11
- var FinalCbFirstSuccTask = require('./finalcb-first-task.js');
12
- var STATUS = require('./status.js');
13
- var error = require('./error.js');
14
- var VContext = require('./vcon.js');
15
- var EventManager = require('./event-manager.js');
16
-
17
- var TASK_TYPES = {
18
- cb: CbTask,
19
- ret: RetTask,
20
- promise: PromiseTask,
21
- when: WhenTask
22
- };
23
- function taskTypeKeys() { return Object.keys(TASK_TYPES); }
24
-
25
- var OUT_TASK_TYPES = {
26
- finalcb: FinalCbTask, //first task is the default if no type specified in taskDef
27
- finalcbFirst: FinalCbFirstSuccTask
28
- };
29
- function outTaskTypeKeys() { return Object.keys(OUT_TASK_TYPES); }
30
-
31
- var LOCAL_FN_MISSING = 'function: %s not found in locals or input params - task[%s]';
32
- var TASKDEF_IS_OBJECT = 'task must be an object';
33
- var NO_TASKS_RUNNING_WONT_COMPLETE = 'no tasks running, flow will not complete, remaining tasks: %s';
34
- var TASK_TYPE_SHOULD_MATCH = 'task.type should match one of ' +
35
- Object.keys(TASK_TYPES).join(', ');
36
-
37
- var validateTaskType, validateTask, create;
38
-
39
-
40
- function format_error(errmsg, obj) {
41
- return sprintf('%s - %s', errmsg, util.inspect(obj));
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
42
6
  }
43
7
 
44
- /**
45
- guess the missing types from params.
46
- Augments in place but also returns taskDef.
47
- If not specified then is 'cb'
8
+ define(['util', './sprintf', 'ensure-array', './cb-task', './promise-task',
9
+ './ret-task', './when-task', './finalcb-task', './finalcb-first-task',
10
+ './status', './error', './vcon', './event-manager'],
11
+ function (util, sprintf, array, CbTask, PromiseTask,
12
+ RetTask, WhenTask, FinalCbTask, FinalCbFirstSuccTask,
13
+ STATUS, error, VContext, EventManager) {
14
+
15
+ var TASK_TYPES = {
16
+ cb: CbTask,
17
+ ret: RetTask,
18
+ promise: PromiseTask,
19
+ when: WhenTask
20
+ };
21
+
22
+ var DEFAULT_TASK_NAME = 'task_%s'; // for unnamed tasks use task_idx, like task_0
23
+
24
+ function taskTypeKeys() { return Object.keys(TASK_TYPES); }
25
+
26
+ var OUT_TASK_TYPES = {
27
+ finalcb: FinalCbTask, //first task is the default if no type specified in taskDef
28
+ finalcbFirst: FinalCbFirstSuccTask
29
+ };
30
+ function outTaskTypeKeys() { return Object.keys(OUT_TASK_TYPES); }
31
+
32
+ var LOCAL_FN_MISSING = 'function: %s not found in locals or input params - task[%s]';
33
+ var TASKDEF_IS_OBJECT = 'task must be an object';
34
+ var NO_TASKS_RUNNING_WONT_COMPLETE = 'no tasks running, flow will not complete, remaining tasks: %s';
35
+ var TASK_TYPE_SHOULD_MATCH = 'task.type should match one of ' +
36
+ Object.keys(TASK_TYPES).join(', ');
37
+
38
+ function format_error(errmsg, obj) {
39
+ return sprintf('%s - %s', errmsg, util.inspect(obj));
40
+ }
41
+
42
+ /**
43
+ guess the missing types from params.
44
+ Augments in place but also returns taskDef.
45
+ If not specified then is 'cb'
48
46
  */
49
- function setMissingType(taskDef) {
50
- if (taskDef.type) return taskDef; //already set, return
51
- taskDef.type = 'cb';
52
- return taskDef;
53
- }
47
+ function setMissingType(taskDef) {
48
+ if (taskDef.type) return taskDef; //already set, return
49
+ taskDef.type = 'cb';
50
+ return taskDef;
51
+ }
54
52
 
55
- function setMissingOutTaskType(taskDef) {
56
- if (!taskDef.type) taskDef.type = Object.keys(OUT_TASK_TYPES)[0]; //use first outTask type as default
57
- }
53
+ function setMissingOutTaskType(taskDef) {
54
+ if (!taskDef.type) taskDef.type = Object.keys(OUT_TASK_TYPES)[0]; //use first outTask type as default
55
+ }
58
56
 
59
- function ensureAfterArrStrings(taskDef) { // convert any fn to str, and make sure is array
60
- if (!taskDef.after) return;
61
- var afterArr = array(taskDef.after); // ensure is array, null becomes []
62
- afterArr = afterArr.map(function (a) { return (typeof(a) === 'function') ? a.name : a; });
63
- taskDef.after = afterArr;
64
- }
57
+ function ensureAfterArrStrings(taskDef) { // convert any fn to str, and make sure is array
58
+ if (!taskDef.after) return;
59
+ var afterArr = array(taskDef.after); // ensure is array, null becomes []
60
+ afterArr = afterArr.map(function (a) { return (typeof(a) === 'function') ? a.name : a; });
61
+ taskDef.after = afterArr;
62
+ }
65
63
 
66
- /**
67
- @returns array of errors for taskDef, could be empty
64
+ /**
65
+ @returns array of errors for taskDef, could be empty
68
66
  */
69
- function validate(taskDef) {
70
- if (!taskDef || typeof(taskDef) !== 'object') {
71
- return [format_error(TASKDEF_IS_OBJECT, taskDef)];
72
- }
73
- setMissingType(taskDef);
74
- ensureAfterArrStrings(taskDef);
75
- var errors = [];
76
- errors = errors.concat(validateTaskType(taskDef));
77
- errors = errors.concat(validateTask(taskDef));
78
- return errors;
79
- }
67
+ function validate(taskDef) {
68
+ if (!taskDef || typeof(taskDef) !== 'object') {
69
+ return [format_error(TASKDEF_IS_OBJECT, taskDef)];
70
+ }
71
+ setMissingType(taskDef);
72
+ ensureAfterArrStrings(taskDef);
73
+ var errors = [];
74
+ errors = errors.concat(validateTaskType(taskDef));
75
+ errors = errors.concat(validateTask(taskDef));
76
+ return errors;
77
+ }
80
78
 
81
- function validateTaskType(taskDef) {
82
- var errors = [];
83
- if (!Object.keys(TASK_TYPES).some(
84
- function (type) { return (taskDef.type === type); })) {
85
- errors.push(format_error(TASK_TYPE_SHOULD_MATCH, taskDef));
79
+ function validateTaskType(taskDef) {
80
+ var errors = [];
81
+ if (!Object.keys(TASK_TYPES).some(
82
+ function (type) { return (taskDef.type === type); })) {
83
+ errors.push(format_error(TASK_TYPE_SHOULD_MATCH, taskDef));
84
+ }
85
+ return errors;
86
86
  }
87
- return errors;
88
- }
89
87
 
90
- function validateTask(taskDef) {
91
- var errors = [];
92
- var taskCons = TASK_TYPES[taskDef.type];
93
- if (taskCons) {
94
- errors = errors.concat(taskCons.validate(taskDef));
88
+ function validateTask(taskDef) {
89
+ var errors = [];
90
+ var taskCons = TASK_TYPES[taskDef.type];
91
+ if (taskCons) {
92
+ errors = errors.concat(taskCons.validate(taskDef));
93
+ }
94
+ return errors;
95
95
  }
96
- return errors;
97
- }
98
96
 
99
- function validateOutTask(taskDef) {
100
- var errors = [];
101
- setMissingOutTaskType(taskDef);
102
- var taskCons = OUT_TASK_TYPES[taskDef.type];
103
- errors = errors.concat(taskCons.validate(taskDef));
104
- return errors;
105
- }
97
+ function validateOutTask(taskDef) {
98
+ var errors = [];
99
+ setMissingOutTaskType(taskDef);
100
+ var taskCons = OUT_TASK_TYPES[taskDef.type];
101
+ errors = errors.concat(taskCons.validate(taskDef));
102
+ return errors;
103
+ }
106
104
 
107
105
 
108
- function validateLocalFunctions(inParams, taskDefs, locals) {
109
- var errors = [];
110
- function foo() { } //used to mock args as fns for validation check
111
- var mock_args = inParams.map(function (p) { return foo; }); //mock args with fns
112
- var vCon = VContext.create(mock_args, inParams, locals);
113
- var tasks = taskDefs.map(create);
114
- var tasksWFunctions = tasks.filter(function (t) { return (t.type !== 'when'); }); // non-when tasks need f
115
- tasksWFunctions.forEach(function (t, idx) {
116
- if (!t.functionExists(vCon)) { // error if function doesnt exist AND
117
- if (!t.isMethodCall()) errors.push(sprintf(LOCAL_FN_MISSING, t.f, idx)); // not method OR
118
- else {
119
- var obj = t.getMethodObj(vCon);
120
- if (obj && obj !== foo) { // (has parent but not our mock)
121
- errors.push(sprintf(LOCAL_FN_MISSING, t.f, idx));
106
+ function validateLocalFunctions(inParams, taskDefs, locals) {
107
+ var errors = [];
108
+ function foo() { } //used to mock args as fns for validation check
109
+ var mock_args = inParams.map(function (p) { return foo; }); //mock args with fns
110
+ var vCon = VContext.create(mock_args, inParams, locals);
111
+ var tasks = taskDefs.map(create);
112
+ var tasksWFunctions = tasks.filter(function (t) { return (t.type !== 'when'); }); // non-when tasks need f
113
+ tasksWFunctions.forEach(function (t, idx) {
114
+ if (!t.functionExists(vCon)) { // error if function doesnt exist AND
115
+ if (!t.isMethodCall()) errors.push(sprintf(LOCAL_FN_MISSING, t.f, idx)); // not method OR
116
+ else {
117
+ var obj = t.getMethodObj(vCon);
118
+ if (obj && obj !== foo) { // (has parent but not our mock)
119
+ errors.push(sprintf(LOCAL_FN_MISSING, t.f, idx));
120
+ }
122
121
  }
123
122
  }
124
- }
125
- });
126
- return errors;
127
- }
123
+ });
124
+ return errors;
125
+ }
128
126
 
129
- function fName(fn) {
130
- return (fn) ?
131
- ((fn.name) ? fn.name : fn) : // if defined, try name, otherwise toString()
132
- 'undefined'; // not defined, use undefined
133
- }
127
+ function fName(fn) {
128
+ if (typeof(fn) === 'function') {
129
+ return fn.name;
130
+ }
131
+ return (fn) ? fn : '';
132
+ }
134
133
 
135
- /**
136
- Name tasks that are not already named. Prenamed task uniquness validation
137
- will be done in validate.
134
+ /**
135
+ Name tasks that are not already named. Prenamed task uniquness validation
136
+ will be done in validate.
138
137
 
139
- This modifies the tasks with the new names.
138
+ This modifies the tasks with the new names.
140
139
 
141
- @returns map of names to tasks
140
+ @returns map of names to tasks
142
141
  */
143
- function nameTasks(tasks) { //name tasks that are not already named, validation done elsewhere, ret map
144
- var namesMap = tasks.reduce(function (map, t) {
145
- if (t.name) { map[t.name] = t; }
146
- return map;
147
- }, {});
148
- tasks.forEach(function (t, idx) {
149
- if (!t.name) { //not already named
150
- var name = fName(t.f);
151
- if (!name || namesMap[name]) {
152
- name = sprintf('%s_%s', name, idx); //if empty or already used, postfix with _idx
142
+ function nameTasks(tasks) { //name tasks that are not already named, validation done elsewhere, ret map
143
+ var namesMap = tasks.reduce(function (map, t) {
144
+ if (t.name) { map[t.name] = t; }
145
+ return map;
146
+ }, {});
147
+ tasks.forEach(function (t, idx) {
148
+ if (!t.name) { //not already named
149
+ var name = fName(t.f);
150
+ if (!name) name = sprintf(DEFAULT_TASK_NAME, idx);
151
+ if (!name || namesMap[name]) {
152
+ name = sprintf('%s_%s', name, idx); //if empty or already used, postfix with _idx
153
+ }
154
+ t.name = name;
155
+ namesMap[name] = t;
153
156
  }
154
- t.name = name;
155
- namesMap[name] = t;
156
- }
157
- });
158
- return namesMap;
159
- }
157
+ });
158
+ return namesMap;
159
+ }
160
160
 
161
- function create(taskDef) {
162
- var TaskConstructor = TASK_TYPES[taskDef.type];
163
- return new TaskConstructor(taskDef);
164
- }
161
+ function create(taskDef) {
162
+ var TaskConstructor = TASK_TYPES[taskDef.type];
163
+ return new TaskConstructor(taskDef);
164
+ }
165
165
 
166
- function createOutTask(taskDef, cbFunc, tasks, vCon, execOptions, env) {
167
- setMissingOutTaskType(taskDef);
168
- var outTaskOptions = {
169
- taskDef: taskDef,
170
- cbFunc: cbFunc,
171
- tasks: tasks,
172
- vCon: vCon,
173
- execOptions: execOptions,
174
- env: env,
175
- TaskConstructor: OUT_TASK_TYPES[taskDef.type]
176
- };
177
- EventManager.global.emit(EventManager.TYPES.EXEC_OUTTASK_CREATE, outTaskOptions); // hook
178
- var TaskConstructor = outTaskOptions.TaskConstructor; // hook could have changed
179
- return new TaskConstructor(outTaskOptions);
180
- }
166
+ function createOutTask(taskDef, cbFunc, tasks, vCon, execOptions, env) {
167
+ setMissingOutTaskType(taskDef);
168
+ var outTaskOptions = {
169
+ taskDef: taskDef,
170
+ cbFunc: cbFunc,
171
+ tasks: tasks,
172
+ vCon: vCon,
173
+ execOptions: execOptions,
174
+ env: env,
175
+ TaskConstructor: OUT_TASK_TYPES[taskDef.type]
176
+ };
177
+ EventManager.global.emit(EventManager.TYPES.EXEC_OUTTASK_CREATE, outTaskOptions); // hook
178
+ var TaskConstructor = outTaskOptions.TaskConstructor; // hook could have changed
179
+ return new TaskConstructor(outTaskOptions);
180
+ }
181
181
 
182
- function createErrorHandler(vCon, outTask) {
183
- return function handleError(task, err) {
184
- task.status = STATUS.ERRORED;
185
- task.error = err;
186
- outTask.env.currentTask = task;
187
- outTask.env.flowEmitter.emit(EventManager.TYPES.EXEC_TASK_ERRORED, task);
188
- var errWithMeta = error.augmentError(err, {task: task, vcon: vCon});
189
- outTask.exec(errWithMeta); //call the final callback with the first error hit
190
- };
191
- }
182
+ function createErrorHandler(vCon, outTask) {
183
+ return function handleError(task, err) {
184
+ task.status = STATUS.ERRORED;
185
+ task.error = err;
186
+ outTask.env.currentTask = task;
187
+ outTask.env.flowEmitter.emit(EventManager.TYPES.EXEC_TASK_ERRORED, task);
188
+ var errWithMeta = error.augmentError(err, {task: task, vcon: vCon});
189
+ outTask.exec(errWithMeta); //call the final callback with the first error hit
190
+ };
191
+ }
192
192
 
193
- function findTasksReady(vCon, tasks, tasksByName) {
194
- return tasks.filter(function (t) { return t.isReady(vCon, tasksByName); });
195
- }
193
+ function findTasksReady(vCon, tasks, tasksByName) {
194
+ return tasks.filter(function (t) { return t.isReady(vCon, tasksByName); });
195
+ }
196
196
 
197
- function execTasks(tasksReady, vCon, handleError, contExec) {
198
- tasksReady.forEach(function (t) { t.status = STATUS.READY; }); //set ready first, no double exec
199
- tasksReady.forEach(function (t) { t.exec(vCon, handleError, contExec); });
200
- }
197
+ function execTasks(tasksReady, vCon, handleError, contExec) {
198
+ tasksReady.forEach(function (t) { t.status = STATUS.READY; }); //set ready first, no double exec
199
+ tasksReady.forEach(function (t) { t.exec(vCon, handleError, contExec); });
200
+ }
201
201
 
202
- /**
203
- this will be called if there are no tasks found to run,
204
- and it will check if there are still tasks running or ready
205
- (which means they will be running shortly), in which
206
- case everything is fine. If no tasks are running then
207
- call handleError since this will never complete.
202
+ /**
203
+ this will be called if there are no tasks found to run,
204
+ and it will check if there are still tasks running or ready
205
+ (which means they will be running shortly), in which
206
+ case everything is fine. If no tasks are running then
207
+ call handleError since this will never complete.
208
208
  */
209
- function checkIfTasksRunning(vCon, tasks, handleError, env) {
210
- var tasksRunning = tasks.filter(function (t) {
211
- return (t.status === STATUS.RUNNING || t.status === STATUS.READY);
212
- });
213
- if (!tasksRunning.length) {
214
- var remainingTasks = tasks.filter(function (t) { return (!t.status); });
215
- var remainingTNames = remainingTasks.map(function (t) { return t.name; });
216
- var errMsg = sprintf(NO_TASKS_RUNNING_WONT_COMPLETE, remainingTNames.join(', '));
217
- var emptyTask = { env: env };
218
- handleError(emptyTask, new Error(errMsg));
209
+ function checkIfTasksRunning(vCon, tasks, handleError, env) {
210
+ var tasksRunning = tasks.filter(function (t) {
211
+ return (t.status === STATUS.RUNNING || t.status === STATUS.READY);
212
+ });
213
+ if (!tasksRunning.length) {
214
+ var remainingTasks = tasks.filter(function (t) { return (!t.status); });
215
+ var remainingTNames = remainingTasks.map(function (t) { return t.name; });
216
+ var errMsg = sprintf(NO_TASKS_RUNNING_WONT_COMPLETE, remainingTNames.join(', '));
217
+ var emptyTask = { env: env };
218
+ handleError(emptyTask, new Error(errMsg));
219
+ }
219
220
  }
220
- }
221
221
 
222
- function findReadyAndExec(vCon, tasks, tasksByName, handleError, contExec, env) {
223
- var tasksReady = findTasksReady(vCon, tasks, tasksByName);
224
- if (!tasksReady.length) checkIfTasksRunning(vCon, tasks, handleError, env); // no tasks to run, check if ok
225
- execTasks(tasksReady, vCon, handleError, contExec);
226
- }
222
+ function findReadyAndExec(vCon, tasks, tasksByName, handleError, contExec, env) {
223
+ var tasksReady = findTasksReady(vCon, tasks, tasksByName);
224
+ if (!tasksReady.length) checkIfTasksRunning(vCon, tasks, handleError, env); // no tasks to run, check if ok
225
+ execTasks(tasksReady, vCon, handleError, contExec);
226
+ }
227
227
 
228
- function serializeTasks(tasks) { // conveniently set after for each task idx > 0
229
- nameTasks(tasks);
230
- tasks.forEach(function (t, idx, arr) { if (idx !== 0) t.after = [arr[idx - 1].name]; });
231
- return tasks;
232
- }
228
+ function serializeTasks(tasks) { // conveniently set after for each task idx > 0
229
+ nameTasks(tasks);
230
+ tasks.forEach(function (t, idx, arr) { if (idx !== 0) t.after = [arr[idx - 1].name]; });
231
+ return tasks;
232
+ }
233
+
234
+ return {
235
+ serializeTasks: serializeTasks,
236
+ TASK_TYPES: TASK_TYPES,
237
+ taskTypeKeys: taskTypeKeys,
238
+ OUT_TASK_TYPES: OUT_TASK_TYPES,
239
+ outTaskTypeKeys: outTaskTypeKeys,
240
+ setMissingType: setMissingType,
241
+ validate: validate,
242
+ validateOutTask: validateOutTask,
243
+ validateLocalFunctions: validateLocalFunctions,
244
+ nameTasks: nameTasks,
245
+ create: create,
246
+ createOutTask: createOutTask,
247
+ createErrorHandler: createErrorHandler,
248
+ findReadyAndExec: findReadyAndExec
249
+ };
233
250
 
234
- exports.serializeTasks = serializeTasks;
235
-
236
- exports.TASK_TYPES = TASK_TYPES;
237
- exports.taskTypeKeys = taskTypeKeys;
238
- exports.OUT_TASK_TYPES = OUT_TASK_TYPES;
239
- exports.outTaskTypeKeys = outTaskTypeKeys;
240
- exports.setMissingType = setMissingType;
241
- exports.validate = validate;
242
- exports.validateOutTask = validateOutTask;
243
- exports.validateLocalFunctions = validateLocalFunctions;
244
- exports.nameTasks = nameTasks;
245
- exports.create = create;
246
- exports.createOutTask = createOutTask;
247
- exports.createErrorHandler = createErrorHandler;
248
- exports.findReadyAndExec = findReadyAndExec;
251
+ });