UNPKG

3.54 kBJavaScriptView Raw
1var fs = require('vinyl-fs');
2var path =require('path');
3var through = require('through-gulp');
4var gutil = require('gulp-util');
5
6var startReg = /<!--\s+build:\w+\s+\/?[^\s]+\s+-->/gim;
7var startMirrorReg = /<!--\s+build:\w+\s+\/?[^\s]+\s+-->/i;
8var endReg = /<!--\s*endbuild\s*-->/gim;
9var splitReg = /<!--\s+split\s+-->/gim;
10var jsReg = /<\s*script\s+.*?src\s*=\s*("|')([^"']+?)\1.*?><\s*\/\s*script\s*>/i;
11var cssReg = /<\s*link\s+.*?href\s*=\s*("|')([^"']+)\1.*?>/i;
12var spaceReg = /^\s*$/;
13var typeReg = /<!--\s+build:(\w+)\s+\/?[^\s]+\s+-->/i;
14var pathReg = /<!--\s+build:\w+\s+(\/?[^\s]+)\s+-->/i;
15var utils = {};
16
17utils.getSplitBlock = function(string) {
18 return string.split(splitReg);
19};
20
21utils.getBlockType = function(block) {
22 return typeReg.exec(block)[1];
23};
24
25utils.getBlockPath = function(block) {
26 return pathReg.exec(block)[1];
27};
28
29utils.getFilePath = function(block) {
30 return block
31 .replace(startReg, '')
32 .replace(endReg, '')
33 .split('\n')
34 .filter(function(value) {
35 return !spaceReg.test(value);
36 })
37 .map(function(value) {
38 if (utils.getBlockType(block) === 'js') return jsReg.exec(value.replace(/^\s*/, ''))[2];
39 if (utils.getBlockType(block) === 'css') return cssReg.exec(value.replace(/^\s*/, ''))[2];
40 });
41};
42
43utils.getFileSource = function(blocks) {
44 return blocks
45 .filter(function(block) {
46 return startMirrorReg.test(block);
47 })
48 .map(function(block) {
49 return {
50 type: utils.getBlockType(block),
51 destiny: utils.getBlockPath(block),
52 files: utils.getFilePath(block)
53 }
54 });
55};
56
57utils.resolveFileSource = function(sources, options) {
58 if (!sources || !options) return false;
59
60 for (var i = 0; i < sources.length; i++) {
61 var files = sources[i].files;
62 var destiny = path.join('./', path.dirname(sources[i].destiny));
63 var fileName = path.basename(sources[i].destiny);
64 var parser = options[sources[i].type];
65
66 if (files.length === 0 || !destiny || !fileName) return false;
67 if (parser && parser.length !== 0) {
68 utils.pathTraverse(files, parser, options.debug).pipe(utils.concat(fileName)).pipe(fs.dest(destiny));
69 }
70 }
71};
72
73utils.pathTraverse = function(originPath, flow, debug) {
74 var targetPath = originPath.map(function(value) {
75 if (!debug) return path.join('./', value);
76 return path.join('./', '/test/fixture', value);
77 });
78 var stream = fs.src(targetPath);
79 for (var i = 0; i < flow.length; i++) {
80 stream = stream.pipe(flow[i].generator.call(null, flow[i].config));
81 }
82 return stream;
83};
84
85utils.resolveSourceToDestiny = function(blocks) {
86 var result = blocks.map(function(block) {
87 if (!startMirrorReg.test(block)) return block;
88 if (utils.getBlockType(block) === 'js') return '<script src="' + utils.getBlockPath(block) + '"></script>';
89 if (utils.getBlockType(block) === 'css') return '<link rel="stylesheet" href="' + utils.getBlockPath(block) + '"/>';
90 if (utils.getBlockType(block) === 'remove') return null;
91 });
92
93 return result.join('\n');
94};
95
96utils.concat = function(fileName) {
97 var assetStorage = new Buffer(0);
98 var separator = new Buffer('\n');
99 return through(function(file, enc, callback) {
100 assetStorage = Buffer.concat([assetStorage, file.contents, separator]);
101 callback();
102 }, function(callback) {
103 this.push(new gutil.File({
104 path: fileName,
105 contents: assetStorage
106 }));
107 callback();
108 })
109};
110
111utils._escape = function(string) {
112 return string.replace(/[\n\s]*/gi, '');
113};
114
115module.exports = utils;
\No newline at end of file