@qodalis/cli-server-node 1.0.0-beta.1

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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -0
  3. package/dist/abstractions/cli-command-author.d.ts +11 -0
  4. package/dist/abstractions/cli-command-author.d.ts.map +1 -0
  5. package/dist/abstractions/cli-command-author.js +14 -0
  6. package/dist/abstractions/cli-command-author.js.map +1 -0
  7. package/dist/abstractions/cli-command-parameter-descriptor.d.ts +18 -0
  8. package/dist/abstractions/cli-command-parameter-descriptor.d.ts.map +1 -0
  9. package/dist/abstractions/cli-command-parameter-descriptor.js +21 -0
  10. package/dist/abstractions/cli-command-parameter-descriptor.js.map +1 -0
  11. package/dist/abstractions/cli-command-processor.d.ts +26 -0
  12. package/dist/abstractions/cli-command-processor.d.ts.map +1 -0
  13. package/dist/abstractions/cli-command-processor.js +14 -0
  14. package/dist/abstractions/cli-command-processor.js.map +1 -0
  15. package/dist/abstractions/cli-process-command.d.ts +9 -0
  16. package/dist/abstractions/cli-process-command.d.ts.map +1 -0
  17. package/dist/abstractions/cli-process-command.js +3 -0
  18. package/dist/abstractions/cli-process-command.js.map +1 -0
  19. package/dist/abstractions/index.d.ts +5 -0
  20. package/dist/abstractions/index.d.ts.map +1 -0
  21. package/dist/abstractions/index.js +11 -0
  22. package/dist/abstractions/index.js.map +1 -0
  23. package/dist/controllers/cli-controller.d.ts +4 -0
  24. package/dist/controllers/cli-controller.d.ts.map +1 -0
  25. package/dist/controllers/cli-controller.js +42 -0
  26. package/dist/controllers/cli-controller.js.map +1 -0
  27. package/dist/create-cli-server.d.ts +25 -0
  28. package/dist/create-cli-server.d.ts.map +1 -0
  29. package/dist/create-cli-server.js +35 -0
  30. package/dist/create-cli-server.js.map +1 -0
  31. package/dist/extensions/cli-builder.d.ts +9 -0
  32. package/dist/extensions/cli-builder.d.ts.map +1 -0
  33. package/dist/extensions/cli-builder.js +18 -0
  34. package/dist/extensions/cli-builder.js.map +1 -0
  35. package/dist/extensions/index.d.ts +2 -0
  36. package/dist/extensions/index.d.ts.map +1 -0
  37. package/dist/extensions/index.js +6 -0
  38. package/dist/extensions/index.js.map +1 -0
  39. package/dist/index.d.ts +14 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +40 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/models/cli-server-command-descriptor.d.ts +16 -0
  44. package/dist/models/cli-server-command-descriptor.d.ts.map +1 -0
  45. package/dist/models/cli-server-command-descriptor.js +3 -0
  46. package/dist/models/cli-server-command-descriptor.js.map +1 -0
  47. package/dist/models/cli-server-output.d.ts +23 -0
  48. package/dist/models/cli-server-output.d.ts.map +1 -0
  49. package/dist/models/cli-server-output.js +3 -0
  50. package/dist/models/cli-server-output.js.map +1 -0
  51. package/dist/models/cli-server-response.d.ts +6 -0
  52. package/dist/models/cli-server-response.d.ts.map +1 -0
  53. package/dist/models/cli-server-response.js +3 -0
  54. package/dist/models/cli-server-response.js.map +1 -0
  55. package/dist/models/index.d.ts +4 -0
  56. package/dist/models/index.d.ts.map +1 -0
  57. package/dist/models/index.js +3 -0
  58. package/dist/models/index.js.map +1 -0
  59. package/dist/processors/cli-base64-command-processor.d.ts +11 -0
  60. package/dist/processors/cli-base64-command-processor.d.ts.map +1 -0
  61. package/dist/processors/cli-base64-command-processor.js +40 -0
  62. package/dist/processors/cli-base64-command-processor.js.map +1 -0
  63. package/dist/processors/cli-echo-command-processor.d.ts +8 -0
  64. package/dist/processors/cli-echo-command-processor.d.ts.map +1 -0
  65. package/dist/processors/cli-echo-command-processor.js +14 -0
  66. package/dist/processors/cli-echo-command-processor.js.map +1 -0
  67. package/dist/processors/cli-hash-command-processor.d.ts +10 -0
  68. package/dist/processors/cli-hash-command-processor.d.ts.map +1 -0
  69. package/dist/processors/cli-hash-command-processor.js +30 -0
  70. package/dist/processors/cli-hash-command-processor.js.map +1 -0
  71. package/dist/processors/cli-http-command-processor.d.ts +11 -0
  72. package/dist/processors/cli-http-command-processor.d.ts.map +1 -0
  73. package/dist/processors/cli-http-command-processor.js +79 -0
  74. package/dist/processors/cli-http-command-processor.js.map +1 -0
  75. package/dist/processors/cli-status-command-processor.d.ts +7 -0
  76. package/dist/processors/cli-status-command-processor.d.ts.map +1 -0
  77. package/dist/processors/cli-status-command-processor.js +18 -0
  78. package/dist/processors/cli-status-command-processor.js.map +1 -0
  79. package/dist/processors/cli-system-command-processor.d.ts +8 -0
  80. package/dist/processors/cli-system-command-processor.d.ts.map +1 -0
  81. package/dist/processors/cli-system-command-processor.js +33 -0
  82. package/dist/processors/cli-system-command-processor.js.map +1 -0
  83. package/dist/processors/cli-uuid-command-processor.d.ts +10 -0
  84. package/dist/processors/cli-uuid-command-processor.d.ts.map +1 -0
  85. package/dist/processors/cli-uuid-command-processor.js +27 -0
  86. package/dist/processors/cli-uuid-command-processor.js.map +1 -0
  87. package/dist/processors/index.d.ts +8 -0
  88. package/dist/processors/index.d.ts.map +1 -0
  89. package/dist/processors/index.js +18 -0
  90. package/dist/processors/index.js.map +1 -0
  91. package/dist/server.d.ts +3 -0
  92. package/dist/server.d.ts.map +1 -0
  93. package/dist/server.js +43 -0
  94. package/dist/server.js.map +1 -0
  95. package/dist/services/cli-command-executor-service.d.ts +12 -0
  96. package/dist/services/cli-command-executor-service.d.ts.map +1 -0
  97. package/dist/services/cli-command-executor-service.js +45 -0
  98. package/dist/services/cli-command-executor-service.js.map +1 -0
  99. package/dist/services/cli-command-registry.d.ts +14 -0
  100. package/dist/services/cli-command-registry.d.ts.map +1 -0
  101. package/dist/services/cli-command-registry.js +32 -0
  102. package/dist/services/cli-command-registry.js.map +1 -0
  103. package/dist/services/cli-event-socket-manager.d.ts +15 -0
  104. package/dist/services/cli-event-socket-manager.d.ts.map +1 -0
  105. package/dist/services/cli-event-socket-manager.js +60 -0
  106. package/dist/services/cli-event-socket-manager.js.map +1 -0
  107. package/dist/services/cli-response-builder.d.ts +22 -0
  108. package/dist/services/cli-response-builder.d.ts.map +1 -0
  109. package/dist/services/cli-response-builder.js +36 -0
  110. package/dist/services/cli-response-builder.js.map +1 -0
  111. package/dist/services/index.d.ts +5 -0
  112. package/dist/services/index.d.ts.map +1 -0
  113. package/dist/services/index.js +12 -0
  114. package/dist/services/index.js.map +1 -0
  115. package/package.json +48 -0
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliCommandExecutorService = void 0;
4
+ class CliCommandExecutorService {
5
+ _registry;
6
+ constructor(_registry) {
7
+ this._registry = _registry;
8
+ }
9
+ async executeAsync(command) {
10
+ const processor = this._registry.findProcessor(command.command, command.chainCommands?.length ? command.chainCommands : undefined);
11
+ if (!processor) {
12
+ return {
13
+ exitCode: 1,
14
+ outputs: [
15
+ {
16
+ type: 'text',
17
+ value: `Unknown command: ${command.command}`,
18
+ style: 'error',
19
+ },
20
+ ],
21
+ };
22
+ }
23
+ try {
24
+ const result = await processor.handleAsync(command);
25
+ return {
26
+ exitCode: 0,
27
+ outputs: [{ type: 'text', value: result }],
28
+ };
29
+ }
30
+ catch (err) {
31
+ return {
32
+ exitCode: 1,
33
+ outputs: [
34
+ {
35
+ type: 'text',
36
+ value: `Error executing command: ${err.message ?? err}`,
37
+ style: 'error',
38
+ },
39
+ ],
40
+ };
41
+ }
42
+ }
43
+ }
44
+ exports.CliCommandExecutorService = CliCommandExecutorService;
45
+ //# sourceMappingURL=cli-command-executor-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-command-executor-service.js","sourceRoot":"","sources":["../../src/services/cli-command-executor-service.ts"],"names":[],"mappings":";;;AAQA,MAAa,yBAAyB;IACL;IAA7B,YAA6B,SAA8B;QAA9B,cAAS,GAAT,SAAS,CAAqB;IAAG,CAAC;IAE/D,KAAK,CAAC,YAAY,CAAC,OAA0B;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAC1C,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CACpE,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO;gBACH,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,oBAAoB,OAAO,CAAC,OAAO,EAAE;wBAC5C,KAAK,EAAE,OAAO;qBACjB;iBACJ;aACJ,CAAC;QACN,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACpD,OAAO;gBACH,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC7C,CAAC;QACN,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO;gBACH,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,4BAA4B,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE;wBACvD,KAAK,EAAE,OAAO;qBACjB;iBACJ;aACJ,CAAC;QACN,CAAC;IACL,CAAC;CACJ;AAzCD,8DAyCC"}
@@ -0,0 +1,14 @@
1
+ import { ICliCommandProcessor } from '../abstractions';
2
+ export interface ICliCommandRegistry {
3
+ readonly processors: ReadonlyArray<ICliCommandProcessor>;
4
+ register(processor: ICliCommandProcessor): void;
5
+ findProcessor(command: string, chainCommands?: string[]): ICliCommandProcessor | undefined;
6
+ }
7
+ export declare class CliCommandRegistry implements ICliCommandRegistry {
8
+ private _processors;
9
+ get processors(): ReadonlyArray<ICliCommandProcessor>;
10
+ register(processor: ICliCommandProcessor): void;
11
+ findProcessor(command: string, chainCommands?: string[]): ICliCommandProcessor | undefined;
12
+ private resolveChain;
13
+ }
14
+ //# sourceMappingURL=cli-command-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-command-registry.d.ts","sourceRoot":"","sources":["../../src/services/cli-command-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACzD,QAAQ,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAChD,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,oBAAoB,GAAG,SAAS,CAAC;CAC9F;AAED,qBAAa,kBAAmB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,WAAW,CAAgD;IAEnE,IAAI,UAAU,IAAI,aAAa,CAAC,oBAAoB,CAAC,CAEpD;IAED,QAAQ,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAI/C,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,oBAAoB,GAAG,SAAS;IAS1F,OAAO,CAAC,YAAY;CAkBvB"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliCommandRegistry = void 0;
4
+ class CliCommandRegistry {
5
+ _processors = new Map();
6
+ get processors() {
7
+ return Array.from(this._processors.values());
8
+ }
9
+ register(processor) {
10
+ this._processors.set(processor.command.toLowerCase(), processor);
11
+ }
12
+ findProcessor(command, chainCommands) {
13
+ const processor = this._processors.get(command.toLowerCase());
14
+ if (!processor || !chainCommands?.length) {
15
+ return processor;
16
+ }
17
+ return this.resolveChain(processor, chainCommands);
18
+ }
19
+ resolveChain(processor, chainCommands) {
20
+ let current = processor;
21
+ for (const sub of chainCommands) {
22
+ const child = current.processors?.find((p) => p.command.toLowerCase() === sub.toLowerCase());
23
+ if (!child) {
24
+ return current.allowUnlistedCommands ? current : undefined;
25
+ }
26
+ current = child;
27
+ }
28
+ return current;
29
+ }
30
+ }
31
+ exports.CliCommandRegistry = CliCommandRegistry;
32
+ //# sourceMappingURL=cli-command-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-command-registry.js","sourceRoot":"","sources":["../../src/services/cli-command-registry.ts"],"names":[],"mappings":";;;AAQA,MAAa,kBAAkB;IACnB,WAAW,GAAsC,IAAI,GAAG,EAAE,CAAC;IAEnE,IAAI,UAAU;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ,CAAC,SAA+B;QACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;IACrE,CAAC;IAED,aAAa,CAAC,OAAe,EAAE,aAAwB;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;YACvC,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACvD,CAAC;IAEO,YAAY,CAChB,SAA+B,EAC/B,aAAuB;QAEvB,IAAI,OAAO,GAAG,SAAS,CAAC;QAExB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CACvD,CAAC;YACF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,OAAO,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,CAAC;YACD,OAAO,GAAG,KAAK,CAAC;QACpB,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AAtCD,gDAsCC"}
@@ -0,0 +1,15 @@
1
+ import type { Server } from 'http';
2
+ export declare class CliEventSocketManager {
3
+ private _wss;
4
+ private readonly _clients;
5
+ /**
6
+ * Attach to an HTTP server and listen for WebSocket upgrades on /ws/cli/events.
7
+ */
8
+ attach(server: Server): void;
9
+ /**
10
+ * Broadcast a disconnect event to all connected clients and close sockets.
11
+ */
12
+ broadcastDisconnect(): Promise<void>;
13
+ dispose(): void;
14
+ }
15
+ //# sourceMappingURL=cli-event-socket-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-event-socket-manager.d.ts","sourceRoot":"","sources":["../../src/services/cli-event-socket-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IAEjD;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IA2B5B;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB1C,OAAO,IAAI,IAAI;CAOlB"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliEventSocketManager = void 0;
4
+ const ws_1 = require("ws");
5
+ class CliEventSocketManager {
6
+ _wss = null;
7
+ _clients = new Set();
8
+ /**
9
+ * Attach to an HTTP server and listen for WebSocket upgrades on /ws/cli/events.
10
+ */
11
+ attach(server) {
12
+ this._wss = new ws_1.WebSocketServer({ noServer: true });
13
+ server.on('upgrade', (request, socket, head) => {
14
+ if (request.url !== '/ws/cli/events') {
15
+ return; // Let other upgrade handlers (if any) handle it
16
+ }
17
+ this._wss.handleUpgrade(request, socket, head, (ws) => {
18
+ this._wss.emit('connection', ws, request);
19
+ });
20
+ });
21
+ this._wss.on('connection', (ws) => {
22
+ this._clients.add(ws);
23
+ ws.send(JSON.stringify({ type: 'connected' }));
24
+ ws.on('close', () => {
25
+ this._clients.delete(ws);
26
+ });
27
+ ws.on('error', () => {
28
+ this._clients.delete(ws);
29
+ });
30
+ });
31
+ }
32
+ /**
33
+ * Broadcast a disconnect event to all connected clients and close sockets.
34
+ */
35
+ async broadcastDisconnect() {
36
+ const message = JSON.stringify({ type: 'disconnect' });
37
+ const promises = [];
38
+ for (const ws of this._clients) {
39
+ if (ws.readyState === ws_1.WebSocket.OPEN) {
40
+ promises.push(new Promise((resolve) => {
41
+ ws.send(message, () => {
42
+ ws.close(1000, 'Server shutting down');
43
+ resolve();
44
+ });
45
+ }));
46
+ }
47
+ }
48
+ await Promise.all(promises);
49
+ this._clients.clear();
50
+ }
51
+ dispose() {
52
+ for (const ws of this._clients) {
53
+ ws.terminate();
54
+ }
55
+ this._clients.clear();
56
+ this._wss?.close();
57
+ }
58
+ }
59
+ exports.CliEventSocketManager = CliEventSocketManager;
60
+ //# sourceMappingURL=cli-event-socket-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-event-socket-manager.js","sourceRoot":"","sources":["../../src/services/cli-event-socket-manager.ts"],"names":[],"mappings":";;;AAAA,2BAAgD;AAGhD,MAAa,qBAAqB;IACtB,IAAI,GAA2B,IAAI,CAAC;IAC3B,QAAQ,GAAG,IAAI,GAAG,EAAa,CAAC;IAEjD;;OAEG;IACH,MAAM,CAAC,MAAc;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,oBAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC3C,IAAI,OAAO,CAAC,GAAG,KAAK,gBAAgB,EAAE,CAAC;gBACnC,OAAO,CAAC,gDAAgD;YAC5D,CAAC;YAED,IAAI,CAAC,IAAK,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;gBACnD,IAAI,CAAC,IAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YAE/C,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;gBACnC,QAAQ,CAAC,IAAI,CACT,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC1B,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;wBAClB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;wBACvC,OAAO,EAAE,CAAC;oBACd,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CACL,CAAC;YACN,CAAC;QACL,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO;QACH,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,EAAE,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;CACJ;AAlED,sDAkEC"}
@@ -0,0 +1,22 @@
1
+ import { CliServerResponse } from '../models';
2
+ export interface ICliResponseBuilder {
3
+ writeText(text: string, style?: 'success' | 'error' | 'info' | 'warning'): void;
4
+ writeTable(headers: string[], rows: string[][]): void;
5
+ writeList(items: string[], ordered?: boolean): void;
6
+ writeJson(value: any): void;
7
+ writeKeyValue(entries: Record<string, string>): void;
8
+ setExitCode(code: number): void;
9
+ build(): CliServerResponse;
10
+ }
11
+ export declare class CliResponseBuilder implements ICliResponseBuilder {
12
+ private _exitCode;
13
+ private _outputs;
14
+ writeText(text: string, style?: 'success' | 'error' | 'info' | 'warning'): void;
15
+ writeTable(headers: string[], rows: string[][]): void;
16
+ writeList(items: string[], ordered?: boolean): void;
17
+ writeJson(value: any): void;
18
+ writeKeyValue(entries: Record<string, string>): void;
19
+ setExitCode(code: number): void;
20
+ build(): CliServerResponse;
21
+ }
22
+ //# sourceMappingURL=cli-response-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-response-builder.d.ts","sourceRoot":"","sources":["../../src/services/cli-response-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAChF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC;IACtD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACpD,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACrD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,IAAI,iBAAiB,CAAC;CAC9B;AAED,qBAAa,kBAAmB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAyB;IAEzC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI;IAI/E,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;IAIrD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,UAAQ,GAAG,IAAI;IAIjD,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAI3B,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAOpD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,KAAK,IAAI,iBAAiB;CAM7B"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliResponseBuilder = void 0;
4
+ class CliResponseBuilder {
5
+ _exitCode = 0;
6
+ _outputs = [];
7
+ writeText(text, style) {
8
+ this._outputs.push({ type: 'text', value: text, ...(style ? { style } : {}) });
9
+ }
10
+ writeTable(headers, rows) {
11
+ this._outputs.push({ type: 'table', headers, rows });
12
+ }
13
+ writeList(items, ordered = false) {
14
+ this._outputs.push({ type: 'list', items, ordered });
15
+ }
16
+ writeJson(value) {
17
+ this._outputs.push({ type: 'json', value });
18
+ }
19
+ writeKeyValue(entries) {
20
+ this._outputs.push({
21
+ type: 'key-value',
22
+ entries: Object.entries(entries).map(([key, value]) => ({ key, value })),
23
+ });
24
+ }
25
+ setExitCode(code) {
26
+ this._exitCode = code;
27
+ }
28
+ build() {
29
+ return {
30
+ exitCode: this._exitCode,
31
+ outputs: this._outputs,
32
+ };
33
+ }
34
+ }
35
+ exports.CliResponseBuilder = CliResponseBuilder;
36
+ //# sourceMappingURL=cli-response-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-response-builder.js","sourceRoot":"","sources":["../../src/services/cli-response-builder.ts"],"names":[],"mappings":";;;AAaA,MAAa,kBAAkB;IACnB,SAAS,GAAG,CAAC,CAAC;IACd,QAAQ,GAAsB,EAAE,CAAC;IAEzC,SAAS,CAAC,IAAY,EAAE,KAAgD;QACpE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,UAAU,CAAC,OAAiB,EAAE,IAAgB;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,KAAe,EAAE,OAAO,GAAG,KAAK;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,KAAU;QAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,OAA+B;QACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;SAC3E,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,OAAO,EAAE,IAAI,CAAC,QAAQ;SACzB,CAAC;IACN,CAAC;CACJ;AArCD,gDAqCC"}
@@ -0,0 +1,5 @@
1
+ export { ICliCommandRegistry, CliCommandRegistry } from './cli-command-registry';
2
+ export { ICliResponseBuilder, CliResponseBuilder } from './cli-response-builder';
3
+ export { ICliCommandExecutorService, CliCommandExecutorService } from './cli-command-executor-service';
4
+ export { CliEventSocketManager } from './cli-event-socket-manager';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACvG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliEventSocketManager = exports.CliCommandExecutorService = exports.CliResponseBuilder = exports.CliCommandRegistry = void 0;
4
+ var cli_command_registry_1 = require("./cli-command-registry");
5
+ Object.defineProperty(exports, "CliCommandRegistry", { enumerable: true, get: function () { return cli_command_registry_1.CliCommandRegistry; } });
6
+ var cli_response_builder_1 = require("./cli-response-builder");
7
+ Object.defineProperty(exports, "CliResponseBuilder", { enumerable: true, get: function () { return cli_response_builder_1.CliResponseBuilder; } });
8
+ var cli_command_executor_service_1 = require("./cli-command-executor-service");
9
+ Object.defineProperty(exports, "CliCommandExecutorService", { enumerable: true, get: function () { return cli_command_executor_service_1.CliCommandExecutorService; } });
10
+ var cli_event_socket_manager_1 = require("./cli-event-socket-manager");
11
+ Object.defineProperty(exports, "CliEventSocketManager", { enumerable: true, get: function () { return cli_event_socket_manager_1.CliEventSocketManager; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,+DAAiF;AAAnD,0HAAA,kBAAkB,OAAA;AAChD,+DAAiF;AAAnD,0HAAA,kBAAkB,OAAA;AAChD,+EAAuG;AAAlE,yIAAA,yBAAyB,OAAA;AAC9D,uEAAmE;AAA1D,iIAAA,qBAAqB,OAAA"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@qodalis/cli-server-node",
3
+ "version": "1.0.0-beta.1",
4
+ "description": "Node.js CLI server for Qodalis CLI ecosystem — use as a library in existing Express apps or run standalone",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "qodalis-cli-server": "dist/server.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "LICENSE",
13
+ "README.md"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "start": "tsx src/server.ts",
18
+ "dev": "tsx watch src/server.ts"
19
+ },
20
+ "keywords": [
21
+ "cli",
22
+ "qodalis",
23
+ "terminal",
24
+ "commands",
25
+ "cli-server",
26
+ "command-processor"
27
+ ],
28
+ "author": "Nicolae Lupei <nicolae.lupei@qodalis.com>",
29
+ "license": "MIT",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/qodalis-solutions/cli-server-node"
33
+ },
34
+ "homepage": "https://qodalis.com/",
35
+ "dependencies": {
36
+ "cors": "^2.8.5",
37
+ "express": "^4.21.0",
38
+ "ws": "^8.18.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/cors": "^2.8.17",
42
+ "@types/express": "^4.17.21",
43
+ "@types/node": "^22.0.0",
44
+ "@types/ws": "^8.5.13",
45
+ "tsx": "^4.19.0",
46
+ "typescript": "^5.6.0"
47
+ }
48
+ }