@veloxts/core 0.3.3 → 0.3.5
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 +697 -16
- package/dist/app.d.ts +67 -10
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +79 -12
- package/dist/app.js.map +1 -1
- package/dist/context.d.ts +26 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +29 -0
- package/dist/context.js.map +1 -1
- package/dist/di/container.d.ts +406 -0
- package/dist/di/container.d.ts.map +1 -0
- package/dist/di/container.js +699 -0
- package/dist/di/container.js.map +1 -0
- package/dist/di/decorators.d.ts +235 -0
- package/dist/di/decorators.d.ts.map +1 -0
- package/dist/di/decorators.js +297 -0
- package/dist/di/decorators.js.map +1 -0
- package/dist/di/index.d.ts +65 -0
- package/dist/di/index.d.ts.map +1 -0
- package/dist/di/index.js +73 -0
- package/dist/di/index.js.map +1 -0
- package/dist/di/providers.d.ts +397 -0
- package/dist/di/providers.d.ts.map +1 -0
- package/dist/di/providers.js +380 -0
- package/dist/di/providers.js.map +1 -0
- package/dist/di/scope.d.ts +230 -0
- package/dist/di/scope.d.ts.map +1 -0
- package/dist/di/scope.js +294 -0
- package/dist/di/scope.js.map +1 -0
- package/dist/di/tokens.d.ts +227 -0
- package/dist/di/tokens.d.ts.map +1 -0
- package/dist/di/tokens.js +192 -0
- package/dist/di/tokens.js.map +1 -0
- package/dist/errors/catalog.d.ts +79 -0
- package/dist/errors/catalog.d.ts.map +1 -0
- package/dist/errors/catalog.js +492 -0
- package/dist/errors/catalog.js.map +1 -0
- package/dist/errors/formatter.d.ts +101 -0
- package/dist/errors/formatter.d.ts.map +1 -0
- package/dist/errors/formatter.js +330 -0
- package/dist/errors/formatter.js.map +1 -0
- package/dist/errors/index.d.ts +14 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +16 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors.d.ts +35 -5
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +57 -4
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -6
- package/dist/index.js.map +1 -1
- package/package.json +14 -2
package/dist/app.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* @module app
|
|
5
5
|
*/
|
|
6
6
|
import { type FastifyInstance } from 'fastify';
|
|
7
|
+
import { type Container } from './di/index.js';
|
|
7
8
|
import type { PluginOptions, VeloxPlugin } from './plugin.js';
|
|
8
9
|
import type { ShutdownHandler } from './types.js';
|
|
9
10
|
import type { FrozenVeloxAppConfig, VeloxAppConfig } from './utils/config.js';
|
|
@@ -18,7 +19,7 @@ import type { FrozenVeloxAppConfig, VeloxAppConfig } from './utils/config.js';
|
|
|
18
19
|
*
|
|
19
20
|
* @example
|
|
20
21
|
* ```typescript
|
|
21
|
-
* const app = await
|
|
22
|
+
* const app = await veloxApp({
|
|
22
23
|
* port: 3210,
|
|
23
24
|
* logger: true
|
|
24
25
|
* });
|
|
@@ -31,6 +32,7 @@ export declare class VeloxApp {
|
|
|
31
32
|
private readonly _server;
|
|
32
33
|
private readonly _config;
|
|
33
34
|
private readonly _lifecycle;
|
|
35
|
+
private readonly _container;
|
|
34
36
|
private _isRunning;
|
|
35
37
|
private _address;
|
|
36
38
|
/**
|
|
@@ -62,6 +64,36 @@ export declare class VeloxApp {
|
|
|
62
64
|
* Application configuration (readonly, frozen)
|
|
63
65
|
*/
|
|
64
66
|
get config(): FrozenVeloxAppConfig;
|
|
67
|
+
/**
|
|
68
|
+
* DI container for the application
|
|
69
|
+
*
|
|
70
|
+
* Provides access to the dependency injection container.
|
|
71
|
+
* Use this to register services and resolve dependencies.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* import { Injectable, createStringToken } from '@veloxts/core';
|
|
76
|
+
*
|
|
77
|
+
* const DATABASE = createStringToken<DatabaseClient>('DATABASE');
|
|
78
|
+
*
|
|
79
|
+
* @Injectable()
|
|
80
|
+
* class UserService {
|
|
81
|
+
* constructor(@Inject(DATABASE) private db: DatabaseClient) {}
|
|
82
|
+
* }
|
|
83
|
+
*
|
|
84
|
+
* // Register services
|
|
85
|
+
* app.container.register({
|
|
86
|
+
* provide: DATABASE,
|
|
87
|
+
* useFactory: () => createDatabaseClient()
|
|
88
|
+
* });
|
|
89
|
+
*
|
|
90
|
+
* app.container.register({
|
|
91
|
+
* provide: UserService,
|
|
92
|
+
* useClass: UserService
|
|
93
|
+
* });
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
get container(): Container;
|
|
65
97
|
/**
|
|
66
98
|
* Check if server is currently running
|
|
67
99
|
*/
|
|
@@ -111,11 +143,20 @@ export declare class VeloxApp {
|
|
|
111
143
|
*
|
|
112
144
|
* @example
|
|
113
145
|
* ```typescript
|
|
114
|
-
* await app.
|
|
146
|
+
* await app.register(databasePlugin, {
|
|
115
147
|
* connectionString: 'postgresql://...'
|
|
116
148
|
* });
|
|
117
149
|
* ```
|
|
118
150
|
*/
|
|
151
|
+
register<Options extends PluginOptions>(plugin: VeloxPlugin<Options>, options?: Options): Promise<void>;
|
|
152
|
+
/**
|
|
153
|
+
* Registers a plugin with the application
|
|
154
|
+
*
|
|
155
|
+
* @deprecated Use `register()` instead. This alias will be removed in v0.9.
|
|
156
|
+
* @template Options - Type of options the plugin accepts
|
|
157
|
+
* @param plugin - Plugin to register
|
|
158
|
+
* @param options - Options to pass to the plugin
|
|
159
|
+
*/
|
|
119
160
|
use<Options extends PluginOptions>(plugin: VeloxPlugin<Options>, options?: Options): Promise<void>;
|
|
120
161
|
/**
|
|
121
162
|
* Registers routes with the application
|
|
@@ -177,21 +218,29 @@ export declare class VeloxApp {
|
|
|
177
218
|
*/
|
|
178
219
|
stop(): Promise<void>;
|
|
179
220
|
/**
|
|
180
|
-
* Adds a shutdown
|
|
221
|
+
* Adds a handler to run before shutdown
|
|
181
222
|
*
|
|
182
223
|
* Shutdown handlers are called when the server stops, either via `stop()`
|
|
183
|
-
* or when receiving SIGINT/SIGTERM signals
|
|
224
|
+
* or when receiving SIGINT/SIGTERM signals. Use this to clean up resources
|
|
225
|
+
* like database connections, file handles, etc.
|
|
184
226
|
*
|
|
185
|
-
* @param handler - Async function to call
|
|
227
|
+
* @param handler - Async function to call before shutdown
|
|
186
228
|
*
|
|
187
229
|
* @example
|
|
188
230
|
* ```typescript
|
|
189
|
-
* app.
|
|
231
|
+
* app.beforeShutdown(async () => {
|
|
190
232
|
* await database.disconnect();
|
|
191
233
|
* console.log('Database connection closed');
|
|
192
234
|
* });
|
|
193
235
|
* ```
|
|
194
236
|
*/
|
|
237
|
+
beforeShutdown(handler: ShutdownHandler): void;
|
|
238
|
+
/**
|
|
239
|
+
* Adds a shutdown handler
|
|
240
|
+
*
|
|
241
|
+
* @deprecated Use `beforeShutdown()` instead. This alias will be removed in v0.9.
|
|
242
|
+
* @param handler - Async function to call during shutdown
|
|
243
|
+
*/
|
|
195
244
|
onShutdown(handler: ShutdownHandler): void;
|
|
196
245
|
}
|
|
197
246
|
/**
|
|
@@ -205,7 +254,7 @@ export declare class VeloxApp {
|
|
|
205
254
|
*
|
|
206
255
|
* @example
|
|
207
256
|
* ```typescript
|
|
208
|
-
* const app = await
|
|
257
|
+
* const app = await veloxApp({
|
|
209
258
|
* port: 3210,
|
|
210
259
|
* host: '0.0.0.0',
|
|
211
260
|
* logger: true
|
|
@@ -215,14 +264,14 @@ export declare class VeloxApp {
|
|
|
215
264
|
* @example
|
|
216
265
|
* ```typescript
|
|
217
266
|
* // With default configuration
|
|
218
|
-
* const app = await
|
|
267
|
+
* const app = await veloxApp();
|
|
219
268
|
* await app.start(); // Listens on port 3210
|
|
220
269
|
* ```
|
|
221
270
|
*
|
|
222
271
|
* @example
|
|
223
272
|
* ```typescript
|
|
224
273
|
* // With custom Fastify options
|
|
225
|
-
* const app = await
|
|
274
|
+
* const app = await veloxApp({
|
|
226
275
|
* port: 4000,
|
|
227
276
|
* fastify: {
|
|
228
277
|
* requestTimeout: 30000,
|
|
@@ -231,5 +280,13 @@ export declare class VeloxApp {
|
|
|
231
280
|
* });
|
|
232
281
|
* ```
|
|
233
282
|
*/
|
|
234
|
-
export declare function
|
|
283
|
+
export declare function veloxApp(config?: VeloxAppConfig): Promise<VeloxApp>;
|
|
284
|
+
/**
|
|
285
|
+
* Creates a new VeloxTS application instance
|
|
286
|
+
*
|
|
287
|
+
* @deprecated Use `veloxApp()` instead. This alias will be removed in v0.9.
|
|
288
|
+
* @param config - Application configuration
|
|
289
|
+
* @returns Promise resolving to VeloxApp instance
|
|
290
|
+
*/
|
|
291
|
+
export declare const createVeloxApp: typeof veloxApp;
|
|
235
292
|
//# sourceMappingURL=app.d.ts.map
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAgB,EAAE,KAAK,eAAe,EAA6B,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAgB,EAAE,KAAK,eAAe,EAA6B,MAAM,SAAS,CAAC;AAInF,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,eAAe,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAuB;IAEvC;;;;;OAKG;gBACS,MAAM,EAAE,cAAc;IAkClC;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,oBAAoB,CAEjC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAWrB;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAM9B;;;;;;;;;;;;;;;;OAgBG;IACG,QAAQ,CAAC,OAAO,SAAS,aAAa,EAC1C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAC5B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC;IAuBhB;;;;;;;OAOG;IACG,GAAG,CAAC,OAAO,SAAS,aAAa,EACrC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAC5B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAK1D;;;;;;;;;;OAUG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B5B;;;;;;;;;;;;;;;OAeG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3B;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI9C;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;CAG3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,QAAQ,CAAC,MAAM,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAI7E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,iBAAW,CAAC"}
|
package/dist/app.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import fastify from 'fastify';
|
|
7
7
|
import fp from 'fastify-plugin';
|
|
8
8
|
import { createContext } from './context.js';
|
|
9
|
+
import { container } from './di/index.js';
|
|
9
10
|
import { isVeloxError, VeloxError } from './errors.js';
|
|
10
11
|
import { validatePluginMetadata } from './plugin.js';
|
|
11
12
|
import { mergeConfig, validateConfig } from './utils/config.js';
|
|
@@ -21,7 +22,7 @@ import { LifecycleManager } from './utils/lifecycle.js';
|
|
|
21
22
|
*
|
|
22
23
|
* @example
|
|
23
24
|
* ```typescript
|
|
24
|
-
* const app = await
|
|
25
|
+
* const app = await veloxApp({
|
|
25
26
|
* port: 3210,
|
|
26
27
|
* logger: true
|
|
27
28
|
* });
|
|
@@ -34,6 +35,7 @@ export class VeloxApp {
|
|
|
34
35
|
_server;
|
|
35
36
|
_config;
|
|
36
37
|
_lifecycle;
|
|
38
|
+
_container;
|
|
37
39
|
_isRunning = false;
|
|
38
40
|
_address = null;
|
|
39
41
|
/**
|
|
@@ -55,6 +57,10 @@ export class VeloxApp {
|
|
|
55
57
|
this._server = fastify(fastifyOptions);
|
|
56
58
|
// Initialize lifecycle manager
|
|
57
59
|
this._lifecycle = new LifecycleManager();
|
|
60
|
+
// Use global container by default
|
|
61
|
+
this._container = container;
|
|
62
|
+
// Attach container to Fastify for request-scoped services
|
|
63
|
+
this._container.attachToFastify(this._server);
|
|
58
64
|
// Set up context decorator
|
|
59
65
|
this._setupContext();
|
|
60
66
|
// Set up error handling
|
|
@@ -88,6 +94,38 @@ export class VeloxApp {
|
|
|
88
94
|
get config() {
|
|
89
95
|
return this._config;
|
|
90
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* DI container for the application
|
|
99
|
+
*
|
|
100
|
+
* Provides access to the dependency injection container.
|
|
101
|
+
* Use this to register services and resolve dependencies.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* import { Injectable, createStringToken } from '@veloxts/core';
|
|
106
|
+
*
|
|
107
|
+
* const DATABASE = createStringToken<DatabaseClient>('DATABASE');
|
|
108
|
+
*
|
|
109
|
+
* @Injectable()
|
|
110
|
+
* class UserService {
|
|
111
|
+
* constructor(@Inject(DATABASE) private db: DatabaseClient) {}
|
|
112
|
+
* }
|
|
113
|
+
*
|
|
114
|
+
* // Register services
|
|
115
|
+
* app.container.register({
|
|
116
|
+
* provide: DATABASE,
|
|
117
|
+
* useFactory: () => createDatabaseClient()
|
|
118
|
+
* });
|
|
119
|
+
*
|
|
120
|
+
* app.container.register({
|
|
121
|
+
* provide: UserService,
|
|
122
|
+
* useClass: UserService
|
|
123
|
+
* });
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
get container() {
|
|
127
|
+
return this._container;
|
|
128
|
+
}
|
|
91
129
|
/**
|
|
92
130
|
* Check if server is currently running
|
|
93
131
|
*/
|
|
@@ -194,12 +232,12 @@ export class VeloxApp {
|
|
|
194
232
|
*
|
|
195
233
|
* @example
|
|
196
234
|
* ```typescript
|
|
197
|
-
* await app.
|
|
235
|
+
* await app.register(databasePlugin, {
|
|
198
236
|
* connectionString: 'postgresql://...'
|
|
199
237
|
* });
|
|
200
238
|
* ```
|
|
201
239
|
*/
|
|
202
|
-
async
|
|
240
|
+
async register(plugin, options) {
|
|
203
241
|
// Validate plugin metadata
|
|
204
242
|
validatePluginMetadata(plugin);
|
|
205
243
|
// Wrap plugin with fastify-plugin for proper encapsulation
|
|
@@ -216,6 +254,17 @@ export class VeloxApp {
|
|
|
216
254
|
throw new VeloxError(`Failed to register plugin "${plugin.name}": ${error instanceof Error ? error.message : String(error)}`, 500, 'PLUGIN_REGISTRATION_ERROR');
|
|
217
255
|
}
|
|
218
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Registers a plugin with the application
|
|
259
|
+
*
|
|
260
|
+
* @deprecated Use `register()` instead. This alias will be removed in v0.9.
|
|
261
|
+
* @template Options - Type of options the plugin accepts
|
|
262
|
+
* @param plugin - Plugin to register
|
|
263
|
+
* @param options - Options to pass to the plugin
|
|
264
|
+
*/
|
|
265
|
+
async use(plugin, options) {
|
|
266
|
+
return this.register(plugin, options);
|
|
267
|
+
}
|
|
219
268
|
/**
|
|
220
269
|
* Registers routes with the application
|
|
221
270
|
*
|
|
@@ -316,24 +365,34 @@ export class VeloxApp {
|
|
|
316
365
|
}
|
|
317
366
|
}
|
|
318
367
|
/**
|
|
319
|
-
* Adds a shutdown
|
|
368
|
+
* Adds a handler to run before shutdown
|
|
320
369
|
*
|
|
321
370
|
* Shutdown handlers are called when the server stops, either via `stop()`
|
|
322
|
-
* or when receiving SIGINT/SIGTERM signals
|
|
371
|
+
* or when receiving SIGINT/SIGTERM signals. Use this to clean up resources
|
|
372
|
+
* like database connections, file handles, etc.
|
|
323
373
|
*
|
|
324
|
-
* @param handler - Async function to call
|
|
374
|
+
* @param handler - Async function to call before shutdown
|
|
325
375
|
*
|
|
326
376
|
* @example
|
|
327
377
|
* ```typescript
|
|
328
|
-
* app.
|
|
378
|
+
* app.beforeShutdown(async () => {
|
|
329
379
|
* await database.disconnect();
|
|
330
380
|
* console.log('Database connection closed');
|
|
331
381
|
* });
|
|
332
382
|
* ```
|
|
333
383
|
*/
|
|
334
|
-
|
|
384
|
+
beforeShutdown(handler) {
|
|
335
385
|
this._lifecycle.addShutdownHandler(handler);
|
|
336
386
|
}
|
|
387
|
+
/**
|
|
388
|
+
* Adds a shutdown handler
|
|
389
|
+
*
|
|
390
|
+
* @deprecated Use `beforeShutdown()` instead. This alias will be removed in v0.9.
|
|
391
|
+
* @param handler - Async function to call during shutdown
|
|
392
|
+
*/
|
|
393
|
+
onShutdown(handler) {
|
|
394
|
+
this.beforeShutdown(handler);
|
|
395
|
+
}
|
|
337
396
|
}
|
|
338
397
|
/**
|
|
339
398
|
* Creates a new VeloxTS application instance
|
|
@@ -346,7 +405,7 @@ export class VeloxApp {
|
|
|
346
405
|
*
|
|
347
406
|
* @example
|
|
348
407
|
* ```typescript
|
|
349
|
-
* const app = await
|
|
408
|
+
* const app = await veloxApp({
|
|
350
409
|
* port: 3210,
|
|
351
410
|
* host: '0.0.0.0',
|
|
352
411
|
* logger: true
|
|
@@ -356,14 +415,14 @@ export class VeloxApp {
|
|
|
356
415
|
* @example
|
|
357
416
|
* ```typescript
|
|
358
417
|
* // With default configuration
|
|
359
|
-
* const app = await
|
|
418
|
+
* const app = await veloxApp();
|
|
360
419
|
* await app.start(); // Listens on port 3210
|
|
361
420
|
* ```
|
|
362
421
|
*
|
|
363
422
|
* @example
|
|
364
423
|
* ```typescript
|
|
365
424
|
* // With custom Fastify options
|
|
366
|
-
* const app = await
|
|
425
|
+
* const app = await veloxApp({
|
|
367
426
|
* port: 4000,
|
|
368
427
|
* fastify: {
|
|
369
428
|
* requestTimeout: 30000,
|
|
@@ -372,9 +431,17 @@ export class VeloxApp {
|
|
|
372
431
|
* });
|
|
373
432
|
* ```
|
|
374
433
|
*/
|
|
375
|
-
export async function
|
|
434
|
+
export async function veloxApp(config = {}) {
|
|
376
435
|
const app = new VeloxApp(config);
|
|
377
436
|
await app.initialize();
|
|
378
437
|
return app;
|
|
379
438
|
}
|
|
439
|
+
/**
|
|
440
|
+
* Creates a new VeloxTS application instance
|
|
441
|
+
*
|
|
442
|
+
* @deprecated Use `veloxApp()` instead. This alias will be removed in v0.9.
|
|
443
|
+
* @param config - Application configuration
|
|
444
|
+
* @returns Promise resolving to VeloxApp instance
|
|
445
|
+
*/
|
|
446
|
+
export const createVeloxApp = veloxApp;
|
|
380
447
|
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,OAA4D,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEhC,OAAO,EAAoB,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,QAAQ;IACF,OAAO,CAAkB;IACzB,OAAO,CAAuB;IAC9B,UAAU,CAAmB;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Supports TypeScript declaration merging for plugin extensions
|
|
4
4
|
* @module context
|
|
5
5
|
*/
|
|
6
|
-
import type { FastifyReply, FastifyRequest } from 'fastify';
|
|
6
|
+
import type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';
|
|
7
7
|
/**
|
|
8
8
|
* Base context interface available in all request handlers
|
|
9
9
|
*
|
|
@@ -72,6 +72,31 @@ export declare function createContext(request: FastifyRequest, reply: FastifyRep
|
|
|
72
72
|
* ```
|
|
73
73
|
*/
|
|
74
74
|
export declare function isContext(value: unknown): value is BaseContext;
|
|
75
|
+
/**
|
|
76
|
+
* Sets up the test context hook on a Fastify server
|
|
77
|
+
*
|
|
78
|
+
* This replicates the `onRequest` hook that VeloxApp uses internally
|
|
79
|
+
* to populate `request.context`. Use this in integration tests when
|
|
80
|
+
* testing with a raw Fastify server instead of VeloxApp.
|
|
81
|
+
*
|
|
82
|
+
* @param server - Fastify server instance
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* import Fastify from 'fastify';
|
|
87
|
+
* import { setupTestContext } from '@veloxts/core';
|
|
88
|
+
*
|
|
89
|
+
* const server = Fastify();
|
|
90
|
+
* setupTestContext(server);
|
|
91
|
+
*
|
|
92
|
+
* // Now request.context is available in all routes
|
|
93
|
+
* server.get('/test', async (request) => {
|
|
94
|
+
* console.log(request.context.request.url);
|
|
95
|
+
* return { ok: true };
|
|
96
|
+
* });
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export declare function setupTestContext(server: FastifyInstance): void;
|
|
75
100
|
/**
|
|
76
101
|
* Augment Fastify's Request interface to include context
|
|
77
102
|
* This enables `request.context` in route handlers
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,OAAO,EAAE,cAAc,CAAC;IAExB;;;OAGG;IACH,KAAK,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,WAAW,CAKvF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAqB9D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAI9D;AAED;;;GAGG;AACH,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB;;;WAGG;QACH,OAAO,EAAE,WAAW,CAAC;KACtB;CACF"}
|
package/dist/context.js
CHANGED
|
@@ -54,4 +54,33 @@ export function isContext(value) {
|
|
|
54
54
|
typeof ctx.reply === 'object' &&
|
|
55
55
|
ctx.reply !== null);
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Sets up the test context hook on a Fastify server
|
|
59
|
+
*
|
|
60
|
+
* This replicates the `onRequest` hook that VeloxApp uses internally
|
|
61
|
+
* to populate `request.context`. Use this in integration tests when
|
|
62
|
+
* testing with a raw Fastify server instead of VeloxApp.
|
|
63
|
+
*
|
|
64
|
+
* @param server - Fastify server instance
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* import Fastify from 'fastify';
|
|
69
|
+
* import { setupTestContext } from '@veloxts/core';
|
|
70
|
+
*
|
|
71
|
+
* const server = Fastify();
|
|
72
|
+
* setupTestContext(server);
|
|
73
|
+
*
|
|
74
|
+
* // Now request.context is available in all routes
|
|
75
|
+
* server.get('/test', async (request) => {
|
|
76
|
+
* console.log(request.context.request.url);
|
|
77
|
+
* return { ok: true };
|
|
78
|
+
* });
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export function setupTestContext(server) {
|
|
82
|
+
server.addHook('onRequest', async (request, reply) => {
|
|
83
|
+
request.context = createContext(request, reply);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
57
86
|
//# sourceMappingURL=context.js.map
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4CH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,OAAuB,EAAE,KAAmB;IACxE,OAAO;QACL,OAAO;QACP,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,+BAA+B;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8CAA8C;IAC9C,MAAM,GAAG,GAAG,KAA6C,CAAC;IAE1D,gDAAgD;IAChD,OAAO,CACL,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC/B,GAAG,CAAC,OAAO,KAAK,IAAI;QACpB,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAC7B,GAAG,CAAC,KAAK,KAAK,IAAI,CACnB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4CH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,OAAuB,EAAE,KAAmB;IACxE,OAAO;QACL,OAAO;QACP,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,+BAA+B;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8CAA8C;IAC9C,MAAM,GAAG,GAAG,KAA6C,CAAC;IAE1D,gDAAgD;IAChD,OAAO,CACL,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC/B,GAAG,CAAC,OAAO,KAAK,IAAI;QACpB,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAC7B,GAAG,CAAC,KAAK,KAAK,IAAI,CACnB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAClD,OAAoC,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC"}
|