first commit
This commit is contained in:
62
node_modules/vinyl-fs/lib/dest/write-contents/write-stream.js
generated
vendored
Normal file
62
node_modules/vinyl-fs/lib/dest/write-contents/write-stream.js
generated
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
'use strict';
|
||||
|
||||
var fo = require('../../file-operations');
|
||||
var readStream = require('../../src/read-contents/read-stream');
|
||||
|
||||
function writeStream(file, optResolver, onWritten) {
|
||||
var flags = fo.getFlags({
|
||||
overwrite: optResolver.resolve('overwrite', file),
|
||||
append: optResolver.resolve('append', file),
|
||||
});
|
||||
var opt = {
|
||||
mode: file.stat.mode,
|
||||
// TODO: need to test this
|
||||
flags: flags,
|
||||
};
|
||||
|
||||
// TODO: is this the best API?
|
||||
var outStream = fo.createWriteStream(file.path, opt, onFlush);
|
||||
|
||||
file.contents.once('error', onComplete);
|
||||
outStream.once('error', onComplete);
|
||||
outStream.once('finish', onComplete);
|
||||
|
||||
// TODO: should this use a clone?
|
||||
file.contents.pipe(outStream);
|
||||
|
||||
function onComplete(streamErr) {
|
||||
// Cleanup event handlers before closing
|
||||
file.contents.removeListener('error', onComplete);
|
||||
outStream.removeListener('error', onComplete);
|
||||
outStream.removeListener('finish', onComplete);
|
||||
|
||||
// Need to guarantee the fd is closed before forwarding the error
|
||||
outStream.once('close', onClose);
|
||||
outStream.end();
|
||||
|
||||
function onClose(closeErr) {
|
||||
onWritten(streamErr || closeErr);
|
||||
}
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
function onFlush(fd, callback) {
|
||||
// TODO: removing this before readStream because it replaces the stream
|
||||
file.contents.removeListener('error', onComplete);
|
||||
|
||||
// TODO: this is doing sync stuff & the callback seems unnecessary
|
||||
// TODO: Replace the contents stream or use a clone?
|
||||
readStream(file, complete);
|
||||
|
||||
function complete() {
|
||||
if (typeof fd !== 'number') {
|
||||
return callback();
|
||||
}
|
||||
|
||||
fo.updateMetadata(fd, file, callback);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = writeStream;
|
Reference in New Issue
Block a user