From 6c4378a2de290d4925f14f642697523ff38aa6e3 Mon Sep 17 00:00:00 2001 From: Joachim Van Herwegen Date: Thu, 4 Feb 2021 10:49:40 +0100 Subject: [PATCH] fix: Fix problem with piping streams for PATCH requests --- src/ldp/http/SparqlUpdateBodyParser.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/ldp/http/SparqlUpdateBodyParser.ts b/src/ldp/http/SparqlUpdateBodyParser.ts index 95b87d6125..494ae9c3c4 100644 --- a/src/ldp/http/SparqlUpdateBodyParser.ts +++ b/src/ldp/http/SparqlUpdateBodyParser.ts @@ -1,4 +1,3 @@ -import { PassThrough } from 'stream'; import type { Algebra } from 'sparqlalgebrajs'; import { translate } from 'sparqlalgebrajs'; import { getLoggerFor } from '../../logging/LogUtil'; @@ -6,7 +5,7 @@ import { APPLICATION_SPARQL_UPDATE } from '../../util/ContentTypes'; import { BadRequestHttpError } from '../../util/errors/BadRequestHttpError'; import { isNativeError } from '../../util/errors/ErrorUtil'; import { UnsupportedMediaTypeHttpError } from '../../util/errors/UnsupportedMediaTypeHttpError'; -import { pipeSafely, readableToString } from '../../util/StreamUtil'; +import { guardedStreamFrom, readableToString } from '../../util/StreamUtil'; import type { BodyParserArgs } from './BodyParser'; import { BodyParser } from './BodyParser'; import type { SparqlUpdatePatch } from './SparqlUpdatePatch'; @@ -25,12 +24,9 @@ export class SparqlUpdateBodyParser extends BodyParser { } public async handle({ request, metadata }: BodyParserArgs): Promise { - const options = { objectMode: request.readableObjectMode }; - const toAlgebraStream = pipeSafely(request, new PassThrough(options)); - const dataCopy = pipeSafely(request, new PassThrough(options)); + const sparql = await readableToString(request); let algebra: Algebra.Operation; try { - const sparql = await readableToString(toAlgebraStream); algebra = translate(sparql, { quads: true, baseIRI: metadata.identifier.value }); } catch (error: unknown) { this.logger.warn('Could not translate SPARQL query to SPARQL algebra', { error }); @@ -44,7 +40,7 @@ export class SparqlUpdateBodyParser extends BodyParser { return { algebra, binary: true, - data: dataCopy, + data: guardedStreamFrom(sparql), metadata, }; }