wok-server 0.2.1 → 0.3.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/dist/config/index.js +17 -3
- package/dist/log/file.js +4 -11
- package/dist/mvc/config.js +23 -16
- package/dist/mvc/handler/json.js +27 -0
- package/dist/mvc/index.js +6 -295
- package/dist/mvc/render/file.js +3 -85
- package/dist/mvc/server.js +265 -0
- package/dist/mvc/static/header.js +67 -0
- package/dist/mvc/static/index.js +6 -0
- package/dist/mvc/static/mime-type.js +84 -0
- package/dist/mvc/static/server-cache-config.js +66 -0
- package/dist/mvc/static/server-cache.js +133 -0
- package/dist/mvc/static/static-handler.js +355 -0
- package/dist/mysql/manager/ops/update.js +15 -1
- package/dist/mysql/manager/ops/utils.js +4 -0
- package/dist/validation/index.js +12 -1
- package/dist/validation/validator/array.js +7 -11
- package/dist/validation/validator/min.js +2 -2
- package/documentation/zh-cn/config.md +31 -0
- package/documentation/zh-cn/mvc.md +48 -0
- package/documentation/zh-cn/mysql.md +72 -0
- package/documentation/zh-cn/validate.md +21 -15
- package/package.json +1 -1
- package/types/config/index.d.ts +10 -0
- package/types/mvc/config.d.ts +13 -1
- package/types/mvc/handler/json.d.ts +14 -0
- package/types/mvc/index.d.ts +3 -36
- package/types/mvc/server.d.ts +85 -0
- package/types/mvc/static/header.d.ts +27 -0
- package/types/mvc/static/index.d.ts +3 -0
- package/types/mvc/static/mime-type.d.ts +2 -0
- package/types/mvc/static/server-cache-config.d.ts +30 -0
- package/types/mvc/static/server-cache.d.ts +76 -0
- package/types/mvc/static/static-handler.d.ts +72 -0
- package/types/mysql/manager/ops/update.d.ts +7 -1
- package/types/validation/validator/array.d.ts +2 -2
- package/types/validation/validator/min.d.ts +2 -2
- package/types/validation/validator/plain-obj.d.ts +1 -1
|
@@ -32,8 +32,6 @@ validate(
|
|
|
32
32
|
| array | 数组校验,设置元素对象的校验规则来校验每一个元素 |
|
|
33
33
|
| plainObject | 对象校验,如果属性是对象可进一步校验属性值的属性 |
|
|
34
34
|
|
|
35
|
-
**注意: array 和 plainObject 在校验层级深的对象时,可能无法拥有准确的类型推断,必须在使用这两个函数时指定泛型,比如 `plainObject<User>({...})`,否则编译会报错。**
|
|
36
|
-
|
|
37
35
|
下面是对象和数组嵌套的校验示例。
|
|
38
36
|
|
|
39
37
|
```ts
|
|
@@ -66,19 +64,27 @@ validate<User>(
|
|
|
66
64
|
})
|
|
67
65
|
],
|
|
68
66
|
tags: [
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
67
|
+
// 标签不得超过5个
|
|
68
|
+
maxLength(5),
|
|
69
|
+
// 标签列表不能为空
|
|
70
|
+
notNull(),
|
|
71
|
+
// 校验标签数组的元素
|
|
72
|
+
array([
|
|
73
|
+
// 元素不能为空
|
|
74
|
+
notNull(),
|
|
75
|
+
// 元素的属性校验
|
|
76
|
+
plainObject({
|
|
77
|
+
id: [notBlank()],
|
|
78
|
+
name: [notBlank()],
|
|
79
|
+
permissinos: [
|
|
80
|
+
notNull(),
|
|
81
|
+
plainObject({
|
|
82
|
+
edit: [notNull()],
|
|
83
|
+
read: [notNull()]
|
|
84
|
+
})
|
|
85
|
+
]
|
|
86
|
+
})
|
|
87
|
+
])
|
|
82
88
|
]
|
|
83
89
|
}
|
|
84
90
|
)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wok-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"packageManager": "pnpm@8.9.0",
|
|
5
5
|
"description": "一个基于 NodeJs 和 TypeScript 的后端框架,轻量级、克制、简洁。A lightweight, restrained, and concise backend framework based on Node.js and TypeScript.",
|
|
6
6
|
"scripts": {
|
package/types/config/index.d.ts
CHANGED
|
@@ -12,4 +12,14 @@ export declare function getConfig<T>(envPrefix: string): T | undefined;
|
|
|
12
12
|
* @returns 映射了环境变量后的配置
|
|
13
13
|
*/
|
|
14
14
|
export declare function registerConfig<T extends {}>(defaultConfig: T, envPrefix: string, validation?: ValidationOpts<T>): T;
|
|
15
|
+
/**
|
|
16
|
+
* 根据环境变量来生成配置对象,与 registerConfig 的参数是一致的,和 registerConfig 不同的是
|
|
17
|
+
* generateConfig 可以多次重复使用,方便在运行时更改环境变量后再生成配置,而调用 registerConfig
|
|
18
|
+
* 一旦注册后不能再被更改。之所以这样设计是为了方便程序的测试,模拟不同的环境来运行程序,和其它的
|
|
19
|
+
* 一些特殊需求。
|
|
20
|
+
* @param defaultConfig
|
|
21
|
+
* @param envPrefix
|
|
22
|
+
* @param validation
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateConfig<T extends {}>(defaultConfig: T, envPrefix: string, validation?: ValidationOpts<T>): T;
|
|
15
25
|
export * from './exception';
|
package/types/mvc/config.d.ts
CHANGED
|
@@ -26,5 +26,17 @@ export interface WebConfig {
|
|
|
26
26
|
* 跨域允许的请求方法
|
|
27
27
|
*/
|
|
28
28
|
corsAllowMethods: string;
|
|
29
|
+
/**
|
|
30
|
+
* 是否激活安全传输层
|
|
31
|
+
*/
|
|
32
|
+
tlsEnable: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* pem 格式证书公钥文件路径
|
|
35
|
+
*/
|
|
36
|
+
tlsCert: string;
|
|
37
|
+
/**
|
|
38
|
+
* pem 格式证书私钥文件路径
|
|
39
|
+
*/
|
|
40
|
+
tlsKey: string;
|
|
29
41
|
}
|
|
30
|
-
export declare
|
|
42
|
+
export declare function getConfig(): WebConfig;
|
|
@@ -16,6 +16,20 @@ export interface JsonHandlerExchange {
|
|
|
16
16
|
* @returns
|
|
17
17
|
*/
|
|
18
18
|
export declare function createJsonHandler<REQ, RES = void>(opts: {
|
|
19
|
+
/**
|
|
20
|
+
* 缓存设置,通过框架的 cache 模块来缓存响应信息,只能缓存有效的响应信息,如果没有响应正文则不会进行缓存,
|
|
21
|
+
* 参数和 handle 是一样的
|
|
22
|
+
* @param body
|
|
23
|
+
* @param exchange
|
|
24
|
+
* @returns 返回缓存的 key 和缓存秒数
|
|
25
|
+
*/
|
|
26
|
+
cache?: (body: REQ, exchange: JsonHandlerExchange) => Promise<{
|
|
27
|
+
key: string;
|
|
28
|
+
expiresInSeconds?: number;
|
|
29
|
+
}> | {
|
|
30
|
+
key: string;
|
|
31
|
+
expiresInSeconds?: number;
|
|
32
|
+
};
|
|
19
33
|
/**
|
|
20
34
|
* 校验信息,可选,用于检查请求信息.对于一些特殊情况,无法使用校验器的,可以在 handle 中继续处理.
|
|
21
35
|
*/
|
package/types/mvc/index.d.ts
CHANGED
|
@@ -1,42 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
import { Server } from 'http';
|
|
3
|
-
import { Interceptor } from './interceptor';
|
|
4
|
-
import { Routers } from './router';
|
|
1
|
+
import { WokServerOpts } from './server';
|
|
5
2
|
/**
|
|
6
3
|
* 启动 web服务
|
|
7
4
|
* @param opts
|
|
8
5
|
*/
|
|
9
|
-
export declare function startWebServer(opts:
|
|
10
|
-
/**
|
|
11
|
-
* 路由配置.
|
|
12
|
-
*/
|
|
13
|
-
routers: Routers;
|
|
14
|
-
/**
|
|
15
|
-
* 拦截器,在路由处理前可以做一些额外操作.
|
|
16
|
-
*/
|
|
17
|
-
interceptors?: Interceptor[];
|
|
18
|
-
/**
|
|
19
|
-
* 前置控制器,在服务启动之前,对服务做一些额外的操作。比如可以连接 socket.io 或者一些其它
|
|
20
|
-
* 支持 nodejs 原生 http 服务的组件.
|
|
21
|
-
* @param server
|
|
22
|
-
* @returns
|
|
23
|
-
*/
|
|
24
|
-
preHandler?: (server: Server<any>) => Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* 静态文件设置,key 是访问路径,value 是相关设置. 如果希望根目录映射,可以将 key 的值设置为 /。
|
|
27
|
-
* 访问路径和目录的设置都是不允许重复的。
|
|
28
|
-
*/
|
|
29
|
-
static?: Record<string, {
|
|
30
|
-
/**
|
|
31
|
-
* 目录
|
|
32
|
-
*/
|
|
33
|
-
dir: string;
|
|
34
|
-
/**
|
|
35
|
-
* 缓存时长,单位秒,根据设定生成消息头 Cache-Control: max-age=时长,设置为小于等于0可关闭
|
|
36
|
-
*/
|
|
37
|
-
cacheAge?: number;
|
|
38
|
-
}>;
|
|
39
|
-
}): Promise<void>;
|
|
6
|
+
export declare function startWebServer(opts: WokServerOpts): Promise<void>;
|
|
40
7
|
/**
|
|
41
8
|
* 停止 web 服务
|
|
42
9
|
* @returns
|
|
@@ -44,6 +11,6 @@ export declare function startWebServer(opts: {
|
|
|
44
11
|
export declare function stopWebServer(): Promise<void>;
|
|
45
12
|
export * from './exchange';
|
|
46
13
|
export * from './handler';
|
|
14
|
+
export * from './interceptor';
|
|
47
15
|
export * from './render';
|
|
48
16
|
export * from './router';
|
|
49
|
-
export * from './interceptor';
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Server } from 'http';
|
|
3
|
+
import { Interceptor } from './interceptor';
|
|
4
|
+
import { Routers } from './router';
|
|
5
|
+
import { ServerStaticRules } from './static';
|
|
6
|
+
/**
|
|
7
|
+
* mvc 服务选项
|
|
8
|
+
*/
|
|
9
|
+
export interface WokServerOpts {
|
|
10
|
+
/**
|
|
11
|
+
* 路由配置.
|
|
12
|
+
*/
|
|
13
|
+
routers: Routers;
|
|
14
|
+
/**
|
|
15
|
+
* 拦截器,在路由处理前可以做一些额外操作.
|
|
16
|
+
*/
|
|
17
|
+
interceptors?: Interceptor[];
|
|
18
|
+
/**
|
|
19
|
+
* 前置控制器,在服务启动之前,对服务做一些额外的操作。比如可以连接 socket.io 或者一些其它
|
|
20
|
+
* 支持 nodejs 原生 http 服务的组件.
|
|
21
|
+
* @param server
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
preHandler?: (server: Server<any>) => Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* 静态资源配置
|
|
27
|
+
*/
|
|
28
|
+
static?: ServerStaticRules;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* web 服务
|
|
32
|
+
*/
|
|
33
|
+
export declare class WokServer {
|
|
34
|
+
private readonly opts;
|
|
35
|
+
private readonly config;
|
|
36
|
+
private readonly server;
|
|
37
|
+
private readonly interceptors;
|
|
38
|
+
private readonly routers;
|
|
39
|
+
private readonly defaultRouter?;
|
|
40
|
+
private readonly staticHandler?;
|
|
41
|
+
constructor(opts: WokServerOpts);
|
|
42
|
+
/**
|
|
43
|
+
* 处理请求,完成拦截器和路由的流程.
|
|
44
|
+
*
|
|
45
|
+
* @param req
|
|
46
|
+
* @param res
|
|
47
|
+
*/
|
|
48
|
+
private handleRequest;
|
|
49
|
+
/**
|
|
50
|
+
* 处理拦截器.
|
|
51
|
+
* @param idx 当前要执行的拦截器下标
|
|
52
|
+
* @param exchange 传输对象
|
|
53
|
+
* @param req
|
|
54
|
+
* @param res
|
|
55
|
+
*/
|
|
56
|
+
private handleInterceptor;
|
|
57
|
+
/**
|
|
58
|
+
* 处理路由.
|
|
59
|
+
* @param exchange
|
|
60
|
+
* @param routers
|
|
61
|
+
* @param staticSettings
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
private handleRouter;
|
|
65
|
+
/**
|
|
66
|
+
* 404响应
|
|
67
|
+
*
|
|
68
|
+
* @param exchange
|
|
69
|
+
* @param path
|
|
70
|
+
*/
|
|
71
|
+
private respond404;
|
|
72
|
+
/**
|
|
73
|
+
* 启动
|
|
74
|
+
*/
|
|
75
|
+
start(): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* 获取 ipv4 地址列表
|
|
78
|
+
* @returns
|
|
79
|
+
*/
|
|
80
|
+
private getIpv4List;
|
|
81
|
+
/**
|
|
82
|
+
* 停止
|
|
83
|
+
*/
|
|
84
|
+
stop(): Promise<void>;
|
|
85
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IncomingHttpHeaders } from 'http';
|
|
3
|
+
/**
|
|
4
|
+
* 静态资源消息头信息
|
|
5
|
+
*/
|
|
6
|
+
export interface StaticHeaders {
|
|
7
|
+
/**
|
|
8
|
+
* If-Modified-Since 消息头,测试文件是否在某个时间后修改后
|
|
9
|
+
*/
|
|
10
|
+
ifModifiedSince?: Date;
|
|
11
|
+
/**
|
|
12
|
+
* 文件部分读取
|
|
13
|
+
*/
|
|
14
|
+
range?: {
|
|
15
|
+
start: number;
|
|
16
|
+
end?: number;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* 是否接受 gzip 压缩,如果支持则压缩后返回
|
|
20
|
+
*/
|
|
21
|
+
gzip: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 解析消息头,返回静态文件处理需要的信息
|
|
25
|
+
* @param headers
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseHeaders(headers: IncomingHttpHeaders): StaticHeaders;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 服务器缓存配置
|
|
3
|
+
* Server Cache Configuration
|
|
4
|
+
*/
|
|
5
|
+
export interface ServerCacheConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Enable or disable caching,default is false (disabled)
|
|
8
|
+
*/
|
|
9
|
+
enable: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* The maximum age of the cache in seconds
|
|
12
|
+
*/
|
|
13
|
+
maxAge: number;
|
|
14
|
+
/**
|
|
15
|
+
* The maximum size of the cache in bytes
|
|
16
|
+
* or a string representing a number followed by a unit of measure (e.g. 100k, 10m, 1g)
|
|
17
|
+
*/
|
|
18
|
+
maxSize: number | string;
|
|
19
|
+
/**
|
|
20
|
+
* The maximum size of a file in the cache in bytes
|
|
21
|
+
* or a string representing a number followed by a unit of measure (e.g. 100k, 10m, 1g)
|
|
22
|
+
*/
|
|
23
|
+
maxFileSize: number | string;
|
|
24
|
+
}
|
|
25
|
+
export declare function parseSize(size: number | string): number;
|
|
26
|
+
/**
|
|
27
|
+
* 获取缓存的配置信息
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
export declare function getConfig(): ServerCacheConfig;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export interface CacheVal {
|
|
3
|
+
/**
|
|
4
|
+
* 文件内容
|
|
5
|
+
*/
|
|
6
|
+
buffer: Buffer;
|
|
7
|
+
/**
|
|
8
|
+
* 媒体类型
|
|
9
|
+
*/
|
|
10
|
+
mimeType: string;
|
|
11
|
+
/**
|
|
12
|
+
* 修改时间
|
|
13
|
+
*/
|
|
14
|
+
mtime: Date;
|
|
15
|
+
/**
|
|
16
|
+
* 客户端缓存时间
|
|
17
|
+
*/
|
|
18
|
+
cacheAge?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 文件的服务器缓存
|
|
22
|
+
*/
|
|
23
|
+
export declare class ServerCache {
|
|
24
|
+
private readonly opts;
|
|
25
|
+
/**
|
|
26
|
+
* 当前的缓存内容大小,单位字节
|
|
27
|
+
*/
|
|
28
|
+
private size;
|
|
29
|
+
/**
|
|
30
|
+
* 缓存内容
|
|
31
|
+
*/
|
|
32
|
+
private readonly cacheMap;
|
|
33
|
+
/**
|
|
34
|
+
* promise 表,作用是处理异步并发问题,如果有相同的 key 同时请求,保证异步的 provider 只执行一次
|
|
35
|
+
*/
|
|
36
|
+
private promiseMap;
|
|
37
|
+
constructor(opts: {
|
|
38
|
+
/**
|
|
39
|
+
* 最大缓存大小,超出后将出触发清除缓存操作
|
|
40
|
+
*/
|
|
41
|
+
maxSize: number;
|
|
42
|
+
/**
|
|
43
|
+
* 缓存时长,单位秒
|
|
44
|
+
*/
|
|
45
|
+
maxAge: number;
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* 获取缓存
|
|
49
|
+
*/
|
|
50
|
+
get(key: string): CacheVal | null;
|
|
51
|
+
/**
|
|
52
|
+
* 设置缓存内容,如果缓存内容超过最大缓存大小,则触发清除缓存操作
|
|
53
|
+
* @param key
|
|
54
|
+
* @param value
|
|
55
|
+
* @returns
|
|
56
|
+
*/
|
|
57
|
+
set(key: string, value: CacheVal): void;
|
|
58
|
+
/**
|
|
59
|
+
* 删除缓存
|
|
60
|
+
*/
|
|
61
|
+
remove(key: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* 如果缓存不存在,则计算缓存内容并放入缓存
|
|
64
|
+
* @param key
|
|
65
|
+
* @param provider 计算函数,返回值将放入缓存,如果返回 null 则表示未能计算出缓存内容,不进行缓存
|
|
66
|
+
*/
|
|
67
|
+
computeIfAbsent(key: string, provider: () => Promise<CacheVal | null>): Promise<CacheVal | null>;
|
|
68
|
+
/**
|
|
69
|
+
* 清理无用的缓存内容
|
|
70
|
+
*/
|
|
71
|
+
private clean;
|
|
72
|
+
/**
|
|
73
|
+
* 清除缓存内容
|
|
74
|
+
*/
|
|
75
|
+
clear(): void;
|
|
76
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
4
|
+
/**
|
|
5
|
+
* 静态资源的映射规则
|
|
6
|
+
*/
|
|
7
|
+
export type ServerStaticRules = Record<
|
|
8
|
+
/**
|
|
9
|
+
* 要映射的路径
|
|
10
|
+
*/
|
|
11
|
+
string, {
|
|
12
|
+
/**
|
|
13
|
+
* 文件目录
|
|
14
|
+
*/
|
|
15
|
+
dir: string;
|
|
16
|
+
/**
|
|
17
|
+
* 客户端缓存时长,单位秒,根据设定生成消息头 Cache-Control: max-age=时长,设置为小于等于0可关闭
|
|
18
|
+
*/
|
|
19
|
+
cacheAge?: number;
|
|
20
|
+
}>;
|
|
21
|
+
export declare class StaticHandler {
|
|
22
|
+
private readonly DEFAULT_CONTENT_TYPE;
|
|
23
|
+
private readonly maxFileSize;
|
|
24
|
+
private cache?;
|
|
25
|
+
private rules;
|
|
26
|
+
/**
|
|
27
|
+
* 静态处理器。规则说明:
|
|
28
|
+
* 请求路径仅支持前缀匹配,不支持通配符,比如 /a/demo.html 可以匹配 /a 路径,响应配置的文件目录下的 demo.html 文件。
|
|
29
|
+
* 路径配置是有优先级的,如果访问 /a/b/music.mp3 则会匹配到 /a/b 的配置,而不是 /a ,因为 /a/b 的配置更详细,优先级也更高,
|
|
30
|
+
* 并且如果从 /a/b 配置的目录下没有找到文件,也不会再尝试 /a 的配置。
|
|
31
|
+
*
|
|
32
|
+
* 静态文件同时也支持主页自动映射,比如访问 /a/b/c ,会匹配到 /a/b 的配置,然后在配置的文件目录下寻找文件 c ,
|
|
33
|
+
* 如果找不到则尝试寻找目录 c 下的 index.html 文件。
|
|
34
|
+
* @param rules 规则设置
|
|
35
|
+
*/
|
|
36
|
+
constructor(rules: ServerStaticRules);
|
|
37
|
+
/**
|
|
38
|
+
* 处理静态文件 get 请求
|
|
39
|
+
* @param request
|
|
40
|
+
* @param response
|
|
41
|
+
* @param path
|
|
42
|
+
* @returns 是否能够处理,如果因为找不到文件或其它原因无法处理则返回 false ,由后续流程继续处理
|
|
43
|
+
*/
|
|
44
|
+
handleGet(request: IncomingMessage, response: ServerResponse, path: string): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* 处理 head 请求,不响应正文内容,如果文件可以被找到,仅仅响应以下的消息头:
|
|
47
|
+
* Content-Length
|
|
48
|
+
* Content-Type
|
|
49
|
+
* Last-Modified
|
|
50
|
+
* Cache-Control
|
|
51
|
+
*
|
|
52
|
+
* @param path 请求路径
|
|
53
|
+
* @param response
|
|
54
|
+
* @returns 是否成功处理
|
|
55
|
+
*/
|
|
56
|
+
handleHead(path: string, response: ServerResponse): Promise<boolean>;
|
|
57
|
+
endRespWithBuffer(response: ServerResponse, buffer: Buffer): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* 构建响应文件
|
|
60
|
+
*
|
|
61
|
+
* @param path
|
|
62
|
+
* @param headers
|
|
63
|
+
* @returns
|
|
64
|
+
*/
|
|
65
|
+
private buildRespFile;
|
|
66
|
+
/**
|
|
67
|
+
* 根据路径查找文件
|
|
68
|
+
* @param path 访问路径
|
|
69
|
+
* @returns 返回被查询到的文件信息,如果找不到则返回 null
|
|
70
|
+
*/
|
|
71
|
+
private findFile;
|
|
72
|
+
}
|
|
@@ -15,7 +15,13 @@ export declare function update<T>(config: MysqlConfig, connection: PoolConnectio
|
|
|
15
15
|
* 更新器
|
|
16
16
|
*/
|
|
17
17
|
export type Updater<T> = Partial<{
|
|
18
|
-
[key in keyof T]: T[key] | undefined | ['setNull'] | ['inc', number]
|
|
18
|
+
[key in keyof T]: T[key] | undefined | ['setNull'] | ['inc', number]
|
|
19
|
+
/**
|
|
20
|
+
* 设置一个字段的值,和直接赋值是一样的,作用是解决一些特殊的情况的冲突
|
|
21
|
+
* 比如将 json 字段的值设置为 ['setNull'] ,这就会被认为是要置空,
|
|
22
|
+
* 使用 ['set',['setNull']] 就可以解决这个问题
|
|
23
|
+
*/
|
|
24
|
+
| ['set', T[key]];
|
|
19
25
|
}>;
|
|
20
26
|
/**
|
|
21
27
|
* 部分更新
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PropValidator
|
|
1
|
+
import { PropValidator } from '..';
|
|
2
2
|
/**
|
|
3
3
|
* 校验数组的条目.
|
|
4
4
|
*/
|
|
5
|
-
export declare function array<
|
|
5
|
+
export declare function array<T>(opts: PropValidator<T>[]): PropValidator<T[] | undefined>;
|
|
@@ -4,4 +4,4 @@ import { PropValidator, ValidationOpts } from '..';
|
|
|
4
4
|
* @param opts
|
|
5
5
|
* @returns
|
|
6
6
|
*/
|
|
7
|
-
export declare function plainObject<T>(opts: ValidationOpts<T
|
|
7
|
+
export declare function plainObject<T>(opts: ValidationOpts<Exclude<T, undefined>>): PropValidator<T>;
|