@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.
- package/CHANGELOG.md +62 -0
- package/LICENSE +21 -0
- package/README.md +297 -0
- package/dist/client/ApiClient.d.ts +121 -0
- package/dist/client/ApiClient.d.ts.map +1 -0
- package/dist/client/ApiClient.js +289 -0
- package/dist/client/ApiClient.js.map +1 -0
- package/dist/context/Context.d.ts +71 -0
- package/dist/context/Context.d.ts.map +1 -0
- package/dist/context/Context.js +81 -0
- package/dist/context/Context.js.map +1 -0
- package/dist/docs/OpenApiGenerator.d.ts +135 -0
- package/dist/docs/OpenApiGenerator.d.ts.map +1 -0
- package/dist/docs/OpenApiGenerator.js +165 -0
- package/dist/docs/OpenApiGenerator.js.map +1 -0
- package/dist/events/Events.d.ts +52 -0
- package/dist/events/Events.d.ts.map +1 -0
- package/dist/events/Events.js +70 -0
- package/dist/events/Events.js.map +1 -0
- package/dist/events/EventsManager.d.ts +46 -0
- package/dist/events/EventsManager.d.ts.map +1 -0
- package/dist/events/EventsManager.js +137 -0
- package/dist/events/EventsManager.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/local/Local.d.ts +83 -0
- package/dist/local/Local.d.ts.map +1 -0
- package/dist/local/Local.js +114 -0
- package/dist/local/Local.js.map +1 -0
- package/dist/logger/Logger.d.ts +365 -0
- package/dist/logger/Logger.d.ts.map +1 -0
- package/dist/logger/Logger.js +582 -0
- package/dist/logger/Logger.js.map +1 -0
- package/dist/middleware/RequestLogger.d.ts +62 -0
- package/dist/middleware/RequestLogger.d.ts.map +1 -0
- package/dist/middleware/RequestLogger.js +71 -0
- package/dist/middleware/RequestLogger.js.map +1 -0
- package/dist/notifications/Slack.d.ts +19 -0
- package/dist/notifications/Slack.d.ts.map +1 -0
- package/dist/notifications/Slack.js +55 -0
- package/dist/notifications/Slack.js.map +1 -0
- package/dist/router/RouteError.d.ts +21 -0
- package/dist/router/RouteError.d.ts.map +1 -0
- package/dist/router/RouteError.js +31 -0
- package/dist/router/RouteError.js.map +1 -0
- package/dist/router/Router.d.ts +66 -0
- package/dist/router/Router.d.ts.map +1 -0
- package/dist/router/Router.js +327 -0
- package/dist/router/Router.js.map +1 -0
- package/dist/router/Routes.d.ts +30 -0
- package/dist/router/Routes.d.ts.map +1 -0
- package/dist/router/Routes.js +52 -0
- package/dist/router/Routes.js.map +1 -0
- package/dist/router/StaticFileHandler.d.ts +44 -0
- package/dist/router/StaticFileHandler.d.ts.map +1 -0
- package/dist/router/StaticFileHandler.js +148 -0
- package/dist/router/StaticFileHandler.js.map +1 -0
- package/dist/sanitizer/HtmlSanitizer.d.ts +306 -0
- package/dist/sanitizer/HtmlSanitizer.d.ts.map +1 -0
- package/dist/sanitizer/HtmlSanitizer.js +808 -0
- package/dist/sanitizer/HtmlSanitizer.js.map +1 -0
- package/dist/server/Server.d.ts +28 -0
- package/dist/server/Server.d.ts.map +1 -0
- package/dist/server/Server.js +95 -0
- package/dist/server/Server.js.map +1 -0
- package/dist/state/AppState.d.ts +64 -0
- package/dist/state/AppState.d.ts.map +1 -0
- package/dist/state/AppState.js +89 -0
- package/dist/state/AppState.js.map +1 -0
- package/dist/utils/HtmlRenderer.d.ts +6 -0
- package/dist/utils/HtmlRenderer.d.ts.map +1 -0
- package/dist/utils/HtmlRenderer.js +128 -0
- package/dist/utils/HtmlRenderer.js.map +1 -0
- package/dist/websocket/WebSocketMessageFormatter.d.ts +40 -0
- package/dist/websocket/WebSocketMessageFormatter.d.ts.map +1 -0
- package/dist/websocket/WebSocketMessageFormatter.js +99 -0
- package/dist/websocket/WebSocketMessageFormatter.js.map +1 -0
- package/dist/websocket/WebSocketServer.d.ts +14 -0
- package/dist/websocket/WebSocketServer.d.ts.map +1 -0
- package/dist/websocket/WebSocketServer.js +138 -0
- package/dist/websocket/WebSocketServer.js.map +1 -0
- 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 @@
|
|
|
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"}
|