wallet-core/node_modules/vinyl-fs/lib/src/wrapWithVinylFile.js
2016-10-10 03:43:44 +02:00

52 lines
1.4 KiB
JavaScript

'use strict';
var through2 = require('through2');
var fs = require('graceful-fs');
var File = require('vinyl');
function wrapWithVinylFile(options) {
// A stat property is exposed on file objects as a (wanted) side effect
function resolveFile(globFile, enc, cb) {
fs.lstat(globFile.path, function(err, stat) {
if (err) {
return cb(err);
}
globFile.stat = stat;
if (!stat.isSymbolicLink() || !options.followSymlinks) {
var vinylFile = new File(globFile);
if (globFile.originalSymlinkPath) {
// If we reach here, it means there is at least one
// symlink on the path and we need to rewrite the path
// to its original value.
// Updated file stats will tell getContents() to actually read it.
vinylFile.path = globFile.originalSymlinkPath;
}
return cb(null, vinylFile);
}
fs.realpath(globFile.path, function(err, filePath) {
if (err) {
return cb(err);
}
if (!globFile.originalSymlinkPath) {
// Store the original symlink path before the recursive call
// to later rewrite it back.
globFile.originalSymlinkPath = globFile.path;
}
globFile.path = filePath;
// Recurse to get real file stat
resolveFile(globFile, enc, cb);
});
});
}
return through2.obj(options, resolveFile);
}
module.exports = wrapWithVinylFile;