mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
refactor: Prevent reduce calls
This commit is contained in:
@@ -58,9 +58,10 @@ export class ContentType {
|
||||
* @returns The value string, including parameters, if present.
|
||||
*/
|
||||
public toHeaderValueString(): string {
|
||||
return Object.entries(this.parameters)
|
||||
const parameterStrings = Object.entries(this.parameters)
|
||||
.sort((entry1, entry2): number => entry1[0].localeCompare(entry2[0]))
|
||||
.reduce((acc, entry): string => `${acc}; ${entry[0]}=${entry[1]}`, this.value);
|
||||
.map(([ key, value ]): string => `${key}=${value}`);
|
||||
return [ this.value, ...parameterStrings ].join('; ');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -111,7 +111,8 @@ function handleInvalidValue(message: string, strict: boolean): void | never {
|
||||
*/
|
||||
export function parseParameters(parameters: string[], replacements: Record<string, string>, strict = false):
|
||||
{ name: string; value: string }[] {
|
||||
return parameters.reduce<{ name: string; value: string }[]>((acc, param): { name: string; value: string }[] => {
|
||||
const parsed: { name: string; value: string }[] = [];
|
||||
for (const param of parameters) {
|
||||
const [ name, rawValue ] = param.split('=').map((str): string => str.trim());
|
||||
|
||||
// Test replaced string for easier check
|
||||
@@ -120,7 +121,7 @@ export function parseParameters(parameters: string[], replacements: Record<strin
|
||||
if (!(TOKEN.test(name) && (!rawValue || /^"\d+"$/u.test(rawValue) || TOKEN.test(rawValue)))) {
|
||||
handleInvalidValue(`Invalid parameter value: ${name}=${replacements[rawValue] || rawValue} ` +
|
||||
`does not match (token ( "=" ( token / quoted-string ))?). `, strict);
|
||||
return acc;
|
||||
continue;
|
||||
}
|
||||
|
||||
let value = rawValue;
|
||||
@@ -128,9 +129,9 @@ export function parseParameters(parameters: string[], replacements: Record<strin
|
||||
value = replacements[rawValue];
|
||||
}
|
||||
|
||||
acc.push({ name, value });
|
||||
return acc;
|
||||
}, []);
|
||||
parsed.push({ name, value });
|
||||
}
|
||||
return parsed;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line jsdoc/require-returns-check
|
||||
@@ -239,17 +240,15 @@ export function parseAccept(input: string, strict = false): Accept[] {
|
||||
// Quoted strings could prevent split from having correct results
|
||||
const { result, replacements } = transformQuotedStrings(input);
|
||||
|
||||
return splitAndClean(result)
|
||||
.reduce<Accept[]>((acc, part): Accept[] => {
|
||||
const partOrUndef = parseAcceptPart(part, replacements, strict);
|
||||
const accepts: Accept[] = [];
|
||||
for (const part of splitAndClean(result)) {
|
||||
const partOrUndef = parseAcceptPart(part, replacements, strict);
|
||||
|
||||
if (partOrUndef !== undefined) {
|
||||
acc.push(partOrUndef);
|
||||
}
|
||||
|
||||
return acc;
|
||||
}, [])
|
||||
.sort((left, right): number => right.weight - left.weight);
|
||||
if (partOrUndef !== undefined) {
|
||||
accepts.push(partOrUndef);
|
||||
}
|
||||
}
|
||||
return accepts.sort((left, right): number => right.weight - left.weight);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -384,14 +383,11 @@ export function parseContentType(input: string): ContentType {
|
||||
throw new BadRequestHttpError(`Invalid content-type: ${value} does not match ( token "/" token )`);
|
||||
}
|
||||
|
||||
return parseParameters(params, replacements)
|
||||
.reduce<ContentType>(
|
||||
(prev, cur): ContentType => {
|
||||
prev.parameters[cur.name] = cur.value;
|
||||
return prev;
|
||||
},
|
||||
new ContentType(value),
|
||||
);
|
||||
const contentType = new ContentType(value);
|
||||
for (const param of parseParameters(params, replacements)) {
|
||||
contentType.parameters[param.name] = param.value;
|
||||
}
|
||||
return contentType;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -37,12 +37,13 @@ export async function parseQuads(readable: Guarded<Readable>, options: ParserOpt
|
||||
* @returns A new array containing the unique quads.
|
||||
*/
|
||||
export function uniqueQuads(quads: Quad[]): Quad[] {
|
||||
return quads.reduce<Quad[]>((result, quad): Quad[] => {
|
||||
if (!result.some((item): boolean => quad.equals(item))) {
|
||||
result.push(quad);
|
||||
const uniques: Quad[] = [];
|
||||
for (const quad of quads) {
|
||||
if (!uniques.some((item): boolean => quad.equals(item))) {
|
||||
uniques.push(quad);
|
||||
}
|
||||
return result;
|
||||
}, []);
|
||||
}
|
||||
return uniques;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -34,12 +34,14 @@ export function errorTermsToMetadata(terms: Dict<string>, metadata?: Representat
|
||||
* @param metadata - Metadata to extract the terms from.
|
||||
*/
|
||||
export function extractErrorTerms(metadata: RepresentationMetadata): Dict<string> {
|
||||
return metadata.quads()
|
||||
.filter((quad): boolean => quad.predicate.value.startsWith(SOLID_ERROR_TERM.namespace))
|
||||
.reduce<NodeJS.Dict<string>>((acc, quad): Dict<string> => {
|
||||
acc[quad.predicate.value.slice(SOLID_ERROR_TERM.namespace.length)] = quad.object.value;
|
||||
return acc;
|
||||
}, {});
|
||||
const errorQuads = metadata.quads()
|
||||
.filter((quad): boolean => quad.predicate.value.startsWith(SOLID_ERROR_TERM.namespace));
|
||||
|
||||
const errorTerms: Dict<string> = {};
|
||||
for (const quad of errorQuads) {
|
||||
errorTerms[quad.predicate.value.slice(SOLID_ERROR_TERM.namespace.length)] = quad.object.value;
|
||||
}
|
||||
return errorTerms;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user