File tree Expand file tree Collapse file tree 3 files changed +21
-24
lines changed Expand file tree Collapse file tree 3 files changed +21
-24
lines changed Original file line number Diff line number Diff line change @@ -6757,8 +6757,8 @@ added: v22.17.0
6757
6757
6758
6758
> Stability: 1 - Experimental
6759
6759
6760
- Calls ` dir .close ()` and returns a promise that fulfills when the
6761
- dir is closed .
6760
+ Calls ` dir .close ()` if the directory handle is open, and returns a promise that
6761
+ fulfills when disposal is complete .
6762
6762
6763
6763
#### ` dir[Symbol .Dispose ]()`
6764
6764
@@ -6768,7 +6768,8 @@ added: v22.17.0
6768
6768
6769
6769
> Stability: 1 - Experimental
6770
6770
6771
- Calls ` dir .closeSync ()` and returns ` undefined ` .
6771
+ Calls ` dir .closeSync ()` if the directory handle is open, and returns
6772
+ ` undefined ` .
6772
6773
6773
6774
### Class: ` fs .Dirent `
6774
6775
Original file line number Diff line number Diff line change @@ -22,7 +22,6 @@ const {
22
22
23
23
const { FSReqCallback } = binding ;
24
24
const {
25
- assignFunctionName,
26
25
promisify,
27
26
SymbolAsyncDispose,
28
27
SymbolDispose,
@@ -296,31 +295,24 @@ class Dir {
296
295
await this . #closePromisified( ) ;
297
296
}
298
297
}
298
+
299
+ [ SymbolDispose ] ( ) {
300
+ if ( this . #closed) return ;
301
+ this . closeSync ( ) ;
302
+ }
303
+
304
+ async [ SymbolAsyncDispose ] ( ) {
305
+ if ( this . #closed) return ;
306
+ await this . #closePromisified( ) ;
307
+ }
299
308
}
300
309
301
- const nonEnumerableDescriptor = {
302
- enumerable : false ,
303
- writable : true ,
304
- configurable : true ,
305
- } ;
306
310
ObjectDefineProperties ( Dir . prototype , {
307
- [ SymbolDispose ] : {
308
- __proto__ : null ,
309
- ...nonEnumerableDescriptor ,
310
- value : assignFunctionName ( SymbolDispose , function ( ) {
311
- this . closeSync ( ) ;
312
- } ) ,
313
- } ,
314
- [ SymbolAsyncDispose ] : {
315
- __proto__ : null ,
316
- ...nonEnumerableDescriptor ,
317
- value : assignFunctionName ( SymbolAsyncDispose , function ( ) {
318
- this . close ( ) ;
319
- } ) ,
320
- } ,
321
311
[ SymbolAsyncIterator ] : {
322
312
__proto__ : null ,
323
- ...nonEnumerableDescriptor ,
313
+ enumerable : false ,
314
+ writable : true ,
315
+ configurable : true ,
324
316
value : Dir . prototype . entries ,
325
317
} ,
326
318
} ) ;
Original file line number Diff line number Diff line change @@ -11,10 +11,14 @@ async function explicitCall() {
11
11
12
12
const dh = await fs . opendir ( __dirname ) ;
13
13
await dh [ Symbol . asyncDispose ] ( ) ;
14
+ // Repeat invocations should not reject
15
+ await dh [ Symbol . asyncDispose ] ( ) ;
14
16
await assert . rejects ( dh . read ( ) , { code : 'ERR_DIR_CLOSED' } ) ;
15
17
16
18
const dhSync = opendirSync ( __dirname ) ;
17
19
dhSync [ Symbol . dispose ] ( ) ;
20
+ // Repeat invocations should not throw
21
+ dhSync [ Symbol . dispose ] ( ) ;
18
22
assert . throws ( ( ) => dhSync . readSync ( ) , { code : 'ERR_DIR_CLOSED' } ) ;
19
23
}
20
24
You can’t perform that action at this time.
0 commit comments