Skip to content

Commit d858eca

Browse files
committed
Expand directories. Fixes #429
1 parent aabc106 commit d858eca

File tree

4 files changed

+62
-7
lines changed

4 files changed

+62
-7
lines changed

lib/input/dependency.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ var mdeps = require('module-deps-sortable'),
44
fs = require('fs'),
55
path = require('path'),
66
babelify = require('babelify'),
7+
filterJS = require('../filter_js'),
78
concat = require('concat-stream'),
8-
moduleFilters = require('../../lib/module_filters');
9+
moduleFilters = require('../../lib/module_filters'),
10+
expandDirectories = require('./expand_directories');
911

1012
/**
1113
* Returns a readable stream of dependencies, given an array of entry
@@ -20,6 +22,7 @@ var mdeps = require('module-deps-sortable'),
2022
* @returns {undefined} calls callback
2123
*/
2224
function dependencyStream(indexes, options, callback) {
25+
var filterer = filterJS(options.extension, options.polyglot);
2326
var md = mdeps({
2427
filter: function (id) {
2528
return !!options.external || moduleFilters.internalOnly(id);
@@ -34,7 +37,7 @@ function dependencyStream(indexes, options, callback) {
3437
})],
3538
postFilter: moduleFilters.externals(indexes, options)
3639
});
37-
indexes.forEach(function (index) {
40+
expandDirectories(indexes, filterer).forEach(function (index) {
3841
md.write(path.resolve(index));
3942
});
4043
md.end();

lib/input/expand_directories.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var fs = require('fs');
2+
var path = require('path');
3+
var _ = require('lodash');
4+
5+
function expandDirectories(indexes, filterer) {
6+
return _.flatMap(indexes, function (index) {
7+
if (typeof index !== 'string') {
8+
return index;
9+
}
10+
try {
11+
var stat = fs.statSync(index);
12+
if (stat.isFile()) {
13+
return index;
14+
} else if (stat.isDirectory()) {
15+
return fs.readdirSync(index)
16+
.filter(function (file) {
17+
return filterer({ file: file });
18+
})
19+
.map(function (file) {
20+
return path.join(index, file);
21+
});
22+
}
23+
} catch (e) {
24+
throw new Error('Input file ' + index + ' not found!');
25+
}
26+
});
27+
}
28+
29+
module.exports = expandDirectories;

lib/input/shallow.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
'use strict';
22

33
var fs = require('fs');
4+
var filterJS = require('../filter_js');
5+
var expandDirectories = require('./expand_directories');
46

57
/**
68
* A readable source for content that doesn't do dependency resolution, but
@@ -20,13 +22,14 @@ var fs = require('fs');
2022
* @return {undefined} calls callback
2123
*/
2224
module.exports = function (indexes, options, callback) {
23-
return callback(null, indexes.map(function (index) {
24-
if (typeof index === 'string') {
25+
var filterer = filterJS(options.extension, options.polyglot);
26+
return callback(null, expandDirectories(indexes, filterer).map(function (file) {
27+
if (typeof file === 'string') {
2528
return {
26-
source: fs.readFileSync(index, 'utf8'),
27-
file: index
29+
source: fs.readFileSync(file, 'utf8'),
30+
file: file
2831
};
2932
}
30-
return index;
33+
return file;
3134
}));
3235
};

test/lib/input/shallow.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,26 @@ test('shallow deps multi', function (t) {
2525
});
2626
});
2727

28+
test('shallow deps directory', function (t) {
29+
shallow([
30+
path.resolve(path.join(__dirname, '../../fixture/html'))
31+
], {}, function (err, deps) {
32+
t.ifError(err);
33+
t.equal(deps.length, 1);
34+
t.ok(deps[0].file.match(/input.js/), 'is the input file');
35+
t.end();
36+
});
37+
});
38+
39+
test('shallow deps not found', function (t) {
40+
t.throws(function () {
41+
shallow([
42+
'not-found-file'
43+
], {});
44+
}, 'not found');
45+
t.end();
46+
});
47+
2848
test('shallow deps literal', function (t) {
2949
var obj = {
3050
file: 'foo.js',

0 commit comments

Comments
 (0)