stratal 0.0.11 → 0.0.13

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 (107) hide show
  1. package/README.md +1 -1
  2. package/dist/application.d.ts +6 -0
  3. package/dist/application.d.ts.map +1 -1
  4. package/dist/application.js +1 -1
  5. package/dist/application.js.map +1 -1
  6. package/dist/errors/application-error.d.ts +4 -3
  7. package/dist/errors/application-error.d.ts.map +1 -1
  8. package/dist/errors/application-error.js +12 -7
  9. package/dist/errors/application-error.js.map +1 -1
  10. package/dist/errors/error-codes.d.ts +4 -0
  11. package/dist/errors/error-codes.d.ts.map +1 -1
  12. package/dist/errors/error-codes.js +4 -0
  13. package/dist/errors/error-codes.js.map +1 -1
  14. package/dist/i18n/messages/en/errors.d.ts +2 -0
  15. package/dist/i18n/messages/en/errors.d.ts.map +1 -1
  16. package/dist/i18n/messages/en/errors.js +3 -0
  17. package/dist/i18n/messages/en/errors.js.map +1 -1
  18. package/dist/middleware/middleware-configuration.service.d.ts +8 -2
  19. package/dist/middleware/middleware-configuration.service.d.ts.map +1 -1
  20. package/dist/middleware/middleware-configuration.service.js +32 -3
  21. package/dist/middleware/middleware-configuration.service.js.map +1 -1
  22. package/dist/middleware/types.d.ts +2 -0
  23. package/dist/middleware/types.d.ts.map +1 -1
  24. package/dist/openapi/index.d.ts +1 -1
  25. package/dist/openapi/index.d.ts.map +1 -1
  26. package/dist/openapi/index.js.map +1 -1
  27. package/dist/openapi/openapi.module.d.ts.map +1 -1
  28. package/dist/openapi/openapi.module.js +0 -1
  29. package/dist/openapi/openapi.module.js.map +1 -1
  30. package/dist/openapi/services/openapi-config.service.js +1 -1
  31. package/dist/openapi/services/openapi-config.service.js.map +1 -1
  32. package/dist/openapi/services/openapi.service.d.ts.map +1 -1
  33. package/dist/openapi/services/openapi.service.js +16 -13
  34. package/dist/openapi/services/openapi.service.js.map +1 -1
  35. package/dist/openapi/types.d.ts +26 -3
  36. package/dist/openapi/types.d.ts.map +1 -1
  37. package/dist/router/constants.d.ts +15 -0
  38. package/dist/router/constants.d.ts.map +1 -1
  39. package/dist/router/constants.js +16 -1
  40. package/dist/router/constants.js.map +1 -1
  41. package/dist/router/decorators/controller.decorator.d.ts +8 -1
  42. package/dist/router/decorators/controller.decorator.d.ts.map +1 -1
  43. package/dist/router/decorators/controller.decorator.js +10 -0
  44. package/dist/router/decorators/controller.decorator.js.map +1 -1
  45. package/dist/router/decorators/http-method.decorator.d.ts +83 -0
  46. package/dist/router/decorators/http-method.decorator.d.ts.map +1 -0
  47. package/dist/router/decorators/http-method.decorator.js +113 -0
  48. package/dist/router/decorators/http-method.decorator.js.map +1 -0
  49. package/dist/router/decorators/index.d.ts +1 -0
  50. package/dist/router/decorators/index.d.ts.map +1 -1
  51. package/dist/router/decorators/index.js +1 -0
  52. package/dist/router/decorators/index.js.map +1 -1
  53. package/dist/router/decorators/route.decorator.d.ts +5 -2
  54. package/dist/router/decorators/route.decorator.d.ts.map +1 -1
  55. package/dist/router/decorators/route.decorator.js +4 -1
  56. package/dist/router/decorators/route.decorator.js.map +1 -1
  57. package/dist/router/hono-app.d.ts +2 -2
  58. package/dist/router/hono-app.d.ts.map +1 -1
  59. package/dist/router/hono-app.js +4 -4
  60. package/dist/router/hono-app.js.map +1 -1
  61. package/dist/router/index.d.ts +6 -3
  62. package/dist/router/index.d.ts.map +1 -1
  63. package/dist/router/index.js +3 -2
  64. package/dist/router/index.js.map +1 -1
  65. package/dist/router/router-context.d.ts +29 -3
  66. package/dist/router/router-context.d.ts.map +1 -1
  67. package/dist/router/router-context.js +34 -0
  68. package/dist/router/router-context.js.map +1 -1
  69. package/dist/router/services/route-registration.service.d.ts +38 -3
  70. package/dist/router/services/route-registration.service.d.ts.map +1 -1
  71. package/dist/router/services/route-registration.service.js +269 -20
  72. package/dist/router/services/route-registration.service.js.map +1 -1
  73. package/dist/router/types.d.ts +66 -9
  74. package/dist/router/types.d.ts.map +1 -1
  75. package/dist/websocket/decorators/gateway.decorator.d.ts +39 -0
  76. package/dist/websocket/decorators/gateway.decorator.d.ts.map +1 -0
  77. package/dist/websocket/decorators/gateway.decorator.js +55 -0
  78. package/dist/websocket/decorators/gateway.decorator.js.map +1 -0
  79. package/dist/websocket/decorators/index.d.ts +3 -0
  80. package/dist/websocket/decorators/index.d.ts.map +1 -0
  81. package/dist/websocket/decorators/index.js +3 -0
  82. package/dist/websocket/decorators/index.js.map +1 -0
  83. package/dist/websocket/decorators/ws-event.decorator.d.ts +59 -0
  84. package/dist/websocket/decorators/ws-event.decorator.d.ts.map +1 -0
  85. package/dist/websocket/decorators/ws-event.decorator.js +94 -0
  86. package/dist/websocket/decorators/ws-event.decorator.js.map +1 -0
  87. package/dist/websocket/errors/websocket-body-not-available.error.d.ts +5 -0
  88. package/dist/websocket/errors/websocket-body-not-available.error.d.ts.map +1 -0
  89. package/dist/websocket/errors/websocket-body-not-available.error.js +7 -0
  90. package/dist/websocket/errors/websocket-body-not-available.error.js.map +1 -0
  91. package/dist/websocket/errors/websocket-duplicate-event-handler.error.d.ts +5 -0
  92. package/dist/websocket/errors/websocket-duplicate-event-handler.error.d.ts.map +1 -0
  93. package/dist/websocket/errors/websocket-duplicate-event-handler.error.js +7 -0
  94. package/dist/websocket/errors/websocket-duplicate-event-handler.error.js.map +1 -0
  95. package/dist/websocket/gateway-context.d.ts +51 -0
  96. package/dist/websocket/gateway-context.d.ts.map +1 -0
  97. package/dist/websocket/gateway-context.js +66 -0
  98. package/dist/websocket/gateway-context.js.map +1 -0
  99. package/dist/websocket/index.d.ts +7 -0
  100. package/dist/websocket/index.d.ts.map +1 -0
  101. package/dist/websocket/index.js +5 -0
  102. package/dist/websocket/index.js.map +1 -0
  103. package/dist/websocket/types.d.ts +7 -0
  104. package/dist/websocket/types.d.ts.map +1 -0
  105. package/dist/websocket/types.js +2 -0
  106. package/dist/websocket/types.js.map +1 -0
  107. package/package.json +21 -15
