module.exports = link link.ifExists = linkIfExists var fs = require("graceful-fs") , chain = require("slide").chain , mkdir = require("mkdirp") , rm = require("./gently-rm.js") , path = require("path") , npm = require("../npm.js") function linkIfExists (from, to, gently, cb) { fs.stat(from, function (er) { if (er) return cb() link(from, to, gently, cb) }) } function link (from, to, gently, abs, cb) { if (typeof cb !== "function") cb = abs, abs = false if (typeof cb !== "function") cb = gently, gently = null if (npm.config.get("force")) gently = false to = path.resolve(to) var target = from = path.resolve(from) if (!abs && process.platform !== "win32") { // junctions on windows must be absolute target = path.relative(path.dirname(to), from) // if there is no folder in common, then it will be much // longer, and using a relative link is dumb. if (target.length >= from.length) target = from } chain ( [ [fs, "stat", from] , [rm, to, gently] , [mkdir, path.dirname(to)] , [fs, "symlink", target, to, "junction"] ] , cb) }