@designofadecade/server 4.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 (84) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/LICENSE +21 -0
  3. package/README.md +297 -0
  4. package/dist/client/ApiClient.d.ts +121 -0
  5. package/dist/client/ApiClient.d.ts.map +1 -0
  6. package/dist/client/ApiClient.js +289 -0
  7. package/dist/client/ApiClient.js.map +1 -0
  8. package/dist/context/Context.d.ts +71 -0
  9. package/dist/context/Context.d.ts.map +1 -0
  10. package/dist/context/Context.js +81 -0
  11. package/dist/context/Context.js.map +1 -0
  12. package/dist/docs/OpenApiGenerator.d.ts +135 -0
  13. package/dist/docs/OpenApiGenerator.d.ts.map +1 -0
  14. package/dist/docs/OpenApiGenerator.js +165 -0
  15. package/dist/docs/OpenApiGenerator.js.map +1 -0
  16. package/dist/events/Events.d.ts +52 -0
  17. package/dist/events/Events.d.ts.map +1 -0
  18. package/dist/events/Events.js +70 -0
  19. package/dist/events/Events.js.map +1 -0
  20. package/dist/events/EventsManager.d.ts +46 -0
  21. package/dist/events/EventsManager.d.ts.map +1 -0
  22. package/dist/events/EventsManager.js +137 -0
  23. package/dist/events/EventsManager.js.map +1 -0
  24. package/dist/index.d.ts +32 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +38 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/local/Local.d.ts +83 -0
  29. package/dist/local/Local.d.ts.map +1 -0
  30. package/dist/local/Local.js +114 -0
  31. package/dist/local/Local.js.map +1 -0
  32. package/dist/logger/Logger.d.ts +365 -0
  33. package/dist/logger/Logger.d.ts.map +1 -0
  34. package/dist/logger/Logger.js +582 -0
  35. package/dist/logger/Logger.js.map +1 -0
  36. package/dist/middleware/RequestLogger.d.ts +62 -0
  37. package/dist/middleware/RequestLogger.d.ts.map +1 -0
  38. package/dist/middleware/RequestLogger.js +71 -0
  39. package/dist/middleware/RequestLogger.js.map +1 -0
  40. package/dist/notifications/Slack.d.ts +19 -0
  41. package/dist/notifications/Slack.d.ts.map +1 -0
  42. package/dist/notifications/Slack.js +55 -0
  43. package/dist/notifications/Slack.js.map +1 -0
  44. package/dist/router/RouteError.d.ts +21 -0
  45. package/dist/router/RouteError.d.ts.map +1 -0
  46. package/dist/router/RouteError.js +31 -0
  47. package/dist/router/RouteError.js.map +1 -0
  48. package/dist/router/Router.d.ts +66 -0
  49. package/dist/router/Router.d.ts.map +1 -0
  50. package/dist/router/Router.js +327 -0
  51. package/dist/router/Router.js.map +1 -0
  52. package/dist/router/Routes.d.ts +30 -0
  53. package/dist/router/Routes.d.ts.map +1 -0
  54. package/dist/router/Routes.js +52 -0
  55. package/dist/router/Routes.js.map +1 -0
  56. package/dist/router/StaticFileHandler.d.ts +44 -0
  57. package/dist/router/StaticFileHandler.d.ts.map +1 -0
  58. package/dist/router/StaticFileHandler.js +148 -0
  59. package/dist/router/StaticFileHandler.js.map +1 -0
  60. package/dist/sanitizer/HtmlSanitizer.d.ts +306 -0
  61. package/dist/sanitizer/HtmlSanitizer.d.ts.map +1 -0
  62. package/dist/sanitizer/HtmlSanitizer.js +808 -0
  63. package/dist/sanitizer/HtmlSanitizer.js.map +1 -0
  64. package/dist/server/Server.d.ts +28 -0
  65. package/dist/server/Server.d.ts.map +1 -0
  66. package/dist/server/Server.js +95 -0
  67. package/dist/server/Server.js.map +1 -0
  68. package/dist/state/AppState.d.ts +64 -0
  69. package/dist/state/AppState.d.ts.map +1 -0
  70. package/dist/state/AppState.js +89 -0
  71. package/dist/state/AppState.js.map +1 -0
  72. package/dist/utils/HtmlRenderer.d.ts +6 -0
  73. package/dist/utils/HtmlRenderer.d.ts.map +1 -0
  74. package/dist/utils/HtmlRenderer.js +128 -0
  75. package/dist/utils/HtmlRenderer.js.map +1 -0
  76. package/dist/websocket/WebSocketMessageFormatter.d.ts +40 -0
  77. package/dist/websocket/WebSocketMessageFormatter.d.ts.map +1 -0
  78. package/dist/websocket/WebSocketMessageFormatter.js +99 -0
  79. package/dist/websocket/WebSocketMessageFormatter.js.map +1 -0
  80. package/dist/websocket/WebSocketServer.d.ts +14 -0
  81. package/dist/websocket/WebSocketServer.d.ts.map +1 -0
  82. package/dist/websocket/WebSocketServer.js +138 -0
  83. package/dist/websocket/WebSocketServer.js.map +1 -0
  84. package/package.json +97 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HtmlSanitizer.js","sourceRoot":"","sources":["../../src/sanitizer/HtmlSanitizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import Http, { IncomingMessage, ServerResponse } from 'http';
