coloquent-test2
Version:
Library for retrieving model objects from a JSON-API, with a fluent syntax inspired by Laravel Eloquent.
108 lines (107 loc) • 4.53 kB
TypeScript
import { Builder } from "./Builder";
import { JsonApiDoc } from "./JsonApiDoc";
import { PluralResponse } from "./response/PluralResponse";
import { SingularResponse } from "./response/SingularResponse";
import { PaginationStrategy } from "./PaginationStrategy";
import { SaveResponse } from "./response/SaveResponse";
import { ToManyRelation } from "./relation/ToManyRelation";
import { ToOneRelation } from "./relation/ToOneRelation";
import { HttpClient } from "./httpclient/HttpClient";
export declare abstract class Model {
private type;
/**
* @type {string} The JSON-API type, choose plural, lowercase alphabetic only, e.g. 'artists'
*/
protected abstract jsonApiType: string;
/**
* @type {number} the page size
*/
protected static pageSize: number;
/**
* @type {PaginationStrategy} the pagination strategy
*/
protected static paginationStrategy: PaginationStrategy;
/**
* @type {string} The number query parameter name. By default: 'page[number]'
*/
protected static paginationPageNumberParamName: string;
/**
* @type {string} The size query parameter name. By default: 'page[size]'
*/
protected static paginationPageSizeParamName: string;
/**
* @type {string} The offset query parameter name. By default: 'page[offset]'
*/
protected static paginationOffsetParamName: string;
/**
* @type {string} The limit query parameter name. By default: 'page[limit]'
*/
protected static paginationLimitParName: string;
private id;
private relations;
private attributes;
private httpClient;
protected readOnlyAttributes: string[];
protected dates: {
[key: string]: string;
};
private static dateFormatter;
constructor();
private initHttpClient();
static get(page?: number): Promise<PluralResponse>;
static first(): Promise<SingularResponse>;
static find(id: string | number): Promise<SingularResponse>;
static with(attribute: any): Builder;
static where(attribute: string, value: string): Builder;
static orderBy(attribute: string, direction?: string): Builder;
static option(queryParameter: string, value: string): Builder;
save(): Promise<SaveResponse>;
create(): Promise<SaveResponse>;
delete(): Promise<void>;
/**
* @returns {string} e.g. 'http://www.foo.com/bar/'
*/
abstract getJsonApiBaseUrl(): string;
/**
* Allows you to get the current HTTP client (AxiosHttpClient by default), e.g. to alter its configuration.
* @returns {HttpClient}
*/
getHttpClient(): HttpClient;
/**
* Allows you to use any HTTP client library, as long as you write a wrapper for it that implements the interfaces
* HttpClient, HttpClientPromise and HttpClientResponse.
* @param httpClient
*/
setHttpClient(httpClient: HttpClient): void;
getJsonApiType(): string;
populateFromJsonApiDoc(jsonApiDoc: JsonApiDoc): void;
static getPageSize(): number;
static getPaginationStrategy(): PaginationStrategy;
static getPaginationPageNumberParamName(): string;
static getPaginationPageSizeParamName(): string;
static getPaginationOffsetParamName(): string;
static getPaginationLimitParamName(): string;
protected getRelation(relationName: string): any;
setRelation(relationName: string, value: any): void;
getAttributes(): {
[key: string]: any;
};
protected getAttribute(attributeName: string): any;
protected getAttributeAsDate(attributeName: string): any;
private isDateAttribute(attributeName);
protected setAttribute(attributeName: string, value: any): void;
/**
* We use a single instance of DateFormatter, which is stored as a static property on Model, to minimize the number
* of times we need to instantiate the DateFormatter class. By using this getter a DateFormatter is instantiated
* only when it is used at least once.
*
* @returns DateFormatter
*/
private static getDateFormatter();
getApiId(): string;
setApiId(id: string): void;
protected hasMany(relatedType: typeof Model): ToManyRelation;
protected hasMany(relatedType: typeof Model, relationName: string): ToManyRelation;
protected hasOne(relatedType: typeof Model): ToOneRelation;
protected hasOne(relatedType: typeof Model, relationName: string): ToOneRelation;
}