veloce-ts 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 (175) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/LICENSE +21 -0
  3. package/README.md +442 -0
  4. package/bin/veloce.ts +2 -0
  5. package/dist/cjs/src/cli/index.js +425 -0
  6. package/dist/cjs/src/cli/index.js.map +22 -0
  7. package/dist/cjs/src/docs/index.js +7 -0
  8. package/dist/cjs/src/docs/index.js.map +55 -0
  9. package/dist/cjs/src/errors/index.js +4 -0
  10. package/dist/cjs/src/errors/index.js.map +12 -0
  11. package/dist/cjs/src/graphql/index.js +83 -0
  12. package/dist/cjs/src/graphql/index.js.map +24 -0
  13. package/dist/cjs/src/index.js +126 -0
  14. package/dist/cjs/src/index.js.map +108 -0
  15. package/dist/cjs/src/middleware/index.js +3 -0
  16. package/dist/cjs/src/middleware/index.js.map +12 -0
  17. package/dist/cjs/src/plugins/index.js +125 -0
  18. package/dist/cjs/src/plugins/index.js.map +67 -0
  19. package/dist/cjs/src/testing/index.js +17 -0
  20. package/dist/cjs/src/testing/index.js.map +54 -0
  21. package/dist/cjs/src/types/index.js +3 -0
  22. package/dist/cjs/src/types/index.js.map +16 -0
  23. package/dist/cjs/src/validation/index.js +3 -0
  24. package/dist/cjs/src/validation/index.js.map +19 -0
  25. package/dist/cjs/src/websocket/index.js +3 -0
  26. package/dist/cjs/src/websocket/index.js.map +12 -0
  27. package/dist/esm/chunk-0zxhx5b8.js +7 -0
  28. package/dist/esm/chunk-0zxhx5b8.js.map +10 -0
  29. package/dist/esm/chunk-159eqj8q.js +5 -0
  30. package/dist/esm/chunk-159eqj8q.js.map +12 -0
  31. package/dist/esm/chunk-1hqjkm44.js +5 -0
  32. package/dist/esm/chunk-1hqjkm44.js.map +11 -0
  33. package/dist/esm/chunk-2q6s8v3j.js +6 -0
  34. package/dist/esm/chunk-2q6s8v3j.js.map +10 -0
  35. package/dist/esm/chunk-42h6trpf.js +5 -0
  36. package/dist/esm/chunk-42h6trpf.js.map +9 -0
  37. package/dist/esm/chunk-82f2j0k2.js +60 -0
  38. package/dist/esm/chunk-82f2j0k2.js.map +10 -0
  39. package/dist/esm/chunk-8wrnr45g.js +338 -0
  40. package/dist/esm/chunk-8wrnr45g.js.map +10 -0
  41. package/dist/esm/chunk-9p6d0t33.js +5 -0
  42. package/dist/esm/chunk-9p6d0t33.js.map +10 -0
  43. package/dist/esm/chunk-awven6dt.js +4 -0
  44. package/dist/esm/chunk-awven6dt.js.map +16 -0
  45. package/dist/esm/chunk-gv5n8ddb.js +18 -0
  46. package/dist/esm/chunk-gv5n8ddb.js.map +10 -0
  47. package/dist/esm/chunk-pn7z890c.js +72 -0
  48. package/dist/esm/chunk-pn7z890c.js.map +13 -0
  49. package/dist/esm/chunk-qfsjy9bg.js +7 -0
  50. package/dist/esm/chunk-qfsjy9bg.js.map +10 -0
  51. package/dist/esm/chunk-vkkzgaf7.js +5 -0
  52. package/dist/esm/chunk-vkkzgaf7.js.map +12 -0
  53. package/dist/esm/src/cli/index.js +30 -0
  54. package/dist/esm/src/cli/index.js.map +18 -0
  55. package/dist/esm/src/docs/index.js +8 -0
  56. package/dist/esm/src/docs/index.js.map +48 -0
  57. package/dist/esm/src/errors/index.js +4 -0
  58. package/dist/esm/src/errors/index.js.map +9 -0
  59. package/dist/esm/src/graphql/index.js +4 -0
  60. package/dist/esm/src/graphql/index.js.map +9 -0
  61. package/dist/esm/src/index.js +4 -0
  62. package/dist/esm/src/index.js.map +16 -0
  63. package/dist/esm/src/middleware/index.js +4 -0
  64. package/dist/esm/src/middleware/index.js.map +9 -0
  65. package/dist/esm/src/plugins/index.js +42 -0
  66. package/dist/esm/src/plugins/index.js.map +10 -0
  67. package/dist/esm/src/testing/index.js +4 -0
  68. package/dist/esm/src/testing/index.js.map +39 -0
  69. package/dist/esm/src/types/index.js +4 -0
  70. package/dist/esm/src/types/index.js.map +9 -0
  71. package/dist/esm/src/validation/index.js +4 -0
  72. package/dist/esm/src/validation/index.js.map +9 -0
  73. package/dist/esm/src/websocket/index.js +4 -0
  74. package/dist/esm/src/websocket/index.js.map +9 -0
  75. package/dist/types/adapters/base.d.ts +24 -0
  76. package/dist/types/adapters/base.d.ts.map +1 -0
  77. package/dist/types/adapters/express.d.ts +44 -0
  78. package/dist/types/adapters/express.d.ts.map +1 -0
  79. package/dist/types/adapters/hono.d.ts +44 -0
  80. package/dist/types/adapters/hono.d.ts.map +1 -0
  81. package/dist/types/cli/commands/build.d.ts +3 -0
  82. package/dist/types/cli/commands/build.d.ts.map +1 -0
  83. package/dist/types/cli/commands/dev.d.ts +3 -0
  84. package/dist/types/cli/commands/dev.d.ts.map +1 -0
  85. package/dist/types/cli/commands/generate.d.ts +3 -0
  86. package/dist/types/cli/commands/generate.d.ts.map +1 -0
  87. package/dist/types/cli/commands/new.d.ts +3 -0
  88. package/dist/types/cli/commands/new.d.ts.map +1 -0
  89. package/dist/types/cli/index.d.ts +3 -0
  90. package/dist/types/cli/index.d.ts.map +1 -0
  91. package/dist/types/core/application.d.ts +268 -0
  92. package/dist/types/core/application.d.ts.map +1 -0
  93. package/dist/types/core/compiled-metadata.d.ts +58 -0
  94. package/dist/types/core/compiled-metadata.d.ts.map +1 -0
  95. package/dist/types/core/metadata.d.ts +175 -0
  96. package/dist/types/core/metadata.d.ts.map +1 -0
  97. package/dist/types/core/plugin.d.ts +63 -0
  98. package/dist/types/core/plugin.d.ts.map +1 -0
  99. package/dist/types/core/router-compiler.d.ts +61 -0
  100. package/dist/types/core/router-compiler.d.ts.map +1 -0
  101. package/dist/types/decorators/dependencies.d.ts +28 -0
  102. package/dist/types/decorators/dependencies.d.ts.map +1 -0
  103. package/dist/types/decorators/docs.d.ts +38 -0
  104. package/dist/types/decorators/docs.d.ts.map +1 -0
  105. package/dist/types/decorators/graphql.d.ts +126 -0
  106. package/dist/types/decorators/graphql.d.ts.map +1 -0
  107. package/dist/types/decorators/http.d.ts +74 -0
  108. package/dist/types/decorators/http.d.ts.map +1 -0
  109. package/dist/types/decorators/middleware.d.ts +30 -0
  110. package/dist/types/decorators/middleware.d.ts.map +1 -0
  111. package/dist/types/decorators/params.d.ts +82 -0
  112. package/dist/types/decorators/params.d.ts.map +1 -0
  113. package/dist/types/decorators/websocket.d.ts +61 -0
  114. package/dist/types/decorators/websocket.d.ts.map +1 -0
  115. package/dist/types/dependencies/container.d.ts +93 -0
  116. package/dist/types/dependencies/container.d.ts.map +1 -0
  117. package/dist/types/docs/index.d.ts +3 -0
  118. package/dist/types/docs/index.d.ts.map +1 -0
  119. package/dist/types/docs/openapi-generator.d.ts +50 -0
  120. package/dist/types/docs/openapi-generator.d.ts.map +1 -0
  121. package/dist/types/docs/zod-to-json-schema.d.ts +46 -0
  122. package/dist/types/docs/zod-to-json-schema.d.ts.map +1 -0
  123. package/dist/types/errors/exceptions.d.ts +48 -0
  124. package/dist/types/errors/exceptions.d.ts.map +1 -0
  125. package/dist/types/errors/handler.d.ts +61 -0
  126. package/dist/types/errors/handler.d.ts.map +1 -0
  127. package/dist/types/errors/index.d.ts +7 -0
  128. package/dist/types/errors/index.d.ts.map +1 -0
  129. package/dist/types/graphql/index.d.ts +4 -0
  130. package/dist/types/graphql/index.d.ts.map +1 -0
  131. package/dist/types/graphql/plugin.d.ts +60 -0
  132. package/dist/types/graphql/plugin.d.ts.map +1 -0
  133. package/dist/types/graphql/schema-builder.d.ts +46 -0
  134. package/dist/types/graphql/schema-builder.d.ts.map +1 -0
  135. package/dist/types/graphql/zod-to-graphql.d.ts +22 -0
  136. package/dist/types/graphql/zod-to-graphql.d.ts.map +1 -0
  137. package/dist/types/index.d.ts +34 -0
  138. package/dist/types/index.d.ts.map +1 -0
  139. package/dist/types/middleware/compression.d.ts +7 -0
  140. package/dist/types/middleware/compression.d.ts.map +1 -0
  141. package/dist/types/middleware/cors.d.ts +7 -0
  142. package/dist/types/middleware/cors.d.ts.map +1 -0
  143. package/dist/types/middleware/index.d.ts +4 -0
  144. package/dist/types/middleware/index.d.ts.map +1 -0
  145. package/dist/types/middleware/rate-limit.d.ts +7 -0
  146. package/dist/types/middleware/rate-limit.d.ts.map +1 -0
  147. package/dist/types/plugins/index.d.ts +4 -0
  148. package/dist/types/plugins/index.d.ts.map +1 -0
  149. package/dist/types/plugins/openapi.d.ts +23 -0
  150. package/dist/types/plugins/openapi.d.ts.map +1 -0
  151. package/dist/types/responses/response.d.ts +200 -0
  152. package/dist/types/responses/response.d.ts.map +1 -0
  153. package/dist/types/testing/helpers.d.ts +98 -0
  154. package/dist/types/testing/helpers.d.ts.map +1 -0
  155. package/dist/types/testing/index.d.ts +4 -0
  156. package/dist/types/testing/index.d.ts.map +1 -0
  157. package/dist/types/testing/test-client.d.ts +86 -0
  158. package/dist/types/testing/test-client.d.ts.map +1 -0
  159. package/dist/types/types/index.d.ts +232 -0
  160. package/dist/types/types/index.d.ts.map +1 -0
  161. package/dist/types/validation/exceptions.d.ts +25 -0
  162. package/dist/types/validation/exceptions.d.ts.map +1 -0
  163. package/dist/types/validation/index.d.ts +3 -0
  164. package/dist/types/validation/index.d.ts.map +1 -0
  165. package/dist/types/validation/validator.d.ts +54 -0
  166. package/dist/types/validation/validator.d.ts.map +1 -0
  167. package/dist/types/websocket/connection.d.ts +51 -0
  168. package/dist/types/websocket/connection.d.ts.map +1 -0
  169. package/dist/types/websocket/index.d.ts +4 -0
  170. package/dist/types/websocket/index.d.ts.map +1 -0
  171. package/dist/types/websocket/manager.d.ts +82 -0
  172. package/dist/types/websocket/manager.d.ts.map +1 -0
  173. package/dist/types/websocket/plugin.d.ts +51 -0
  174. package/dist/types/websocket/plugin.d.ts.map +1 -0
  175. package/package.json +149 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Base adapter interface for runtime-agnostic server implementations
