@aws-amplify/storage
Version:
Storage category of aws-amplify
76 lines (74 loc) • 2.66 kB
JavaScript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
Object.defineProperty(exports, "__esModule", { value: true });
exports.createUploadTask = exports.createDownloadTask = void 0;
const CanceledError_1 = require("../../../errors/CanceledError");
const utils_1 = require("../../../utils");
const createCancellableTask = ({ job, onCancel, }) => {
const state = 'IN_PROGRESS';
let canceledErrorMessage = undefined;
const cancelableTask = {
cancel: (message) => {
const { state } = cancelableTask;
if (state === 'CANCELED' || state === 'ERROR' || state === 'SUCCESS') {
utils_1.logger.debug(`This task cannot be canceled. State: ${state}`);
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 ((0, CanceledError_1.isCancelError)(e)) {
cancelableTask.state = 'CANCELED';
e.message = canceledErrorMessage ?? e.message;
}
cancelableTask.state = 'ERROR';
throw e;
}
})();
return Object.assign(cancelableTask, {
result: wrappedJobPromise,
});
};
exports.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') {
utils_1.logger.debug(`This task cannot be paused. State: ${state}`);
return;
}
// @ts-ignore
uploadTask.state = 'PAUSED';
onPause?.();
},
resume: () => {
const { state } = uploadTask;
if (!isMultipartUpload || state !== 'PAUSED') {
utils_1.logger.debug(`This task cannot be resumed. State: ${state}`);
return;
}
// @ts-ignore
uploadTask.state = 'IN_PROGRESS';
onResume?.();
},
});
return uploadTask;
};
exports.createUploadTask = createUploadTask;
//# sourceMappingURL=transferTask.js.map
;