veloce-ts 0.1.7 → 0.2.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 (118) hide show
  1. package/CHANGELOG.md +70 -1
  2. package/dist/cjs/src/errors/index.js +2 -2
  3. package/dist/cjs/src/errors/index.js.map +6 -5
  4. package/dist/cjs/src/graphql/index.js +6 -6
  5. package/dist/cjs/src/graphql/index.js.map +4 -4
  6. package/dist/cjs/src/index.js +24 -22
  7. package/dist/cjs/src/index.js.map +100 -13
  8. package/dist/cjs/src/plugins/index.js +7 -7
  9. package/dist/cjs/src/plugins/index.js.map +4 -4
  10. package/dist/cjs/src/testing/index.js +4 -4
  11. package/dist/cjs/src/testing/index.js.map +10 -9
  12. package/dist/cjs/src/validation/index.js +2 -2
  13. package/dist/cjs/src/validation/index.js.map +4 -4
  14. package/dist/esm/{chunk-0zxhx5b8.js → chunk-09p9prja.js} +1 -1
  15. package/dist/esm/chunk-3nhrrhv9.js +5 -0
  16. package/dist/esm/chunk-3nhrrhv9.js.map +10 -0
  17. package/dist/esm/{chunk-159eqj8q.js → chunk-3vd5qsws.js} +2 -2
  18. package/dist/esm/{chunk-159eqj8q.js.map → chunk-3vd5qsws.js.map} +1 -1
  19. package/dist/esm/{chunk-qfsjy9bg.js → chunk-4s66h6qw.js} +1 -1
  20. package/dist/esm/{chunk-awven6dt.js → chunk-9f0s1qbb.js} +2 -2
  21. package/dist/esm/{chunk-awven6dt.js.map → chunk-9f0s1qbb.js.map} +1 -1
  22. package/dist/esm/{chunk-82f2j0k2.js → chunk-dpjkne9h.js} +1 -1
  23. package/dist/esm/{chunk-42h6trpf.js → chunk-f64j5zbr.js} +2 -2
  24. package/dist/esm/{chunk-42h6trpf.js.map → chunk-f64j5zbr.js.map} +1 -1
  25. package/dist/esm/{chunk-658zaz9f.js → chunk-gdq186ew.js} +1 -1
  26. package/dist/esm/chunk-gy9nsvnk.js +6 -0
  27. package/dist/esm/chunk-gy9nsvnk.js.map +10 -0
  28. package/dist/esm/{chunk-gv5n8ddb.js → chunk-qg4ngg5j.js} +3 -3
  29. package/dist/esm/{chunk-gv5n8ddb.js.map → chunk-qg4ngg5j.js.map} +1 -1
  30. package/dist/esm/chunk-r8ssy5cv.js +5 -0
  31. package/dist/esm/{chunk-1hqjkm44.js.map → chunk-r8ssy5cv.js.map} +4 -5
  32. package/dist/esm/chunk-sv2c5krg.js +5 -0
  33. package/dist/esm/chunk-sv2c5krg.js.map +10 -0
  34. package/dist/esm/{chunk-9p6d0t33.js → chunk-vzhqg5mb.js} +3 -3
  35. package/dist/esm/{chunk-9p6d0t33.js.map → chunk-vzhqg5mb.js.map} +1 -1
  36. package/dist/esm/{chunk-pn7z890c.js → chunk-yyxd7dw5.js} +3 -3
  37. package/dist/esm/{chunk-pn7z890c.js.map → chunk-yyxd7dw5.js.map} +2 -2
  38. package/dist/esm/src/cli/index.js +3 -3
  39. package/dist/esm/src/cli/index.js.map +1 -1
  40. package/dist/esm/src/docs/index.js +3 -3
  41. package/dist/esm/src/docs/index.js.map +1 -1
  42. package/dist/esm/src/errors/index.js +2 -2
  43. package/dist/esm/src/errors/index.js.map +1 -1
  44. package/dist/esm/src/graphql/index.js +2 -2
  45. package/dist/esm/src/graphql/index.js.map +1 -1
  46. package/dist/esm/src/index.js +4 -2
  47. package/dist/esm/src/index.js.map +93 -7
  48. package/dist/esm/src/middleware/index.js +2 -2
  49. package/dist/esm/src/middleware/index.js.map +1 -1
  50. package/dist/esm/src/plugins/index.js +2 -2
  51. package/dist/esm/src/plugins/index.js.map +2 -2
  52. package/dist/esm/src/testing/index.js +2 -2
  53. package/dist/esm/src/testing/index.js.map +6 -6
  54. package/dist/esm/src/types/index.js +2 -2
  55. package/dist/esm/src/types/index.js.map +1 -1
  56. package/dist/esm/src/validation/index.js +2 -2
  57. package/dist/esm/src/validation/index.js.map +1 -1
  58. package/dist/esm/src/websocket/index.js +1 -1
  59. package/dist/types/auth/auth-plugin.d.ts +29 -0
  60. package/dist/types/auth/auth-plugin.d.ts.map +1 -0
  61. package/dist/types/auth/auth-service.d.ts +84 -0
  62. package/dist/types/auth/auth-service.d.ts.map +1 -0
  63. package/dist/types/auth/decorators.d.ts +36 -0
  64. package/dist/types/auth/decorators.d.ts.map +1 -0
  65. package/dist/types/auth/exceptions.d.ts +27 -0
  66. package/dist/types/auth/exceptions.d.ts.map +1 -0
  67. package/dist/types/auth/index.d.ts +29 -0
  68. package/dist/types/auth/index.d.ts.map +1 -0
  69. package/dist/types/auth/jwt-provider.d.ts +98 -0
  70. package/dist/types/auth/jwt-provider.d.ts.map +1 -0
  71. package/dist/types/auth/oauth-decorators.d.ts +31 -0
  72. package/dist/types/auth/oauth-decorators.d.ts.map +1 -0
  73. package/dist/types/auth/oauth-plugin.d.ts +34 -0
  74. package/dist/types/auth/oauth-plugin.d.ts.map +1 -0
  75. package/dist/types/auth/oauth-provider.d.ts +135 -0
  76. package/dist/types/auth/oauth-provider.d.ts.map +1 -0
  77. package/dist/types/auth/permission-decorators.d.ts +92 -0
  78. package/dist/types/auth/permission-decorators.d.ts.map +1 -0
  79. package/dist/types/auth/permission-plugin.d.ts +31 -0
  80. package/dist/types/auth/permission-plugin.d.ts.map +1 -0
  81. package/dist/types/auth/permissions.d.ts +225 -0
  82. package/dist/types/auth/permissions.d.ts.map +1 -0
  83. package/dist/types/auth/rbac-decorators.d.ts +63 -0
  84. package/dist/types/auth/rbac-decorators.d.ts.map +1 -0
  85. package/dist/types/auth/rbac-plugin.d.ts +31 -0
  86. package/dist/types/auth/rbac-plugin.d.ts.map +1 -0
  87. package/dist/types/auth/rbac.d.ts +145 -0
  88. package/dist/types/auth/rbac.d.ts.map +1 -0
  89. package/dist/types/auth/session-decorators.d.ts +75 -0
  90. package/dist/types/auth/session-decorators.d.ts.map +1 -0
  91. package/dist/types/auth/session-plugin.d.ts +40 -0
  92. package/dist/types/auth/session-plugin.d.ts.map +1 -0
  93. package/dist/types/auth/session.d.ts +235 -0
  94. package/dist/types/auth/session.d.ts.map +1 -0
  95. package/dist/types/core/application.d.ts +5 -0
  96. package/dist/types/core/application.d.ts.map +1 -1
  97. package/dist/types/core/compiled-metadata.d.ts +1 -0
  98. package/dist/types/core/compiled-metadata.d.ts.map +1 -1
  99. package/dist/types/core/metadata.d.ts +97 -1
  100. package/dist/types/core/metadata.d.ts.map +1 -1
  101. package/dist/types/core/router-compiler.d.ts +11 -1
  102. package/dist/types/core/router-compiler.d.ts.map +1 -1
  103. package/dist/types/decorators/http.d.ts +13 -1
  104. package/dist/types/decorators/http.d.ts.map +1 -1
  105. package/dist/types/decorators/middleware.d.ts.map +1 -1
  106. package/dist/types/errors/handler.d.ts.map +1 -1
  107. package/dist/types/index.d.ts +15 -0
  108. package/dist/types/index.d.ts.map +1 -1
  109. package/dist/types/types/index.d.ts +71 -1
  110. package/dist/types/types/index.d.ts.map +1 -1
  111. package/package.json +24 -4
  112. package/dist/esm/chunk-1hqjkm44.js +0 -5
  113. package/dist/esm/chunk-2q6s8v3j.js +0 -6
  114. package/dist/esm/chunk-2q6s8v3j.js.map +0 -10
  115. /package/dist/esm/{chunk-0zxhx5b8.js.map → chunk-09p9prja.js.map} +0 -0
  116. /package/dist/esm/{chunk-qfsjy9bg.js.map → chunk-4s66h6qw.js.map} +0 -0
  117. /package/dist/esm/{chunk-82f2j0k2.js.map → chunk-dpjkne9h.js.map} +0 -0
  118. /package/dist/esm/{chunk-658zaz9f.js.map → chunk-gdq186ew.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,72 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.0] - 2025-10-14
