bifocal/node_modules/vinyl-fs/lib/src/resolve-symlinks.js

45 lines
1017 B
JavaScript

'use strict';
var Transform = require('streamx').Transform;
var fo = require('../file-operations');
function resolveSymlinks(optResolver) {
// A stat property is exposed on file objects as a (wanted) side effect
function resolveFile(file, callback) {
fo.reflectLinkStat(file.path, file, onReflect);
function onReflect(statErr) {
if (statErr) {
return callback(statErr);
}
if (!file.stat.isSymbolicLink()) {
return callback(null, file);
}
var resolveSymlinks = optResolver.resolve('resolveSymlinks', file);
if (!resolveSymlinks) {
return callback(null, file);
}
fo.findSymlinkHardpath(file.path, onSymlinkHardpath);
}
function onSymlinkHardpath(readlinkErr, path) {
if (readlinkErr) {
return callback(readlinkErr);
}
// Get target's stats
fo.reflectStat(path, file, onReflect);
}
}
return new Transform({
transform: resolveFile,
});
}
module.exports = resolveSymlinks;