@@ -783,14 +783,13 @@ export async function mkdir(
783
783
const mode = normalizeMode ( options ?. mode , 0o777 ) ;
784
784
785
785
path = await realpath . call ( this , path ) ;
786
- const { fs, path : resolved , root } = resolveMount ( path , this ) ;
787
- const errorPaths : Record < string , string > = { [ resolved ] : path } ;
786
+ const { fs, path : resolved } = resolveMount ( path , this ) ;
788
787
789
- const __create = async ( path : string , parent : InodeLike ) => {
788
+ const __create = async ( path : string , resolved : string , parent : InodeLike ) => {
790
789
if ( checkAccess && ! hasAccess ( this , parent , constants . W_OK ) ) throw UV ( 'EACCES' , 'mkdir' , dirname ( path ) ) ;
791
790
792
791
const inode = await fs
793
- . mkdir ( path , {
792
+ . mkdir ( resolved , {
794
793
mode,
795
794
uid : parent . mode & constants . S_ISUID ? parent . uid : uid ,
796
795
gid : parent . mode & constants . S_ISGID ? parent . gid : gid ,
@@ -801,29 +800,28 @@ export async function mkdir(
801
800
} ;
802
801
803
802
if ( ! options ?. recursive ) {
804
- await __create ( resolved , await fs . stat ( dirname ( resolved ) ) ) ;
803
+ await __create ( path , resolved , await fs . stat ( dirname ( resolved ) ) ) ;
805
804
return ;
806
805
}
807
806
808
- const dirs : string [ ] = [ ] ;
807
+ const dirs : [ path : string , resolved : string ] [ ] = [ ] ;
809
808
let origDir = path ;
810
809
for (
811
810
let dir = resolved ;
812
811
! ( await fs . exists ( dir ) . catch ( rethrow ( { syscall : 'exists' , path : origDir } ) ) ) ;
813
812
dir = dirname ( dir ) , origDir = dirname ( origDir )
814
813
) {
815
- dirs . unshift ( dir ) ;
816
- errorPaths [ dir ] = origDir ;
814
+ dirs . unshift ( [ origDir , dir ] ) ;
817
815
}
818
816
819
817
if ( ! dirs . length ) return ;
820
818
821
- const stats : InodeLike [ ] = [ await fs . stat ( dirname ( dirs [ 0 ] ) ) . catch ( rethrow ( { syscall : 'stat' , path : dirname ( origDir ) } ) ) ] ;
819
+ const stats : InodeLike [ ] = [ await fs . stat ( dirname ( dirs [ 0 ] [ 1 ] ) ) . catch ( rethrow ( { syscall : 'stat' , path : dirname ( dirs [ 0 ] [ 0 ] ) } ) ) ] ;
822
820
823
- for ( const [ i , dir ] of dirs . entries ( ) ) {
824
- stats . push ( await __create ( dir , stats [ i ] ) ) ;
821
+ for ( const [ i , [ path , resolved ] ] of dirs . entries ( ) ) {
822
+ stats . push ( await __create ( path , resolved , stats [ i ] ) ) ;
825
823
}
826
- return root . length == 1 ? dirs [ 0 ] : dirs [ 0 ] ?. slice ( root . length ) ;
824
+ return dirs [ 0 ] [ 0 ] ;
827
825
}
828
826
mkdir satisfies typeof promises . mkdir ;
829
827
0 commit comments