@x-9lab/xlab 1.6.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/cluster.d.ts +15 -3
- package/@types/components/common/index.d.ts +1 -2
- package/@types/components/cron/index.d.ts +4 -4
- package/@types/components/log/index.d.ts +37 -2
- package/@types/config/index.d.ts +9 -5
- package/@types/custom.d.ts +25 -3
- package/@types/dot-file.d.ts +6 -0
- package/@types/global.d.ts +44 -54
- package/@types/index.d.ts +18 -0
- package/@types/init-env.d.ts +3 -1
- package/@types/middleware/handle-pre-dir.d.ts +1 -5
- package/@types/middleware/request-filter.d.ts +0 -1
- package/@types/middleware/service-mark.d.ts +1 -6
- package/@types/router.d.ts +25 -0
- package/@types/server.d.ts +28 -6
- package/MIGRATION.md +170 -0
- package/README.md +37 -17
- package/dist/@config/config.dev.js +7 -3
- package/dist/@config/config.js +7 -3
- package/dist/@config/config.sand.js +7 -3
- package/dist/bin/watch.js +13 -9
- package/dist/cluster.js +121 -44
- package/dist/components/assets/index.js +9 -5
- package/dist/components/cluster/index.js +17 -4
- package/dist/components/common/index.js +65 -45
- package/dist/components/cron/index.js +50 -27
- package/dist/components/header/index.js +32 -17
- package/dist/components/header/time.js +6 -2
- package/dist/components/index.js +1 -1
- package/dist/components/log/index.js +91 -87
- package/dist/components/mime/index.js +6 -2
- package/dist/components/return-code/index.js +33 -18
- package/dist/components/uuid/index.js +22 -13
- package/dist/config/getEnv.js +9 -5
- package/dist/config/index.js +98 -66
- package/dist/config/process-custom-config-files.js +26 -22
- package/dist/config/process-def-config-file.js +15 -11
- package/dist/custom.js +77 -28
- package/dist/default-x-config.js +9 -5
- package/dist/dot-file.js +42 -17
- package/dist/global.js +37 -31
- package/dist/index.js +100 -0
- package/dist/init-env.js +17 -10
- package/dist/middleware/@bin/html-filter.js +19 -7
- package/dist/middleware/bad-request.js +12 -8
- package/dist/middleware/compress.js +11 -7
- package/dist/middleware/cors.js +20 -7
- package/dist/middleware/fresh-filter.js +13 -7
- package/dist/middleware/handle-pre-dir.js +22 -17
- package/dist/middleware/request-filter.js +39 -25
- package/dist/middleware/service-mark.js +22 -25
- package/dist/middlewares.js +22 -19
- package/dist/router.js +174 -141
- package/dist/server.js +195 -93
- package/package.json +25 -29
- package/@types/business/utils/cookie/1.1.0/clean/index.d.ts +0 -3
- package/@types/business/utils/cookie/1.1.0/clean/js/index.d.ts +0 -2
- package/@types/components/cache/index.d.ts +0 -2
- package/@types/components/cache/lru.d.ts +0 -21
- package/@types/components/html-processor/index.d.ts +0 -9
- package/@types/components/injection/index.d.ts +0 -25
- package/@types/components/js-processor/index.d.ts +0 -5
- package/@types/components/md5/index.d.ts +0 -2
- package/@types/components/platform/index.d.ts +0 -21
- package/@types/components/proxy/index.d.ts +0 -26
- package/@types/components/querystring/index.d.ts +0 -25
- package/@types/components/redirect/index.d.ts +0 -11
- package/@types/components/request/helper.d.ts +0 -3
- package/@types/components/request/index.d.ts +0 -51
- package/@types/components/request/resolve-uri.d.ts +0 -6
- package/@types/components/version/index.d.ts +0 -26
- package/@types/env.d.ts +0 -1
package/package.json
CHANGED
|
@@ -1,49 +1,45 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x-9lab/xlab",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "9lab 服务端模块",
|
|
5
|
-
"versionDesc": "
|
|
5
|
+
"versionDesc": "v2: 移除全局挂载改为模块导出、显式生命周期与优雅退出、路由归一化",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "swc src -
|
|
8
|
-
"compile": "swc src -
|
|
7
|
+
"dev": "swc src --copy-files --strip-leading-paths --config-file .swcrc -d dist -w",
|
|
8
|
+
"compile": "swc src --copy-files --strip-leading-paths --config-file .swcrc -d dist",
|
|
9
9
|
"build": "yarn compile && yarn gen-declaration",
|
|
10
10
|
"gen-declaration": "tsc --emitDeclarationOnly",
|
|
11
|
+
"test": "node --test",
|
|
11
12
|
"changelog": "changelog"
|
|
12
13
|
},
|
|
13
14
|
"engines": {
|
|
14
|
-
"node": "
|
|
15
|
+
"node": ">=20.0.0"
|
|
15
16
|
},
|
|
16
|
-
"main": "./dist/
|
|
17
|
-
"types": "./@types/
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"types": "./@types/index.d.ts",
|
|
18
19
|
"files": [
|
|
19
20
|
"dist",
|
|
20
|
-
"@types"
|
|
21
|
+
"@types",
|
|
22
|
+
"MIGRATION.md"
|
|
21
23
|
],
|
|
22
24
|
"dependencies": {
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"liftoff": "4.0.0",
|
|
27
|
-
"minimist": "1.2.6",
|
|
28
|
-
"koa-static": "5.0.0",
|
|
25
|
+
"@x-drive/utils": "1.1.32",
|
|
26
|
+
"koa": "3.2.1",
|
|
27
|
+
"koa-compress": "5.2.2",
|
|
29
28
|
"koa-router": "14.0.0",
|
|
30
|
-
"koa-
|
|
31
|
-
"
|
|
29
|
+
"koa-static": "5.0.0",
|
|
30
|
+
"liftoff": "5.0.1",
|
|
31
|
+
"log4js": "^6.9.1",
|
|
32
|
+
"minimist": "1.2.8"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"should": "11.2.1",
|
|
37
|
-
"nodemon": "2.0.12",
|
|
38
|
-
"chokidar": "3.5.3",
|
|
39
|
-
"@swc/cli": "0.1.57",
|
|
40
|
-
"typescript": "4.3.4",
|
|
41
|
-
"@swc/core": "1.2.171",
|
|
42
|
-
"@types/log4js": "2.3.5",
|
|
43
|
-
"@types/node": "16.11.40",
|
|
44
|
-
"@types/koa-static": "4.0.4",
|
|
35
|
+
"@swc/cli": "^0.7.7",
|
|
36
|
+
"@swc/core": "^1.13.2",
|
|
45
37
|
"@types/koa-router": "7.4.9",
|
|
46
|
-
"@
|
|
38
|
+
"@types/koa-static": "4.0.4",
|
|
39
|
+
"@types/node": "^20.19.0",
|
|
40
|
+
"@x-drive/changelog": "1.1.6",
|
|
41
|
+
"chokidar": "^3.6.0",
|
|
42
|
+
"typescript": "^5.9.2"
|
|
47
43
|
},
|
|
48
44
|
"bin": {
|
|
49
45
|
"xlab": "dist/bin/xlab"
|
|
@@ -52,4 +48,4 @@
|
|
|
52
48
|
"type": "git",
|
|
53
49
|
"url": "git+https://github.com/x-9lab/xlab.git"
|
|
54
50
|
}
|
|
55
|
-
}
|
|
51
|
+
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 生成或获取一个缓存实例
|
|
3
|
-
* @param cacheName 实例名称
|
|
4
|
-
* @param conf 缓存配置,仅在生成的时候有效
|
|
5
|
-
* @return 缓存实例
|
|
6
|
-
*/
|
|
7
|
-
declare function create(cacheName: string, conf: Record<string, XLab.JsonValue>): any;
|
|
8
|
-
export { create };
|
|
9
|
-
/**
|
|
10
|
-
* 获取一个缓存实例
|
|
11
|
-
* @param name 缓存名称
|
|
12
|
-
* @param conf 缓存配置
|
|
13
|
-
*/
|
|
14
|
-
declare function get(name: string, conf?: Record<string, XLab.JsonValue>): any;
|
|
15
|
-
export { get };
|
|
16
|
-
/**
|
|
17
|
-
* 获取当前缓存实例数量
|
|
18
|
-
* @return 缓存数量
|
|
19
|
-
*/
|
|
20
|
-
declare function len(): number;
|
|
21
|
-
export { len };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type Koa from "koa";
|
|
2
|
-
declare type RouteOption = Record<string, string | string[] | Function>;
|
|
3
|
-
interface HtmlProcessorOptions {
|
|
4
|
-
route?: RouteOption;
|
|
5
|
-
}
|
|
6
|
-
declare function htmlProcessor(pathname: string, options: HtmlProcessorOptions, context: Koa.Context): string;
|
|
7
|
-
declare function init(): void;
|
|
8
|
-
export { init };
|
|
9
|
-
export { htmlProcessor };
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type Koa from "koa";
|
|
2
|
-
/**
|
|
3
|
-
* 数据注入方法
|
|
4
|
-
* @param html 待处理的字符串
|
|
5
|
-
* @param req 请求对象
|
|
6
|
-
* @return 处理完的字符串
|
|
7
|
-
*/
|
|
8
|
-
declare function inject(html: string, req: Koa.Context): string;
|
|
9
|
-
export { inject };
|
|
10
|
-
/**
|
|
11
|
-
* 添加一个字段到缓存对象
|
|
12
|
-
* @param key 字段名
|
|
13
|
-
* @param val 数据
|
|
14
|
-
* @return 存储的数据
|
|
15
|
-
*/
|
|
16
|
-
declare function add(key: string, val: XLab.JsonValue): any;
|
|
17
|
-
export { add };
|
|
18
|
-
/**
|
|
19
|
-
* 修改一个字段
|
|
20
|
-
* @param key 字段名
|
|
21
|
-
* @param val 数据
|
|
22
|
-
* @return 存储的数据
|
|
23
|
-
*/
|
|
24
|
-
declare function modify(key: string, val: XLab.JsonValue): boolean;
|
|
25
|
-
export { modify };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
interface IPlat {
|
|
2
|
-
/**平台类型,mobile 或 desktop */
|
|
3
|
-
is: string;
|
|
4
|
-
/**是否是微信 */
|
|
5
|
-
wechat?: boolean;
|
|
6
|
-
/**是否是支付宝 */
|
|
7
|
-
alipay?: boolean;
|
|
8
|
-
/**是否是微博 */
|
|
9
|
-
weibo?: boolean;
|
|
10
|
-
/**是否是 Windows 系统 */
|
|
11
|
-
win?: boolean;
|
|
12
|
-
/**是否是 Mac 系统 */
|
|
13
|
-
mac?: boolean;
|
|
14
|
-
/**是否是 Linux 系统 */
|
|
15
|
-
linux?: string;
|
|
16
|
-
/**操作系统信息 */
|
|
17
|
-
os?: string;
|
|
18
|
-
}
|
|
19
|
-
export type { IPlat };
|
|
20
|
-
declare function check(ua: string): IPlat;
|
|
21
|
-
export { check };
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type Koa from "koa";
|
|
2
|
-
/**代理配置项 */
|
|
3
|
-
interface IProxyOption {
|
|
4
|
-
/**代理目标 */
|
|
5
|
-
target: string;
|
|
6
|
-
/**代理域名 */
|
|
7
|
-
host: string;
|
|
8
|
-
}
|
|
9
|
-
declare module "http" {
|
|
10
|
-
interface IncomingMessage {
|
|
11
|
-
/**代理类型 */
|
|
12
|
-
proxyType: string;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* 设置代理配置
|
|
17
|
-
* @param type 代理配置名称
|
|
18
|
-
* @param options 配置信息
|
|
19
|
-
*/
|
|
20
|
-
declare function set(type: string, options: IProxyOption | string): IProxyOption;
|
|
21
|
-
export { set };
|
|
22
|
-
/**
|
|
23
|
-
* web 代理
|
|
24
|
-
*/
|
|
25
|
-
declare function web(reqObj: Koa.Context, headers: any): Promise<unknown>;
|
|
26
|
-
export { web };
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import qs from "querystring";
|
|
3
|
-
/**
|
|
4
|
-
* 将 URL 参数转换为字符串
|
|
5
|
-
* @example
|
|
6
|
-
* ```ts
|
|
7
|
-
* query2string({"pf":"145","ss":"320x240"});
|
|
8
|
-
* query2string({"pf":"145","ss":"320x240"},["pf"]);
|
|
9
|
-
* query2string({"pf":"145","ss":"320x240"},{"fr":"android"});
|
|
10
|
-
* query2string({"pf":"145","ss":"320x240"},{"fr":"android"},["fr"]);
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
declare function query2string(...args: Array<XLab.JsonObject | string[]>): string;
|
|
14
|
-
export { query2string };
|
|
15
|
-
/**
|
|
16
|
-
* 字符串转成参数对象
|
|
17
|
-
* @param qString 参数字符串
|
|
18
|
-
* @return 处理完的对象
|
|
19
|
-
* @example
|
|
20
|
-
* ```ts
|
|
21
|
-
* string2query("pf=145&ss=320x240");
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
declare function string2query(qString: string): qs.ParsedUrlQuery;
|
|
25
|
-
export { string2query };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import type { ParsedUrlQuery } from "querystring";
|
|
3
|
-
import type Koa from "koa";
|
|
4
|
-
declare function by302(context: Koa.Context, url: string): void;
|
|
5
|
-
export { by302 };
|
|
6
|
-
declare function byJS(context: Koa.Context, url: string, msg: string, origin: string): void;
|
|
7
|
-
export { byJS };
|
|
8
|
-
declare function byMeta(context: Koa.Context, url: string): void;
|
|
9
|
-
export { byMeta };
|
|
10
|
-
declare function makeRedirectUrl(query: ParsedUrlQuery, url: string): string;
|
|
11
|
-
export { makeRedirectUrl };
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import type { RequestInit, Response } from "node-fetch";
|
|
2
|
-
/**支持的返回数据类型 */
|
|
3
|
-
declare type IFetchType = "text" | "json" | "blob" | "buffer" | "arrayBuffer";
|
|
4
|
-
/**请求配置 */
|
|
5
|
-
interface IFetchConfig extends Partial<Omit<RequestInit, "body" | "method">> {
|
|
6
|
-
/**数据返回类型 */
|
|
7
|
-
type?: IFetchType;
|
|
8
|
-
/**是否强制同源 */
|
|
9
|
-
sameOrigin?: boolean;
|
|
10
|
-
/**请求自动重试次数 */
|
|
11
|
-
retry?: number;
|
|
12
|
-
/**自动重试间隔时间 */
|
|
13
|
-
retryDelay?: number;
|
|
14
|
-
/**是否自动追加随机数retry,默认 false */
|
|
15
|
-
random?: boolean;
|
|
16
|
-
/**数据返回时的钩子 */
|
|
17
|
-
onResponse?: (res?: Response) => Promise<unknown>;
|
|
18
|
-
}
|
|
19
|
-
export type { IFetchConfig };
|
|
20
|
-
/**给指定对象增加一个随机字符串 */
|
|
21
|
-
declare function setRandomStr(query: any): void;
|
|
22
|
-
export { setRandomStr };
|
|
23
|
-
/**设置默认 Headers */
|
|
24
|
-
declare function setDefHeaders(headers: Record<string, any>): void;
|
|
25
|
-
export { setDefHeaders };
|
|
26
|
-
/**
|
|
27
|
-
* 获取数据
|
|
28
|
-
* @param type 请求类型
|
|
29
|
-
* @param uri 请求地址
|
|
30
|
-
* @param query 请求参数
|
|
31
|
-
* @param data 发送数据
|
|
32
|
-
* @param config 请求配置
|
|
33
|
-
* @param needProcessConfig 是否需要处理配置
|
|
34
|
-
*/
|
|
35
|
-
declare function httpFetch<T = unknown>(type: string, uri: string, query?: Record<string, any>, data?: any, config?: IFetchConfig, retry?: number, needProcessConfig?: boolean): Promise<T>;
|
|
36
|
-
export { httpFetch as fetch };
|
|
37
|
-
/**
|
|
38
|
-
* 发起一个 get 请求
|
|
39
|
-
* @param uri 请求地址
|
|
40
|
-
* @param query 请求参数
|
|
41
|
-
*/
|
|
42
|
-
declare function requsetGet<T = unknown>(uri: string, query?: Record<string, any>, config?: IFetchConfig): Promise<T>;
|
|
43
|
-
export { requsetGet as get };
|
|
44
|
-
/**
|
|
45
|
-
* 发起一个 post 请求
|
|
46
|
-
* @param uri 请求地址
|
|
47
|
-
* @param query 请求参数
|
|
48
|
-
* @param data 请求数据
|
|
49
|
-
*/
|
|
50
|
-
declare function requestPost<T>(uri: string, query?: any, data?: any, config?: IFetchConfig): Promise<T>;
|
|
51
|
-
export { requestPost as post };
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 比较版本
|
|
3
|
-
* @param v1 样本版本
|
|
4
|
-
* @param v2 对比版本
|
|
5
|
-
* @returns 对比结果:
|
|
6
|
-
* - 1 样本大于对比
|
|
7
|
-
* - 0 两者相等
|
|
8
|
-
* - -1 对比大于样本
|
|
9
|
-
*/
|
|
10
|
-
declare function compareVersion(v1: string, v2: string): 1 | -1 | 0;
|
|
11
|
-
export { compareVersion };
|
|
12
|
-
/**
|
|
13
|
-
* 匹配范围
|
|
14
|
-
* @param range 版本范围
|
|
15
|
-
* @param v 对比版本
|
|
16
|
-
*/
|
|
17
|
-
declare function matchRange(range: string, v: string): boolean;
|
|
18
|
-
export { matchRange };
|
|
19
|
-
/**
|
|
20
|
-
* 匹配任意
|
|
21
|
-
* @param range 范围
|
|
22
|
-
* @param v 对比
|
|
23
|
-
* @param ignoreCase 忽略大小写
|
|
24
|
-
*/
|
|
25
|
-
declare function matchAny(range: string, v: string, ignoreCase?: boolean): boolean;
|
|
26
|
-
export { matchAny };
|
package/@types/env.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|