@@ -0,0 +1,66 @@
1
+ import { RouterContext } from '../router/router-context';
2
+ import { WebSocketBodyNotAvailableError } from './errors/websocket-body-not-available.error';
3
+ /**
4
+ * WebSocket gateway context
5
+ *
6
+ * Extends RouterContext with WebSocket-specific methods.
7
+ * Inherits `getContainer()`, `param()`, `query()`, `header()`, `getLocale()`
8
+ * from RouterContext. HTTP response methods (`json()`, `redirect()`, etc.) are
9
+ * inherited but harmless post-upgrade.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * @OnMessage()
14
+ * handleMessage(evt: MessageEvent, ctx: GatewayContext) {
15
+ * ctx.send('ack') // convenience method
16
+ * ctx.header('Authorization') // upgrade request headers
17
+ * }
18
+ * ```
19
+ */
20
+ export class GatewayContext extends RouterContext {
21
+ ws;
22
+ constructor(c, ws) {
23
+ super(c);
24
+ this.ws = ws;
25
+ }
26
+ /** Send data through the WebSocket connection */
27
+ send(data) {
28
+ this.ws.send(data);
29
+ }
30
+ /** Close the WebSocket connection */
31
+ close(code, reason) {
32
+ this.ws.close(code, reason);
33
+ }
34
+ /** Current WebSocket ready state */
35
+ get readyState() {
36
+ return this.ws.readyState;
37
+ }
38
+ /**
39
+ * Get route parameter value from the raw request (no OpenAPI validation)
40
+ *
41
+ * @param key - Parameter name (e.g., 'id' for /ws/chat/:id)
42
+ */
43
+ param(key) {
44
+ return this.c.req.param(key);
45
+ }
46
+ /**
47
+ * Get query parameter value from the raw request (no OpenAPI validation)
48
+ *
49
+ * @param key - Query parameter name
50
+ */
51
+ query(key) {
52
+ if (key) {
53
+ return this.c.req.query(key);
54
+ }
55
+ return this.c.req.query();
56
+ }
57
+ /**
58
+ * Request body is not available in WebSocket gateways
59
+ *
60
+ * @throws WebSocketBodyNotAvailableError always — WebSocket upgrade requests do not have a body
61
+ */
62
+ body() {
63
+ throw new WebSocketBodyNotAvailableError();
64
+ }
65
+ }
66
+ //# sourceMappingURL=gateway-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-context.js","sourceRoot":"","sources":["../../src/websocket/gateway-context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAA;AAE5F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,cAAe,SAAQ,aAAa;IACI;IAAnD,YAAY,CAAqB,EAAkB,EAAa;QAC9D,KAAK,CAAC,CAAC,CAAC,CAAA;QADyC,OAAE,GAAF,EAAE,CAAW;IAEhE,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC,IAAoD;QACvD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,IAAa,EAAE,MAAe;QAClC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED,oCAAoC;IACpC,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAA;IAC3B,CAAC;IAED;;;;OAIG;IACM,KAAK,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAE,CAAA;IAC/B,CAAC;IAED;;;;OAIG;IACM,KAAK,CAAsG,GAAO;QACzH,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAA;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAA8B,CAAA;IACvD,CAAC;IAED;;;;OAIG;IACM,IAAI;QACX,MAAM,IAAI,8BAA8B,EAAE,CAAA;IAC5C,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export type { WSContext, WSEvents, WSMessageReceive, WSReadyState } from 'hono/ws';
2
+ export { Gateway, isGateway, OnMessage, OnClose, OnError, getWsOnMessageMethod, getWsOnCloseMethod, getWsOnErrorMethod } from './decorators';
3
+ export { WebSocketBodyNotAvailableError } from './errors/websocket-body-not-available.error';
4
+ export { WebSocketDuplicateEventHandlerError } from './errors/websocket-duplicate-event-handler.error';
5
+ export { GatewayContext } from './gateway-context';
6
+ export type { GatewayOptions } from './types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/websocket/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC5I,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAA;AAC5F,OAAO,EAAE,mCAAmC,EAAE,MAAM,kDAAkD,CAAA;AACtG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { Gateway, isGateway, OnMessage, OnClose, OnError, getWsOnMessageMethod, getWsOnCloseMethod, getWsOnErrorMethod } from './decorators';
2
+ export { WebSocketBodyNotAvailableError } from './errors/websocket-body-not-available.error';
3
+ export { WebSocketDuplicateEventHandlerError } from './errors/websocket-duplicate-event-handler.error';
4
+ export { GatewayContext } from './gateway-context';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/websocket/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC5I,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAA;AAC5F,OAAO,EAAE,mCAAmC,EAAE,MAAM,kDAAkD,CAAA;AACtG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { type ControllerOptions } from "../router/types";
2
+ /**
3
+ * Gateway options for @Gateway() decorator
4
+ * Subset of ControllerOptions relevant to WebSocket gateways (no OpenAPI-specific fields)
5
+ */
6
+ export type GatewayOptions = Pick<ControllerOptions, 'version'>;
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/websocket/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/websocket/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stratal",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "description": "A modular Cloudflare Workers framework with dependency injection, queue-based events, and type-safe configuration",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -58,6 +58,10 @@
58
58
  "types": "./dist/i18n/validation/index.d.ts",
