Skip to content

Commit 7f8564d

Browse files
committed
fixup! Split s3Extended into per-command files under src/commands
1 parent f1b000f commit 7f8564d

File tree

1 file changed

+47
-60
lines changed

1 file changed

+47
-60
lines changed

src/commands/s3Extended/utils.ts

Lines changed: 47 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import { XMLParser } from 'fast-xml-parser';
55
export const USER_METADATA_PREFIX = 'x-amz-meta-';
66

77

8-
export const extendCommandWithExtraParametersMiddleware = (query: string) =>
9-
(next: any) => async (args: any) => {
8+
export function extendCommandWithExtraParametersMiddleware(query: string) {
9+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
10+
return (next: any) => async (args: any) => {
11+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1012
const request = args.request as any;
1113
if (request.query) {
1214
request.query.search = query;
@@ -15,86 +17,71 @@ export const extendCommandWithExtraParametersMiddleware = (query: string) =>
1517
}
1618
return next(args);
1719
};
20+
}
1821

1922

20-
export const overrideObjectAttributesHeaderMiddleware =
21-
(headerName: string, attributes: string[]) => (next: any) => async (args: any) => {
23+
export function overrideObjectAttributesHeaderMiddleware(headerName: string, attributes: string[]) {
24+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
25+
return (next: any) => async (args: any) => {
2226
const request = args.request;
2327
request.headers[headerName] = attributes.join(',');
2428
return next(args);
2529
};
30+
}
2631

27-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
28-
export const captureResponseBodyMiddleware = (captured: { xml: string }) => (next: any) => async (args: any) => {
29-
const { response } = await next(args);
32+
export function captureResponseBodyMiddleware(captured: { xml: string }) {
33+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
34+
return (next: any) => async (args: any) => {
35+
const { response } = await next(args);
3036

31-
if (response?.body) {
32-
const collected = await streamCollector(response.body);
33-
const buffer = Buffer.from(collected);
34-
// eslint-disable-next-line no-param-reassign
35-
captured.xml = buffer.toString('utf-8');
36-
response.body = Readable.from([buffer]);
37-
}
37+
if (response?.body) {
38+
const collected = await streamCollector(response.body);
39+
const buffer = Buffer.from(collected);
40+
// eslint-disable-next-line no-param-reassign
41+
captured.xml = buffer.toString('utf-8');
42+
// Re-create the body stream so the SDK deserializer can still consume it
43+
response.body = Readable.from([buffer]);
44+
}
3845

39-
return { response };
40-
};
46+
return { response };
47+
};
48+
}
4149

4250
// eslint-disable-next-line @typescript-eslint/no-explicit-any
43-
export function extractUserMetadata(obj: Record<string, any>): Record<string, string> {
44-
const metadata: Record<string, string> = {};
45-
for (const [key, value] of Object.entries(obj)) {
51+
export function extractUserMetadata(source: Record<string, any>, target: Record<string, string>): void {
52+
for (const [key, value] of Object.entries(source)) {
4653
if (key.startsWith(USER_METADATA_PREFIX)) {
47-
metadata[key] = String(value);
54+
// eslint-disable-next-line no-param-reassign
55+
target[key] = String(value);
4856
}
4957
}
50-
return metadata;
51-
}
52-
53-
export function parseGetObjectAttributesUserMetadata(xml: string): Record<string, string> {
54-
const parsed = new XMLParser().parse(xml);
55-
const response = parsed?.GetObjectAttributesResponse;
56-
if (!response) {
57-
return {};
58-
}
59-
return extractUserMetadata(response);
6058
}
6159

62-
export function parseListObjectsUserMetadata(xml: string): Map<string, Record<string, string>> {
63-
const parsed = new XMLParser().parse(xml);
64-
const result = parsed?.ListBucketResult;
65-
if (!result?.Contents) {
66-
return new Map();
67-
}
68-
const contents = Array.isArray(result.Contents) ? result.Contents : [result.Contents];
69-
const metadataByKey = new Map<string, Record<string, string>>();
70-
for (const entry of contents) {
71-
const metadata = extractUserMetadata(entry);
72-
if (Object.keys(metadata).length > 0 && entry.Key) {
73-
metadataByKey.set(String(entry.Key), metadata);
60+
export function parseUserMetadataMiddleware(captured: { xml: string }) {
61+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
62+
return (next: any) => async (args: any) => {
63+
const result = await next(args);
64+
const parsed = new XMLParser().parse(captured.xml);
65+
const response = parsed?.GetObjectAttributesResponse;
66+
if (response) {
67+
extractUserMetadata(response, result.output);
7468
}
75-
}
76-
return metadataByKey;
69+
return result;
70+
};
7771
}
7872

79-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
80-
export const parseUserMetadataMiddleware = (captured: { xml: string }) => (next: any) => async (args: any) => {
81-
const result = await next(args);
82-
Object.assign(result.output, parseGetObjectAttributesUserMetadata(captured.xml));
83-
return result;
84-
};
85-
8673

87-
export const parseListObjectsUserMetadataMiddleware =
88-
(captured: { xml: string }) => (next: any) => async (args: any) => {
74+
export function parseListObjectsUserMetadataMiddleware(captured: { xml: string }) {
75+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
76+
return (next: any) => async (args: any) => {
8977
const result = await next(args);
90-
const metadataByKey = parseListObjectsUserMetadata(captured.xml);
91-
if (result.output.Contents && metadataByKey.size > 0) {
92-
for (const content of result.output.Contents) {
93-
const metadata = metadataByKey.get(content.Key);
94-
if (metadata) {
95-
Object.assign(content, metadata);
96-
}
78+
const parsed = new XMLParser().parse(captured.xml);
79+
const xmlContents = parsed?.ListBucketResult?.Contents;
80+
if (result.output.Contents && xmlContents) {
81+
for (let i = 0; i < result.output.Contents.length; i++) {
82+
extractUserMetadata(xmlContents[i], result.output.Contents[i]);
9783
}
9884
}
9985
return result;
10086
};
87+
}

0 commit comments

Comments
 (0)