ngx-uploadx
Version:
Angular Resumable Upload Module
98 lines (97 loc) • 3.29 kB
TypeScript
import { Canceler } from './canceler';
import { RetryConfig } from './retry-handler';
export type ResponseBody = any;
export type RequestHeaders = Record<string, boolean | number | string>;
export type Metadata = Record<string, unknown>;
export interface RequestConfig {
body?: BodyInit | null;
canceler: Canceler;
signal?: AbortSignal;
headers: RequestHeaders;
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
onUploadProgress?: (evt: ProgressEvent) => void;
responseType?: 'arraybuffer' | 'blob' | 'document' | 'json' | 'text';
url: string;
validateStatus?: (status: number) => boolean;
withCredentials?: boolean;
}
export type RequestOptions = Partial<RequestConfig> & {
skipAuthorization?: boolean;
};
export type AuthorizeRequest = (req: RequestConfig, token?: string) => RequestConfig | Promise<RequestConfig>;
export type PreRequest = (req: RequestConfig) => Promise<RequestOptions> | RequestOptions | void;
export type UploadStatus = 'added' | 'queue' | 'uploading' | 'complete' | 'error' | 'cancelled' | 'paused' | 'retry' | 'updated';
export type UploadAction = 'upload' | 'cancel' | 'pause' | 'update';
export interface UploadState {
/** Uploaded file */
readonly file: File;
/** Original file name */
readonly name: string;
/** Progress percentage */
readonly progress: number;
/** Estimated remaining time */
readonly remaining: number;
/** HTTP response body */
readonly response: ResponseBody;
/** HTTP response status code */
readonly responseStatus: number;
/** HTTP response headers */
readonly responseHeaders: Record<string, string>;
/** File size in bytes */
readonly size: number;
/** Upload speed bytes/sec */
readonly speed: number;
/** Upload status */
readonly status: UploadStatus;
/** Unique upload id */
readonly uploadId: string;
/** File url */
readonly url: string;
}
interface UploadItem {
/**
* URL to create new uploads.
* @defaultValue '/upload'
*/
endpoint?: string;
/**
* Headers to be appended to each HTTP request
*/
headers?: RequestHeaders | ((file: File) => RequestHeaders);
/**
* Custom uploads metadata
*/
metadata?: Metadata | ((file: File) => Metadata);
/**
* Authorization token as a `string` or function returning a `string` or `Promise<string>`
*/
token?: string | ((httpStatus: number) => string | Promise<string>);
}
export interface UploadxControlEvent extends UploadItem {
readonly uploadId?: string;
action?: UploadAction;
}
export interface UploaderOptions extends UploadItem {
retryConfig?: RetryConfig;
/**
* Set a fixed chunk size.
* If not specified, the optimal size will be automatically adjusted based on the network speed.
*/
chunkSize?: number;
/** Adaptive chunk size limit */
maxChunkSize?: number;
withCredentials?: boolean;
/**
* Set the expected server response type
*/
responseType?: 'json' | 'text' | 'document';
/**
* Function called before every request
*/
prerequest?: PreRequest;
/**
* Function used to apply authorization token
*/
authorize?: AuthorizeRequest;
}
export {};