11
+
12
+ ### 🚀 Major Features Added
13
+ - **Complete Authentication System**: JWT-based authentication with access/refresh tokens
14
+ - **Role-Based Access Control (RBAC)**: Hierarchical roles with granular permissions system
15
+ - **SQLite Integration**: Built-in SQLite support with Bun's native database
16
+ - **Real-time WebSocket Support**: Enhanced WebSocket handling with decorators
17
+ - **GraphQL Integration**: Complete GraphQL support with resolvers and subscriptions
18
+ - **Advanced Middleware System**: Custom middleware with request/response interceptors
19
+ - **Admin Panel Features**: Comprehensive admin endpoints for user and system management
20
+
21
+ ### 🎯 New Decorators & Features
22
+ - **@Auth**: JWT authentication decorator with automatic user injection
23
+ - **@CurrentUser**: Inject current authenticated user into handlers
24
+ - **@MinimumRole**: Role-based endpoint protection
25
+ - **@Permissions**: Granular permission-based access control
26
+ - **@WebSocket**: Enhanced WebSocket decorators with connection management
27
+ - **@Resolver**: GraphQL resolver decorators for queries and mutations
28
+ - **@OnConnect/@OnMessage/@OnDisconnect**: WebSocket lifecycle decorators
29
+
30
+ ### 🔧 Core Framework Improvements
31
+ - **Router Compiler Fixes**: Fixed critical bugs with sparse array handling in metadata
32
+ - **Dependency Injection**: Enhanced DI system with better error handling
33
+ - **Parameter Resolution**: Improved parameter and dependency resolution
34
+ - **Type Safety**: Enhanced TypeScript inference and type checking
35
+ - **Error Handling**: Better error messages and debugging capabilities
36
+
37
+ ### 📚 Documentation & Examples
38
+ - **Veloce TaskMaster**: Complete real-world example with authentication, RBAC, and frontend
39
+ - **Comprehensive Examples**: Task management system showcasing all framework features
40
+ - **Migration Guides**: Documentation for migrating from Express.js and other frameworks
41
+ - **API Documentation**: Enhanced OpenAPI/Swagger documentation generation
42
+
43
+ ### 🛠️ Technical Improvements
44
+ - **Performance**: Optimized router compilation and metadata handling
45
+ - **Memory Management**: Better handling of metadata arrays and object references
46
+ - **Bundle Size**: Reduced framework bundle size through optimizations
47
+ - **Build System**: Improved TypeScript compilation and type generation
48
+ - **Testing**: Enhanced testing utilities and error reporting
49
+
50
+ ### 🔒 Security Enhancements
51
+ - **JWT Security**: Secure token generation and validation
52
+ - **Password Hashing**: Built-in password hashing utilities
53
+ - **CSRF Protection**: Enhanced CORS and security middleware
54
+ - **Input Validation**: Improved Zod schema validation
55
+ - **Role Hierarchy**: Configurable role hierarchy with permission inheritance
56
+
57
+ ### 🎨 Developer Experience
58
+ - **Better Error Messages**: More descriptive error messages with stack traces
59
+ - **Hot Reload**: Improved development server with better file watching
60
+ - **TypeScript Support**: Enhanced type inference and IntelliSense
61
+ - **Debugging**: Better debugging capabilities with request tracing
62
+ - **CLI Improvements**: Enhanced CLI with better project scaffolding
63
+
64
+ ### 🐛 Critical Bug Fixes
65
+ - **Router Compilation**: Fixed sparse array handling in parameter metadata
66
+ - **Dependency Resolution**: Fixed undefined dependency handling
67
+ - **Array Length Errors**: Fixed array creation with invalid indices
68
+ - **Import Path Issues**: Corrected all import paths in generated projects
69
+ - **Metadata Processing**: Fixed metadata compilation edge cases
70
+
71
+ ### 📦 New Dependencies
72
+ - **jsonwebtoken**: JWT token generation and validation
73
+ - **reflect-metadata**: Enhanced reflection capabilities for decorators
74
+ - **zod-to-json-schema**: Improved OpenAPI schema generation
75
+
10
76
  ## [0.1.7] - 2025-10-12
