feat: add minio util function

This commit is contained in:
Methapon2001 2024-07-01 08:52:07 +07:00
parent 5d6b61b46f
commit f861edc6ba

View file

@ -10,6 +10,43 @@ const minio = new Client({
export default minio;
// minio typescript does not support include version
type BucketItemWithVersion = {
name: string;
lastModified: string;
etag: string;
size: number;
versionId: string;
isLatest: boolean;
isDeleteMarker: boolean;
};
export async function listObjectVersion(bucket: string, obj: string) {
return await new Promise<BucketItemWithVersion[]>((resolve, reject) => {
const data: BucketItemWithVersion[] = [];
// @ts-ignore
let stream = minio.listObjects(bucket, obj, true, {
IncludeVersion: true, // type error (ts not support) - expected 3 args but got 4
});
stream.on("data", (obj) => data.push(obj as unknown as BucketItemWithVersion));
stream.on("error", (err) => reject(err));
stream.on("end", () => resolve(data));
});
}
export async function deleteObjectAllVersion(bucket: string, obj: string) {
const item = await listObjectVersion(bucket, obj);
return await new Promise((resolve, reject) => {
minio.removeObjects(
bucket,
// @ts-ignore
item.map(({ name, versionId }) => ({ name, versionId })), // type error (ts not support) - expected "string[]"
(e) => (e && reject(e)) || resolve(true),
);
});
}
export async function presignedGetObjectIfExist(bucket: string, obj: string, exp?: number) {
if (
await minio.statObject(bucket, obj).catch((e) => {