-
Notifications
You must be signed in to change notification settings - Fork 121
/
MappedMetadataWriter.ts
26 lines (23 loc) · 1.01 KB
/
MappedMetadataWriter.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import type { HttpResponse } from '../../../server/HttpResponse';
import { addHeader } from '../../../util/HeaderUtil';
import type { RepresentationMetadata } from '../../representation/RepresentationMetadata';
import { MetadataWriter } from './MetadataWriter';
/**
* A {@link MetadataWriter} that takes a map directly converting metadata predicates to headers.
* The header value(s) will be the same as the corresponding object value(s).
*/
export class MappedMetadataWriter extends MetadataWriter {
private readonly headerMap: [string, string][];
public constructor(headerMap: Record<string, string>) {
super();
this.headerMap = Object.entries(headerMap);
}
public async handle(input: { response: HttpResponse; metadata: RepresentationMetadata }): Promise<void> {
for (const [ predicate, header ] of this.headerMap) {
const terms = input.metadata.getAll(predicate);
if (terms.length > 0) {
addHeader(input.response, header, terms.map((term): string => term.value));
}
}
}
}