Skip to content

Commit 59ad2a8

Browse files
committed
integrate changes from jcppman #71
1 parent 3cc6986 commit 59ad2a8

File tree

2 files changed

+96
-20
lines changed

2 files changed

+96
-20
lines changed

index.js

+17-18
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,7 @@ module.exports = function f (b, opts) {
2828
var needRecords = !files.length;
2929

3030
var outopt = defined(opts.outputs, opts.output, opts.o);
31-
if (typeof outopt === 'function') {
32-
var outputs = outopt
33-
} else {
34-
if (outopt && !isarray(outopt)) outopt = [outopt];
35-
var outputs = defined(outopt, []).map(function (o) {
36-
if (isStream(o)) return o;
37-
else return fs.createWriteStream(o);
38-
});
39-
if (!isarray(outputs) && isStream(outputs)) outputs = [ outputs ];
40-
else if (!isarray(outputs)) outputs = [];
41-
}
42-
31+
4332
function moreOutputs (file) {
4433
if (isarray(outopt)) return [];
4534
if (!outopt) return [];
@@ -67,22 +56,32 @@ module.exports = function f (b, opts) {
6756
}
6857
next(null, row);
6958
}, function(next) {
70-
var outputResult;
59+
if (outopt && !isarray(outopt) && ! typeof outputs === 'function') outopt = [outopt];
60+
var outputs = defined(outopt, []);
7161

7262
if (typeof outputs === 'function') {
73-
outputResult = outputs();
74-
} else outputResult = outputs;
63+
outputs = outputs();
64+
} else if (!isarray(outputs) && isStream(outputs)) {
65+
outputs = [ outputs ];
66+
} else if (!isarray(outputs)) {
67+
outputs = [];
68+
} else {
69+
outputs = outputs.map(function (o) {
70+
if (isStream(o)) return o;
71+
else return fs.createWriteStream(o);
72+
});
73+
}
7574

7675
var pipelines = files.reduce(function (acc, x, ix) {
7776
var pipeline = splicer.obj([
7877
'pack', [ pack(packOpts) ],
7978
'wrap', []
8079
]);
8180

82-
if (ix >= outputResult.length) {
83-
outputResult.push.apply(outputResult, moreOutputs(x));
81+
if (ix >= outputs.length) {
82+
outputs.push.apply(outputs, moreOutputs(x));
8483
}
85-
if (outputResult[ix]) pipeline.pipe(outputResult[ix]);
84+
if (outputs[ix]) pipeline.pipe(outputs[ix]);
8685

8786
acc[path.resolve(cwd, x)] = pipeline;
8887
return acc;

test/outputs.js

+79-2
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,17 @@ var mkdirp = require('mkdirp');
77
var browserify = require('browserify');
88
var factor = require('../');
99
var concat = require('concat-stream');
10+
var through = require('through2');
1011

1112
var files = [
1213
__dirname + '/deps/x.js',
1314
__dirname + '/deps/y.js'
1415
];
15-
var tmpdir = tmp() + '/factor-bundle-' + Math.random();
16-
mkdirp.sync(tmpdir);
1716

1817
test('file outputs', function (t) {
18+
var tmpdir = tmp() + '/factor-bundle-' + Math.random();
19+
mkdirp.sync(tmpdir);
20+
1921
t.plan(2);
2022
var b = browserify(files);
2123
b.plugin(factor, {
@@ -43,6 +45,8 @@ test('file outputs', function (t) {
4345
});
4446

4547
test('stream outputs', function (t) {
48+
var tmpdir = tmp() + '/factor-bundle-' + Math.random();
49+
mkdirp.sync(tmpdir);
4650
t.plan(2);
4751
var sources = {}, pending = 3;
4852
function write (key) {
@@ -68,3 +72,76 @@ test('stream outputs', function (t) {
6872
} } });
6973
}
7074
});
75+
76+
77+
test('bundle twice', function (t) {
78+
var tmpdir = tmp() + '/factor-bundle-' + Math.random();
79+
mkdirp.sync(tmpdir);
80+
81+
t.plan(4);
82+
var b = browserify(files);
83+
var outputs = [
84+
path.join(tmpdir, 'x.js'),
85+
path.join(tmpdir, 'y.js')
86+
];
87+
b.on('reset', function(){
88+
b.pipeline.get('deps').push(through.obj(function(data, enc, next){
89+
if (data.file.indexOf('x.js') !== -1) {
90+
data.source = data.source.replace('z(5)', 'z(6)');
91+
}
92+
this.push(data);
93+
next();
94+
}));
95+
});
96+
b.plugin(factor, {
97+
outputs: outputs
98+
});
99+
validate(55500, 333, function(){
100+
validate(66600, 333);
101+
});
102+
function validate (xVal, yVal, cb) {
103+
var w = fs.createWriteStream(path.join(tmpdir, 'common.js'));
104+
b.bundle().pipe(w);
105+
w.on('finish', function(){
106+
var common = fs.readFileSync(tmpdir + '/common.js', 'utf8');
107+
var x = fs.readFileSync(tmpdir + '/x.js', 'utf8');
108+
var y = fs.readFileSync(tmpdir + '/y.js', 'utf8');
109+
110+
vm.runInNewContext(common + x, { console: { log: function (msg) {
111+
t.equal(msg, xVal);
112+
} } });
113+
114+
vm.runInNewContext(common + y, { console: { log: function (msg) {
115+
t.equal(msg, yVal);
116+
} } });
117+
if (cb) cb();
118+
});
119+
}
120+
});
121+
122+
test('outpipe outputs', function (t) {
123+
var tmpdir = tmp() + '/factor-bundle-' + Math.random();
124+
mkdirp.sync(tmpdir);
125+
126+
t.plan(2);
127+
var b = browserify(files);
128+
b.plugin(factor, {
129+
output: ' cat > ' + tmpdir + '/`basename $FILE`'
130+
});
131+
var w = fs.createWriteStream(path.join(tmpdir, 'common.js'));
132+
b.bundle().pipe(w);
133+
134+
w.on('finish', function () {
135+
var common = fs.readFileSync(tmpdir + '/common.js', 'utf8');
136+
var x = fs.readFileSync(tmpdir + '/x.js', 'utf8');
137+
var y = fs.readFileSync(tmpdir + '/y.js', 'utf8');
138+
139+
vm.runInNewContext(common + x, { console: { log: function (msg) {
140+
t.equal(msg, 55500);
141+
} } });
142+
143+
vm.runInNewContext(common + y, { console: { log: function (msg) {
144+
t.equal(msg, 333);
145+
} } });
146+
});
147+
});

0 commit comments

Comments
 (0)