@web-atoms/core
Version:
262 lines • 6.59 kB
TypeScript
import { AjaxOptions } from "./AjaxOptions";
import { App } from "../../App";
import { CacheSeconds } from "../CacheService";
import { IJsonParserOptions, JsonService } from "../JsonService";
export interface IHttpHeaders {
[key: string]: string;
}
export interface IApiResponse<T> {
headers?: IHttpHeaders;
value?: T;
}
export interface IMethodOptions {
/**
* Cache value retrieved from server in JavaScript runtime for
* given seconds
*/
jsCacheSeconds?: CacheSeconds<any>;
/**
* Accept header, application/json if not set
*/
accept?: string;
/**
* Other headers to pass along with the request
*/
headers?: IHttpHeaders;
/**
* JsonService options to use with this request, use this only if naming strategy
* is different for this request
*/
jsonOptions?: IJsonParserOptions;
/**
* If you want to inspect response headers, pass this true, but make sure you have
* return type as IApiResponse<T>
*/
returnHeaders?: boolean;
}
export type RestAttr = (target: BaseService, propertyKey: string | symbol, parameterIndex: number) => void;
export type RestParamAttr = (key: string, defaultValue?: any) => RestAttr;
export type RestMethodAttr = (key: string, options?: IMethodOptions) => (target: BaseService, propertyKey: string | symbol, descriptor: any) => void;
/**
* This will register Url path fragment on parameter.
*
* @example
*
* @Get("/api/products/{category}")
* async getProducts(
* @Path("category") category: number
* ): Promise<Product[]> {
* }
*
* @export
* @function Path
* @param {name} - Name of the parameter
*/
export declare const Path: RestParamAttr;
/**
* This will register header on parameter.
*
* @example
*
* @Get("/api/products/{category}")
* async getProducts(
* @Header("x-http-auth") category: number
* ): Promise<Product[]> {
* }
*
* @export
* @function Path
* @param {name} - Name of the parameter
*/
export declare const Header: RestParamAttr;
/**
* This will register Url query fragment on parameter.
*
* @example
*
* @Get("/api/products")
* async getProducts(
* @Query("category") category: number
* ): Promise<Product[]> {
* }
*
* @export
* @function Query
* @param {name} - Name of the parameter
*/
export declare const Query: RestParamAttr;
/**
* This will register Url query fragments on parameter of type object
*
* @example
*
* @Get("/api/products")
* async getProducts(
* @Queries queries: { [key: string]: string | number | boolean | null }
* ): Promise<Product[]> {
* return null;
* }
*/
export declare const Queries: RestAttr;
/**
* This will register data fragment on ajax.
*
* @example
*
* @Post("/api/products")
* async getProducts(
* @Query("id") id: number,
* @Body product: Product
* ): Promise<Product[]> {
* }
*
* @export
* @function Body
*/
export declare const Body: RestAttr;
export declare const RawBody: RestAttr;
/**
* This will register data fragment on ajax in old formModel way.
*
* @example
*
* @Post("/api/products")
* async getProducts(
* @Query("id") id: number,
* @BodyFormModel product: Product
* ): Promise<Product[]> {
* }
*
* @export
* @function BodyFormModel
*/
export declare const BodyFormModel: RestAttr;
export declare const XmlBody: RestAttr;
/**
* Http Post method
* @example
*
* @Post("/api/products")
* async saveProduct(
* @Body product: Product
* ): Promise<Product> {
* }
*
* @export
* @function Post
* @param {url} - Url for the operation
*/
export declare const Post: RestMethodAttr;
/**
* Http Get Method
*
* @example
*
* @Get("/api/products/{category}")
* async getProducts(
* @Path("category") category?:string
* ): Promise<Product[]> {
* }
*
* @export
* @function Body
*/
export declare const Get: RestMethodAttr;
/**
* Http Delete method
* @example
*
* @Delete("/api/products")
* async deleteProduct(
* @Body product: Product
* ): Promise<Product> {
* }
*
* @export
* @function Delete
* @param {url} - Url for the operation
*/
export declare const Delete: RestMethodAttr;
/**
* Http Put method
* @example
*
* @Put("/api/products")
* async saveProduct(
* @Body product: Product
* ): Promise<Product> {
* }
*
* @export
* @function Put
* @param {url} - Url for the operation
*/
export declare const Put: RestMethodAttr;
/**
* Http Patch method
* @example
*
* @Patch("/api/products")
* async saveProduct(
* @Body product: any
* ): Promise<Product> {
* }
*
* @export
* @function Patch
* @param {url} - Url for the operation
*/
export declare const Patch: RestMethodAttr;
/**
* Cancellation token
* @example
*
* @Put("/api/products")
* async saveProduct(
* @Body product: Product
* @Cancel cancel: CancelToken
* ): Promise<Product> {
* }
*
* @export
* @function Put
* @param {url} - Url for the operation
*/
export declare function Cancel(target: BaseService, propertyKey: string | symbol, parameterIndex: number): void;
export declare class ServiceParameter {
readonly type: string;
readonly key: string;
readonly defaultValue?: any;
constructor(type: string, key: string, defaultValue?: any);
}
export default function BaseUrl(baseUrl: string): ((target: any) => void);
/**
*
*
* @export
* @class BaseService
*/
export declare class BaseService {
protected readonly app: App;
readonly jsonService: JsonService;
static baseUrls: {
[key: string]: string;
};
baseUrl: string;
testMode: boolean;
showProgress: boolean;
showError: boolean;
methods: any;
methodReturns: any;
jsonOptions: IJsonParserOptions;
headers: {
[key: string]: string | number | null | undefined;
};
constructor(app: App, jsonService: JsonService);
protected encodeData(o: AjaxOptions): AjaxOptions;
protected sendResult(result: any, error?: any): Promise<any>;
protected invoke(url: string, method: string, bag: ServiceParameter[], values: any[], methodOptions: IMethodOptions): Promise<any>;
protected parseHeaders(headers: string | any): IHttpHeaders;
protected ajax(url: string, options: AjaxOptions): Promise<AjaxOptions>;
}
//# sourceMappingURL=RestService.d.ts.map