1 | var _ = require('underscore'),
|
2 | async = require('async'),
|
3 | fu = require('./fileUtil'),
|
4 | resources = require('./util/resources');
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | exports.loadResources = function(context, callback) {
|
17 | var plugins = context.plugins;
|
18 |
|
19 | function filterResource(resource) {
|
20 | resource = resources.cast(resource);
|
21 |
|
22 | if (exports.filterResource(resource, context)) {
|
23 | return resource;
|
24 | }
|
25 | }
|
26 |
|
27 | plugins.moduleResources(context, function(err, files) {
|
28 | if (err) {
|
29 | return callback(err);
|
30 | }
|
31 |
|
32 | var fileFilter = plugins.fileFilter(context) || /.*/;
|
33 | fu.fileList(files, fileFilter, function(err, files) {
|
34 | if (err) {
|
35 | return callback(err);
|
36 | }
|
37 |
|
38 | async.map(files, function(resource, callback) {
|
39 | var resourceContext = context.clone();
|
40 | resourceContext.resource = resource;
|
41 | plugins.resourceList(resourceContext, callback);
|
42 | },
|
43 | function(err, resources) {
|
44 | resources = _.flatten(resources);
|
45 | resources = _.map(resources, filterResource);
|
46 | resources = _.filter(resources, function(resource) { return resource; });
|
47 | callback(err, resources);
|
48 | });
|
49 | });
|
50 | });
|
51 | };
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | exports.filterResource = function(resource, context) {
|
57 | function check(value, singular, plural) {
|
58 | if (typeof singular !== 'undefined') {
|
59 | return singular.not ? singular.not !== value : singular === value;
|
60 | } else if (plural) {
|
61 | var ret = (plural.not || plural).reduce(function(found, filePlatform) {
|
62 | return found || filePlatform === value;
|
63 | }, false);
|
64 | return plural.not ? !ret : ret;
|
65 | }
|
66 | return true;
|
67 | }
|
68 |
|
69 | function checkResource(resource) {
|
70 | return check(context.platform, resource.platform, resource.platforms)
|
71 | && check(context.package, resource.package, resource.packages)
|
72 | && check(!!context.combined, resource.combined);
|
73 | }
|
74 | return checkResource(resource)
|
75 | && (!resource.originalResource || checkResource(resource.originalResource));
|
76 | };
|
77 |
|
78 |
|
79 |
|
80 |
|
81 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 | exports.processResources = function(resources, context, callback) {
|
88 | var plugins = context.plugins;
|
89 |
|
90 | async.map(resources, function(resource, callback) {
|
91 | var resourceContext = context.clone();
|
92 | resourceContext.resource = resource;
|
93 | plugins.resource(resourceContext, function(err, newResource) {
|
94 | if (newResource && newResource !== resource) {
|
95 | newResource.originalResource = resource;
|
96 | }
|
97 |
|
98 | callback(err, newResource);
|
99 | });
|
100 | },
|
101 | function(err, resources) {
|
102 | if (err) {
|
103 | return callback(err);
|
104 | }
|
105 |
|
106 | callback(err, resources.filter(function(resource) { return resource; }));
|
107 | });
|
108 | };
|