1 |
|
2 | var through = require("through2");
|
3 | var omit = require("lodash/omit");
|
4 | var keys = require("lodash/keys");
|
5 | var assign = require("lodash/assign");
|
6 | var multimatch = require("multimatch");
|
7 |
|
8 | module.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 |
|
18 | function getGlobPattern(data) {
|
19 | var options = data.options;
|
20 |
|
21 | return options.filter || "**";
|
22 | }
|
23 |
|
24 | function 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 |
|
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 |
|