Skip to content

Commit af035a5

Browse files
erikkempermanphated
authored andcommitted
Breaking: Utilize vinyl-prepare & vinyl-sourcemap dependencies (closes #193)
1 parent 40ac6e9 commit af035a5

File tree

16 files changed

+241
-204
lines changed

16 files changed

+241
-204
lines changed

lib/dest/index.js

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,28 @@
11
'use strict';
22

3-
var through2 = require('through2');
4-
var sourcemaps = require('gulp-sourcemaps');
5-
var duplexify = require('duplexify');
6-
var valueOrFunction = require('value-or-function');
3+
var pumpify = require('pumpify');
4+
var prepare = require('vinyl-prepare');
75

86
var sink = require('../sink');
9-
var prepareWrite = require('../prepare-write');
10-
var writeContents = require('./write-contents');
7+
var saveFile = require('./save-file');
8+
var sourcemap = require('./sourcemap');
119

1210
function dest(outFolder, opt) {
1311
if (!opt) {
1412
opt = {};
1513
}
1614

17-
var sourcemapsOpt = valueOrFunction(
18-
['boolean', 'string', 'object'], opt.sourcemaps);
19-
20-
function saveFile(file, enc, callback) {
21-
prepareWrite(outFolder, file, opt, onPrepare);
22-
23-
function onPrepare(prepareErr) {
24-
if (prepareErr) {
25-
return callback(prepareErr);
26-
}
27-
writeContents(file, callback);
28-
}
29-
}
30-
31-
var saveStream = through2.obj(opt, saveFile);
32-
if (!sourcemapsOpt) {
33-
// Sink the save stream to start flowing
34-
// Do this on nextTick, it will flow at slowest speed of piped streams
35-
process.nextTick(sink(saveStream));
36-
37-
return saveStream;
38-
}
39-
40-
if (typeof sourcemapsOpt === 'boolean') {
41-
sourcemapsOpt = {};
42-
} else if (typeof sourcemapsOpt === 'string') {
43-
sourcemapsOpt = {
44-
path: sourcemapsOpt,
45-
};
46-
}
47-
48-
var mapStream = sourcemaps.write(sourcemapsOpt.path, sourcemapsOpt);
49-
var outputStream = duplexify.obj(mapStream, saveStream);
50-
mapStream.pipe(saveStream);
15+
var saveStream = pumpify.obj(
16+
prepare.dest(outFolder, opt),
17+
sourcemap(opt),
18+
saveFile(opt)
19+
);
5120

5221
// Sink the output stream to start flowing
5322
// Do this on nextTick, it will flow at slowest speed of piped streams
54-
process.nextTick(sink(outputStream));
23+
process.nextTick(sink(saveStream));
5524

56-
return outputStream;
25+
return saveStream;
5726
}
5827

5928
module.exports = dest;

lib/dest/save-file.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'use strict';
2+
3+
var through = require('through2');
4+
var valueOrFunction = require('value-or-function');
5+
6+
var fo = require('../file-operations');
7+
var writeContents = require('./write-contents');
8+
9+
var number = valueOrFunction.number;
10+
11+
function saveFileStream(opt) {
12+
13+
function saveFile(file, enc, callback) {
14+
// TODO: Can this be put on file.stat?
15+
var dirMode = number(opt.dirMode, file);
16+
17+
fo.mkdirp(file.dirname, dirMode, onMkdirp);
18+
19+
function onMkdirp(mkdirpErr) {
20+
if (mkdirpErr) {
21+
return callback(mkdirpErr);
22+
}
23+
writeContents(file, callback);
24+
}
25+
}
26+
27+
return through.obj(saveFile);
28+
}
29+
30+
module.exports = saveFileStream;

lib/dest/sourcemap.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
'use strict';
2+
3+
var through = require('through2');
4+
var sourcemap = require('vinyl-sourcemap');
5+
var valueOrFunction = require('value-or-function');
6+
7+
var stringOrBool = valueOrFunction.bind(null, ['string', 'boolean']);
8+
9+
function sourcemapStream(opt) {
10+
11+
function saveSourcemap(file, enc, callback) {
12+
var self = this;
13+
14+
var srcMap = stringOrBool(opt.sourcemaps, file);
15+
16+
if (!srcMap) {
17+
return callback(null, file);
18+
}
19+
20+
var srcMapLocation = (typeof srcMap === 'string' ? srcMap : undefined);
21+
22+
sourcemap.write(file, srcMapLocation, onWrite);
23+
24+
function onWrite(sourcemapErr, updatedFile, sourcemapFile) {
25+
if (sourcemapErr) {
26+
return callback(sourcemapErr);
27+
}
28+
29+
self.push(updatedFile);
30+
if (sourcemapFile) {
31+
self.push(sourcemapFile);
32+
}
33+
34+
callback();
35+
}
36+
}
37+
38+
return through.obj(saveSourcemap);
39+
}
40+
41+
module.exports = sourcemapStream;

lib/filter-since.js

Lines changed: 0 additions & 18 deletions
This file was deleted.

lib/prepare-write.js

Lines changed: 0 additions & 62 deletions
This file was deleted.

lib/src/index.js

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,56 @@
11
'use strict';
22

3-
var assign = require('object-assign');
3+
var pumpify = require('pumpify');
44
var through2 = require('through2');
55
var gs = require('glob-stream');
66
var duplexify = require('duplexify');
77
var merge = require('merge-stream');
8-
var sourcemaps = require('gulp-sourcemaps');
98
var isValidGlob = require('is-valid-glob');
109
var valueOrFunction = require('value-or-function');
1110
var koalas = require('koalas');
1211

13-
var filterSince = require('../filter-since');
12+
var prepare = require('vinyl-prepare');
13+
var sourcemap = require('./sourcemap');
1414
var readContents = require('./read-contents');
15-
var wrapWithVinylFile = require('./wrap-with-vinyl-file');
15+
var resolveSymlinks = require('./resolve-symlinks');
1616

1717
var boolean = valueOrFunction.boolean;
18-
var date = valueOrFunction.date;
1918

2019
function src(glob, opt) {
2120
if (!opt) {
2221
opt = {};
2322
}
2423

25-
var options = assign({}, opt, {
26-
buffer: koalas(boolean(opt.buffer), true),
27-
read: koalas(boolean(opt.read), true),
28-
since: date(opt.since),
29-
stripBOM: koalas(boolean(opt.stripBOM), true),
30-
sourcemaps: koalas(boolean(opt.sourcemaps), false),
31-
passthrough: koalas(boolean(opt.passthrough), false),
32-
followSymlinks: koalas(boolean(opt.followSymlinks), true),
33-
});
34-
35-
// Don't pass `read` option on to through2
36-
var read = options.read !== false;
37-
options.read = undefined;
38-
39-
var inputPass;
40-
4124
if (!isValidGlob(glob)) {
4225
throw new Error('Invalid glob argument: ' + glob);
4326
}
4427

45-
var globStream = gs.create(glob, options);
28+
var passthroughOpt = koalas(boolean(opt.passthrough), false);
4629

47-
var outputStream = globStream
48-
.pipe(wrapWithVinylFile(options));
30+
// Don't pass `read` option on to through2
31+
opt.readFile = opt.read;
32+
opt.read = undefined;
4933

50-
if (options.since != null) {
51-
outputStream = outputStream
52-
.pipe(filterSince(options.since));
53-
}
34+
var inputStream;
5435

55-
if (read) {
56-
outputStream = outputStream
57-
.pipe(readContents(options));
58-
}
36+
var streams = [
37+
gs.create(glob, opt),
38+
resolveSymlinks(opt),
39+
prepare.src(opt),
40+
readContents(opt),
41+
sourcemap(opt),
42+
];
5943

60-
if (options.passthrough === true) {
61-
inputPass = through2.obj(options);
62-
outputStream = duplexify.obj(inputPass, merge(outputStream, inputPass));
63-
}
64-
if (options.sourcemaps === true) {
65-
outputStream = outputStream
66-
.pipe(sourcemaps.init({ loadMaps: true }));
44+
var outputStream = pumpify.obj(streams);
45+
46+
if (passthroughOpt) {
47+
inputStream = through2.obj(opt);
48+
outputStream = merge(outputStream, inputStream);
49+
outputStream = duplexify.obj(inputStream, outputStream);
6750
}
68-
globStream.on('error', outputStream.emit.bind(outputStream, 'error'));
51+
6952
return outputStream;
7053
}
7154

55+
7256
module.exports = src;

lib/src/read-contents/index.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
'use strict';
22

33
var through2 = require('through2');
4+
var valueOrFunction = require('value-or-function');
5+
var koalas = require('koalas');
6+
47
var readDir = require('./read-dir');
58
var readStream = require('./read-stream');
69
var readBuffer = require('./read-buffer');
710
var readSymbolicLink = require('./read-symbolic-link');
811

12+
var boolean = valueOrFunction.boolean;
13+
914
function readContents(opt) {
1015

1116
function readFile(file, enc, callback) {
17+
18+
// Skip reading contents if read option says so
19+
if (!koalas(boolean(opt.readFile, file), true)) {
20+
return callback(null, file);
21+
}
22+
1223
// Don't fail to read a directory
1324
if (file.isDirectory()) {
1425
return readDir(file, opt, onRead);
@@ -20,7 +31,7 @@ function readContents(opt) {
2031
}
2132

2233
// Read and pass full contents
23-
if (opt.buffer !== false) {
34+
if (koalas(boolean(opt.buffer, file), true)) {
2435
return readBuffer(file, opt, onRead);
2536
}
2637

lib/src/read-contents/read-buffer.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
var fs = require('graceful-fs');
44
var stripBom = require('strip-bom');
55

6+
var valueOrFunction = require('value-or-function');
7+
var koalas = require('koalas');
8+
9+
var boolean = valueOrFunction.boolean;
10+
611
function bufferFile(file, opt, onRead) {
712
fs.readFile(file.path, onReadFile);
813

@@ -11,7 +16,7 @@ function bufferFile(file, opt, onRead) {
1116
return onRead(readErr);
1217
}
1318

14-
if (opt.stripBOM) {
19+
if (koalas(boolean(opt.stripBOM, file), true)) {
1520
file.contents = stripBom(data);
1621
} else {
1722
file.contents = data;

lib/src/read-contents/read-stream.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ var fs = require('graceful-fs');
44
var stripBom = require('strip-bom-stream');
55
var lazystream = require('lazystream');
66

7+
var valueOrFunction = require('value-or-function');
8+
var koalas = require('koalas');
9+
10+
var boolean = valueOrFunction.boolean;
11+
712
function streamFile(file, opt, onRead) {
813
if (typeof opt === 'function') {
914
onRead = opt;
@@ -16,7 +21,7 @@ function streamFile(file, opt, onRead) {
1621
return fs.createReadStream(filePath);
1722
});
1823

19-
if (opt.stripBOM) {
24+
if (koalas(boolean(opt.stripBOM, file), true)) {
2025
file.contents = file.contents.pipe(stripBom());
2126
}
2227

0 commit comments

Comments
 (0)