@asenajs/ergenecore 1.2.0 → 1.3.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 (47) hide show
  1. package/README.md +17 -17
  2. package/dist/lib/Ergenecore.d.ts +13 -0
  3. package/dist/lib/Ergenecore.js +136 -58
  4. package/dist/lib/Ergenecore.js.map +1 -1
  5. package/dist/lib/ErgenecoreContextWrapper.d.ts +44 -4
  6. package/dist/lib/ErgenecoreContextWrapper.js +115 -7
  7. package/dist/lib/ErgenecoreContextWrapper.js.map +1 -1
  8. package/dist/lib/ErgenecoreWebsocketAdapter.d.ts +2 -16
  9. package/dist/lib/ErgenecoreWebsocketAdapter.js +20 -48
  10. package/dist/lib/ErgenecoreWebsocketAdapter.js.map +1 -1
  11. package/dist/lib/defaults/ConfigService.d.ts +5 -2
  12. package/dist/lib/defaults/ConfigService.js +1 -1
  13. package/dist/lib/defaults/ConfigService.js.map +1 -1
  14. package/dist/lib/defaults/MiddlewareService.d.ts +1 -1
  15. package/dist/lib/defaults/MiddlewareService.js +1 -1
  16. package/dist/lib/defaults/StaticServeService.d.ts +1 -1
  17. package/dist/lib/defaults/StaticServeService.js +1 -1
  18. package/dist/lib/defaults/ValidationService.d.ts +1 -1
  19. package/dist/lib/defaults/ValidationService.js +1 -1
  20. package/dist/lib/errors.d.ts +24 -5
  21. package/dist/lib/errors.js +15 -4
  22. package/dist/lib/errors.js.map +1 -1
  23. package/dist/lib/index.d.ts +5 -1
  24. package/dist/lib/index.js +6 -0
  25. package/dist/lib/index.js.map +1 -1
  26. package/dist/lib/middlewares/CorsMiddleware.d.ts +1 -1
  27. package/dist/lib/middlewares/CorsMiddleware.js +1 -1
  28. package/dist/lib/middlewares/RateLimiterMiddleware.d.ts +1 -1
  29. package/dist/lib/middlewares/RateLimiterMiddleware.js +5 -2
  30. package/dist/lib/middlewares/RateLimiterMiddleware.js.map +1 -1
  31. package/dist/lib/stream/SSEStreamWriter.d.ts +9 -0
  32. package/dist/lib/stream/SSEStreamWriter.js +18 -0
  33. package/dist/lib/stream/SSEStreamWriter.js.map +1 -0
  34. package/dist/lib/stream/StreamWriter.d.ts +24 -0
  35. package/dist/lib/stream/StreamWriter.js +72 -0
  36. package/dist/lib/stream/StreamWriter.js.map +1 -0
  37. package/dist/lib/stream/index.d.ts +2 -0
  38. package/dist/lib/stream/index.js +3 -0
  39. package/dist/lib/stream/index.js.map +1 -0
  40. package/dist/lib/types/SendPingStrategy.d.ts +4 -0
  41. package/dist/lib/types/SendPingStrategy.js +2 -0
  42. package/dist/lib/types/SendPingStrategy.js.map +1 -0
  43. package/dist/lib/types/Validation.d.ts +3 -3
  44. package/dist/lib/types/index.d.ts +1 -0
  45. package/dist/lib/types/index.js +2 -0
  46. package/dist/lib/types/index.js.map +1 -1
  47. package/package.json +11 -11
@@ -1,3 +1,11 @@
1
+ import type { HttpStatusCode } from '@asenajs/asena/web-types';
2
+ /**
3
+ * Extended ResponseInit with cause support
4
+ */
5
+ export interface HttpExceptionInit extends ResponseInit {
6
+ /** The original error that caused this exception */
7
+ cause?: Error;
8
+ }
1
9
  /**
2
10
  * HTTP Exception for Ergenecore
3
11
  *
@@ -17,6 +25,11 @@
17
25
  * if (!isValid) {
18
26
  * throw new HttpException(400, { error: 'Invalid data' });
19
27
  * }
28
+ *
29
+ * // With cause
30
+ * try { await db.query(...) } catch (err) {
31
+ * throw new HttpException(500, 'Database Error', { cause: err });
32
+ * }
20
33
  * ```
21
34
  */
