@itwin/object-storage-s3
Version:
Object storage implementation base for S3 compatible providers
60 lines • 3.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.S3ClientStorage = void 0;
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
const fs_1 = require("fs");
const internal_1 = require("@itwin/object-storage-core/lib/common/internal");
const internal_2 = require("@itwin/object-storage-core/lib/server/internal");
const object_storage_core_1 = require("@itwin/object-storage-core");
const internal_3 = require("../server/internal");
const Helpers_1 = require("./internal/Helpers");
class S3ClientStorage extends object_storage_core_1.ClientStorage {
_clientWrapperFactory;
constructor(_clientWrapperFactory) {
super();
this._clientWrapperFactory = _clientWrapperFactory;
}
async download(input) {
if ((0, internal_1.instanceOfUrlTransferInput)(input))
return (0, internal_2.downloadFromUrl)(input);
else
(0, internal_1.assertRelativeDirectory)(input.reference.relativeDirectory);
const options = {
abortSignal: input.abortSignal
? (0, object_storage_core_1.createClientAbortSignal)(input.abortSignal)
: undefined,
};
return (0, internal_3.createAndUseClient)(() => this._clientWrapperFactory.create(input.transferConfig), async (clientWrapper) => {
const downloadStream = await clientWrapper.download(input.reference, options);
return (0, internal_2.streamToTransferType)(downloadStream, input.transferType, input.localPath);
});
}
async upload(input) {
if ((0, internal_1.instanceOfUrlTransferInput)(input))
return (0, Helpers_1.handleS3UrlUpload)(input);
let { data } = input;
const { metadata } = input;
if ("reference" in input)
(0, internal_1.assertRelativeDirectory)(input.reference.relativeDirectory);
if (typeof data === "string") {
await (0, internal_2.assertFileNotEmpty)(data);
data = (0, fs_1.createReadStream)(data);
}
return (0, internal_3.createAndUseClient)(() => this._clientWrapperFactory.create(input.transferConfig), async (clientWrapper) => clientWrapper.upload(input.reference, data, metadata));
}
async uploadInMultipleParts(input) {
let { data } = input;
if ("reference" in input)
(0, internal_1.assertRelativeDirectory)(input.reference.relativeDirectory);
if (typeof data === "string") {
await (0, internal_2.assertFileNotEmpty)(data);
data = (0, fs_1.createReadStream)(data);
}
return (0, internal_3.createAndUseClient)(() => this._clientWrapperFactory.create(input.transferConfig), async (clientWrapper) => clientWrapper.uploadInMultipleParts(input.reference, data, input.options));
}
}
exports.S3ClientStorage = S3ClientStorage;
//# sourceMappingURL=S3ClientStorage.js.map