feat: Store target identifier when parsing metadata

This commit is contained in:
Joachim Van Herwegen 2021-01-07 15:55:19 +01:00
parent f17054c647
commit 76def28a68
4 changed files with 11 additions and 5 deletions

View File

@ -38,7 +38,7 @@ export class BasicRequestParser extends RequestParser {
} }
const target = await this.targetExtractor.handleSafe({ request }); const target = await this.targetExtractor.handleSafe({ request });
const preferences = await this.preferenceParser.handleSafe({ request }); const preferences = await this.preferenceParser.handleSafe({ request });
const metadata = await this.metadataExtractor.handleSafe({ request }); const metadata = await this.metadataExtractor.handleSafe({ request, target });
const body = await this.bodyParser.handleSafe({ request, metadata }); const body = await this.bodyParser.handleSafe({ request, metadata });
return { method, target, preferences, body }; return { method, target, preferences, body };

View File

@ -1,5 +1,6 @@
import type { HttpRequest } from '../../../server/HttpRequest'; import type { HttpRequest } from '../../../server/HttpRequest';
import { RepresentationMetadata } from '../../representation/RepresentationMetadata'; import { RepresentationMetadata } from '../../representation/RepresentationMetadata';
import type { ResourceIdentifier } from '../../representation/ResourceIdentifier';
import { MetadataExtractor } from './MetadataExtractor'; import { MetadataExtractor } from './MetadataExtractor';
import type { MetadataParser } from './MetadataParser'; import type { MetadataParser } from './MetadataParser';
@ -14,9 +15,9 @@ export class BasicMetadataExtractor extends MetadataExtractor {
this.parsers = parsers; this.parsers = parsers;
} }
public async handle({ request }: { request: HttpRequest }): public async handle({ request, target }: { request: HttpRequest; target: ResourceIdentifier }):
Promise<RepresentationMetadata> { Promise<RepresentationMetadata> {
const metadata = new RepresentationMetadata(); const metadata = new RepresentationMetadata(target);
for (const parser of this.parsers) { for (const parser of this.parsers) {
await parser.parse(request, metadata); await parser.parse(request, metadata);
} }

View File

@ -1,9 +1,10 @@
import type { HttpRequest } from '../../../server/HttpRequest'; import type { HttpRequest } from '../../../server/HttpRequest';
import { AsyncHandler } from '../../../util/AsyncHandler'; import { AsyncHandler } from '../../../util/AsyncHandler';
import type { RepresentationMetadata } from '../../representation/RepresentationMetadata'; import type { RepresentationMetadata } from '../../representation/RepresentationMetadata';
import type { ResourceIdentifier } from '../../representation/ResourceIdentifier';
/** /**
* Parses the metadata of a {@link HttpRequest} into a {@link RepresentationMetadata}. * Parses the metadata of a {@link HttpRequest} into a {@link RepresentationMetadata}.
*/ */
export abstract class MetadataExtractor extends export abstract class MetadataExtractor extends
AsyncHandler<{ request: HttpRequest }, RepresentationMetadata> {} AsyncHandler<{ request: HttpRequest; target: ResourceIdentifier }, RepresentationMetadata> {}

View File

@ -32,7 +32,11 @@ describe('A BasicMetadataExtractor', (): void => {
}); });
it('will add metadata from the parsers.', async(): Promise<void> => { it('will add metadata from the parsers.', async(): Promise<void> => {
const metadata = await handler.handle({ request: { headers: { aa: 'valA', bb: 'valB' } as any } as HttpRequest }); const target = { path: 'http://test.com/id' };
const metadata = await handler.handle(
{ target, request: { headers: { aa: 'valA', bb: 'valB' } as any } as HttpRequest },
);
expect(metadata.identifier.value).toBe(target.path);
expect(metadata.getAll(RDF.type).map((term): any => term.value)).toEqual([ 'valA', 'valB' ]); expect(metadata.getAll(RDF.type).map((term): any => term.value)).toEqual([ 'valA', 'valB' ]);
}); });
}); });