-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpug-deps
executable file
·81 lines (56 loc) · 1.78 KB
/
pug-deps
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
81
#!/usr/bin/env node
'use strict';
var _ = require('lodash')
var fs = require('fs')
var path = require('path')
var pugLexer = require('pug-lexer')
var pugParser = require('pug-parser')
var pugWalk = require('pug-walk')
try {var stylus = require('stylus')} catch (e) {}
try {
var through = require('through2')
var browserify = require('browserify')
} catch (e) {}
var deps = [];
var cwd = process.cwd() + '/';
function emit_dep(filename) {
if (filename.startsWith(cwd)) filename = filename.substr(cwd.length);
if (_.indexOf(deps, filename) != -1) return false;
if (deps.length) process.stdout.write(' ');
process.stdout.write(filename);
deps.push(filename);
return true;
}
function browserify_deps(filename) {
var b = browserify({entries: [filename]});
b.pipeline.get('deps').push(through.obj(function (row, enc, next) {
emit_dep(row.file || row.id);
next();
}))
b.bundle();
}
function stylus_deps(filename) {
stylus(fs.readFileSync(filename, 'utf8'))
.set('filename', filename)
.deps()
.map(emit_dep);
}
function pug_deps(filename) {
fs.existsSync(filename);
var contents = fs.readFileSync(filename, 'utf8');
var dirname = path.dirname(filename);
var lex = pugLexer(contents, {filename: filename});
pugWalk(pugParser(lex), function(node) {
if (['Include', 'RawInclude', 'Extends'].indexOf(node.type) == -1) return;
var dep = path.join(dirname, node.file.path);
if (!emit_dep(dep)) return
if (typeof node.filters != 'undefined')
node.filters.map(function (filter) {
if (filter.name == 'browserify') browserify_deps(dep);
else if (filter.name == 'stylus') stylus_deps(dep);
})
else pug_deps(dep);
});
return deps;
}
process.argv.slice(2).map(pug_deps)