bootifyjs 0.1.1 → 1.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 (261) hide show
  1. package/dist/api.d.ts +8 -27
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +68 -134
  4. package/dist/api.js.map +1 -1
  5. package/dist/cache/bootstrap.d.ts +6 -0
  6. package/dist/cache/bootstrap.d.ts.map +1 -0
  7. package/dist/cache/bootstrap.js +23 -0
  8. package/dist/cache/bootstrap.js.map +1 -0
  9. package/dist/cache/cache.service.d.ts +9 -0
  10. package/dist/cache/cache.service.d.ts.map +1 -0
  11. package/dist/cache/cache.service.js +40 -0
  12. package/dist/cache/cache.service.js.map +1 -0
  13. package/dist/cache/cache.types.d.ts +14 -0
  14. package/dist/cache/cache.types.d.ts.map +1 -0
  15. package/dist/cache/cache.types.js +8 -0
  16. package/dist/cache/cache.types.js.map +1 -0
  17. package/dist/cache/decorators.d.ts +12 -0
  18. package/dist/cache/decorators.d.ts.map +1 -0
  19. package/dist/cache/decorators.js +53 -0
  20. package/dist/cache/decorators.js.map +1 -0
  21. package/dist/cache/in-memory-cache.store.d.ts +8 -0
  22. package/dist/cache/in-memory-cache.store.d.ts.map +1 -0
  23. package/dist/cache/in-memory-cache.store.js +39 -0
  24. package/dist/cache/in-memory-cache.store.js.map +1 -0
  25. package/dist/cache/index.d.ts +5 -0
  26. package/dist/cache/index.d.ts.map +1 -0
  27. package/dist/cache/index.js +21 -0
  28. package/dist/cache/index.js.map +1 -0
  29. package/dist/core/component-registry.d.ts +7 -0
  30. package/dist/core/component-registry.d.ts.map +1 -0
  31. package/dist/core/component-registry.js +9 -0
  32. package/dist/core/component-registry.js.map +1 -0
  33. package/dist/core/decorators.d.ts +38 -22
  34. package/dist/core/decorators.d.ts.map +1 -0
  35. package/dist/core/decorators.js +155 -174
  36. package/dist/core/decorators.js.map +1 -1
  37. package/dist/core/di-container.d.ts +31 -0
  38. package/dist/core/di-container.d.ts.map +1 -0
  39. package/dist/core/di-container.js +219 -0
  40. package/dist/core/di-container.js.map +1 -0
  41. package/dist/core/index.d.ts +5 -0
  42. package/dist/core/index.d.ts.map +1 -0
  43. package/dist/core/index.js +21 -0
  44. package/dist/core/index.js.map +1 -0
  45. package/dist/core/request-context.service.d.ts +24 -0
  46. package/dist/core/request-context.service.d.ts.map +1 -0
  47. package/dist/core/request-context.service.js +52 -0
  48. package/dist/core/request-context.service.js.map +1 -0
  49. package/dist/core/router.d.ts +4 -32
  50. package/dist/core/router.d.ts.map +1 -0
  51. package/dist/core/router.js +81 -258
  52. package/dist/core/router.js.map +1 -1
  53. package/dist/events/bootstrap.d.ts +8 -0
  54. package/dist/events/bootstrap.d.ts.map +1 -0
  55. package/dist/events/bootstrap.js +37 -0
  56. package/dist/events/bootstrap.js.map +1 -0
  57. package/dist/events/decorators.d.ts +16 -0
  58. package/dist/events/decorators.d.ts.map +1 -0
  59. package/dist/events/decorators.js +37 -0
  60. package/dist/events/decorators.js.map +1 -0
  61. package/dist/events/event-bus.service.d.ts +21 -0
  62. package/dist/events/event-bus.service.d.ts.map +1 -0
  63. package/dist/events/event-bus.service.js +78 -0
  64. package/dist/events/event-bus.service.js.map +1 -0
  65. package/dist/events/event.types.d.ts +17 -0
  66. package/dist/events/event.types.d.ts.map +1 -0
  67. package/dist/events/event.types.js.map +1 -0
  68. package/dist/events/index.d.ts +5 -13
  69. package/dist/events/index.d.ts.map +1 -0
  70. package/dist/events/index.js +4 -54
  71. package/dist/events/index.js.map +1 -1
  72. package/dist/examples/controllers/health.controller.d.ts +7 -0
  73. package/dist/examples/controllers/health.controller.d.ts.map +1 -0
  74. package/dist/{events/examples/system.events.js → examples/controllers/health.controller.js} +16 -15
  75. package/dist/examples/controllers/health.controller.js.map +1 -0
  76. package/dist/examples/controllers/todo.controller.d.ts +31 -0
  77. package/dist/examples/controllers/todo.controller.d.ts.map +1 -0
  78. package/dist/examples/controllers/todo.controller.js +102 -0
  79. package/dist/examples/controllers/todo.controller.js.map +1 -0
  80. package/dist/examples/events/TodoEventHandler.d.ts +2 -0
  81. package/dist/examples/events/TodoEventHandler.d.ts.map +1 -0
  82. package/dist/examples/events/TodoEventHandler.js +31 -0
  83. package/dist/examples/events/TodoEventHandler.js.map +1 -0
  84. package/dist/examples/events/todo.events.d.ts +16 -0
  85. package/dist/examples/events/todo.events.d.ts.map +1 -0
  86. package/dist/examples/events/todo.events.js +13 -0
  87. package/dist/examples/events/todo.events.js.map +1 -0
  88. package/dist/examples/index.d.ts +2 -0
  89. package/dist/examples/index.d.ts.map +1 -0
  90. package/dist/examples/index.js +35 -0
  91. package/dist/examples/index.js.map +1 -0
  92. package/dist/examples/repositories/todo.repository.d.ts +20 -0
  93. package/dist/examples/repositories/todo.repository.d.ts.map +1 -0
  94. package/dist/examples/repositories/todo.repository.js +33 -0
  95. package/dist/examples/repositories/todo.repository.js.map +1 -0
  96. package/dist/examples/services/todo.service.d.ts +33 -0
  97. package/dist/examples/services/todo.service.d.ts.map +1 -0
  98. package/dist/examples/services/todo.service.js +80 -0
  99. package/dist/examples/services/todo.service.js.map +1 -0
  100. package/dist/examples/todos/schema.d.ts +54 -0
  101. package/dist/examples/todos/schema.d.ts.map +1 -0
  102. package/dist/examples/todos/schema.js +20 -0
  103. package/dist/examples/todos/schema.js.map +1 -0
  104. package/dist/index.d.ts +7 -17
  105. package/dist/index.d.ts.map +1 -0
  106. package/dist/index.js +20 -95
  107. package/dist/index.js.map +1 -1
  108. package/dist/logging/config/logging.config.d.ts +31 -3
  109. package/dist/logging/config/logging.config.d.ts.map +1 -0
  110. package/dist/logging/config/logging.config.js +43 -93
  111. package/dist/logging/config/logging.config.js.map +1 -1
  112. package/dist/logging/core/decorators.d.ts +16 -0
  113. package/dist/logging/core/decorators.d.ts.map +1 -0
  114. package/dist/logging/core/decorators.js +74 -0
  115. package/dist/logging/core/decorators.js.map +1 -0
  116. package/dist/logging/core/logger.provider.d.ts +4 -0
  117. package/dist/logging/core/logger.provider.d.ts.map +1 -0
  118. package/dist/logging/core/logger.provider.js +68 -0
  119. package/dist/logging/core/logger.provider.js.map +1 -0
  120. package/dist/logging/core/logger.service.d.ts +9 -27
  121. package/dist/logging/core/logger.service.d.ts.map +1 -0
  122. package/dist/logging/core/logger.service.js +34 -164
  123. package/dist/logging/core/logger.service.js.map +1 -1
  124. package/dist/logging/core/{startup-logger.service.d.ts → startup.logger.d.ts} +4 -6
  125. package/dist/logging/core/startup.logger.d.ts.map +1 -0
  126. package/dist/logging/core/{startup-logger.service.js → startup.logger.js} +36 -42
  127. package/dist/logging/core/startup.logger.js.map +1 -0
  128. package/dist/logging/index.d.ts +7 -14
  129. package/dist/logging/index.d.ts.map +1 -0
  130. package/dist/logging/index.js +17 -28
  131. package/dist/logging/index.js.map +1 -1
  132. package/dist/middleware/auth.middleware.d.ts +3 -0
  133. package/dist/middleware/auth.middleware.d.ts.map +1 -0
  134. package/dist/middleware/auth.middleware.js +18 -0
  135. package/dist/middleware/auth.middleware.js.map +1 -0
  136. package/dist/middleware/context.middleware.d.ts +7 -0
  137. package/dist/middleware/context.middleware.d.ts.map +1 -0
  138. package/dist/middleware/context.middleware.js +25 -0
  139. package/dist/middleware/context.middleware.js.map +1 -0
  140. package/dist/middleware/index.d.ts +4 -0
  141. package/dist/middleware/index.d.ts.map +1 -0
  142. package/dist/middleware/index.js +20 -0
  143. package/dist/middleware/index.js.map +1 -0
  144. package/dist/middleware/request-logger.middleware.d.ts +4 -0
  145. package/dist/middleware/request-logger.middleware.d.ts.map +1 -0
  146. package/dist/middleware/request-logger.middleware.js +18 -0
  147. package/dist/middleware/request-logger.middleware.js.map +1 -0
  148. package/package.json +52 -47
  149. package/LICENSE +0 -21
  150. package/README.md +0 -423
  151. package/dist/config/app.config.d.ts +0 -29
  152. package/dist/config/app.config.js +0 -55
  153. package/dist/config/app.config.js.map +0 -1
  154. package/dist/controllers/config.controller.d.ts +0 -16
  155. package/dist/controllers/config.controller.js +0 -66
  156. package/dist/controllers/config.controller.js.map +0 -1
  157. package/dist/controllers/events.controller.d.ts +0 -66
  158. package/dist/controllers/events.controller.js +0 -145
  159. package/dist/controllers/events.controller.js.map +0 -1
  160. package/dist/controllers/health.controller.d.ts +0 -20
  161. package/dist/controllers/health.controller.js +0 -92
  162. package/dist/controllers/health.controller.js.map +0 -1
  163. package/dist/controllers/user.controller.d.ts +0 -13
  164. package/dist/controllers/user.controller.js +0 -209
  165. package/dist/controllers/user.controller.js.map +0 -1
  166. package/dist/core/application.d.ts +0 -21
  167. package/dist/core/application.js +0 -90
  168. package/dist/core/application.js.map +0 -1
  169. package/dist/core/config.d.ts +0 -3
  170. package/dist/core/config.js +0 -78
  171. package/dist/core/config.js.map +0 -1
  172. package/dist/core/container.d.ts +0 -17
  173. package/dist/core/container.js +0 -92
  174. package/dist/core/container.js.map +0 -1
  175. package/dist/core/errors.d.ts +0 -18
  176. package/dist/core/errors.js +0 -74
  177. package/dist/core/errors.js.map +0 -1
  178. package/dist/core/middleware.d.ts +0 -8
  179. package/dist/core/middleware.js +0 -23
  180. package/dist/core/middleware.js.map +0 -1
  181. package/dist/core/openapi.d.ts +0 -80
  182. package/dist/core/openapi.js +0 -189
  183. package/dist/core/openapi.js.map +0 -1
  184. package/dist/core/utils.d.ts +0 -7
  185. package/dist/core/utils.js +0 -75
  186. package/dist/core/utils.js.map +0 -1
  187. package/dist/core/validation.d.ts +0 -15
  188. package/dist/core/validation.js +0 -161
  189. package/dist/core/validation.js.map +0 -1
  190. package/dist/events/core/event-bus.d.ts +0 -26
  191. package/dist/events/core/event-bus.js +0 -253
  192. package/dist/events/core/event-bus.js.map +0 -1
  193. package/dist/events/core/event-registry.d.ts +0 -31
  194. package/dist/events/core/event-registry.js +0 -170
  195. package/dist/events/core/event-registry.js.map +0 -1
  196. package/dist/events/decorators/event.decorators.d.ts +0 -11
  197. package/dist/events/decorators/event.decorators.js +0 -123
  198. package/dist/events/decorators/event.decorators.js.map +0 -1
  199. package/dist/events/examples/system.events.d.ts +0 -15
  200. package/dist/events/examples/system.events.js.map +0 -1
  201. package/dist/events/examples/user.events.d.ts +0 -68
  202. package/dist/events/examples/user.events.js +0 -73
  203. package/dist/events/examples/user.events.js.map +0 -1
  204. package/dist/events/examples/user.handlers.d.ts +0 -20
  205. package/dist/events/examples/user.handlers.js +0 -157
  206. package/dist/events/examples/user.handlers.js.map +0 -1
  207. package/dist/events/middleware/logging.middleware.d.ts +0 -7
  208. package/dist/events/middleware/logging.middleware.js +0 -44
  209. package/dist/events/middleware/logging.middleware.js.map +0 -1
  210. package/dist/events/middleware/metrics.middleware.d.ts +0 -11
  211. package/dist/events/middleware/metrics.middleware.js +0 -87
  212. package/dist/events/middleware/metrics.middleware.js.map +0 -1
  213. package/dist/events/middleware/validation.middleware.d.ts +0 -8
  214. package/dist/events/middleware/validation.middleware.js +0 -63
  215. package/dist/events/middleware/validation.middleware.js.map +0 -1
  216. package/dist/events/store/memory-event-store.d.ts +0 -21
  217. package/dist/events/store/memory-event-store.js +0 -81
  218. package/dist/events/store/memory-event-store.js.map +0 -1
  219. package/dist/events/types/event.types.d.ts +0 -57
  220. package/dist/events/types/event.types.js.map +0 -1
  221. package/dist/examples/basic-api.d.ts +0 -1
  222. package/dist/examples/basic-api.js +0 -120
  223. package/dist/examples/basic-api.js.map +0 -1
  224. package/dist/logging/core/log-context.service.d.ts +0 -11
  225. package/dist/logging/core/log-context.service.js +0 -40
  226. package/dist/logging/core/log-context.service.js.map +0 -1
  227. package/dist/logging/core/startup-logger.service.js.map +0 -1
  228. package/dist/logging/decorators/log.decorator.d.ts +0 -11
  229. package/dist/logging/decorators/log.decorator.js +0 -80
  230. package/dist/logging/decorators/log.decorator.js.map +0 -1
  231. package/dist/logging/middleware/context.middleware.d.ts +0 -2
  232. package/dist/logging/middleware/context.middleware.js +0 -29
  233. package/dist/logging/middleware/context.middleware.js.map +0 -1
  234. package/dist/logging/middleware/request-logging.middleware.d.ts +0 -3
  235. package/dist/logging/middleware/request-logging.middleware.js +0 -78
  236. package/dist/logging/middleware/request-logging.middleware.js.map +0 -1
  237. package/dist/logging/types/logging.types.d.ts +0 -79
  238. package/dist/logging/types/logging.types.js +0 -3
  239. package/dist/logging/types/logging.types.js.map +0 -1
  240. package/dist/middlewares/auth.middleware.d.ts +0 -2
  241. package/dist/middlewares/auth.middleware.js +0 -20
  242. package/dist/middlewares/auth.middleware.js.map +0 -1
  243. package/dist/middlewares/cors.middleware.d.ts +0 -2
  244. package/dist/middlewares/cors.middleware.js +0 -16
  245. package/dist/middlewares/cors.middleware.js.map +0 -1
  246. package/dist/middlewares/swagger.middleware.d.ts +0 -6
  247. package/dist/middlewares/swagger.middleware.js +0 -84
  248. package/dist/middlewares/swagger.middleware.js.map +0 -1
  249. package/dist/repositories/user.repository.d.ts +0 -16
  250. package/dist/repositories/user.repository.js +0 -110
  251. package/dist/repositories/user.repository.js.map +0 -1
  252. package/dist/schemas/user.schemas.d.ts +0 -214
  253. package/dist/schemas/user.schemas.js +0 -71
  254. package/dist/schemas/user.schemas.js.map +0 -1
  255. package/dist/services/config-demo.service.d.ts +0 -10
  256. package/dist/services/config-demo.service.js +0 -88
  257. package/dist/services/config-demo.service.js.map +0 -1
  258. package/dist/services/user.service.d.ts +0 -21
  259. package/dist/services/user.service.js +0 -201
  260. package/dist/services/user.service.js.map +0 -1
  261. /package/dist/events/{types/event.types.js → event.types.js} +0 -0
