| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 'use strict'const u = require('universalify').fromCallbackconst path = require('path')const fs = require('graceful-fs')const _mkdirs = require('../mkdirs')const mkdirs = _mkdirs.mkdirsconst mkdirsSync = _mkdirs.mkdirsSyncconst _symlinkPaths = require('./symlink-paths')const symlinkPaths = _symlinkPaths.symlinkPathsconst symlinkPathsSync = _symlinkPaths.symlinkPathsSyncconst _symlinkType = require('./symlink-type')const symlinkType = _symlinkType.symlinkTypeconst symlinkTypeSync = _symlinkType.symlinkTypeSyncconst pathExists = require('../path-exists').pathExistsfunction createSymlink (srcpath, dstpath, type, callback) {  callback = (typeof type === 'function') ? type : callback  type = (typeof type === 'function') ? false : type  pathExists(dstpath, (err, destinationExists) => {    if (err) return callback(err)    if (destinationExists) return callback(null)    symlinkPaths(srcpath, dstpath, (err, relative) => {      if (err) return callback(err)      srcpath = relative.toDst      symlinkType(relative.toCwd, type, (err, type) => {        if (err) return callback(err)        const dir = path.dirname(dstpath)        pathExists(dir, (err, dirExists) => {          if (err) return callback(err)          if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)          mkdirs(dir, err => {            if (err) return callback(err)            fs.symlink(srcpath, dstpath, type, callback)          })        })      })    })  })}function createSymlinkSync (srcpath, dstpath, type) {  const destinationExists = fs.existsSync(dstpath)  if (destinationExists) return undefined  const relative = symlinkPathsSync(srcpath, dstpath)  srcpath = relative.toDst  type = symlinkTypeSync(relative.toCwd, type)  const dir = path.dirname(dstpath)  const exists = fs.existsSync(dir)  if (exists) return fs.symlinkSync(srcpath, dstpath, type)  mkdirsSync(dir)  return fs.symlinkSync(srcpath, dstpath, type)}module.exports = {  createSymlink: u(createSymlink),  createSymlinkSync}
 |