@asenajs/ergenecore 3.2.1 → 5.0.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 (31) hide show
  1. package/README.md +12 -5
  2. package/dist/lib/Ergenecore.d.ts +12 -1
  3. package/dist/lib/Ergenecore.js +320 -173
  4. package/dist/lib/Ergenecore.js.map +1 -1
  5. package/dist/lib/ErgenecoreContextWrapper.d.ts +45 -12
  6. package/dist/lib/ErgenecoreContextWrapper.js +200 -54
  7. package/dist/lib/ErgenecoreContextWrapper.js.map +1 -1
  8. package/dist/lib/defaults/index.d.ts +1 -0
  9. package/dist/lib/defaults/index.js +1 -0
  10. package/dist/lib/defaults/index.js.map +1 -1
  11. package/dist/lib/defineContext.d.ts +8 -0
  12. package/dist/lib/defineContext.js +10 -0
  13. package/dist/lib/defineContext.js.map +1 -0
  14. package/dist/lib/index.d.ts +8 -1
  15. package/dist/lib/index.js +3 -0
  16. package/dist/lib/index.js.map +1 -1
  17. package/dist/lib/middlewares/CorsMiddleware.d.ts +2 -2
  18. package/dist/lib/middlewares/CorsMiddleware.js +5 -9
  19. package/dist/lib/middlewares/CorsMiddleware.js.map +1 -1
  20. package/dist/lib/middlewares/RateLimiterMiddleware.d.ts +73 -3
  21. package/dist/lib/middlewares/RateLimiterMiddleware.js +95 -7
  22. package/dist/lib/middlewares/RateLimiterMiddleware.js.map +1 -1
  23. package/dist/lib/middlewares/WebSocketOriginMiddleware.d.ts +82 -0
  24. package/dist/lib/middlewares/WebSocketOriginMiddleware.js +81 -0
  25. package/dist/lib/middlewares/WebSocketOriginMiddleware.js.map +1 -0
  26. package/dist/lib/stream/SSEStreamWriter.js +22 -13
  27. package/dist/lib/stream/SSEStreamWriter.js.map +1 -1
  28. package/dist/lib/utils/staticFileReader.d.ts +27 -0
  29. package/dist/lib/utils/staticFileReader.js +172 -0
  30. package/dist/lib/utils/staticFileReader.js.map +1 -0
  31. package/package.json +11 -7
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Asena Ergenecore Adapter
2
2
 
3
- [![Version](https://img.shields.io/badge/version-3.2.1-blue.svg)](https://asena.sh)
3
+ [![Version](https://img.shields.io/npm/v/@asenajs/ergenecore.svg)](https://asena.sh)
4
4
  [![Bun Version](https://img.shields.io/badge/Bun-1.4%2B-blueviolet)](https://bun.sh)
5
5
 
6
6
  **Blazing-fast** native Bun adapter for [Asena.js](https://github.com/asenajs/asena) - Built exclusively with Bun's native APIs for maximum performance.
@@ -40,7 +40,7 @@ Ergenecore is the **fastest** Asena adapter because it:
40
40
  ## Requirements
41
41
 
42
42
  - [Bun](https://bun.sh) v1.4 or higher
43
- - [@asenajs/asena](https://github.com/AsenaJs/Asena) v0.10.1 or higher (peer dependency)
43
+ - [@asenajs/asena](https://github.com/AsenaJs/Asena) v0.12.0 or higher (peer dependency)
44
44
  - [Zod](https://zod.dev) v4.3.6 or higher (peer dependency)
45
45
  - TypeScript v5.9.3 or higher (peer dependency)
46
46
 
@@ -92,7 +92,7 @@ import type { Context } from '@asenajs/ergenecore/types';
92
92
  export class UserController {
93
93
  @Get({ path: '/' })
94
94
  async list(context: Context) {
95
- const page = context.getQuery('page') || '1';
95
+ const page = (await context.getQuery('page')) ?? '1';
96
96
  return context.send({ users: [], page });
97
97
  }
98
98
 
@@ -208,8 +208,8 @@ import type { Context } from '@asenajs/ergenecore/types';
208
208
  // Get route parameters
209
209
  const id = context.getParam('id');
210
210
 
211
- // Get query parameters
212
- const page = context.getQuery('page');
211
+ // Get query parameters (undefined when absent, '' when present but empty, e.g. "?page=")
212
+ const page = await context.getQuery('page');
213
213
 
214
214
  // Get request body
215
215
  const body = await context.getBody();
@@ -226,6 +226,13 @@ return context.send({ success: true });
226
226
  // Send with custom status
227
227
  return context.send({ error: 'Not found' }, 404);
228
228
 
229
+ // Set a response header (replaces any value already set for that header)
230
+ context.setResponseHeader('X-Request-Id', 'abc');
231
+
232
+ // Append to a response header, keeping existing values - for multi-valued
233
+ // headers such as Vary and Link (Set-Cookie is not supported here; use setCookie)
234
+ context.appendResponseHeader('Vary', 'Origin');
235
+
229
236
  // Set cookies
230
237
  context.setCookie('session', 'abc123', {
231
238
  httpOnly: true,
@@ -54,6 +54,7 @@ export declare class Ergenecore extends AsenaAdapter<Context, ValidationSchemaWi
54
54
  * Handler for requests that matched no route
55
55
  */
56
56
  private notFoundHandler?;
57
+ private readonly staticFileReader;
57
58
  /**
58
59
  * Whether the adapter logs errors before handing them to the application.
59
60
  * Set false when your own handler already logs with a correlation id.
@@ -413,6 +414,10 @@ export declare class Ergenecore extends AsenaAdapter<Context, ValidationSchemaWi
413
414
  * @returns Bun-compatible route handler
414
415
  */
415
416
  private createRouteHandler;
417
+ private runRouteHandler;
418
+ private settleRoute;
419
+ private finishRoute;
420
+ private failRoute;
416
421
  /**
417
422
  * Type guard to check if validation schema has hook format
418
423
  *
@@ -432,6 +437,9 @@ export declare class Ergenecore extends AsenaAdapter<Context, ValidationSchemaWi
432
437
  * ```
433
438
  */
434
439
  private isValidationSchemaWithHook;
440
+ /** Prepare each legacy validator target once for this route, preserving method order. */
441
+ private prepareValidationSteps;
442
+ private unwrapValidationSchema;
435
443
  /**
436
444
  * Validates request data using Zod schemas
437
445
  *
@@ -455,7 +463,7 @@ export declare class Ergenecore extends AsenaAdapter<Context, ValidationSchemaWi
455
463
  * @param target - Validation target (body, query, param, header, form)
456
464
  * @returns Data to be validated
457
465
  */
458
- private extractValidationData;
466
+ private createValidationExtractor;
459
467
  /**
460
468
  * Serves static files using Bun.file() API
461
469
  *
@@ -482,6 +490,9 @@ export declare class Ergenecore extends AsenaAdapter<Context, ValidationSchemaWi
482
490
  * ```
483
491
  */
484
492
  private serveStaticFile;
493
+ private statFileResponse;
494
+ private serveResolvedStaticFile;
495
+ private withStaticExtras;
485
496
  /**
486
497
  * Builds response headers for static file serving
487
498
  *