UNPKG

1.06 kBJavaScriptView Raw
1
2var through = require("through2");
3var omit = require("lodash/omit");
4var keys = require("lodash/keys");
5var assign = require("lodash/assign");
6var multimatch = require("multimatch");
7
8module.exports = function() {
9 return through.obj(function(data, enc, done) {
10 try {
11 done(null, filterGraph(data));
12 } catch (err) {
13 done(err);
14 }
15 });
16};
17
18function getGlobPattern(data) {
19 var options = data.options;
20
21 return options.filter || "**";
22}
23
24function filterGraph(data) {
25 var visited = {};
26 var filtered = {};
27 var graph = data.graph;
28 var baseUrl = data.loader.baseURL;
29
30 keys(graph).forEach(function visit(name) {
31 // don't visit a node twice
32 if (visited[name]) return;
33
34 visited[name] = true;
35 var node = graph[name];
36
37 if (node) {
38 var address = node.load.address;
39 var pattern = getGlobPattern(data);
40 var relative = address.replace(baseUrl, "");
41
42 if (multimatch(relative, pattern).length) {
43 node.dependencies.forEach(visit);
44 filtered[name] = node;
45 }
46 }
47 });
48
49 return assign({}, omit(data, "graph"), { graph: filtered });
50}
51