11
77
 
12
78
  ### Fixed
@@ -99,7 +165,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99
165
  - CLI tooling
100
166
  - Testing utilities
101
167
 
102
- [Unreleased]: https://github.com/AlfredoMejia3001/veloce-ts/compare/v0.1.5...HEAD
168
+ [Unreleased]: https://github.com/AlfredoMejia3001/veloce-ts/compare/v0.2.0...HEAD
169
+ [0.2.0]: https://github.com/AlfredoMejia3001/veloce-ts/compare/v0.1.7...v0.2.0
170
+ [0.1.7]: https://github.com/AlfredoMejia3001/veloce-ts/compare/v0.1.6...v0.1.7
171
+ [0.1.6]: https://github.com/AlfredoMejia3001/veloce-ts/compare/v0.1.5...v0.1.6
103
172
  [0.1.5]: https://github.com/AlfredoMejia3001/veloce-ts/compare/v0.1.4...v0.1.5
104
173
  [0.1.4]: https://github.com/AlfredoMejia3001/veloce-ts/compare/v0.1.3...v0.1.4
105
174
  [0.1.3]: https://github.com/AlfredoMejia3001/veloce-ts/compare/v0.1.2...v0.1.3
@@ -1,4 +1,4 @@
1
- var Z=Object.create;var{getPrototypeOf:_,defineProperty:B,getOwnPropertyNames:X,getOwnPropertyDescriptor:$}=Object,Y=Object.prototype.hasOwnProperty;var J=(F,U,k)=>{k=F!=null?Z(_(F)):{};let z=U||!F||!F.__esModule?B(k,"default",{value:F,enumerable:!0}):k;for(let G of X(F))if(!Y.call(z,G))B(z,G,{get:()=>F[G],enumerable:!0});return z},R=new WeakMap,b=(F)=>{var U=R.get(F),k;if(U)return U;if(U=B({},"__esModule",{value:!0}),F&&typeof F==="object"||typeof F==="function")X(F).map((z)=>!Y.call(U,z)&&B(U,z,{get:()=>F[z],enumerable:!(k=$(F,z))||k.enumerable}));return R.set(F,U),U},V=(F,U)=>()=>(U||F((U={exports:{}}).exports,U),U.exports);var q=(F,U)=>{for(var k in U)B(F,k,{get:U[k],enumerable:!0,configurable:!0,set:(z)=>U[k]=()=>z})};var W=(F,U)=>()=>(F&&(U=F(F=0)),U);var C={};q(C,{UnauthorizedException:()=>K,NotFoundException:()=>I,HTTPException:()=>A,ForbiddenException:()=>L,ErrorHandler:()=>Q,BadRequestException:()=>M});module.exports=b(C);class A extends Error{statusCode;details;constructor(F,U,k){super(U);this.statusCode=F;this.details=k;if(this.name="HTTPException",Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}}class I extends A{constructor(F="Not Found",U){super(404,F,U);this.name="NotFoundException"}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}}class K extends A{constructor(F="Unauthorized",U){super(401,F,U);this.name="UnauthorizedException"}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}}class L extends A{constructor(F="Forbidden",U){super(403,F,U);this.name="ForbiddenException"}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}}class M extends A{constructor(F="Bad Request",U){super(400,F,U);this.name="BadRequestException"}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}}class N extends A{zodError;constructor(F){super(422,"Validation failed");this.zodError=F;this.name="ValidationException"}toJSON(){return{error:"Validation Error",statusCode:this.statusCode,details:this.zodError.errors.map((F)=>({path:F.path.join("."),message:F.message,code:F.code}))}}}class Q{customHandler;isDevelopment;constructor(F){this.customHandler=F,this.isDevelopment=!0}setCustomHandler(F){this.customHandler=F}async handle(F,U){if(this.customHandler)try{return await this.customHandler(F,U)}catch(k){console.error("Custom error handler failed:",k)}if(F instanceof N)return this.handleValidationException(F,U);if(F instanceof A)return this.handleHTTPException(F,U);return this.handleGenericError(F,U)}handleValidationException(F,U){let k=F.toJSON();if(this.isDevelopment)console.error("Validation Error:",{path:U.req.path,method:U.req.method,details:k.details});return U.json(k,F.statusCode)}handleHTTPException(F,U){let k=F.toJSON();if(F.statusCode>=500)console.error("HTTP Exception:",{name:F.name,statusCode:F.statusCode,message:F.message,path:U.req.path,method:U.req.method,...this.isDevelopment&&F.stack?{stack:F.stack}:{}});else if(this.isDevelopment)console.warn("HTTP Exception:",{name:F.name,statusCode:F.statusCode,message:F.message,path:U.req.path,method:U.req.method});return U.json(k,F.statusCode)}handleGenericError(F,U){console.error("Internal Server Error:",{name:F.name,message:F.message,path:U.req.path,method:U.req.method,stack:F.stack});let k={error:"Internal Server Error",statusCode:500};if(this.isDevelopment){if(k.message=F.message,k.name=F.name,F.stack)k.stack=F.stack.split(`
1
+ var _=Object.create;var{getPrototypeOf:$,defineProperty:B,getOwnPropertyNames:Y,getOwnPropertyDescriptor:b}=Object,Z=Object.prototype.hasOwnProperty;var W=(F,U,k)=>{k=F!=null?_($(F)):{};let z=U||!F||!F.__esModule?B(k,"default",{value:F,enumerable:!0}):k;for(let I of Y(F))if(!Z.call(z,I))B(z,I,{get:()=>F[I],enumerable:!0});return z},X=new WeakMap,q=(F)=>{var U=X.get(F),k;if(U)return U;if(U=B({},"__esModule",{value:!0}),F&&typeof F==="object"||typeof F==="function")Y(F).map((z)=>!Z.call(U,z)&&B(U,z,{get:()=>F[z],enumerable:!(k=b(F,z))||k.enumerable}));return X.set(F,U),U},y=(F,U)=>()=>(U||F((U={exports:{}}).exports,U),U.exports);var C=(F,U)=>{for(var k in U)B(F,k,{get:U[k],enumerable:!0,configurable:!0,set:(z)=>U[k]=()=>z})};var J=(F,U)=>()=>(F&&(U=F(F=0)),U);var A,K,L,M,N;var G=J(()=>{A=class A extends Error{statusCode;details;constructor(F,U,k){super(U);this.statusCode=F;this.details=k;if(this.name="HTTPException",Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}};K=class K extends A{constructor(F="Not Found",U){super(404,F,U);this.name="NotFoundException"}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}};L=class L extends A{constructor(F="Unauthorized",U){super(401,F,U);this.name="UnauthorizedException"}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}};M=class M extends A{constructor(F="Forbidden",U){super(403,F,U);this.name="ForbiddenException"}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}};N=class N extends A{constructor(F="Bad Request",U){super(400,F,U);this.name="BadRequestException"}toJSON(){return{error:this.message,statusCode:this.statusCode,...this.details&&{details:this.details}}}}});G();var V={};C(V,{UnauthorizedException:()=>L,NotFoundException:()=>K,HTTPException:()=>A,ForbiddenException:()=>M,ErrorHandler:()=>R,BadRequestException:()=>N});module.exports=q(V);G();G();class Q extends A{zodError;constructor(F){super(422,"Validation failed");this.zodError=F;this.name="ValidationException"}toJSON(){return{error:"Validation Error",statusCode:this.statusCode,details:this.zodError.errors.map((F)=>({path:F.path.join("."),message:F.message,code:F.code}))}}}class R{customHandler;isDevelopment;constructor(F){this.customHandler=F,this.isDevelopment=!0}setCustomHandler(F){this.customHandler=F}async handle(F,U){if(console.log("ErrorHandler.handle called with:",F.constructor.name,F.message),this.customHandler)try{return await this.customHandler(F,U)}catch(k){console.error("Custom error handler failed:",k)}if(F instanceof Q)return console.log("Handling as ValidationException"),this.handleValidationException(F,U);if(F instanceof A)return console.log("Handling as HTTPException"),this.handleHTTPException(F,U);return console.log("Handling as generic error"),this.handleGenericError(F,U)}handleValidationException(F,U){let k=F.toJSON();if(this.isDevelopment)console.error("Validation Error:",{path:U.req.path,method:U.req.method,details:k.details});return U.json(k,F.statusCode)}handleHTTPException(F,U){let k=F.toJSON();if(F.statusCode>=500)console.error("HTTP Exception:",{name:F.name,statusCode:F.statusCode,message:F.message,path:U.req.path,method:U.req.method,...this.isDevelopment&&F.stack?{stack:F.stack}:{}});else if(this.isDevelopment)console.warn("HTTP Exception:",{name:F.name,statusCode:F.statusCode,message:F.message,path:U.req.path,method:U.req.method});return U.json(k,F.statusCode)}handleGenericError(F,U){console.error("Internal Server Error:",{name:F.name,message:F.message,path:U.req.path,method:U.req.method,stack:F.stack});let k={error:"Internal Server Error",statusCode:500};if(this.isDevelopment){if(k.message=F.message,k.name=F.name,F.stack)k.stack=F.stack.split(`
2
2
  `).map((z)=>z.trim())}else k.message="An unexpected error occurred";return U.json(k,500)}isDevelopmentMode(){return this.isDevelopment}setDevelopmentMode(F){this.isDevelopment=F}}
3
3
 
4
- //# debugId=AD3ACA7A84FED66D64756E2164756E21
4
+ //# debugId=8C0007C99DF044F464756E2164756E21
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["..\\..\\src\\errors\\exceptions.ts", "..\\..\\src\\validation\\exceptions.ts", "..\\..\\src\\errors\\handler.ts"],
3
+ "sources": ["..\\..\\src\\errors\\exceptions.ts", "..\\..\\src\\errors\\index.ts", "..\\..\\src\\errors\\handler.ts", "..\\..\\src\\validation\\exceptions.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\r\n * Base HTTP exception class\r\n * All HTTP exceptions should extend this class\r\n * Provides consistent error response format\r\n */\r\nexport class HTTPException extends Error {\r\n constructor(\r\n public statusCode: number,\r\n message: string,\r\n public details?: any\r\n ) {\r\n super(message);\r\n this.name = 'HTTPException';\r\n \r\n // Maintains proper stack trace for where error was thrown (V8 only)\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n /**\r\n * Convert exception to JSON format for HTTP response\r\n * @returns Object with error details\r\n */\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 404 Not Found exception\r\n * Thrown when a requested resource cannot be found\r\n */\r\nexport class NotFoundException extends HTTPException {\r\n constructor(message: string = 'Not Found', details?: any) {\r\n super(404, message, details);\r\n this.name = 'NotFoundException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 401 Unauthorized exception\r\n * Thrown when authentication is required but not provided or invalid\r\n */\r\nexport class UnauthorizedException extends HTTPException {\r\n constructor(message: string = 'Unauthorized', details?: any) {\r\n super(401, message, details);\r\n this.name = 'UnauthorizedException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 403 Forbidden exception\r\n * Thrown when user is authenticated but doesn't have permission\r\n */\r\nexport class ForbiddenException extends HTTPException {\r\n constructor(message: string = 'Forbidden', details?: any) {\r\n super(403, message, details);\r\n this.name = 'ForbiddenException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 400 Bad Request exception\r\n * Thrown when the request is malformed or invalid\r\n */\r\nexport class BadRequestException extends HTTPException {\r\n constructor(message: string = 'Bad Request', details?: any) {\r\n super(400, message, details);\r\n this.name = 'BadRequestException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n",
6
- "import { ZodError } from 'zod';\r\nimport { HTTPException } from '../errors/exceptions.js';\r\n\r\n/**\r\n * ValidationException is thrown when Zod validation fails\r\n * Extends HTTPException with 422 Unprocessable Entity status\r\n * Provides detailed validation error information\r\n */\r\nexport class ValidationException extends HTTPException {\r\n constructor(public zodError: ZodError) {\r\n super(422, 'Validation failed');\r\n this.name = 'ValidationException';\r\n }\r\n\r\n /**\r\n * Converts the validation error to a user-friendly JSON format\r\n * @returns Object with error message and detailed validation errors\r\n */\r\n toJSON() {\r\n return {\r\n error: 'Validation Error',\r\n statusCode: this.statusCode,\r\n details: this.zodError.errors.map(err => ({\r\n path: err.path.join('.'),\r\n message: err.message,\r\n code: err.code\r\n }))\r\n };\r\n }\r\n}\r\n",
7
- "import type { Context } from '../types';\r\nimport { HTTPException } from './exceptions.js';\r\nimport { ValidationException } from '../validation/exceptions.js';\r\n\r\n/**\r\n * Custom error handler function type\r\n * Allows users to provide their own error handling logic\r\n */\r\nexport type CustomErrorHandler = (error: Error, c: Context) => Response | Promise<Response>;\r\n\r\n/**\r\n * ErrorHandler processes all errors that occur during request handling\r\n * Provides consistent error responses and handles different error types appropriately\r\n */\r\nexport class ErrorHandler {\r\n private customHandler?: CustomErrorHandler;\r\n private isDevelopment: boolean;\r\n\r\n constructor(customHandler?: CustomErrorHandler) {\r\n this.customHandler = customHandler;\r\n this.isDevelopment = process.env.NODE_ENV !== 'production';\r\n }\r\n\r\n /**\r\n * Set a custom error handler\r\n * @param handler - Custom error handling function\r\n */\r\n setCustomHandler(handler: CustomErrorHandler): void {\r\n this.customHandler = handler;\r\n }\r\n\r\n /**\r\n * Main error handling method\r\n * Processes all error types and returns appropriate HTTP responses\r\n * @param error - The error that occurred\r\n * @param c - Hono context object\r\n * @returns HTTP response with error details\r\n */\r\n async handle(error: Error, c: Context): Promise<Response> {\r\n // If custom handler is provided, use it first\r\n if (this.customHandler) {\r\n try {\r\n return await this.customHandler(error, c);\r\n } catch (customHandlerError) {\r\n // If custom handler fails, fall back to default handling\r\n console.error('Custom error handler failed:', customHandlerError);\r\n }\r\n }\r\n\r\n // Handle ValidationException (422)\r\n if (error instanceof ValidationException) {\r\n return this.handleValidationException(error, c);\r\n }\r\n\r\n // Handle HTTPException and its subclasses\r\n if (error instanceof HTTPException) {\r\n return this.handleHTTPException(error, c);\r\n }\r\n\r\n // Handle generic errors (500)\r\n return this.handleGenericError(error, c);\r\n }\r\n\r\n /**\r\n * Handle validation exceptions (422 Unprocessable Entity)\r\n * @param error - ValidationException instance\r\n * @param c - Hono context\r\n * @returns JSON response with validation error details\r\n */\r\n private handleValidationException(error: ValidationException, c: Context): Response {\r\n const response = error.toJSON();\r\n \r\n // Log validation errors in development\r\n if (this.isDevelopment) {\r\n console.error('Validation Error:', {\r\n path: c.req.path,\r\n method: c.req.method,\r\n details: response.details\r\n });\r\n }\r\n\r\n return c.json(response, error.statusCode as any);\r\n }\r\n\r\n /**\r\n * Handle HTTP exceptions (4xx, 5xx)\r\n * @param error - HTTPException instance\r\n * @param c - Hono context\r\n * @returns JSON response with error details\r\n */\r\n private handleHTTPException(error: HTTPException, c: Context): Response {\r\n const response = error.toJSON();\r\n\r\n // Log HTTP exceptions based on severity\r\n if (error.statusCode >= 500) {\r\n // Server errors - always log\r\n console.error('HTTP Exception:', {\r\n name: error.name,\r\n statusCode: error.statusCode,\r\n message: error.message,\r\n path: c.req.path,\r\n method: c.req.method,\r\n ...(this.isDevelopment && error.stack ? { stack: error.stack } : {})\r\n });\r\n } else if (this.isDevelopment) {\r\n // Client errors - log only in development\r\n console.warn('HTTP Exception:', {\r\n name: error.name,\r\n statusCode: error.statusCode,\r\n message: error.message,\r\n path: c.req.path,\r\n method: c.req.method\r\n });\r\n }\r\n\r\n return c.json(response, error.statusCode as any);\r\n }\r\n\r\n /**\r\n * Handle generic/unexpected errors (500 Internal Server Error)\r\n * Hides internal details in production, shows stack trace in development\r\n * @param error - Generic Error instance\r\n * @param c - Hono context\r\n * @returns JSON response with error details\r\n */\r\n private handleGenericError(error: Error, c: Context): Response {\r\n // Always log generic errors\r\n console.error('Internal Server Error:', {\r\n name: error.name,\r\n message: error.message,\r\n path: c.req.path,\r\n method: c.req.method,\r\n stack: error.stack\r\n });\r\n\r\n // Build response based on environment\r\n const response: any = {\r\n error: 'Internal Server Error',\r\n statusCode: 500\r\n };\r\n\r\n // In development, include error details and stack trace\r\n if (this.isDevelopment) {\r\n response.message = error.message;\r\n response.name = error.name;\r\n \r\n if (error.stack) {\r\n response.stack = error.stack.split('\\n').map(line => line.trim());\r\n }\r\n } else {\r\n // In production, use generic message\r\n response.message = 'An unexpected error occurred';\r\n }\r\n\r\n return c.json(response, 500);\r\n }\r\n\r\n /**\r\n * Check if running in development mode\r\n * @returns true if in development mode\r\n */\r\n isDevelopmentMode(): boolean {\r\n return this.isDevelopment;\r\n }\r\n\r\n /**\r\n * Set development mode manually (useful for testing)\r\n * @param isDev - Whether to enable development mode\r\n */\r\n setDevelopmentMode(isDev: boolean): void {\r\n this.isDevelopment = isDev;\r\n }\r\n}\r\n"
6
+ "/**\r\n * Error handling exports\r\n * Provides all exception classes and error handler\r\n */\r\n\r\nexport {\r\n HTTPException,\r\n NotFoundException,\r\n UnauthorizedException,\r\n ForbiddenException,\r\n BadRequestException\r\n} from './exceptions.js';\r\n\r\nexport { ErrorHandler } from './handler.js';\r\n",
7
+ "import type { Context } from '../types';\r\nimport { HTTPException } from './exceptions.js';\r\nimport { ValidationException } from '../validation/exceptions.js';\r\n\r\n/**\r\n * Custom error handler function type\r\n * Allows users to provide their own error handling logic\r\n */\r\nexport type CustomErrorHandler = (error: Error, c: Context) => Response | Promise<Response>;\r\n\r\n/**\r\n * ErrorHandler processes all errors that occur during request handling\r\n * Provides consistent error responses and handles different error types appropriately\r\n */\r\nexport class ErrorHandler {\r\n private customHandler?: CustomErrorHandler;\r\n private isDevelopment: boolean;\r\n\r\n constructor(customHandler?: CustomErrorHandler) {\r\n this.customHandler = customHandler;\r\n this.isDevelopment = process.env.NODE_ENV !== 'production';\r\n }\r\n\r\n /**\r\n * Set a custom error handler\r\n * @param handler - Custom error handling function\r\n */\r\n setCustomHandler(handler: CustomErrorHandler): void {\r\n this.customHandler = handler;\r\n }\r\n\r\n /**\r\n * Main error handling method\r\n * Processes all error types and returns appropriate HTTP responses\r\n * @param error - The error that occurred\r\n * @param c - Hono context object\r\n * @returns HTTP response with error details\r\n */\r\n async handle(error: Error, c: Context): Promise<Response> {\r\n console.log('ErrorHandler.handle called with:', error.constructor.name, error.message);\r\n \r\n // If custom handler is provided, use it first\r\n if (this.customHandler) {\r\n try {\r\n return await this.customHandler(error, c);\r\n } catch (customHandlerError) {\r\n // If custom handler fails, fall back to default handling\r\n console.error('Custom error handler failed:', customHandlerError);\r\n }\r\n }\r\n\r\n // Handle ValidationException (422)\r\n if (error instanceof ValidationException) {\r\n console.log('Handling as ValidationException');\r\n return this.handleValidationException(error, c);\r\n }\r\n\r\n // Handle HTTPException and its subclasses\r\n if (error instanceof HTTPException) {\r\n console.log('Handling as HTTPException');\r\n return this.handleHTTPException(error, c);\r\n }\r\n\r\n // Handle generic errors (500)\r\n console.log('Handling as generic error');\r\n return this.handleGenericError(error, c);\r\n }\r\n\r\n /**\r\n * Handle validation exceptions (422 Unprocessable Entity)\r\n * @param error - ValidationException instance\r\n * @param c - Hono context\r\n * @returns JSON response with validation error details\r\n */\r\n private handleValidationException(error: ValidationException, c: Context): Response {\r\n const response = error.toJSON();\r\n \r\n // Log validation errors in development\r\n if (this.isDevelopment) {\r\n console.error('Validation Error:', {\r\n path: c.req.path,\r\n method: c.req.method,\r\n details: response.details\r\n });\r\n }\r\n\r\n return c.json(response, error.statusCode as any);\r\n }\r\n\r\n /**\r\n * Handle HTTP exceptions (4xx, 5xx)\r\n * @param error - HTTPException instance\r\n * @param c - Hono context\r\n * @returns JSON response with error details\r\n */\r\n private handleHTTPException(error: HTTPException, c: Context): Response {\r\n const response = error.toJSON();\r\n\r\n // Log HTTP exceptions based on severity\r\n if (error.statusCode >= 500) {\r\n // Server errors - always log\r\n console.error('HTTP Exception:', {\r\n name: error.name,\r\n statusCode: error.statusCode,\r\n message: error.message,\r\n path: c.req.path,\r\n method: c.req.method,\r\n ...(this.isDevelopment && error.stack ? { stack: error.stack } : {})\r\n });\r\n } else if (this.isDevelopment) {\r\n // Client errors - log only in development\r\n console.warn('HTTP Exception:', {\r\n name: error.name,\r\n statusCode: error.statusCode,\r\n message: error.message,\r\n path: c.req.path,\r\n method: c.req.method\r\n });\r\n }\r\n\r\n return c.json(response, error.statusCode as any);\r\n }\r\n\r\n /**\r\n * Handle generic/unexpected errors (500 Internal Server Error)\r\n * Hides internal details in production, shows stack trace in development\r\n * @param error - Generic Error instance\r\n * @param c - Hono context\r\n * @returns JSON response with error details\r\n */\r\n private handleGenericError(error: Error, c: Context): Response {\r\n // Always log generic errors\r\n console.error('Internal Server Error:', {\r\n name: error.name,\r\n message: error.message,\r\n path: c.req.path,\r\n method: c.req.method,\r\n stack: error.stack\r\n });\r\n\r\n // Build response based on environment\r\n const response: any = {\r\n error: 'Internal Server Error',\r\n statusCode: 500\r\n };\r\n\r\n // In development, include error details and stack trace\r\n if (this.isDevelopment) {\r\n response.message = error.message;\r\n response.name = error.name;\r\n \r\n if (error.stack) {\r\n response.stack = error.stack.split('\\n').map(line => line.trim());\r\n }\r\n } else {\r\n // In production, use generic message\r\n response.message = 'An unexpected error occurred';\r\n }\r\n\r\n return c.json(response, 500);\r\n }\r\n\r\n /**\r\n * Check if running in development mode\r\n * @returns true if in development mode\r\n */\r\n isDevelopmentMode(): boolean {\r\n return this.isDevelopment;\r\n }\r\n\r\n /**\r\n * Set development mode manually (useful for testing)\r\n * @param isDev - Whether to enable development mode\r\n */\r\n setDevelopmentMode(isDev: boolean): void {\r\n this.isDevelopment = isDev;\r\n }\r\n}\r\n",
8
+ "import { ZodError } from 'zod';\r\nimport { HTTPException } from '../errors/exceptions.js';\r\n\r\n/**\r\n * ValidationException is thrown when Zod validation fails\r\n * Extends HTTPException with 422 Unprocessable Entity status\r\n * Provides detailed validation error information\r\n */\r\nexport class ValidationException extends HTTPException {\r\n constructor(public zodError: ZodError) {\r\n super(422, 'Validation failed');\r\n this.name = 'ValidationException';\r\n }\r\n\r\n /**\r\n * Converts the validation error to a user-friendly JSON format\r\n * @returns Object with error message and detailed validation errors\r\n */\r\n toJSON() {\r\n return {\r\n error: 'Validation Error',\r\n statusCode: this.statusCode,\r\n details: this.zodError.errors.map(err => ({\r\n path: err.path.join('.'),\r\n message: err.message,\r\n code: err.code\r\n }))\r\n };\r\n }\r\n}\r\n"
8
9
  ],
9
- "mappings": "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",
10
- "debugId": "AD3ACA7A84FED66D64756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "8C0007C99DF044F464756E2164756E21",
11
12
  "names": []
12
13
  }