This repository was archived by the owner on Mar 26, 2025. It is now read-only.
forked from Real-Serious-Games/task-mule
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtask-loader.js
More file actions
77 lines (63 loc) · 2.33 KB
/
Copy pathtask-loader.js
File metadata and controls
77 lines (63 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
var assert = require('chai').assert;
var fs = require("fs");
var path = require('path');
var E = require('linq');
var S = require('string');
var Task = require('./task');
var sugar = require('sugar');
var TaskRunner = require('./task-runner.js');
var assert = require('chai').assert;
//
// Automatic loading of Grunt tasks from a collection of files.
//
module.exports = function (autoLoadConfig, log, validate, config) {
assert.isObject(autoLoadConfig);
assert.isObject(validate);
assert.isObject(config);
//
// Load in all tasks from files.
//
var tasksValidated = {}; // Remembers tasks that have been validated, so they aren't validated again.
var tasksInvoked = {}; // Remembers tasks that have been invoked, so they aren't invoked again.
var tasksDir = autoLoadConfig.tasksDir || path.join(process.cwd(), "tasks");
var taskRunner = new TaskRunner(log);
//
// Strips an extension from a filename.
//
var stripExt = function (fileName) {
assert.isString(fileName);
if (S(fileName).endsWith('.js')) {
return fileName.slice(0, -3); // Hacky: Specific for .js files.
}
else {
return fileName;
}
};
//
// Sync walk a directory structure and call the callback for each file.
//
var walkDirsInternal = function (rootPath, subDirPath) {
assert.isString(rootPath);
assert.isString(subDirPath);
var dirPath = path.join(rootPath, subDirPath);
var items = fs.readdirSync(dirPath);
for (var i = 0; i < items.length; ++i) {
var itemName = items[i];
var relativeItemPath = path.join(subDirPath, itemName);
var fullItemPath = path.join(dirPath, itemName);
var stat = fs.statSync(fullItemPath);
if (stat.isDirectory()) {
walkDirsInternal(rootPath, relativeItemPath);
}
else {
var taskName = stripExt(S(relativeItemPath).replaceAll('\\', '/').s);
taskRunner.addTask(new Task(taskName, relativeItemPath, fullItemPath, log, validate, taskRunner));
}
}
};
var walkDirs = function (dirPath) {
walkDirsInternal(dirPath, "./");
};
walkDirs(tasksDir);
return taskRunner;
};