UNPKG

@aws-amplify/storage

Version:

Storage category of aws-amplify

82 lines (79 loc) 2.89 kB
import { isCancelError } from '../../../errors/CanceledError.mjs'; import '../../../errors/types/validation.mjs'; import '@aws-amplify/core/internals/utils'; import { logger } from '../../../utils/logger.mjs'; // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 const createCancellableTask = ({ job, onCancel, }) => { const state = 'IN_PROGRESS'; let canceledErrorMessage; const cancelableTask = { cancel: (message) => { const { state: taskState } = cancelableTask; if (taskState === 'CANCELED' || taskState === 'ERROR' || taskState === 'SUCCESS') { logger.debug(`This task cannot be canceled. State: ${taskState}`); return; } cancelableTask.state = 'CANCELED'; canceledErrorMessage = message; onCancel(canceledErrorMessage); }, state, }; const wrappedJobPromise = (async () => { try { const result = await job(); cancelableTask.state = 'SUCCESS'; return result; } catch (e) { if (isCancelError(e)) { cancelableTask.state = 'CANCELED'; e.message = canceledErrorMessage ?? e.message; } cancelableTask.state = 'ERROR'; throw e; } })(); return Object.assign(cancelableTask, { result: wrappedJobPromise, }); }; const createDownloadTask = createCancellableTask; const createUploadTask = ({ job, onCancel, onResume, onPause, isMultipartUpload, }) => { const cancellableTask = createCancellableTask({ job, onCancel, }); const uploadTask = Object.assign(cancellableTask, { pause: () => { const { state } = uploadTask; if (!isMultipartUpload || state !== 'IN_PROGRESS') { logger.debug(`This task cannot be paused. State: ${state}`); return; } // TODO(eslint): remove this linter suppression. // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore uploadTask.state = 'PAUSED'; onPause?.(); }, resume: () => { const { state } = uploadTask; if (!isMultipartUpload || state !== 'PAUSED') { logger.debug(`This task cannot be resumed. State: ${state}`); return; } // TODO(eslint): remove this linter suppression. // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore uploadTask.state = 'IN_PROGRESS'; onResume?.(); }, }); return uploadTask; }; export { createDownloadTask, createUploadTask }; //# sourceMappingURL=transferTask.mjs.map