@heliosjs/core 1.0.2

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 (152) hide show
  1. package/README.md +540 -0
  2. package/dist/Controller.d.ts +54 -0
  3. package/dist/Controller.js +168 -0
  4. package/dist/Controller.js.map +1 -0
  5. package/dist/Endpoint.d.ts +73 -0
  6. package/dist/Endpoint.js +126 -0
  7. package/dist/Endpoint.js.map +1 -0
  8. package/dist/constants.d.ts +25 -0
  9. package/dist/constants.js +34 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/decorators.d.ts +94 -0
  12. package/dist/decorators.js +107 -0
  13. package/dist/decorators.js.map +1 -0
  14. package/dist/index.d.ts +11 -0
  15. package/dist/index.js +29 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/types/core/common.d.ts +44 -0
  18. package/dist/types/core/common.js +15 -0
  19. package/dist/types/core/common.js.map +1 -0
  20. package/dist/types/core/controller.d.ts +78 -0
  21. package/dist/types/core/controller.js +3 -0
  22. package/dist/types/core/controller.js.map +1 -0
  23. package/dist/types/core/cors.d.ts +10 -0
  24. package/dist/types/core/cors.js +3 -0
  25. package/dist/types/core/cors.js.map +1 -0
  26. package/dist/types/core/error.d.ts +72 -0
  27. package/dist/types/core/error.js +19 -0
  28. package/dist/types/core/error.js.map +1 -0
  29. package/dist/types/core/index.d.ts +9 -0
  30. package/dist/types/core/index.js +26 -0
  31. package/dist/types/core/index.js.map +1 -0
  32. package/dist/types/core/multipart.d.ts +8 -0
  33. package/dist/types/core/multipart.js +3 -0
  34. package/dist/types/core/multipart.js.map +1 -0
  35. package/dist/types/core/request.d.ts +65 -0
  36. package/dist/types/core/request.js +3 -0
  37. package/dist/types/core/request.js.map +1 -0
  38. package/dist/types/core/response.d.ts +49 -0
  39. package/dist/types/core/response.js +3 -0
  40. package/dist/types/core/response.js.map +1 -0
  41. package/dist/types/core/sanitize.d.ts +8 -0
  42. package/dist/types/core/sanitize.js +3 -0
  43. package/dist/types/core/sanitize.js.map +1 -0
  44. package/dist/types/core/sse.d.ts +37 -0
  45. package/dist/types/core/sse.js +3 -0
  46. package/dist/types/core/sse.js.map +1 -0
  47. package/dist/types/ws/index.d.ts +50 -0
  48. package/dist/types/ws/index.js +3 -0
  49. package/dist/types/ws/index.js.map +1 -0
  50. package/dist/utils/core/controller.d.ts +25 -0
  51. package/dist/utils/core/controller.js +219 -0
  52. package/dist/utils/core/controller.js.map +1 -0
  53. package/dist/utils/core/cors.d.ts +8 -0
  54. package/dist/utils/core/cors.js +128 -0
  55. package/dist/utils/core/cors.js.map +1 -0
  56. package/dist/utils/core/endpoint.d.ts +3 -0
  57. package/dist/utils/core/endpoint.js +28 -0
  58. package/dist/utils/core/endpoint.js.map +1 -0
  59. package/dist/utils/core/error/apperror.d.ts +31 -0
  60. package/dist/utils/core/error/apperror.js +131 -0
  61. package/dist/utils/core/error/apperror.js.map +1 -0
  62. package/dist/utils/core/error/authorizations.d.ts +7 -0
  63. package/dist/utils/core/error/authorizations.js +17 -0
  64. package/dist/utils/core/error/authorizations.js.map +1 -0
  65. package/dist/utils/core/error/base.d.ts +20 -0
  66. package/dist/utils/core/error/base.js +52 -0
  67. package/dist/utils/core/error/base.js.map +1 -0
  68. package/dist/utils/core/error/dependencyFailed.d.ts +7 -0
  69. package/dist/utils/core/error/dependencyFailed.js +17 -0
  70. package/dist/utils/core/error/dependencyFailed.js.map +1 -0
  71. package/dist/utils/core/error/duplicateEntry.d.ts +7 -0
  72. package/dist/utils/core/error/duplicateEntry.js +17 -0
  73. package/dist/utils/core/error/duplicateEntry.js.map +1 -0
  74. package/dist/utils/core/error/forbidden.d.ts +7 -0
  75. package/dist/utils/core/error/forbidden.js +17 -0
  76. package/dist/utils/core/error/forbidden.js.map +1 -0
  77. package/dist/utils/core/error/helpers.d.ts +8 -0
  78. package/dist/utils/core/error/helpers.js +144 -0
  79. package/dist/utils/core/error/helpers.js.map +1 -0
  80. package/dist/utils/core/error/index.d.ts +12 -0
  81. package/dist/utils/core/error/index.js +29 -0
  82. package/dist/utils/core/error/index.js.map +1 -0
  83. package/dist/utils/core/error/invalidState.d.ts +7 -0
  84. package/dist/utils/core/error/invalidState.js +17 -0
  85. package/dist/utils/core/error/invalidState.js.map +1 -0
  86. package/dist/utils/core/error/notfound.d.ts +7 -0
  87. package/dist/utils/core/error/notfound.js +18 -0
  88. package/dist/utils/core/error/notfound.js.map +1 -0
  89. package/dist/utils/core/error/rateLimit.d.ts +7 -0
  90. package/dist/utils/core/error/rateLimit.js +17 -0
  91. package/dist/utils/core/error/rateLimit.js.map +1 -0
  92. package/dist/utils/core/error/serviceUnavailable.d.ts +7 -0
  93. package/dist/utils/core/error/serviceUnavailable.js +17 -0
  94. package/dist/utils/core/error/serviceUnavailable.js.map +1 -0
  95. package/dist/utils/core/error/validation.d.ts +10 -0
  96. package/dist/utils/core/error/validation.js +20 -0
  97. package/dist/utils/core/error/validation.js.map +1 -0
  98. package/dist/utils/core/headers.d.ts +2 -0
  99. package/dist/utils/core/headers.js +10 -0
  100. package/dist/utils/core/headers.js.map +1 -0
  101. package/dist/utils/core/helper.d.ts +6 -0
  102. package/dist/utils/core/helper.js +66 -0
  103. package/dist/utils/core/helper.js.map +1 -0
  104. package/dist/utils/core/index.d.ts +10 -0
  105. package/dist/utils/core/index.js +27 -0
  106. package/dist/utils/core/index.js.map +1 -0
  107. package/dist/utils/core/multipart.d.ts +9 -0
  108. package/dist/utils/core/multipart.js +207 -0
  109. package/dist/utils/core/multipart.js.map +1 -0
  110. package/dist/utils/core/request.d.ts +100 -0
  111. package/dist/utils/core/request.js +218 -0
  112. package/dist/utils/core/request.js.map +1 -0
  113. package/dist/utils/core/response.d.ts +48 -0
  114. package/dist/utils/core/response.js +269 -0
  115. package/dist/utils/core/response.js.map +1 -0
  116. package/dist/utils/core/routeWalker.d.ts +2 -0
  117. package/dist/utils/core/routeWalker.js +115 -0
  118. package/dist/utils/core/routeWalker.js.map +1 -0
  119. package/dist/utils/core/sanitize.d.ts +30 -0
  120. package/dist/utils/core/sanitize.js +134 -0
  121. package/dist/utils/core/sanitize.js.map +1 -0
  122. package/dist/utils/shared/index.d.ts +2 -0
  123. package/dist/utils/shared/index.js +19 -0
  124. package/dist/utils/shared/index.js.map +1 -0
  125. package/dist/utils/shared/parsers.d.ts +11 -0
  126. package/dist/utils/shared/parsers.js +133 -0
  127. package/dist/utils/shared/parsers.js.map +1 -0
  128. package/dist/utils/shared/validate.d.ts +1 -0
  129. package/dist/utils/shared/validate.js +41 -0
  130. package/dist/utils/shared/validate.js.map +1 -0
  131. package/dist/utils/socket/index.d.ts +3 -0
  132. package/dist/utils/socket/index.js +20 -0
  133. package/dist/utils/socket/index.js.map +1 -0
  134. package/dist/utils/socket/server.d.ts +33 -0
  135. package/dist/utils/socket/server.js +218 -0
  136. package/dist/utils/socket/server.js.map +1 -0
  137. package/dist/utils/socket/service.d.ts +20 -0
  138. package/dist/utils/socket/service.js +42 -0
  139. package/dist/utils/socket/service.js.map +1 -0
  140. package/dist/utils/socket/socket.d.ts +16 -0
  141. package/dist/utils/socket/socket.js +33 -0
  142. package/dist/utils/socket/socket.js.map +1 -0
  143. package/dist/utils/sse/index.d.ts +2 -0
  144. package/dist/utils/sse/index.js +19 -0
  145. package/dist/utils/sse/index.js.map +1 -0
  146. package/dist/utils/sse/server.d.ts +14 -0
  147. package/dist/utils/sse/server.js +85 -0
  148. package/dist/utils/sse/server.js.map +1 -0
  149. package/dist/utils/sse/service.d.ts +17 -0
  150. package/dist/utils/sse/service.js +40 -0
  151. package/dist/utils/sse/service.js.map +1 -0
  152. package/package.json +37 -0
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SSEServer = void 0;
4
+ const uuid_1 = require("uuid");
5
+ class SSEServer {
6
+ clients = new Map();
7
+ controllers = [];
8
+ createConnection(res) {
9
+ const clientId = (0, uuid_1.v4)();
10
+ res.writeHead(200, {
11
+ 'Content-Type': 'text/event-stream',
12
+ 'Cache-Control': 'no-cache',
13
+ Connection: 'keep-alive',
14
+ 'Access-Control-Allow-Origin': '*',
15
+ });
16
+ res.write(': connected\n\n');
17
+ const client = {
18
+ id: clientId,
19
+ response: res,
20
+ topics: new Set(),
21
+ data: {},
22
+ connectedAt: new Date(),
23
+ };
24
+ this.clients.set(clientId, client);
25
+ this.triggerHandlers('connection', {
26
+ type: 'connection',
27
+ client,
28
+ data: res,
29
+ });
30
+ res.on('close', () => {
31
+ this.clients.delete(clientId);
32
+ this.triggerHandlers('close', { type: 'close', client });
33
+ });
34
+ return client;
35
+ }
36
+ sendToClient(clientId, message) {
37
+ const client = this.clients.get(clientId);
38
+ if (!client)
39
+ return false;
40
+ try {
41
+ let sseMessage = '';
42
+ if (message.event)
43
+ sseMessage += `event: ${message.event}\n`;
44
+ if (message.id)
45
+ sseMessage += `id: ${message.id}\n`;
46
+ if (message.retry)
47
+ sseMessage += `retry: ${message.retry}\n`;
48
+ const dataStr = typeof message.data === 'string' ? message.data : JSON.stringify(message.data);
49
+ dataStr.split('\n').forEach((line) => {
50
+ sseMessage += `data: ${line}\n`;
51
+ });
52
+ sseMessage += '\n';
53
+ client.response.write(sseMessage);
54
+ return true;
55
+ }
56
+ catch (error) {
57
+ console.error(`SSE send error to ${clientId}:`, error);
58
+ return false;
59
+ }
60
+ }
61
+ broadcast(message, excludeClientId) {
62
+ this.clients.forEach((_, clientId) => {
63
+ if (clientId !== excludeClientId) {
64
+ this.sendToClient(clientId, message);
65
+ }
66
+ });
67
+ }
68
+ getStats() {
69
+ return { clients: this.clients.size };
70
+ }
71
+ registerControllers(controllers) {
72
+ this.controllers = controllers.filter((c) => c.sse);
73
+ }
74
+ async triggerHandlers(eventType, event) {
75
+ for (const controller of this.controllers) {
76
+ if (controller.sse.handlers && controller.sse.handlers[eventType]) {
77
+ for (const handler of controller.sse.handlers[eventType]) {
78
+ await handler.fn(event).catch(console.log);
79
+ }
80
+ }
81
+ }
82
+ }
83
+ }
84
+ exports.SSEServer = SSEServer;
85
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/utils/sse/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ServerResponse } from 'http';
2
+ import { ISSEService, SSEClient, SSEMessage } from '../../types/core';
3
+ import { SSEServer } from './server';
4
+ export declare class SSEService implements ISSEService {
5
+ private static instance;
6
+ private sse;
7
+ private constructor();
8
+ static getInstance(): SSEService;
9
+ initialize(sse: SSEServer): void;
10
+ sendToClient(clientId: string, message: SSEMessage): boolean;
11
+ broadcast(message: SSEMessage, excludeClientId?: string): void;
12
+ getStats(): {
13
+ clients: number;
14
+ };
15
+ isAvailable(): boolean;
16
+ createConnection(res: ServerResponse): SSEClient;
17
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SSEService = void 0;
4
+ class SSEService {
5
+ static instance;
6
+ sse = null;
7
+ constructor() { }
8
+ static getInstance() {
9
+ if (!SSEService.instance) {
10
+ SSEService.instance = new SSEService();
11
+ }
12
+ return SSEService.instance;
13
+ }
14
+ initialize(sse) {
15
+ this.sse = sse;
16
+ }
17
+ sendToClient(clientId, message) {
18
+ if (!this.sse)
19
+ return false;
20
+ return this.sse.sendToClient(clientId, message);
21
+ }
22
+ broadcast(message, excludeClientId) {
23
+ if (!this.sse)
24
+ return;
25
+ this.sse.broadcast(message, excludeClientId);
26
+ }
27
+ getStats() {
28
+ if (!this.sse)
29
+ return { clients: 0 };
30
+ return this.sse.getStats();
31
+ }
32
+ isAvailable() {
33
+ return this.sse !== null;
34
+ }
35
+ createConnection(res) {
36
+ return this.sse.createConnection(res);
37
+ }
38
+ }
39
+ exports.SSEService = SSEService;
40
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/utils/sse/service.ts"],"names":[],"mappings":";;;AAIA,MAAa,UAAU;IACb,MAAM,CAAC,QAAQ,CAAa;IAC5B,GAAG,GAAqB,IAAI,CAAC;IAErC,gBAAuB,CAAC;IAExB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,GAAc;QACvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,OAAmB;QAChD,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,CAAC,OAAmB,EAAE,eAAwB;QACrD,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO;QACtB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC;IAC3B,CAAC;IAED,gBAAgB,CAAC,GAAmB;QAClC,OAAO,IAAI,CAAC,GAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;CACF;AAvCD,gCAuCC"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@heliosjs/core",
3
+ "version": "1.0.2",
4
+ "description": "Core functionality for Quantum Flow",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "license": "MIT",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "files": [
12
+ "dist/*",
13
+ "README.md"
14
+ ],
15
+ "scripts": {
16
+ "build": "yarn clean && tsc -p tsconfig.build.json && resolve-tspaths",
17
+ "clean": "rm -rf dist",
18
+ "prepublishOnly": "yarn build",
19
+ "publish:public": "yarn publish --access public",
20
+ "publish:patch": "yarn version --patch && yarn publish --access public",
21
+ "publish:minor": "yarn version --minor && yarn publish --access public",
22
+ "publish:major": "yarn version --major && yarn publish --access public"
23
+ },
24
+ "dependencies": {
25
+ "class-transformer": "^0.5.1",
26
+ "class-validator": "^0.15.1",
27
+ "joi": "^18.0.2",
28
+ "parse-multipart-data": "^1.5.0",
29
+ "reflect-metadata": "^0.2.2",
30
+ "tsconfig-paths": "^4.2.0",
31
+ "uuid": "^13.0.0",
32
+ "ws": "^8.19.0"
33
+ },
34
+ "peerDependencies": {
35
+ "typescript": ">=4.0.0"
36
+ }
37
+ }