UNPKG

@avonjs/avonjs

Version:

A fluent Node.js API generator.

100 lines (99 loc) 3.39 kB
import { Collection } from 'collect.js'; import type { AnyRecord, AnyValue, Model, OpenApiSchema, Optional } from '../Contracts'; import { type Field, Lazy } from '../Fields'; import Relation from '../Fields/Relation'; import type AvonRequest from '../Http/Requests/AvonRequest'; export default class FieldCollection<TItem extends Field = Field> extends Collection<TItem> { /** * Find a given field by its attribute. */ findFieldByAttribute(attribute: string, defaultValue?: AnyValue): Optional<TItem>; /** * Resolve value of fields. */ resolve(resource: Model): FieldCollection<TItem>; /** * Resolve value of fields for display. */ resolveForDisplay(resource: Model): FieldCollection<TItem>; /** * Remove non-creation fields from the collection. */ onlyCreationFields(request: AvonRequest): FieldCollection<TItem>; /** * Remove non-update fields from the collection. */ onlyUpdateFields(request: AvonRequest, resource: Model): FieldCollection<TItem>; /** * Filter fields for showing on index. */ filterForIndex(request: AvonRequest, resource: Model): FieldCollection<TItem>; /** * Filter fields for showing on detail. */ filterForDetail(request: AvonRequest, resource: Model): FieldCollection<TItem>; /** * Filter fields for showing on review. */ filterForReview(request: AvonRequest, resource: Model): FieldCollection<TItem>; /** * Filter fields for showing on review. */ filterForAssociation(request: AvonRequest): FieldCollection<TItem>; /** * Reject if the field supports Filterable Field. */ withOnlyFilterableFields(): FieldCollection<Field>; /** * Reject if the field supports Orderable Field. */ withOnlyOrderableFields(): FieldCollection<Field>; /** * Reject if the field not supports Relatable Field. */ withOnlyRelatableFields(): FieldCollection<Relation>; /** * Reject if the field not supports Relatable Field and not eager loaded. */ onlyLoadedRelatableFields(): FieldCollection<Relation>; /** * Reject if the field is relatable Field. */ withoutRelatableFields(): FieldCollection<TItem>; /** * Reject if the field not supports Lazy Field. */ withOnlyLazyFields(): FieldCollection<Lazy>; /** * Reject if the field not supports Lazy Field and not eager loaded. */ onlyLoadedLazyFields(): FieldCollection<Lazy>; /** * Reject if the field is Lazy Field. */ withoutLazyFields(): FieldCollection<TItem>; /** * Reject if the field is relatable Field. */ withoutUnfillableFields(): FieldCollection<TItem>; /** * Reject if the field is relatable Field. */ withoutUnresolvableFields(): FieldCollection<TItem>; /** * Filter elements should be displayed for the given request. */ authorized(request: AvonRequest): FieldCollection<TItem>; /** * Transform fields to open api valid schema. */ payloadSchemas(request: AvonRequest): Record<string, OpenApiSchema>; /** * Transform fields to open api valid schema. */ responseSchemas(request: AvonRequest): Record<string, OpenApiSchema>; /** * Transform fields to object by values. */ fieldValues(request: AvonRequest): AnyRecord; }