package/README.md DELETED
@@ -1,423 +0,0 @@
1
- # BootifyJS
2
-
3
- A Spring Boot inspired Node.js framework with TypeScript, Dependency Injection, and Validation.
4
-
5
- ## Features
6
-
7
- - **Dependency Injection**: Automatic constructor injection with `@Injectable`, `@Service`, and `@Repository` decorators
8
- - **REST API**: Easy controller definition with `@Controller`, `@Get`, `@Post`, etc.
9
- - **Validation**: Request validation with Zod schemas
10
- - **Configuration**: Environment-based configuration with automatic mapping
11
- - **OpenAPI**: Automatic OpenAPI documentation generation
12
- - **Logging**: Comprehensive logging system with context tracking
13
- - **Event System**: Type-safe event system with middleware support
14
-
15
- ## Installation
16
-
17
- ```bash
18
- npm install bootifyjs
19
- ```
20
-
21
- ## Quick Start
22
-
23
- ```typescript
24
- import { createBootifyApp, Controller, Get, Service } from 'bootifyjs';
25
-
26
- @Service()
27
- class GreetingService {
28
- getGreeting(name: string) {
29
- return `Hello, ${name}!`;
30
- }
31
- }
32
-
33
- @Controller('/api')
34
- class GreetingController {
35
- constructor(private greetingService: GreetingService) {}
36
-
37
- @Get('/hello')
38
- sayHello() {
39
- return { message: this.greetingService.getGreeting('World') };
40
- }
41
- }
42
-
43
- async function main() {
44
- const { start } = await createBootifyApp({
45
- port: 3000,
46
- controllers: [GreetingController],
47
- enableSwagger: true
48
- });
49
-
50
- await start();
51
- console.log('Server running at http://localhost:3000');
52
- }
53
-
54
- main().catch(console.error);
55
- ```
56
-
57
- ## Core Concepts
58
-
59
- ### Controllers
60
-
61
- Controllers handle HTTP requests and define your API endpoints.
62
-
63
- ```typescript
64
- import { Controller, Get, Post, Put, Delete, Param, Body, Query } from 'bootifyjs';
65
-
66
- @Controller('/users')
67
- export class UserController {
68
- constructor(private userService: UserService) {}
69
-
70
- @Get('/')
71
- getAllUsers(@Query('limit') limit?: string) {
72
- return this.userService.getAllUsers(limit ? parseInt(limit) : undefined);
73
- }
74
-
75
- @Get('/:id')
76
- getUserById(@Param('id') id: string) {
77
- return this.userService.getUserById(id);
78
- }
79
-
80
- @Post('/')
81
- createUser(@Body() userData: CreateUserDto) {
82
- return this.userService.createUser(userData);
83
- }
84
-
85
- @Put('/:id')
86
- updateUser(@Param('id') id: string, @Body() userData: UpdateUserDto) {
87
- return this.userService.updateUser(id, userData);
88
- }
89
-
90
- @Delete('/:id')
91
- deleteUser(@Param('id') id: string) {
92
- return this.userService.deleteUser(id);
93
- }
94
- }
95
- ```
96
-
97
- ### Services
98
-
99
- Services contain your business logic and can be injected into controllers or other services.
100
-
101
- ```typescript
102
- import { Service } from 'bootifyjs';
103
-
104
- @Service()
105
- export class UserService {
106
- constructor(private userRepository: UserRepository) {}
107
-
108
- getAllUsers(limit?: number) {
109
- return this.userRepository.findAll(limit);
110
- }
111
-
112
- getUserById(id: string) {
113
- return this.userRepository.findById(id);
114
- }
115
-
116
- // More methods...
117
- }
118
- ```
119
-
120
- ### Repositories
121
-
122
- Repositories handle data access and can be injected into services.
123
-
124
- ```typescript
125
- import { Repository } from 'bootifyjs';
126
-
127
- @Repository()
128
- export class UserRepository {
129
- private users = []; // In a real app, this would be a database connection
130
-
131
- findAll(limit?: number) {
132
- if (limit) {
133
- return this.users.slice(0, limit);
134
- }
135
- return this.users;
136
- }
137
-
138
- findById(id: string) {
139
- return this.users.find(user => user.id === id);
140
- }
141
-
142
- // More methods...
143
- }
144
- ```
145
-
146
- ### Validation
147
-
148
- Use Zod schemas to validate request data.
149
-
150
- ```typescript
151
- import { z } from 'zod';
152
- import { Controller, Post, Body, ValidateBody } from 'bootifyjs';
153
-
154
- const createUserSchema = z.object({
155
- email: z.string().email(),
156
- name: z.string().min(2).max(100),
157
- age: z.number().min(18).optional()
158
- });
159
-
160
- @Controller('/users')
161
- export class UserController {
162
- @Post('/')
163
- @ValidateBody(createUserSchema)
164
- createUser(@Body() userData: z.infer<typeof createUserSchema>) {
165
- // userData is now validated and typed
166
- return this.userService.createUser(userData);
167
- }
168
- }
169
- ```
170
-
171
- ### Configuration
172
-
173
- Define your configuration structure and automatically map environment variables.
174
-
175
- ```typescript
176
- import { Config, getConfigInstance } from 'bootifyjs';
177
-
178
- @Config('APP')
179
- export class AppConfig {
180
- SERVICE_NAME: string = 'my-service';
181
-
182
- server: {
183
- port: number;
184
- host: string;
185
- } = {
186
- port: 3000,
187
- host: 'localhost'
188
- };
189
-
190
- database: {
191
- url: string;
192
- poolSize: number;
193
- } = {
194
- url: 'postgres://localhost:5432/mydb',
195
- poolSize: 10
196
- };
197
- }
198
-
199
- // Environment variables like APP_SERVER_PORT=8080 will be automatically mapped
200
- const config = getConfigInstance(AppConfig);
201
- console.log(config.server.port); // 8080
202
- ```
203
-
204
- ### Event System
205
-
206
- Create a type-safe event system for decoupled communication.
207
-
208
- ```typescript
209
- import { Event, EventEmitter, EventListener, EventHandler } from 'bootifyjs';
210
-
211
- // Define an event
212
- @Event('user.created')
213
- class UserCreatedEvent {
214
- id: string;
215
- email: string;
216
- timestamp: Date = new Date();
217
- }
218
-
219
- // Emit events from services
220
- @Service()
221
- @EventEmitter()
222
- class UserService {
223
- private eventBus; // Injected by @EventEmitter
224
-
225
- async createUser(userData) {
226
- const user = await this.userRepository.create(userData);
227
-
228
- // Emit event
229
- await this.eventBus.emit('user.created', {
230
- id: user.id,
231
- email: user.email
232
- });
233
-
234
- return user;
235
- }
236
- }
237
-
238
- // Handle events
239
- @EventListener()
240
- class UserEventHandlers {
241
- @EventHandler('user.created')
242
- async onUserCreated(event: UserCreatedEvent) {
243
- console.log(`User created: ${event.email}`);
244
- // Send welcome email, update analytics, etc.
245
- }
246
- }
247
- ```
248
-
249
- ### Logging
250
-
251
- Comprehensive logging system with context tracking.
252
-
253
- ```typescript
254
- import { Logger, Log } from 'bootifyjs';
255
-
256
- @Service()
257
- @Logger('UserService')
258
- export class UserService {
259
- private logger; // Injected by @Logger
260
-
261
- @Log({ logArgs: true, logDuration: true })
262
- async createUser(userData) {
263
- this.logger.info('Creating new user', { email: userData.email });
264
-
265
- // Business logic...
266
-
267
- this.logger.info('User created successfully');
268
- return user;
269
- }
270
- }
271
- ```
272
-
273
- ## Bootstrapping Your Application
274
-
275
- There are two ways to bootstrap your application:
276
-
277
- ### 1. Using createBootifyApp (Recommended)
278
-
279
- ```typescript
280
- import { createBootifyApp } from 'bootifyjs';
281
- import { UserController } from './controllers/user.controller';
282
-
283
- async function main() {
284
- const { app, start, stop } = await createBootifyApp({
285
- port: 3000,
286
- controllers: [UserController],
287
- enableSwagger: true,
288
- enableCors: true
289
- });
290
-
291
- await start();
292
- console.log('Server running at http://localhost:3000');
293
- console.log('API docs available at http://localhost:3000/api-docs');
294
- }
295
-
296
- main().catch(console.error);
297
- ```
298
-
299
- ### 2. Manual Bootstrap
300
-
301
- ```typescript
302
- import {
303
- Application,
304
- configureLogging,
305
- configureEventSystem,
306
- corsMiddleware,
307
- contextMiddleware,
308
- createRequestLoggingMiddleware,
309
- swaggerMiddleware,
310
- OpenAPIGenerator
311
- } from 'bootifyjs';
312
- import { UserController } from './controllers/user.controller';
313
-
314
- async function bootstrap() {
315
- // Initialize logging
316
- const { logger, startupLogger } = configureLogging();
317
-
318
- // Initialize event system
319
- const eventBus = configureEventSystem();
320
-
321
- // Generate OpenAPI documentation
322
- const openApiGenerator = new OpenAPIGenerator({
323
- title: 'My API',
324
- version: '1.0.0',
325
- description: 'My API description'
326
- });
327
-
328
- const controllers = [UserController];
329
- openApiGenerator.addControllers(controllers);
330
- const openApiSpec = openApiGenerator.getSpec();
331
-
332
- // Create application
333
- const app = new Application({
334
- controllers,
335
- middlewares: [
336
- contextMiddleware,
337
- corsMiddleware,
338
- createRequestLoggingMiddleware(),
339
- swaggerMiddleware(openApiSpec)
340
- ],
341
- port: 3000,
342
- hostname: 'localhost'
343
- });
344
-
345
- await app.start();
346
- logger.info('Server started');
347
- }
348
-
349
- bootstrap().catch(console.error);
350
- ```
351
-
352
- ## Middleware
353
-
354
- Create custom middleware to handle cross-cutting concerns.
355
-
356
- ```typescript
357
- import { Middleware } from 'bootifyjs';
358
-
359
- export const loggingMiddleware: Middleware = async (req, res, next) => {
360
- const start = Date.now();
361
- console.log(`${req.method} ${req.url} - Request started`);
362
-
363
- await next();
364
-
365
- const duration = Date.now() - start;
366
- console.log(`${req.method} ${req.url} - Request completed in ${duration}ms`);
367
- };
368
- ```
369
-
370
- ## OpenAPI Documentation
371
-
372
- BootifyJS automatically generates OpenAPI documentation for your API.
373
-
374
- ```typescript
375
- import { Controller, Get, ApiTags, ApiOperation, ApiResponse } from 'bootifyjs';
376
-
377
- @Controller('/health')
378
- @ApiTags('Health')
379
- export class HealthController {
380
- @Get('/')
381
- @ApiOperation({
382
- summary: 'Health check',
383
- description: 'Check if the API is running'
384
- })
385
- @ApiResponse(200, {
386
- description: 'API is healthy',
387
- schema: healthResponseSchema
388
- })
389
- health() {
390
- return { status: 'OK', timestamp: new Date().toISOString() };
391
- }
392
- }
393
- ```
394
-
395
- ## Error Handling
396
-
397
- BootifyJS provides built-in error classes for common HTTP errors.
398
-
399
- ```typescript
400
- import { NotFoundError, ValidationError } from 'bootifyjs';
401
-
402
- @Service()
403
- export class UserService {
404
- getUserById(id: string) {
405
- const user = this.userRepository.findById(id);
406
- if (!user) {
407
- throw new NotFoundError(`User with id ${id} not found`);
408
- }
409
- return user;
410
- }
411
-
412
- createUser(userData) {
413
- if (!userData.email) {
414
- throw new ValidationError('Email is required');
415
- }
416
- // ...
417
- }
418
- }
419
- ```
420
-
421
- ## License
422
-
423
- MIT
@@ -1,29 +0,0 @@
1
- export declare class AppConfig {
2
- SERVICE_NAME: string;
3
- server: {
4
- port: number;
5
- host: string;
6
- name?: string;
7
- };
8
- database: {
9
- host: string;
10
- port: number;
11
- name: string;
12
- username: string;
13
- password: string;
14
- };
15
- logging: {
16
- level: string;
17
- enabled: boolean;
18
- };
19
- api: {
20
- version: string;
21
- };
22
- cors: {
23
- enabled: boolean;
24
- };
25
- jwt: {
26
- secret: string;
27
- expiresIn: number;
28
- };
29
- }
@@ -1,55 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.AppConfig = void 0;
10
- const config_1 = require("../core/config");
11
- let AppConfig = class AppConfig {
12
- constructor() {
13
- // Service configuration
14
- this.SERVICE_NAME = 'bootifyjs-app';
15
- // Server configuration - will be populated from BOOTIFY_SERVER_* env vars
16
- this.server = {
17
- port: 3000,
18
- host: 'localhost'
19
- };
20
- // Database configuration - will be populated from BOOTIFY_DATABASE_* env vars
21
- this.database = {
22
- host: 'localhost',
23
- port: 5432,
24
- name: 'bootifyjs',
25
- username: 'admin',
26
- password: 'password'
27
- };
28
- // Logging configuration - will be populated from BOOTIFY_LOGGING_* env vars
29
- this.logging = {
30
- level: 'info',
31
- enabled: true
32
- };
33
- // Any other configuration can be added here
34
- // The @Config decorator will automatically map environment variables
35
- // based on the property structure
36
- // API Configuration - will be populated from BOOTIFY_API_* env vars
37
- this.api = {
38
- version: 'v1'
39
- };
40
- // CORS Configuration - will be populated from BOOTIFY_CORS_* env vars
41
- this.cors = {
42
- enabled: true
43
- };
44
- // JWT Configuration - will be populated from BOOTIFY_JWT_* env vars
45
- this.jwt = {
46
- secret: 'default-secret',
47
- expiresIn: 3600
48
- };
49
- }
50
- };
51
- exports.AppConfig = AppConfig;
52
- exports.AppConfig = AppConfig = __decorate([
53
- (0, config_1.Config)('BOOTIFY')
54
- ], AppConfig);
55
- //# sourceMappingURL=app.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.config.js","sourceRoot":"","sources":["../../src/config/app.config.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AAGjC,IAAM,SAAS,GAAf,MAAM,SAAS;IAAf;QACL,wBAAwB;QACxB,iBAAY,GAAW,eAAe,CAAC;QAEvC,0EAA0E;QAC1E,WAAM,GAIF;YACF,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,WAAW;SAClB,CAAC;QAEF,8EAA8E;QAC9E,aAAQ,GAMJ;YACF,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE,UAAU;SACrB,CAAC;QAEF,4EAA4E;QAC5E,YAAO,GAGH;YACF,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,4CAA4C;QAC5C,qEAAqE;QACrE,kCAAkC;QAElC,oEAAoE;QACpE,QAAG,GAEC;YACF,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,sEAAsE;QACtE,SAAI,GAEA;YACF,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,oEAAoE;QACpE,QAAG,GAGC;YACF,MAAM,EAAE,gBAAgB;YACxB,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;CAAA,CAAA;AAhEY,8BAAS;oBAAT,SAAS;IADrB,IAAA,eAAM,EAAC,SAAS,CAAC;GACL,SAAS,CAgErB"}
@@ -1,16 +0,0 @@
1
- import { AppConfig } from '../config/app.config';
2
- import { ConfigDemoService } from '../services/config-demo.service';
3
- export declare class ConfigController {
4
- private config;
5
- private configDemoService;
6
- constructor(config: AppConfig, configDemoService: ConfigDemoService);
7
- getConfigInfo(): AppConfig;
8
- getServerUrl(): {
9
- url: string;
10
- message: string;
11
- };
12
- runConfigDemo(): {
13
- message: string;
14
- timestamp: string;
15
- };
16
- }
@@ -1,66 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ConfigController = void 0;
16
- const decorators_1 = require("../core/decorators");
17
- const app_config_1 = require("../config/app.config");
18
- const config_demo_service_1 = require("../services/config-demo.service");
19
- let ConfigController = class ConfigController {
20
- constructor(config, configDemoService) {
21
- this.config = config;
22
- this.configDemoService = configDemoService;
23
- }
24
- getConfigInfo() {
25
- return this.config;
26
- }
27
- getServerUrl() {
28
- return {
29
- url: this.configDemoService.getServerUrl(),
30
- message: 'Current server URL based on configuration'
31
- };
32
- }
33
- runConfigDemo() {
34
- this.configDemoService.demonstrateConfig();
35
- return {
36
- message: 'Configuration demo completed. Check the logs for details.',
37
- timestamp: new Date().toISOString()
38
- };
39
- }
40
- };
41
- exports.ConfigController = ConfigController;
42
- __decorate([
43
- (0, decorators_1.Get)('/info'),
44
- __metadata("design:type", Function),
45
- __metadata("design:paramtypes", []),
46
- __metadata("design:returntype", void 0)
47
- ], ConfigController.prototype, "getConfigInfo", null);
48
- __decorate([
49
- (0, decorators_1.Get)('/server-url'),
50
- __metadata("design:type", Function),
51
- __metadata("design:paramtypes", []),
52
- __metadata("design:returntype", void 0)
53
- ], ConfigController.prototype, "getServerUrl", null);
54
- __decorate([
55
- (0, decorators_1.Get)('/demo'),
56
- __metadata("design:type", Function),
57
- __metadata("design:paramtypes", []),
58
- __metadata("design:returntype", void 0)
59
- ], ConfigController.prototype, "runConfigDemo", null);
60
- exports.ConfigController = ConfigController = __decorate([
61
- (0, decorators_1.Controller)('/config'),
62
- __param(0, (0, decorators_1.InjectConfig)(app_config_1.AppConfig)),
63
- __metadata("design:paramtypes", [app_config_1.AppConfig,
64
- config_demo_service_1.ConfigDemoService])
65
- ], ConfigController);
66
- //# sourceMappingURL=config.controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.controller.js","sourceRoot":"","sources":["../../src/controllers/config.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mDAAmE;AACnE,qDAAiD;AACjD,yEAAoE;AAG7D,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YACmC,MAAiB,EAC1C,iBAAoC;QADX,WAAM,GAAN,MAAM,CAAW;QAC1C,sBAAiB,GAAjB,iBAAiB,CAAmB;IAC3C,CAAC;IAGJ,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAGD,YAAY;QACV,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;YAC1C,OAAO,EAAE,2CAA2C;SACrD,CAAC;IACJ,CAAC;IAGD,aAAa;QACX,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE,2DAA2D;YACpE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAA;AA3BY,4CAAgB;AAO3B;IADC,IAAA,gBAAG,EAAC,OAAO,CAAC;;;;qDAGZ;AAGD;IADC,IAAA,gBAAG,EAAC,aAAa,CAAC;;;;oDAMlB;AAGD;IADC,IAAA,gBAAG,EAAC,OAAO,CAAC;;;;qDAOZ;2BA1BU,gBAAgB;IAD5B,IAAA,uBAAU,EAAC,SAAS,CAAC;IAGjB,WAAA,IAAA,yBAAY,EAAC,sBAAS,CAAC,CAAA;qCAAiB,sBAAS;QACvB,uCAAiB;GAHnC,gBAAgB,CA2B5B"}
@@ -1,66 +0,0 @@
1
- import { BaseEvent } from '../events/types/event.types';
2
- export declare class EventsController {
3
- private eventBus;
4
- private registry;
5
- private eventStore;
6
- constructor();
7
- getEventMetrics(): {
8
- busMetrics: import("../events").EventMetrics;
9
- registryStats: {
10
- totalEventTypes: number;
11
- totalSubscriptions: number;
12
- subscriptionsByType: Record<string, number>;
13
- activeSubscriptions: number;
14
- };
15
- storeStats: {
16
- totalEvents: number;
17
- eventsByType: Record<string, number>;
18
- aggregateCount: number;
19
- oldestEvent?: Date;
20
- newestEvent?: Date;
21
- };
22
- };
23
- getEventTypes(): {
24
- registeredTypes: string[];
25
- totalTypes: number;
26
- };
27
- getSubscriptions(): Record<string, any[]>;
28
- getEventSystemHealth(): {
29
- healthy: boolean;
30
- metrics: import("../events").EventMetrics;
31
- timestamp: string;
32
- };
33
- emitEvent(eventData: {
34
- type: string;
35
- data: any;
36
- }): Promise<{
37
- success: boolean;
38
- message: string;
39
- timestamp: string;
40
- }>;
41
- getEventHistory(eventType?: string, limit?: string): Promise<{
42
- events: BaseEvent[];
43
- total: number;
44
- filtered: boolean;
45
- }>;
46
- getEventStats(): {
47
- system: {
48
- healthy: boolean;
49
- uptime: number;
50
- };
51
- registry: {
52
- totalEventTypes: number;
53
- totalSubscriptions: number;
54
- subscriptionsByType: Record<string, number>;
55
- activeSubscriptions: number;
56
- };
57
- bus: import("../events").EventMetrics;
58
- store: {
59
- totalEvents: number;
60
- eventsByType: Record<string, number>;
61
- aggregateCount: number;
62
- oldestEvent?: Date;
63
- newestEvent?: Date;
64
- };
65
- };
66
- }