1 | import * as Minio from "minio@7"; |
2 |
|
3 | type S3 = { |
4 | endPoint: string; |
5 | port: number; |
6 | useSSL: boolean; |
7 | pathStyle: boolean; |
8 | bucket: string; |
9 | accessKey: string; |
10 | secretKey: string; |
11 | region: string; |
12 | }; |
13 | export async function main( |
14 | s3: S3, |
15 | prefix?: string, |
16 | bucketName?: string, |
17 | maxResults?: number, |
18 | pageSize?: number, |
19 | ) { |
20 | const s3client = new Minio.Client(s3); |
21 | const options = removeObjectEmptyFields({ |
22 | prefix, |
23 | bucketName, |
24 | maxResults, |
25 | pageSize, |
26 | }); |
27 |
|
28 | const stream = s3client.listObjects( |
29 | options.bucketName || s3.bucket, |
30 | options.prefix ?? "", |
31 | true, |
32 | ); |
33 |
|
34 | const result: any[] = []; |
35 | await new Promise<void>((resolve, reject) => { |
36 | stream.on("data", (obj: any) => { |
37 | if ( |
38 | options.maxResults !== undefined && |
39 | result.length >= options.maxResults |
40 | ) { |
41 | stream.destroy(); |
42 | resolve(); |
43 | return; |
44 | } |
45 | result.push(obj); |
46 | }); |
47 | stream.on("end", () => resolve()); |
48 | stream.on("close", () => resolve()); |
49 | stream.on("error", (err: any) => reject(err)); |
50 | }); |
51 |
|
52 | return result; |
53 | } |
54 |
|
55 | function removeObjectEmptyFields( |
56 | object?: Record<string, any>, |
57 | removeEmptyArraysAndObjects = true, |
58 | createNewObject = true, |
59 | ) { |
60 | if (!object || typeof object !== "object") return {} |
61 | const obj = createNewObject ? { ...object } : object |
62 | const emptyValues = [undefined, null, ""] |
63 | for (const key in obj) { |
64 | const value = obj[key] |
65 | if (emptyValues.includes(value)) { |
66 | delete obj[key] |
67 | } else if (typeof value === "object") { |
68 | if (Object.keys(value).length) { |
69 | obj[key] = removeObjectEmptyFields(value, removeEmptyArraysAndObjects, false) |
70 | } |
71 | if (!Object.keys(value).length && removeEmptyArraysAndObjects) { |
72 | delete obj[key] |
73 | } |
74 | } |
75 | } |
76 | return obj |
77 | } |
78 |
|