@@ -336,8 +336,10 @@ async function onLink(destStat, src, dest, opts) {
336336 if ( ! opts . verbatimSymlinks && ! isAbsolute ( resolvedSrc ) ) {
337337 resolvedSrc = resolve ( dirname ( src ) , resolvedSrc ) ;
338338 }
339+ const srcIsDir = fsBinding . internalModuleStat ( src ) === 1 ;
340+ const symlinkType = srcIsDir ? 'dir' : 'file' ;
339341 if ( ! destStat ) {
340- return symlink ( resolvedSrc , dest ) ;
342+ return symlink ( resolvedSrc , dest , symlinkType ) ;
341343 }
342344 let resolvedDest ;
343345 try {
@@ -347,16 +349,14 @@ async function onLink(destStat, src, dest, opts) {
347349 // Windows may throw UNKNOWN error. If dest already exists,
348350 // fs throws error anyway, so no need to guard against it here.
349351 if ( err . code === 'EINVAL' || err . code === 'UNKNOWN' ) {
350- return symlink ( resolvedSrc , dest ) ;
352+ return symlink ( resolvedSrc , dest , symlinkType ) ;
351353 }
352354 throw err ;
353355 }
354356 if ( ! isAbsolute ( resolvedDest ) ) {
355357 resolvedDest = resolve ( dirname ( dest ) , resolvedDest ) ;
356358 }
357359
358- const srcIsDir = fsBinding . internalModuleStat ( src ) === 1 ;
359-
360360 if ( srcIsDir && isSrcSubdir ( resolvedSrc , resolvedDest ) ) {
361361 throw new ERR_FS_CP_EINVAL ( {
362362 message : `cannot copy ${ resolvedSrc } to a subdirectory of self ` +
@@ -380,12 +380,12 @@ async function onLink(destStat, src, dest, opts) {
380380 code : 'EINVAL' ,
381381 } ) ;
382382 }
383- return copyLink ( resolvedSrc , dest ) ;
383+ return copyLink ( resolvedSrc , dest , symlinkType ) ;
384384}
385385
386- async function copyLink ( resolvedSrc , dest ) {
386+ async function copyLink ( resolvedSrc , dest , symlinkType ) {
387387 await unlink ( dest ) ;
388- return symlink ( resolvedSrc , dest ) ;
388+ return symlink ( resolvedSrc , dest , symlinkType ) ;
389389}
390390
391391module . exports = {
0 commit comments