1 | var through = require('through2');
|
2 | var PluginError = require('gulp-util').PluginError;
|
3 |
|
4 | var exports = {
|
5 | rewriteStream : rewriteStream,
|
6 | gulpRewrite : gulpRewrite,
|
7 | gulpRewriteFiletype : gulpRewriteFiletype
|
8 | }
|
9 |
|
10 | module.exports = function() {
|
11 |
|
12 | return exports
|
13 | }
|
14 |
|
15 |
|
16 |
|
17 | function rewriteStream(replacements) {
|
18 |
|
19 | if(!replacements) {
|
20 | replacements = {}
|
21 | }
|
22 |
|
23 | var stream = through.obj(function(data, enc, callback) {
|
24 | var replaced = doReplacements(data.toString(), replacements)
|
25 | this.push(replaced)
|
26 | callback()
|
27 | });
|
28 |
|
29 | return stream;
|
30 | }
|
31 |
|
32 |
|
33 | function gulpRewrite (replacements) {
|
34 |
|
35 | if(!replacements) {
|
36 | replacements = {}
|
37 | }
|
38 |
|
39 |
|
40 |
|
41 | return through.obj(function(file, enc, cb) {
|
42 |
|
43 | if (file.isNull()) {
|
44 | return cb(null, file);
|
45 | }
|
46 | if (file.isBuffer()) {
|
47 | file.contents = Buffer(doReplacements(file.contents.toString(enc), replacements), enc);
|
48 | }
|
49 | if (file.isStream()) {
|
50 | file.contents = file.contents.pipe(rewriteStream(replacements));
|
51 | }
|
52 | cb(null, file);
|
53 |
|
54 | });
|
55 |
|
56 | }
|
57 |
|
58 | function gulpRewriteFiletype (filetype, replacement) {
|
59 |
|
60 |
|
61 | return through.obj(function(file, enc, cb) {
|
62 |
|
63 | if (file.isNull()) {
|
64 | return cb(null, file);
|
65 | }
|
66 |
|
67 | var re = new RegExp("[\/\\\\]" + filetype + "[\/\\\\]", "gi")
|
68 | file.path = file.path.replace(re, "/" + replacement + "/")
|
69 | re = new RegExp("\." + filetype + "$", "gi")
|
70 | file.path = file.path.replace(re, "." + replacement)
|
71 | cb(null, file);
|
72 |
|
73 | });
|
74 |
|
75 | }
|
76 |
|
77 | function doReplacements(content, replacements) {
|
78 | for(var match in replacements){
|
79 | var re = new RegExp(match, 'g')
|
80 | content = content.replace(re, replacements[match])
|
81 | }
|
82 | return content
|
83 | }
|
84 |
|
85 |
|