-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
75 lines (62 loc) · 1.69 KB
/
index.js
File metadata and controls
75 lines (62 loc) · 1.69 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
var fs = require('fs');
var glob = require('glob');
var _ = require('lodash');
function globs(patterns, options) {
if (!Array.isArray(patterns)) {
patterns = [patterns];
}
var result = [];
_.flatten(patterns).forEach(function(pattern) {
var exclude = pattern.indexOf('!') === 0;
if (exclude) { pattern = pattern.slice(1); }
var matches = glob.sync(pattern, options);
if (exclude) {
result = _.difference(result, matches);
} else {
result = _.union(result, matches);
}
});
return result;
}
function writeScript(p) {
var basePath = this.basePath;
return 'document.write(\'<script type="text/javascript" src="' +
basePath + p + '"></script>\');';
}
function globsToUrl(files, options) {
if (files.options) {
options = _.defaults(files.options, options);
files = files.files;
}
return _.flatten([].concat(files).map(function(file) {
if (file.options) { return globToUrl(file.files, file.options); }
return globs(file, options.globOptions)
.map(writeScript.bind(options));
}));
}
var defaults = {
basePath: '/',
globOptions: {
cwd: process.cwd()
}
};
exports.register = function(plugin, options, next) {
options.options = _.defaults(options.options || {}, defaults);
var scripts = options.scripts;
if (scripts) {
Object.keys(scripts).forEach(function(path) {
var res = globsToUrl(scripts[path], options.options).join('\n');
plugin.route({
method: 'GET',
path: path,
handler: function(request, reply) {
reply(res).type('text/javascript');
}
});
});
}
next();
};
exports.register.attributes = {
pkg: require('./package.json')
};