2
+ interface ServerOptions {
3
+ port?: number;
4
+ host?: string;
5
+ }
6
+ /**
7
+ * HTTP Server wrapper with Node.js http module
8
+ *
9
+ * Provides a simple HTTP server with automatic error handling,
10
+ * port validation, and graceful shutdown capabilities.
11
+ *
12
+ * @class Server
13
+ * @example
14
+ * const server = new Server({ port: 3000 }, (req, res) => {
15
+ * res.end('Hello World');
16
+ * });
17
+ *
18
+ * // Graceful shutdown
19
+ * await server.close();
20
+ */
21
+ export default class Server {
22
+ #private;
23
+ constructor({ port, host }: ServerOptions | undefined, requestHandler: (req: IncomingMessage, res: ServerResponse) => void);
24
+ get server(): Http.Server | null;
25
+ close(): Promise<void>;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=Server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAG7D,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,OAAO,OAAO,MAAM;;gBAQvB,EAAE,IAAW,EAAE,IAAgB,EAAE,EAAE,aAAa,YAAK,EACrD,cAAc,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI;IAmBrE,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAE/B;IAkCD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAuBvB"}
@@ -0,0 +1,95 @@
1
+ import Http from 'http';
2
+ import { logger } from '../logger/Logger.js';
3
+ /**
4
+ * HTTP Server wrapper with Node.js http module
5
+ *
6
+ * Provides a simple HTTP server with automatic error handling,
7
+ * port validation, and graceful shutdown capabilities.
8
+ *
9
+ * @class Server
10
+ * @example
11
+ * const server = new Server({ port: 3000 }, (req, res) => {
12
+ * res.end('Hello World');
13
+ * });
14
+ *
15
+ * // Graceful shutdown
16
+ * await server.close();
17
+ */
18
+ export default class Server {
19
+ #server = null;
20
+ #initPort = 3000;
21
+ #initHost = '0.0.0.0';
22
+ #requestHandler = null;
23
+ constructor({ port = 3000, host = '0.0.0.0' } = {}, requestHandler) {
24
+ // Validate port
25
+ if (isNaN(port) || port < 1 || port > 65535) {
26
+ throw new Error(`Port ${port} is invalid. Must be between 1 and 65535.`);
27
+ }
28
+ // Validate request handler
29
+ if (typeof requestHandler !== 'function') {
30
+ throw new Error('Request handler must be a function');
31
+ }
32
+ this.#initPort = port;
33
+ this.#initHost = host;
34
+ this.#requestHandler = requestHandler;
35
+ this.#start();
36
+ }
37
+ get server() {
38
+ return this.#server;
39
+ }
40
+ #start() {
41
+ this.#server = Http.createServer(this.#requestHandler);
42
+ // Attach error handler before listen to avoid race conditions
43
+ this.#server.on('error', (error) => {
44
+ if (error.code === 'EADDRINUSE') {
45
+ logger.error('Port is already in use', {
46
+ code: 'SERVER_PORT_IN_USE',
47
+ source: 'Server.start',
48
+ port: this.#initPort,
49
+ error,
50
+ });
51
+ process.exit(1);
52
+ }
53
+ logger.error('HTTP Server error', {
54
+ code: 'SERVER_ERROR',
55
+ source: 'Server.start',
56
+ error,
57
+ errorCode: error.code,
58
+ });
59
+ process.exit(1);
60
+ });
61
+ this.#server.listen(this.#initPort, this.#initHost, () => {
62
+ logger.info('HTTP Server listening', {
63
+ source: 'Server.start',
64
+ host: this.#initHost,
65
+ port: this.#initPort,
66
+ });
67
+ });
68
+ }
69
+ close() {
70
+ return new Promise((resolve, reject) => {
71
+ if (this.#server) {
72
+ this.#server.close((error) => {
73
+ if (error) {
74
+ logger.error('Error closing HTTP Server', {
75
+ code: 'SERVER_CLOSE_ERROR',
76
+ source: 'Server.close',
77
+ error,
78
+ });
79
+ reject(error);
80
+ }
81
+ else {
82
+ logger.info('HTTP Server closed', {
83
+ source: 'Server.close',
84
+ });
85
+ resolve();
86
+ }
87
+ });
88
+ }
89
+ else {
90
+ resolve();
91
+ }
92
+ });
93
+ }
94
+ }
95
+ //# sourceMappingURL=Server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ export default class AppState {
2
+ #private;
3
+ private static instance?;
4
+ /**
5
+ * Private constructor for singleton pattern
6
+ * @param {Object} config - Configuration object
7
+ * @param {string} [config.env='development'] - Environment mode
8
+ * @param {string} [config.rootPath='/'] - Root path of the application
9
+ */
10
+ private constructor();
11
+ /**
12
+ * Gets or creates the singleton instance of AppState
13
+ * @param {Object} config - Configuration object
14
+ * @param {string} [config.env='development'] - Environment mode
15
+ * @param {string} [config.rootPath='/'] - Root path of the application
16
+ * @returns {AppState} The singleton instance
17
+ */
18
+ static getInstance(config?: {
19
+ env?: string;
20
+ rootPath?: string;
21
+ }): AppState;
22
+ /**
23
+ * Get the current environment
24
+ * @returns {string} The environment mode (e.g., 'development', 'production')
25
+ */
26
+ get env(): string;
27
+ /**
28
+ * Get the root path
29
+ * @returns {string} The application root path
30
+ */
31
+ get rootPath(): string;
32
+ /**
33
+ * Get a value from state
34
+ * @param {string} key - The key to retrieve
35
+ * @returns {*} The value associated with the key
36
+ */
37
+ get(key: string): any;
38
+ /**
39
+ * Set a value in state
40
+ * @param {string} key - The key to set
41
+ * @param {*} value - The value to store
42
+ * @returns {AppState} Returns this for method chaining
43
+ */
44
+ set(key: string, value: any): AppState;
45
+ /**
46
+ * Check if a key exists in state
47
+ * @param {string} key - The key to check
48
+ * @returns {boolean} True if the key exists
49
+ */
50
+ has(key: string): boolean;
51
+ /**
52
+ * Remove a key from state
53
+ * @param {string} key - The key to remove
54
+ * @returns {AppState} Returns this for method chaining
55
+ */
56
+ remove(key: string): AppState;
57
+ /**
58
+ * Clear all dynamic state
59
+ * Note: Does not clear env and rootPath which are private fields
60
+ * @returns {AppState} Returns this for method chaining
61
+ */
62
+ clear(): AppState;
63
+ }
64
+ //# sourceMappingURL=AppState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppState.d.ts","sourceRoot":"","sources":["../../src/state/AppState.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,QAAQ;;IAMzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAW;IAEnC;;;;;OAKG;IACH,OAAO;IAMP;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,QAAQ;IAO1E;;;OAGG;IACH,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED;;;OAGG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAIrB;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;IAKtC;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;IAK7B;;;;OAIG;IACH,KAAK,IAAI,QAAQ;CAKpB"}
@@ -0,0 +1,89 @@
1
+ export default class AppState {
2
+ #env;
3
+ #rootPath;
4
+ #state;
5
+ static instance;
6
+ /**
7
+ * Private constructor for singleton pattern
8
+ * @param {Object} config - Configuration object
9
+ * @param {string} [config.env='development'] - Environment mode
10
+ * @param {string} [config.rootPath='/'] - Root path of the application
11
+ */
12
+ constructor({ env = 'development', rootPath = '/' } = {}) {
13
+ this.#env = env;
14
+ this.#rootPath = rootPath;
15
+ this.#state = new Map();
16
+ }
17
+ /**
18
+ * Gets or creates the singleton instance of AppState
19
+ * @param {Object} config - Configuration object
20
+ * @param {string} [config.env='development'] - Environment mode
21
+ * @param {string} [config.rootPath='/'] - Root path of the application
22
+ * @returns {AppState} The singleton instance
23
+ */
24
+ static getInstance(config) {
25
+ if (!AppState.instance) {
26
+ AppState.instance = new AppState(config || {});
27
+ }
28
+ return AppState.instance;
29
+ }
30
+ /**
31
+ * Get the current environment
32
+ * @returns {string} The environment mode (e.g., 'development', 'production')
33
+ */
34
+ get env() {
35
+ return this.#env;
36
+ }
37
+ /**
38
+ * Get the root path
39
+ * @returns {string} The application root path
40
+ */
41
+ get rootPath() {
42
+ return this.#rootPath;
43
+ }
44
+ /**
45
+ * Get a value from state
46
+ * @param {string} key - The key to retrieve
47
+ * @returns {*} The value associated with the key
48
+ */
49
+ get(key) {
50
+ return this.#state.get(key);
51
+ }
52
+ /**
53
+ * Set a value in state
54
+ * @param {string} key - The key to set
55
+ * @param {*} value - The value to store
56
+ * @returns {AppState} Returns this for method chaining
57
+ */
58
+ set(key, value) {
59
+ this.#state.set(key, value);
60
+ return this;
61
+ }
62
+ /**
63
+ * Check if a key exists in state
64
+ * @param {string} key - The key to check
65
+ * @returns {boolean} True if the key exists
66
+ */
67
+ has(key) {
68
+ return this.#state.has(key);
69
+ }
70
+ /**
71
+ * Remove a key from state
72
+ * @param {string} key - The key to remove
73
+ * @returns {AppState} Returns this for method chaining
74
+ */
75
+ remove(key) {
76
+ this.#state.delete(key);
77
+ return this;
78
+ }
79
+ /**
80
+ * Clear all dynamic state
81
+ * Note: Does not clear env and rootPath which are private fields
82
+ * @returns {AppState} Returns this for method chaining
83
+ */
84
+ clear() {
85
+ this.#state.clear();
86
+ return this;
87
+ }
88
+ }
89
+ //# sourceMappingURL=AppState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppState.js","sourceRoot":"","sources":["../../src/state/AppState.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,QAAQ;IAEzB,IAAI,CAAU;IACd,SAAS,CAAU;IACnB,MAAM,CAAoB;IAElB,MAAM,CAAC,QAAQ,CAAY;IAEnC;;;;;OAKG;IACH,YAAoB,EAAE,GAAG,GAAG,aAAa,EAAE,QAAQ,GAAG,GAAG,KAA0C,EAAE;QACjG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,MAA4C;QAC3D,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACrB,QAAQ,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAW;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,GAAW,EAAE,KAAU;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAW;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAW;QACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;CAEJ"}
@@ -0,0 +1,6 @@
1
+ export default class HtmlRenderer {
2
+ #private;
3
+ static renderFromFile(templatePath: string, vars: Record<string, any>): Promise<string>;
4
+ static render(template: string, vars: Record<string, any>): string;
5
+ }
6
+ //# sourceMappingURL=HtmlRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HtmlRenderer.d.ts","sourceRoot":"","sources":["../../src/utils/HtmlRenderer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,YAAY;;WAEhB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAU7F,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;CAsKrE"}
@@ -0,0 +1,128 @@
1
+ import fs from 'fs/promises';
2
+ export default class HtmlRenderer {
3
+ static async renderFromFile(templatePath, vars) {
4
+ const templateContent = await fs.readFile(templatePath, 'utf8');
5
+ if (!templateContent)
6
+ return '';
7
+ return HtmlRenderer.render(templateContent, vars);
8
+ }
9
+ static render(template, vars) {
10
+ return HtmlRenderer.#processTemplate(template, vars);
11
+ }
12
+ static #processTemplate(template, vars) {
13
+ let processed = template;
14
+ let hasChanges = true;
15
+ // Process blocks from innermost to outermost using iterative approach
16
+ while (hasChanges) {
17
+ const before = processed;
18
+ // Process {{#if}} with {{else}} - innermost first (non-greedy match)
19
+ processed = processed.replace(/\{\{#if\s+([^}]+)\}\}((?:(?!\{\{#if|\{\{#each).)*?)\{\{else\}\}((?:(?!\{\{#if|\{\{#each).)*?)\{\{\/if\}\}/s, (_match, condition, ifContent, elseContent) => {
20
+ const isTruthy = HtmlRenderer.#evaluateCondition(condition, vars);
21
+ return isTruthy ? ifContent : elseContent;
22
+ });
23
+ // Process {{#if}} without {{else}} - innermost first (non-greedy match)
24
+ processed = processed.replace(/\{\{#if\s+([^}]+)\}\}((?:(?!\{\{#if|\{\{#each).)*?)\{\{\/if\}\}/s, (_match, condition, content) => {
25
+ const isTruthy = HtmlRenderer.#evaluateCondition(condition, vars);
26
+ return isTruthy ? content : '';
27
+ });
28
+ // Process {{#each}} - innermost first (non-greedy match)
29
+ processed = processed.replace(/\{\{#each\s+([\w.]+)\}\}((?:(?!\{\{#if|\{\{#each).)*?)\{\{\/each\}\}/s, (_match, path, content) => {
30
+ const arr = HtmlRenderer.#resolveValue(path, vars);
31
+ if (!Array.isArray(arr))
32
+ return '';
33
+ return arr.map((item, index) => {
34
+ // Create new context with item properties and special variables
35
+ const itemVars = typeof item === 'object' && item !== null
36
+ ? { ...vars, ...item, this: item, index }
37
+ : { ...vars, this: item, index };
38
+ return HtmlRenderer.#replaceVariables(content, itemVars);
39
+ }).join('');
40
+ });
41
+ hasChanges = (processed !== before);
42
+ }
43
+ // Final pass: replace all variables
44
+ return HtmlRenderer.#replaceVariables(processed, vars);
45
+ }
46
+ static #evaluateCondition(condition, vars) {
47
+ // Trim the condition
48
+ condition = condition.trim();
49
+ // Check for comparison operators
50
+ const operators = [
51
+ { regex: /^(.+?)\s*===\s*(.+)$/, op: '===' },
52
+ { regex: /^(.+?)\s*!==\s*(.+)$/, op: '!==' },
53
+ { regex: /^(.+?)\s*==\s*(.+)$/, op: '==' },
54
+ { regex: /^(.+?)\s*!=\s*(.+)$/, op: '!=' },
55
+ { regex: /^(.+?)\s*>=\s*(.+)$/, op: '>=' },
56
+ { regex: /^(.+?)\s*<=\s*(.+)$/, op: '<=' },
57
+ { regex: /^(.+?)\s*>\s*(.+)$/, op: '>' },
58
+ { regex: /^(.+?)\s*<\s*(.+)$/, op: '<' }
59
+ ];
60
+ // Check each operator pattern
61
+ for (const { regex, op } of operators) {
62
+ const match = condition.match(regex);
63
+ if (match) {
64
+ const left = HtmlRenderer.#resolveConditionValue(match[1].trim(), vars);
65
+ const right = HtmlRenderer.#resolveConditionValue(match[2].trim(), vars);
66
+ switch (op) {
67
+ case '===': return left === right;
68
+ case '!==': return left !== right;
69
+ case '==': return left == right;
70
+ case '!=': return left != right;
71
+ case '>': return left > right;
72
+ case '<': return left < right;
73
+ case '>=': return left >= right;
74
+ case '<=': return left <= right;
75
+ }
76
+ }
77
+ }
78
+ // No operator found - evaluate as truthy check
79
+ const value = HtmlRenderer.#resolveValue(condition, vars);
80
+ return Array.isArray(value) ? value.length > 0 : Boolean(value);
81
+ }
82
+ static #resolveConditionValue(value, vars) {
83
+ // Check if it's a quoted string
84
+ if ((value.startsWith('"') && value.endsWith('"')) ||
85
+ (value.startsWith("'") && value.endsWith("'"))) {
86
+ return value.slice(1, -1);
87
+ }
88
+ // Check if it's a number
89
+ if (!isNaN(Number(value)) && value.trim() !== '') {
90
+ return Number(value);
91
+ }
92
+ // Check if it's a boolean
93
+ if (value === 'true')
94
+ return true;
95
+ if (value === 'false')
96
+ return false;
97
+ if (value === 'null')
98
+ return null;
99
+ if (value === 'undefined')
100
+ return undefined;
101
+ // Otherwise, resolve as a variable path
102
+ return HtmlRenderer.#resolveValue(value, vars);
103
+ }
104
+ static #resolveValue(path, vars) {
105
+ const keys = path.split('.');
106
+ let value = vars;
107
+ for (const key of keys) {
108
+ if (value == null || !Object.hasOwn(value, key))
109
+ return null;
110
+ value = value[key];
111
+ }
112
+ return value;
113
+ }
114
+ static #replaceVariables(template, vars) {
115
+ // {{key}} or {{key.nested}} or {{this.property}}
116
+ return template.replace(/\{\{([\w.]+)\}\}/g, (_, path) => {
117
+ const keys = path.split('.');
118
+ let value = vars;
119
+ for (const key of keys) {
120
+ if (value == null || !Object.hasOwn(value, key))
121
+ return '';
122
+ value = value[key];
123
+ }
124
+ return typeof value === 'function' ? '' : value;
125
+ });
126
+ }
127
+ }
128
+ //# sourceMappingURL=HtmlRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HtmlRenderer.js","sourceRoot":"","sources":["../../src/utils/HtmlRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ interface ParsedMessage {
2
+ id?: string;
3
+ type: string;
4
+ payload: any;
5
+ }
6
+ export default class WebSocketMessageFormatter {
7
+ /**
8
+ * Parses a raw WebSocket message string into a structured object.
9
+ *
10
+ * @param {string} rawMessage - The raw message string to parse, expected to be valid JSON.
11
+ * @returns {Object|null} Returns a parsed object with 'id' (if present), 'type' and 'payload' properties if successful,
12
+ * or null if the message is invalid, cannot be parsed, or lacks required fields.
13
+ *
14
+ * @example
15
+ * const message = '{"id": "123-abc", "type": "update", "payload": {"id": 123}}';
16
+ * const parsed = WebSocketMessageFormatter.parse(message);
17
+ * // Returns: { id: "123-abc", type: "update", payload: { id: 123 } }
18
+ *
19
+ * @example
20
+ * const invalidMessage = 'not json';
21
+ * const parsed = WebSocketMessageFormatter.parse(invalidMessage);
22
+ * // Returns: null
23
+ */
24
+ static parse(rawMessage: string): ParsedMessage | null;
25
+ /**
26
+ * Formats a WebSocket message into a JSON string.
27
+ *
28
+ * Creates a message object with a unique ID, type, and payload, then serializes it to JSON.
29
+ * If serialization fails, returns an error message object instead.
30
+ *
31
+ * @static
32
+ * @param {string} type - The type/category of the WebSocket message
33
+ * @param {*} payload - The data payload to be sent with the message
34
+ * @returns {string} A JSON string representing the formatted message, or an error message if serialization fails
35
+ * @throws {Error} Throws if type parameter is not a string
36
+ */
37
+ static format(type: string, payload: any): string;
38
+ }
39
+ export {};
40
+ //# sourceMappingURL=WebSocketMessageFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketMessageFormatter.d.ts","sourceRoot":"","sources":["../../src/websocket/WebSocketMessageFormatter.ts"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,CAAC;CACd;AAED,MAAM,CAAC,OAAO,OAAO,yBAAyB;IAC5C;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAuCtD;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM;CA+BlD"}
@@ -0,0 +1,99 @@
1
+ import { logger } from '../logger/Logger.js';
2
+ export default class WebSocketMessageFormatter {
3
+ /**
4
+ * Parses a raw WebSocket message string into a structured object.
5
+ *
6
+ * @param {string} rawMessage - The raw message string to parse, expected to be valid JSON.
7
+ * @returns {Object|null} Returns a parsed object with 'id' (if present), 'type' and 'payload' properties if successful,
8
+ * or null if the message is invalid, cannot be parsed, or lacks required fields.
9
+ *
10
+ * @example
11
+ * const message = '{"id": "123-abc", "type": "update", "payload": {"id": 123}}';
12
+ * const parsed = WebSocketMessageFormatter.parse(message);
13
+ * // Returns: { id: "123-abc", type: "update", payload: { id: 123 } }
14
+ *
15
+ * @example
16
+ * const invalidMessage = 'not json';
17
+ * const parsed = WebSocketMessageFormatter.parse(invalidMessage);
18
+ * // Returns: null
19
+ */
20
+ static parse(rawMessage) {
21
+ if (!rawMessage || typeof rawMessage !== 'string') {
22
+ logger.warn('Received invalid message data', {
23
+ code: 'WEBSOCKET_INVALID_MESSAGE',
24
+ source: 'WebSocketMessageFormatter.parse',
25
+ messageType: typeof rawMessage,
26
+ });
27
+ return null;
28
+ }
29
+ try {
30
+ const parsedObject = JSON.parse(rawMessage);
31
+ if (typeof parsedObject.type !== 'string' || typeof parsedObject.payload === 'undefined') {
32
+ logger.error('Parsed message lacks required fields', {
33
+ code: 'WEBSOCKET_INVALID_FIELDS',
34
+ source: 'WebSocketMessageFormatter.parse',
35
+ hasType: !!parsedObject.type,
36
+ hasPayload: !!parsedObject.payload,
37
+ });
38
+ return null;
39
+ }
40
+ // Preserve id if present, otherwise return just type and payload
41
+ return {
42
+ ...(parsedObject.id && { id: parsedObject.id }),
43
+ type: parsedObject.type,
44
+ payload: parsedObject.payload,
45
+ };
46
+ }
47
+ catch (error) {
48
+ logger.error('Failed to parse incoming WebSocket message as JSON', {
49
+ code: 'WEBSOCKET_PARSE_ERROR',
50
+ source: 'WebSocketMessageFormatter.parse',
51
+ error: error instanceof Error ? error : String(error),
52
+ });
53
+ return null;
54
+ }
55
+ }
56
+ /**
57
+ * Formats a WebSocket message into a JSON string.
58
+ *
59
+ * Creates a message object with a unique ID, type, and payload, then serializes it to JSON.
60
+ * If serialization fails, returns an error message object instead.
61
+ *
62
+ * @static
63
+ * @param {string} type - The type/category of the WebSocket message
64
+ * @param {*} payload - The data payload to be sent with the message
65
+ * @returns {string} A JSON string representing the formatted message, or an error message if serialization fails
66
+ * @throws {Error} Throws if type parameter is not a string
67
+ */
68
+ static format(type, payload) {
69
+ // Validate type parameter
70
+ if (typeof type !== 'string') {
71
+ throw new Error('Message type must be a string');
72
+ }
73
+ const messageObject = {
74
+ id: crypto.randomUUID(),
75
+ type,
76
+ payload,
77
+ };
78
+ try {
79
+ return JSON.stringify(messageObject);
80
+ }
81
+ catch (error) {
82
+ logger.error('Failed to serialize WebSocket message', {
83
+ code: 'WEBSOCKET_SERIALIZE_ERROR',
84
+ source: 'WebSocketMessageFormatter.format',
85
+ error,
86
+ });
87
+ // Provide more specific error message for circular references
88
+ const errorMsg = error.message.includes('circular')
89
+ ? 'Circular reference in payload'
90
+ : 'Serialization failed';
91
+ return JSON.stringify({
92
+ id: crypto.randomUUID(),
93
+ type: 'error',
94
+ payload: { message: errorMsg },
95
+ });
96
+ }
97
+ }
98
+ }
99
+ //# sourceMappingURL=WebSocketMessageFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketMessageFormatter.js","sourceRoot":"","sources":["../../src/websocket/WebSocketMessageFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAQ7C,MAAM,CAAC,OAAO,OAAO,yBAAyB;IAC5C;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,KAAK,CAAC,UAAkB;QAC7B,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBAC3C,IAAI,EAAE,2BAA2B;gBACjC,MAAM,EAAE,iCAAiC;gBACzC,WAAW,EAAE,OAAO,UAAU;aAC/B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAE5C,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;gBACzF,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE;oBACnD,IAAI,EAAE,0BAA0B;oBAChC,MAAM,EAAE,iCAAiC;oBACzC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI;oBAC5B,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO;iBACnC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YACd,CAAC;YAED,iEAAiE;YACjE,OAAO;gBACL,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC;gBAC/C,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,OAAO,EAAE,YAAY,CAAC,OAAO;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE;gBACjE,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,iCAAiC;gBACzC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACtD,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,OAAY;QACtC,0BAA0B;QAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,aAAa,GAAG;YACpB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,IAAI;YACJ,OAAO;SACR,CAAC;QAEF,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;gBACpD,IAAI,EAAE,2BAA2B;gBACjC,MAAM,EAAE,kCAAkC;gBAC1C,KAAK;aACN,CAAC,CAAC;YACH,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACjD,CAAC,CAAC,+BAA+B;gBACjC,CAAC,CAAC,sBAAsB,CAAC;YAC3B,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { EventEmitter } from 'events';
2
+ interface WebSocketServerOptions {
3
+ port?: number;
4
+ host?: string;
5
+ }
6
+ export default class WebSocketServer extends EventEmitter {
7
+ #private;
8
+ constructor({ port, host }?: WebSocketServerOptions);
9
+ get clientCount(): number;
10
+ broadcast(message: string): void;
11
+ close(): Promise<void>;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=WebSocketServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketServer.d.ts","sourceRoot":"","sources":["../../src/websocket/WebSocketServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,YAAY;;gBAG3C,EAAE,IAAW,EAAE,IAAgB,EAAE,GAAE,sBAA2B;IAW1E,IAAI,WAAW,IAAI,MAAM,CAExB;IAiGD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAgBhC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAuBvB"}