Files
CommunitySolidServer/src/ldp/http/metadata/MappedMetadataWriter.ts
2020-11-18 17:19:53 +01:00

29 lines
1.1 KiB
TypeScript

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: Record<string, string>;
// Not supported by Components.js yet
// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style
public constructor(headerMap: { [predicate: string]: string }) {
super();
this.headerMap = headerMap;
}
public async handle(input: { response: HttpResponse; metadata: RepresentationMetadata }): Promise<void> {
for (const key of Object.keys(this.headerMap)) {
const values = input.metadata.getAll(key).map((term): string => term.value);
if (values.length > 0) {
addHeader(input.response, this.headerMap[key], values);
}
}
}
}