@pangza/core 1.1.6 → 1.1.7

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.
Files changed (36) hide show
  1. package/README.md +3 -3
  2. package/dist/Application/aop.d.ts +91 -0
  3. package/dist/Application/aop.d.ts.map +1 -0
  4. package/dist/Application/aop.js +274 -0
  5. package/dist/Application/aop.js.map +1 -0
  6. package/dist/Application/callbackArgs.js +20 -0
  7. package/dist/Application/callbackArgs.js.map +1 -1
  8. package/dist/Application/decorators.d.ts +15 -0
  9. package/dist/Application/decorators.d.ts.map +1 -1
  10. package/dist/Application/decorators.js +26 -0
  11. package/dist/Application/decorators.js.map +1 -1
  12. package/dist/Application/filters.d.ts +67 -0
  13. package/dist/Application/filters.d.ts.map +1 -0
  14. package/dist/Application/filters.js +113 -0
  15. package/dist/Application/filters.js.map +1 -0
  16. package/dist/Application/index.d.ts +43 -5
  17. package/dist/Application/index.d.ts.map +1 -1
  18. package/dist/Application/index.js +166 -6
  19. package/dist/Application/index.js.map +1 -1
  20. package/dist/Application/interceptors.d.ts +61 -0
  21. package/dist/Application/interceptors.d.ts.map +1 -1
  22. package/dist/Application/interceptors.js +105 -0
  23. package/dist/Application/interceptors.js.map +1 -1
  24. package/dist/Application/pathMatch.d.ts +13 -0
  25. package/dist/Application/pathMatch.d.ts.map +1 -0
  26. package/dist/Application/pathMatch.js +90 -0
  27. package/dist/Application/pathMatch.js.map +1 -0
  28. package/dist/Application/types.d.ts +6 -2
  29. package/dist/Application/types.d.ts.map +1 -1
  30. package/dist/Application/types.js +2 -0
  31. package/dist/Application/types.js.map +1 -1
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +20 -1
  35. package/dist/index.js.map +1 -1
  36. package/package.json +2 -1
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # @pangza/core
2
-
3
- Application / IoC / Logger / config / Json / Validate / Exception
1
+ # @pangza/core
2
+
3
+ Application / IoC / Logger / config / Json / Validate / Exception
@@ -0,0 +1,91 @@
1
+ import "reflect-metadata";
2
+ import type { Request, Response } from "express";
3
+ import type { RouteOption } from "./types";
4
+ /** 当前 HTTP 调用上下文(Controller 管线内由 mountRoute 注入) */
5
+ export interface MethodInvocationContext {
6
+ req?: Request;
7
+ res?: Response;
8
+ option?: RouteOption;
9
+ /** 路由路径(若有) */
10
+ path?: string;
11
+ /** HTTP 方法(若有) */
12
+ httpMethod?: string;
13
+ controllerName?: string;
14
+ handlerName?: string;
15
+ }
16
+ /**
17
+ * 方法调用连接点(对齐 Spring ProceedingJoinPoint)。
18
+ * - 修改 `args` 可影响后续 Advice / 原方法
19
+ * - 必须调用 `proceed()`(或自行短路返回)才会继续链
20
+ */
21
+ export interface MethodInvocation {
22
+ target: object;
23
+ methodName: string;
24
+ args: unknown[];
25
+ /** HTTP 场景下有值;纯 Service 调用可能为空 */
26
+ context?: MethodInvocationContext;
27
+ proceed: () => Promise<unknown>;
28
+ }
29
+ /** Around:完整包裹;order 越小越靠外(优先级越高,对齐 Spring Ordered) */
30
+ export type AroundAdvice = (invocation: MethodInvocation) => unknown | Promise<unknown>;
31
+ export type BeforeAdvice = (invocation: Omit<MethodInvocation, "proceed">) => void | Promise<void>;
32
+ export type AfterReturningAdvice = (invocation: Omit<MethodInvocation, "proceed">, result: unknown) => unknown | void | Promise<unknown | void>;
33
+ export type AfterThrowingAdvice = (invocation: Omit<MethodInvocation, "proceed">, error: unknown) => void | Promise<void>;
34
+ export type AfterAdvice = (invocation: Omit<MethodInvocation, "proceed">, error?: unknown) => void | Promise<void>;
35
+ export interface AdviceOptions {
36
+ /** 越小越靠外,默认 0 */
37
+ order?: number;
38
+ }
39
+ interface AdviceEntry {
40
+ kind: "around" | "before" | "afterReturning" | "afterThrowing" | "after";
41
+ order: number;
42
+ around?: AroundAdvice;
43
+ before?: BeforeAdvice;
44
+ afterReturning?: AfterReturningAdvice;
45
+ afterThrowing?: AfterThrowingAdvice;
46
+ after?: AfterAdvice;
47
+ }
48
+ /** 读取当前请求管线注入的调用上下文(非 HTTP 调用则为 undefined) */
49
+ export declare function getMethodInvocationContext(): MethodInvocationContext | undefined;
50
+ /** 供 Application.mountRoute 包裹业务回调 */
51
+ export declare function runWithMethodInvocationContext<T>(ctx: MethodInvocationContext, fn: () => T | Promise<T>): T | Promise<T>;
52
+ export declare function getMethodAdvices(ctor: Function, methodName: string): readonly AdviceEntry[];
53
+ /**
54
+ * 将元数据中的 Before/After* 折成 Around,再按 order 串链执行。
55
+ */
56
+ export declare function runAdviceChain(original: (...args: unknown[]) => unknown, target: object, methodName: string, args: unknown[], entries: readonly AdviceEntry[], context?: MethodInvocationContext): Promise<unknown>;
57
+ /**
58
+ * 创建 Around 装饰器(自定义注解的推荐入口)。
59
+ *
60
+ * @example
61
+ * export const Audit = (title: string) =>
62
+ * createAroundDecorator(async (inv) => {
63
+ * console.log("audit", title, inv.methodName, inv.context?.req?.path);
64
+ * return inv.proceed();
65
+ * }, { order: 100 });
66
+ *
67
+ * // 使用
68
+ * @PostMapping("/save")
69
+ * @Audit("保存用户")
70
+ * save(@RequestBody() body: User) { ... }
71
+ */
72
+ export declare function createAroundDecorator(advice: AroundAdvice, options?: AdviceOptions): MethodDecorator;
73
+ /** 直接使用的 Around 方法装饰器 */
74
+ export declare function Around(advice: AroundAdvice, options?: AdviceOptions): MethodDecorator;
75
+ export declare function createBeforeDecorator(advice: BeforeAdvice, options?: AdviceOptions): MethodDecorator;
76
+ export declare function Before(advice: BeforeAdvice, options?: AdviceOptions): MethodDecorator;
77
+ export declare function createAfterReturningDecorator(advice: AfterReturningAdvice, options?: AdviceOptions): MethodDecorator;
78
+ export declare function AfterReturning(advice: AfterReturningAdvice, options?: AdviceOptions): MethodDecorator;
79
+ export declare function createAfterThrowingDecorator(advice: AfterThrowingAdvice, options?: AdviceOptions): MethodDecorator;
80
+ export declare function AfterThrowing(advice: AfterThrowingAdvice, options?: AdviceOptions): MethodDecorator;
81
+ export declare function createAfterDecorator(advice: AfterAdvice, options?: AdviceOptions): MethodDecorator;
82
+ export declare function After(advice: AfterAdvice, options?: AdviceOptions): MethodDecorator;
83
+ export declare function markAdvice(key: string | symbol): MethodDecorator;
84
+ /**
85
+ * 为 `markAdvice(key)` 注册切面(可在标记之前或之后调用)。
86
+ */
87
+ export declare function registerAroundAdvice(key: string | symbol, advice: AroundAdvice, options?: AdviceOptions): void;
88
+ /** 创建「标记装饰器」:等价于固定 key 的 markAdvice */
89
+ export declare function createMarkDecorator(key: string | symbol): () => MethodDecorator;
90
+ export {};
91
+ //# sourceMappingURL=aop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aop.d.ts","sourceRoot":"","sources":["../../src/Application/aop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMethodInvocationContext = getMethodInvocationContext;
4
+ exports.runWithMethodInvocationContext = runWithMethodInvocationContext;
5
+ exports.getMethodAdvices = getMethodAdvices;
6
+ exports.runAdviceChain = runAdviceChain;
7
+ exports.createAroundDecorator = createAroundDecorator;
8
+ exports.Around = Around;
9
+ exports.createBeforeDecorator = createBeforeDecorator;
10
+ exports.Before = Before;
11
+ exports.createAfterReturningDecorator = createAfterReturningDecorator;
12
+ exports.AfterReturning = AfterReturning;
13
+ exports.createAfterThrowingDecorator = createAfterThrowingDecorator;
14
+ exports.AfterThrowing = AfterThrowing;
15
+ exports.createAfterDecorator = createAfterDecorator;
16
+ exports.After = After;
17
+ exports.markAdvice = markAdvice;
18
+ exports.registerAroundAdvice = registerAroundAdvice;
19
+ exports.createMarkDecorator = createMarkDecorator;
20
+ require("reflect-metadata");
21
+ const node_async_hooks_1 = require("node:async_hooks");
22
+ const METHOD_ADVICES_KEY = Symbol.for("pangza.aop.methodAdvices");
23
+ const ADVISED_FLAG = Symbol.for("pangza.aop.advised");
24
+ const invocationAls = new node_async_hooks_1.AsyncLocalStorage();
25
+ /** 读取当前请求管线注入的调用上下文(非 HTTP 调用则为 undefined) */
26
+ function getMethodInvocationContext() {
27
+ return invocationAls.getStore();
28
+ }
29
+ /** 供 Application.mountRoute 包裹业务回调 */
30
+ function runWithMethodInvocationContext(ctx, fn) {
31
+ return invocationAls.run(ctx, fn);
32
+ }
33
+ function getAdviceMap(ctor) {
34
+ return (Reflect.getMetadata(METHOD_ADVICES_KEY, ctor) ?? {});
35
+ }
36
+ function setAdviceMap(ctor, map) {
37
+ Reflect.defineMetadata(METHOD_ADVICES_KEY, map, ctor);
38
+ }
39
+ function addAdvice(ctor, methodName, entry) {
40
+ const map = { ...getAdviceMap(ctor) };
41
+ const list = map[methodName] ? [...map[methodName]] : [];
42
+ list.push(entry);
43
+ map[methodName] = list;
44
+ setAdviceMap(ctor, map);
45
+ }
46
+ function getMethodAdvices(ctor, methodName) {
47
+ return getAdviceMap(ctor)[methodName] ?? [];
48
+ }
49
+ function sortEntries(entries) {
50
+ return [...entries].sort((a, b) => a.order - b.order);
51
+ }
52
+ /**
53
+ * 将元数据中的 Before/After* 折成 Around,再按 order 串链执行。
54
+ */
55
+ async function runAdviceChain(original, target, methodName, args, entries, context) {
56
+ if (!entries.length) {
57
+ return original.apply(target, args);
58
+ }
59
+ const sorted = sortEntries(entries);
60
+ const aroundList = sorted.map((e) => toAround(e));
61
+ let index = 0;
62
+ const invocation = {
63
+ target,
64
+ methodName,
65
+ args,
66
+ context: context ?? getMethodInvocationContext(),
67
+ proceed: async () => {
68
+ if (index < aroundList.length) {
69
+ const advice = aroundList[index++];
70
+ return advice(invocation);
71
+ }
72
+ return original.apply(target, invocation.args);
73
+ },
74
+ };
75
+ return invocation.proceed();
76
+ }
77
+ function toAround(entry) {
78
+ if (entry.kind === "around" && entry.around) {
79
+ return entry.around;
80
+ }
81
+ if (entry.kind === "before" && entry.before) {
82
+ const before = entry.before;
83
+ return async (inv) => {
84
+ await before(inv);
85
+ return inv.proceed();
86
+ };
87
+ }
88
+ if (entry.kind === "afterReturning" && entry.afterReturning) {
89
+ const afterReturning = entry.afterReturning;
90
+ return async (inv) => {
91
+ const result = await inv.proceed();
92
+ const out = await afterReturning(inv, result);
93
+ return out === undefined ? result : out;
94
+ };
95
+ }
96
+ if (entry.kind === "afterThrowing" && entry.afterThrowing) {
97
+ const afterThrowing = entry.afterThrowing;
98
+ return async (inv) => {
99
+ try {
100
+ return await inv.proceed();
101
+ }
102
+ catch (err) {
103
+ await afterThrowing(inv, err);
104
+ throw err;
105
+ }
106
+ };
107
+ }
108
+ if (entry.kind === "after" && entry.after) {
109
+ const after = entry.after;
110
+ return async (inv) => {
111
+ let error;
112
+ try {
113
+ return await inv.proceed();
114
+ }
115
+ catch (err) {
116
+ error = err;
117
+ throw err;
118
+ }
119
+ finally {
120
+ await after(inv, error);
121
+ }
122
+ };
123
+ }
124
+ return (inv) => inv.proceed();
125
+ }
126
+ function ensureAdvised(target, propertyKey, descriptor) {
127
+ const original = descriptor.value;
128
+ if (typeof original !== "function")
129
+ return;
130
+ if (original[ADVISED_FLAG]) {
131
+ return;
132
+ }
133
+ const methodName = String(propertyKey);
134
+ const advised = async function (...args) {
135
+ const ctor = this.constructor;
136
+ const entries = resolveMethodAdviceEntries(ctor, methodName);
137
+ return runAdviceChain(original, this, methodName, args, entries, getMethodInvocationContext());
138
+ };
139
+ advised[ADVISED_FLAG] = true;
140
+ descriptor.value = advised;
141
+ }
142
+ function createAdviceDecorator(entry) {
143
+ return (target, propertyKey, descriptor) => {
144
+ if (!descriptor || typeof descriptor.value !== "function") {
145
+ return descriptor;
146
+ }
147
+ const ctor = target.constructor;
148
+ addAdvice(ctor, String(propertyKey), {
149
+ ...entry,
150
+ order: entry.order ?? 0,
151
+ });
152
+ ensureAdvised(target, propertyKey, descriptor);
153
+ return descriptor;
154
+ };
155
+ }
156
+ /**
157
+ * 创建 Around 装饰器(自定义注解的推荐入口)。
158
+ *
159
+ * @example
160
+ * export const Audit = (title: string) =>
161
+ * createAroundDecorator(async (inv) => {
162
+ * console.log("audit", title, inv.methodName, inv.context?.req?.path);
163
+ * return inv.proceed();
164
+ * }, { order: 100 });
165
+ *
166
+ * // 使用
167
+ * @PostMapping("/save")
168
+ * @Audit("保存用户")
169
+ * save(@RequestBody() body: User) { ... }
170
+ */
171
+ function createAroundDecorator(advice, options = {}) {
172
+ return createAdviceDecorator({
173
+ kind: "around",
174
+ around: advice,
175
+ order: options.order,
176
+ });
177
+ }
178
+ /** 直接使用的 Around 方法装饰器 */
179
+ function Around(advice, options = {}) {
180
+ return createAroundDecorator(advice, options);
181
+ }
182
+ function createBeforeDecorator(advice, options = {}) {
183
+ return createAdviceDecorator({
184
+ kind: "before",
185
+ before: advice,
186
+ order: options.order,
187
+ });
188
+ }
189
+ function Before(advice, options = {}) {
190
+ return createBeforeDecorator(advice, options);
191
+ }
192
+ function createAfterReturningDecorator(advice, options = {}) {
193
+ return createAdviceDecorator({
194
+ kind: "afterReturning",
195
+ afterReturning: advice,
196
+ order: options.order,
197
+ });
198
+ }
199
+ function AfterReturning(advice, options = {}) {
200
+ return createAfterReturningDecorator(advice, options);
201
+ }
202
+ function createAfterThrowingDecorator(advice, options = {}) {
203
+ return createAdviceDecorator({
204
+ kind: "afterThrowing",
205
+ afterThrowing: advice,
206
+ order: options.order,
207
+ });
208
+ }
209
+ function AfterThrowing(advice, options = {}) {
210
+ return createAfterThrowingDecorator(advice, options);
211
+ }
212
+ function createAfterDecorator(advice, options = {}) {
213
+ return createAdviceDecorator({
214
+ kind: "after",
215
+ after: advice,
216
+ order: options.order,
217
+ });
218
+ }
219
+ function After(advice, options = {}) {
220
+ return createAfterDecorator(advice, options);
221
+ }
222
+ /**
223
+ * 按「注解标记」注册全局 Around:先用 `markAdvice(key)` 标方法,再 `registerAroundAdvice(key, fn)`。
224
+ * 更接近 Spring `@Around("@annotation(...)")`;注册与标记顺序无关(运行时合并)。
225
+ */
226
+ const MARKER_ADVICES = new Map();
227
+ const METHOD_MARKERS_KEY = Symbol.for("pangza.aop.methodMarkers");
228
+ function getMethodMarkers(ctor, methodName) {
229
+ const map = Reflect.getMetadata(METHOD_MARKERS_KEY, ctor) ?? {};
230
+ return map[methodName] ?? [];
231
+ }
232
+ /** 本地 Advice + marker 全局 Advice */
233
+ function resolveMethodAdviceEntries(ctor, methodName) {
234
+ const local = [...getMethodAdvices(ctor, methodName)];
235
+ for (const key of getMethodMarkers(ctor, methodName)) {
236
+ const reg = MARKER_ADVICES.get(key);
237
+ if (!reg)
238
+ continue;
239
+ local.push({
240
+ kind: "around",
241
+ around: reg.advice,
242
+ order: reg.order,
243
+ });
244
+ }
245
+ return local;
246
+ }
247
+ function markAdvice(key) {
248
+ return (target, propertyKey, descriptor) => {
249
+ if (!descriptor || typeof descriptor.value !== "function") {
250
+ return descriptor;
251
+ }
252
+ const ctor = target.constructor;
253
+ const methodName = String(propertyKey);
254
+ const map = Reflect.getMetadata(METHOD_MARKERS_KEY, ctor) ?? {};
255
+ const list = map[methodName] ? [...map[methodName]] : [];
256
+ if (!list.includes(key))
257
+ list.push(key);
258
+ map[methodName] = list;
259
+ Reflect.defineMetadata(METHOD_MARKERS_KEY, map, ctor);
260
+ ensureAdvised(target, propertyKey, descriptor);
261
+ return descriptor;
262
+ };
263
+ }
264
+ /**
265
+ * 为 `markAdvice(key)` 注册切面(可在标记之前或之后调用)。
266
+ */
267
+ function registerAroundAdvice(key, advice, options = {}) {
268
+ MARKER_ADVICES.set(key, { advice, order: options.order ?? 0 });
269
+ }
270
+ /** 创建「标记装饰器」:等价于固定 key 的 markAdvice */
271
+ function createMarkDecorator(key) {
272
+ return () => markAdvice(key);
273
+ }
274
+ //# sourceMappingURL=aop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aop.js","sourceRoot":"","sources":["../../src/Application/aop.ts"],"names":[],"mappings":";;AA6EA,gEAIC;AAGD,wEAKC;AA+BD,4CAKC;AASD,wCA8BC;AAkHD,sDASC;AAGD,wBAKC;AAED,sDASC;AAED,wBAKC;AAED,sEASC;AAED,wCAKC;AAED,oEASC;AAED,sCAKC;AAED,oDASC;AAED,sBAKC;AA0CD,gCAkBC;AAKD,oDAMC;AAGD,kDAIC;AA7bD,4BAA0B;AAC1B,uDAAqD;AAIrD,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAClE,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAoEtD,MAAM,aAAa,GAAG,IAAI,oCAAiB,EAA2B,CAAC;AAEvE,8CAA8C;AAC9C,SAAgB,0BAA0B;IAGxC,OAAO,aAAa,CAAC,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,sCAAsC;AACtC,SAAgB,8BAA8B,CAC5C,GAA4B,EAC5B,EAAwB;IAExB,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,YAAY,CACnB,IAAc;IAEd,OAAO,CACJ,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,IAAI,CAE/B,IAAI,EAAE,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAAc,EACd,GAAkC;IAElC,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAChB,IAAc,EACd,UAAkB,EAClB,KAAkB;IAElB,MAAM,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjB,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,gBAAgB,CAC9B,IAAc,EACd,UAAkB;IAElB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,OAAsB;IACzC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,cAAc,CAClC,QAAyC,EACzC,MAAc,EACd,UAAkB,EAClB,IAAe,EACf,OAA+B,EAC/B,OAAiC;IAEjC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,OAAwB,CAAC,CAAC;IACrD,MAAM,UAAU,GAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,UAAU,GAAqB;QACnC,MAAM;QACN,UAAU;QACV,IAAI;QACJ,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE;QAChD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAE,CAAC;gBACpC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;IACF,OAAO,UAAU,CAAC,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAkB;IAClC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;YACnB,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC5D,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAC5C,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;YACnB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC9C,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1C,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAC1D,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAC1C,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;YACnB,IAAI,CAAC;gBACH,OAAO,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC9B,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;YACnB,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBACH,OAAO,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,GAAG,GAAG,CAAC;gBACZ,MAAM,GAAG,CAAC;YACZ,CAAC;oBAAS,CAAC;gBACT,MAAM,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAChC,CAAC;AAID,SAAS,aAAa,CACpB,MAAc,EACd,WAA4B,EAC5B,UAA8B;IAE9B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAA8B,CAAC;IAC3D,IAAI,OAAO,QAAQ,KAAK,UAAU;QAAE,OAAO;IAC3C,IAAK,QAAqD,CAAC,YAAY,CAAC,EAAE,CAAC;QACzE,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,OAAO,GAAc,KAAK,WAE9B,GAAG,IAAe;QAElB,MAAM,IAAI,GAAI,IAAkC,CAAC,WAAW,CAAC;QAC7D,MAAM,OAAO,GAAG,0BAA0B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7D,OAAO,cAAc,CACnB,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,OAAO,EACP,0BAA0B,EAAE,CAC7B,CAAC;IACJ,CAAC,CAAC;IACD,OAAoD,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC3E,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC;AAC7B,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAsD;IAEtD,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;QACzC,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC1D,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAI,MAAiB,CAAC,WAAW,CAAC;QAC5C,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE;YACnC,GAAG,KAAK;YACR,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;SACT,CAAC,CAAC;QAClB,aAAa,CAAC,MAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QACzD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,qBAAqB,CACnC,MAAoB,EACpB,UAAyB,EAAE;IAE3B,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;AACL,CAAC;AAED,yBAAyB;AACzB,SAAgB,MAAM,CACpB,MAAoB,EACpB,UAAyB,EAAE;IAE3B,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,qBAAqB,CACnC,MAAoB,EACpB,UAAyB,EAAE;IAE3B,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,MAAM,CACpB,MAAoB,EACpB,UAAyB,EAAE;IAE3B,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,6BAA6B,CAC3C,MAA4B,EAC5B,UAAyB,EAAE;IAE3B,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,gBAAgB;QACtB,cAAc,EAAE,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,cAAc,CAC5B,MAA4B,EAC5B,UAAyB,EAAE;IAE3B,OAAO,6BAA6B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,4BAA4B,CAC1C,MAA2B,EAC3B,UAAyB,EAAE;IAE3B,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,eAAe;QACrB,aAAa,EAAE,MAAM;QACrB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,aAAa,CAC3B,MAA2B,EAC3B,UAAyB,EAAE;IAE3B,OAAO,4BAA4B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,oBAAoB,CAClC,MAAmB,EACnB,UAAyB,EAAE;IAE3B,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,KAAK,CACnB,MAAmB,EACnB,UAAyB,EAAE;IAE3B,OAAO,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,EAG3B,CAAC;AAEJ,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAElE,SAAS,gBAAgB,CACvB,IAAc,EACd,UAAkB;IAElB,MAAM,GAAG,GACN,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,IAAI,CAE/B,IAAI,EAAE,CAAC;IACvB,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,mCAAmC;AACnC,SAAS,0BAA0B,CACjC,IAAc,EACd,UAAkB;IAElB,MAAM,KAAK,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,UAAU,CAAC,GAAoB;IAC7C,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;QACzC,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC1D,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAI,MAAiB,CAAC,WAAW,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,GAAG,GACN,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,IAAI,CAE/B,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACtD,aAAa,CAAC,MAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QACzD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,GAAoB,EACpB,MAAoB,EACpB,UAAyB,EAAE;IAE3B,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,uCAAuC;AACvC,SAAgB,mBAAmB,CACjC,GAAoB;IAEpB,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
@@ -55,6 +55,22 @@ function resolveRawCallbackArgs(req, res, option, arity = 2) {
55
55
  }
