mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
refactor: Rename RepresentationPreference into ValuePreferences.
This commit is contained in:
parent
4828912593
commit
09ae959333
@ -73,7 +73,6 @@ export * from './ldp/permissions/SparqlPatchPermissionsExtractor';
|
|||||||
// LDP/Representation
|
// LDP/Representation
|
||||||
export * from './ldp/representation/Representation';
|
export * from './ldp/representation/Representation';
|
||||||
export * from './ldp/representation/RepresentationMetadata';
|
export * from './ldp/representation/RepresentationMetadata';
|
||||||
export * from './ldp/representation/RepresentationPreference';
|
|
||||||
export * from './ldp/representation/RepresentationPreferences';
|
export * from './ldp/representation/RepresentationPreferences';
|
||||||
export * from './ldp/representation/ResourceIdentifier';
|
export * from './ldp/representation/ResourceIdentifier';
|
||||||
|
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
/**
|
|
||||||
* Represents preferred values along a single content negotiation dimension.
|
|
||||||
*
|
|
||||||
* The number represents how preferred this value is from 0 to 1.
|
|
||||||
* Follows the quality values rule from RFC 7231:
|
|
||||||
* "The weight is normalized to a real number in the range 0 through 1,
|
|
||||||
* where 0.001 is the least preferred and 1 is the most preferred; a
|
|
||||||
* value of 0 means "not acceptable"."
|
|
||||||
*/
|
|
||||||
export type RepresentationPreference = Record<string, number>;
|
|
@ -1,12 +1,24 @@
|
|||||||
import type { RepresentationPreference } from './RepresentationPreference';
|
/**
|
||||||
|
* Represents preferred values along a single content negotiation dimension.
|
||||||
|
*
|
||||||
|
* The number represents how preferred this value is from 0 to 1.
|
||||||
|
* Follows the quality values rule from RFC 7231:
|
||||||
|
* "The weight is normalized to a real number in the range 0 through 1,
|
||||||
|
* where 0.001 is the least preferred and 1 is the most preferred; a
|
||||||
|
* value of 0 means "not acceptable"."
|
||||||
|
*/
|
||||||
|
export type ValuePreferences = Record<string, number>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains the preferences of which kind of representation is requested.
|
* Contains preferences along multiple content negotiation dimensions.
|
||||||
|
*
|
||||||
|
* All dimensions are optional for ease of constructing; either `undefined`
|
||||||
|
* or an empty `ValuePreferences` can indicate that no preferences were specified.
|
||||||
*/
|
*/
|
||||||
export interface RepresentationPreferences {
|
export interface RepresentationPreferences {
|
||||||
type?: RepresentationPreference;
|
type?: ValuePreferences;
|
||||||
charset?: RepresentationPreference;
|
charset?: ValuePreferences;
|
||||||
datetime?: RepresentationPreference;
|
datetime?: ValuePreferences;
|
||||||
encoding?: RepresentationPreference;
|
encoding?: ValuePreferences;
|
||||||
language?: RepresentationPreference;
|
language?: ValuePreferences;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import type { Representation } from '../../ldp/representation/Representation';
|
import type { Representation } from '../../ldp/representation/Representation';
|
||||||
|
import type { ValuePreferences } from '../../ldp/representation/RepresentationPreferences';
|
||||||
import { getLoggerFor } from '../../logging/LogUtil';
|
import { getLoggerFor } from '../../logging/LogUtil';
|
||||||
import { supportsConversion, matchesMediaType } from './ConversionUtil';
|
import { supportsConversion, matchesMediaType } from './ConversionUtil';
|
||||||
import type { RepresentationConverterArgs } from './RepresentationConverter';
|
import type { RepresentationConverterArgs } from './RepresentationConverter';
|
||||||
@ -34,24 +35,24 @@ export class ChainedConverter extends TypedRepresentationConverter {
|
|||||||
return this.converters[this.converters.length - 1];
|
return this.converters[this.converters.length - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getInputTypes(): Promise<Record<string, number>> {
|
public async getInputTypes(): Promise<ValuePreferences> {
|
||||||
return this.first.getInputTypes();
|
return this.first.getInputTypes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getOutputTypes(): Promise<Record<string, number>> {
|
public async getOutputTypes(): Promise<ValuePreferences> {
|
||||||
return this.last.getOutputTypes();
|
return this.last.getOutputTypes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async canHandle(input: RepresentationConverterArgs): Promise<void> {
|
public async canHandle(input: RepresentationConverterArgs): Promise<void> {
|
||||||
// We assume a chain can be constructed, otherwise there would be a configuration issue
|
// We assume a chain can be constructed, otherwise there would be a configuration issue
|
||||||
// So we only check if the input can be parsed and the preferred type can be written
|
// So we only check if the input can be parsed and the preferred type can be written
|
||||||
const inTypes = this.filterTypes(await this.first.getInputTypes());
|
const inTypes = this.getAcceptableTypes(await this.first.getInputTypes());
|
||||||
const outTypes = this.filterTypes(await this.last.getOutputTypes());
|
const outTypes = this.getAcceptableTypes(await this.last.getOutputTypes());
|
||||||
supportsConversion(input, inTypes, outTypes);
|
supportsConversion(input, inTypes, outTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private filterTypes(typeVals: Record<string, number>): string[] {
|
private getAcceptableTypes(preferences: ValuePreferences): string[] {
|
||||||
return Object.keys(typeVals).filter((name): boolean => typeVals[name] > 0);
|
return Object.keys(preferences).filter((name): boolean => preferences[name] > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async handle(input: RepresentationConverterArgs): Promise<Representation> {
|
public async handle(input: RepresentationConverterArgs): Promise<Representation> {
|
||||||
|
@ -2,8 +2,10 @@ import type { Readable } from 'stream';
|
|||||||
import rdfSerializer from 'rdf-serialize';
|
import rdfSerializer from 'rdf-serialize';
|
||||||
import type { Representation } from '../../ldp/representation/Representation';
|
import type { Representation } from '../../ldp/representation/Representation';
|
||||||
import { RepresentationMetadata } from '../../ldp/representation/RepresentationMetadata';
|
import { RepresentationMetadata } from '../../ldp/representation/RepresentationMetadata';
|
||||||
import type { RepresentationPreference } from '../../ldp/representation/RepresentationPreference';
|
import type {
|
||||||
import type { RepresentationPreferences } from '../../ldp/representation/RepresentationPreferences';
|
ValuePreferences,
|
||||||
|
RepresentationPreferences,
|
||||||
|
} from '../../ldp/representation/RepresentationPreferences';
|
||||||
import { INTERNAL_QUADS } from '../../util/ContentTypes';
|
import { INTERNAL_QUADS } from '../../util/ContentTypes';
|
||||||
import { guardStream } from '../../util/GuardedStream';
|
import { guardStream } from '../../util/GuardedStream';
|
||||||
import { CONTENT_TYPE } from '../../util/Vocabularies';
|
import { CONTENT_TYPE } from '../../util/Vocabularies';
|
||||||
@ -15,11 +17,11 @@ import { TypedRepresentationConverter } from './TypedRepresentationConverter';
|
|||||||
* Converts `internal/quads` to most major RDF serializations.
|
* Converts `internal/quads` to most major RDF serializations.
|
||||||
*/
|
*/
|
||||||
export class QuadToRdfConverter extends TypedRepresentationConverter {
|
export class QuadToRdfConverter extends TypedRepresentationConverter {
|
||||||
public async getInputTypes(): Promise<RepresentationPreference> {
|
public async getInputTypes(): Promise<ValuePreferences> {
|
||||||
return { [INTERNAL_QUADS]: 1 };
|
return { [INTERNAL_QUADS]: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getOutputTypes(): Promise<RepresentationPreference> {
|
public async getOutputTypes(): Promise<ValuePreferences> {
|
||||||
return rdfSerializer.getContentTypesPrioritized();
|
return rdfSerializer.getContentTypesPrioritized();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ import { PassThrough } from 'stream';
|
|||||||
import rdfParser from 'rdf-parse';
|
import rdfParser from 'rdf-parse';
|
||||||
import type { Representation } from '../../ldp/representation/Representation';
|
import type { Representation } from '../../ldp/representation/Representation';
|
||||||
import { RepresentationMetadata } from '../../ldp/representation/RepresentationMetadata';
|
import { RepresentationMetadata } from '../../ldp/representation/RepresentationMetadata';
|
||||||
|
import type { ValuePreferences } from '../../ldp/representation/RepresentationPreferences';
|
||||||
import { INTERNAL_QUADS } from '../../util/ContentTypes';
|
import { INTERNAL_QUADS } from '../../util/ContentTypes';
|
||||||
import { BadRequestHttpError } from '../../util/errors/BadRequestHttpError';
|
import { BadRequestHttpError } from '../../util/errors/BadRequestHttpError';
|
||||||
import { pipeSafely } from '../../util/StreamUtil';
|
import { pipeSafely } from '../../util/StreamUtil';
|
||||||
@ -13,11 +14,11 @@ import { TypedRepresentationConverter } from './TypedRepresentationConverter';
|
|||||||
* Converts most major RDF serializations to `internal/quads`.
|
* Converts most major RDF serializations to `internal/quads`.
|
||||||
*/
|
*/
|
||||||
export class RdfToQuadConverter extends TypedRepresentationConverter {
|
export class RdfToQuadConverter extends TypedRepresentationConverter {
|
||||||
public async getInputTypes(): Promise<Record<string, number>> {
|
public async getInputTypes(): Promise<ValuePreferences> {
|
||||||
return rdfParser.getContentTypesPrioritized();
|
return rdfParser.getContentTypesPrioritized();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getOutputTypes(): Promise<Record<string, number>> {
|
public async getOutputTypes(): Promise<ValuePreferences> {
|
||||||
return { [INTERNAL_QUADS]: 1 };
|
return { [INTERNAL_QUADS]: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import type { RepresentationPreference } from '../../ldp/representation/RepresentationPreference';
|
import type { ValuePreferences } from '../../ldp/representation/RepresentationPreferences';
|
||||||
import { supportsConversion } from './ConversionUtil';
|
import { supportsConversion } from './ConversionUtil';
|
||||||
import { RepresentationConverter } from './RepresentationConverter';
|
import { RepresentationConverter } from './RepresentationConverter';
|
||||||
import type { RepresentationConverterArgs } from './RepresentationConverter';
|
import type { RepresentationConverterArgs } from './RepresentationConverter';
|
||||||
@ -10,12 +10,12 @@ export abstract class TypedRepresentationConverter extends RepresentationConvert
|
|||||||
/**
|
/**
|
||||||
* Gets the supported input content types for this converter, mapped to a numerical priority.
|
* Gets the supported input content types for this converter, mapped to a numerical priority.
|
||||||
*/
|
*/
|
||||||
public abstract getInputTypes(): Promise<RepresentationPreference>;
|
public abstract getInputTypes(): Promise<ValuePreferences>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the supported output content types for this converter, mapped to a numerical quality.
|
* Gets the supported output content types for this converter, mapped to a numerical quality.
|
||||||
*/
|
*/
|
||||||
public abstract getOutputTypes(): Promise<RepresentationPreference>;
|
public abstract getOutputTypes(): Promise<ValuePreferences>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifies whether this converter supports the input.
|
* Verifies whether this converter supports the input.
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
import type { Representation } from '../../../../src/ldp/representation/Representation';
|
import type { Representation } from '../../../../src/ldp/representation/Representation';
|
||||||
import { RepresentationMetadata } from '../../../../src/ldp/representation/RepresentationMetadata';
|
import { RepresentationMetadata } from '../../../../src/ldp/representation/RepresentationMetadata';
|
||||||
import type { RepresentationPreferences } from '../../../../src/ldp/representation/RepresentationPreferences';
|
import type {
|
||||||
|
ValuePreferences,
|
||||||
|
RepresentationPreferences,
|
||||||
|
} from '../../../../src/ldp/representation/RepresentationPreferences';
|
||||||
import { ChainedConverter } from '../../../../src/storage/conversion/ChainedConverter';
|
import { ChainedConverter } from '../../../../src/storage/conversion/ChainedConverter';
|
||||||
import { supportsConversion } from '../../../../src/storage/conversion/ConversionUtil';
|
import { supportsConversion } from '../../../../src/storage/conversion/ConversionUtil';
|
||||||
import type { RepresentationConverterArgs } from '../../../../src/storage/conversion/RepresentationConverter';
|
import type { RepresentationConverterArgs } from '../../../../src/storage/conversion/RepresentationConverter';
|
||||||
@ -8,20 +11,20 @@ import { TypedRepresentationConverter } from '../../../../src/storage/conversion
|
|||||||
import { CONTENT_TYPE } from '../../../../src/util/Vocabularies';
|
import { CONTENT_TYPE } from '../../../../src/util/Vocabularies';
|
||||||
|
|
||||||
class DummyConverter extends TypedRepresentationConverter {
|
class DummyConverter extends TypedRepresentationConverter {
|
||||||
private readonly inTypes: Record<string, number>;
|
private readonly inTypes: ValuePreferences;
|
||||||
private readonly outTypes: Record<string, number>;
|
private readonly outTypes: ValuePreferences;
|
||||||
|
|
||||||
public constructor(inTypes: Record<string, number>, outTypes: Record<string, number>) {
|
public constructor(inTypes: ValuePreferences, outTypes: ValuePreferences) {
|
||||||
super();
|
super();
|
||||||
this.inTypes = inTypes;
|
this.inTypes = inTypes;
|
||||||
this.outTypes = outTypes;
|
this.outTypes = outTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getInputTypes(): Promise<Record<string, number>> {
|
public async getInputTypes(): Promise<ValuePreferences> {
|
||||||
return this.inTypes;
|
return this.inTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getOutputTypes(): Promise<Record<string, number>> {
|
public async getOutputTypes(): Promise<ValuePreferences> {
|
||||||
return this.outTypes;
|
return this.outTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user