From 76def28a684f3068b5bbb6e52a5a9a209bd42df6 Mon Sep 17 00:00:00 2001 From: Joachim Van Herwegen Date: Thu, 7 Jan 2021 15:55:19 +0100 Subject: [PATCH] feat: Store target identifier when parsing metadata --- src/ldp/http/BasicRequestParser.ts | 2 +- src/ldp/http/metadata/BasicMetadataExtractor.ts | 5 +++-- src/ldp/http/metadata/MetadataExtractor.ts | 3 ++- test/unit/ldp/http/metadata/BasicMetadataExtractor.test.ts | 6 +++++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/ldp/http/BasicRequestParser.ts b/src/ldp/http/BasicRequestParser.ts index 0e2d5287e..f7fcb51dc 100644 --- a/src/ldp/http/BasicRequestParser.ts +++ b/src/ldp/http/BasicRequestParser.ts @@ -38,7 +38,7 @@ export class BasicRequestParser extends RequestParser { } const target = await this.targetExtractor.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 }); return { method, target, preferences, body }; diff --git a/src/ldp/http/metadata/BasicMetadataExtractor.ts b/src/ldp/http/metadata/BasicMetadataExtractor.ts index 7d8c473eb..57f848ec0 100644 --- a/src/ldp/http/metadata/BasicMetadataExtractor.ts +++ b/src/ldp/http/metadata/BasicMetadataExtractor.ts @@ -1,5 +1,6 @@ import type { HttpRequest } from '../../../server/HttpRequest'; import { RepresentationMetadata } from '../../representation/RepresentationMetadata'; +import type { ResourceIdentifier } from '../../representation/ResourceIdentifier'; import { MetadataExtractor } from './MetadataExtractor'; import type { MetadataParser } from './MetadataParser'; @@ -14,9 +15,9 @@ export class BasicMetadataExtractor extends MetadataExtractor { this.parsers = parsers; } - public async handle({ request }: { request: HttpRequest }): + public async handle({ request, target }: { request: HttpRequest; target: ResourceIdentifier }): Promise { - const metadata = new RepresentationMetadata(); + const metadata = new RepresentationMetadata(target); for (const parser of this.parsers) { await parser.parse(request, metadata); } diff --git a/src/ldp/http/metadata/MetadataExtractor.ts b/src/ldp/http/metadata/MetadataExtractor.ts index 076abd0b3..2af766480 100644 --- a/src/ldp/http/metadata/MetadataExtractor.ts +++ b/src/ldp/http/metadata/MetadataExtractor.ts @@ -1,9 +1,10 @@ import type { HttpRequest } from '../../../server/HttpRequest'; import { AsyncHandler } from '../../../util/AsyncHandler'; import type { RepresentationMetadata } from '../../representation/RepresentationMetadata'; +import type { ResourceIdentifier } from '../../representation/ResourceIdentifier'; /** * Parses the metadata of a {@link HttpRequest} into a {@link RepresentationMetadata}. */ export abstract class MetadataExtractor extends - AsyncHandler<{ request: HttpRequest }, RepresentationMetadata> {} + AsyncHandler<{ request: HttpRequest; target: ResourceIdentifier }, RepresentationMetadata> {} diff --git a/test/unit/ldp/http/metadata/BasicMetadataExtractor.test.ts b/test/unit/ldp/http/metadata/BasicMetadataExtractor.test.ts index c83b6fb01..4e244addf 100644 --- a/test/unit/ldp/http/metadata/BasicMetadataExtractor.test.ts +++ b/test/unit/ldp/http/metadata/BasicMetadataExtractor.test.ts @@ -32,7 +32,11 @@ describe('A BasicMetadataExtractor', (): void => { }); it('will add metadata from the parsers.', async(): Promise => { - 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' ]); }); });