59
59
  "import": "./dist/i18n/validation/index.js"
60
60
  },
61
+ "./websocket": {
62
+ "types": "./dist/websocket/index.d.ts",
63
+ "import": "./dist/websocket/index.js"
64
+ },
61
65
  "./*": {
62
66
  "types": "./dist/*/index.d.ts",
63
67
  "import": "./dist/*/index.js"
@@ -80,12 +84,12 @@
80
84
  "lint:fix": "npx eslint --fix ."
81
85
  },
82
86
  "dependencies": {
87
+ "@hono/swagger-ui": "^0.5.0",
83
88
  "@hono/zod-openapi": "^1.2.2",
84
- "@intlify/core-base": "^11.2.8",
85
- "@intlify/message-compiler": "^11.2.8",
86
- "@scalar/hono-api-reference": "^0.10.0",
89
+ "@intlify/core-base": "^11.3.0",
90
+ "@intlify/message-compiler": "^11.3.0",
87
91
  "@xmldom/xmldom": "^0.8.11",
88
- "hono": "^4.12.5",
92
+ "hono": "^4.12.8",
89
93
  "reflect-metadata": "^0.2.2",
90
94
  "tsyringe": "^4.10.0",
91
95
  "zod": "^4.3.6"
@@ -131,24 +135,26 @@
131
135
  }
