UNPKG

2.89 kBJavaScriptView Raw
1import { isCancelError } from '../../../errors/CanceledError.mjs';
2import '../../../errors/types/validation.mjs';
3import '@aws-amplify/core/internals/utils';
4import { logger } from '../../../utils/logger.mjs';
5
6// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7// SPDX-License-Identifier: Apache-2.0
8const createCancellableTask = ({ job, onCancel, }) => {
9 const state = 'IN_PROGRESS';
10 let canceledErrorMessage;
11 const cancelableTask = {
12 cancel: (message) => {
13 const { state: taskState } = cancelableTask;
14 if (taskState === 'CANCELED' ||
15 taskState === 'ERROR' ||
16 taskState === 'SUCCESS') {
17 logger.debug(`This task cannot be canceled. State: ${taskState}`);
18 return;
19 }
20 cancelableTask.state = 'CANCELED';
21 canceledErrorMessage = message;
22 onCancel(canceledErrorMessage);
23 },
24 state,
25 };
26 const wrappedJobPromise = (async () => {
27 try {
28 const result = await job();
29 cancelableTask.state = 'SUCCESS';
30 return result;
31 }
32 catch (e) {
33 if (isCancelError(e)) {
34 cancelableTask.state = 'CANCELED';
35 e.message = canceledErrorMessage ?? e.message;
36 }
37 cancelableTask.state = 'ERROR';
38 throw e;
39 }
40 })();
41 return Object.assign(cancelableTask, {
42 result: wrappedJobPromise,
43 });
44};
45const createDownloadTask = createCancellableTask;
46const createUploadTask = ({ job, onCancel, onResume, onPause, isMultipartUpload, }) => {
47 const cancellableTask = createCancellableTask({
48 job,
49 onCancel,
50 });
51 const uploadTask = Object.assign(cancellableTask, {
52 pause: () => {
53 const { state } = uploadTask;
54 if (!isMultipartUpload || state !== 'IN_PROGRESS') {
55 logger.debug(`This task cannot be paused. State: ${state}`);
56 return;
57 }
58 // TODO(eslint): remove this linter suppression.
59 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
60 // @ts-ignore
61 uploadTask.state = 'PAUSED';
62 onPause?.();
63 },
64 resume: () => {
65 const { state } = uploadTask;
66 if (!isMultipartUpload || state !== 'PAUSED') {
67 logger.debug(`This task cannot be resumed. State: ${state}`);
68 return;
69 }
70 // TODO(eslint): remove this linter suppression.
71 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
72 // @ts-ignore
73 uploadTask.state = 'IN_PROGRESS';
74 onResume?.();
75 },
76 });
77 return uploadTask;
78};
79
80export { createDownloadTask, createUploadTask };
81//# sourceMappingURL=transferTask.mjs.map