@asenajs/asena 0.3.2 → 0.4.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 (126) hide show
  1. package/README.md +165 -140
  2. package/dist/index.d.ts +2 -1
  3. package/dist/index.js +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/adapter/AsenaAdapter.d.ts +19 -3
  6. package/dist/lib/adapter/AsenaAdapter.js.map +1 -1
  7. package/dist/lib/adapter/AsenaWebsocketAdapter.d.ts +2 -2
  8. package/dist/lib/adapter/AsenaWebsocketAdapter.js.map +1 -1
  9. package/dist/lib/adapter/types/RouteParams.d.ts +3 -0
  10. package/dist/lib/adapter/types/ServeOptions.d.ts +2 -2
  11. package/dist/lib/adapter/types/index.d.ts +4 -4
  12. package/dist/lib/adapter/types/index.js +4 -4
  13. package/dist/lib/adapter/types/index.js.map +1 -1
  14. package/dist/lib/ioc/CircularDependencyDetector.d.ts +49 -0
  15. package/dist/lib/ioc/CircularDependencyDetector.js +69 -0
  16. package/dist/lib/ioc/CircularDependencyDetector.js.map +1 -0
  17. package/dist/lib/ioc/Container.d.ts +9 -0
  18. package/dist/lib/ioc/Container.js +42 -11
  19. package/dist/lib/ioc/Container.js.map +1 -1
  20. package/dist/lib/ioc/CoreContainer.d.ts +78 -0
  21. package/dist/lib/ioc/CoreContainer.js +135 -0
  22. package/dist/lib/ioc/CoreContainer.js.map +1 -0
  23. package/dist/lib/ioc/IocEngine.d.ts +16 -6
  24. package/dist/lib/ioc/IocEngine.js +35 -7
  25. package/dist/lib/ioc/IocEngine.js.map +1 -1
  26. package/dist/lib/ioc/component/index.d.ts +1 -1
  27. package/dist/lib/ioc/component/index.js +1 -1
  28. package/dist/lib/ioc/component/index.js.map +1 -1
  29. package/dist/lib/ioc/constants/ComponentConstants.d.ts +27 -18
  30. package/dist/lib/ioc/constants/ComponentConstants.js +34 -20
  31. package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
  32. package/dist/lib/ioc/decorators/CoreService.d.ts +8 -0
  33. package/dist/lib/ioc/decorators/CoreService.js +27 -0
  34. package/dist/lib/ioc/decorators/CoreService.js.map +1 -0
  35. package/dist/lib/ioc/decorators/index.d.ts +1 -0
  36. package/dist/lib/ioc/decorators/index.js +2 -0
  37. package/dist/lib/ioc/decorators/index.js.map +1 -0
  38. package/dist/lib/ioc/index.d.ts +5 -0
  39. package/dist/lib/ioc/index.js +5 -0
  40. package/dist/lib/ioc/index.js.map +1 -1
  41. package/dist/lib/ioc/types/CoreBootstrapPhase.d.ts +15 -0
  42. package/dist/lib/ioc/types/CoreBootstrapPhase.js +17 -0
  43. package/dist/lib/ioc/types/CoreBootstrapPhase.js.map +1 -0
  44. package/dist/lib/ioc/types/ICoreService.d.ts +9 -0
  45. package/dist/lib/ioc/types/ICoreService.js +2 -0
  46. package/dist/lib/ioc/types/ICoreService.js.map +1 -0
  47. package/dist/lib/ioc/types/ICoreServiceNamesType.d.ts +18 -0
  48. package/dist/lib/ioc/types/ICoreServiceNamesType.js +23 -0
  49. package/dist/lib/ioc/types/ICoreServiceNamesType.js.map +1 -0
  50. package/dist/lib/ioc/types/decorators/ControllerParams.d.ts +1 -1
  51. package/dist/lib/ioc/types/index.d.ts +3 -0
  52. package/dist/lib/ioc/types/index.js +3 -0
  53. package/dist/lib/ioc/types/index.js.map +1 -1
  54. package/dist/lib/server/AsenaServer.d.ts +85 -14
  55. package/dist/lib/server/AsenaServer.js +169 -61
  56. package/dist/lib/server/AsenaServer.js.map +1 -1
  57. package/dist/lib/server/AsenaServerFactory.d.ts +26 -0
  58. package/dist/lib/server/AsenaServerFactory.js +58 -0
  59. package/dist/lib/server/AsenaServerFactory.js.map +1 -0
  60. package/dist/lib/server/config/AsenaConfig.d.ts +91 -18
  61. package/dist/lib/server/decorators/Override.js +1 -1
  62. package/dist/lib/server/decorators/Override.js.map +1 -1
  63. package/dist/lib/server/decorators/components/Config.d.ts +1 -1
  64. package/dist/lib/server/decorators/components/Config.js +1 -1
  65. package/dist/lib/server/decorators/components/Config.js.map +1 -1
  66. package/dist/lib/server/decorators/components/Controller.d.ts +1 -1
  67. package/dist/lib/server/decorators/components/Controller.js +2 -2
  68. package/dist/lib/server/decorators/components/Controller.js.map +1 -1
  69. package/dist/lib/server/decorators/components/Middleware.js +2 -2
  70. package/dist/lib/server/decorators/components/Middleware.js.map +1 -1
  71. package/dist/lib/server/decorators/components/Schedule.d.ts +1 -1
  72. package/dist/lib/server/decorators/components/Schedule.js +2 -2
  73. package/dist/lib/server/decorators/components/Schedule.js.map +1 -1
  74. package/dist/lib/server/decorators/components/WebSocket.d.ts +1 -1
  75. package/dist/lib/server/decorators/components/WebSocket.js +2 -2
  76. package/dist/lib/server/decorators/components/WebSocket.js.map +1 -1
  77. package/dist/lib/server/decorators/index.d.ts +2 -0
  78. package/dist/lib/server/decorators/index.js +2 -0
  79. package/dist/lib/server/decorators/index.js.map +1 -1
  80. package/dist/lib/server/index.d.ts +2 -0
  81. package/dist/lib/server/index.js +2 -0
  82. package/dist/lib/server/index.js.map +1 -1
  83. package/dist/lib/server/src/services/PrepareConfigService.d.ts +9 -5
  84. package/dist/lib/server/src/services/PrepareConfigService.js +32 -7
  85. package/dist/lib/server/src/services/PrepareConfigService.js.map +1 -1
  86. package/dist/lib/server/src/services/PrepareMiddlewareService.d.ts +8 -5
  87. package/dist/lib/server/src/services/PrepareMiddlewareService.js +28 -7
  88. package/dist/lib/server/src/services/PrepareMiddlewareService.js.map +1 -1
  89. package/dist/lib/server/src/services/PrepareStaticServeConfigService.d.ts +8 -5
  90. package/dist/lib/server/src/services/PrepareStaticServeConfigService.js +27 -6
  91. package/dist/lib/server/src/services/PrepareStaticServeConfigService.js.map +1 -1
  92. package/dist/lib/server/src/services/PrepareValidatorService.d.ts +8 -5
  93. package/dist/lib/server/src/services/PrepareValidatorService.js +27 -6
  94. package/dist/lib/server/src/services/PrepareValidatorService.js.map +1 -1
  95. package/dist/lib/server/src/services/PrepareWebsocketService.d.ts +8 -5
  96. package/dist/lib/server/src/services/PrepareWebsocketService.js +28 -9
  97. package/dist/lib/server/src/services/PrepareWebsocketService.js.map +1 -1
  98. package/dist/lib/server/web/decorators/http.base.d.ts +1 -1
  99. package/dist/lib/server/web/decorators/http.base.js.map +1 -1
  100. package/dist/lib/server/web/decorators/methods/Connect.d.ts +1 -1
  101. package/dist/lib/server/web/decorators/methods/Delete.d.ts +1 -1
  102. package/dist/lib/server/web/decorators/methods/Get.d.ts +1 -1
  103. package/dist/lib/server/web/decorators/methods/Head.d.ts +1 -1
  104. package/dist/lib/server/web/decorators/methods/Options.d.ts +1 -1
  105. package/dist/lib/server/web/decorators/methods/Patch.d.ts +1 -1
  106. package/dist/lib/server/web/decorators/methods/Post.d.ts +1 -1
  107. package/dist/lib/server/web/decorators/methods/Put.d.ts +1 -1
  108. package/dist/lib/server/web/decorators/methods/Trace.d.ts +1 -1
  109. package/dist/lib/server/web/websocket/AsenaSocket.js +12 -8
  110. package/dist/lib/server/web/websocket/AsenaSocket.js.map +1 -1
  111. package/dist/lib/server/web/websocket/AsenaWebSocketServer.d.ts +1 -1
  112. package/dist/lib/server/web/websocket/AsenaWebSocketServer.js.map +1 -1
  113. package/dist/lib/server/web/websocket/AsenaWebSocketService.js +1 -1
  114. package/dist/lib/server/web/websocket/AsenaWebSocketService.js.map +1 -1
  115. package/dist/lib/server/web/websocket/index.d.ts +1 -1
  116. package/dist/lib/server/web/websocket/index.js +1 -1
  117. package/dist/lib/server/web/websocket/index.js.map +1 -1
  118. package/dist/lib/utils/patternMatcher.d.ts +41 -0
  119. package/dist/lib/utils/patternMatcher.js +99 -0
  120. package/dist/lib/utils/patternMatcher.js.map +1 -0
  121. package/dist/lib/utils/typedMetadata.d.ts +3 -3
  122. package/dist/lib/utils/typedMetadata.js.map +1 -1
  123. package/package.json +12 -7
  124. package/dist/lib/server/src/PrepareService.d.ts +0 -8
  125. package/dist/lib/server/src/PrepareService.js +0 -9
  126. package/dist/lib/server/src/PrepareService.js.map +0 -1
