import { HttpClient, HttpResponse, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs';
import { ServiceDecoratorOptions, ModelDecoratorOptions } from './decorators/option.interfaces';
import { ResourceBase } from './resource-base.model';
import { JsonapiResponse } from './interfaces/jsonapi.interface';
import { Scope } from './scope';
import { SortScope, FieldScope, FilterScope, StatsScope, IncludeScope } from './interfaces/query.interface';
export interface Response extends HttpResponse<JsonapiResponse> {
}
export declare abstract class JsonapiBaseService<T extends ResourceBase> {
    protected http: HttpClient;
    abstract baseUrl: string;
    abstract className: any;
    constructor(http: HttpClient);
    all(options?: {
        params?: HttpParams;
    }): Observable<T[]>;
    all(options: {
        params?: HttpParams;
        metadata: true;
    }): Observable<{
        data: T[];
        meta: any;
    }>;
    find(id: string, params?: HttpParams): Observable<T>;
    save(model: T): Observable<T>;
    delete(id: string): Observable<any>;
    protected extractMeta(response: Response): Record<string, any>;
    protected extract(response: Response): T | T[];
    protected deserializeModel(data: any): T;
    protected handleError(error: any): Observable<any>;
    protected buildUrl(id?: string): string;
    private getModelType;
    getModelConfig(): ModelDecoratorOptions;
    getServiceConfig(): ServiceDecoratorOptions;
    protected successful(response: Response): Response;
    page(pageNumber: number): Scope<T>;
    per(size: number): Scope<T>;
    where(clause: FilterScope): Scope<T>;
    stats(clause: StatsScope): Scope<T>;
    order(clause: SortScope | string): Scope<T>;
    select(clause: FieldScope | string | string[]): Scope<T>;
    includes(clause: IncludeScope): Scope<T>;
}