3
+ * Adapters allow FastAPI-TS to run on different runtimes (Bun, Node.js, Deno, Workers)
4
+ * and integrate with different frameworks (Hono, Express)
5
+ */
6
+ export interface Adapter {
7
+ /**
8
+ * Name of the adapter (e.g., 'hono', 'express', 'native')
9
+ */
10
+ name: string;
11
+ /**
12
+ * Start the server and listen on the specified port
13
+ * @param port - Port number to listen on
14
+ * @param callback - Optional callback to execute when server starts
15
+ * @returns Server instance (type varies by runtime)
16
+ */
17
+ listen(port: number, callback?: () => void): any;
18
+ /**
19
+ * Get the native handler for the underlying framework/runtime
20
+ * @returns Handler function (e.g., Hono's fetch, Express app)
21
+ */
22
+ getHandler(): any;
23
+ }
24
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,GAAG,CAAC;IAEjD;;;OAGG;IACH,UAAU,IAAI,GAAG,CAAC;CACnB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Express adapter for FastAPI-TS
3
+ * Bridges FastAPI-TS routes to Express.js framework
4
+ * Allows integration with existing Express applications
5
+ */
6
+ import type { Adapter } from './base';
7
+ import type { VeloceTS } from '../core/application';
8
+ /**
9
+ * ExpressAdapter - Bridges FastAPI-TS to Express.js
10
+ * Converts Express req/res to Hono Context format
11
+ */
12
+ export declare class ExpressAdapter implements Adapter {
13
+ private app;
14
+ name: string;
15
+ private express;
16
+ constructor(app: VeloceTS);
17
+ /**
18
+ * Set up the bridge between FastAPI-TS and Express
19
+ * Converts all FastAPI-TS routes to Express routes
20
+ */
21
+ private setupBridge;
22
+ /**
23
+ * Convert Express request to Web Standard Request
24
+ */
25
+ private createWebRequest;
26
+ /**
27
+ * Convert Web Standard Response to Express response
28
+ */
29
+ private sendExpressResponse;
30
+ /**
31
+ * Start the Express server on the specified port
32
+ */
33
+ listen(port: number, callback?: () => void): any;
34
+ /**
35
+ * Get the Express app instance
36
+ * This allows users to add additional Express middleware or routes
37
+ */
38
+ getHandler(): any;
39
+ /**
40
+ * Get the underlying Express app for advanced customization
41
+ */
42
+ getExpressApp(): any;
43
+ }
44
+ //# sourceMappingURL=express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../../src/adapters/express.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKpD;;;GAGG;AACH,qBAAa,cAAe,YAAW,OAAO;IAIhC,OAAO,CAAC,GAAG;IAHvB,IAAI,SAAa;IACjB,OAAO,CAAC,OAAO,CAAM;gBAED,GAAG,EAAE,QAAQ;IAajC;;;OAGG;IACH,OAAO,CAAC,WAAW;IAyBnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;YACW,mBAAmB;IA8BjC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,GAAG;IAIhD;;;OAGG;IACH,UAAU,IAAI,GAAG;IAIjB;;OAEG;IACH,aAAa,IAAI,GAAG;CAGrB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Hono adapter for runtime-agnostic server deployment
3
+ * Supports Bun, Node.js, Deno, and Cloudflare Workers
4
+ */
5
+ import type { Hono } from 'hono';
6
+ import type { Adapter } from './base';
7
+ /**
8
+ * HonoAdapter - Adapts Hono.js to work across multiple runtimes
9
+ * Automatically detects the runtime and uses the appropriate server implementation
10
+ */
11
+ export declare class HonoAdapter implements Adapter {
12
+ private hono;
13
+ name: string;
14
+ private runtime;
15
+ constructor(hono: Hono);
16
+ /**
17
+ * Start the server on the specified port
18
+ * Automatically uses the appropriate server for the detected runtime
19
+ */
20
+ listen(port: number, callback?: () => void): any;
21
+ /**
22
+ * Get the Hono fetch handler
23
+ * This can be used directly in serverless environments or for custom server setups
24
+ */
25
+ getHandler(): (request: Request, Env?: unknown, executionCtx?: import("hono").ExecutionContext) => Response | Promise<Response>;
26
+ /**
27
+ * Get the detected runtime
28
+ */
29
+ getRuntime(): string;
30
+ /**
31
+ * Start server using Bun's native server
32
+ */
33
+ private listenBun;
34
+ /**
35
+ * Start server using Deno's native server
36
+ */
37
+ private listenDeno;
38
+ /**
39
+ * Start server using Node.js adapter
40
+ * Requires @hono/node-server package
41
+ */
42
+ private listenNode;
43
+ }
44
+ //# sourceMappingURL=hono.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../../src/adapters/hono.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAiCtC;;;GAGG;AACH,qBAAa,WAAY,YAAW,OAAO;IAI7B,OAAO,CAAC,IAAI;IAHxB,IAAI,SAAU;IACd,OAAO,CAAC,OAAO,CAAmC;gBAE9B,IAAI,EAAE,IAAI;IAI9B;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,GAAG;IAuBhD;;;OAGG;IACH,UAAU;IAIV;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;;OAGG;IACH,OAAO,CAAC,UAAU;CAmBnB"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerBuildCommand(program: Command): void;
3
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW3D"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerDevCommand(program: Command): void;
3
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASzD"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerGenerateCommand(program: Command): void;
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwB9D"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerNewCommand(program: Command): void;
3
+ //# sourceMappingURL=new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASzD"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,268 @@
1
+ import { Hono } from 'hono';
2
+ import { MetadataRegistry } from './metadata';
3
+ import { DIContainer } from '../dependencies/container';
4
+ import { ErrorHandler, type CustomErrorHandler } from '../errors/handler';
5
+ import { PluginManager, type Plugin } from './plugin';
6
+ import type { VeloceTSConfig, Class, RouteConfig, Middleware, CorsOptions, RateLimitOptions, CompressionOptions } from '../types';
7
+ /**
8
+ * Main VeloceTS application class
9
+ *
10
+ * Provides both decorator-based and functional API for defining routes.
11
+ * Built on top of Hono.js for maximum performance with support for multiple runtimes.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Create a new application
16
+ * const app = new VeloceTS({
17
+ * title: 'My API',
18
+ * version: '1.0.0',
19
+ * docs: true
20
+ * });
21
+ *
22
+ * // Register a controller
23
+ * @Controller('/users')
24
+ * class UserController {
25
+ * @Get('/:id')
26
+ * getUser(@Param('id') id: string) {
27
+ * return { id, name: 'John' };
28
+ * }
29
+ * }
30
+ * app.include(UserController);
31
+ *
32
+ * // Or use functional API
33
+ * app.get('/users/:id', {
34
+ * handler: async (c) => {
35
+ * const id = c.req.param('id');
36
+ * return { id, name: 'John' };
37
+ * }
38
+ * });
39
+ *
40
+ * // Start the server
41
+ * app.listen(3000, () => {
42
+ * console.log('Server running on port 3000');
43
+ * });
44
+ * ```
45
+ */
46
+ export declare class VeloceTS {
47
+ private hono;
48
+ private metadata;
49
+ private container;
50
+ private validator;
51
+ private errorHandler;
52
+ private compiler;
53
+ private pluginManager;
54
+ private config;
55
+ private compiled;
56
+ private globalMiddleware;
57
+ private groupPrefix;
58
+ constructor(config?: VeloceTSConfig);
59
+ /**
60
+ * Register a controller class with the application
61
+ *
62
+ * Extracts metadata from decorators and stores in registry.
63
+ * The controller must be decorated with @Controller() and contain
64
+ * methods decorated with HTTP method decorators (@Get, @Post, etc.)
65
+ *
66
+ * @param controller - The controller class to register
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * @Controller('/api/users')
71
+ * class UserController {
72
+ * @Get('/')
73
+ * async list() {
74
+ * return [{ id: 1, name: 'John' }];
75
+ * }
76
+ *
77
+ * @Post('/')
78
+ * async create(@Body(UserSchema) user: InferSchema<typeof UserSchema>) {
79
+ * return { id: 2, ...user };
80
+ * }
81
+ * }
82
+ *
83
+ * app.include(UserController);
84
+ * ```
85
+ */
86
+ include(controller: Class): void;
87
+ /**
88
+ * Register a GET route using functional API
89
+ *
90
+ * @param path - The route path (supports parameters like /users/:id)
91
+ * @param config - Route configuration including handler, schema, middleware
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * const UserSchema = z.object({ name: z.string(), age: z.number() });
96
+ *
97
+ * app.get('/users/:id', {
98
+ * handler: async (c) => {
99
+ * const id = c.req.param('id');
100
+ * return { id, name: 'John', age: 30 };
101
+ * },
102
+ * schema: {
103
+ * params: z.object({ id: z.string() })
104
+ * },
105
+ * docs: {
106
+ * summary: 'Get user by ID',
107
+ * tags: ['users']
108
+ * }
109
+ * });
110
+ * ```
111
+ */
112
+ get(path: string, config: RouteConfig): void;
113
+ /**
114
+ * Register a POST route using functional API
115
+ *
116
+ * @param path - The route path
117
+ * @param config - Route configuration including handler, schema, middleware
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const CreateUserSchema = z.object({
122
+ * name: z.string(),
123
+ * email: z.string().email()
124
+ * });
125
+ *
126
+ * app.post('/users', {
127
+ * handler: async (c) => {
128
+ * const body = await c.req.json();
129
+ * return { id: 1, ...body };
130
+ * },
131
+ * schema: {
132
+ * body: CreateUserSchema
133
+ * }
134
+ * });
135
+ * ```
136
+ */
137
+ post(path: string, config: RouteConfig): void;
138
+ /**
139
+ * Register a PUT route
140
+ */
141
+ put(path: string, config: RouteConfig): void;
142
+ /**
143
+ * Register a DELETE route
144
+ */
145
+ delete(path: string, config: RouteConfig): void;
146
+ /**
147
+ * Register a PATCH route
148
+ */
149
+ patch(path: string, config: RouteConfig): void;
150
+ /**
151
+ * Create a route builder for chaining methods
152
+ */
153
+ route(path: string): RouteBuilder;
154
+ /**
155
+ * Create a route group with a common prefix
156
+ */
157
+ group(prefix: string, callback: () => void): void;
158
+ /**
159
+ * Internal method to register functional routes
160
+ */
161
+ private registerFunctionalRoute;
162
+ /**
163
+ * Extract parameter metadata from schema config
164
+ * For functional API, parameters start at index 0 since context is passed separately
165
+ */
166
+ private extractParametersFromSchema;
167
+ /**
168
+ * Add global middleware to the application
169
+ */
170
+ use(middleware: Middleware): void;
171
+ /**
172
+ * Configure CORS middleware
173
+ * Supports origin, methods, headers configuration and handles preflight requests
174
+ */
175
+ useCors(options?: CorsOptions): void;
176
+ /**
177
+ * Configure rate limiting middleware
178
+ * Tracks requests per IP/key and returns 429 when limit exceeded
179
+ */
180
+ useRateLimit(options: RateLimitOptions): void;
181
+ /**
182
+ * Configure compression middleware
183
+ * Compresses responses with gzip/brotli based on configuration
184
+ */
185
+ useCompression(options?: CompressionOptions): void;
186
+ /**
187
+ * Register a plugin with the application
188
+ * Plugins are installed during compilation in dependency order
189
+ * @param plugin - The plugin to register
190
+ */
191
+ usePlugin(plugin: Plugin): void;
192
+ /**
193
+ * Get the plugin manager instance
194
+ * @returns The PluginManager instance
195
+ */
196
+ getPluginManager(): PluginManager;
197
+ /**
198
+ * Set a custom error handler for the application
199
+ * This allows users to override the default error handling behavior
200
+ * @param handler - Custom error handling function
201
+ */
202
+ onError(handler: CustomErrorHandler): void;
203
+ /**
204
+ * Get the error handler instance
205
+ * @returns The ErrorHandler instance
206
+ */
207
+ getErrorHandler(): ErrorHandler;
208
+ /**
209
+ * Normalize path by combining segments and ensuring proper format
210
+ */
211
+ private normalizePath;
212
+ /**
213
+ * Get the underlying Hono instance
214
+ */
215
+ getHono(): Hono;
216
+ /**
217
+ * Get the metadata registry
218
+ */
219
+ getMetadata(): MetadataRegistry;
220
+ /**
221
+ * Get the DI container
222
+ */
223
+ getContainer(): DIContainer;
224
+ /**
225
+ * Get the application configuration
226
+ */
227
+ getConfig(): VeloceTSConfig;
228
+ /**
229
+ * Check if routes have been compiled
230
+ */
231
+ isCompiled(): boolean;
232
+ /**
233
+ * Mark routes as compiled
234
+ */
235
+ markCompiled(): void;
236
+ /**
237
+ * Compile all registered routes into the Hono router
238
+ * This must be called before the application can handle requests
239
+ * Installs plugins before compiling routes
240
+ */
241
+ compile(): Promise<void>;
242
+ /**
243
+ * Start the server and listen on the specified port
244
+ * Automatically compiles routes if not already compiled
245
+ * Delegates to the configured adapter for runtime-specific server implementation
246
+ */
247
+ listen(port: number, callback?: () => void): Promise<any>;
248
+ /**
249
+ * Create the appropriate adapter based on configuration
250
+ * @private
251
+ */
252
+ private createAdapter;
253
+ }
254
+ /**
255
+ * Route builder for chaining HTTP methods
256
+ */
257
+ declare class RouteBuilder {
258
+ private app;
259
+ private path;
260
+ constructor(app: VeloceTS, path: string);
261
+ get(config: RouteConfig): RouteBuilder;
262
+ post(config: RouteConfig): RouteBuilder;
263
+ put(config: RouteConfig): RouteBuilder;
264
+ delete(config: RouteConfig): RouteBuilder;
265
+ patch(config: RouteConfig): RouteBuilder;
266
+ }
267
+ export {};
268
+ //# sourceMappingURL=application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../../src/core/application.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { RouteMetadata } from '../types';
2
+ /**
3
+ * Compiled route metadata with pre-computed values for performance
4
+ */
5
+ export interface CompiledRouteMetadata extends RouteMetadata {
6
+ pathRegex?: RegExp;
7
+ parameterOrder: number[];
8
+ dependencyOrder: number[];
9
+ maxArgumentIndex: number;
10
+ hasBody: boolean;
11
+ hasQuery: boolean;
12
+ hasParams: boolean;
13
+ hasHeaders: boolean;
14
+ hasCookies: boolean;
15
+ hasDependencies: boolean;
16
+ }
17
+ /**
18
+ * MetadataCompiler pre-processes route metadata for optimal runtime performance
19
+ * This reduces the work needed during request processing
20
+ */
21
+ export declare class MetadataCompiler {
22
+ /**
23
+ * Compile a route metadata object into an optimized version
24
+ * Pre-computes regex patterns, parameter order, and other expensive operations
25
+ */
26
+ static compile(route: RouteMetadata): CompiledRouteMetadata;
27
+ /**
28
+ * Compile path pattern into a regex for efficient matching
29
+ * Converts FastAPI-style {param} to regex capture groups
30
+ */
31
+ private static compilePathRegex;
32
+ /**
33
+ * Resolve the order of parameters by their indices
34
+ * Returns sorted array of indices for efficient iteration
35
+ */
36
+ private static resolveParameterOrder;
37
+ /**
38
+ * Resolve the order of dependencies by their indices
39
+ * Returns sorted array of indices for efficient iteration
40
+ */
41
+ private static resolveDependencyOrder;
42
+ /**
43
+ * Calculate the maximum argument index to determine array size
44
+ * This allows pre-allocation of the arguments array
45
+ */
46
+ private static calculateMaxArgumentIndex;
47
+ /**
48
+ * Pre-compute flags for parameter types to avoid repeated checks
49
+ * These flags enable quick conditional logic during request processing
50
+ */
51
+ private static computeParameterFlags;
52
+ /**
53
+ * Batch compile multiple routes for efficiency
54
+ * Useful when compiling all routes at application startup
55
+ */
56
+ static compileAll(routes: RouteMetadata[]): CompiledRouteMetadata[];
57
+ }
58
+ //# sourceMappingURL=compiled-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiled-metadata.d.ts","sourceRoot":"","sources":["../../../src/core/compiled-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,UAAU,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAE1D,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,cAAc,EAAE,MAAM,EAAE,CAAC;IAGzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAG1B,gBAAgB,EAAE,MAAM,CAAC;IAGzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,qBAAqB;IA6B3D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgB/B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAYpC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAYrC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAmBxC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IA6BpC;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,qBAAqB,EAAE;CAGpE"}
@@ -0,0 +1,175 @@
1
+ import 'reflect-metadata';
2
+ import type { RouteMetadata, ParameterMetadata, DependencyMetadata, ControllerMetadata, Class, WebSocketMetadata, WebSocketHandlerMetadata, GraphQLResolverMetadata, GraphQLFieldMetadata } from '../types';
3
+ export declare class MetadataRegistry {
4
+ private routes;
5
+ private controllers;
6
+ private routesByController;
7
+ private websockets;
8
+ private graphqlResolvers;
9
+ private graphqlFields;
10
+ /**
11
+ * Register a route in the registry
12
+ */
13
+ registerRoute(metadata: RouteMetadata): void;
14
+ /**
15
+ * Register a controller in the registry
16
+ */
17
+ registerController(target: Class, metadata: ControllerMetadata): void;
18
+ /**
19
+ * Get all registered routes
20
+ */
21
+ getRoutes(): RouteMetadata[];
22
+ /**
23
+ * Get a specific route by target and property key
24
+ */
25
+ getRoute(target: Class, propertyKey: string): RouteMetadata | undefined;
26
+ /**
27
+ * Get all routes for a specific controller
28
+ */
29
+ getRoutesByController(target: Class): RouteMetadata[];
30
+ /**
31
+ * Get controller metadata
32
+ */
33
+ getController(target: Class): ControllerMetadata | undefined;
34
+ /**
35
+ * Get all registered controllers
36
+ */
37
+ getControllers(): Map<Class, ControllerMetadata>;
38
+ /**
39
+ * Register a WebSocket handler in the registry
40
+ */
41
+ registerWebSocket(metadata: WebSocketMetadata): void;
42
+ /**
43
+ * Get all registered WebSocket handlers
44
+ */
45
+ getWebSockets(): WebSocketMetadata[];
46
+ /**
47
+ * Get WebSocket metadata for a specific target
48
+ */
49
+ getWebSocket(target: Class): WebSocketMetadata | undefined;
50
+ /**
51
+ * Register a GraphQL resolver in the registry
52
+ */
53
+ registerGraphQLResolver(metadata: GraphQLResolverMetadata): void;
54
+ /**
55
+ * Register a GraphQL field in the registry
56
+ */
57
+ registerGraphQLField(metadata: GraphQLFieldMetadata): void;
58
+ /**
59
+ * Get all registered GraphQL resolvers
60
+ */
61
+ getGraphQLResolvers(): GraphQLResolverMetadata[];
62
+ /**
63
+ * Get GraphQL resolver metadata for a specific target
64
+ */
65
+ getGraphQLResolver(target: Class): GraphQLResolverMetadata | undefined;
66
+ /**
67
+ * Get all GraphQL fields
68
+ */
69
+ getGraphQLFields(): GraphQLFieldMetadata[];
70
+ /**
71
+ * Get GraphQL fields for a specific resolver
72
+ */
73
+ getGraphQLFieldsByResolver(target: Class): GraphQLFieldMetadata[];
74
+ /**
75
+ * Clear all metadata (useful for testing)
76
+ */
77
+ clear(): void;
78
+ /**
79
+ * Generate a unique key for a route
80
+ */
81
+ private getRouteKey;
82
+ /**
83
+ * Define route metadata using reflect-metadata (used by decorators)
84
+ */
85
+ static defineRoute(target: any, propertyKey: string, metadata: Partial<RouteMetadata>): void;
86
+ /**
87
+ * Define parameter metadata (used by parameter decorators)
88
+ */
89
+ static defineParameter(target: any, propertyKey: string, index: number, metadata: ParameterMetadata): void;
90
+ /**
91
+ * Define dependency metadata (used by @Depends decorator)
92
+ */
93
+ static defineDependency(target: any, propertyKey: string, index: number, metadata: DependencyMetadata): void;
94
+ /**
95
+ * Define controller metadata (used by @Controller decorator)
96
+ */
97
+ static defineController(target: any, metadata: ControllerMetadata): void;
98
+ /**
99
+ * Get route metadata from reflect-metadata
100
+ */
101
+ static getRouteMetadata(target: any, propertyKey: string): Partial<RouteMetadata> | undefined;
102
+ /**
103
+ * Get parameter metadata from reflect-metadata
104
+ */
105
+ static getParameterMetadata(target: any, propertyKey: string): ParameterMetadata[] | undefined;
106
+ /**
107
+ * Get dependency metadata from reflect-metadata
108
+ */
109
+ static getDependencyMetadata(target: any, propertyKey: string): DependencyMetadata[] | undefined;
110
+ /**
111
+ * Get controller metadata from reflect-metadata
112
+ */
113
+ static getControllerMetadata(target: any): ControllerMetadata | undefined;
114
+ /**
115
+ * Check if a class has controller metadata
116
+ */
117
+ static hasControllerMetadata(target: any): boolean;
118
+ /**
119
+ * Check if a method has route metadata
120
+ */
121
+ static hasRouteMetadata(target: any, propertyKey: string): boolean;
122
+ /**
123
+ * Get all route methods from a controller class
124
+ */
125
+ static getRouteMethods(target: Class): string[];
126
+ /**
127
+ * Define WebSocket metadata (used by @WebSocket decorator)
128
+ */
129
+ static defineWebSocket(target: any, metadata: Partial<WebSocketMetadata>): void;
130
+ /**
131
+ * Define WebSocket handler metadata (used by @OnConnect, @OnMessage, @OnDisconnect)
132
+ */
133
+ static defineWebSocketHandler(target: any, propertyKey: string, metadata: WebSocketHandlerMetadata): void;
134
+ /**
135
+ * Get WebSocket metadata from reflect-metadata
136
+ */
137
+ static getWebSocketMetadata(target: any): Partial<WebSocketMetadata> | undefined;
138
+ /**
139
+ * Get WebSocket handler metadata from reflect-metadata
140
+ */
141
+ static getWebSocketHandlerMetadata(target: any, propertyKey: string): WebSocketHandlerMetadata | undefined;
142
+ /**
143
+ * Check if a class has WebSocket metadata
144
+ */
145
+ static hasWebSocketMetadata(target: any): boolean;
146
+ /**
147
+ * Define GraphQL resolver metadata (used by @Resolver decorator)
148
+ */
149
+ static defineGraphQLResolver(target: any, metadata: GraphQLResolverMetadata): void;
150
+ /**
151
+ * Define GraphQL field metadata (used by @Query, @Mutation, @Subscription decorators)
152
+ */
153
+ static defineGraphQLField(target: any, propertyKey: string, metadata: GraphQLFieldMetadata): void;
154
+ /**
155
+ * Get GraphQL resolver metadata from reflect-metadata
156
+ */
157
+ static getGraphQLResolverMetadata(target: any): GraphQLResolverMetadata | undefined;
158
+ /**
159
+ * Get all GraphQL fields metadata from a resolver class
160
+ */
161
+ static getGraphQLFieldsMetadata(target: any): GraphQLFieldMetadata[];
162
+ /**
163
+ * Get GraphQL field metadata from a specific method
164
+ */
165
+ static getGraphQLFieldMetadata(target: any, propertyKey: string): GraphQLFieldMetadata | undefined;
166
+ /**
167
+ * Check if a class has GraphQL resolver metadata
168
+ */
169
+ static hasGraphQLResolverMetadata(target: any): boolean;
170
+ /**
171
+ * Check if a method has GraphQL field metadata
172
+ */
173
+ static hasGraphQLFieldMetadata(target: any, propertyKey: string): boolean;
174
+ }
175
+ //# sourceMappingURL=metadata.d.ts.map