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.
51 lines
1.4 KiB
51 lines
1.4 KiB
'use strict'; |
|
|
|
var path = require('path'); |
|
|
|
var fs = require('graceful-fs'); |
|
var Vinyl = require('vinyl'); |
|
var through = require('through2'); |
|
|
|
function prepareSymlink(folderResolver, optResolver) { |
|
if (!folderResolver) { |
|
throw new Error('Invalid output folder'); |
|
} |
|
|
|
function normalize(file, enc, cb) { |
|
if (!Vinyl.isVinyl(file)) { |
|
return cb(new Error('Received a non-Vinyl object in `symlink()`')); |
|
} |
|
|
|
// TODO: Remove this after people upgrade vinyl/transition from gulp-util |
|
if (typeof file.isSymbolic !== 'function') { |
|
file = new Vinyl(file); |
|
} |
|
|
|
var cwd = path.resolve(optResolver.resolve('cwd', file)); |
|
|
|
var outFolderPath = folderResolver.resolve('outFolder', file); |
|
if (!outFolderPath) { |
|
return cb(new Error('Invalid output folder')); |
|
} |
|
var basePath = path.resolve(cwd, outFolderPath); |
|
var writePath = path.resolve(basePath, file.relative); |
|
|
|
// Wire up new properties |
|
// Note: keep the target stats for now, we may need them in link-file |
|
file.stat = (file.stat || new fs.Stats()); |
|
file.cwd = cwd; |
|
file.base = basePath; |
|
// This is the path we are linking *TO* |
|
file.symlink = file.path; |
|
file.path = writePath; |
|
// We have to set contents to null for a link |
|
// Otherwise `isSymbolic()` returns false |
|
file.contents = null; |
|
|
|
cb(null, file); |
|
} |
|
|
|
return through.obj(normalize); |
|
} |
|
|
|
module.exports = prepareSymlink;
|
|
|