mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
fix: metadata file error in FileResourceStore
* Fix: metadata file error in FileResourceStore * fix: ensure full test coverage * add stream piping function in util * Fix typing in util function * Add requested changes * add suggested changes * add suggested change Co-authored-by: freyavs <freyavanspeybroeck@outlook.com>
This commit is contained in:
committed by
GitHub
parent
7fae3203d5
commit
c808dfeff0
@@ -1,7 +1,6 @@
|
||||
import { createReadStream, createWriteStream, promises as fsPromises, Stats } from 'fs';
|
||||
import { posix } from 'path';
|
||||
import { Readable } from 'stream';
|
||||
import arrayifyStream from 'arrayify-stream';
|
||||
import { contentType as getContentTypeFromExtension } from 'mime-types';
|
||||
import { Quad } from 'rdf-js';
|
||||
import streamifyArray from 'streamify-array';
|
||||
@@ -69,7 +68,7 @@ export class FileResourceStore implements ResourceStore {
|
||||
const linkTypes = representation.metadata.linkRel?.type;
|
||||
let metadata;
|
||||
if (raw.length > 0) {
|
||||
metadata = this.metadataController.generateReadableFromQuads(raw);
|
||||
metadata = this.metadataController.serializeQuads(raw);
|
||||
}
|
||||
|
||||
// Create a new container or resource in the parent container with a specific name based on the incoming headers.
|
||||
@@ -252,7 +251,7 @@ export class FileResourceStore implements ResourceStore {
|
||||
let rawMetadata: Quad[] = [];
|
||||
try {
|
||||
const readMetadataStream = createReadStream(`${path}.metadata`);
|
||||
rawMetadata = await this.metadataController.generateQuadsFromReadable(readMetadataStream);
|
||||
rawMetadata = await this.metadataController.parseQuads(readMetadataStream);
|
||||
} catch (_) {
|
||||
// Metadata file doesn't exist so lets keep `rawMetaData` an empty array.
|
||||
}
|
||||
@@ -289,7 +288,7 @@ export class FileResourceStore implements ResourceStore {
|
||||
let rawMetadata: Quad[] = [];
|
||||
try {
|
||||
const readMetadataStream = createReadStream(joinPath(path, '.metadata'));
|
||||
rawMetadata = await arrayifyStream(readMetadataStream);
|
||||
rawMetadata = await this.metadataController.parseQuads(readMetadataStream);
|
||||
} catch (_) {
|
||||
// Metadata file doesn't exist so lets keep `rawMetaData` an empty array.
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import rdfParser from 'rdf-parse';
|
||||
import { Representation } from '../../ldp/representation/Representation';
|
||||
import { RepresentationMetadata } from '../../ldp/representation/RepresentationMetadata';
|
||||
import { INTERNAL_QUADS } from '../../util/ContentTypes';
|
||||
import { UnsupportedHttpError } from '../../util/errors/UnsupportedHttpError';
|
||||
import { pipeStreamsAndErrors } from '../../util/Util';
|
||||
import { checkRequest } from './ConversionUtil';
|
||||
import { RepresentationConverterArgs } from './RepresentationConverter';
|
||||
import { TypedRepresentationConverter } from './TypedRepresentationConverter';
|
||||
@@ -30,20 +30,19 @@ export class RdfToQuadConverter extends TypedRepresentationConverter {
|
||||
|
||||
private rdfToQuads(representation: Representation, baseIRI: string): Representation {
|
||||
const metadata: RepresentationMetadata = { ...representation.metadata, contentType: INTERNAL_QUADS };
|
||||
|
||||
// Catch parsing errors and emit correct error
|
||||
// Node 10 requires both writableObjectMode and readableObjectMode
|
||||
const errorStream = new PassThrough({ writableObjectMode: true, readableObjectMode: true });
|
||||
const data = rdfParser.parse(representation.data, {
|
||||
const rawQuads = rdfParser.parse(representation.data, {
|
||||
contentType: representation.metadata.contentType as string,
|
||||
baseIRI,
|
||||
});
|
||||
data.pipe(errorStream);
|
||||
data.on('error', (error): boolean => errorStream.emit('error', new UnsupportedHttpError(error.message)));
|
||||
|
||||
// Wrap the stream such that errors are transformed
|
||||
// (Node 10 requires both writableObjectMode and readableObjectMode)
|
||||
const data = new PassThrough({ writableObjectMode: true, readableObjectMode: true });
|
||||
pipeStreamsAndErrors(rawQuads, data);
|
||||
|
||||
return {
|
||||
binary: false,
|
||||
data: errorStream,
|
||||
data,
|
||||
metadata,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user