bootifyjs 1.4.0 → 2.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.
- package/README.md +149 -24
- package/dist/BootifyApp.d.ts +66 -0
- package/dist/BootifyApp.d.ts.map +1 -0
- package/dist/BootifyApp.js +196 -0
- package/dist/BootifyApp.js.map +1 -0
- package/dist/api.d.ts +10 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +54 -37
- package/dist/api.js.map +1 -1
- package/dist/core/decorators.d.ts +27 -1
- package/dist/core/decorators.d.ts.map +1 -1
- package/dist/core/decorators.js +26 -3
- package/dist/core/decorators.js.map +1 -1
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +17 -2
- package/dist/core/router.js.map +1 -1
- package/dist/examples/adapters/pino-logger.adapter.d.ts +18 -0
- package/dist/examples/adapters/pino-logger.adapter.d.ts.map +1 -0
- package/dist/examples/adapters/pino-logger.adapter.js +81 -0
- package/dist/examples/adapters/pino-logger.adapter.js.map +1 -0
- package/dist/examples/controllers/todo.controller.d.ts.map +1 -1
- package/dist/examples/controllers/todo.controller.js +17 -4
- package/dist/examples/controllers/todo.controller.js.map +1 -1
- package/dist/examples/enhanced-logger-example.d.ts +2 -0
- package/dist/examples/enhanced-logger-example.d.ts.map +1 -0
- package/dist/examples/enhanced-logger-example.js +143 -0
- package/dist/examples/enhanced-logger-example.js.map +1 -0
- package/dist/examples/index.d.ts +1 -0
- package/dist/examples/index.d.ts.map +1 -1
- package/dist/examples/index.js +183 -79
- package/dist/examples/index.js.map +1 -1
- package/dist/examples/scheduled-jobs-example.d.ts +10 -0
- package/dist/examples/scheduled-jobs-example.d.ts.map +1 -0
- package/dist/examples/scheduled-jobs-example.js +134 -0
- package/dist/examples/scheduled-jobs-example.js.map +1 -0
- package/dist/examples/services/scheduled-tasks.service.d.ts +17 -0
- package/dist/examples/services/scheduled-tasks.service.d.ts.map +1 -0
- package/dist/examples/services/scheduled-tasks.service.js +88 -0
- package/dist/examples/services/scheduled-tasks.service.js.map +1 -0
- package/dist/examples/services/todo.service.d.ts.map +1 -1
- package/dist/examples/services/todo.service.js.map +1 -1
- package/dist/examples/simple-scheduler-test.d.ts +6 -0
- package/dist/examples/simple-scheduler-test.d.ts.map +1 -0
- package/dist/examples/simple-scheduler-test.js +57 -0
- package/dist/examples/simple-scheduler-test.js.map +1 -0
- package/dist/examples/streaming-logger-example.d.ts +2 -0
- package/dist/examples/streaming-logger-example.d.ts.map +1 -0
- package/dist/examples/streaming-logger-example.js +124 -0
- package/dist/examples/streaming-logger-example.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/logging/core/base-logger.d.ts +44 -0
- package/dist/logging/core/base-logger.d.ts.map +1 -0
- package/dist/logging/core/base-logger.js +147 -0
- package/dist/logging/core/base-logger.js.map +1 -0
- package/dist/logging/core/context-providers/index.d.ts +2 -0
- package/dist/logging/core/context-providers/index.d.ts.map +1 -0
- package/dist/logging/core/context-providers/index.js +18 -0
- package/dist/logging/core/context-providers/index.js.map +1 -0
- package/dist/logging/core/context-providers/request-context.provider.d.ts +5 -0
- package/dist/logging/core/context-providers/request-context.provider.d.ts.map +1 -0
- package/dist/logging/core/context-providers/request-context.provider.js +19 -0
- package/dist/logging/core/context-providers/request-context.provider.js.map +1 -0
- package/dist/logging/core/decorators.d.ts +12 -2
- package/dist/logging/core/decorators.d.ts.map +1 -1
- package/dist/logging/core/decorators.js +50 -15
- package/dist/logging/core/decorators.js.map +1 -1
- package/dist/logging/core/enhanced-startup-logger.d.ts +48 -0
- package/dist/logging/core/enhanced-startup-logger.d.ts.map +1 -0
- package/dist/logging/core/enhanced-startup-logger.js +537 -0
- package/dist/logging/core/enhanced-startup-logger.js.map +1 -0
- package/dist/logging/core/interfaces.d.ts +75 -0
- package/dist/logging/core/interfaces.d.ts.map +1 -0
- package/dist/logging/core/interfaces.js +9 -0
- package/dist/logging/core/interfaces.js.map +1 -0
- package/dist/logging/core/logger-builder.d.ts +101 -0
- package/dist/logging/core/logger-builder.d.ts.map +1 -0
- package/dist/logging/core/logger-builder.js +205 -0
- package/dist/logging/core/logger-builder.js.map +1 -0
- package/dist/logging/core/logger.d.ts +20 -0
- package/dist/logging/core/logger.d.ts.map +1 -1
- package/dist/logging/core/logger.js +21 -1
- package/dist/logging/core/logger.js.map +1 -1
- package/dist/logging/core/logger.provider.d.ts +3 -0
- package/dist/logging/core/logger.provider.d.ts.map +1 -1
- package/dist/logging/core/logger.provider.js +16 -1
- package/dist/logging/core/logger.provider.js.map +1 -1
- package/dist/logging/core/startup.logger.d.ts +1 -0
- package/dist/logging/core/startup.logger.d.ts.map +1 -1
- package/dist/logging/core/startup.logger.js +28 -3
- package/dist/logging/core/startup.logger.js.map +1 -1
- package/dist/logging/core/streaming-startup-logger.d.ts +21 -0
- package/dist/logging/core/streaming-startup-logger.d.ts.map +1 -0
- package/dist/logging/core/streaming-startup-logger.js +209 -0
- package/dist/logging/core/streaming-startup-logger.js.map +1 -0
- package/dist/logging/core/transports/console.transport.d.ts +19 -0
- package/dist/logging/core/transports/console.transport.d.ts.map +1 -0
- package/dist/logging/core/transports/console.transport.js +67 -0
- package/dist/logging/core/transports/console.transport.js.map +1 -0
- package/dist/logging/core/transports/index.d.ts +2 -0
- package/dist/logging/core/transports/index.d.ts.map +1 -0
- package/dist/logging/core/transports/index.js +18 -0
- package/dist/logging/core/transports/index.js.map +1 -0
- package/dist/logging/index.d.ts +79 -2
- package/dist/logging/index.d.ts.map +1 -1
- package/dist/logging/index.js +123 -16
- package/dist/logging/index.js.map +1 -1
- package/dist/middleware/auth.middleware.d.ts +2 -2
- package/dist/middleware/auth.middleware.d.ts.map +1 -1
- package/dist/middleware/auth.middleware.js +12 -23
- package/dist/middleware/auth.middleware.js.map +1 -1
- package/dist/middleware/index.d.ts +1 -2
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +0 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/scheduling/index.d.ts +25 -0
- package/dist/scheduling/index.d.ts.map +1 -0
- package/dist/scheduling/index.js +41 -0
- package/dist/scheduling/index.js.map +1 -0
- package/dist/scheduling/scheduled.decorator.d.ts +25 -0
- package/dist/scheduling/scheduled.decorator.d.ts.map +1 -0
- package/dist/scheduling/scheduled.decorator.js +52 -0
- package/dist/scheduling/scheduled.decorator.js.map +1 -0
- package/dist/scheduling/scheduler.service.d.ts +40 -0
- package/dist/scheduling/scheduler.service.d.ts.map +1 -0
- package/dist/scheduling/scheduler.service.js +359 -0
- package/dist/scheduling/scheduler.service.js.map +1 -0
- package/dist/scheduling/scheduler.types.d.ts +47 -0
- package/dist/scheduling/scheduler.types.d.ts.map +1 -0
- package/dist/scheduling/scheduler.types.js +6 -0
- package/dist/scheduling/scheduler.types.js.map +1 -0
- package/package.json +16 -1
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@ Our goal is to make building complex, scalable, and maintainable backend applica
|
|
|
11
11
|
- **Event-Driven Architecture:** A built-in, asynchronous event bus with automatic retries and a dead-letter queue, plus high-performance buffered event processing with worker threads, priority queues, and advanced monitoring.
|
|
12
12
|
- **Pluggable Caching:** A decorator-driven caching system that works out-of-the-box with an in-memory store and can be seamlessly extended to use Redis or other backends.
|
|
13
13
|
- **Type-Safe Configuration:** A schema-driven configuration system that validates your environment at startup, catching errors early and providing fully typed config objects.
|
|
14
|
+
- **Flexible Logging:** A builder-pattern logging system with no external dependencies - bring your own logger (Pino, Winston, etc.) or use the built-in BaseLogger.
|
|
14
15
|
- **Built on Fastify:** Leverage the incredible performance and rich plugin ecosystem of one of the fastest web frameworks for Node.js.
|
|
15
16
|
|
|
16
17
|
## Getting Started
|
|
@@ -19,7 +20,7 @@ Our goal is to make building complex, scalable, and maintainable backend applica
|
|
|
19
20
|
|
|
20
21
|
To create a new BootifyJS project, you can use our upcoming CLI or set it up manually.
|
|
21
22
|
|
|
22
|
-
```
|
|
23
|
+
```bash
|
|
23
24
|
# (Coming Soon)
|
|
24
25
|
# npx bootifyjs-cli new my-project
|
|
25
26
|
|
|
@@ -29,33 +30,29 @@ npm install bootifyjs fastify reflect-metadata
|
|
|
29
30
|
|
|
30
31
|
### Your First Application
|
|
31
32
|
|
|
32
|
-
Here
|
|
33
|
+
Here's a simple "Hello World" application to show you how easy it is to get started.
|
|
33
34
|
|
|
34
35
|
**1. Create your main server file:**
|
|
35
36
|
|
|
36
|
-
```
|
|
37
|
+
```typescript
|
|
37
38
|
// src/server.ts
|
|
38
|
-
import
|
|
39
|
-
import {
|
|
39
|
+
import "reflect-metadata";
|
|
40
|
+
import { createBootify, Controller, Get } from "bootifyjs";
|
|
40
41
|
|
|
41
|
-
@Controller(
|
|
42
|
+
@Controller("/hello")
|
|
42
43
|
export class HelloController {
|
|
43
|
-
@Get(
|
|
44
|
+
@Get("/")
|
|
44
45
|
sayHello() {
|
|
45
|
-
return { message:
|
|
46
|
+
return { message: "Hello from BootifyJS!" };
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
async function main() {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
port: 3000,
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
await start();
|
|
51
|
+
await createBootify()
|
|
52
|
+
.setServiceName("my-app")
|
|
53
|
+
.setPort(3000)
|
|
54
|
+
.useControllers([HelloController])
|
|
55
|
+
.start();
|
|
59
56
|
}
|
|
60
57
|
|
|
61
58
|
main();
|
|
@@ -63,12 +60,139 @@ main();
|
|
|
63
60
|
|
|
64
61
|
**2. Run your application:**
|
|
65
62
|
|
|
66
|
-
```
|
|
63
|
+
```bash
|
|
67
64
|
npx ts-node src/server.ts
|
|
68
65
|
```
|
|
69
66
|
|
|
70
67
|
You can now visit `http://localhost:3000/hello` in your browser or with `curl` to see your application running!
|
|
71
68
|
|
|
69
|
+
### Builder Pattern API
|
|
70
|
+
|
|
71
|
+
BootifyJS uses a fluent builder pattern for configuration:
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import { createBootify } from "bootifyjs";
|
|
75
|
+
import { z } from "zod";
|
|
76
|
+
|
|
77
|
+
const configSchema = z.object({
|
|
78
|
+
DATABASE_URL: z.string(),
|
|
79
|
+
REDIS_HOST: z.string().default("localhost"),
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
async function main() {
|
|
83
|
+
const { app, start, logger } = await createBootify()
|
|
84
|
+
.setServiceName("my-api")
|
|
85
|
+
.setPort(3000)
|
|
86
|
+
.setHostname("0.0.0.0")
|
|
87
|
+
.useConfig(configSchema)
|
|
88
|
+
.useControllers([UserController, ProductController])
|
|
89
|
+
.useMiddleware(authMiddleware)
|
|
90
|
+
.useErrorHandler((error, request, reply) => {
|
|
91
|
+
logger.error("Request failed", error);
|
|
92
|
+
reply.status(500).send({ error: "Internal Server Error" });
|
|
93
|
+
})
|
|
94
|
+
.useLogger((builder) =>
|
|
95
|
+
builder
|
|
96
|
+
.setLevel("debug")
|
|
97
|
+
.configureConsole({ colorize: true, prettyPrint: true })
|
|
98
|
+
)
|
|
99
|
+
.beforeStart(async (app) => {
|
|
100
|
+
// Run migrations, connect to databases, etc.
|
|
101
|
+
})
|
|
102
|
+
.afterStart(async (app) => {
|
|
103
|
+
// Post-startup tasks
|
|
104
|
+
})
|
|
105
|
+
.build();
|
|
106
|
+
|
|
107
|
+
await start();
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Available Builder Methods
|
|
112
|
+
|
|
113
|
+
| Method | Description |
|
|
114
|
+
| ------------------------- | ---------------------------------------------------- |
|
|
115
|
+
| `setServiceName(name)` | Set the application name (used in logs) |
|
|
116
|
+
| `setPort(port)` | Set the server port |
|
|
117
|
+
| `setHostname(host)` | Set the server hostname |
|
|
118
|
+
| `setFastifyOptions(opts)` | Pass custom Fastify options |
|
|
119
|
+
| `useConfig(schema)` | Initialize type-safe config with Zod schema |
|
|
120
|
+
| `useControllers([...])` | Register controller classes |
|
|
121
|
+
| `usePlugin(fn)` | Register a Fastify plugin |
|
|
122
|
+
| `useMiddleware(fn)` | Add request middleware |
|
|
123
|
+
| `useMiddlewares([...])` | Add multiple middlewares |
|
|
124
|
+
| `useErrorHandler(fn)` | Set custom error handler |
|
|
125
|
+
| `useLogger(fn)` | Configure the logging system |
|
|
126
|
+
| `useScheduler(enabled)` | Enable/disable the job scheduler |
|
|
127
|
+
| `beforeStart(fn)` | Hook to run before server starts |
|
|
128
|
+
| `afterStart(fn)` | Hook to run after server starts |
|
|
129
|
+
| `build()` | Build and return `{ app, start, logger, scheduler }` |
|
|
130
|
+
| `start()` | Build and start the server immediately |
|
|
131
|
+
|
|
132
|
+
## Logging
|
|
133
|
+
|
|
134
|
+
BootifyJS provides a flexible logging system with no external dependencies:
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
import { createLogger, getLogger } from "bootifyjs/logging";
|
|
138
|
+
|
|
139
|
+
// Option 1: Use built-in BaseLogger
|
|
140
|
+
const logger = createLogger()
|
|
141
|
+
.setLevel("debug")
|
|
142
|
+
.setServiceName("my-api")
|
|
143
|
+
.configureConsole({ colorize: true, prettyPrint: true })
|
|
144
|
+
.build();
|
|
145
|
+
|
|
146
|
+
logger.info("Server started", { port: 3000 });
|
|
147
|
+
logger.error("Something went wrong", new Error("Oops"), { userId: 123 });
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Bring Your Own Logger
|
|
151
|
+
|
|
152
|
+
Create an adapter that implements `ILogger`:
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
// adapters/pino-adapter.ts
|
|
156
|
+
import pino from "pino";
|
|
157
|
+
import { ILogger, LogContext } from "bootifyjs/logging";
|
|
158
|
+
|
|
159
|
+
export class PinoAdapter implements ILogger {
|
|
160
|
+
private logger: pino.Logger;
|
|
161
|
+
|
|
162
|
+
constructor(options: { level?: string; prettyPrint?: boolean } = {}) {
|
|
163
|
+
this.logger = pino({
|
|
164
|
+
level: options.level ?? "info",
|
|
165
|
+
transport: options.prettyPrint
|
|
166
|
+
? { target: "pino-pretty", options: { colorize: true } }
|
|
167
|
+
: undefined,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
info(message: string, context?: LogContext): void {
|
|
172
|
+
this.logger.info(context ?? {}, message);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
error(message: string, error?: Error, context?: LogContext): void {
|
|
176
|
+
this.logger.error({ ...context, err: error }, message);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// ... implement other methods: trace, debug, warn, fatal, child
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Then use it with BootifyApp:
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
import { createBootify } from "bootifyjs";
|
|
187
|
+
import { PinoAdapter } from "./adapters/pino-adapter";
|
|
188
|
+
|
|
189
|
+
createBootify()
|
|
190
|
+
.useLogger((builder) =>
|
|
191
|
+
builder.use(new PinoAdapter({ level: "info", prettyPrint: true }))
|
|
192
|
+
)
|
|
193
|
+
.start();
|
|
194
|
+
```
|
|
195
|
+
|
|
72
196
|
## Philosophy
|
|
73
197
|
|
|
74
198
|
BootifyJS is built on a few core principles:
|
|
@@ -76,14 +200,15 @@ BootifyJS is built on a few core principles:
|
|
|
76
200
|
- **Developer Experience First:** Frameworks should reduce boilerplate and complexity, not add to it. Our primary goal is to make development fast, intuitive, and enjoyable.
|
|
77
201
|
- **Convention Over Configuration:** We provide sensible defaults and automatic wiring so you can focus on writing business logic.
|
|
78
202
|
- **Robustness by Default:** Features like startup validation, graceful shutdown, and resilient event handling are built-in, helping you write production-ready code from day one.
|
|
79
|
-
- **Extensibility:** While the framework works out-of-the-box, it's designed to be pluggable and extensible. You can easily bring your own implementations for caching, authentication, and more.
|
|
203
|
+
- **Extensibility:** While the framework works out-of-the-box, it's designed to be pluggable and extensible. You can easily bring your own implementations for caching, authentication, logging, and more.
|
|
80
204
|
|
|
81
205
|
## Documentation
|
|
82
206
|
|
|
83
207
|
Dive deeper into the features of BootifyJS:
|
|
84
208
|
|
|
85
|
-
- [**Core Module**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/core
|
|
86
|
-
- [**Configuration**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/config
|
|
87
|
-
- [**Events Module**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/events
|
|
88
|
-
- [**Cache Module**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/cache
|
|
89
|
-
- [**Logging**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/logging
|
|
209
|
+
- [**Core Module**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/core): Learn about the Dependency Injection system, decorators, and component lifecycle.
|
|
210
|
+
- [**Configuration**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/config): Master the type-safe, schema-driven configuration system.
|
|
211
|
+
- [**Events Module**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/events): Master the event bus for building decoupled, event-driven services.
|
|
212
|
+
- [**Cache Module**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/cache): Speed up your application with our decorator-driven caching system.
|
|
213
|
+
- [**Logging**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/logging): Understand the structured, context-aware logging system.
|
|
214
|
+
- [**Scheduling**](https://github.com/piyushpriyadarshi/bootifyjs/tree/main/src/scheduling): Set up cron jobs and scheduled tasks.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { FastifyInstance, FastifyReply, FastifyRequest, FastifyServerOptions } from 'fastify';
|
|
2
|
+
import { ZodObject } from 'zod';
|
|
3
|
+
import { FastifyMiddleware } from './core/decorators';
|
|
4
|
+
import { Constructor } from './core/di-container';
|
|
5
|
+
import { ILogger, LoggerBuilder, StreamingStartupLogger } from './logging';
|
|
6
|
+
import { SchedulerService } from './scheduling/scheduler.service';
|
|
7
|
+
export type PluginRegistrationFn = (app: FastifyInstance) => Promise<void> | void;
|
|
8
|
+
export type ErrorHandlerFn = (error: Error, request: FastifyRequest, reply: FastifyReply) => Promise<void> | void;
|
|
9
|
+
export type LifecycleHookFn = (app: FastifyInstance) => Promise<void> | void;
|
|
10
|
+
export type LoggerConfigFn = (builder: LoggerBuilder) => LoggerBuilder;
|
|
11
|
+
export declare class BootifyApp {
|
|
12
|
+
private app;
|
|
13
|
+
private logger;
|
|
14
|
+
private startupLogger;
|
|
15
|
+
private scheduler?;
|
|
16
|
+
private port;
|
|
17
|
+
private hostname;
|
|
18
|
+
private controllers;
|
|
19
|
+
private plugins;
|
|
20
|
+
private beforeStartHooks;
|
|
21
|
+
private afterStartHooks;
|
|
22
|
+
private customErrorHandler?;
|
|
23
|
+
private enableScheduler;
|
|
24
|
+
private loggerConfigFn?;
|
|
25
|
+
private serviceName;
|
|
26
|
+
private fastifyOptions;
|
|
27
|
+
setFastifyOptions(options: FastifyServerOptions): this;
|
|
28
|
+
setPort(port: number): this;
|
|
29
|
+
setHostname(hostname: string): this;
|
|
30
|
+
/**
|
|
31
|
+
* Set the service/application name (used in logs)
|
|
32
|
+
*/
|
|
33
|
+
setServiceName(name: string): this;
|
|
34
|
+
useConfig(schema: ZodObject<any>): this;
|
|
35
|
+
useControllers(controllers: Constructor[]): this;
|
|
36
|
+
usePlugin(plugin: PluginRegistrationFn): this;
|
|
37
|
+
useMiddleware(middleware: FastifyMiddleware): this;
|
|
38
|
+
useMiddlewares(middlewares: FastifyMiddleware[]): this;
|
|
39
|
+
useErrorHandler(handler: ErrorHandlerFn): this;
|
|
40
|
+
beforeStart(hook: LifecycleHookFn): this;
|
|
41
|
+
afterStart(hook: LifecycleHookFn): this;
|
|
42
|
+
useScheduler(enabled?: boolean): this;
|
|
43
|
+
/**
|
|
44
|
+
* Configure the logger using the builder pattern
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* createBootify()
|
|
48
|
+
* .useLogger(builder => builder
|
|
49
|
+
* .setLevel('debug')
|
|
50
|
+
* .addTransport(new MyCustomTransport())
|
|
51
|
+
* )
|
|
52
|
+
*/
|
|
53
|
+
useLogger(configFn: LoggerConfigFn): this;
|
|
54
|
+
private initializeLogger;
|
|
55
|
+
build(): Promise<{
|
|
56
|
+
app: FastifyInstance;
|
|
57
|
+
start: () => Promise<void>;
|
|
58
|
+
logger: ILogger;
|
|
59
|
+
startupLogger: StreamingStartupLogger;
|
|
60
|
+
scheduler?: SchedulerService;
|
|
61
|
+
}>;
|
|
62
|
+
start(): Promise<void>;
|
|
63
|
+
private setupGracefulShutdown;
|
|
64
|
+
}
|
|
65
|
+
export declare function createBootify(): BootifyApp;
|
|
66
|
+
//# sourceMappingURL=BootifyApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BootifyApp.d.ts","sourceRoot":"","sources":["../src/BootifyApp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BootifyApp = void 0;
|
|
7
|
+
exports.createBootify = createBootify;
|
|
8
|
+
const fastify_1 = __importDefault(require("fastify"));
|
|
9
|
+
const AppConfig_1 = require("./config/AppConfig");
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
const di_container_1 = require("./core/di-container");
|
|
12
|
+
const router_1 = require("./core/router");
|
|
13
|
+
const logging_1 = require("./logging");
|
|
14
|
+
const scheduler_service_1 = require("./scheduling/scheduler.service");
|
|
15
|
+
class BootifyApp {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.port = constants_1.DEFAULT_SERVER_PORT;
|
|
18
|
+
this.hostname = constants_1.DEFAULT_SERVER_HOST;
|
|
19
|
+
this.controllers = [];
|
|
20
|
+
this.plugins = [];
|
|
21
|
+
this.beforeStartHooks = [];
|
|
22
|
+
this.afterStartHooks = [];
|
|
23
|
+
this.enableScheduler = true;
|
|
24
|
+
this.serviceName = 'bootify-app';
|
|
25
|
+
this.fastifyOptions = {
|
|
26
|
+
logger: false,
|
|
27
|
+
ignoreTrailingSlash: true,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
setFastifyOptions(options) {
|
|
31
|
+
this.fastifyOptions = { ...this.fastifyOptions, ...options };
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
setPort(port) {
|
|
35
|
+
this.port = port;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
setHostname(hostname) {
|
|
39
|
+
this.hostname = hostname;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Set the service/application name (used in logs)
|
|
44
|
+
*/
|
|
45
|
+
setServiceName(name) {
|
|
46
|
+
this.serviceName = name;
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
useConfig(schema) {
|
|
50
|
+
AppConfig_1.AppConfig.initialize(schema);
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
useControllers(controllers) {
|
|
54
|
+
this.controllers.push(...controllers);
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
usePlugin(plugin) {
|
|
58
|
+
this.plugins.push(plugin);
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
useMiddleware(middleware) {
|
|
62
|
+
this.plugins.push(async (app) => {
|
|
63
|
+
app.addHook('onRequest', middleware);
|
|
64
|
+
});
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
useMiddlewares(middlewares) {
|
|
68
|
+
middlewares.forEach((middleware) => this.useMiddleware(middleware));
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
useErrorHandler(handler) {
|
|
72
|
+
this.customErrorHandler = handler;
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
beforeStart(hook) {
|
|
76
|
+
this.beforeStartHooks.push(hook);
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
afterStart(hook) {
|
|
80
|
+
this.afterStartHooks.push(hook);
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
useScheduler(enabled = true) {
|
|
84
|
+
this.enableScheduler = enabled;
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Configure the logger using the builder pattern
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* createBootify()
|
|
92
|
+
* .useLogger(builder => builder
|
|
93
|
+
* .setLevel('debug')
|
|
94
|
+
* .addTransport(new MyCustomTransport())
|
|
95
|
+
* )
|
|
96
|
+
*/
|
|
97
|
+
useLogger(configFn) {
|
|
98
|
+
this.loggerConfigFn = configFn;
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
initializeLogger() {
|
|
102
|
+
let builder = (0, logging_1.createLogger)()
|
|
103
|
+
.setServiceName(this.serviceName)
|
|
104
|
+
.setLevel(process.env.LOG_LEVEL || 'info')
|
|
105
|
+
.addContextProvider(new logging_1.RequestContextProvider())
|
|
106
|
+
.setBaseContext({
|
|
107
|
+
environment: process.env.NODE_ENV || 'development',
|
|
108
|
+
});
|
|
109
|
+
// Apply user customizations
|
|
110
|
+
if (this.loggerConfigFn) {
|
|
111
|
+
builder = this.loggerConfigFn(builder);
|
|
112
|
+
}
|
|
113
|
+
return builder.build();
|
|
114
|
+
}
|
|
115
|
+
async build() {
|
|
116
|
+
// Initialize the new logging system
|
|
117
|
+
this.logger = this.initializeLogger();
|
|
118
|
+
// Initialize startup logger (still uses the streaming one for nice output)
|
|
119
|
+
this.startupLogger = di_container_1.container.resolve(logging_1.StreamingStartupLogger);
|
|
120
|
+
this.startupLogger.logStartupBanner();
|
|
121
|
+
this.app = (0, fastify_1.default)(this.fastifyOptions);
|
|
122
|
+
for (const plugin of this.plugins) {
|
|
123
|
+
await plugin(this.app);
|
|
124
|
+
}
|
|
125
|
+
if (this.controllers.length > 0) {
|
|
126
|
+
this.startupLogger.logPhaseStart('Registering Controllers');
|
|
127
|
+
this.startupLogger.logComponentStart('Controllers', `${this.controllers.length} found`);
|
|
128
|
+
(0, router_1.registerControllers)(this.app, this.controllers);
|
|
129
|
+
this.startupLogger.logComponentComplete();
|
|
130
|
+
}
|
|
131
|
+
if (this.customErrorHandler) {
|
|
132
|
+
this.app.setErrorHandler(this.customErrorHandler);
|
|
133
|
+
}
|
|
134
|
+
this.startupLogger.logStartupComplete();
|
|
135
|
+
if (this.enableScheduler) {
|
|
136
|
+
this.scheduler = di_container_1.container.resolve(scheduler_service_1.SchedulerService);
|
|
137
|
+
}
|
|
138
|
+
const start = async () => {
|
|
139
|
+
try {
|
|
140
|
+
for (const hook of this.beforeStartHooks) {
|
|
141
|
+
await hook(this.app);
|
|
142
|
+
}
|
|
143
|
+
if (this.enableScheduler && this.scheduler) {
|
|
144
|
+
this.startupLogger.logComponentStart('Scheduler', 'Starting scheduled jobs');
|
|
145
|
+
await this.scheduler.start();
|
|
146
|
+
this.startupLogger.logComponentComplete();
|
|
147
|
+
}
|
|
148
|
+
await this.app.listen({ port: this.port, host: this.hostname });
|
|
149
|
+
this.startupLogger.logStartupSummary(this.port, this.hostname);
|
|
150
|
+
// Log with the new logger
|
|
151
|
+
this.logger.info('Application started successfully', {
|
|
152
|
+
port: this.port,
|
|
153
|
+
host: this.hostname,
|
|
154
|
+
environment: process.env.NODE_ENV,
|
|
155
|
+
});
|
|
156
|
+
for (const hook of this.afterStartHooks) {
|
|
157
|
+
await hook(this.app);
|
|
158
|
+
}
|
|
159
|
+
this.setupGracefulShutdown();
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
this.logger.error('Failed to start application', err);
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
return {
|
|
167
|
+
app: this.app,
|
|
168
|
+
start,
|
|
169
|
+
logger: this.logger,
|
|
170
|
+
startupLogger: this.startupLogger,
|
|
171
|
+
scheduler: this.scheduler,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
async start() {
|
|
175
|
+
const { start } = await this.build();
|
|
176
|
+
await start();
|
|
177
|
+
}
|
|
178
|
+
setupGracefulShutdown() {
|
|
179
|
+
const shutdown = async (signal) => {
|
|
180
|
+
this.logger.info(`Received ${signal}, shutting down gracefully...`);
|
|
181
|
+
if (this.scheduler) {
|
|
182
|
+
await this.scheduler.stop();
|
|
183
|
+
}
|
|
184
|
+
await this.app.close();
|
|
185
|
+
this.logger.info('Shutdown complete');
|
|
186
|
+
process.exit(0);
|
|
187
|
+
};
|
|
188
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
189
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.BootifyApp = BootifyApp;
|
|
193
|
+
function createBootify() {
|
|
194
|
+
return new BootifyApp();
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=BootifyApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BootifyApp.js","sourceRoot":"","sources":["../src/BootifyApp.ts"],"names":[],"mappings":";;;;;;AAuPA,sCAEC;AAzPD,sDAAsG;AAEtG,kDAA8C;AAC9C,2CAAsE;AAEtE,sDAA4D;AAC5D,0CAAmD;AACnD,uCAOkB;AAClB,sEAAiE;AAOjE,MAAa,UAAU;IAAvB;QAKY,SAAI,GAAW,+BAAmB,CAAA;QAClC,aAAQ,GAAW,+BAAmB,CAAA;QACtC,gBAAW,GAAkB,EAAE,CAAA;QAC/B,YAAO,GAA2B,EAAE,CAAA;QACpC,qBAAgB,GAAsB,EAAE,CAAA;QACxC,oBAAe,GAAsB,EAAE,CAAA;QAEvC,oBAAe,GAAY,IAAI,CAAA;QAE/B,gBAAW,GAAW,aAAa,CAAA;QACnC,mBAAc,GAAyB;YAC3C,MAAM,EAAE,KAAK;YACb,mBAAmB,EAAE,IAAI;SAC5B,CAAA;IA6ML,CAAC;IA3MG,iBAAiB,CAAC,OAA6B;QAC3C,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,OAAO,EAAE,CAAA;QAC5D,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,CAAC,IAAY;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,WAAW,CAAC,QAAgB;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,SAAS,CAAC,MAAsB;QAC5B,qBAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAC5B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,cAAc,CAAC,WAA0B;QACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAA;QACrC,OAAO,IAAI,CAAA;IACf,CAAC;IAED,SAAS,CAAC,MAA4B;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,aAAa,CAAC,UAA6B;QACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACf,CAAC;IAED,cAAc,CAAC,WAAgC;QAC3C,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAA;QACnE,OAAO,IAAI,CAAA;IACf,CAAC;IAED,eAAe,CAAC,OAAuB;QACnC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAA;QACjC,OAAO,IAAI,CAAA;IACf,CAAC;IAED,WAAW,CAAC,IAAqB;QAC7B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,OAAO,IAAI,CAAA;IACf,CAAC;IAED,UAAU,CAAC,IAAqB;QAC5B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,YAAY,CAAC,UAAmB,IAAI;QAChC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAA;QAC9B,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;;;;;;OASG;IACH,SAAS,CAAC,QAAwB;QAC9B,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAA;QAC9B,OAAO,IAAI,CAAA;IACf,CAAC;IAEO,gBAAgB;QACpB,IAAI,OAAO,GAAG,IAAA,sBAAY,GAAE;aACvB,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;aAChC,QAAQ,CAAE,OAAO,CAAC,GAAG,CAAC,SAAsB,IAAI,MAAM,CAAC;aACvD,kBAAkB,CAAC,IAAI,gCAAsB,EAAE,CAAC;aAChD,cAAc,CAAC;YACZ,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa;SACrD,CAAC,CAAA;QAEN,4BAA4B;QAC5B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAC1C,CAAC;QAED,OAAO,OAAO,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK;QAOP,oCAAoC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAErC,2EAA2E;QAC3E,IAAI,CAAC,aAAa,GAAG,wBAAS,CAAC,OAAO,CAAyB,gCAAsB,CAAC,CAAA;QAEtF,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAA;QAErC,IAAI,CAAC,GAAG,GAAG,IAAA,iBAAO,EAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAEvC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAA;YAC3D,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,QAAQ,CAAC,CAAA;YACvF,IAAA,4BAAmB,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAC/C,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAA;QAC7C,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAA;QAEvC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,wBAAS,CAAC,OAAO,CAAC,oCAAgB,CAAC,CAAA;QACxD,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACvC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACxB,CAAC;gBAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACzC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAA;oBAC5E,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;oBAC5B,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAA;gBAC7C,CAAC;gBAED,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;gBAC/D,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAE9D,0BAA0B;gBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;oBACjD,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,QAAQ;oBACnB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;iBACpC,CAAC,CAAA;gBAEF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACtC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACxB,CAAC;gBAED,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAY,CAAC,CAAA;gBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,CAAC;QACL,CAAC,CAAA;QAED,OAAO;YACH,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAA;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACpC,MAAM,KAAK,EAAE,CAAA;IACjB,CAAC;IAEO,qBAAqB;QACzB,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,+BAA+B,CAAC,CAAA;YAEnE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;YAC/B,CAAC;YAED,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC,CAAA;QAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QAChD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClD,CAAC;CACJ;AA/ND,gCA+NC;AAED,SAAgB,aAAa;IACzB,OAAO,IAAI,UAAU,EAAE,CAAA;AAC3B,CAAC"}
|
package/dist/api.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { FastifyInstance } from 'fastify';
|
|
1
|
+
import { FastifyInstance, FastifyServerOptions } from 'fastify';
|
|
2
2
|
import { ZodObject } from 'zod';
|
|
3
3
|
import { FastifyMiddleware } from './core/decorators';
|
|
4
4
|
import { Constructor } from './core/di-container';
|
|
5
5
|
import { ContextExtractor } from './middleware/context.middleware';
|
|
6
6
|
export interface BootifyAppOptions {
|
|
7
|
-
controllers
|
|
7
|
+
controllers?: Constructor[];
|
|
8
8
|
port?: number;
|
|
9
9
|
hostname?: string;
|
|
10
10
|
enableSwagger?: boolean;
|
|
@@ -13,9 +13,16 @@ export interface BootifyAppOptions {
|
|
|
13
13
|
globalMiddlewares?: FastifyMiddleware[];
|
|
14
14
|
ignoreTrailingSlash?: boolean;
|
|
15
15
|
enableCookie?: boolean;
|
|
16
|
+
enableRequestLogger?: boolean;
|
|
17
|
+
enableContextMiddleware?: boolean;
|
|
18
|
+
enableErrorHandler?: boolean;
|
|
19
|
+
fastifyOptions?: FastifyServerOptions;
|
|
20
|
+
autoStart?: boolean;
|
|
16
21
|
}
|
|
17
|
-
export declare function createBootifyApp(options
|
|
22
|
+
export declare function createBootifyApp(options?: BootifyAppOptions): Promise<{
|
|
18
23
|
app: FastifyInstance<import("fastify").RawServerDefault, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>;
|
|
19
24
|
start: () => Promise<void>;
|
|
25
|
+
logger: import("./logging").Logger;
|
|
26
|
+
startupLogger: import("./logging").StartupLoggerService;
|
|
20
27
|
}>;
|
|
21
28
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACxE,OAAO,EAAY,SAAS,EAAE,MAAM,KAAK,CAAA;AAGzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGjD,OAAO,EAAE,gBAAgB,EAA2B,MAAM,iCAAiC,CAAA;AAM3F,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,cAAc,CAAC,EAAE,oBAAoB,CAAA;IACrC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB;;;;;GAqIrE"}
|