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.
- package/.travis.yml +4 -0
- package/Jakefile.js +39 -0
- package/README.md +18 -26
- package/browser-test/dist.html +89 -0
- package/browser-test/index.html +85 -0
- package/browser-test/min.html +89 -0
- package/dist/react.js +3093 -0
- package/dist/react.min.js +1 -0
- package/doc/advanced.md +7 -2
- package/doc/simple.dot +25 -0
- package/doc/simple.png +0 -0
- package/examples/{default1.js → longer-example.js} +0 -0
- package/examples/{default-simple.js → simple.js} +0 -0
- package/examples/{ast1.js → using-ast-directly.js} +4 -0
- package/examples/{default-events1.js → using-events1.js} +1 -1
- package/examples/{default-log-events.js → using-log-events.js} +0 -0
- package/lib/base-task.js +116 -110
- package/lib/cb-task.js +71 -67
- package/lib/core.js +118 -107
- package/lib/dsl.js +120 -115
- package/lib/error.js +44 -36
- package/lib/event-collector.js +69 -53
- package/lib/event-manager.js +69 -55
- package/lib/eventemitter.js +20 -0
- package/lib/finalcb-first-task.js +56 -53
- package/lib/finalcb-task.js +55 -51
- package/lib/id.js +18 -6
- package/lib/input-parser.js +49 -41
- package/lib/log-events.js +79 -73
- package/lib/parse.js +34 -25
- package/lib/promise-resolve.js +42 -27
- package/lib/promise-task.js +78 -74
- package/lib/react.js +59 -0
- package/lib/ret-task.js +59 -55
- package/lib/sprintf.js +18 -0
- package/lib/status.js +11 -2
- package/lib/task.js +216 -213
- package/lib/track-tasks.js +72 -58
- package/lib/validate.js +136 -136
- package/lib/vcon.js +78 -69
- package/lib/when-task.js +69 -65
- package/package.json +10 -9
- package/src/dist.build.requirejs +20 -0
- package/test/ast.mocha.js +136 -0
- package/test/cb-task.mocha.js +220 -0
- package/test/core-deferred.mocha.js +143 -0
- package/test/core-when.mocha.js +96 -0
- package/test/core.mocha.js +589 -0
- package/test/dsl.mocha.js +350 -0
- package/test/event-manager.mocha.js +119 -0
- package/test/exec-options.mocha.js +48 -0
- package/test/finalcb-task.mocha.js +58 -0
- package/test/input-parser.mocha.js +86 -0
- package/test/mocha.opts +2 -0
- package/test/module-use.mocha.js +147 -0
- package/test/promise-auto-resolve.mocha.js +68 -0
- package/test/ret-task.mocha.js +220 -0
- package/test/task.mocha.js +42 -0
- package/test/validate-cb-task.mocha.js +100 -0
- package/test/validate-ret-task.mocha.js +110 -0
- package/test/validate.mocha.js +324 -0
- package/test/vcon.mocha.js +193 -0
- package/vendor/chai/chai.js +2038 -0
- package/vendor/jquery/jquery-1.7.1.js +9266 -0
- package/vendor/jquery/jquery-1.7.1.min.js +4 -0
- package/vendor/mocha/mocha.css +135 -0
- package/vendor/mocha/mocha.js +3589 -0
- package/vendor/node/util.js +531 -0
- package/vendor/requirejs/require.js +2053 -0
- package/vendor/requirejs/require.min.js +33 -0
- package/doc/default-simple.dot +0 -19
- package/doc/default-simple.dot.png +0 -0
- package/react.js +0 -40
- package/test/ast.test.js +0 -69
- package/test/cb-task.test.js +0 -197
- package/test/core-deferred.test.js +0 -134
- package/test/core-promised.test.js +0 -132
- package/test/core-when.test.js +0 -84
- package/test/core.test.js +0 -568
- package/test/dsl.test.js +0 -330
- package/test/event-manager.test.js +0 -102
- package/test/exec-options.test.js +0 -33
- package/test/finalcb-task.test.js +0 -38
- package/test/input-parser.test.js +0 -66
- package/test/module-use.test.js +0 -134
- package/test/promise-auto-resolve.test.js +0 -52
- package/test/ret-task.test.js +0 -199
- package/test/task.test.js +0 -21
- package/test/validate-cb-task.test.js +0 -74
- package/test/validate-ret-task.test.js +0 -83
- package/test/validate.test.js +0 -295
- 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
|
-
|
|
4
|
+
if (typeof define !== 'function') {
|
|
5
|
+
var define = require('amdefine')(module);
|
|
6
|
+
}
|
|
4
7
|
|
|
5
|
-
|
|
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
|
-
|
|
4
|
-
var
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
64
|
+
/**
|
|
65
|
+
@returns array of errors for taskDef, could be empty
|
|
68
66
|
*/
|
|
69
|
-
function validate(taskDef) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
127
|
-
}
|
|
123
|
+
});
|
|
124
|
+
return errors;
|
|
125
|
+
}
|
|
128
126
|
|
|
129
|
-
function fName(fn) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
127
|
+
function fName(fn) {
|
|
128
|
+
if (typeof(fn) === 'function') {
|
|
129
|
+
return fn.name;
|
|
130
|
+
}
|
|
131
|
+
return (fn) ? fn : '';
|
|
132
|
+
}
|
|
134
133
|
|
|
135
|
-
/**
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
/**
|
|
135
|
+
Name tasks that are not already named. Prenamed task uniquness validation
|
|
136
|
+
will be done in validate.
|
|
138
137
|
|
|
139
|
-
|
|
138
|
+
This modifies the tasks with the new names.
|
|
140
139
|
|
|
141
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
name
|
|
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
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
});
|
|
158
|
-
return namesMap;
|
|
159
|
-
}
|
|
157
|
+
});
|
|
158
|
+
return namesMap;
|
|
159
|
+
}
|
|
160
160
|
|
|
161
|
-
function create(taskDef) {
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
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
|
-
|
|
199
|
-
|
|
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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|
-
|
|
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
|
+
});
|