@dangao/bun-server 0.1.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.
Files changed (120) hide show
  1. package/dist/controller/controller.d.ts +63 -0
  2. package/dist/controller/controller.d.ts.map +1 -0
  3. package/dist/controller/decorators.d.ts +46 -0
  4. package/dist/controller/decorators.d.ts.map +1 -0
  5. package/dist/controller/index.d.ts +7 -0
  6. package/dist/controller/index.d.ts.map +1 -0
  7. package/dist/controller/metadata.d.ts +17 -0
  8. package/dist/controller/metadata.d.ts.map +1 -0
  9. package/dist/controller/param-binder.d.ts +51 -0
  10. package/dist/controller/param-binder.d.ts.map +1 -0
  11. package/dist/core/application.d.ts +80 -0
  12. package/dist/core/application.d.ts.map +1 -0
  13. package/dist/core/context.d.ts +117 -0
  14. package/dist/core/context.d.ts.map +1 -0
  15. package/dist/core/index.d.ts +4 -0
  16. package/dist/core/index.d.ts.map +1 -0
  17. package/dist/core/server.d.ts +53 -0
  18. package/dist/core/server.d.ts.map +1 -0
  19. package/dist/core/types.d.ts +2 -0
  20. package/dist/core/types.d.ts.map +1 -0
  21. package/dist/di/container.d.ts +80 -0
  22. package/dist/di/container.d.ts.map +1 -0
  23. package/dist/di/decorators.d.ts +43 -0
  24. package/dist/di/decorators.d.ts.map +1 -0
  25. package/dist/di/index.d.ts +4 -0
  26. package/dist/di/index.d.ts.map +1 -0
  27. package/dist/di/module-registry.d.ts +27 -0
  28. package/dist/di/module-registry.d.ts.map +1 -0
  29. package/dist/di/module.d.ts +30 -0
  30. package/dist/di/module.d.ts.map +1 -0
  31. package/dist/di/types.d.ts +57 -0
  32. package/dist/di/types.d.ts.map +1 -0
  33. package/dist/error/filter.d.ts +18 -0
  34. package/dist/error/filter.d.ts.map +1 -0
  35. package/dist/error/handler.d.ts +6 -0
  36. package/dist/error/handler.d.ts.map +1 -0
  37. package/dist/error/http-exception.d.ts +24 -0
  38. package/dist/error/http-exception.d.ts.map +1 -0
  39. package/dist/error/index.d.ts +5 -0
  40. package/dist/error/index.d.ts.map +1 -0
  41. package/dist/extensions/index.d.ts +5 -0
  42. package/dist/extensions/index.d.ts.map +1 -0
  43. package/dist/extensions/logger-extension.d.ts +13 -0
  44. package/dist/extensions/logger-extension.d.ts.map +1 -0
  45. package/dist/extensions/types.d.ts +12 -0
  46. package/dist/extensions/types.d.ts.map +1 -0
  47. package/dist/files/index.d.ts +5 -0
  48. package/dist/files/index.d.ts.map +1 -0
  49. package/dist/files/static-middleware.d.ts +8 -0
  50. package/dist/files/static-middleware.d.ts.map +1 -0
  51. package/dist/files/storage.d.ts +10 -0
  52. package/dist/files/storage.d.ts.map +1 -0
  53. package/dist/files/types.d.ts +27 -0
  54. package/dist/files/types.d.ts.map +1 -0
  55. package/dist/files/upload-middleware.d.ts +7 -0
  56. package/dist/files/upload-middleware.d.ts.map +1 -0
  57. package/dist/index.d.ts +23 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +2118 -0
  60. package/dist/middleware/builtin/cors.d.ts +14 -0
  61. package/dist/middleware/builtin/cors.d.ts.map +1 -0
  62. package/dist/middleware/builtin/error-handler.d.ts +23 -0
  63. package/dist/middleware/builtin/error-handler.d.ts.map +1 -0
  64. package/dist/middleware/builtin/file-upload.d.ts +9 -0
  65. package/dist/middleware/builtin/file-upload.d.ts.map +1 -0
  66. package/dist/middleware/builtin/index.d.ts +6 -0
  67. package/dist/middleware/builtin/index.d.ts.map +1 -0
  68. package/dist/middleware/builtin/logger.d.ts +26 -0
  69. package/dist/middleware/builtin/logger.d.ts.map +1 -0
  70. package/dist/middleware/builtin/static-file.d.ts +14 -0
  71. package/dist/middleware/builtin/static-file.d.ts.map +1 -0
  72. package/dist/middleware/decorators.d.ts +22 -0
  73. package/dist/middleware/decorators.d.ts.map +1 -0
  74. package/dist/middleware/index.d.ts +5 -0
  75. package/dist/middleware/index.d.ts.map +1 -0
  76. package/dist/middleware/middleware.d.ts +10 -0
  77. package/dist/middleware/middleware.d.ts.map +1 -0
  78. package/dist/middleware/pipeline.d.ts +38 -0
  79. package/dist/middleware/pipeline.d.ts.map +1 -0
  80. package/dist/request/body-parser.d.ts +37 -0
  81. package/dist/request/body-parser.d.ts.map +1 -0
  82. package/dist/request/file-handler.d.ts +13 -0
  83. package/dist/request/file-handler.d.ts.map +1 -0
  84. package/dist/request/index.d.ts +5 -0
  85. package/dist/request/index.d.ts.map +1 -0
  86. package/dist/request/request.d.ts +67 -0
  87. package/dist/request/request.d.ts.map +1 -0
  88. package/dist/request/response.d.ts +65 -0
  89. package/dist/request/response.d.ts.map +1 -0
  90. package/dist/router/decorators.d.ts +45 -0
  91. package/dist/router/decorators.d.ts.map +1 -0
  92. package/dist/router/index.d.ts +6 -0
  93. package/dist/router/index.d.ts.map +1 -0
  94. package/dist/router/registry.d.ts +54 -0
  95. package/dist/router/registry.d.ts.map +1 -0
  96. package/dist/router/route.d.ts +57 -0
  97. package/dist/router/route.d.ts.map +1 -0
  98. package/dist/router/router.d.ts +76 -0
  99. package/dist/router/router.d.ts.map +1 -0
  100. package/dist/router/types.d.ts +23 -0
  101. package/dist/router/types.d.ts.map +1 -0
  102. package/dist/testing/harness.d.ts +26 -0
  103. package/dist/testing/harness.d.ts.map +1 -0
  104. package/dist/validation/decorators.d.ts +20 -0
  105. package/dist/validation/decorators.d.ts.map +1 -0
  106. package/dist/validation/errors.d.ts +19 -0
  107. package/dist/validation/errors.d.ts.map +1 -0
  108. package/dist/validation/index.d.ts +5 -0
  109. package/dist/validation/index.d.ts.map +1 -0
  110. package/dist/validation/types.d.ts +29 -0
  111. package/dist/validation/types.d.ts.map +1 -0
  112. package/dist/validation/validator.d.ts +8 -0
  113. package/dist/validation/validator.d.ts.map +1 -0
  114. package/dist/websocket/decorators.d.ts +16 -0
  115. package/dist/websocket/decorators.d.ts.map +1 -0
  116. package/dist/websocket/index.d.ts +4 -0
  117. package/dist/websocket/index.d.ts.map +1 -0
  118. package/dist/websocket/registry.d.ts +22 -0
  119. package/dist/websocket/registry.d.ts.map +1 -0
  120. package/package.json +56 -0
