UNPKG

@itwin/imodels-client-authoring

Version:

iModels API client wrapper for applications that author iModels.

48 lines 2.06 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import * as fs from "fs"; import { IModelsErrorCode, IModelsErrorImpl, } from "@itwin/imodels-client-management"; /** Downloads file to path from provided storage. */ export async function downloadFile(params) { const targetFileStream = fs.createWriteStream(params.localPath); try { const downloadStream = await params.storage.download({ ...params, transferType: "stream", }); downloadStream.pipe(targetFileStream); if (params.totalDownloadCallback || params.latestDownloadedChunkSizeCallback) { let bytesDownloaded = 0; // eslint-disable-next-line @typescript-eslint/no-explicit-any downloadStream.on("data", (chunk) => { bytesDownloaded += chunk?.length; params.totalDownloadCallback?.(bytesDownloaded); // eslint-disable-next-line @typescript-eslint/no-unsafe-argument params.latestDownloadedChunkSizeCallback?.(chunk?.length); }); } await new Promise((resolve, reject) => { downloadStream.on("error", reject); targetFileStream.on("close", () => resolve()); }); } catch (error) { targetFileStream.end(); throw adaptAbortError(error); } } function adaptAbortError(error) { if (!(error instanceof Error) || error.name !== "AbortError") return error; return new IModelsErrorImpl({ code: IModelsErrorCode.DownloadAborted, message: `Download was aborted. Message: ${error.message}}.`, originalError: error, statusCode: undefined, details: undefined, }); } //# sourceMappingURL=FileDownload.js.map