UNPKG

ts-japi

Version:

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

67 lines 3.67 kB
import type { RelatorOptions } from "../interfaces/relator.interface"; import type { SerializerOptions } from "../interfaces/serializer.interface"; import type Link from "../models/link.model"; import type Meta from "../models/meta.model"; import Relationship from "../models/relationship.model"; import type Resource from "../models/resource.model"; import type ResourceIdentifier from "../models/resource-identifier.model"; import type { Dictionary, nullish } from "../types/global.types"; import type { 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