import { Observable } from 'rxjs';
import { HalOptions } from '../services/rest.service';
import { SubTypeBuilder } from './subtype-builder';
import * as i0 from "@angular/core";
export declare type Link = {
    href: string;
    templated?: boolean;
};
export declare type Links = {
    [key: string]: Link;
};
export declare abstract class Resource {
    proxyUrl: string;
    rootUrl: string;
    _links: any;
    _subtypes: Map<string, any>;
    get subtypes(): Map<string, any>;
    set subtypes(_subtypes: Map<string, any>);
    constructor();
    uri(): string;
    relURI(rel: string): string;
    getRelation<T extends Resource>(type: {
        new (): T;
    }, relation: string, builder?: SubTypeBuilder, expireMs?: number, isCacheActive?: boolean): Observable<T>;
    addRelations<T extends Resource>(relation: string, resources: T[]): Observable<any>;
    replaceRelations<T extends Resource>(relation: string, resources: T[]): Observable<any>;
    getRelationArray<T extends Resource>(type: {
        new (): T;
    }, relation: string, _embedded?: string, options?: HalOptions, builder?: SubTypeBuilder, expireMs?: number, isCacheActive?: boolean): Observable<T[]>;
    getProjection<T extends Resource>(type: {
        new (): T;
    }, resource: string, id: string, projectionName: string, expireMs?: number, isCacheActive?: boolean): Observable<T>;
    getProjectionArray<T extends Resource>(type: {
        new (): T;
    }, resource: string, projectionName: string, expireMs?: number, isCacheActive?: boolean): Observable<T[]>;
    private getResourceUrl;
    private getRelationLinkHref;
    private existRelationLink;
    addRelation<T extends Resource>(relation: string, resource: T): Observable<any>;
    postRelation<T extends Resource>(relation: string, type: {
        new (): T;
    }, resource?: T): Observable<T>;
    updateRelation<T extends Resource>(relation: string, resource: T): Observable<any>;
    substituteRelation<T extends Resource>(relation: string, resource: T): Observable<any>;
    deleteRelation<T extends Resource>(relation: string, resource: T): Observable<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<Resource, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<Resource>;
}