@@ -0,0 +1,14 @@
1
+ import type { Middleware } from '../middleware';
2
+ export interface CorsOptions {
3
+ origin?: string | string[] | '*';
4
+ methods?: string[];
5
+ allowedHeaders?: string[];
6
+ exposedHeaders?: string[];
7
+ credentials?: boolean;
8
+ maxAge?: number;
9
+ }
10
+ /**
11
+ * CORS 中间件
12
+ */
13
+ export declare function createCorsMiddleware(options?: CorsOptions): Middleware;
14
+ //# sourceMappingURL=cors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../src/middleware/builtin/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,WAAgB,GAAG,UAAU,CA4B1E"}
@@ -0,0 +1,23 @@
1
+ import type { Middleware } from "../middleware";
2
+ export interface ErrorHandlerOptions {
3
+ /**
4
+ * 自定义错误日志函数
5
+ */
6
+ logger?: (error: unknown, context: {
7
+ method: string;
8
+ path: string;
9
+ }) => void;
10
+ /**
11
+ * 是否返回详细错误信息(默认 false,用于生产环境隐藏细节)
12
+ */
13
+ exposeError?: boolean;
14
+ /**
15
+ * 默认状态码
16
+ */
17
+ statusCode?: number;
18
+ }
19
+ /**
20
+ * 错误处理中间件:捕获下游异常并统一生成响应
21
+ */
22
+ export declare function createErrorHandlingMiddleware(options?: ErrorHandlerOptions): Middleware;
23
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/middleware/builtin/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAE7E;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,mBAAwB,GAChC,UAAU,CAoEZ"}
@@ -0,0 +1,9 @@
1
+ import type { Middleware } from '../middleware';
2
+ export interface FileUploadOptions {
3
+ maxSize?: number;
4
+ }
5
+ /**
6
+ * 简单的文件上传中间件:解析 multipart/form-data 并将文件附加到 context.body
7
+ */
8
+ export declare function createFileUploadMiddleware(options?: FileUploadOptions): Middleware;
9
+ //# sourceMappingURL=file-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../../src/middleware/builtin/file-upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,CA6BtF"}
@@ -0,0 +1,6 @@
1
+ export { createLoggerMiddleware, createRequestLoggingMiddleware } from './logger';
2
+ export { createErrorHandlingMiddleware } from './error-handler';
3
+ export { createCorsMiddleware } from './cors';
4
+ export { createFileUploadMiddleware } from './file-upload';
5
+ export { createStaticFileMiddleware } from './static-file';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/middleware/builtin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { Middleware } from "../middleware";
2
+ export interface LoggerMiddlewareOptions {
3
+ /**
4
+ * 自定义日志函数
5
+ */
6
+ logger?: (message: string, details?: Record<string, unknown>) => void;
7
+ /**
8
+ * 日志前缀
9
+ */
10
+ prefix?: string;
11
+ }
12
+ /**
13
+ * 简单日志中间件:记录请求方法与路径
14
+ */
15
+ export declare function createLoggerMiddleware(options?: LoggerMiddlewareOptions): Middleware;
16
+ export interface RequestLoggingOptions extends LoggerMiddlewareOptions {
17
+ /**
18
+ * 是否在响应头中附加请求耗时
19
+ */
20
+ setHeader?: boolean;
21
+ }
22
+ /**
23
+ * 请求日志中间件:记录耗时与状态码
24
+ */
25
+ export declare function createRequestLoggingMiddleware(options?: RequestLoggingOptions): Middleware;
26
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/middleware/builtin/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAEtE;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,uBAA4B,GACpC,UAAU,CAsBZ;AAED,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACpE;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,qBAA0B,GAClC,UAAU,CAkCZ"}
@@ -0,0 +1,14 @@
1
+ import type { Middleware } from '../middleware';
2
+ import type { HeadersInit } from 'bun';
3
+ export interface StaticFileOptions {
4
+ root: string;
5
+ prefix?: string;
6
+ indexFile?: string;
7
+ enableCache?: boolean;
8
+ headers?: HeadersInit | Headers;
9
+ }
10
+ /**
11
+ * 静态文件服务中间件
12
+ */
13
+ export declare function createStaticFileMiddleware(options: StaticFileOptions): Middleware;
14
+ //# sourceMappingURL=static-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-file.d.ts","sourceRoot":"","sources":["../../../src/middleware/builtin/static-file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAA;AAEtC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;CACjC;AAYD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CA2DjF"}
@@ -0,0 +1,22 @@
1
+ import 'reflect-metadata';
2
+ import type { Middleware } from './middleware';
3
+ /**
4
+ * UseMiddleware 装饰器
5
+ * 可用于控制器类或方法
6
+ * @param middlewares - 中间件列表
7
+ */
8
+ export declare function UseMiddleware(...middlewares: Middleware[]): ClassDecorator & MethodDecorator;
9
+ /**
10
+ * 获取类级中间件
11
+ * @param constructor - 控制器构造函数
12
+ * @returns 中间件列表
13
+ */
14
+ export declare function getClassMiddlewares(constructor: new (...args: unknown[]) => unknown): Middleware[];
15
+ /**
16
+ * 获取方法级中间件
17
+ * @param target - 控制器原型
18
+ * @param propertyKey - 方法名
19
+ * @returns 中间件列表
20
+ */
21
+ export declare function getMethodMiddlewares(target: object, propertyKey: string | symbol): Middleware[];
22
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/middleware/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoC/C;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,WAAW,EAAE,UAAU,EAAE,GAAG,cAAc,GAAG,eAAe,CAQ5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,UAAU,EAAE,CAIlG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC3B,UAAU,EAAE,CAKd"}
@@ -0,0 +1,5 @@
1
+ export type { Middleware, NextFunction } from './middleware';
2
+ export { MiddlewarePipeline, runMiddlewares } from './pipeline';
3
+ export { UseMiddleware, getClassMiddlewares, getMethodMiddlewares } from './decorators';
4
+ export { createLoggerMiddleware, createRequestLoggingMiddleware, createErrorHandlingMiddleware, createCorsMiddleware, } from './builtin';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Context } from '../core/context';
2
+ /**
3
+ * 中间件 Next 函数
4
+ */
5
+ export type NextFunction = () => Promise<Response>;
6
+ /**
7
+ * 中间件接口
8
+ */
9
+ export type Middleware = (context: Context, next: NextFunction) => Promise<Response> | Response;
10
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { Context } from '../core/context';
2
+ import type { Middleware, NextFunction } from './middleware';
3
+ /**
4
+ * 中间件执行管道
5
+ */
6
+ export declare class MiddlewarePipeline {
7
+ private readonly middlewares;
8
+ constructor(initialMiddlewares?: Middleware[]);
9
+ /**
10
+ * 注册中间件
11
+ * @param middleware - 要注册的中间件
12
+ */
13
+ use(middleware: Middleware): void;
14
+ /**
15
+ * 清空所有中间件
16
+ */
17
+ clear(): void;
18
+ /**
19
+ * 是否存在中间件
20
+ */
21
+ hasMiddlewares(): boolean;
22
+ /**
23
+ * 执行中间件管道
24
+ * @param context - 请求上下文
25
+ * @param finalHandler - 最终处理函数
26
+ * @returns 响应对象
27
+ */
28
+ run(context: Context, finalHandler: NextFunction): Promise<Response>;
29
+ }
30
+ /**
31
+ * 使用指定的中间件队列执行一次性管道
32
+ * @param middlewares - 中间件数组
33
+ * @param context - 请求上下文
34
+ * @param finalHandler - 最终处理函数
35
+ * @returns 响应对象
36
+ */
37
+ export declare function runMiddlewares(middlewares: Middleware[], context: Context, finalHandler: NextFunction): Promise<Response>;
38
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/middleware/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;gBAE7B,kBAAkB,GAAE,UAAU,EAAO;IAIxD;;;OAGG;IACI,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIxC;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACI,cAAc,IAAI,OAAO;IAIhC;;;;;OAKG;IACU,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;CAwBlF;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,QAAQ,CAAC,CAOnB"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 请求体解析器
3
+ * 支持 JSON、FormData、URLEncoded 等格式
4
+ */
5
+ export declare class BodyParser {
6
+ /**
7
+ * 解析请求体
8
+ * @param request - 请求对象
9
+ * @returns 解析后的请求体
10
+ */
11
+ static parse(request: Request): Promise<unknown>;
12
+ /**
13
+ * 解析 JSON 格式
14
+ * @param request - 请求对象
15
+ * @returns 解析后的对象
16
+ */
17
+ private static parseJSON;
18
+ /**
19
+ * 解析 FormData 格式
20
+ * @param request - 请求对象
21
+ * @returns 解析后的 FormData 对象
22
+ */
23
+ private static parseFormData;
24
+ /**
25
+ * 解析 URLEncoded 格式
26
+ * @param request - 请求对象
27
+ * @returns 解析后的对象
28
+ */
29
+ private static parseURLEncoded;
30
+ /**
31
+ * 解析文本格式
32
+ * @param request - 请求对象
33
+ * @returns 文本内容
34
+ */
35
+ private static parseText;
36
+ }
37
+ //# sourceMappingURL=body-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-parser.d.ts","sourceRoot":"","sources":["../../src/request/body-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,UAAU;IACrB;;;;OAIG;WACiB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAyE7D;;;;OAIG;mBACkB,SAAS;IAQ9B;;;;OAIG;mBACkB,aAAa;IAIlC;;;;OAIG;mBACkB,eAAe;IAcpC;;;;OAIG;mBACkB,SAAS;CAG/B"}
@@ -0,0 +1,13 @@
1
+ import type { Context } from '../core/context';
2
+ export interface UploadedFile {
3
+ name: string;
4
+ type: string;
5
+ size: number;
6
+ data: ArrayBuffer;
7
+ }
8
+ export declare class FileHandler {
9
+ private static readonly MAX_SIZE;
10
+ static parseFormData(context: Context): Promise<FormData>;
11
+ static getFiles(formData: FormData): Promise<Record<string, UploadedFile[]>>;
12
+ }
13
+ //# sourceMappingURL=file-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-handler.d.ts","sourceRoot":"","sources":["../../src/request/file-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAoB;WAEhC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;WASlD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;CAsB1F"}
@@ -0,0 +1,5 @@
1
+ export { BodyParser } from './body-parser';
2
+ export { RequestWrapper } from './request';
3
+ export { ResponseBuilder } from './response';
4
+ export { FileHandler } from './file-handler';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * 请求封装类
3
+ * 扩展原生 Request,提供便捷方法
4
+ */
5
+ export declare class RequestWrapper {
6
+ /**
7
+ * 原始请求对象
8
+ */
9
+ readonly request: Request;
10
+ /**
11
+ * 请求 URL
12
+ */
13
+ readonly url: URL;
14
+ /**
15
+ * 请求方法
16
+ */
17
+ readonly method: string;
18
+ /**
19
+ * 请求路径
20
+ */
21
+ readonly path: string;
22
+ /**
23
+ * 查询参数
24
+ */
25
+ readonly query: URLSearchParams;
26
+ /**
27
+ * 请求头
28
+ */
29
+ readonly headers: Headers;
30
+ /**
31
+ * 请求体(解析后的)
32
+ */
33
+ private _body?;
34
+ /**
35
+ * 是否已解析请求体
36
+ */
37
+ private _bodyParsed;
38
+ constructor(request: Request);
39
+ /**
40
+ * 获取请求体(自动解析)
41
+ * @returns 解析后的请求体
42
+ */
43
+ body(): Promise<unknown>;
44
+ /**
45
+ * 获取请求体(已解析的,如果未解析则返回 undefined)
46
+ * @returns 请求体或 undefined
47
+ */
48
+ getBody(): unknown;
49
+ /**
50
+ * 获取查询参数
51
+ * @param key - 参数名
52
+ * @returns 参数值
53
+ */
54
+ getQuery(key: string): string | null;
55
+ /**
56
+ * 获取所有查询参数
57
+ * @returns 查询参数对象
58
+ */
59
+ getQueryAll(): Record<string, string>;
60
+ /**
61
+ * 获取请求头
62
+ * @param key - 头名称
63
+ * @returns 头值
64
+ */
65
+ getHeader(key: string): string | null;
66
+ }
67
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/request/request.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,SAAgB,GAAG,EAAE,GAAG,CAAC;IAEzB;;OAEG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,SAAgB,KAAK,EAAE,eAAe,CAAC;IAEvC;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,OAAO,CAAC,KAAK,CAAC,CAAU;IAExB;;OAEG;IACH,OAAO,CAAC,WAAW,CAAkB;gBAElB,OAAO,EAAE,OAAO;IASnC;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAQrC;;;OAGG;IACI,OAAO,IAAI,OAAO;IAIzB;;;;OAIG;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI3C;;;OAGG;IACI,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ5C;;;;OAIG;IACI,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAG7C"}
@@ -0,0 +1,65 @@
1
+ import type { HeadersInit } from 'bun';
2
+ /**
3
+ * 响应封装类
4
+ * 提供便捷的响应创建方法
5
+ */
6
+ export declare class ResponseBuilder {
7
+ /**
8
+ * 创建 JSON 响应
9
+ * @param data - 响应数据
10
+ * @param status - HTTP 状态码
11
+ * @param headers - 响应头
12
+ * @returns Response 对象
13
+ */
14
+ static json(data: unknown, status?: number, headers?: HeadersInit): Response;
15
+ /**
16
+ * 创建文本响应
17
+ * @param text - 响应文本
18
+ * @param status - HTTP 状态码
19
+ * @param headers - 响应头
20
+ * @returns Response 对象
21
+ */
22
+ static text(text: string, status?: number, headers?: HeadersInit): Response;
23
+ /**
24
+ * 创建 HTML 响应
25
+ * @param html - HTML 内容
26
+ * @param status - HTTP 状态码
27
+ * @param headers - 响应头
28
+ * @returns Response 对象
29
+ */
30
+ static html(html: string, status?: number, headers?: HeadersInit): Response;
31
+ /**
32
+ * 创建空响应
33
+ * @param status - HTTP 状态码
34
+ * @param headers - 响应头
35
+ * @returns Response 对象
36
+ */
37
+ static empty(status?: number, headers?: HeadersInit): Response;
38
+ /**
39
+ * 创建重定向响应
40
+ * @param url - 重定向 URL
41
+ * @param status - HTTP 状态码(默认 302)
42
+ * @returns Response 对象
43
+ */
44
+ static redirect(url: string, status?: number): Response;
45
+ /**
46
+ * 创建错误响应
47
+ * @param message - 错误消息
48
+ * @param status - HTTP 状态码
49
+ * @returns Response 对象
50
+ */
51
+ static error(message: string, status?: number): Response;
52
+ /**
53
+ * 创建文件/下载响应
54
+ * @param source - 文件路径或二进制数据
55
+ * @param options - 响应配置
56
+ * @returns Response 对象
57
+ */
58
+ static file(source: string | Blob | ArrayBuffer | ArrayBufferView, options?: {
59
+ fileName?: string;
60
+ contentType?: string;
61
+ status?: number;
62
+ headers?: HeadersInit;
63
+ }): Response;
64
+ }
65
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/request/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,KAAK,CAAC;AAEjD;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;;;;OAMG;WACW,IAAI,CAChB,IAAI,EAAE,OAAO,EACb,MAAM,GAAE,MAAY,EACpB,OAAO,CAAC,EAAE,WAAW,GACpB,QAAQ;IAUX;;;;;;OAMG;WACW,IAAI,CAChB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAY,EACpB,OAAO,CAAC,EAAE,WAAW,GACpB,QAAQ;IAUX;;;;;;OAMG;WACW,IAAI,CAChB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAY,EACpB,OAAO,CAAC,EAAE,WAAW,GACpB,QAAQ;IAUX;;;;;OAKG;WACW,KAAK,CAAC,MAAM,GAAE,MAAY,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,QAAQ;IAQ1E;;;;;OAKG;WACW,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,QAAQ;IASnE;;;;;OAKG;WACW,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,QAAQ;IAIpE;;;;;OAKG;WACW,IAAI,CAChB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,eAAe,EACrD,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,WAAW,CAAC;KAClB,GACL,QAAQ;CAyBZ"}
@@ -0,0 +1,45 @@
1
+ import 'reflect-metadata';
2
+ import type { RouteHandler } from './types';
3
+ import type { HttpMethod } from './types';
4
+ /**
5
+ * 路由元数据键
6
+ */
7
+ export declare const ROUTE_METADATA_KEY: unique symbol;
8
+ /**
9
+ * 路由元数据
10
+ */
11
+ export interface RouteMetadata {
12
+ method: HttpMethod;
13
+ path: string;
14
+ handler: RouteHandler;
15
+ /**
16
+ * 属性键(用于控制器方法)
17
+ */
18
+ propertyKey?: string;
19
+ }
20
+ /**
21
+ * GET 路由装饰器
22
+ * @param path - 路由路径
23
+ */
24
+ export declare function GET(path: string): (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
25
+ /**
26
+ * POST 路由装饰器
27
+ * @param path - 路由路径
28
+ */
29
+ export declare function POST(path: string): (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
30
+ /**
31
+ * PUT 路由装饰器
32
+ * @param path - 路由路径
33
+ */
34
+ export declare function PUT(path: string): (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
35
+ /**
36
+ * DELETE 路由装饰器
37
+ * @param path - 路由路径
38
+ */
39
+ export declare function DELETE(path: string): (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
40
+ /**
41
+ * PATCH 路由装饰器
42
+ * @param path - 路由路径
43
+ */
44
+ export declare function PATCH(path: string): (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => void;
45
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/router/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C;;GAEG;AACH,eAAO,MAAM,kBAAkB,eAAkB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA4DD;;;GAGG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,YAvDL,GAAG,eAAe,MAAM,GAAG,MAAM,cAAc,kBAAkB,UAyD3F;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,YA/DN,GAAG,eAAe,MAAM,GAAG,MAAM,cAAc,kBAAkB,UAiE3F;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,YAvEL,GAAG,eAAe,MAAM,GAAG,MAAM,cAAc,kBAAkB,UAyE3F;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,YA/ER,GAAG,eAAe,MAAM,GAAG,MAAM,cAAc,kBAAkB,UAiF3F;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,YAvFP,GAAG,eAAe,MAAM,GAAG,MAAM,cAAc,kBAAkB,UAyF3F"}
@@ -0,0 +1,6 @@
1
+ export { Route } from './route';
2
+ export { Router } from './router';
3
+ export { RouteRegistry } from './registry';
4
+ export { GET, POST, PUT, DELETE, PATCH } from './decorators';
5
+ export type { HttpMethod, RouteHandler, RouteMatch } from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { Router } from './router';
2
+ import type { HttpMethod, RouteHandler } from './types';
3
+ import type { Middleware } from '../middleware';
4
+ /**
5
+ * 路由注册表
6
+ * 全局路由注册表,管理所有路由
7
+ */
8
+ export declare class RouteRegistry {
9
+ private static instance;
10
+ private readonly router;
11
+ private constructor();
12
+ /**
13
+ * 获取单例实例
14
+ * @returns 路由注册表实例
15
+ */
16
+ static getInstance(): RouteRegistry;
17
+ /**
18
+ * 注册路由
19
+ * @param method - HTTP 方法
20
+ * @param path - 路由路径
21
+ * @param handler - 路由处理器
22
+ */
23
+ register(method: HttpMethod, path: string, handler: RouteHandler, middlewares?: Middleware[]): void;
24
+ /**
25
+ * 注册 GET 路由
26
+ */
27
+ get(path: string, handler: RouteHandler, middlewares?: Middleware[]): void;
28
+ /**
29
+ * 注册 POST 路由
30
+ */
31
+ post(path: string, handler: RouteHandler, middlewares?: Middleware[]): void;
32
+ /**
33
+ * 注册 PUT 路由
34
+ */
35
+ put(path: string, handler: RouteHandler, middlewares?: Middleware[]): void;
36
+ /**
37
+ * 注册 DELETE 路由
38
+ */
39
+ delete(path: string, handler: RouteHandler, middlewares?: Middleware[]): void;
40
+ /**
41
+ * 注册 PATCH 路由
42
+ */
43
+ patch(path: string, handler: RouteHandler, middlewares?: Middleware[]): void;
44
+ /**
45
+ * 获取路由器实例
46
+ * @returns 路由器实例
47
+ */
48
+ getRouter(): Router;
49
+ /**
50
+ * 清除所有路由(主要用于测试)
51
+ */
52
+ clear(): void;
53
+ }
54
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/router/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO;IAIP;;;OAGG;WACW,WAAW,IAAI,aAAa;IAO1C;;;;;OAKG;IACI,QAAQ,CACb,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,WAAW,GAAE,UAAU,EAAO,GAC7B,IAAI;IAIP;;OAEG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,GAAE,UAAU,EAAO,GAAG,IAAI;IAIrF;;OAEG;IACI,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,GAAE,UAAU,EAAO,GAAG,IAAI;IAItF;;OAEG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,GAAE,UAAU,EAAO,GAAG,IAAI;IAIrF;;OAEG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,GAAE,UAAU,EAAO,GAAG,IAAI;IAIxF;;OAEG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,GAAE,UAAU,EAAO,GAAG,IAAI;IAIvF;;;OAGG;IACI,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,KAAK,IAAI,IAAI;CAGrB"}
@@ -0,0 +1,57 @@
1
+ import type { Context } from '../core/context';
2
+ import type { HttpMethod, RouteHandler, RouteMatch } from './types';
3
+ import type { Middleware } from '../middleware';
4
+ /**
5
+ * 路由类
6
+ * 表示一个路由定义
7
+ */
8
+ export declare class Route {
9
+ /**
10
+ * HTTP 方法
11
+ */
12
+ readonly method: HttpMethod;
13
+ /**
14
+ * 路由路径(支持参数,如 /users/:id)
15
+ */
16
+ readonly path: string;
17
+ /**
18
+ * 路由处理器
19
+ */
20
+ readonly handler: RouteHandler;
21
+ /**
22
+ * 路径模式(用于匹配)
23
+ */
24
+ private readonly pattern;
25
+ /**
26
+ * 路径参数名列表
27
+ */
28
+ private readonly paramNames;
29
+ private readonly middlewarePipeline;
30
+ private readonly staticKey?;
31
+ readonly isStatic: boolean;
32
+ constructor(method: HttpMethod, path: string, handler: RouteHandler, middlewares?: Middleware[]);
33
+ /**
34
+ * 解析路径,生成匹配模式和参数名列表
35
+ * @param path - 路由路径
36
+ * @returns 匹配模式和参数名列表
37
+ */
38
+ private parsePath;
39
+ /**
40
+ * 匹配路由
41
+ * @param method - HTTP 方法
42
+ * @param path - 请求路径
43
+ * @returns 匹配结果
44
+ */
45
+ match(method: HttpMethod, path: string): RouteMatch;
46
+ /**
47
+ * 执行路由处理器
48
+ * @param context - 请求上下文
49
+ * @returns 响应对象
50
+ */
51
+ execute(context: Context): Promise<Response>;
52
+ /**
53
+ * 获取静态路由缓存 key
54
+ */
55
+ getStaticKey(): string | undefined;
56
+ }
57
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,qBAAa,KAAK;IAChB;;OAEG;IACH,SAAgB,MAAM,EAAE,UAAU,CAAC;IAEnC;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,SAAgB,OAAO,EAAE,YAAY,CAAC;IAEtC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IAEtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4B;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,SAAgB,QAAQ,EAAE,OAAO,CAAC;gBAGhC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,WAAW,GAAE,UAAU,EAAO;IAiBhC;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAajB;;;;;OAKG;IACI,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU;IAqB1D;;;;OAIG;IACU,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAQzD;;OAEG;IACI,YAAY,IAAI,MAAM,GAAG,SAAS;CAG1C"}