ts-japi
Version:
A highly-modular (typescript-friendly)-framework agnostic library for serializing data to the JSON:API specification
67 lines • 3.63 kB
TypeScript
import { RelatorOptions } from '../interfaces/relator.interface';
import { SerializerOptions } from '../interfaces/serializer.interface';
import Link from '../models/link.model';
import Meta from '../models/meta.model';
import Relationship from '../models/relationship.model';
import ResourceIdentifier from '../models/resource-identifier.model';
import Resource from '../models/resource.model';
import { Dictionary, nullish } from '../types/global.types';
import { Helpers } from '../utils/serializer.utils';
import Serializer from './serializer';
/**
* The {@link Relator} class is used to generate top-level [included data](https://jsonapi.org/format/#document-top-level)
* as well as resource-level [relationships](https://jsonapi.org/format/#document-resource-object-relationships).
*
* Example:
* ```typescript
* [[include:relator.example.ts]]
* ```
*/
export default class Relator<PrimaryType, RelatedType extends Dictionary<any> = any> {
/**
* Default options. Can be edited to change default options globally.
*/
static defaultOptions: {
linkers: {};
};
/**
* Options for relator.
*/
private options;
relatedName: string;
private internalSerializer;
private _serializer;
/**
* Creates a {@link Relator}.
*
* @param fetch - Fetches related data from primary data.
* @param serializer - The `Serializer` to use for related data.
* @param options - Options for the relator.
*/
constructor(fetch: (data: PrimaryType) => Promise<RelatedType | RelatedType[] | nullish>, serializer: Serializer<RelatedType>, options?: Partial<RelatorOptions<PrimaryType, RelatedType>>);
/**
* Creates a {@link Relator}.
*
* @param fetch - Fetches related data from primary data.
* @param serializer - A getter for the `Serializer` to use for related data.
* @param options - Options for the relator, a `relatedName` is required
* as it cannot always be loaded from the serializer.
*/
constructor(fetch: (data: PrimaryType) => Promise<RelatedType | RelatedType[] | nullish>, serializer: () => Serializer<RelatedType>, options: Partial<RelatorOptions<PrimaryType, RelatedType>> & Required<Pick<RelatorOptions<PrimaryType, RelatedType>, 'relatedName'>>);
get serializer(): Serializer<RelatedType>;
/** @internal Gets related data from primary data. */
getRelatedData: (data: PrimaryType) => Promise<RelatedType | RelatedType[] | nullish>;
/** @internal Gets related relators */
getRelatedRelators(): Record<string, Relator<RelatedType, any>> | undefined;
/** @internal Creates related identifiers */
getRelatedIdentifier(data: RelatedType, options?: SerializerOptions<RelatedType> | undefined): ResourceIdentifier;
/** @internal Creates related resources */
getRelatedResource(data: RelatedType, options?: Partial<SerializerOptions<RelatedType>>, helpers?: Helpers<RelatedType>, relatorDataCache?: Map<Relator<any>, Dictionary<any>[]>): Promise<Resource<RelatedType>>;
/** @internal Gets related links from primary data and related data */
getRelatedLinks(data: PrimaryType, relatedData: RelatedType | RelatedType[] | nullish): Dictionary<nullish | Link> | undefined;
/** @internal Gets related meta from primary data and related data */
getRelatedMeta(data: PrimaryType, relatedData: RelatedType | RelatedType[] | nullish): Meta | undefined;
/** @internal Creates a {@link Relationship}. */
getRelationship(data: PrimaryType, relatedDataCache?: Dictionary<any>[]): Promise<Relationship | undefined>;
}
//# sourceMappingURL=relator.d.ts.map