1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 'use strict';
- var os = require('os');
- var path = require('path');
- var through = require('through2');
- var fo = require('../file-operations');
- var isWindows = (os.platform() === 'win32');
- function linkStream(optResolver) {
- function linkFile(file, enc, callback) {
- var isRelative = optResolver.resolve('relativeSymlinks', file);
- var flags = fo.getFlags({
- overwrite: optResolver.resolve('overwrite', file),
- append: false,
- });
- if (!isWindows) {
-
- return createLinkWithType('file');
- }
- fo.reflectStat(file.symlink, file, onReflectTarget);
- function onReflectTarget(statErr) {
- if (statErr && statErr.code !== 'ENOENT') {
- return callback(statErr);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- var useJunctions = optResolver.resolve('useJunctions', file);
- var dirType = useJunctions ? 'junction' : 'dir';
- var type = !statErr && file.isDirectory() ? dirType : 'file';
- createLinkWithType(type);
- }
- function createLinkWithType(type) {
-
- if (isRelative && type !== 'junction') {
- file.symlink = path.relative(file.base, file.symlink);
- }
- var opts = {
- flags: flags,
- type: type,
- };
- fo.symlink(file.symlink, file.path, opts, onSymlink);
- }
- function onSymlink(symlinkErr) {
- if (symlinkErr) {
- return callback(symlinkErr);
- }
- fo.reflectLinkStat(file.path, file, onReflectLink);
- }
- function onReflectLink(reflectErr) {
- if (reflectErr) {
- return callback(reflectErr);
- }
- callback(null, file);
- }
- }
- return through.obj(linkFile);
- }
- module.exports = linkStream;
|