132
136
  },
133
137
  "devDependencies": {
134
- "@aws-sdk/client-s3": "3.1004.0",
135
- "@aws-sdk/lib-storage": "^3.1004.0",
136
- "@aws-sdk/s3-request-presigner": "3.1004.0",
137
- "@cloudflare/vitest-pool-workers": "^0.12.20",
138
- "@cloudflare/workers-types": "4.20260307.1",
139
- "@react-email/components": "^1.0.8",
138
+ "@aws-sdk/client-s3": "3.1009.0",
139
+ "@aws-sdk/lib-storage": "^3.1009.0",
140
+ "@aws-sdk/s3-request-presigner": "3.1009.0",
141
+ "@cloudflare/vitest-pool-workers": "patch:@cloudflare/vitest-pool-workers@npm%3A0.13.0#~/.yarn/patches/@cloudflare-vitest-pool-workers-npm-0.13.0-47105599c6.patch",
142
+ "@cloudflare/workers-types": "4.20260313.1",
143
+ "@react-email/components": "^1.0.9",
140
144
  "@stratal/testing": "workspace:*",
141
145
  "@tus/server": "^2.3.0",
142
- "@types/node": "^25.3.5",
146
+ "@types/node": "^25.5.0",
143
147
  "@types/nodemailer": "^7.0.11",
144
148
  "@types/react": "^19.2.14",
145
149
  "@types/react-dom": "^19.2.3",
146
- "@vitest/coverage-v8": "^4.0.18",
147
- "nodemailer": "^8.0.1",
150
+ "@vitest/coverage-v8": "^4.1.0",
151
+ "@vitest/runner": "~4.1.0",
152
+ "@vitest/snapshot": "~4.1.0",
153
+ "nodemailer": "^8.0.2",
148
154
  "react": "^19.2.4",
149
155
  "react-dom": "^19.2.4",
150
156
  "resend": "^6.9.3",
151
157
  "typescript": "^5.9.3",
152
- "vitest": "~3.2.0"
158
+ "vitest": "~4.1.0"
153
159
  }
154
160
  }