UNPKG

ts-japi

Version:

A highly-modular (typescript-friendly)-framework agnostic library for serializing data to the JSON:API specification

67 lines 3.63 kB
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