From 42d6cfe5ca1f1209a09656532d8b3954f76e0a0b Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Mon, 11 Mar 2024 16:01:07 +0100 Subject: [PATCH] f --- .../src/HTTPCommunicationQueue.ts | 43 +++++++++---------- .../aws-s3-multipart/src/MultipartUploader.ts | 10 ++--- packages/@uppy/aws-s3-multipart/src/index.ts | 2 - packages/@uppy/utils/src/RateLimitedQueue.ts | 10 +++-- 4 files changed, 31 insertions(+), 34 deletions(-) diff --git a/packages/@uppy/aws-s3-multipart/src/HTTPCommunicationQueue.ts b/packages/@uppy/aws-s3-multipart/src/HTTPCommunicationQueue.ts index 44dc434ed9..0a86c50f5f 100644 --- a/packages/@uppy/aws-s3-multipart/src/HTTPCommunicationQueue.ts +++ b/packages/@uppy/aws-s3-multipart/src/HTTPCommunicationQueue.ts @@ -1,12 +1,14 @@ import type { Meta, UppyFile } from '@uppy/utils/lib/UppyFile' +import type { + RateLimitedQueue, + WrapPromiseFunctionType, +} from '@uppy/utils/lib/RateLimitedQueue' import { pausingUploadReason, type Chunk } from './MultipartUploader.ts' import type AwsS3Multipart from './index.ts' import { throwIfAborted } from './utils.ts' import type { Body, UploadPartBytesResult, UploadResult } from './utils.ts' import type { AwsS3MultipartOptions, uploadPartBytes } from './index.ts' -type RateLimitedQueue = any // untyped - function removeMetadataFromURL(urlString: string) { const urlObject = new URL(urlString) urlObject.search = '' @@ -14,31 +16,24 @@ function removeMetadataFromURL(urlString: string) { return urlObject.href } -type AbortablePromise Promise> = ( - ...args: Parameters -) => ReturnType & { - abort: (reason?: any) => void - abortOn: (signal?: AbortSignal) => ReturnType -} - export class HTTPCommunicationQueue { - #abortMultipartUpload: AbortablePromise< + #abortMultipartUpload: WrapPromiseFunctionType< AwsS3Multipart['abortMultipartUpload'] > #cache = new WeakMap() - #createMultipartUpload: AbortablePromise< + #createMultipartUpload: WrapPromiseFunctionType< AwsS3Multipart['createMultipartUpload'] > - #fetchSignature: AbortablePromise['signPart']> + #fetchSignature: WrapPromiseFunctionType['signPart']> - #getUploadParameters: AbortablePromise< + #getUploadParameters: WrapPromiseFunctionType< AwsS3Multipart['getUploadParameters'] > - #listParts: AbortablePromise['listParts']> + #listParts: WrapPromiseFunctionType['listParts']> #previousRetryDelay: number @@ -46,13 +41,13 @@ export class HTTPCommunicationQueue { #retryDelays: { values: () => Iterator } - #sendCompletionRequest: AbortablePromise< + #sendCompletionRequest: WrapPromiseFunctionType< AwsS3Multipart['completeMultipartUpload'] > #setS3MultipartState - #uploadPartBytes: AbortablePromise + #uploadPartBytes: WrapPromiseFunctionType #getFile @@ -73,25 +68,27 @@ export class HTTPCommunicationQueue { if ('abortMultipartUpload' in options) { this.#abortMultipartUpload = requests.wrapPromiseFunction( - options.abortMultipartUpload, + options.abortMultipartUpload as any, { priority: 1 }, ) } if ('createMultipartUpload' in options) { this.#createMultipartUpload = requests.wrapPromiseFunction( - options.createMultipartUpload, + options.createMultipartUpload as any, { priority: -1 }, ) } if ('signPart' in options) { - this.#fetchSignature = requests.wrapPromiseFunction(options.signPart) + this.#fetchSignature = requests.wrapPromiseFunction( + options.signPart as any, + ) } if ('listParts' in options) { - this.#listParts = requests.wrapPromiseFunction(options.listParts) + this.#listParts = requests.wrapPromiseFunction(options.listParts as any) } if ('completeMultipartUpload' in options) { this.#sendCompletionRequest = requests.wrapPromiseFunction( - options.completeMultipartUpload, + options.completeMultipartUpload as any, { priority: 1 }, ) } @@ -100,13 +97,13 @@ export class HTTPCommunicationQueue { } if ('uploadPartBytes' in options) { this.#uploadPartBytes = requests.wrapPromiseFunction( - options.uploadPartBytes, + options.uploadPartBytes as any, { priority: Infinity }, ) } if ('getUploadParameters' in options) { this.#getUploadParameters = requests.wrapPromiseFunction( - options.getUploadParameters, + options.getUploadParameters as any, ) } } diff --git a/packages/@uppy/aws-s3-multipart/src/MultipartUploader.ts b/packages/@uppy/aws-s3-multipart/src/MultipartUploader.ts index 9d08082bdb..665041afb4 100644 --- a/packages/@uppy/aws-s3-multipart/src/MultipartUploader.ts +++ b/packages/@uppy/aws-s3-multipart/src/MultipartUploader.ts @@ -1,14 +1,12 @@ import type { Uppy } from '@uppy/core' import { AbortController } from '@uppy/utils/lib/AbortController' -import type { Body, Meta, UppyFile } from '@uppy/utils/lib/UppyFile' +import type { Meta, UppyFile } from '@uppy/utils/lib/UppyFile' import type { HTTPCommunicationQueue } from './HTTPCommunicationQueue' +import type { Body } from './utils' const MB = 1024 * 1024 -interface MultipartUploaderOptions< - M extends Meta, - B extends Body & { location: string }, -> { +interface MultipartUploaderOptions { getChunkSize?: (file: { size: number }) => number onProgress?: (bytesUploaded: number, bytesTotal: number) => void onPartComplete?: (part: { PartNumber: number; ETag: string }) => void @@ -63,7 +61,7 @@ export const pausingUploadReason = Symbol('pausing upload, not an actual error') * (based on the user-provided `shouldUseMultipart` option value) and to manage * the chunk splitting. */ -class MultipartUploader { +class MultipartUploader { options: MultipartUploaderOptions & Required, keyof typeof defaultOptions>> diff --git a/packages/@uppy/aws-s3-multipart/src/index.ts b/packages/@uppy/aws-s3-multipart/src/index.ts index 94f2887a0a..94836509c4 100644 --- a/packages/@uppy/aws-s3-multipart/src/index.ts +++ b/packages/@uppy/aws-s3-multipart/src/index.ts @@ -7,8 +7,6 @@ import type { RequestOptions } from '@uppy/utils/lib/CompanionClientProvider.ts' import type { Body as _Body, Meta, UppyFile } from '@uppy/utils/lib/UppyFile' import type { Uppy } from '@uppy/core' import EventManager from '@uppy/core/lib/EventManager.js' -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore untyped import { RateLimitedQueue } from '@uppy/utils/lib/RateLimitedQueue' import { filterNonFailedFiles, diff --git a/packages/@uppy/utils/src/RateLimitedQueue.ts b/packages/@uppy/utils/src/RateLimitedQueue.ts index 1c769e9a19..2948263c43 100644 --- a/packages/@uppy/utils/src/RateLimitedQueue.ts +++ b/packages/@uppy/utils/src/RateLimitedQueue.ts @@ -30,11 +30,15 @@ type QueueOptions = { priority?: number } -interface AbortablePromise extends Promise { +export interface AbortablePromise extends Promise { abort(cause?: unknown): void - abortOn: typeof abortOn + abortOn: (...args: Parameters) => AbortablePromise } +export type WrapPromiseFunctionType any> = ( + ...args: Parameters +) => AbortablePromise>> + export class RateLimitedQueue { #activeRequests = 0 @@ -223,7 +227,7 @@ export class RateLimitedQueue { outerPromise.abort = (cause) => { queuedRequest.abort(cause) } - outerPromise.abortOn = abortOn + outerPromise.abortOn = abortOn as any return outerPromise }