mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Option to install an extension from filesystem/url #1227 -- part 1 (UI) Signed-off-by: Roman <ixrock@gmail.com> * DropFileInput: common component to handle droped files (replaced also in add-cluster-page) Signed-off-by: Roman <ixrock@gmail.com> * fix: install via url-string on input.submit Signed-off-by: Roman <ixrock@gmail.com> * ui tweaks & minor fixes Signed-off-by: Roman <ixrock@gmail.com> * more ui/ux tweaks & fixes Signed-off-by: Roman <ixrock@gmail.com> * layout fixes Signed-off-by: Roman <ixrock@gmail.com> * component renaming: `copy-to-click` => `copy-to-clipboard` => `clipboard` Signed-off-by: Roman <ixrock@gmail.com> * reworks -- part 1 Signed-off-by: Roman <ixrock@gmail.com> * fix downloading file, added common/utils/downloadFile Signed-off-by: Roman <ixrock@gmail.com> * confirm before install, unpack tar first steps Signed-off-by: Roman <ixrock@gmail.com> * installation flow, extracting .tgz Signed-off-by: Roman <ixrock@gmail.com> * clean up, fix lint issues Signed-off-by: Roman <ixrock@gmail.com> * update .azure-pipelines.yml Signed-off-by: Roman <ixrock@gmail.com> * fixes & refactoring Signed-off-by: Roman <ixrock@gmail.com> * fix lint harder :/ Signed-off-by: Roman <ixrock@gmail.com> * fix validation Signed-off-by: Roman <ixrock@gmail.com> * fix validation harder Signed-off-by: Roman <ixrock@gmail.com> * responding to comments, fixed package validation Signed-off-by: Roman <ixrock@gmail.com> * common/utils/tar.ts: reject with Error-type Signed-off-by: Roman <ixrock@gmail.com> * fix: unit-tests Signed-off-by: Roman <ixrock@gmail.com>
36 lines
760 B
TypeScript
36 lines
760 B
TypeScript
import request from "request";
|
|
|
|
export interface DownloadFileOptions {
|
|
url: string;
|
|
gzip?: boolean;
|
|
}
|
|
|
|
export interface DownloadFileTicket {
|
|
url: string;
|
|
promise: Promise<Buffer>;
|
|
cancel(): void;
|
|
}
|
|
|
|
export function downloadFile({ url, gzip = true }: DownloadFileOptions): DownloadFileTicket {
|
|
const fileChunks: Buffer[] = [];
|
|
const req = request(url, { gzip });
|
|
const promise: Promise<Buffer> = new Promise((resolve, reject) => {
|
|
req.on("data", (chunk: Buffer) => {
|
|
fileChunks.push(chunk);
|
|
});
|
|
req.once("error", err => {
|
|
reject({ url, err });
|
|
});
|
|
req.once("complete", () => {
|
|
resolve(Buffer.concat(fileChunks));
|
|
});
|
|
});
|
|
return {
|
|
url,
|
|
promise,
|
|
cancel() {
|
|
req.abort();
|
|
}
|
|
};
|
|
}
|