pdd
Version:
PDD Framework
735 lines (717 loc) • 22.2 kB
TypeScript
declare type UtilityFunction<T = any, K = any> = (...args: T[]) => K | typeof Function;
declare type UtilityObject = Record<any, any>;
interface UtilityClass {
new <T>(...items: T[]): T[];
}
interface ClassConstructor {
new <T>(...items: T[]): T[];
}
/**
* Class Container
* @description zh-CN 容器类,所有需要注入到核心容器的方法或者类都源于此
* @author SunnyXu <xy@ztes.com>
*/
declare class Container {
protected static instance: Container | null;
protected instances: Map<any, any>;
protected bindings: Record<string, any>;
protected aliases: Record<string, any>;
/**
* method bind
* @description zh-CN 绑定方法
* @param abstract
* @param concrete
*/
bind(abstract: string | string[], concrete: any): void;
/**
* make 创建类的实例/获取对象 create instance/object
* @param abstract
* @param params
* @param shared
*/
make(abstract: string, params?: Record<string, any> | [], shared?: boolean): any;
/**
* makeClass 创建类
* @param name
* @param Executor
* @param params
* @param shared
*/
protected makeClass(name: string, Executor: ClassConstructor, params: unknown, shared?: boolean): any;
/**
* makeFunc 创建函数
* @param name
* @param executor
* @param params
* @param shared
* @protected
*/
protected makeFunc(name: string, executor: CallableFunction, params: unknown, shared?: boolean): any;
/**
* has as existence
* 是否存在标识 existence 的别名
* @param {String} name
*/
has(name: string): boolean;
/**
* existence 存在标识
* @param {String} name
*/
existence(name: string): boolean;
/**
* getAlias 获取别名
* @param abstract
*/
getAlias(abstract: string): any;
/**
* get 获取实例
* @param abstract
*/
get(abstract: string): any;
/**
* singleton 单例
* @param abstract
* @param concrete
*/
singleton(abstract: string, concrete: any): void;
/**
* getInstance 获取实例
*
*/
static getInstance<Instance extends Container>(): Container | Instance;
/**
* proxyInstance 代理实例
*
*/
protected proxyInstance(): this;
}
/**
* Service provider
* @description zh-CN: 服务提供者用于注册服务到容器中,该类为抽象类,所有方法需实现
*/
declare abstract class ServiceProvider {
protected app: ApplicationInterface;
/**
* constructor
* @param app zh-CN: 应用实例
* @description zh-CN: 实例化过程中会自动注册该实例到容器中
*/
constructor(app: ApplicationInterface);
/**
* abstract register
* @description zh-CN: 抽象注册方法需实现
* @returns void
*/
abstract register(): void;
}
/**
* Interface Container
* @description 容器接口
*/
interface ContainerInterface {
/**
* bind 绑定实体
* @param {String|Array} abstract
* @param {*} concrete
*/
bind(abstract: string | string[], concrete: any): void;
/**
* make 创建类的实例/获取对象 create instance/object
* @param abstract
* @param params
* @param shared
*/
make(abstract: string, params?: object | [], shared?: boolean): any;
/**
* has as existence
* 是否存在标识 existence 的别名
* @param {String} name
*/
has(name: string): boolean;
/**
* existence 存在标识
* @param {String} name
*/
existence(name: string): boolean;
/**
* getAlias 获取别名
* @param abstract
*/
getAlias(abstract: string): string;
/**
* get 获取实例
* @param abstract
*/
get(abstract: string): any;
/**
* singleton 单例
* @param abstract
* @param concrete
*/
singleton(abstract: string, concrete: any): void;
}
/**
* Interface Application
* @description 应用接口
*/
interface ApplicationInterface extends ContainerInterface {
/**
* getterProviders Providers 获取器
*/
getterProviders(): any[];
/**
* setterProviders Providers
* 设置器
* @param providers
*/
setterProviders<T>(providers: T[]): void;
/**
* static getAdapter
* 适配器 获取器
* @param adapter
*/
getterAdapter(adapter: UtilityClass): any;
/**
* setAdapter
* 新增
* @param adapter
* @param instance
* @protected
*/
setterAdapter(adapter: UtilityClass, instance: UtilityObject): void;
}
declare type HttpRequestMethod = 'post' | 'get' | 'put' | 'delete' | 'POST' | 'GET' | 'PUT' | 'DELETE';
declare type HttpContentType = 'REQUEST_PAYLOAD' | 'JSON' | 'FORM_DATA';
declare type HttpHairstyleMethod = [HttpRequestMethod, HttpContentType];
declare type HttpAutoCarryData = 'REQUEST_HEADERS' | 'REQUEST_DATA';
declare type HttpApi = [string, (HttpRequestMethod | [HttpRequestMethod, HttpContentType])?, (true | false | undefined)?, (true | false | undefined)?];
interface HttpApiMap {
[api: string]: HttpApi;
}
declare type IHttpSendConfig = {
host?: string;
headers?: Record<string, any>;
mode?: HttpContentType;
responseData?: boolean;
};
declare type HttpResponseData = {
code: number;
msg: string;
data: any;
timestamp?: number;
};
interface HttpResponse extends Response {
data: HttpResponseData;
[key: string]: any;
}
declare type HelperHttp = <T extends HttpApi | string>(api: T, data?: Record<any, any>, headers?: Record<string, string | number>) => Promise<T[3] extends true ? HttpResponse : HttpResponseData>;
declare type HelperHttpApi = HttpApi | string;
declare type HelperHttpData = Record<any, any>;
declare type HelperHttpHeaders = Record<string, string | number>;
declare type HelperHttpExtra = Record<string, string | number>;
declare type HelperHttpReturn<T extends HelperHttpApi> = T[3] extends true ? HttpResponse : HttpResponseData;
interface HelperInterface {
env(): Record<any, any>;
storage(name: string): Record<any, any>;
storage(name: string, payload?: any): void;
cookies(name: string): Record<any, any>;
cookies(name: string, payload?: any): void;
session(name: string): Record<any, any>;
session(name: string, payload?: any): void;
/**
* 发送一个http请求
* @param api 接口
* @param data 请求数据
* @param headers 自定义头
* @param extra 额外的参数
*/
http<T extends HelperHttpApi>(api: T, data?: HelperHttpData, headers?: HelperHttpHeaders, extra?: HelperHttpExtra): Promise<HelperHttpReturn<T>>;
fetch(api: string | HttpApi, data?: UtilityObject, headers?: Record<string, string | number>): Promise<HttpResponse>;
send(api: string | HttpApi, data?: UtilityObject, handle?: (response: HttpResponse) => void, config?: IHttpSendConfig, returnResponse?: boolean): Promise<HttpResponse>;
}
/**
* Adapter Interface
*/
declare type RequestConfig = {
method?: HttpRequestMethod;
url?: string;
data?: Record<string, any>;
headers?: HeadersInit | Record<string, string | number>;
header?: HeadersInit | Record<string, string | number>;
[key: string]: any;
};
declare type IHttpAdapter<T> = (config: RequestConfig) => Promise<T>;
declare type IAxiosAdapterHttp<T> = (config: RequestConfig) => Promise<T>;
/**
* Service Interface
*/
interface IHttpService {
send(apiRoute: string, data: Record<string, any>, config?: IHttpSendConfig, returnResponse?: boolean): Promise<any>;
http<T extends HelperHttpApi>(api: T, data?: HelperHttpData, headers?: HelperHttpHeaders, extra?: HelperHttpExtra): Promise<HelperHttpReturn<T>>;
}
declare type IServiceProvider = typeof ServiceProvider;
declare type APP_CONFIG = {
PROVIDERS?: IServiceProvider[];
APP_TYPE: 'VUE' | 'REACT' | 'UNI_APP' | 'MP_VUE' | 'WX_APP';
HTTP_CONFIG: HTTP_CONFIG;
};
declare type HTTP_CONFIG = {
HTTP_ADAPTER: any;
HTTP_LIB: UtilityFunction | UtilityClass;
HTTP_API: any;
HTTP_HOST: string;
IS_RESTFUL: boolean;
CONTENT_TYPE: HttpContentType;
DATA_CARRYING: DATA_CARRYING;
REQUEST_MIDDLEWARE?: HttpMiddleware<any>;
RESPONSE_MIDDLEWARE?: HttpMiddleware<any>;
};
declare type DATA_CARRYING = {
REQUEST_DATA?: Record<any, any>;
REQUEST_HEADERS?: Record<any, any>;
};
declare type HttpMiddleware<T> = (context?: any) => void;
declare type HTTP_SERVICE_CONFIG = Pick<HTTP_CONFIG, 'HTTP_ADAPTER' | 'HTTP_API' | 'HTTP_HOST' | 'IS_RESTFUL' | 'CONTENT_TYPE' | 'DATA_CARRYING' | 'REQUEST_MIDDLEWARE' | 'RESPONSE_MIDDLEWARE'>;
interface IMiddleware<TContext> {
handle(context: TContext, next: UtilityFunction): void;
}
declare type HttpContext<T> = {
request: {
hairstyle: HttpApi;
body: Record<string, any>;
data: Record<string, any>;
auth: boolean;
headers: Record<string, string | number>;
method: HttpRequestMethod;
api: string;
url: string;
};
response: T;
};
/**
* Application 核心应用
* @extends Container
* @author SunnyXu <xy@ztes.com>
*/
declare class Application extends Container {
private static VERSION;
private adapters;
private providers;
/**
* lifecycle
* 生命周期
* @private
*/
private static lifecycle;
/**
* getterProviders Providers 获取器
*/
getterProviders(): IServiceProvider[];
/**
* getProviders
* 获取
* @protected
*/
private static getProviders;
/**
* setterProviders Providers
* 设置器
* @param providers
*/
setterProviders(providers: IServiceProvider[]): void;
/**
* setProviders
* 设置
* @param providers
*/
static setProviders(providers: IServiceProvider[]): void;
/**
* registerProvider
* @description 注册服务提供者
* @param Provider
*/
static registerProvider(Provider: any): void;
/**
* registerProviders
* 批量注册
* @param providers
*/
static registerProviders(providers: IServiceProvider[]): void;
/**
* config
* 配置
* @param {Object} config
* @param {String} name
*/
static setConfig(name: string, config: UtilityObject): void;
/**
* getConfig
* 获取
* @param name
* @param {Object} def 默认值
*/
static getConfig(name: string, def?: any): UtilityObject;
/**
* setAppConfig
* 设置App配置
* @param config
*/
static setAppConfig(config: APP_CONFIG): void;
/**
* getAppConfig
* 获取App配置
* @param name
* @description 遵守getAppConfig中参数值和返回值的约定
*/
static getAppConfig<T extends keyof APP_CONFIG>(name: T): APP_CONFIG[T];
/**
* bindAdapter
* @description zh-CN 绑定适配器
* @param Adapter
* @param payload
*/
static bindAdapter(Adapter: UtilityClass, payload?: UtilityObject): void;
/**
* setAdapter
* 新增
* @param adapter
* @param instance
* @protected
*/
setterAdapter(adapter: UtilityClass, instance: UtilityObject): void;
/**
* static getAdapter
* 获取适配器
* @param adapter 必须是个类
* @return instance
*/
static getAdapter(adapter: UtilityClass): any;
/**
* static getAdapter
* 适配器 获取器
* @param adapter
*/
getterAdapter(adapter: UtilityClass): any;
/**
* getService
* 获取服务实例
* @param serviceName
*/
static getService<T>(serviceName: string): T;
/**
* Application instance
* 获取应用实例
* @description 应该使用Proxy进行拦截,目前先放行
*/
static getInstance(): Application;
/**
* App run
* 框架应用运行
* @param {CallableFunction} callback
*/
static run(callback?: CallableFunction): void;
}
/**
* @description zh-CN 转换器类型
*/
declare type TransformData = Record<string, any> | Record<string, any>[];
declare type TransformFunc = (data: Record<string, any>) => any;
declare type Transform = (data: TransformData, func: TransformFunc) => any;
/**
* @abstract Class Command
* @description zh-CN 命令类,私有属性和方法都会携带$标识符
*/
declare abstract class Command {
protected $payload: any[];
protected $helper: HelperInterface;
protected $http: HelperInterface['http'];
constructor(...payload: any[]);
abstract handle(...args: any[]): any | Promise<any> | void;
/**
* zh-CN 转换器
* @description zh-CN 简单的转换器,高级转换器请使用Transformer
* @param data
* @param func
*/
protected $transform: Transform;
/**
* zh-CN 过滤空字段
* @param fields
* @protected
*/
protected $filterEmptyFields(fields: Record<string, any>): Record<string, any>;
}
declare type Callback = (item: Record<any, any>, index?: number) => Record<any, any>;
/**
* Class Transformer 转换器
* NewTransformer extends Transformer -> constructor(){super(data,payload)}
*/
declare class Transformer {
private readonly data;
private payload;
/**
* Method constructor
* @param {*} data 需处理的数据
* @param {*} payload 携带的载荷
* @returns
*/
constructor(data: any, payload?: unknown);
/**
* Method transform
* 转换方法
* @param {Object|String|Number} data
* @param tData
* @returns
*/
transform(data: any, tData?: any): any;
/**
* Method create
* 创建新数据
* @return {Array/Object|String|Number|*}
*/
create(callback?: Callback): any;
/**
* 格式化数字
* @param {String|Number} number 待处理数字
* @param {Number} places 小数点位数 -1为原样保留
* @param {String} thousand 千位字符串 默认为空
* @param {String} decimal 小数点替换字符 默认为.
* @return {String|Number}
*/
formatNumber(number: string | number, places?: number | string, thousand?: string, decimal?: string): string;
/**
* formatDate 日期格式化
* @param {string|number} timestamp
* @returns
*/
formatDate(timestamp?: number | string | unknown): Record<string, number | string>;
}
declare type variableType = 'string' | 'number' | 'object' | 'undefined' | 'function' | 'boolean' | 'bigInt' | 'symbol';
declare type TrimType = 'R' | 'L' | '';
/**
* Class Lib
* 基础函数库,Lodash、Underscore... So big
*/
declare class Lib {
/**
* typeOf 判断变量类型
* @param value
* @param type
*/
static typeOf<T>(value: unknown, type: variableType): value is T;
/**
* getTag 判断变量类型
* @param value
*/
static getTag(value: unknown): string;
/**
* isFunction 是否函数
* @param {Function} value
* @return {Boolean}
*/
static isFunction(value: unknown): value is typeof Function;
/**
* isString 是否字符串
* @param {String} value
* @return {Boolean}
*/
static isString(value: unknown): value is string;
/**
* isNumber 是否数字
* @param value
* @return {Boolean}
*/
static isNumber(value: unknown): value is number;
/**
* isObject 是否对象
* @param {Object} value
*/
static isObject(value: unknown): value is Record<any, any>;
/**
* isObject 是否Undefined
* @param {*} value
* @return boolean
*/
static isUndefined(value: unknown): boolean;
/**
* isNull 是否Null
* @param value
*/
static isNull(value: unknown): boolean;
/**
* isEmpty 是否空
* 目前只对 null undefined '' {} [] 做处理
* @param value
*/
static isEmpty(value: unknown): boolean;
/**
* isClass 是否类
* @param value
*/
static isClass(value: unknown): boolean;
/**
* 字符串去除首尾字符
* @param str 字符串
* @param char 字符
* @param type 类型
*/
static strTrim(str: string, char: string, type?: TrimType): string;
}
declare abstract class HttpAdapterInterface<T> {
protected http: IHttpAdapter<T>;
protected method: HttpRequestMethod;
protected url: string;
protected data: {};
protected headers: {};
protected extra: {};
/**
* Method constructor 注入Axios
* @param {*} $function
* @returns
*/
protected constructor($function: IHttpAdapter<T>);
/**
* Method setConfig
* 设置配置信息
* @param {method,url,data,headers} param
*/
setConfig({ method, url, data, headers, extra }: RequestConfig): void;
/**
* Method request
* @returns Promise
*/
request(): Promise<unknown>;
}
/**
* Class AxiosAdapter
* @description axios适配器,适配器主要完成
*/
declare class AxiosAdapter extends HttpAdapterInterface<{}> {
/**
* Method request
* @returns Promise
*/
request(): Promise<unknown>;
}
/**
* Class UniRequestAdapter
* @description uni.request请求适配器,适配器主要完成
*/
declare class UniRequestAdapter extends HttpAdapterInterface<{}> {
/**
* Method request
* @returns Promise
*/
request(): Promise<unknown>;
}
declare function $http<T extends HelperHttpApi>(api: T, data: HelperHttpData, headers?: HelperHttpHeaders, extra?: HelperHttpExtra): Promise<HelperHttpReturn<T>>;
declare function isArray(obj: any): obj is any[];
declare function isNull(obj: any): obj is null;
declare function isBoolean(obj: unknown): obj is boolean;
declare function isObject(obj: any): obj is Record<string, unknown>;
declare const isPromise: <T>(obj: unknown) => obj is Promise<T>;
declare function isString(obj: any): obj is string;
declare function isNumber(obj: any): obj is number;
declare function isRegExp(obj: any): boolean;
declare function isDate(obj: any): boolean;
declare function isColor(color: any): boolean;
declare function isUndefined(obj: any): obj is undefined;
declare function isFunction(obj: any): obj is (...args: any[]) => any;
declare function isClass(value: unknown): boolean;
declare function isEmptyObject(obj: any): boolean;
declare function isEmpty(obj: any): boolean;
declare function isExist(obj: any): boolean;
declare function isWindow(el: any): el is Window;
declare function isPhone(phone: unknown): boolean;
declare function isEmail(email: unknown): boolean;
declare class EventBus {
_events: Map<any, any>;
static _instance: InstanceType<typeof EventBus>;
/**
* 获取EventBus实例
* @return {EventBus}
*/
static getInstance(): EventBus;
/**
* EventBus.getEvents
* @return {Map<any, any>}
*/
static getEvents(): Map<any, any>;
static getEventsSize(): number;
static getEvent(name: string): any;
static hasEvent(name: string): boolean;
static deleteEvent(name: string): boolean;
/**
* Method EventBus.setEvent
* @param name
* @param callback
* @return {Map<any, any>}
*/
static setEvent(name: string, callback: CallableFunction): Map<any, any>;
/**
* Method EventBus.on as EventBus.setEvent
* 绑定事件
* @param name
* @param callback
* @return {Map<*, *>}
*/
static on(name: string, callback: CallableFunction): Map<any, any>;
/**
* Method EventBus.emit
* 执行事件
* @param name
* @param payload
* @return {*}
*/
static emit(name: string, ...payload: any[]): any;
/**
* Method EventBus.once
* 执行事件并关闭事件
* @param name
* @param payload
*/
static once(name: string, ...payload: any[]): void;
/**
* EventBus.off
* 关闭事件
* @param name
* @return {boolean}
*/
static off(name: string): boolean;
}
/**
* Exception Class
* 目前原生的错误类型
* Error [一般错误类型]
* SyntaxError [语法错误]
* ReferenceError [不存在的变量]
* RangeError [超出有效范围]
* TypeError [非预期类型]
* URIError [URI参数错误]
* EvalError [eval函数没有正确执行]
* Example: throw new Exception() catch(error) error.name,error.message,error.code,error.stack
*/
declare class Exception extends Error {
name: string;
message: string;
code: number;
/**
*
* @param {String} name 错误名称
* @param {String} message 错误提示
* @param {Number} code 错误码
*/
constructor(name: string, message: string, code?: number);
}
/**
* 将对象转换为查询字符串
* @param jsonData
* @param jsonDataKey
* @returns
*/
declare function queryStringify(jsonData: Record<string, any>, jsonDataKey?: string): string;
declare function defineAppConfig(config: APP_CONFIG): APP_CONFIG;
declare function defineHttpConfig<T>(config: HTTP_CONFIG | T): HTTP_CONFIG | T;
declare function defineHttpApis(apis: HttpApiMap): HttpApiMap;
declare function defineHttpApiMap(apiMap: HttpApiMap): HttpApiMap;
export { $http, APP_CONFIG, ApplicationInterface, AxiosAdapter, Command, Container, ContainerInterface, DATA_CARRYING, EventBus, Exception, HTTP_CONFIG, HTTP_SERVICE_CONFIG, HelperHttp, HelperHttpApi, HelperHttpData, HelperHttpExtra, HelperHttpHeaders, HelperHttpReturn, HelperInterface, HttpApi, HttpApiMap, HttpAutoCarryData, HttpContentType, HttpContext, HttpHairstyleMethod, HttpMiddleware, HttpRequestMethod, HttpResponse, HttpResponseData, IAxiosAdapterHttp, IHttpAdapter, IHttpSendConfig, IHttpService, IMiddleware, IServiceProvider, Lib, RequestConfig, ServiceProvider, Transformer, UniRequestAdapter, Application as default, defineAppConfig, defineHttpApiMap, defineHttpApis, defineHttpConfig, isArray, isBoolean, isClass, isColor, isDate, isEmail, isEmpty, isEmptyObject, isExist, isFunction, isNull, isNumber, isObject, isPhone, isPromise, isRegExp, isString, isUndefined, isWindow, queryStringify };