import type { StrapiFilterRequestParam, StrapiLocale, StrapiRequestParamField, StrapiRequestParamPopulate, StrapiRequestParamSort } from '.'; export interface Strapi4Error { error: { status: number; name: string; message: string; details: Record; }; } export interface PaginationByPage { page: number; pageSize: number; withCount?: boolean; } export interface PaginationByOffset { start: number; limit: number; withCount?: boolean; } export interface Strapi4RequestParams { fields?: Array>; populate?: Strapi4RequestPopulateParam; sort?: StrapiRequestParamSort | Array>; pagination?: PaginationByOffset | PaginationByPage; filters?: StrapiFilterRequestParam; publicationState?: 'live' | 'preview'; locale?: StrapiLocale; } export type Strapi4RequestPopulateParams = Pick, 'fields' | 'sort' | 'populate' | 'filters'>; export type Strapi4RequestPopulateParam = '*' | { [K in keyof T]?: T[K] extends object ? T[K] extends Array ? Strapi4RequestPopulateParam | Strapi4RequestPopulateParams : Strapi4RequestPopulateParam | Strapi4RequestPopulateParams : never; } | StrapiRequestParamPopulate | Array>; export interface Strapi4ResponseData { id: number; attributes: T; meta: Record; } export interface Strapi4Response { data: Strapi4ResponseData | Strapi4ResponseData[]; meta: Strapi4ResponseMeta; } export interface Strapi4ResponseSingle { data: Strapi4ResponseData; meta: Strapi4ResponseMeta; } export interface Strapi4ResponseMany { data: Strapi4ResponseData[]; meta: Strapi4ResponseMeta; } export interface Strapi4ResponseMeta { pagination: MetaResponsePaginationByPage | MetaResponsePaginationByOffset; [key: string]: unknown; } export interface MetaResponsePaginationByPage { page: number; pageSize: number; pageCount: number; total: number; } export interface MetaResponsePaginationByOffset { start: number; limit: number; total: number; }