@taicode/common-server 4.0.0-beta.1 → 4.0.0-beta.3
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/output/app/boot.d.ts +9 -13
- package/output/app/boot.d.ts.map +1 -1
- package/output/app/boot.js +62 -27
- package/output/app/context.d.ts +7 -1
- package/output/app/context.d.ts.map +1 -1
- package/output/app/context.js +9 -3
- package/output/app/core/index.d.ts +3 -3
- package/output/app/core/index.d.ts.map +1 -1
- package/output/app/core/index.js +1 -1
- package/output/app/core/response.d.ts +8 -8
- package/output/app/core/response.d.ts.map +1 -1
- package/output/app/core/response.js +6 -6
- package/output/app/define-server.negative-cases.d.ts +8 -0
- package/output/app/define-server.negative-cases.d.ts.map +1 -1
- package/output/app/define-server.negative-cases.js +60 -1
- package/output/app/entries.d.ts +2 -0
- package/output/app/entries.d.ts.map +1 -1
- package/output/app/entries.js +2 -0
- package/output/app/error-contract.test.js +110 -8
- package/output/app/index.d.ts +1 -1
- package/output/app/index.d.ts.map +1 -1
- package/output/app/lifecycle-logging.test.js +23 -3
- package/output/app/lifecycle.d.ts +32 -6
- package/output/app/lifecycle.d.ts.map +1 -1
- package/output/app/lifecycle.js +34 -6
- package/output/app/lifecycle.test.js +4 -3
- package/output/app/middleware-order.test.js +4 -3
- package/output/app/redis.d.ts +5 -1
- package/output/app/redis.d.ts.map +1 -1
- package/output/app/redis.js +5 -1
- package/output/app/resources.test.js +45 -20
- package/output/app/shutdown.d.ts +9 -4
- package/output/app/shutdown.d.ts.map +1 -1
- package/output/app/shutdown.js +16 -4
- package/output/app/shutdown.test.js +125 -18
- package/output/app/types.d.ts +45 -5
- package/output/app/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -13,13 +13,24 @@ function createRecordingHandles(record, throwOn) {
|
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
15
|
return {
|
|
16
|
-
|
|
16
|
+
flushRouters: step('flushRouters'),
|
|
17
|
+
flushMiddlewares: step('flushMiddlewares'),
|
|
18
|
+
flushServices: step('flushServices'),
|
|
17
19
|
disposeServices: step('disposeServices'),
|
|
20
|
+
flushConfig: step('flushConfig'),
|
|
21
|
+
flushResources: step('flushResources'),
|
|
18
22
|
};
|
|
19
23
|
}
|
|
20
24
|
describe('SHUTDOWN_ORDER', () => {
|
|
21
|
-
it('
|
|
22
|
-
expect(SHUTDOWN_ORDER).toEqual([
|
|
25
|
+
it('固定六步且顺序不可变:阶段逆序 flush,services 内部先 flush 再逐单元 dispose', () => {
|
|
26
|
+
expect(SHUTDOWN_ORDER).toEqual([
|
|
27
|
+
'flushRouters',
|
|
28
|
+
'flushMiddlewares',
|
|
29
|
+
'flushServices',
|
|
30
|
+
'disposeServices',
|
|
31
|
+
'flushConfig',
|
|
32
|
+
'flushResources',
|
|
33
|
+
]);
|
|
23
34
|
});
|
|
24
35
|
});
|
|
25
36
|
describe('runShutdown', () => {
|
|
@@ -32,7 +43,7 @@ describe('runShutdown', () => {
|
|
|
32
43
|
it('单步抛错不阻断后续,并聚合上报', async () => {
|
|
33
44
|
const record = [];
|
|
34
45
|
const { entries, log } = createShutdownLog();
|
|
35
|
-
await runShutdown(createRecordingHandles(record, '
|
|
46
|
+
await runShutdown(createRecordingHandles(record, 'flushRouters'), log);
|
|
36
47
|
expect(record).toEqual([...SHUTDOWN_ORDER]);
|
|
37
48
|
const aggregate = entries.find((entry) => entry.msg === '[shutdown] completed with errors');
|
|
38
49
|
expect(aggregate).toBeDefined();
|
|
@@ -42,15 +53,25 @@ describe('runShutdown', () => {
|
|
|
42
53
|
});
|
|
43
54
|
});
|
|
44
55
|
describe('关闭流程集成', () => {
|
|
45
|
-
it('
|
|
56
|
+
it('各阶段 disposer 按阶段逆序执行:routers → middlewares → services → config → resources', async () => {
|
|
46
57
|
const calls = [];
|
|
47
58
|
const server = defineServer({
|
|
48
|
-
app: { service: 'shutdown-
|
|
49
|
-
resources: () =>
|
|
50
|
-
|
|
59
|
+
app: { service: 'shutdown-stages', title: 'Shutdown Stages', version: '1.0.0' },
|
|
60
|
+
resources: (ctx) => {
|
|
61
|
+
ctx.disposer.add(() => {
|
|
62
|
+
calls.push('flushResources');
|
|
63
|
+
});
|
|
64
|
+
return {};
|
|
65
|
+
},
|
|
66
|
+
config: (ctx) => {
|
|
67
|
+
ctx.disposer.add(() => {
|
|
68
|
+
calls.push('flushConfig');
|
|
69
|
+
});
|
|
70
|
+
return {};
|
|
71
|
+
},
|
|
51
72
|
services: (ctx) => {
|
|
52
|
-
ctx.disposer.
|
|
53
|
-
calls.push('
|
|
73
|
+
ctx.disposer.add(() => {
|
|
74
|
+
calls.push('flushServices');
|
|
54
75
|
});
|
|
55
76
|
return {
|
|
56
77
|
a: {
|
|
@@ -58,26 +79,111 @@ describe('关闭流程集成', () => {
|
|
|
58
79
|
calls.push('disposeServiceA');
|
|
59
80
|
},
|
|
60
81
|
},
|
|
61
|
-
b: {
|
|
62
|
-
dispose: () => {
|
|
63
|
-
calls.push('disposeServiceB');
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
82
|
};
|
|
67
83
|
},
|
|
84
|
+
middlewares: (ctx) => {
|
|
85
|
+
ctx.disposer.add(() => {
|
|
86
|
+
calls.push('flushMiddlewares');
|
|
87
|
+
});
|
|
88
|
+
return [];
|
|
89
|
+
},
|
|
90
|
+
routers: (ctx) => {
|
|
91
|
+
ctx.disposer.add(() => {
|
|
92
|
+
calls.push('flushRouters');
|
|
93
|
+
});
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
const app = await startServer(server, { listen: false });
|
|
97
|
+
await app.close();
|
|
98
|
+
expect(calls).toEqual([
|
|
99
|
+
'flushRouters',
|
|
100
|
+
'flushMiddlewares',
|
|
101
|
+
'flushServices',
|
|
102
|
+
'disposeServiceA',
|
|
103
|
+
'flushConfig',
|
|
104
|
+
'flushResources',
|
|
105
|
+
]);
|
|
106
|
+
});
|
|
107
|
+
it('阶段内多个 disposer 按**逆注册序**(LIFO)执行', async () => {
|
|
108
|
+
const calls = [];
|
|
109
|
+
const server = defineServer({
|
|
110
|
+
app: { service: 'shutdown-lifo', title: 'Shutdown LIFO', version: '1.0.0' },
|
|
111
|
+
resources: (ctx) => {
|
|
112
|
+
// 先建 A,再建 B(B 可能依赖 A)→ 关闭时先 B 后 A
|
|
113
|
+
ctx.disposer.add(() => {
|
|
114
|
+
calls.push('disposeA');
|
|
115
|
+
});
|
|
116
|
+
ctx.disposer.add(() => {
|
|
117
|
+
calls.push('disposeB');
|
|
118
|
+
});
|
|
119
|
+
return {};
|
|
120
|
+
},
|
|
121
|
+
config: () => ({}),
|
|
122
|
+
services: () => ({}),
|
|
68
123
|
middlewares: () => [],
|
|
69
124
|
routers: () => undefined,
|
|
70
125
|
});
|
|
71
126
|
const app = await startServer(server, { listen: false });
|
|
72
127
|
await app.close();
|
|
73
|
-
|
|
74
|
-
|
|
128
|
+
expect(calls).toEqual(['disposeB', 'disposeA']);
|
|
129
|
+
});
|
|
130
|
+
it('某个 disposer 抛错不影响同阶段其它 disposer(且 `close()` 不抛)', async () => {
|
|
131
|
+
const calls = [];
|
|
132
|
+
const server = defineServer({
|
|
133
|
+
app: { service: 'shutdown-disposer-error', title: 'Shutdown Disposer Error', version: '1.0.0' },
|
|
134
|
+
resources: (ctx) => {
|
|
135
|
+
ctx.disposer.add(() => {
|
|
136
|
+
calls.push('disposeA');
|
|
137
|
+
});
|
|
138
|
+
ctx.disposer.add(() => {
|
|
139
|
+
calls.push('disposeB:throw');
|
|
140
|
+
throw new Error('disposer boom');
|
|
141
|
+
});
|
|
142
|
+
ctx.disposer.add(() => {
|
|
143
|
+
calls.push('disposeC');
|
|
144
|
+
});
|
|
145
|
+
return {};
|
|
146
|
+
},
|
|
147
|
+
config: () => ({}),
|
|
148
|
+
services: () => ({}),
|
|
149
|
+
middlewares: () => [],
|
|
150
|
+
routers: () => undefined,
|
|
151
|
+
});
|
|
152
|
+
const app = await startServer(server, { listen: false });
|
|
153
|
+
await expect(app.close()).resolves.toBeUndefined();
|
|
154
|
+
// LIFO:C → B(抛错)→ A;B 的错误不阻断 A
|
|
155
|
+
expect(calls).toEqual(['disposeC', 'disposeB:throw', 'disposeA']);
|
|
156
|
+
});
|
|
157
|
+
it('未注册任何 disposer 时无操作:关闭照常完成', async () => {
|
|
158
|
+
const calls = [];
|
|
159
|
+
const server = defineServer({
|
|
160
|
+
app: { service: 'shutdown-empty', title: 'Shutdown Empty', version: '1.0.0' },
|
|
161
|
+
resources: () => ({}),
|
|
162
|
+
config: () => ({}),
|
|
163
|
+
services: () => ({
|
|
164
|
+
a: {
|
|
165
|
+
dispose: () => {
|
|
166
|
+
calls.push('disposeServiceA');
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
}),
|
|
170
|
+
middlewares: () => [],
|
|
171
|
+
routers: () => undefined,
|
|
172
|
+
});
|
|
173
|
+
const app = await startServer(server, { listen: false });
|
|
174
|
+
await expect(app.close()).resolves.toBeUndefined();
|
|
175
|
+
expect(calls).toEqual(['disposeServiceA']);
|
|
75
176
|
});
|
|
76
177
|
it('StartServerOptions.shutdown 整体覆盖默认关闭流程', async () => {
|
|
77
178
|
const calls = [];
|
|
78
179
|
const server = defineServer({
|
|
79
180
|
app: { service: 'shutdown-override', title: 'Shutdown Override', version: '1.0.0' },
|
|
80
|
-
resources: () =>
|
|
181
|
+
resources: (ctx) => {
|
|
182
|
+
ctx.disposer.add(() => {
|
|
183
|
+
calls.push('flushResources');
|
|
184
|
+
});
|
|
185
|
+
return {};
|
|
186
|
+
},
|
|
81
187
|
config: () => ({}),
|
|
82
188
|
services: () => ({
|
|
83
189
|
a: {
|
|
@@ -98,6 +204,7 @@ describe('关闭流程集成', () => {
|
|
|
98
204
|
},
|
|
99
205
|
});
|
|
100
206
|
await app.close();
|
|
207
|
+
// 整体覆盖:默认六步(含各阶段 flush)都不执行
|
|
101
208
|
expect(calls).toEqual(['custom']);
|
|
102
209
|
});
|
|
103
210
|
});
|
package/output/app/types.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { FastifyBaseLogger, FastifyInstance, RawServerDefault } from 'fasti
|
|
|
3
3
|
import type { ZodTypeProvider } from 'fastify-type-provider-zod';
|
|
4
4
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
5
5
|
import type { ConfigEnv } from './env.js';
|
|
6
|
+
import type { SystemError } from './errors.js';
|
|
6
7
|
/**
|
|
7
8
|
* `defineServer` 槽位口径与接口类型(N1 / N2,**唯一规格来源**)。
|
|
8
9
|
*
|
|
@@ -20,8 +21,16 @@ import type { ConfigEnv } from './env.js';
|
|
|
20
21
|
* 槽位只能引用**排在它前面**的产物(向下引用是编译错误);`env` 只属引导期
|
|
21
22
|
* (`resources` / `config` 可见,运行期三层一律看不到)。
|
|
22
23
|
*
|
|
24
|
+
* **`disposer` 是每个槽位 ctx 的标配**(不是某个槽位专属):在**创建某个东西的地方**当场
|
|
25
|
+
* `ctx.disposer.add(() => 释放它)`,创建与释放同处一地;`disposer` 是**出口**(不产出任何依赖),
|
|
26
|
+
* 因此不会造成循环,也不削弱「只给该阶段该看的字段」的约束。
|
|
27
|
+
*
|
|
28
|
+
* 生命周期:每个阶段一个独立的 `Disposer` 实例;关闭时**按阶段逆序 flush**
|
|
29
|
+
* `routers → middlewares → services → config → resources`(services 阶段内部:先 flush
|
|
30
|
+
* disposer,再逐单元逆序 `dispose`)。详见 `lifecycle.ts` / `shutdown.ts`。
|
|
31
|
+
*
|
|
23
32
|
* 类型安全机制(N2 §1):
|
|
24
|
-
* - **M1 分阶段 ctx
|
|
33
|
+
* - **M1 分阶段 ctx**:每个工厂只拿到「该阶段该看的字段」(**外加每个阶段都有的 `disposer`**);
|
|
25
34
|
* - **M2 `Awaited<>` 归一**:工厂签名写 `(ctx) => R`(不是 `R | Promise<R>`),下游一律
|
|
26
35
|
* `Awaited<R>` / `Awaited<C>` / `Awaited<S>`;
|
|
27
36
|
* - **M3 资源嵌套**:资源包挂在 `ctx.resources` 上(不再摊平到 ctx,键冲突从根上消失);
|
|
@@ -82,23 +91,49 @@ export type Live<T> = {
|
|
|
82
91
|
/** 框架在 ctx 上暴露的资源视图(`Awaited<>` 归一 + `false` 键剔除) */
|
|
83
92
|
export type ResourcesView<R> = Live<Awaited<R>>;
|
|
84
93
|
/**
|
|
85
|
-
*
|
|
94
|
+
* 资源错误分类器(响应层用)。
|
|
95
|
+
*
|
|
96
|
+
* **每个资源注册自己的分类器**(一个资源一个):只认领自己错误域内的错误,认领不了返回 `null` 交给
|
|
97
|
+
* 下一个。由服务仓在 `resources(ctx)` 里通过 `ctx.registerClassifyError(...)` 注册;可注册多个,
|
|
98
|
+
* 按注册顺序求值取第一个非 `null` 的结果;全部未命中 / 一个都没注册 → 响应层落 `UNKNOWN_ERROR` 兜底。
|
|
99
|
+
*/
|
|
100
|
+
export type ErrorClassifier = (error: unknown) => SystemError | null;
|
|
101
|
+
/**
|
|
102
|
+
* `resources(ctx)` 的入参:**`env` + `log` + `disposer`**(外加槽位专属的注册能力)。
|
|
86
103
|
*
|
|
87
104
|
* 结构上排除 `config` / `services` / `app` → 「资源依赖配置」这类循环**编译期写不出来**。
|
|
105
|
+
* `disposer` 是**出口**(只能注册释放函数,不产出依赖),因此不构成新的循环面:
|
|
106
|
+
* 资源在构造处当场 `ctx.disposer.add(() => 释放它)`,关闭时框架最后 flush。
|
|
88
107
|
*/
|
|
89
108
|
export interface ResourcesContext {
|
|
90
109
|
readonly env: ConfigEnv;
|
|
91
110
|
readonly log: LoggerLike;
|
|
111
|
+
/**
|
|
112
|
+
* 本阶段的释放器:**在创建资源的地方当场注册释放**。
|
|
113
|
+
*
|
|
114
|
+
* 关闭序中 `resources` 阶段**最后** flush(所有其它阶段都还活着)。
|
|
115
|
+
*/
|
|
116
|
+
readonly disposer: Disposer;
|
|
117
|
+
/**
|
|
118
|
+
* **每个资源注册自己的错误分类器**(响应层用)。
|
|
119
|
+
*
|
|
120
|
+
* 一个资源一个分类器,各管各的错误域:只认领自己域内的错误,认领不了返回 `null` 交给下一个。
|
|
121
|
+
* 可注册多个:按注册顺序求值,取第一个非 `null` 的结果;全部未命中 → 响应层落 `UNKNOWN_ERROR` 兜底。
|
|
122
|
+
* 本方法是 **resources 槽位专属能力**(其他槽位的 ctx 不提供)。
|
|
123
|
+
*/
|
|
124
|
+
registerClassifyError(classifier: ErrorClassifier): void;
|
|
92
125
|
}
|
|
93
126
|
export type ResourcesFactory<R> = (ctx: ResourcesContext) => R;
|
|
94
127
|
/**
|
|
95
|
-
* `config(ctx)` 的入参:`env` + `log` + 资源视图。
|
|
128
|
+
* `config(ctx)` 的入参:`env` + `log` + `disposer` + 资源视图。
|
|
96
129
|
*
|
|
97
130
|
* **没有** `services`(此时尚未构造)/ `app`(此时尚未装配)。
|
|
98
131
|
*/
|
|
99
132
|
export interface ConfigContext<R> {
|
|
100
133
|
readonly env: ConfigEnv;
|
|
101
134
|
readonly log: LoggerLike;
|
|
135
|
+
/** 本阶段的释放器(关闭时在 services 之后、resources 之前 flush) */
|
|
136
|
+
readonly disposer: Disposer;
|
|
102
137
|
readonly resources: ResourcesView<R>;
|
|
103
138
|
}
|
|
104
139
|
export type ConfigFactory<R, C> = (ctx: ConfigContext<R>) => C;
|
|
@@ -119,6 +154,7 @@ export interface ServiceUnit {
|
|
|
119
154
|
*/
|
|
120
155
|
export interface ServiceContext<R, C> {
|
|
121
156
|
readonly log: LoggerLike;
|
|
157
|
+
/** 本阶段的释放器(关闭时**先** flush 它,再逐单元逆序 `dispose`) */
|
|
122
158
|
readonly disposer: Disposer;
|
|
123
159
|
readonly resources: ResourcesView<R>;
|
|
124
160
|
readonly config: Awaited<C>;
|
|
@@ -134,25 +170,29 @@ export interface MiddlewareUnit {
|
|
|
134
170
|
register(app: AppInstance): void | Promise<void>;
|
|
135
171
|
}
|
|
136
172
|
/**
|
|
137
|
-
* `middlewares(ctx)` 的入参:`app` + `log` + `services` + `config`。
|
|
173
|
+
* `middlewares(ctx)` 的入参:`app` + `log` + `disposer` + `services` + `config`。
|
|
138
174
|
*
|
|
139
175
|
* ❗**故意没有 `resources` / `env`** —— 中间件要访问数据层必须穿过 service。
|
|
140
176
|
*/
|
|
141
177
|
export interface MiddlewareContext<C, S> {
|
|
142
178
|
readonly app: AppInstance;
|
|
143
179
|
readonly log: LoggerLike;
|
|
180
|
+
/** 本阶段的释放器(关闭时最早 flush:在 services / config / resources 之前) */
|
|
181
|
+
readonly disposer: Disposer;
|
|
144
182
|
readonly services: Awaited<S>;
|
|
145
183
|
readonly config: Awaited<C>;
|
|
146
184
|
}
|
|
147
185
|
export type MiddlewaresFactory<C, S> = (ctx: MiddlewareContext<C, S>) => MiddlewareUnit[];
|
|
148
186
|
/**
|
|
149
|
-
* `routers(ctx)` 的入参:`app` + `log` + `services`。
|
|
187
|
+
* `routers(ctx)` 的入参:`app` + `log` + `disposer` + `services`。
|
|
150
188
|
*
|
|
151
189
|
* ❗**故意没有 `resources` / `env` / `config`** —— 路由**只能穿过 service**,绕不过层直连数据层。
|
|
152
190
|
*/
|
|
153
191
|
export interface RouterContext<S> {
|
|
154
192
|
readonly app: AppInstance;
|
|
155
193
|
readonly log: LoggerLike;
|
|
194
|
+
/** 本阶段的释放器(关闭时**最先** flush) */
|
|
195
|
+
readonly disposer: Disposer;
|
|
156
196
|
readonly services: Awaited<S>;
|
|
157
197
|
}
|
|
158
198
|
export type RoutersFactory<S> = (ctx: RouterContext<S>) => void | Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../source/app/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../source/app/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taicode/common-server",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.3",
|
|
4
4
|
"author": "Alain",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"description": "",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"fastify": "^5.5.0",
|
|
37
37
|
"redis": "^5.11.0",
|
|
38
|
-
"@taicode/common-base": "^4.0.0-beta.
|
|
38
|
+
"@taicode/common-base": "^4.0.0-beta.3"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@eslint/js": "^9.39.3",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"redis": "^5.11.0",
|
|
50
50
|
"typescript-eslint": "^8.56.1",
|
|
51
51
|
"vitest": "^3.2.4",
|
|
52
|
-
"@taicode/common-base": "^4.0.0-beta.
|
|
52
|
+
"@taicode/common-base": "^4.0.0-beta.3"
|
|
53
53
|
},
|
|
54
54
|
"scripts": {
|
|
55
55
|
"test": "vitest run",
|