forked from angular/angular
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutil.js
More file actions
80 lines (72 loc) · 1.83 KB
/
util.js
File metadata and controls
80 lines (72 loc) · 1.83 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
78
79
80
var fs = require('fs');
var path = require('path');
var minimatch = require('minimatch');
var path = require('path');
var Q = require('q');
module.exports = {
processToPromise: processToPromise,
streamToPromise: streamToPromise,
filterByFile: filterByFile,
subDirs: subDirs,
forEachSubDir: forEachSubDir,
forEachSubDirSequential: forEachSubDirSequential
};
function subDirs(dir) {
return fs.readdirSync(dir).filter(function(file) {
return fs.statSync(path.join(dir, file)).isDirectory();
});
}
function forEachSubDir(dir, callback) {
var dirs = subDirs(dir);
return Q.all(dirs.map(function(subdir) {
return callback(path.join(dir, subdir));
}));
};
function forEachSubDirSequential(dir, callback) {
var dirs = subDirs(dir);
return next(0);
function next(index) {
if (index < dirs.length) {
return callback(path.join(dir, dirs[index])).then(function() {
return next(index+1);
});
} else {
return true;
}
}
}
function processToPromise(process) {
var defer = Q.defer();
process.on('close', function(code) {
if (code) {
defer.reject(code);
} else {
defer.resolve();
}
});
return defer.promise;
}
function streamToPromise(stream) {
var defer = Q.defer();
stream.on('end', defer.resolve);
stream.on('error', defer.reject);
return defer.promise;
}
function filterByFile(pathMapping, folder) {
var folderParts = folder.split(path.sep);
var match;
var lastPattern;
for (var pattern in pathMapping) {
if (minimatch(folder, pattern)) {
if (!lastPattern || lastPattern.length < pattern.length) {
match = pathMapping[pattern];
lastPattern = pattern;
}
}
}
if (match !== undefined) {
return match;
} else {
throw new Error('No entry for folder '+folder+' found in '+JSON.stringify(pathMapping));
}
}