1
+ import { FanOut } from 'thingies/lib/fanout' ;
1
2
import process from '../process' ;
2
3
import { Buffer , bufferAllocUnsafe , bufferFrom } from '../internal/buffer' ;
3
4
import { constants , S } from '../constants' ;
4
- import { EventEmitter } from 'events' ;
5
+
6
+ export type NodeEventModify = [
7
+ type : 'modify' ,
8
+ ] ;
9
+
10
+ export type NodeEventDelete = [
11
+ type : 'delete' ,
12
+ ] ;
13
+
14
+ export type NodeEvent = NodeEventModify | NodeEventDelete ;
5
15
6
16
const { S_IFMT , S_IFDIR , S_IFREG , S_IFLNK , S_IFCHR } = constants ;
7
17
const getuid = ( ) : number => process . getuid ?.( ) ?? 0 ;
@@ -10,7 +20,9 @@ const getgid = (): number => process.getgid?.() ?? 0;
10
20
/**
11
21
* Node in a file system (like i-node, v-node).
12
22
*/
13
- export class Node extends EventEmitter {
23
+ export class Node {
24
+ public readonly changes = new FanOut < NodeEvent > ( ) ;
25
+
14
26
// i-node number.
15
27
ino : number ;
16
28
@@ -35,7 +47,6 @@ export class Node extends EventEmitter {
35
47
symlink : string ;
36
48
37
49
constructor ( ino : number , mode : number = 0o666 ) {
38
- super ( ) ;
39
50
this . mode = mode ;
40
51
this . ino = ino ;
41
52
}
@@ -222,7 +233,7 @@ export class Node extends EventEmitter {
222
233
223
234
touch ( ) {
224
235
this . mtime = new Date ( ) ;
225
- this . emit ( 'change' , this ) ;
236
+ this . changes . emit ( [ 'modify' ] ) ;
226
237
}
227
238
228
239
canRead ( uid : number = getuid ( ) , gid : number = getgid ( ) ) : boolean {
@@ -286,7 +297,7 @@ export class Node extends EventEmitter {
286
297
}
287
298
288
299
del ( ) {
289
- this . emit ( 'delete' , this ) ;
300
+ this . changes . emit ( [ 'delete' ] ) ;
290
301
}
291
302
292
303
toJSON ( ) {
0 commit comments