1 |
|
2 | var initClosureDependencyResolver = function(emitter, fileList, resolver, iit, files) {
|
3 |
|
4 |
|
5 | files.unshift({
|
6 | pattern: __dirname + '/no_deps_bullshit.js',
|
7 | included: true,
|
8 | served: true,
|
9 | watched: false
|
10 | });
|
11 |
|
12 |
|
13 | emitter.on('file_list_modified', function(promise) {
|
14 | promise.then(function(files) {
|
15 | var includedPaths = files.included.map(function(file) {
|
16 | return file.originalPath;
|
17 | });
|
18 |
|
19 | if (iit.isInclusive()) {
|
20 | includedPaths = includedPaths.filter(iit.filter);
|
21 | }
|
22 |
|
23 | var resolvedPaths = resolver.resolveFiles(includedPaths);
|
24 | var servedFiles = files.served;
|
25 |
|
26 |
|
27 | files.included = resolvedPaths.map(function(filepath) {
|
28 | for (var i = 0, length = servedFiles.length; i < length; i++) {
|
29 | if (servedFiles[i].originalPath === filepath) {
|
30 | return servedFiles[i];
|
31 | }
|
32 | }
|
33 |
|
34 | console.error('NOT SERVED FILE', filepath);
|
35 | var externalFile = {
|
36 | path: filepath,
|
37 | originalPath: filepath,
|
38 | contentPath: filepath,
|
39 | isUrl: false,
|
40 |
|
41 |
|
42 | mtime: new Date()
|
43 | };
|
44 |
|
45 | files.served.push(externalFile);
|
46 | return externalFile;
|
47 | });
|
48 | });
|
49 | });
|
50 |
|
51 |
|
52 | var originalRemoveFile = fileList.removeFile;
|
53 | fileList.removeFile = function(filepath, done) {
|
54 | resolver.removeFile(filepath);
|
55 | iit.removeFile(filepath);
|
56 |
|
57 | return originalRemoveFile.call(fileList, filepath, done);
|
58 | };
|
59 |
|
60 | return resolver;
|
61 | };
|
62 |
|
63 | initClosureDependencyResolver.$inject = ['emitter', 'fileList', 'x:resolver', 'x:iit-filter',
|
64 | 'config.files'];
|
65 |
|
66 |
|
67 | var createPreprocesor = function(resolver) {
|
68 | return function(content, file, done) {
|
69 | resolver.updateFile(file.originalPath, content);
|
70 | done(content);
|
71 | };
|
72 | };
|
73 |
|
74 | createPreprocesor.$inject = ['x:resolver'];
|
75 |
|
76 |
|
77 | var createDepsPreprocesor = function(resolver) {
|
78 | return function(content, file, done) {
|
79 | resolver.loadExternalDeps(file.originalPath, content);
|
80 | done(content);
|
81 | };
|
82 | };
|
83 |
|
84 | createDepsPreprocesor.$inject = ['x:resolver'];
|
85 |
|
86 |
|
87 | var createIitPreprocesor = function(iit) {
|
88 | return function(content, file, done) {
|
89 | iit.updateFile(file.originalPath, content);
|
90 | done(content);
|
91 | };
|
92 | };
|
93 |
|
94 | createIitPreprocesor.$inject = ['x:iit-filter'];
|
95 |
|
96 |
|
97 | module.exports = {
|
98 | 'framework:closure': ['factory', initClosureDependencyResolver],
|
99 | 'preprocessor:closure': ['factory', createPreprocesor],
|
100 | 'preprocessor:closure-deps': ['factory', createDepsPreprocesor],
|
101 | 'preprocessor:closure-iit': ['factory', createIitPreprocesor],
|
102 |
|
103 |
|
104 | 'x:resolver': ['type', require('./resolver')],
|
105 | 'x:iit-filter': ['type', require('./iit')]
|
106 | };
|