This commit is contained in:
2026-08-25 11:06:27 +08:00
parent e2fe23e792
commit 351fb15d69
10 changed files with 673 additions and 450 deletions
+26
View File
@@ -0,0 +1,26 @@
export default Base62;
/**
* Base62 编码解码类
*/
declare class Base62 {
/**
* @param {string} alphabet 62 位编码字母表
*/
constructor(alphabet: string);
/** @type {string[]} */
encodeTable: string[];
/** @type {Uint8Array} */
decodeMap: Uint8Array;
/**
* 将字符串编码为 Base62 字符串
* @param {string} src
* @returns {string}
*/
encode(src: string): string;
/**
* 将 Base62 字符串解码为原始字符串
* @param {string} src
* @returns {string}
*/
decode(src: string): string;
}
+102
View File
@@ -0,0 +1,102 @@
import { RequestFn, RequestOptions, Base62Param } from './types/httpRequest';
export default HttpRequest;
declare class HttpRequest {
/**
* @param {string} [appKey]
* @param {string} [appSecret]
* @param {RequestFn} [reqFn]
*/
constructor(appKey?: string, appSecret?: string, reqFn?: RequestFn);
/**
* 初始化请求实例
* @param {string} [appKey]
* @param {string} [appSecret]
* @param {RequestFn} [reqFn]
*/
init: (appKey?: string, appSecret?: string, reqFn?: RequestFn) => void;
/**
* 发起请求,支持缓存与并发合并
* @param {RequestOptions} options
* @param {boolean} [isCacheRequest]
* @returns {any} 返回 Proxy 包裹的 Promise,支持链式调用 .then / .catch / .msg / .resp
*/
request: ({ url, method, ...params }: RequestOptions, isCacheRequest?: boolean) => any;
/**
* GET 请求
* @param {string} url
* @param {Record<string, unknown>} [params]
*/
get: (url: string, params?: Record<string, unknown>) => any;
/**
* POST 请求
* @param {string} url
* @param {unknown} [data]
* @param {Record<string, unknown>} [params]
*/
post: (url: string, data?: unknown, params?: Record<string, unknown>) => any;
/**
* PUT 请求
* @param {string} url
* @param {unknown} [data]
* @param {Record<string, unknown>} [params]
*/
put: (url: string, data?: unknown, params?: Record<string, unknown>) => any;
/**
* DELETE 请求
* @param {string} url
* @param {unknown} [data]
* @param {Record<string, unknown>} [params]
*/
del: (url: string, data?: unknown, params?: Record<string, unknown>) => any;
/**
* 下载(待实现)
* @param {string} url
* @param {Record<string, unknown>} [params]
*/
download: (url: string, params?: Record<string, unknown>) => void;
/**
* 永久缓存 GET 请求
* @param {string} url
* @param {Record<string, unknown>} [params]
*/
cache: (url: string, params?: Record<string, unknown>) => any;
/**
* 通过 Base62 编码参数请求列表接口
* @param {string} code
* @param {Base62Param} [base62param]
*/
list: (code: string, base62param?: Base62Param) => any;
getAppInfo: () => void;
/**
* 清除缓存
* @param {boolean} [isSystem] 是否同时清除系统缓存(`/_/` 路由)
*/
refreshCache: (isSystem?: boolean) => void;
/**
* 解码 Base62 字符串为 JSON 对象
* @param {string} [str]
* @param {object} [defaultValue]
* @returns {unknown}
*/
decode: (str?: string, defaultValue?: object) => unknown;
/**
* 将 JSON 对象编码为 Base62 字符串
* @param {Record<string, unknown> | unknown[]} [json]
* @returns {string}
*/
encode: (json?: Record<string, unknown> | unknown[]) => string;
#private;
}
declare namespace HttpRequest {
/**
* 全局未处理 rejection 处理器,适配浏览器和 Node 环境
* @param {any} e
*/
function onUnhandledRejection(e: any): void;
/**
* 全局消息回调,默认打印到控制台
* @param {number} code
* @param {string} msg
*/
function onMsg(code: number, msg: string): void;
}
+91
View File
@@ -0,0 +1,91 @@
import { HttpResponseProxy, HttpResponseData } from './types/httpResponse';
export default HttpResponse;
export function NewHttpResponse(code: number, message: string, data: unknown, url?: string, res?: string): HttpResponseProxy;
/**
* HTTP 响应对象
*/
export class HttpResponse {
static [Symbol.hasInstance](instance: any): boolean;
/**
* @param {number} code
* @param {string} message
* @param {unknown} data
* @param {string} url
* @param {string} res
*/
constructor(code: number, message: string, data: unknown, url: string, res: string);
/** @type {number} */
code: number;
/** @type {string} */
message: string;
/** @type {unknown} */
data: unknown;
/** @type {string} */
url: string;
/** @type {string} */
res: string;
/**
* message 消息弹窗后回调
*
* @overload
* @returns {Promise<unknown>}
*
* @overload
* @param {(data: unknown) => unknown} fn
* @param {false} isResp
* @returns {Promise<unknown>}
*
* @overload
* @param {(response: HttpResponse) => unknown} fn
* @param {true} isResp
* @returns {Promise<unknown>}
*
* @param {(value: unknown | HttpResponse) => unknown} [fn]
* @param {boolean} [isResp=false]
* @returns {Promise<unknown>}
*
* fn 内部抛出的异常会变成 reject,而不是同步抛出。
*/
msg: (fn?: (value: unknown | HttpResponse) => unknown, isResp?: boolean) => Promise<unknown>;
/**
* 使用完整 HttpResponse 对象处理响应
*
* 与 msg() 的区别:
*
* msg(false) -> 回调拿 data
*
* msg(true) -> 回调拿 HttpResponse
*
* resp() -> 永远拿 HttpResponse
*
* @overload
* @returns {Promise<unknown>}
*
* @overload
* @param {(response: HttpResponse) => unknown} fn
* @returns {Promise<unknown>}
*
* @overload
* @param {undefined} fn
* @param {(reason: HttpResponse) => unknown} onrejected
* @returns {Promise<unknown>}
*
* @param {(response: HttpResponse) => unknown} [fn]
* @param {(reason: HttpResponse) => unknown} [onrejected]
* @returns {Promise<unknown>}
*/
resp: (fn?: (response: HttpResponse) => unknown, onrejected?: (reason: HttpResponse) => unknown) => Promise<unknown>;
/**
* 转换成 JSON
*
* @returns {HttpResponseData}
*/
toJSON: () => HttpResponseData;
/**
* 响应消息字符串
*
* @returns {string}
*/
toString: () => string;
#private;
}
+3 -208
View File
@@ -1,208 +1,3 @@
declare interface Base62Param {
/** 当前选中的 tab 标识 */
tab?: string
/** 当前页码 */
page?: number
/** 每页条数 */
pageSize?: number
/** 筛选条件 */
condition?: Record<string, unknown>
/** 侧边栏选中项标识 */
sider?: string
/** 搜索关键词 */
keyword?: string
}
declare type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE'
declare class HttpRequest {
/**
* @param {string} [appKey]
* @param {string} [appSecret]
* @param {RequestFn} [reqFn]
*/
constructor(appKey?: string, appSecret?: string, reqFn?: RequestFn);
/**
* 初始化请求实例
* @param {string} [appKey]
* @param {string} [appSecret]
* @param {RequestFn} [reqFn]
*/
init: (appKey?: string, appSecret?: string, reqFn?: RequestFn) => void;
/**
* 发起请求,支持缓存与并发合并
* @param {RequestOptions} options
* @param {boolean} [isCacheRequest]
* @returns {any} 返回 Proxy 包裹的 Promise,支持链式调用 .then / .catch / .msg / .resp
*/
request: ({ url, method, ...params }: RequestOptions, isCacheRequest?: boolean) => any;
/**
* GET 请求
* @param {string} url
* @param {Record<string, unknown>} [params]
*/
get: (url: string, params?: Record<string, unknown>) => any;
/**
* POST 请求
* @param {string} url
* @param {unknown} [data]
* @param {Record<string, unknown>} [params]
*/
post: (url: string, data?: unknown, params?: Record<string, unknown>) => any;
/**
* PUT 请求
* @param {string} url
* @param {unknown} [data]
* @param {Record<string, unknown>} [params]
*/
put: (url: string, data?: unknown, params?: Record<string, unknown>) => any;
/**
* DELETE 请求
* @param {string} url
* @param {unknown} [data]
* @param {Record<string, unknown>} [params]
*/
del: (url: string, data?: unknown, params?: Record<string, unknown>) => any;
/**
* 下载(待实现)
* @param {string} url
* @param {Record<string, unknown>} [params]
*/
download: (url: string, params?: Record<string, unknown>) => void;
/**
* 永久缓存 GET 请求
* @param {string} url
* @param {Record<string, unknown>} [params]
*/
cache: (url: string, params?: Record<string, unknown>) => any;
/**
* 通过 Base62 编码参数请求列表接口
* @param {string} code
* @param {Base62Param} [base62param]
*/
list: (code: string, base62param?: Base62Param) => any;
getAppInfo: () => void;
/**
* 清除缓存
* @param {boolean} [isSystem] 是否同时清除系统缓存(`/_/` 路由)
*/
refreshCache: (isSystem?: boolean) => void;
/**
* 解码 Base62 字符串为 JSON 对象
* @param {string} [str]
* @param {object} [defaultValue]
* @returns {unknown}
*/
decode: (str?: string, defaultValue?: object) => unknown;
/**
* 将 JSON 对象编码为 Base62 字符串
* @param {Record<string, unknown> | unknown[]} [json]
* @returns {string}
*/
encode: (json?: Record<string, unknown> | unknown[]) => string;
#private;
}
declare namespace HttpRequest {
/**
* 全局未处理 rejection 处理器,适配浏览器和 Node 环境
* @param {any} e
*/
function onUnhandledRejection(e: any): void;
/**
* 全局消息回调,默认打印到控制台
* @param {number} code
* @param {string} msg
*/
function onMsg(code: number, msg: string): void;
}
export default HttpRequest;
/**
* @typedef {Object} HttpResponseData@typedef {Object} HttpResponseData
* @property {number} code
* @property {string} message
* @property {unknown} data
* @property {string} url
* @property {string} res
*/
export declare class HttpResponse {
static [Symbol.hasInstance](instance: any): boolean;
/**
* @param {number} code
* @param {string} message
* @param {unknown} data
* @param {string} url
* @param {string} res
*/
constructor(code: number, message: string, data: unknown, url: string, res: string);
/** @type {number} */
code: number;
/** @type {string} */
message: string;
/** @type {unknown} */
data: unknown;
/** @type {string} */
url: string;
/** @type {string} */
res: string;
toJSON: () => {
code: number;
message: string;
data: unknown;
url: string;
res: string;
};
toString: () => string;
msg(fn?: (value: unknown) => unknown, isResp?: false): Promise<unknown>;
msg(fn?: (value: HttpResponse) => unknown, isResp: true): Promise<unknown>;
then(fn?: (value: unknown) => unknown, onrejected?: (reason: unknown) => unknown): Promise<unknown>;
resp(fn?: (value: HttpResponse) => unknown, onrejected?: (reason: unknown) => unknown): Promise<unknown>;
catch(fn: (reason: HttpResponse) => unknown): Promise<unknown>;
finally(fn?: () => void): Promise<unknown>;
#private;
}
export declare function NewHttpResponse(code: number, message: string, data: unknown, url?: string, res?: string): HttpResponse;
declare type RequestFn = (
config: RequestOptions & Record<string, unknown>
) => Promise<{ code: number; msg: string; data: unknown; res?: string }>
declare interface RequestOptions {
url?: string
method?: HttpMethod
params?: Record<string, unknown>
data?: unknown
}
/**
* DJB2 算法 —— 将字符串散列为十六进制字符串
* @param {string} input
* @returns {string}
*/
export declare function signature(input: string): string;
/**
* 将字符串编码为 Uint8Array
* @param {string} str
* @returns {Uint8Array}
*/
export declare function str2uint8array(str: string): Uint8Array;
/**
* 去除字符串首尾指定字符
* @param {string} str
* @param {string} char
* @returns {string}
*/
export declare function trim(str: string, char: string): string;
/**
* 将 ArrayBuffer 解码为字符串
* @param {ArrayBuffer} buffer
* @returns {string}
*/
export declare function uint8array2str(buffer: ArrayBuffer): string;
export { }
export { default } from './httpRequest.js';
export * from './util.js';
export { default as HttpResponse, NewHttpResponse } from './httpResponse.js';
+30
View File
@@ -0,0 +1,30 @@
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE'
export interface Base62Param {
/** 当前选中的 tab 标识 */
tab?: string
/** 当前页码 */
page?: number
/** 每页条数 */
pageSize?: number
/** 筛选条件 */
condition?: Record<string, unknown>
/** 侧边栏选中项标识 */
sider?: string
/** 搜索关键词 */
keyword?: string
}
export interface RequestOptions {
url?: string
method?: HttpMethod
params?: Record<string, unknown>
data?: unknown
}
export type RequestFn = (
config: RequestOptions & Record<string, unknown>
) => Promise<{ code: number; msg: string; data: unknown; res?: string }>
/** [code, msg, data, url, res] */
export type CacheEntry = [number, string, unknown, string, string]
+49
View File
@@ -0,0 +1,49 @@
import { default as HttpResponse } from '../httpResponse.js';
export type HttpResponseData = {
code: number
message: string
data: unknown
url: string
res: string
}
/** then 成功回调 */
export type HttpResponseThenCallback = (value: unknown) => unknown
/** Promise reject 回调 */
export type HttpResponseRejectCallback = (reason: HttpResponse) => unknown
/** Proxy 动态提供的 Promise API */
export type HttpResponseProxyAPI = {
then: (
fn: HttpResponseThenCallback | undefined,
onrejected?: HttpResponseRejectCallback
) => Promise<unknown>
catch: (fn: HttpResponseRejectCallback) => Promise<unknown>
finally: (fn?: () => void) => Promise<unknown>
}
/**
* HttpResponse 最终对外类型
*
* HttpResponse 本身提供:
*
* - code
* - message
* - data
* - url
* - res
* - msg()
* - resp()
* - toJSON()
* - toString()
*
* Proxy 额外提供:
*
* - then()
* - catch()
* - finally()
*/
export type HttpResponseProxy = HttpResponse & HttpResponseProxyAPI
+25
View File
@@ -0,0 +1,25 @@
/**
* DJB2 算法 —— 将字符串散列为十六进制字符串
* @param {string} input
* @returns {string}
*/
export function signature(input: string): string;
/**
* 去除字符串首尾指定字符
* @param {string} str
* @param {string} char
* @returns {string}
*/
export function trim(str: string, char: string): string;
/**
* 将字符串编码为 Uint8Array
* @param {string} str
* @returns {Uint8Array}
*/
export function str2uint8array(str: string): Uint8Array;
/**
* 将 ArrayBuffer 解码为字符串
* @param {ArrayBuffer} buffer
* @returns {string}
*/
export function uint8array2str(buffer: ArrayBuffer): string;