@avonjs/avonjs
Version:
A fluent Node.js API generator.
100 lines (99 loc) • 3.39 kB
TypeScript
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;
}