1 | var fs
|
2 | var path
|
3 | var glob
|
4 | var async
|
5 | var amRewrite
|
6 | var fileStuff
|
7 |
|
8 | var manifest
|
9 |
|
10 | var exports = {
|
11 | copy : copy,
|
12 | copyFile : copyFile,
|
13 | buildExclusionsList : buildExclusionsList
|
14 | }
|
15 |
|
16 | module.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 |
|
38 | var fontExts = ['.ttf', '.otf', '.woff', '.woff2', '.svg', '.eot']
|
39 | var audioExts = ['.mp3', '.mp4', '.ogg', '.aac', '.wav']
|
40 | var videoExts = ['.webm']
|
41 | var imageExts = ['.jpg', '.jpeg', '.ico', '.gif', '.png',
|
42 | '.svg', '.bmp', '.psd', '.xcf', '.tiff']
|
43 | var archiveExts = ['.zip', '.rar', '.bz2', '.tar', '.iso', '.gz']
|
44 |
|
45 | var allExts = fontExts.concat(audioExts).concat(videoExts).concat(archiveExts).concat(imageExts)
|
46 |
|
47 |
|
48 |
|
49 |
|
50 | function 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 |
|
106 | function 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 |
|
180 | function 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 | }
|