56
56
  return args;
57
57
  }
58
+ /** urlencoded / multipart 字段在 req.body;multer 等会挂 file(s) */
59
+ function resolveFormData(req, fieldName) {
60
+ const body = req.body && typeof req.body === "object" ? req.body : {};
61
+ if (fieldName !== undefined) {
62
+ return body[fieldName];
63
+ }
64
+ const anyReq = req;
65
+ if (anyReq.file !== undefined || anyReq.files !== undefined) {
66
+ return {
67
+ ...body,
68
+ ...(anyReq.file !== undefined ? { file: anyReq.file } : {}),
69
+ ...(anyReq.files !== undefined ? { files: anyReq.files } : {}),
70
+ };
71
+ }
72
+ return body;
73
+ }
58
74
  function resolveParamInject(req, meta) {
59
75
  switch (meta.source) {
60
76
  case "body":
@@ -65,6 +81,8 @@ function resolveParamInject(req, meta) {
65
81
  return req.headers ?? {};
66
82
  case "cookie":
67
83
  return req.cookies ?? {};
84
+ case "form":
85
+ return resolveFormData(req, meta.name);
68
86
  case "path": {
69
87
  const values = Object.values(req.params ?? {});
70
88
  if (meta.pathIndex !== undefined) {
@@ -92,6 +110,8 @@ function resolveCallbackArg(req, option) {
92
110
  return req.headers ?? {};
93
111
  case types_1.ParamType.COOKIE:
94
112
  return req.cookies ?? {};
113
+ case types_1.ParamType.FORM:
114
+ return resolveFormData(req);
95
115
  case types_1.ParamType.PATH:
96
116
  case types_1.ParamType.PARAMS: {
97
117
  const values = Object.values(req.params ?? {});
@@ -1 +1 @@
1
- {"version":3,"file":"callbackArgs.js","sourceRoot":"","sources":["../../src/Application/callbackArgs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"callbackArgs.js","sourceRoot":"","sources":["../../src/Application/callbackArgs.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,21 @@ export declare function RequestPath(index?: number): ParameterDecorator;
62
62
  export declare function RequestHeader(): ParameterDecorator;
63
63
  /** 注入 req.cookies(需自行挂 cookie 解析中间件) */
64
64
  export declare function RequestCookie(): ParameterDecorator;
65
+ /**
66
+ * 注入表单数据(urlencoded / multipart 字段,落在 req.body)。
67
+ * 需先 `registry(urlencoded({ extended: true }))`;multipart 文件需自行挂 multer 等。
68
+ *
69
+ * - `@RequestForm()`:整个表单对象;若存在 `req.file` / `req.files` 一并附上
70
+ * - `@RequestForm("name")`:单个字段
71
+ *
72
+ * @example
73
+ * @PostMapping("/login")
74
+ * login(@RequestForm() form: { username: string; password: string }) {}
75
+ *
76
+ * @PostMapping("/upload")
77
+ * upload(@RequestForm("title") title: string) {}
78
+ */
79
+ export declare function RequestForm(name?: string): ParameterDecorator;
65
80
  /**
66
81
  * 属性注入:从合并后的 application*.yaml 按路径取值。
67
82
  * 支持 `server.port`、`${server.port}`、`${server.port:3990}`;
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/Application/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAgBnD,8BAA8B;AAC9B,eAAO,MAAM,eAAe,eAAuC,CAAC;AAEpE;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,SAAK,GAAG,cAAc,CAWtD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEzD;AAgBD,6CAA6C;AAC7C,eAAO,MAAM,UAAU,2BAdO,WAAW,KAAG,eAcQ,CAAC;AAErD,+CAA+C;AAC/C,eAAO,MAAM,WAAW,2BAjBM,WAAW,KAAG,eAiBU,CAAC;AAEvD,6CAA6C;AAC7C,eAAO,MAAM,UAAU,2BApBO,WAAW,KAAG,eAoBQ,CAAC;AAErD,mDAAmD;AACnD,eAAO,MAAM,aAAa,2BAvBI,WAAW,KAAG,eAuBc,CAAC;AAE3D,wBAAgB,cAAc,IAAI,eAAe,CAIhD;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,aAAa,CAAA;CAAE,GAChC,eAAe,CAOjB;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,aAAa,CAAA;CAAE,GAChC,eAAe,CAOjB;AAED,wBAAgB,UAAU,IAAI,eAAe,CAM5C;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,MAAM,GAAE,eAAoB,GAAG,eAAe,CAIjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,IAAI,eAAe,CAItC;AAED,sCAAsC;AACtC,wBAAgB,WAAW,IAAI,kBAAkB,CAQhD;AAED,mBAAmB;AACnB,wBAAgB,YAAY,IAAI,kBAAkB,CAQjD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAS9D;AAED,wBAAwB;AACxB,wBAAgB,aAAa,IAAI,kBAAkB,CAQlD;AAED,wCAAwC;AACxC,wBAAgB,aAAa,IAAI,kBAAkB,CAQlD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CACnB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,OAAO,GACrB,iBAAiB,CAuCnB;AAED,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/Application/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAgBnD,8BAA8B;AAC9B,eAAO,MAAM,eAAe,eAAuC,CAAC;AAEpE;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,SAAK,GAAG,cAAc,CAWtD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEzD;AAgBD,6CAA6C;AAC7C,eAAO,MAAM,UAAU,2BAdO,WAAW,KAAG,eAcQ,CAAC;AAErD,+CAA+C;AAC/C,eAAO,MAAM,WAAW,2BAjBM,WAAW,KAAG,eAiBU,CAAC;AAEvD,6CAA6C;AAC7C,eAAO,MAAM,UAAU,2BApBO,WAAW,KAAG,eAoBQ,CAAC;AAErD,mDAAmD;AACnD,eAAO,MAAM,aAAa,2BAvBI,WAAW,KAAG,eAuBc,CAAC;AAE3D,wBAAgB,cAAc,IAAI,eAAe,CAIhD;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,aAAa,CAAA;CAAE,GAChC,eAAe,CAOjB;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,aAAa,CAAA;CAAE,GAChC,eAAe,CAOjB;AAED,wBAAgB,UAAU,IAAI,eAAe,CAM5C;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,MAAM,GAAE,eAAoB,GAAG,eAAe,CAIjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,IAAI,eAAe,CAItC;AAED,sCAAsC;AACtC,wBAAgB,WAAW,IAAI,kBAAkB,CAQhD;AAED,mBAAmB;AACnB,wBAAgB,YAAY,IAAI,kBAAkB,CAQjD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAS9D;AAED,wBAAwB;AACxB,wBAAgB,aAAa,IAAI,kBAAkB,CAQlD;AAED,wCAAwC;AACxC,wBAAgB,aAAa,IAAI,kBAAkB,CAQlD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAS7D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CACnB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,OAAO,GACrB,iBAAiB,CAuCnB;AAED,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -14,6 +14,7 @@ exports.RequestQuery = RequestQuery;
14
14
  exports.RequestPath = RequestPath;
15
15
  exports.RequestHeader = RequestHeader;
16
16
  exports.RequestCookie = RequestCookie;
17
+ exports.RequestForm = RequestForm;
17
18
  exports.Value = Value;
18
19
  require("reflect-metadata");
19
20
  const config_1 = require("../config");
@@ -176,6 +177,31 @@ function RequestCookie() {
176
177
  });
177
178
  };
178
179
  }
180
+ /**
181
+ * 注入表单数据(urlencoded / multipart 字段,落在 req.body)。
182
+ * 需先 `registry(urlencoded({ extended: true }))`;multipart 文件需自行挂 multer 等。
183
+ *
184
+ * - `@RequestForm()`:整个表单对象;若存在 `req.file` / `req.files` 一并附上
185
+ * - `@RequestForm("name")`:单个字段
186
+ *
187
+ * @example
188
+ * @PostMapping("/login")
189
+ * login(@RequestForm() form: { username: string; password: string }) {}
190
+ *
191
+ * @PostMapping("/upload")
192
+ * upload(@RequestForm("title") title: string) {}
193
+ */
194
+ function RequestForm(name) {
195
+ return (target, propertyKey, parameterIndex) => {
196
+ if (propertyKey === undefined)
197
+ return;
198
+ (0, metadata_1.addMethodParam)(target.constructor, String(propertyKey), {
199
+ index: parameterIndex,
200
+ source: "form",
201
+ name,
202
+ });
203
+ };
204
+ }
179
205
  /**
180
206
  * 属性注入:从合并后的 application*.yaml 按路径取值。
181
207
  * 支持 `server.port`、`${server.port}`、`${server.port:3990}`;
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/Application/decorators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/Application/decorators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import "reflect-metadata";
2
+ import type { Request, RequestHandler, Response } from "express";
3
+ export declare const WEB_FILTER_KEY: unique symbol;
4
+ /**
5
+ * Filter 链(对齐 Servlet FilterChain)。
6
+ * `await chain.doFilter(req, res)` 会跑完后续 Filter + 路由并等到响应结束。
7
+ */
8
+ export interface FilterChain {
9
+ doFilter(req: Request, res: Response): Promise<void>;
10
+ }
11
+ /**
12
+ * Servlet 风格 Filter:在 Dispatcher(路由)之外包裹请求。
13
+ *
14
+ * @example
15
+ * class TimingFilter implements Filter {
16
+ * async doFilter(req, res, chain) {
17
+ * const t = Date.now();
18
+ * await chain.doFilter(req, res);
19
+ * console.log(req.path, Date.now() - t);
20
+ * }
21
+ * }
22
+ */
23
+ export interface Filter {
24
+ doFilter(req: Request, res: Response, chain: FilterChain): void | Promise<void>;
25
+ }
26
+ /** @WebFilter / addFilter 注册选项(对齐 FilterRegistrationBean) */
27
+ export interface FilterOptions {
28
+ /** 越小越靠前,默认 0 */
29
+ order?: number;
30
+ /** 生效路径,默认 `["/**"]` */
31
+ urlPatterns?: string[];
32
+ /** 排除路径 */
33
+ excludePatterns?: string[];
34
+ }
35
+ export interface FilterRegistration {
36
+ filter: Filter;
37
+ order: number;
38
+ urlPatterns: string[];
39
+ excludePatterns: string[];
40
+ }
41
+ export declare function isFilter(bean: unknown): bean is Filter;
42
+ export declare function addFilterRegistration(filter: Filter, options?: FilterOptions): void;
43
+ export declare function getFilterRegistrations(): readonly FilterRegistration[];
44
+ export declare function clearFilters(): void;
45
+ export declare function isFiltersMounted(): boolean;
46
+ export declare function markFiltersMounted(): void;
47
+ /** 按 order 升序得到注册表副本 */
48
+ export declare function sortedFilterRegistrations(): FilterRegistration[];
49
+ /**
50
+ * 将单个 Filter 转为 Express 中间件。
51
+ * `await chain.doFilter()` 在响应 `finish`/`close` 后 resolve,便于写 after 逻辑。
52
+ */
53
+ export declare function createFilterMiddleware(reg: FilterRegistration): RequestHandler;
54
+ /**
55
+ * 类装饰器:标记 Servlet 风格 Filter(类加载时自动注册)。
56
+ *
57
+ * @example
58
+ * @WebFilter({ urlPatterns: ["/api/**"], order: 1 })
59
+ * class TimingFilter implements Filter {
60
+ * async doFilter(req, res, chain) {
61
+ * await chain.doFilter(req, res);
62
+ * }
63
+ * }
64
+ */
65
+ export declare function WebFilter(options?: FilterOptions): ClassDecorator;
66
+ export declare function getWebFilterOptions(ctor: Function): FilterOptions;
67
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/Application/filters.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAgB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG/E,eAAO,MAAM,cAAc,eAAyC,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CACN,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,GACjB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW;IACX,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAKD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAMtD;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,aAAkB,GAC1B,IAAI,CASN;AAED,wBAAgB,sBAAsB,IAAI,SAAS,kBAAkB,EAAE,CAEtE;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAwB;AACxB,wBAAgB,yBAAyB,IAAI,kBAAkB,EAAE,CAEhE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,kBAAkB,GACtB,cAAc,CAuChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,cAAc,CASrE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,aAAa,CAEjE"}