You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							62 lines
						
					
					
						
							2.0 KiB
						
					
					
				
								var path = require('path')
							 | 
						|
								var fs = require('graceful-fs')
							 | 
						|
								var _mkdirs = require('../mkdirs')
							 | 
						|
								var mkdirs = _mkdirs.mkdirs
							 | 
						|
								var mkdirsSync = _mkdirs.mkdirsSync
							 | 
						|
								
							 | 
						|
								var _symlinkPaths = require('./symlink-paths')
							 | 
						|
								var symlinkPaths = _symlinkPaths.symlinkPaths
							 | 
						|
								var symlinkPathsSync = _symlinkPaths.symlinkPathsSync
							 | 
						|
								
							 | 
						|
								var _symlinkType = require('./symlink-type')
							 | 
						|
								var symlinkType = _symlinkType.symlinkType
							 | 
						|
								var symlinkTypeSync = _symlinkType.symlinkTypeSync
							 | 
						|
								
							 | 
						|
								function createSymlink (srcpath, dstpath, type, callback) {
							 | 
						|
								  callback = (typeof type === 'function') ? type : callback
							 | 
						|
								  type = (typeof type === 'function') ? false : type
							 | 
						|
								
							 | 
						|
								  fs.exists(dstpath, function (destinationExists) {
							 | 
						|
								    if (destinationExists) return callback(null)
							 | 
						|
								    symlinkPaths(srcpath, dstpath, function (err, relative) {
							 | 
						|
								      if (err) return callback(err)
							 | 
						|
								      srcpath = relative.toDst
							 | 
						|
								      symlinkType(relative.toCwd, type, function (err, type) {
							 | 
						|
								        if (err) return callback(err)
							 | 
						|
								        var dir = path.dirname(dstpath)
							 | 
						|
								        fs.exists(dir, function (dirExists) {
							 | 
						|
								          if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
							 | 
						|
								          mkdirs(dir, function (err) {
							 | 
						|
								            if (err) return callback(err)
							 | 
						|
								            fs.symlink(srcpath, dstpath, type, callback)
							 | 
						|
								          })
							 | 
						|
								        })
							 | 
						|
								      })
							 | 
						|
								    })
							 | 
						|
								  })
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function createSymlinkSync (srcpath, dstpath, type, callback) {
							 | 
						|
								  callback = (typeof type === 'function') ? type : callback
							 | 
						|
								  type = (typeof type === 'function') ? false : type
							 | 
						|
								
							 | 
						|
								  var destinationExists = fs.existsSync(dstpath)
							 | 
						|
								  if (destinationExists) return undefined
							 | 
						|
								
							 | 
						|
								  var relative = symlinkPathsSync(srcpath, dstpath)
							 | 
						|
								  srcpath = relative.toDst
							 | 
						|
								  type = symlinkTypeSync(relative.toCwd, type)
							 | 
						|
								  var dir = path.dirname(dstpath)
							 | 
						|
								  var exists = fs.existsSync(dir)
							 | 
						|
								  if (exists) return fs.symlinkSync(srcpath, dstpath, type)
							 | 
						|
								  mkdirsSync(dir)
							 | 
						|
								  return fs.symlinkSync(srcpath, dstpath, type)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								module.exports = {
							 | 
						|
								  createSymlink: createSymlink,
							 | 
						|
								  createSymlinkSync: createSymlinkSync,
							 | 
						|
								  // alias
							 | 
						|
								  ensureSymlink: createSymlink,
							 | 
						|
								  ensureSymlinkSync: createSymlinkSync
							 | 
						|
								}
							 | 
						|
								
							 |