@@ -64,6 +64,7 @@ type ExportsManagerEvents = {
6464
6565export class ExportsManager extends EventEmitter < ExportsManagerEvents > {
6666 private wasInitialized : boolean = false ;
67+ private isShuttingDown : boolean = false ;
6768 private storedExports : Record < StoredExport [ "exportName" ] , StoredExport > = { } ;
6869 private exportsCleanupInProgress : boolean = false ;
6970 private exportsCleanupInterval ?: NodeJS . Timeout ;
@@ -77,6 +78,7 @@ export class ExportsManager extends EventEmitter<ExportsManagerEvents> {
7778 }
7879
7980 public get availableExports ( ) : AvailableExport [ ] {
81+ this . assertIsNotShuttingDown ( ) ;
8082 return Object . values ( this . storedExports )
8183 . filter ( ( storedExport ) => {
8284 return (
@@ -103,6 +105,11 @@ export class ExportsManager extends EventEmitter<ExportsManagerEvents> {
103105 }
104106
105107 public async close ( ) : Promise < void > {
108+ if ( this . isShuttingDown ) {
109+ return ;
110+ }
111+
112+ this . isShuttingDown = true ;
106113 try {
107114 clearInterval ( this . exportsCleanupInterval ) ;
108115 await fs . rm ( this . exportsDirectoryPath , { force : true , recursive : true } ) ;
@@ -117,6 +124,7 @@ export class ExportsManager extends EventEmitter<ExportsManagerEvents> {
117124
118125 public async readExport ( exportName : string ) : Promise < string > {
119126 try {
127+ this . assertIsNotShuttingDown ( ) ;
120128 exportName = decodeURIComponent ( exportName ) ;
121129 const exportHandle = this . storedExports [ exportName ] ;
122130 if ( ! exportHandle ) {
@@ -157,6 +165,7 @@ export class ExportsManager extends EventEmitter<ExportsManagerEvents> {
157165 jsonExportFormat : JSONExportFormat ;
158166 } ) : AvailableExport {
159167 try {
168+ this . assertIsNotShuttingDown ( ) ;
160169 const exportNameWithExtension = validateExportName ( ensureExtension ( exportName , "json" ) ) ;
161170 if ( this . storedExports [ exportNameWithExtension ] ) {
162171 throw new Error ( "Export with same name is either already available or being generated." ) ;
@@ -270,7 +279,7 @@ export class ExportsManager extends EventEmitter<ExportsManagerEvents> {
270279 }
271280
272281 private async cleanupExpiredExports ( ) : Promise < void > {
273- if ( this . exportsCleanupInProgress ) {
282+ if ( this . exportsCleanupInProgress || this . isShuttingDown ) {
274283 return ;
275284 }
276285
@@ -318,6 +327,12 @@ export class ExportsManager extends EventEmitter<ExportsManagerEvents> {
318327 }
319328 }
320329
330+ private assertIsNotShuttingDown ( ) : void {
331+ if ( this . isShuttingDown ) {
332+ throw new Error ( "ExportsManager is shutting down." ) ;
333+ }
334+ }
335+
321336 static init ( sessionId : string , config : ExportsManagerConfig , logger : LoggerBase ) : ExportsManager {
322337 const exportsDirectoryPath = path . join ( config . exportsPath , sessionId ) ;
323338 const exportsManager = new ExportsManager ( exportsDirectoryPath , config , logger ) ;
0 commit comments