in src/utils/Utils.ts [58:103]
export async function downloadFile(targetUrl: string, readContent?: boolean, customHeaders?: {}): Promise<string> {
const tempFilePath: string = getTempOutputPath(targetUrl);
await fse.ensureFile(tempFilePath);
return await new Promise((resolve: (res: string) => void, reject: (e: Error) => void): void => {
const urlObj: url.Url = url.parse(targetUrl);
const options: object = Object.assign({ headers: Object.assign({}, customHeaders, { "User-Agent": `vscode/${getExtensionVersion()}` }) }, urlObj);
let client: any;
if (urlObj.protocol === "https:") {
client = https;
// tslint:disable-next-line:no-http-string
} else if (urlObj.protocol === "http:") {
client = http;
} else {
reject(new Error("Unsupported protocol."));
return;
}
// tslint:disable-next-line: no-unsafe-any
client.get(options, (res: http.IncomingMessage) => {
let rawData: string;
let ws: fse.WriteStream;
if (readContent) {
rawData = "";
} else {
ws = fse.createWriteStream(tempFilePath);
}
res.on("data", (chunk: string | Buffer) => {
if (readContent) {
rawData += chunk;
} else {
ws.write(chunk);
}
});
res.on("end", () => {
if (readContent) {
resolve(rawData);
} else {
ws.end();
resolve(tempFilePath);
}
});
}).on("error", (err: Error) => {
reject(err);
});
});
}