@@ -60,20 +60,24 @@ export class AsenaSocket {
60
60
  unsubscribe(topic) {
61
61
  const room = this._websocketService.rooms.get(topic);
62
62
  if (room) {
63
- const index = room.findIndex((s) => s.id === this.id);
64
- if (index !== -1) {
65
- room.splice(index, 1);
66
- if (room.length === 0) {
67
- this._websocketService.rooms.delete(topic);
68
- }
63
+ // Filter out this socket instead of splice for better safety
64
+ const filteredRoom = room.filter((s) => s.id !== this.id);
65
+ if (filteredRoom.length === 0) {
66
+ this._websocketService.rooms.delete(topic);
67
+ }
68
+ else if (filteredRoom.length !== room.length) {
69
+ // Only update if we actually removed something
70
+ this._websocketService.rooms.set(topic, filteredRoom);
69
71
  }
70
72
  }
71
73
  this.ws.unsubscribe(this.createTopic(topic));
72
74
  }
73
75
  cleanup() {
74
- this._websocketService.rooms.forEach((_, topic) => {
76
+ // Create a snapshot of topics to avoid modification during iteration
77
+ const topics = Array.from(this._websocketService.rooms.keys());
78
+ for (const topic of topics) {
75
79
  this.unsubscribe(topic);
76
- });
80
+ }
77
81
  }
78
82
  isSubscribed(topic) {
79
83
  return this.ws.isSubscribed(this.createTopic(topic));
@@ -1 +1 @@
1
- {"version":3,"file":"AsenaSocket.js","sourceRoot":"","sources":["../../../../../lib/server/web/websocket/AsenaSocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AsenaSocket.js","sourceRoot":"","sources":["../../../../../lib/server/web/websocket/AsenaSocket.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export declare class AsenaWebSocketServer {
23
23
  * @param server - The Bun Server instance to use
24
24
  * @param topic - The topic identifier for this WebSocket server
25
25
  */
26
- constructor(server: Server, topic: string);
26
+ constructor(server: Server<any>, topic: string);
27
27
  /**
28
28
  * Publishes data to a specific namespace
29
29
  *
@@ -1 +1 @@
1
- {"version":3,"file":"AsenaWebSocketServer.js","sourceRoot":"","sources":["../../../../../lib/server/web/websocket/AsenaWebSocketServer.ts"],"names":[],"mappings":"AACA,qCAAqC;AACrC;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IAE/B;;;OAGG;IACK,MAAM,CAAS;IAEvB;;;;OAIG;IACc,KAAK,CAAS;IAE/B;;;;;OAKG;IACH,YAAmB,MAAc,EAAE,KAAa;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACI,EAAE,CAAC,SAAiB,EAAE,IAAU;QACrC,IAAI,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,QAAQ,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;YACjG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,EAAE,CAAC,SAAiB,EAAE,IAAU;QACrC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;CAEF"}
1
+ {"version":3,"file":"AsenaWebSocketServer.js","sourceRoot":"","sources":["../../../../../lib/server/web/websocket/AsenaWebSocketServer.ts"],"names":[],"mappings":"AAEA,qCAAqC;AACrC;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IAE/B;;;OAGG;IACK,MAAM,CAAc;IAE5B;;;;OAIG;IACc,KAAK,CAAS;IAE/B;;;;;OAKG;IACH,YAAmB,MAAmB,EAAE,KAAa;QACnD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACI,EAAE,CAAC,SAAiB,EAAE,IAAU;QACrC,IAAI,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,QAAQ,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;YACjG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,EAAE,CAAC,SAAiB,EAAE,IAAU;QACrC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;CAEF"}
@@ -61,7 +61,7 @@ export class AsenaWebSocketService {
61
61
  async onCloseInternal(ws, _code, _reason) {
62
62
  ws.cleanup();
63
63
  ws.unsubscribe(`__`);
64
- ws.unsubscribe(`.${ws.data.id}`);
64
+ ws.unsubscribe(`${ws.data.id}`);
65
65
  this.sockets.delete(ws.id);
66
66
  if (this.onClose) {
67
67
  await this.onClose(ws, _code, _reason);
@@ -1 +1 @@
1
- {"version":3,"file":"AsenaWebSocketService.js","sourceRoot":"","sources":["../../../../../lib/server/web/websocket/AsenaWebSocketService.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IAEhC;;OAEG;IACI,MAAM,GAAyB,IAAI,CAAC;IAE3C;;OAEG;IACK,QAAQ,GAA2B,IAAI,GAAG,EAAqB,CAAC;IAExE;;OAEG;IACK,MAAM,GAA6B,IAAI,GAAG,EAAuB,CAAC;IAE1E;;OAEG;IACK,UAAU,CAAS;IAE3B;;;OAGG;IAEI,EAAE,CAAC,IAAU;QAClB,uEAAuE;QACvE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACI,EAAE,CAAC,SAAiB,EAAE,IAAU;QACrC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAE/E,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CAAC,IAAY;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAuDS,KAAK,CAAC,cAAc,CAAC,EAAa;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAE5B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEnB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAE9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAES,KAAK,CAAC,eAAe,CAAC,EAAa,EAAE,KAAa,EAAE,OAAe;QAC3E,EAAE,CAAC,OAAO,EAAE,CAAC;QAEb,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAErB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAW,OAAO,CAAC,OAA+B;QAChD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAW,SAAS,CAAC,KAAa;QAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAW,KAAK,CAAC,KAA+B;QAC9C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;CAEF"}
1
+ {"version":3,"file":"AsenaWebSocketService.js","sourceRoot":"","sources":["../../../../../lib/server/web/websocket/AsenaWebSocketService.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IAEhC;;OAEG;IACI,MAAM,GAAyB,IAAI,CAAC;IAE3C;;OAEG;IACK,QAAQ,GAA2B,IAAI,GAAG,EAAqB,CAAC;IAExE;;OAEG;IACK,MAAM,GAA6B,IAAI,GAAG,EAAuB,CAAC;IAE1E;;OAEG;IACK,UAAU,CAAS;IAE3B;;;OAGG;IAEI,EAAE,CAAC,IAAU;QAClB,uEAAuE;QACvE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACI,EAAE,CAAC,SAAiB,EAAE,IAAU;QACrC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAE/E,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CAAC,IAAY;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAuDS,KAAK,CAAC,cAAc,CAAC,EAAa;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAE5B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEnB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAE9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAES,KAAK,CAAC,eAAe,CAAC,EAAa,EAAE,KAAa,EAAE,OAAe;QAC3E,EAAE,CAAC,OAAO,EAAE,CAAC;QAEb,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAErB,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAW,OAAO,CAAC,OAA+B;QAChD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAW,SAAS,CAAC,KAAa;QAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAW,KAAK,CAAC,KAA+B;QAC9C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;CAEF"}
@@ -1,4 +1,4 @@
1
1
  export * from './AsenaWebSocketService';
2
2
  export * from './types';
3
3
  export * from './AsenaSocket';
4
- export * from "./AsenaWebSocketServer";
4
+ export * from './AsenaWebSocketServer';
@@ -1,5 +1,5 @@
1
1
  export * from './AsenaWebSocketService';
2
2
  export * from './types';
3
3
  export * from './AsenaSocket';
4
- export * from "./AsenaWebSocketServer";
4
+ export * from './AsenaWebSocketServer';
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/server/web/websocket/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/server/web/websocket/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Pattern matching utility for global middleware routing
3
+ *
4
+ * Supports:
5
+ * - Exact match: '/users'
6
+ * - Wildcard: '/api/*'
7
+ * - Parameters: '/users/:id'
8
+ * - Multiple patterns: ['/api/*', '/admin/*']
9
+ */
10
+ import type { GlobalMiddlewareRouteConfig } from '../server/config';
11
+ /**
12
+ * Checks if a path matches a pattern
13
+ *
14
+ * @param path - Request path to test (e.g., '/api/users/123')
15
+ * @param pattern - Pattern to match against (e.g., '/api/*', '/users/:id')
16
+ * @returns true if path matches pattern
17
+ *
18
+ * @example
19
+ * matchesPattern('/api/users', '/api/*') // => true
20
+ * matchesPattern('/api/users/123', '/api/users/:id') // => true
21
+ * matchesPattern('/health', '/api/*') // => false
22
+ */
23
+ export declare function matchesPattern(path: string, pattern: string): boolean;
24
+ /**
25
+ * Checks if a path should have middleware applied based on include/exclude rules
26
+ *
27
+ * Rules:
28
+ * 1. If no include patterns, default to ['*'] (all routes)
29
+ * 2. Path must match at least one include pattern
30
+ * 3. Exclude patterns take precedence (if matched, return false)
31
+ *
32
+ * @param path - Request path to test
33
+ * @param config - Route configuration with include/exclude patterns
34
+ * @returns true if middleware should be applied to this path
35
+ *
36
+ * @example
37
+ * shouldApplyMiddleware('/api/users', { include: ['/api/*'] }) // => true
38
+ * shouldApplyMiddleware('/health', { exclude: ['/health'] }) // => false
39
+ * shouldApplyMiddleware('/api/health', { include: ['/api/*'], exclude: ['/api/health'] }) // => false
40
+ */
41
+ export declare function shouldApplyMiddleware(path: string, config?: GlobalMiddlewareRouteConfig): boolean;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Pattern matching utility for global middleware routing
3
+ *
4
+ * Supports:
5
+ * - Exact match: '/users'
6
+ * - Wildcard: '/api/*'
7
+ * - Parameters: '/users/:id'
8
+ * - Multiple patterns: ['/api/*', '/admin/*']
9
+ */
10
+ /**
11
+ * Checks if a path matches a pattern
12
+ *
13
+ * @param path - Request path to test (e.g., '/api/users/123')
14
+ * @param pattern - Pattern to match against (e.g., '/api/*', '/users/:id')
15
+ * @returns true if path matches pattern
16
+ *
17
+ * @example
18
+ * matchesPattern('/api/users', '/api/*') // => true
19
+ * matchesPattern('/api/users/123', '/api/users/:id') // => true
20
+ * matchesPattern('/health', '/api/*') // => false
21
+ */
22
+ export function matchesPattern(path, pattern) {
23
+ // Exact match
24
+ if (path === pattern) {
25
+ return true;
26
+ }
27
+ // Wildcard pattern: /api/* matches /api/users, /api/users/123, etc.
28
+ if (pattern.includes('*')) {
29
+ const regexPattern = pattern
30
+ .split('/')
31
+ .map((segment) => {
32
+ if (segment === '*') {
33
+ return '.*'; // Match any characters
34
+ }
35
+ if (segment.includes('*')) {
36
+ return segment.replace(/\*/g, '.*'); // Partial wildcard
37
+ }
38
+ return segment.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Escape special chars
39
+ })
40
+ .join('\\/');
41
+ const regex = new RegExp(`^${regexPattern}$`);
42
+ return regex.test(path);
43
+ }
44
+ // Parameter pattern: /users/:id matches /users/123, /users/abc, etc.
45
+ if (pattern.includes(':')) {
46
+ const regexPattern = pattern
47
+ .split('/')
48
+ .map((segment) => {
49
+ if (segment.startsWith(':')) {
50
+ return '[^/]+'; // Match any non-slash characters
51
+ }
52
+ return segment.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Escape special chars
53
+ })
54
+ .join('\\/');
55
+ const regex = new RegExp(`^${regexPattern}$`);
56
+ return regex.test(path);
57
+ }
58
+ // No match
59
+ return false;
60
+ }
61
+ /**
62
+ * Checks if a path should have middleware applied based on include/exclude rules
63
+ *
64
+ * Rules:
65
+ * 1. If no include patterns, default to ['*'] (all routes)
66
+ * 2. Path must match at least one include pattern
67
+ * 3. Exclude patterns take precedence (if matched, return false)
68
+ *
69
+ * @param path - Request path to test
70
+ * @param config - Route configuration with include/exclude patterns
71
+ * @returns true if middleware should be applied to this path
72
+ *
73
+ * @example
74
+ * shouldApplyMiddleware('/api/users', { include: ['/api/*'] }) // => true
75
+ * shouldApplyMiddleware('/health', { exclude: ['/health'] }) // => false
76
+ * shouldApplyMiddleware('/api/health', { include: ['/api/*'], exclude: ['/api/health'] }) // => false
77
+ */
78
+ export function shouldApplyMiddleware(path, config) {
79
+ // No config means apply to all routes
80
+ if (!config) {
81
+ return true;
82
+ }
83
+ const { include = ['*'], exclude = [] } = config;
84
+ // Check exclusions first (they take precedence)
85
+ for (const excludePattern of exclude) {
86
+ if (matchesPattern(path, excludePattern)) {
87
+ return false; // Excluded, don't apply
88
+ }
89
+ }
90
+ // Check inclusions
91
+ for (const includePattern of include) {
92
+ if (matchesPattern(path, includePattern)) {
93
+ return true; // Included and not excluded, apply
94
+ }
95
+ }
96
+ // Not included, don't apply
97
+ return false;
98
+ }
99
+ //# sourceMappingURL=patternMatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patternMatcher.js","sourceRoot":"","sources":["../../../lib/utils/patternMatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAC1D,cAAc;IACd,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oEAAoE;IACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,OAAO;aACzB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC,CAAC,uBAAuB;YACtC,CAAC;YAED,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB;YAC1D,CAAC;YAED,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,uBAAuB;QAChF,CAAC,CAAC;aACD,IAAI,CAAC,KAAK,CAAC,CAAC;QAEf,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;QAE9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,qEAAqE;IACrE,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,OAAO;aACzB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,OAAO,CAAC,CAAC,iCAAiC;YACnD,CAAC;YAED,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,uBAAuB;QAChF,CAAC,CAAC;aACD,IAAI,CAAC,KAAK,CAAC,CAAC;QAEf,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;QAE9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,WAAW;IACX,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,MAAoC;IACtF,sCAAsC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAEjD,gDAAgD;IAChD,KAAK,MAAM,cAAc,IAAI,OAAO,EAAE,CAAC;QACrC,IAAI,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,wBAAwB;QACxC,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,cAAc,IAAI,OAAO,EAAE,CAAC;QACrC,IAAI,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,CAAC,mCAAmC;QAClD,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,3 +1,3 @@
1
- export declare const getTypedMetadata: <T>(key: string, target: any) => T | undefined;
2
- export declare const getOwnTypedMetadata: <T>(key: string, target: any) => T | undefined;
3
- export declare const defineTypedMetadata: <T>(key: string, value: T, target: any, sym?: string | symbol) => void;
1
+ export declare const getTypedMetadata: <T>(key: string | symbol, target: any) => T | undefined;
2
+ export declare const getOwnTypedMetadata: <T>(key: string | symbol, target: any) => T | undefined;
3
+ export declare const defineTypedMetadata: <T>(key: string | symbol, value: T, target: any, sym?: string | symbol) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"typedMetadata.js","sourceRoot":"","sources":["../../../lib/utils/typedMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE3F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAI,GAAW,EAAE,MAAW,EAAiB,EAAE;IAC7E,OAAO,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAI,GAAW,EAAE,MAAW,EAAiB,EAAE;IAChF,OAAO,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,sCAAsC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,MAAW,EAAE,GAAqB,EAAQ,EAAE;IACxG,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC,CAAC"}
1
+ {"version":3,"file":"typedMetadata.js","sourceRoot":"","sources":["../../../lib/utils/typedMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE3F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAI,GAAoB,EAAE,MAAW,EAAiB,EAAE;IACtF,OAAO,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAI,GAAoB,EAAE,MAAW,EAAiB,EAAE;IACzF,OAAO,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,sCAAsC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAI,GAAoB,EAAE,KAAQ,EAAE,MAAW,EAAE,GAAqB,EAAQ,EAAE;IACjH,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,29 +1,30 @@
1
1
  {
2
2
  "name": "@asenajs/asena",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "author": "LibirSoft",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/AsenaJs/Asena.git"
8
8
  },
9
9
  "main": "dist/index.js",
10
+ "homepage": "https://asena.sh/",
10
11
  "dependencies": {
11
12
  "reflect-metadata": "^0.2.2"
12
13
  },
13
14
  "devDependencies": {
14
- "@changesets/cli": "^2.29.3",
15
+ "@changesets/cli": "^2.29.7",
15
16
  "@types/bun": "latest",
16
17
  "@typescript-eslint/eslint-plugin": "^6.21.0",
17
18
  "eslint": "^8.57.1",
18
19
  "eslint-config-alloy": "^5.1.2",
19
- "eslint-config-prettier": "^9.1.0",
20
+ "eslint-config-prettier": "^9.1.2",
20
21
  "eslint-plugin-alloy": "^1.2.1",
21
- "eslint-plugin-import": "^2.31.0",
22
+ "eslint-plugin-import": "^2.32.0",
22
23
  "eslint-plugin-n": "^16.6.2",
23
- "eslint-plugin-prettier": "^5.4.0",
24
+ "eslint-plugin-prettier": "^5.5.4",
24
25
  "eslint-plugin-promise": "^6.6.0",
25
- "prettier": "^3.5.3",
26
- "typescript": "^5.8.3"
26
+ "prettier": "^3.6.2",
27
+ "typescript": "^5.9.3"
27
28
  },
28
29
  "exports": {
29
30
  ".": {
@@ -73,6 +74,10 @@
73
74
  "./container": {
74
75
  "import": "./dist/lib/ioc/Container.js",
75
76
  "types": "./dist/lib/ioc/Container.d.ts"
77
+ },
78
+ "./utils/patternMatcher": {
79
+ "import": "./dist/lib/utils/patternMatcher.js",
80
+ "types": "./dist/lib/utils/patternMatcher.d.ts"
76
81
  }
77
82
  },
78
83
  "description": "Asena is a spring like framework for building web applications built with bun",
@@ -1,8 +0,0 @@
1
- import type { Container } from '../../ioc';
2
- import type { ServerLogger } from '../../logger';
3
- export declare abstract class PrepareService {
4
- protected container: Container;
5
- protected logger: ServerLogger;
6
- constructor(container: Container, logger: ServerLogger);
7
- abstract prepare(...args: any[]): Promise<any> | any;
8
- }
@@ -1,9 +0,0 @@
1
- export class PrepareService {
2
- container;
3
- logger;
4
- constructor(container, logger) {
5
- this.container = container;
6
- this.logger = logger;
7
- }
8
- }
9
- //# sourceMappingURL=PrepareService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PrepareService.js","sourceRoot":"","sources":["../../../../lib/server/src/PrepareService.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,cAAc;IAExB,SAAS,CAAY;IAErB,MAAM,CAAe;IAE/B,YAAmB,SAAoB,EAAE,MAAoB;QAC3D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CAIF"}