Skip to content

Commit 6c5133f

Browse files
author
Loïc Mangeonjean
committed
fix: properly handle readFileStream errors in multiple delegate scenario
1 parent ae9ae5a commit 6c5133f

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

src/service-override/files.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -583,9 +583,14 @@ class RegisteredFileSystemProvider
583583
stream.end(undefined)
584584
}
585585
} catch (error) {
586-
stream.error(
587-
createFileSystemProviderError(error as Error, FileSystemProviderErrorCode.Unknown)
588-
)
586+
if (error instanceof FileSystemProviderError) {
587+
stream.error(error)
588+
} else {
589+
stream.error(
590+
createFileSystemProviderError(error as Error, FileSystemProviderErrorCode.Unknown)
591+
)
592+
}
593+
589594
stream.end()
590595
}
591596
})()
@@ -867,6 +872,7 @@ class OverlayFileSystemProvider
867872
const stream = delegate.readFileStream(resource, opts, token)
868873
await new Promise<void>((resolve, reject) => {
869874
let dataReceived = false
875+
let errored = false
870876
listenStream(
871877
stream,
872878
{
@@ -875,10 +881,13 @@ class OverlayFileSystemProvider
875881
void writableStream.write(data)
876882
},
877883
onEnd() {
878-
writableStream.end()
879-
resolve()
884+
if (!errored) {
885+
writableStream.end()
886+
resolve()
887+
}
880888
},
881889
onError(err) {
890+
errored = true
882891
if (!dataReceived) {
883892
reject(err)
884893
} else {
@@ -898,6 +907,7 @@ class OverlayFileSystemProvider
898907
}
899908
}, token).catch((err) => {
900909
writableStream.error(err)
910+
writableStream.end()
901911
})
902912

903913
return writableStream

0 commit comments

Comments
 (0)