ipull
Version:
The only file downloader you'll ever need. For node.js and the browser, CLI and library for fast and reliable file downloads.
79 lines (78 loc) • 3.3 kB
TypeScript
import ProgressStatusFile, { DownloadStatus, ProgressStatus } from "./progress-status-file.js";
import { ChunkStatus, DownloadFile, SaveProgressInfo } from "../types.js";
import BaseDownloadEngineFetchStream from "../streams/download-engine-fetch-stream/base-download-engine-fetch-stream.js";
import BaseDownloadEngineWriteStream from "../streams/download-engine-write-stream/base-download-engine-write-stream.js";
import retry from "async-retry";
import { EventEmitter } from "eventemitter3";
import { AvailablePrograms } from "./download-programs/switch-program.js";
import BaseDownloadProgram from "./download-programs/base-download-program.js";
export type DownloadEngineFileOptions = {
chunkSize?: number;
parallelStreams?: number;
retry?: retry.Options;
comment?: string;
fetchStream: BaseDownloadEngineFetchStream;
writeStream: BaseDownloadEngineWriteStream;
onFinishAsync?: () => Promise<void>;
onStartedAsync?: () => Promise<void>;
onCloseAsync?: () => Promise<void>;
onPausedAsync?: () => Promise<void>;
onSaveProgressAsync?: (progress: SaveProgressInfo) => Promise<void>;
programType?: AvailablePrograms;
autoIncreaseParallelStreams?: boolean;
};
export type DownloadEngineFileOptionsWithDefaults = DownloadEngineFileOptions & {
chunkSize: number;
parallelStreams: number;
};
export type DownloadEngineFileEvents = {
start: () => void;
paused: () => void;
resumed: () => void;
progress: (progress: ProgressStatus) => void;
save: (progress: SaveProgressInfo) => void;
finished: () => void;
closed: () => void;
[key: string]: any;
};
export default class DownloadEngineFile extends EventEmitter<DownloadEngineFileEvents> {
readonly file: DownloadFile;
options: DownloadEngineFileOptionsWithDefaults;
protected _progress: SaveProgressInfo;
protected _closed: boolean;
protected _progressStatus: ProgressStatusFile;
protected _activeStreamContext: {
[key: number]: {
streamBytes: number;
retryingAttempts: number;
isRetrying?: boolean;
isStreamNotResponding?: boolean;
};
};
protected _activeProgram?: BaseDownloadProgram;
protected _downloadStatus: DownloadStatus;
private _latestProgressDate;
constructor(file: DownloadFile, options: DownloadEngineFileOptions);
private _setDefaultByOptions;
private _createProgressFlags;
get downloadSize(): number;
get fileName(): string;
get status(): ProgressStatus;
protected get _activePart(): import("../types.js").DownloadFilePart;
private get _downloadedPartsSize();
private get _activeDownloadedChunkSize();
get transferredBytes(): number;
protected get _programType(): AvailablePrograms | undefined;
protected _chunksForPart(part: number, fill?: ChunkStatus): any[];
private _initEventReloadStatus;
private _initProgress;
download(): Promise<void>;
protected _downloadSlice(startChunk: number, endChunk: number): Promise<void>;
protected _saveProgress(): Promise<void> | undefined;
protected _sendProgressDownloadPart(): void;
pause(): Promise<void>;
resume(): void;
close(): Promise<void>;
finished(comment?: string): void;
[Symbol.dispose](): Promise<void>;
}