site_opytex/theme/node_modules/vinyl-fs/lib/dest/writeContents/index.js

60 lines
1.2 KiB
JavaScript

'use strict';
var fs = require('fs');
var writeDir = require('./writeDir');
var writeStream = require('./writeStream');
var writeBuffer = require('./writeBuffer');
function writeContents(writePath, file, cb) {
var written = function(err) {
var done = function(err) {
cb(err, file);
};
if (err) {
return done(err);
}
if (!file.stat || typeof file.stat.mode !== 'number') {
return done();
}
fs.stat(writePath, function(err, st) {
if (err) {
return done(err);
}
// octal 7777 = decimal 4095
var currentMode = (st.mode & 4095);
if (currentMode === file.stat.mode) {
return done();
}
fs.chmod(writePath, file.stat.mode, done);
});
};
// if directory then mkdirp it
if (file.isDirectory()) {
writeDir(writePath, file, written);
return;
}
// stream it to disk yo
if (file.isStream()) {
writeStream(writePath, file, written);
return;
}
// write it like normal
if (file.isBuffer()) {
writeBuffer(writePath, file, written);
return;
}
// if no contents then do nothing
if (file.isNull()) {
cb(null, file);
return;
}
}
module.exports = writeContents;