UNPKG

4.56 kBJavaScriptView Raw
1var fs
2var path
3var glob
4var async
5var amRewrite
6var fileStuff
7
8var manifest
9
10var exports = {
11 copy : copy,
12 copyFile : copyFile,
13 buildExclusionsList : buildExclusionsList
14}
15
16module.exports = function(gulpManifest, deps) {
17 if(deps) {
18 fs = deps.fs
19 path = deps.path
20 glob = deps.glob
21 amRewrite = deps.rewrite
22 async = deps.async
23 fileStuff = deps.fileStuff
24 }
25 else {
26 fs = require('fs')
27 path = require('path')
28 glob = require('glob')
29 async = require('async')
30 amRewrite = require(path.dirname(__filename) + '/rewrite.js')()
31 fileStuff = require(path.dirname(__filename) + '/fileStuff.js')()
32 }
33
34 manifest = gulpManifest
35 return exports
36}
37
38var fontExts = ['.ttf', '.otf', '.woff', '.woff2', '.svg', '.eot']
39var audioExts = ['.mp3', '.mp4', '.ogg', '.aac', '.wav']
40var videoExts = ['.webm']
41var imageExts = ['.jpg', '.jpeg', '.ico', '.gif', '.png',
42 '.svg', '.bmp', '.psd', '.xcf', '.tiff']
43var archiveExts = ['.zip', '.rar', '.bz2', '.tar', '.iso', '.gz']
44
45var allExts = fontExts.concat(audioExts).concat(videoExts).concat(archiveExts).concat(imageExts)
46
47//-------------------------------------------------
48
49
50function copy(pkgIndex, destIndex, cb) {
51
52 var src = manifest[pkgIndex]["src"]
53 var dest = manifest[pkgIndex]["dest"][destIndex]
54
55 if(!src.copy || (Array.isArray(src.copy) && src.copy.length === 0)) {
56 cb()
57 return
58 }
59
60 var exclusions = exports.buildExclusionsList(src)
61 var base = src.directory
62 if(base !== "") base += "/"
63
64 var copyGlobs = []
65 if(Array.isArray(src.copy)) {
66 for(var i in src.copy) {
67 copyGlobs.push(base + src.copy[i])
68 }
69 }
70 else {
71 copyGlobs.push(base + src.copy)
72 }
73
74 var allFiles = fileStuff.intersect(copyGlobs, exclusions)
75
76 if(allFiles.length === 0) {
77 cb()
78 return
79 }
80
81 var mRecord = fileStuff.openModificationsRecord()
82
83 async.each(allFiles, function(fileIn, cb1) {
84
85 var fileOut = fileStuff.getDestPath(fileIn, src.directory, dest.directory)
86 fileStuff.mkdirIfNotExist(fileOut)
87
88 if(!fileStuff.fileIsDirectory(fileIn)) {
89 if(fileStuff.fileNeedsUpdating(mRecord, fileIn, fileOut)) {
90 console.log("Copying file: ", fileIn)
91 copyFile(fileIn, fileOut, dest.rewrites, cb1)
92 }else {
93 cb1()
94 }
95 } else {
96 cb1()
97 }
98
99 }, function(err){
100 fileStuff.closeModificationsRecord(mRecord)
101 if(err) cb(err)
102 else cb()
103 })
104}
105
106function buildExclusionsList(src) {
107 var excludes = []
108
109 var base = src.directory
110 if(base !== "") base += "/"
111
112 if(src.js) {
113 if(Array.isArray(src.js)) {
114 for(var i in src.js) {
115 excludes.push(base + src.js[i])
116 }
117 }
118 else if (src.js !== "") excludes.push(base + src.js)
119 }
120 if(src.es6) {
121 if(Array.isArray(src.es6)) {
122 for(var i in src.es6) {
123 excludes.push(base + src.es6[i])
124 }
125 }
126 else if (src.es6 !== "") excludes.push(base + src.es6)
127 }
128 if(src.css) {
129 if(Array.isArray(src.css)) {
130 for(var i in src.css) {
131 excludes.push(base + src.css[i])
132 }
133 }
134 else if (src.css !== "") excludes.push(base + src.css)
135 }
136 if(src.scss) {
137 if(Array.isArray(src.scss)) {
138 for(var i in src.scss) {
139 excludes.push(base + src.scss[i])
140 }
141 }
142 else if (src.scss !== "") excludes.push(base + src.scss)
143 }
144 if(src.copyExclude) {
145 if(Array.isArray(src.copyExclude)) {
146 for(var i in src.copyExclude) {
147 excludes.push(base + src.copyExclude[i])
148 }
149 }
150 else if (src.copyExclude !== "") excludes.push(base + src.copyExclude)
151 }
152 if(src.images){
153 if(Array.isArray(src.images)) {
154 for(var j in src.images) {
155 if(src.images[j].glob && Array.isArray(src.images[j].glob)) {
156 for(var i in src.images[j].glob) {
157 excludes.push(base + src.images[j].glob[i])
158 }
159 }
160 else if(src.images[j].glob) {
161 excludes.push(base + src.images[j].glob)
162 }
163 }
164 }
165 else {
166 if(src.images.glob && Array.isArray(src.images.glob)) {
167 for(var i in src.images.glob) {
168 excludes.push(base + src.images.glob[i])
169 }
170 }
171 else if(src.images.glob) {
172 excludes.push(base + src.images.glob)
173 }
174 }
175 }
176
177 return excludes
178}
179
180function copyFile(fileIn, fileOut, rewrites, cb) {
181
182 var rs = fs.createReadStream(fileIn)
183 var ws = fs.createWriteStream(fileOut)
184 var ext = path.extname(fileIn)
185
186 if(rewrites === null || rewrites === {} || allExts.indexOf(ext) !== -1) {
187
188 rs.pipe(ws)
189 }
190 else {
191 rs.pipe(amRewrite.rewriteStream(rewrites)).pipe(ws)
192 }
193
194 ws.on('close', function(){
195 cb()
196 })
197}