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 @@ -6773,8 +6773,8 @@ changes:
6773
6773
description: No longer experimental.
6774
6774
-->
6775
6775
6776
- Calls ` dir .close ()` and returns a promise that fulfills when the
6777
- dir is closed .
6776
+ Calls ` dir .close ()` if the directory handle is open, and returns a promise that
6777
+ fulfills when disposal is complete .
6778
6778
6779
6779
#### ` dir[Symbol .dispose ]()`
6780
6780
@@ -6786,7 +6786,8 @@ changes:
6786
6786
description: No longer experimental.
6787
6787
-->
6788
6788
6789
- Calls ` dir .closeSync ()` and returns ` undefined ` .
6789
+ Calls ` dir .closeSync ()` if the directory handle is open, and returns
6790
+ ` undefined ` .
6790
6791
6791
6792
### Class: ` fs .Dirent `
6792
6793
Original file line number Diff line number Diff line change @@ -24,7 +24,6 @@ const {
24
24
25
25
const { FSReqCallback } = binding ;
26
26
const {
27
- assignFunctionName,
28
27
promisify,
29
28
} = require ( 'internal/util' ) ;
30
29
const {
@@ -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