22
35
  export declare class HttpException extends Error {
@@ -29,21 +42,24 @@ export declare class HttpException extends Error {
29
42
  */
30
43
  readonly body: string | object;
31
44
  /**
32
- * Optional response init options (headers, statusText, etc.)
45
+ * Optional response init options (headers, statusText, cause, etc.)
33
46
  */
34
- readonly options?: ResponseInit;
47
+ readonly options?: HttpExceptionInit;
35
48
  /**
36
49
  * Creates a new HttpException
37
50
  *
38
- * @param status - HTTP status code (e.g., 401, 403, 404)
51
+ * @param status - HTTP status code (e.g., 401, 403, 404) or HttpStatusCode enum value
39
52
  * @param body - Response body (string or object to be JSON stringified)
40
- * @param options - Optional ResponseInit options (headers, statusText, etc.)
53
+ * @param options - Optional HttpExceptionInit options (headers, statusText, cause, etc.)
41
54
  *
42
55
  * @example
43
56
  * ```typescript
44
57
  * // Simple message
45
58
  * throw new HttpException(404, 'Not Found');
46
59
  *
60
+ * // With HttpStatusCode enum
61
+ * throw new HttpException(ClientErrorStatusCode.NotFound, 'Not Found');
62
+ *
47
63
  * // JSON object
48
64
  * throw new HttpException(400, { error: 'Invalid input', field: 'email' });
49
65
  *
@@ -51,9 +67,12 @@ export declare class HttpException extends Error {
51
67
  * throw new HttpException(429, 'Too Many Requests', {
52
68
  * headers: { 'Retry-After': '60' }
53
69
  * });
70
+ *
71
+ * // With cause
72
+ * throw new HttpException(500, 'Internal Error', { cause: originalError });
54
73
  * ```
55
74
  */
56
- constructor(status: number, body?: string | object, options?: ResponseInit);
75
+ constructor(status: HttpStatusCode | number, body?: string | object, options?: HttpExceptionInit);
57
76
  /**
58
77
  * Converts the exception to a Response object
59
78
  *
@@ -17,6 +17,11 @@
17
17
  * if (!isValid) {
18
18
  * throw new HttpException(400, { error: 'Invalid data' });
19
19
  * }
20
+ *
21
+ * // With cause
22
+ * try { await db.query(...) } catch (err) {
23
+ * throw new HttpException(500, 'Database Error', { cause: err });
24
+ * }
20
25
  * ```
21
26
  */
22
27
  export class HttpException extends Error {
@@ -29,21 +34,24 @@ export class HttpException extends Error {
29
34
  */
30
35
  body;
31
36
  /**
32
- * Optional response init options (headers, statusText, etc.)
37
+ * Optional response init options (headers, statusText, cause, etc.)
33
38
  */
34
39
  options;
35
40
  /**
36
41
  * Creates a new HttpException
37
42
  *
38
- * @param status - HTTP status code (e.g., 401, 403, 404)
43
+ * @param status - HTTP status code (e.g., 401, 403, 404) or HttpStatusCode enum value
39
44
  * @param body - Response body (string or object to be JSON stringified)
40
- * @param options - Optional ResponseInit options (headers, statusText, etc.)
45
+ * @param options - Optional HttpExceptionInit options (headers, statusText, cause, etc.)
41
46
  *
42
47
  * @example
43
48
  * ```typescript
44
49
  * // Simple message
45
50
  * throw new HttpException(404, 'Not Found');
46
51
  *
52
+ * // With HttpStatusCode enum
53
+ * throw new HttpException(ClientErrorStatusCode.NotFound, 'Not Found');
54
+ *
47
55
  * // JSON object
48
56
  * throw new HttpException(400, { error: 'Invalid input', field: 'email' });
49
57
  *
@@ -51,11 +59,14 @@ export class HttpException extends Error {
51
59
  * throw new HttpException(429, 'Too Many Requests', {
52
60
  * headers: { 'Retry-After': '60' }
53
61
  * });
62
+ *
63
+ * // With cause
64
+ * throw new HttpException(500, 'Internal Error', { cause: originalError });
54
65
  * ```
55
66
  */
56
67
  constructor(status, body = '', options) {
57
68
  const message = typeof body === 'string' ? body : JSON.stringify(body);
58
- super(message);
69
+ super(message, options?.cause ? { cause: options.cause } : undefined);
59
70
  this.name = 'HttpException';
60
71
  this.status = status;
61
72
  this.body = body;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../lib/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC;;OAEG;IACa,MAAM,CAAS;IAE/B;;OAEG;IACa,IAAI,CAAkB;IAEtC;;OAEG;IACa,OAAO,CAAgB;IAEvC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,YAAmB,MAAc,EAAE,OAAwB,EAAE,EAAE,OAAsB;QACnF,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,WAAW;QAChB,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEnD,gFAAgF;QAChF,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU;YACpC,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD;;OAEG;IACa,QAAQ,CAAW;IAEnC;;;;OAIG;IACH,YAAmB,QAAkB;QACnC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../lib/errors.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC;;OAEG;IACa,MAAM,CAAS;IAE/B;;OAEG;IACa,IAAI,CAAkB;IAEtC;;OAEG;IACa,OAAO,CAAqB;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,YAAmB,MAA+B,EAAE,OAAwB,EAAE,EAAE,OAA2B;QACzG,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEvE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,WAAW;QAChB,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEnD,gFAAgF;QAChF,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU;YACpC,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD;;OAEG;IACa,QAAQ,CAAW;IAEnC;;;;OAIG;IACH,YAAmB,QAAkB;QACnC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
@@ -24,12 +24,16 @@
24
24
  export { Ergenecore } from './Ergenecore';
25
25
  export { ErgenecoreContextWrapper } from './ErgenecoreContextWrapper';
26
26
  export { ErgenecoreWebsocketAdapter } from './ErgenecoreWebsocketAdapter';
27
- export { HttpException } from './errors';
27
+ export { StreamWriter } from './stream/StreamWriter';
28
+ export { SSEStreamWriter } from './stream/SSEStreamWriter';
29
+ export { HttpException, type HttpExceptionInit } from './errors';
28
30
  export { createErgenecoreAdapter, createProductionAdapter, createDevelopmentAdapter, type ErgenecoreOptions, } from './utils/factory';
29
31
  export { ValidationService } from './defaults/ValidationService';
30
32
  export { ConfigService } from './defaults/ConfigService';
31
33
  export { MiddlewareService } from './defaults/MiddlewareService';
32
34
  export { StaticServeService } from './defaults/StaticServeService';
35
+ export { CorsMiddleware, type CorsOptions } from './middlewares/CorsMiddleware';
36
+ export { RateLimiterMiddleware, type RateLimiterOptions } from './middlewares/RateLimiterMiddleware';
33
37
  export type { Context } from './ErgenecoreContextWrapper';
34
38
  export type { ErgenecoreHandler, ErgenecoreNext } from './types/Handler';
35
39
  export type { StaticServeExtras } from './types/StaticServeExtras';
package/dist/lib/index.js CHANGED
@@ -25,6 +25,9 @@
25
25
  export { Ergenecore } from './Ergenecore';
26
26
  export { ErgenecoreContextWrapper } from './ErgenecoreContextWrapper';
27
27
  export { ErgenecoreWebsocketAdapter } from './ErgenecoreWebsocketAdapter';
28
+ // Stream writers
29
+ export { StreamWriter } from './stream/StreamWriter';
30
+ export { SSEStreamWriter } from './stream/SSEStreamWriter';
28
31
  // Error classes
29
32
  export { HttpException } from './errors';
30
33
  // Factory functions
@@ -34,4 +37,7 @@ export { ValidationService } from './defaults/ValidationService';
34
37
  export { ConfigService } from './defaults/ConfigService';
35
38
  export { MiddlewareService } from './defaults/MiddlewareService';
36
39
  export { StaticServeService } from './defaults/StaticServeService';
40
+ // Built-in middlewares
41
+ export { CorsMiddleware } from './middlewares/CorsMiddleware';
42
+ export { RateLimiterMiddleware } from './middlewares/RateLimiterMiddleware';
37
43
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,eAAe;AACf,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,oBAAoB;AACpB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GAEzB,MAAM,iBAAiB,CAAC;AAEzB,uBAAuB;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,eAAe;AACf,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAA0B,MAAM,UAAU,CAAC;AAEjE,oBAAoB;AACpB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GAEzB,MAAM,iBAAiB,CAAC;AAEzB,uBAAuB;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,uBAAuB;AACvB,OAAO,EAAE,cAAc,EAAoB,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAA2B,MAAM,qCAAqC,CAAC"}
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @example
13
13
  * ```typescript
14
- * import { Middleware } from '@asenajs/asena/server';
14
+ * import { Middleware } from '@asenajs/asena/decorators';
15
15
  * import { CorsMiddleware } from '@asenajs/ergenecore';
16
16
  *
17
17
  * @Middleware()
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @example
13
13
  * ```typescript
14
- * import { Middleware } from '@asenajs/asena/server';
14
+ * import { Middleware } from '@asenajs/asena/decorators';
15
15
  * import { CorsMiddleware } from '@asenajs/ergenecore';
16
16
  *
17
17
  * @Middleware()
@@ -12,7 +12,7 @@
12
12
  *
13
13
  * **Usage in Asena Application:**
14
14
  * ```typescript
15
- * import { Middleware } from '@asenajs/asena/server';
15
+ * import { Middleware } from '@asenajs/asena/decorators';
16
16
  * import { RateLimiterMiddleware } from '@asenajs/ergenecore';
17
17
  *
18
18
  * // Create custom rate limiter for your needs
@@ -12,7 +12,7 @@
12
12
  *
13
13
  * **Usage in Asena Application:**
14
14
  * ```typescript
15
- * import { Middleware } from '@asenajs/asena/server';
15
+ * import { Middleware } from '@asenajs/asena/decorators';
16
16
  * import { RateLimiterMiddleware } from '@asenajs/ergenecore';
17
17
  *
18
18
  * // Create custom rate limiter for your needs
@@ -269,7 +269,10 @@ export class RateLimiterMiddleware extends MiddlewareService {
269
269
  * @returns Client identifier
270
270
  */
271
271
  defaultKeyGenerator = (context) => {
272
- return context.req.headers.get('x-forwarded-for') || context.req.headers.get('cf-connecting-ip') || 'unknown';
272
+ return (context.req.headers.get('x-forwarded-for') ||
273
+ context.req.headers.get('cf-connecting-ip') ||
274
+ context.getRequestIp?.() ||
275
+ 'unknown');
273
276
  };
274
277
  /**
275
278
  * Setup automatic cleanup of inactive buckets
@@ -1 +1 @@
1
- {"version":3,"file":"RateLimiterMiddleware.js","sourceRoot":"","sources":["../../../lib/middlewares/RateLimiterMiddleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RateLimiterMiddleware.js","sourceRoot":"","sources":["../../../lib/middlewares/RateLimiterMiddleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { AsenaSSEStreamWriter, SSEMessage } from '@asenajs/asena/adapter';
2
+ import { StreamWriter } from './StreamWriter';
3
+ /**
4
+ * SSE stream writer that extends StreamWriter with SSE message formatting.
5
+ * Formats messages according to the Server-Sent Events specification.
6
+ */
7
+ export declare class SSEStreamWriter extends StreamWriter implements AsenaSSEStreamWriter {
8
+ writeSSE(message: SSEMessage): Promise<void>;
9
+ }
@@ -0,0 +1,18 @@
1
+ import { StreamWriter } from './StreamWriter';
2
+ /**
3
+ * SSE stream writer that extends StreamWriter with SSE message formatting.
4
+ * Formats messages according to the Server-Sent Events specification.
5
+ */
6
+ export class SSEStreamWriter extends StreamWriter {
7
+ async writeSSE(message) {
8
+ const dataLines = message.data
9
+ .split(/\r\n|\r|\n/)
10
+ .map((line) => `data: ${line}`)
11
+ .join('\n');
12
+ const sseData = [message.event && `event: ${message.event}`, dataLines, message.id && `id: ${message.id}`, message.retry && `retry: ${message.retry}`]
13
+ .filter(Boolean)
14
+ .join('\n') + '\n\n';
15
+ await this.write(sseData);
16
+ }
17
+ }
18
+ //# sourceMappingURL=SSEStreamWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SSEStreamWriter.js","sourceRoot":"","sources":["../../../lib/stream/SSEStreamWriter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IACxC,KAAK,CAAC,QAAQ,CAAC,OAAmB;QACvC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI;aAC3B,KAAK,CAAC,YAAY,CAAC;aACnB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,OAAO,GACX,CAAC,OAAO,CAAC,KAAK,IAAI,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,IAAI,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC;aACnI,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAEzB,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ import type { AsenaStreamWriter } from '@asenajs/asena/adapter';
2
+ /**
3
+ * Generic stream writer implementation using Web Streams API.
4
+ * Built on TransformStream - zero external dependencies.
5
+ */
6
+ export declare class StreamWriter implements AsenaStreamWriter {
7
+ private writer;
8
+ private encoder;
9
+ private writable;
10
+ private abortSubscribers;
11
+ readonly responseReadable: ReadableStream;
12
+ aborted: boolean;
13
+ closed: boolean;
14
+ constructor(writable: WritableStream, readable: ReadableStream);
15
+ write(input: Uint8Array | string): Promise<void>;
16
+ writeln(input: string): Promise<void>;
17
+ close(): Promise<void>;
18
+ pipe(body: ReadableStream): Promise<void>;
19
+ onAbort(listener: () => void | Promise<void>): void;
20
+ /**
21
+ * Abort the stream. Called when the client disconnects.
22
+ */
23
+ abort(): void;
24
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Generic stream writer implementation using Web Streams API.
3
+ * Built on TransformStream - zero external dependencies.
4
+ */
5
+ export class StreamWriter {
6
+ writer;
7
+ encoder;
8
+ writable;
9
+ abortSubscribers = [];
10
+ responseReadable;
11
+ aborted = false;
12
+ closed = false;
13
+ constructor(writable, readable) {
14
+ this.writable = writable;
15
+ this.writer = writable.getWriter();
16
+ this.encoder = new TextEncoder();
17
+ const reader = readable.getReader();
18
+ this.abortSubscribers.push(async () => {
19
+ await reader.cancel();
20
+ });
21
+ this.responseReadable = new ReadableStream({
22
+ async pull(controller) {
23
+ const { done, value } = await reader.read();
24
+ done ? controller.close() : controller.enqueue(value);
25
+ },
26
+ cancel: () => {
27
+ this.abort();
28
+ },
29
+ });
30
+ }
31
+ async write(input) {
32
+ try {
33
+ if (typeof input === 'string') {
34
+ input = this.encoder.encode(input);
35
+ }
36
+ await this.writer.write(input);
37
+ }
38
+ catch {
39
+ // Stream already closed or errored
40
+ }
41
+ }
42
+ async writeln(input) {
43
+ await this.write(input + '\n');
44
+ }
45
+ async close() {
46
+ try {
47
+ await this.writer.close();
48
+ }
49
+ catch {
50
+ // Stream already closed
51
+ }
52
+ this.closed = true;
53
+ }
54
+ async pipe(body) {
55
+ this.writer.releaseLock();
56
+ await body.pipeTo(this.writable, { preventClose: true });
57
+ this.writer = this.writable.getWriter();
58
+ }
59
+ onAbort(listener) {
60
+ this.abortSubscribers.push(listener);
61
+ }
62
+ /**
63
+ * Abort the stream. Called when the client disconnects.
64
+ */
65
+ abort() {
66
+ if (!this.aborted) {
67
+ this.aborted = true;
68
+ this.abortSubscribers.forEach((subscriber) => subscriber());
69
+ }
70
+ }
71
+ }
72
+ //# sourceMappingURL=StreamWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamWriter.js","sourceRoot":"","sources":["../../../lib/stream/StreamWriter.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,CAA8B;IAEpC,OAAO,CAAc;IAErB,QAAQ,CAAiB;IAEzB,gBAAgB,GAAmC,EAAE,CAAC;IAE9C,gBAAgB,CAAiB;IAE1C,OAAO,GAAG,KAAK,CAAC;IAEhB,MAAM,GAAG,KAAK,CAAC;IAEtB,YAAmB,QAAwB,EAAE,QAAwB;QACnE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAEjC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAEpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,GAAG,IAAI,cAAc,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,UAAU;gBACnB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAE5C,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,KAA0B;QAC3C,IAAI,CAAC;YACH,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;YAED,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,KAAa;QAChC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAoB;QACpC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC1C,CAAC;IAEM,OAAO,CAAC,QAAoC;QACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { StreamWriter } from './StreamWriter';
2
+ export { SSEStreamWriter } from './SSEStreamWriter';
@@ -0,0 +1,3 @@
1
+ export { StreamWriter } from './StreamWriter';
2
+ export { SSEStreamWriter } from './SSEStreamWriter';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/stream/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @deprecated Import SendPingStrategy from '@asenajs/asena/web-socket' instead.
3
+ */
4
+ export type { SendPingStrategy } from '@asenajs/asena/web-socket';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SendPingStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SendPingStrategy.js","sourceRoot":"","sources":["../../../lib/types/SendPingStrategy.ts"],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import type z from 'zod';
2
2
  import type { Context } from '../ErgenecoreContextWrapper';
3
3
  export type ValidationSchema = z.ZodType<any, any, any>;
4
- export interface ValidationSchemaWithHook {
5
- schema: ValidationSchema;
6
- hook?: (result: any, context: Context) => any;
4
+ export interface ValidationSchemaWithHook<T extends z.ZodType = z.ZodType> {
5
+ schema: T;
6
+ hook?: (result: z.ZodSafeParseResult<z.output<T>>, context: Context) => Response | void | Promise<Response | void>;
7
7
  }
@@ -21,4 +21,5 @@
21
21
  export type { ErgenecoreHandler, ErgenecoreNext } from './Handler';
22
22
  export * from './StaticServeExtras';
23
23
  export * from './Validation';
24
+ export * from './SendPingStrategy';
24
25
  export type { Context } from '../ErgenecoreContextWrapper';
@@ -22,4 +22,6 @@
22
22
  export * from './StaticServeExtras';
23
23
  // Validation types
24
24
  export * from './Validation';
25
+ // Ping strategy type
26
+ export * from './SendPingStrategy';
25
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,qBAAqB;AACrB,cAAc,qBAAqB,CAAC;AAEpC,mBAAmB;AACnB,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,qBAAqB;AACrB,cAAc,qBAAqB,CAAC;AAEpC,mBAAmB;AACnB,cAAc,cAAc,CAAC;AAE7B,qBAAqB;AACrB,cAAc,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "README.md",
10
10
  "LICENSE"
11
11
  ],
12
- "version": "1.2.0",
12
+ "version": "1.3.0",
13
13
  "author": "LibirSoft",
14
14
  "license": "MIT",
15
15
  "scripts": {
@@ -30,27 +30,27 @@
30
30
  "check:fix": "bun run lint:fix && bun run format"
31
31
  },
32
32
  "devDependencies": {
33
- "@asenajs/asena": "latest",
34
- "@changesets/cli": "^2.29.7",
33
+ "@asenajs/asena": "^0.7.0",
34
+ "@changesets/cli": "^2.30.0",
35
35
  "@types/bun": "latest",
36
- "@typescript-eslint/eslint-plugin": "^8.46.2",
37
- "@typescript-eslint/parser": "^8.46.2",
38
- "eslint": "^9.39.0",
36
+ "@typescript-eslint/eslint-plugin": "^8.58.0",
37
+ "@typescript-eslint/parser": "^8.58.0",
38
+ "eslint": "^9.39.4",
39
39
  "eslint-config-alloy": "^5.1.2",
40
40
  "eslint-config-prettier": "^9.1.2",
41
41
  "eslint-plugin-alloy": "^1.2.1",
42
42
  "eslint-plugin-import": "^2.32.0",
43
43
  "eslint-plugin-n": "^16.6.2",
44
- "eslint-plugin-prettier": "^5.5.4",
44
+ "eslint-plugin-prettier": "^5.5.5",
45
45
  "eslint-plugin-promise": "^6.6.0",
46
- "prettier": "^3.6.2",
47
- "typescript-eslint": "^8.46.2"
46
+ "prettier": "^3.8.1",
47
+ "typescript-eslint": "^8.58.0"
48
48
  },
49
49
  "peerDependencies": {
50
- "@asenajs/asena": "^0.6.0",
50
+ "@asenajs/asena": "^0.7.0",
51
51
  "typescript": "^5.8.2"
52
52
  },
53
53
  "dependencies": {
54
- "zod": "^4.1.12"
54
+ "zod": "^4.3.6"
55
55
  }
56
56
  }