aboutsummaryrefslogtreecommitdiff
path: root/editors/code
diff options
context:
space:
mode:
Diffstat (limited to 'editors/code')
-rw-r--r--editors/code/src/installation/download_file.ts13
1 files changed, 7 insertions, 6 deletions
diff --git a/editors/code/src/installation/download_file.ts b/editors/code/src/installation/download_file.ts
index b31d2a736..591de0d31 100644
--- a/editors/code/src/installation/download_file.ts
+++ b/editors/code/src/installation/download_file.ts
@@ -7,8 +7,6 @@ import { NestedError } from "ts-nested-error";
7 7
8const pipeline = util.promisify(stream.pipeline); 8const pipeline = util.promisify(stream.pipeline);
9 9
10class DownloadFileError extends NestedError {}
11
12/** 10/**
13 * Downloads file from `url` and stores it at `destFilePath` with `destFilePermissions`. 11 * Downloads file from `url` and stores it at `destFilePath` with `destFilePermissions`.
14 * `onProgress` callback is called on recieveing each chunk of bytes 12 * `onProgress` callback is called on recieveing each chunk of bytes
@@ -21,13 +19,13 @@ export async function downloadFile(
21 destFilePermissions: number, 19 destFilePermissions: number,
22 onProgress: (readBytes: number, totalBytes: number) => void 20 onProgress: (readBytes: number, totalBytes: number) => void
23): Promise<void> { 21): Promise<void> {
24 const res = await fetch(url).catch(DownloadFileError.rethrow("Failed at initial fetch")); 22 const res = await fetch(url).catch(NestedError.rethrow("Failed at initial fetch"));
25 23
26 if (!res.ok) { 24 if (!res.ok) {
27 console.log("Error", res.status, "while downloading file from", url); 25 console.log("Error", res.status, "while downloading file from", url);
28 console.dir({ body: await res.text(), headers: res.headers }, { depth: 3 }); 26 console.dir({ body: await res.text(), headers: res.headers }, { depth: 3 });
29 27
30 throw new DownloadFileError(`Got response ${res.status}`); 28 throw new NestedError(`Got response ${res.status}`);
31 } 29 }
32 30
33 const totalBytes = Number(res.headers.get('content-length')); 31 const totalBytes = Number(res.headers.get('content-length'));
@@ -43,9 +41,12 @@ export async function downloadFile(
43 41
44 const destFileStream = fs.createWriteStream(destFilePath, { mode: destFilePermissions }); 42 const destFileStream = fs.createWriteStream(destFilePath, { mode: destFilePermissions });
45 43
46 await pipeline(res.body, destFileStream).catch(DownloadFileError.rethrow("Piping file error")); 44 await pipeline(res.body, destFileStream).catch(NestedError.rethrow("Piping file error"));
47 return new Promise<void>(resolve => { 45 return new Promise<void>(resolve => {
48 destFileStream.on("close", resolve); // details on workaround: https://github.com/rust-analyzer/rust-analyzer/pull/3092#discussion_r378191131 46 destFileStream.on("close", resolve);
49 destFileStream.destroy(); 47 destFileStream.destroy();
48
49 // Details on workaround: https://github.com/rust-analyzer/rust-analyzer/pull/3092#discussion_r378191131
50 // Issue at nodejs repo: https://github.com/nodejs/node/issues/31776
50 }); 51 });
51} 52}