@qodalis/cli-server-logs 2.0.0-beta.1 → 2.0.0-beta.3
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qodalis/cli-server-logs",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.3",
|
|
4
4
|
"description": "@qodalis/cli extension for streaming and viewing server logs via WebSocket.",
|
|
5
5
|
"author": "Nicolae Lupei, Qodalis Solutions",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"websocket",
|
|
19
19
|
"real-time"
|
|
20
20
|
],
|
|
21
|
-
"umd": "./umd/index.js",
|
|
22
|
-
"unpkg": "./umd/index.js",
|
|
21
|
+
"umd": "./umd/index.global.js",
|
|
22
|
+
"unpkg": "./umd/index.global.js",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@qodalis/cli-core": "2.0.0-beta.
|
|
24
|
+
"@qodalis/cli-core": "2.0.0-beta.3"
|
|
25
25
|
},
|
|
26
26
|
"sideEffects": false,
|
|
27
27
|
"main": "./public-api.js",
|
package/public-api.js
CHANGED
|
@@ -5,7 +5,7 @@ var cliCore = require('@qodalis/cli-core');
|
|
|
5
5
|
// src/lib/processors/cli-logs-command-processor.ts
|
|
6
6
|
|
|
7
7
|
// src/lib/version.ts
|
|
8
|
-
var LIBRARY_VERSION = "2.0.0-beta.
|
|
8
|
+
var LIBRARY_VERSION = "2.0.0-beta.3";
|
|
9
9
|
var API_VERSION = 2;
|
|
10
10
|
|
|
11
11
|
// src/lib/processors/cli-logs-command-processor.ts
|
|
@@ -117,7 +117,7 @@ var ServerLogsSubProcessor = class {
|
|
|
117
117
|
}
|
|
118
118
|
const cleanServerUrl = serverUrl.replace(/\/+$/, "");
|
|
119
119
|
const wsUrl = cleanServerUrl.replace(/^http/, "ws");
|
|
120
|
-
let fullUrl = `${wsUrl}/ws/v1/
|
|
120
|
+
let fullUrl = `${wsUrl}/ws/v1/qcli/logs`;
|
|
121
121
|
if (command.args["level"]) {
|
|
122
122
|
fullUrl += `?level=${encodeURIComponent(command.args["level"])}`;
|
|
123
123
|
}
|
package/public-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/plugins/server-logs/src/lib/version.ts","../../packages/plugins/server-logs/src/lib/processors/cli-logs-command-processor.ts","../../packages/plugins/server-logs/src/public-api.ts"],"names":["DefaultLibraryAuthor","highlightTextWithBg","CliForegroundColor"],"mappings":"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","file":"public-api.js","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.1';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n highlightTextWithBg,\n ICliCommandAuthor,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nconst levels = ['verbose', 'debug', 'information', 'warning', 'error', 'fatal'];\n\n/**\n * Extends the built-in `server` command with a `logs` sub-command.\n * The registry merges sub-processors into the existing `server` processor,\n * preserving all original sub-commands (list, status, reconnect, default).\n *\n * Usage: `server logs`, `server logs live`, `server logs --server=node --level=error`\n */\nexport class CliLogsCommandProcessor implements ICliCommandProcessor {\n command = 'server';\n\n extendsProcessor = true;\n\n processors?: ICliCommandProcessor[] | undefined = [\n new ServerLogsSubProcessor(),\n ];\n\n metadata?: CliProcessorMetadata | undefined = {\n requireServer: true,\n icon: '📜',\n requiredCoreVersion: '>=2.0.0 <3.0.0',\n requiredCliVersion: '>=2.0.0 <3.0.0',\n };\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n async processCommand(\n _command: CliProcessCommand,\n _context: ICliExecutionContext,\n ): Promise<void> {\n // Not called — the registry merges sub-processors into the existing server processor\n }\n}\n\nclass ServerLogsSubProcessor implements ICliCommandProcessor {\n command = 'logs';\n\n description?: string | undefined = 'Stream live server logs via WebSocket';\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '📜',\n };\n\n parameters?: ICliCommandParameterDescriptor[] | undefined = [\n {\n name: 'pattern',\n type: 'string',\n description: 'The regex pattern to search for in the logs',\n required: false,\n validator: (value: string) => {\n const isValid = isValidRegex(value);\n return {\n valid: isValid,\n message: isValid\n ? undefined\n : 'Invalid regex pattern provided',\n };\n },\n },\n {\n name: 'level',\n type: 'string',\n description:\n 'The log level to filter by, e.g. ' + levels.join(', '),\n required: false,\n validator: (value: string) => {\n const isValid = levels.includes(value);\n\n return {\n valid: isValid,\n message: isValid\n ? undefined\n : 'Invalid log level provided, must be one of: ' +\n levels.join(', '),\n };\n },\n },\n {\n name: 'server',\n type: 'string',\n description:\n 'Server name or URL to connect to, e.g. \"node\" or \"http://localhost:5000\"',\n required: false,\n },\n {\n name: 'file',\n type: 'boolean',\n description: 'Export logs to a file',\n required: false,\n },\n ];\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n constructor() {\n this.processors?.push({\n command: 'live',\n description: this.description,\n parameters: this.parameters,\n processCommand: this.processCommand.bind(this),\n writeDescription: this.writeDescription.bind(this),\n });\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const serverArg = command.args['server'] as string | undefined;\n let serverUrl: string | undefined;\n\n if (serverArg) {\n if (serverArg.startsWith('http://') || serverArg.startsWith('https://')) {\n serverUrl = serverArg;\n } else {\n const match = context.options?.servers?.find(\n (s) => s.name === serverArg,\n );\n if (match) {\n serverUrl = match.url;\n } else {\n context.writer.writeError(\n `Server '${serverArg}' not found. Available servers: ${\n context.options?.servers?.map((s) => s.name).join(', ') || 'none'\n }`,\n );\n return;\n }\n }\n } else {\n serverUrl = context.options?.servers?.[0]?.url;\n }\n\n if (!serverUrl) {\n context.writer.writeError(\n 'No server URL provided. Use --server=<name|url> or configure a server in the CLI options.',\n );\n return;\n }\n\n const cleanServerUrl = serverUrl.replace(/\\/+$/, '');\n const wsUrl = cleanServerUrl.replace(/^http/, 'ws');\n\n let fullUrl = `${wsUrl}/ws/v1/cli/logs`;\n if (command.args['level']) {\n fullUrl += `?level=${encodeURIComponent(command.args['level'])}`;\n }\n\n let patternRegex: RegExp | null = null;\n if (command.args['pattern']) {\n patternRegex = new RegExp(command.args['pattern'], 'g');\n }\n\n const ws = new WebSocket(fullUrl);\n const logs: string[] = [];\n\n return new Promise<void>((resolve) => {\n let index = 0;\n\n ws.onopen = () => {\n context.writer.writeSuccess('Streaming live logs...');\n\n if (command.args['level']) {\n context.writer.writeInfo(\n `Level filter: ${command.args['level']}`,\n );\n }\n if (command.args['pattern']) {\n context.writer.writeInfo(\n `Pattern filter: ${command.args['pattern']}`,\n );\n }\n\n context.writer.writeInfo('Press Ctrl+C to stop');\n context.writer.writeln();\n };\n\n ws.onmessage = (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data);\n\n if (data.type === 'connected') {\n return;\n }\n\n if (data.type === 'disconnect') {\n ws.close();\n return;\n }\n\n if (data.type === 'log') {\n const timestamp = data.timestamp || '';\n const level = (data.level || '').toUpperCase();\n const category = data.category || '';\n const message = data.message || '';\n\n const logLine = `[${timestamp}] ${level} [${category}] ${message}`;\n\n if (patternRegex) {\n patternRegex.lastIndex = 0;\n if (!patternRegex.test(logLine)) {\n return;\n }\n patternRegex.lastIndex = 0;\n }\n\n logs.push(logLine);\n\n const displayLine = patternRegex\n ? highlightTextWithBg(logLine, patternRegex)\n : logLine;\n\n context.writer.writeln(\n `\\x1b[33m${++index}\\x1b[0m. ${displayLine}`,\n );\n }\n } catch {\n // Ignore non-JSON messages\n }\n };\n\n ws.onclose = () => {\n if (command.args['file'] && logs.length > 0) {\n const filename = `logs-${new Date().toISOString()}.txt`;\n context.writer.writeToFile(filename, logs.join('\\n'));\n }\n\n context.writer.writeInfo('Disconnected from live logs');\n resolve();\n };\n\n ws.onerror = () => {\n context.writer.writeError(\n 'WebSocket error occurred while connecting to live logs',\n );\n };\n\n context.onAbort.subscribe(() => {\n ws.close();\n });\n });\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln('Stream live server logs via WebSocket');\n writer.writeln();\n writer.writeln('📋 Usage:');\n writer.writeln(\n ` ${writer.wrapInColor('server logs', CliForegroundColor.Cyan)} Start streaming`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --level=error', CliForegroundColor.Cyan)} Filter by level`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --pattern=\"Exception\"', CliForegroundColor.Cyan)} Filter by regex`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --server=node', CliForegroundColor.Cyan)} Specific server`,\n );\n writer.writeln();\n writer.writeln(`⚙️ Options:`);\n writer.writeln(\n ` ${writer.wrapInColor('--level', CliForegroundColor.Yellow)} Log level: verbose, debug, information, warning, error, fatal`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--pattern', CliForegroundColor.Yellow)} Regex pattern to highlight matches`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--server', CliForegroundColor.Yellow)} Server name or URL to connect to`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--file', CliForegroundColor.Yellow)} Export logs to a file on disconnect`,\n );\n writer.writeln();\n writer.writeln(\n `💡 Press ${writer.wrapInColor('Ctrl+C', CliForegroundColor.Yellow)} to stop streaming`,\n );\n }\n}\n\nfunction isValidRegex(pattern: string): boolean {\n try {\n new RegExp(pattern);\n return true;\n } catch (e) {\n return false;\n }\n}\n","/*\n * Public API Surface of server-logs\n */\n\nexport * from './lib/processors/cli-logs-command-processor';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliLogsCommandProcessor } from './lib/processors/cli-logs-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const serverLogsModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-server-logs',\n processors: [new CliLogsCommandProcessor()],\n translations: {\n es: { 'cli.server-logs.description': 'Mostrar registros en tiempo real' },\n fr: { 'cli.server-logs.description': 'Afficher les journaux en direct' },\n de: { 'cli.server-logs.description': 'Live-Protokolle anzeigen' },\n pt: { 'cli.server-logs.description': 'Mostrar logs em tempo real' },\n it: { 'cli.server-logs.description': 'Mostrare i log in tempo reale' },\n ja: { 'cli.server-logs.description': 'ライブログを表示' },\n ko: { 'cli.server-logs.description': '실시간 로그 표시' },\n zh: { 'cli.server-logs.description': '显示实时日志' },\n ru: { 'cli.server-logs.description': 'Показать журналы в реальном времени' },\n ro: { 'cli.server-logs.description': 'Afișează jurnalele în timp real' },\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/plugins/server-logs/src/lib/version.ts","../../packages/plugins/server-logs/src/lib/processors/cli-logs-command-processor.ts","../../packages/plugins/server-logs/src/public-api.ts"],"names":["DefaultLibraryAuthor","highlightTextWithBg","CliForegroundColor"],"mappings":"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","file":"public-api.js","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.3';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n highlightTextWithBg,\n ICliCommandAuthor,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nconst levels = ['verbose', 'debug', 'information', 'warning', 'error', 'fatal'];\n\n/**\n * Extends the built-in `server` command with a `logs` sub-command.\n * The registry merges sub-processors into the existing `server` processor,\n * preserving all original sub-commands (list, status, reconnect, default).\n *\n * Usage: `server logs`, `server logs live`, `server logs --server=node --level=error`\n */\nexport class CliLogsCommandProcessor implements ICliCommandProcessor {\n command = 'server';\n\n extendsProcessor = true;\n\n processors?: ICliCommandProcessor[] | undefined = [\n new ServerLogsSubProcessor(),\n ];\n\n metadata?: CliProcessorMetadata | undefined = {\n requireServer: true,\n icon: '📜',\n requiredCoreVersion: '>=2.0.0 <3.0.0',\n requiredCliVersion: '>=2.0.0 <3.0.0',\n };\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n async processCommand(\n _command: CliProcessCommand,\n _context: ICliExecutionContext,\n ): Promise<void> {\n // Not called — the registry merges sub-processors into the existing server processor\n }\n}\n\nclass ServerLogsSubProcessor implements ICliCommandProcessor {\n command = 'logs';\n\n description?: string | undefined = 'Stream live server logs via WebSocket';\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '📜',\n };\n\n parameters?: ICliCommandParameterDescriptor[] | undefined = [\n {\n name: 'pattern',\n type: 'string',\n description: 'The regex pattern to search for in the logs',\n required: false,\n validator: (value: string) => {\n const isValid = isValidRegex(value);\n return {\n valid: isValid,\n message: isValid\n ? undefined\n : 'Invalid regex pattern provided',\n };\n },\n },\n {\n name: 'level',\n type: 'string',\n description:\n 'The log level to filter by, e.g. ' + levels.join(', '),\n required: false,\n validator: (value: string) => {\n const isValid = levels.includes(value);\n\n return {\n valid: isValid,\n message: isValid\n ? undefined\n : 'Invalid log level provided, must be one of: ' +\n levels.join(', '),\n };\n },\n },\n {\n name: 'server',\n type: 'string',\n description:\n 'Server name or URL to connect to, e.g. \"node\" or \"http://localhost:5000\"',\n required: false,\n },\n {\n name: 'file',\n type: 'boolean',\n description: 'Export logs to a file',\n required: false,\n },\n ];\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n constructor() {\n this.processors?.push({\n command: 'live',\n description: this.description,\n parameters: this.parameters,\n processCommand: this.processCommand.bind(this),\n writeDescription: this.writeDescription.bind(this),\n });\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const serverArg = command.args['server'] as string | undefined;\n let serverUrl: string | undefined;\n\n if (serverArg) {\n if (serverArg.startsWith('http://') || serverArg.startsWith('https://')) {\n serverUrl = serverArg;\n } else {\n const match = context.options?.servers?.find(\n (s) => s.name === serverArg,\n );\n if (match) {\n serverUrl = match.url;\n } else {\n context.writer.writeError(\n `Server '${serverArg}' not found. Available servers: ${\n context.options?.servers?.map((s) => s.name).join(', ') || 'none'\n }`,\n );\n return;\n }\n }\n } else {\n serverUrl = context.options?.servers?.[0]?.url;\n }\n\n if (!serverUrl) {\n context.writer.writeError(\n 'No server URL provided. Use --server=<name|url> or configure a server in the CLI options.',\n );\n return;\n }\n\n const cleanServerUrl = serverUrl.replace(/\\/+$/, '');\n const wsUrl = cleanServerUrl.replace(/^http/, 'ws');\n\n let fullUrl = `${wsUrl}/ws/v1/qcli/logs`;\n if (command.args['level']) {\n fullUrl += `?level=${encodeURIComponent(command.args['level'])}`;\n }\n\n let patternRegex: RegExp | null = null;\n if (command.args['pattern']) {\n patternRegex = new RegExp(command.args['pattern'], 'g');\n }\n\n const ws = new WebSocket(fullUrl);\n const logs: string[] = [];\n\n return new Promise<void>((resolve) => {\n let index = 0;\n\n ws.onopen = () => {\n context.writer.writeSuccess('Streaming live logs...');\n\n if (command.args['level']) {\n context.writer.writeInfo(\n `Level filter: ${command.args['level']}`,\n );\n }\n if (command.args['pattern']) {\n context.writer.writeInfo(\n `Pattern filter: ${command.args['pattern']}`,\n );\n }\n\n context.writer.writeInfo('Press Ctrl+C to stop');\n context.writer.writeln();\n };\n\n ws.onmessage = (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data);\n\n if (data.type === 'connected') {\n return;\n }\n\n if (data.type === 'disconnect') {\n ws.close();\n return;\n }\n\n if (data.type === 'log') {\n const timestamp = data.timestamp || '';\n const level = (data.level || '').toUpperCase();\n const category = data.category || '';\n const message = data.message || '';\n\n const logLine = `[${timestamp}] ${level} [${category}] ${message}`;\n\n if (patternRegex) {\n patternRegex.lastIndex = 0;\n if (!patternRegex.test(logLine)) {\n return;\n }\n patternRegex.lastIndex = 0;\n }\n\n logs.push(logLine);\n\n const displayLine = patternRegex\n ? highlightTextWithBg(logLine, patternRegex)\n : logLine;\n\n context.writer.writeln(\n `\\x1b[33m${++index}\\x1b[0m. ${displayLine}`,\n );\n }\n } catch {\n // Ignore non-JSON messages\n }\n };\n\n ws.onclose = () => {\n if (command.args['file'] && logs.length > 0) {\n const filename = `logs-${new Date().toISOString()}.txt`;\n context.writer.writeToFile(filename, logs.join('\\n'));\n }\n\n context.writer.writeInfo('Disconnected from live logs');\n resolve();\n };\n\n ws.onerror = () => {\n context.writer.writeError(\n 'WebSocket error occurred while connecting to live logs',\n );\n };\n\n context.onAbort.subscribe(() => {\n ws.close();\n });\n });\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln('Stream live server logs via WebSocket');\n writer.writeln();\n writer.writeln('📋 Usage:');\n writer.writeln(\n ` ${writer.wrapInColor('server logs', CliForegroundColor.Cyan)} Start streaming`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --level=error', CliForegroundColor.Cyan)} Filter by level`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --pattern=\"Exception\"', CliForegroundColor.Cyan)} Filter by regex`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --server=node', CliForegroundColor.Cyan)} Specific server`,\n );\n writer.writeln();\n writer.writeln(`⚙️ Options:`);\n writer.writeln(\n ` ${writer.wrapInColor('--level', CliForegroundColor.Yellow)} Log level: verbose, debug, information, warning, error, fatal`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--pattern', CliForegroundColor.Yellow)} Regex pattern to highlight matches`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--server', CliForegroundColor.Yellow)} Server name or URL to connect to`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--file', CliForegroundColor.Yellow)} Export logs to a file on disconnect`,\n );\n writer.writeln();\n writer.writeln(\n `💡 Press ${writer.wrapInColor('Ctrl+C', CliForegroundColor.Yellow)} to stop streaming`,\n );\n }\n}\n\nfunction isValidRegex(pattern: string): boolean {\n try {\n new RegExp(pattern);\n return true;\n } catch (e) {\n return false;\n }\n}\n","/*\n * Public API Surface of server-logs\n */\n\nexport * from './lib/processors/cli-logs-command-processor';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliLogsCommandProcessor } from './lib/processors/cli-logs-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const serverLogsModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-server-logs',\n processors: [new CliLogsCommandProcessor()],\n translations: {\n es: { 'cli.server-logs.description': 'Mostrar registros en tiempo real' },\n fr: { 'cli.server-logs.description': 'Afficher les journaux en direct' },\n de: { 'cli.server-logs.description': 'Live-Protokolle anzeigen' },\n pt: { 'cli.server-logs.description': 'Mostrar logs em tempo real' },\n it: { 'cli.server-logs.description': 'Mostrare i log in tempo reale' },\n ja: { 'cli.server-logs.description': 'ライブログを表示' },\n ko: { 'cli.server-logs.description': '실시간 로그 표시' },\n zh: { 'cli.server-logs.description': '显示实时日志' },\n ru: { 'cli.server-logs.description': 'Показать журналы в реальном времени' },\n ro: { 'cli.server-logs.description': 'Afișează jurnalele în timp real' },\n },\n};\n"]}
|
package/public-api.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { DefaultLibraryAuthor, highlightTextWithBg, CliForegroundColor } from '@
|
|
|
3
3
|
// src/lib/processors/cli-logs-command-processor.ts
|
|
4
4
|
|
|
5
5
|
// src/lib/version.ts
|
|
6
|
-
var LIBRARY_VERSION = "2.0.0-beta.
|
|
6
|
+
var LIBRARY_VERSION = "2.0.0-beta.3";
|
|
7
7
|
var API_VERSION = 2;
|
|
8
8
|
|
|
9
9
|
// src/lib/processors/cli-logs-command-processor.ts
|
|
@@ -115,7 +115,7 @@ var ServerLogsSubProcessor = class {
|
|
|
115
115
|
}
|
|
116
116
|
const cleanServerUrl = serverUrl.replace(/\/+$/, "");
|
|
117
117
|
const wsUrl = cleanServerUrl.replace(/^http/, "ws");
|
|
118
|
-
let fullUrl = `${wsUrl}/ws/v1/
|
|
118
|
+
let fullUrl = `${wsUrl}/ws/v1/qcli/logs`;
|
|
119
119
|
if (command.args["level"]) {
|
|
120
120
|
fullUrl += `?level=${encodeURIComponent(command.args["level"])}`;
|
|
121
121
|
}
|
package/public-api.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/plugins/server-logs/src/lib/version.ts","../../packages/plugins/server-logs/src/lib/processors/cli-logs-command-processor.ts","../../packages/plugins/server-logs/src/public-api.ts"],"names":[],"mappings":"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","file":"public-api.mjs","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.1';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n highlightTextWithBg,\n ICliCommandAuthor,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nconst levels = ['verbose', 'debug', 'information', 'warning', 'error', 'fatal'];\n\n/**\n * Extends the built-in `server` command with a `logs` sub-command.\n * The registry merges sub-processors into the existing `server` processor,\n * preserving all original sub-commands (list, status, reconnect, default).\n *\n * Usage: `server logs`, `server logs live`, `server logs --server=node --level=error`\n */\nexport class CliLogsCommandProcessor implements ICliCommandProcessor {\n command = 'server';\n\n extendsProcessor = true;\n\n processors?: ICliCommandProcessor[] | undefined = [\n new ServerLogsSubProcessor(),\n ];\n\n metadata?: CliProcessorMetadata | undefined = {\n requireServer: true,\n icon: '📜',\n requiredCoreVersion: '>=2.0.0 <3.0.0',\n requiredCliVersion: '>=2.0.0 <3.0.0',\n };\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n async processCommand(\n _command: CliProcessCommand,\n _context: ICliExecutionContext,\n ): Promise<void> {\n // Not called — the registry merges sub-processors into the existing server processor\n }\n}\n\nclass ServerLogsSubProcessor implements ICliCommandProcessor {\n command = 'logs';\n\n description?: string | undefined = 'Stream live server logs via WebSocket';\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '📜',\n };\n\n parameters?: ICliCommandParameterDescriptor[] | undefined = [\n {\n name: 'pattern',\n type: 'string',\n description: 'The regex pattern to search for in the logs',\n required: false,\n validator: (value: string) => {\n const isValid = isValidRegex(value);\n return {\n valid: isValid,\n message: isValid\n ? undefined\n : 'Invalid regex pattern provided',\n };\n },\n },\n {\n name: 'level',\n type: 'string',\n description:\n 'The log level to filter by, e.g. ' + levels.join(', '),\n required: false,\n validator: (value: string) => {\n const isValid = levels.includes(value);\n\n return {\n valid: isValid,\n message: isValid\n ? undefined\n : 'Invalid log level provided, must be one of: ' +\n levels.join(', '),\n };\n },\n },\n {\n name: 'server',\n type: 'string',\n description:\n 'Server name or URL to connect to, e.g. \"node\" or \"http://localhost:5000\"',\n required: false,\n },\n {\n name: 'file',\n type: 'boolean',\n description: 'Export logs to a file',\n required: false,\n },\n ];\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n constructor() {\n this.processors?.push({\n command: 'live',\n description: this.description,\n parameters: this.parameters,\n processCommand: this.processCommand.bind(this),\n writeDescription: this.writeDescription.bind(this),\n });\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const serverArg = command.args['server'] as string | undefined;\n let serverUrl: string | undefined;\n\n if (serverArg) {\n if (serverArg.startsWith('http://') || serverArg.startsWith('https://')) {\n serverUrl = serverArg;\n } else {\n const match = context.options?.servers?.find(\n (s) => s.name === serverArg,\n );\n if (match) {\n serverUrl = match.url;\n } else {\n context.writer.writeError(\n `Server '${serverArg}' not found. Available servers: ${\n context.options?.servers?.map((s) => s.name).join(', ') || 'none'\n }`,\n );\n return;\n }\n }\n } else {\n serverUrl = context.options?.servers?.[0]?.url;\n }\n\n if (!serverUrl) {\n context.writer.writeError(\n 'No server URL provided. Use --server=<name|url> or configure a server in the CLI options.',\n );\n return;\n }\n\n const cleanServerUrl = serverUrl.replace(/\\/+$/, '');\n const wsUrl = cleanServerUrl.replace(/^http/, 'ws');\n\n let fullUrl = `${wsUrl}/ws/v1/cli/logs`;\n if (command.args['level']) {\n fullUrl += `?level=${encodeURIComponent(command.args['level'])}`;\n }\n\n let patternRegex: RegExp | null = null;\n if (command.args['pattern']) {\n patternRegex = new RegExp(command.args['pattern'], 'g');\n }\n\n const ws = new WebSocket(fullUrl);\n const logs: string[] = [];\n\n return new Promise<void>((resolve) => {\n let index = 0;\n\n ws.onopen = () => {\n context.writer.writeSuccess('Streaming live logs...');\n\n if (command.args['level']) {\n context.writer.writeInfo(\n `Level filter: ${command.args['level']}`,\n );\n }\n if (command.args['pattern']) {\n context.writer.writeInfo(\n `Pattern filter: ${command.args['pattern']}`,\n );\n }\n\n context.writer.writeInfo('Press Ctrl+C to stop');\n context.writer.writeln();\n };\n\n ws.onmessage = (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data);\n\n if (data.type === 'connected') {\n return;\n }\n\n if (data.type === 'disconnect') {\n ws.close();\n return;\n }\n\n if (data.type === 'log') {\n const timestamp = data.timestamp || '';\n const level = (data.level || '').toUpperCase();\n const category = data.category || '';\n const message = data.message || '';\n\n const logLine = `[${timestamp}] ${level} [${category}] ${message}`;\n\n if (patternRegex) {\n patternRegex.lastIndex = 0;\n if (!patternRegex.test(logLine)) {\n return;\n }\n patternRegex.lastIndex = 0;\n }\n\n logs.push(logLine);\n\n const displayLine = patternRegex\n ? highlightTextWithBg(logLine, patternRegex)\n : logLine;\n\n context.writer.writeln(\n `\\x1b[33m${++index}\\x1b[0m. ${displayLine}`,\n );\n }\n } catch {\n // Ignore non-JSON messages\n }\n };\n\n ws.onclose = () => {\n if (command.args['file'] && logs.length > 0) {\n const filename = `logs-${new Date().toISOString()}.txt`;\n context.writer.writeToFile(filename, logs.join('\\n'));\n }\n\n context.writer.writeInfo('Disconnected from live logs');\n resolve();\n };\n\n ws.onerror = () => {\n context.writer.writeError(\n 'WebSocket error occurred while connecting to live logs',\n );\n };\n\n context.onAbort.subscribe(() => {\n ws.close();\n });\n });\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln('Stream live server logs via WebSocket');\n writer.writeln();\n writer.writeln('📋 Usage:');\n writer.writeln(\n ` ${writer.wrapInColor('server logs', CliForegroundColor.Cyan)} Start streaming`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --level=error', CliForegroundColor.Cyan)} Filter by level`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --pattern=\"Exception\"', CliForegroundColor.Cyan)} Filter by regex`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --server=node', CliForegroundColor.Cyan)} Specific server`,\n );\n writer.writeln();\n writer.writeln(`⚙️ Options:`);\n writer.writeln(\n ` ${writer.wrapInColor('--level', CliForegroundColor.Yellow)} Log level: verbose, debug, information, warning, error, fatal`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--pattern', CliForegroundColor.Yellow)} Regex pattern to highlight matches`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--server', CliForegroundColor.Yellow)} Server name or URL to connect to`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--file', CliForegroundColor.Yellow)} Export logs to a file on disconnect`,\n );\n writer.writeln();\n writer.writeln(\n `💡 Press ${writer.wrapInColor('Ctrl+C', CliForegroundColor.Yellow)} to stop streaming`,\n );\n }\n}\n\nfunction isValidRegex(pattern: string): boolean {\n try {\n new RegExp(pattern);\n return true;\n } catch (e) {\n return false;\n }\n}\n","/*\n * Public API Surface of server-logs\n */\n\nexport * from './lib/processors/cli-logs-command-processor';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliLogsCommandProcessor } from './lib/processors/cli-logs-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const serverLogsModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-server-logs',\n processors: [new CliLogsCommandProcessor()],\n translations: {\n es: { 'cli.server-logs.description': 'Mostrar registros en tiempo real' },\n fr: { 'cli.server-logs.description': 'Afficher les journaux en direct' },\n de: { 'cli.server-logs.description': 'Live-Protokolle anzeigen' },\n pt: { 'cli.server-logs.description': 'Mostrar logs em tempo real' },\n it: { 'cli.server-logs.description': 'Mostrare i log in tempo reale' },\n ja: { 'cli.server-logs.description': 'ライブログを表示' },\n ko: { 'cli.server-logs.description': '실시간 로그 표시' },\n zh: { 'cli.server-logs.description': '显示实时日志' },\n ru: { 'cli.server-logs.description': 'Показать журналы в реальном времени' },\n ro: { 'cli.server-logs.description': 'Afișează jurnalele în timp real' },\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/plugins/server-logs/src/lib/version.ts","../../packages/plugins/server-logs/src/lib/processors/cli-logs-command-processor.ts","../../packages/plugins/server-logs/src/public-api.ts"],"names":[],"mappings":"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","file":"public-api.mjs","sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.3';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n highlightTextWithBg,\n ICliCommandAuthor,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nconst levels = ['verbose', 'debug', 'information', 'warning', 'error', 'fatal'];\n\n/**\n * Extends the built-in `server` command with a `logs` sub-command.\n * The registry merges sub-processors into the existing `server` processor,\n * preserving all original sub-commands (list, status, reconnect, default).\n *\n * Usage: `server logs`, `server logs live`, `server logs --server=node --level=error`\n */\nexport class CliLogsCommandProcessor implements ICliCommandProcessor {\n command = 'server';\n\n extendsProcessor = true;\n\n processors?: ICliCommandProcessor[] | undefined = [\n new ServerLogsSubProcessor(),\n ];\n\n metadata?: CliProcessorMetadata | undefined = {\n requireServer: true,\n icon: '📜',\n requiredCoreVersion: '>=2.0.0 <3.0.0',\n requiredCliVersion: '>=2.0.0 <3.0.0',\n };\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n async processCommand(\n _command: CliProcessCommand,\n _context: ICliExecutionContext,\n ): Promise<void> {\n // Not called — the registry merges sub-processors into the existing server processor\n }\n}\n\nclass ServerLogsSubProcessor implements ICliCommandProcessor {\n command = 'logs';\n\n description?: string | undefined = 'Stream live server logs via WebSocket';\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '📜',\n };\n\n parameters?: ICliCommandParameterDescriptor[] | undefined = [\n {\n name: 'pattern',\n type: 'string',\n description: 'The regex pattern to search for in the logs',\n required: false,\n validator: (value: string) => {\n const isValid = isValidRegex(value);\n return {\n valid: isValid,\n message: isValid\n ? undefined\n : 'Invalid regex pattern provided',\n };\n },\n },\n {\n name: 'level',\n type: 'string',\n description:\n 'The log level to filter by, e.g. ' + levels.join(', '),\n required: false,\n validator: (value: string) => {\n const isValid = levels.includes(value);\n\n return {\n valid: isValid,\n message: isValid\n ? undefined\n : 'Invalid log level provided, must be one of: ' +\n levels.join(', '),\n };\n },\n },\n {\n name: 'server',\n type: 'string',\n description:\n 'Server name or URL to connect to, e.g. \"node\" or \"http://localhost:5000\"',\n required: false,\n },\n {\n name: 'file',\n type: 'boolean',\n description: 'Export logs to a file',\n required: false,\n },\n ];\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n constructor() {\n this.processors?.push({\n command: 'live',\n description: this.description,\n parameters: this.parameters,\n processCommand: this.processCommand.bind(this),\n writeDescription: this.writeDescription.bind(this),\n });\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const serverArg = command.args['server'] as string | undefined;\n let serverUrl: string | undefined;\n\n if (serverArg) {\n if (serverArg.startsWith('http://') || serverArg.startsWith('https://')) {\n serverUrl = serverArg;\n } else {\n const match = context.options?.servers?.find(\n (s) => s.name === serverArg,\n );\n if (match) {\n serverUrl = match.url;\n } else {\n context.writer.writeError(\n `Server '${serverArg}' not found. Available servers: ${\n context.options?.servers?.map((s) => s.name).join(', ') || 'none'\n }`,\n );\n return;\n }\n }\n } else {\n serverUrl = context.options?.servers?.[0]?.url;\n }\n\n if (!serverUrl) {\n context.writer.writeError(\n 'No server URL provided. Use --server=<name|url> or configure a server in the CLI options.',\n );\n return;\n }\n\n const cleanServerUrl = serverUrl.replace(/\\/+$/, '');\n const wsUrl = cleanServerUrl.replace(/^http/, 'ws');\n\n let fullUrl = `${wsUrl}/ws/v1/qcli/logs`;\n if (command.args['level']) {\n fullUrl += `?level=${encodeURIComponent(command.args['level'])}`;\n }\n\n let patternRegex: RegExp | null = null;\n if (command.args['pattern']) {\n patternRegex = new RegExp(command.args['pattern'], 'g');\n }\n\n const ws = new WebSocket(fullUrl);\n const logs: string[] = [];\n\n return new Promise<void>((resolve) => {\n let index = 0;\n\n ws.onopen = () => {\n context.writer.writeSuccess('Streaming live logs...');\n\n if (command.args['level']) {\n context.writer.writeInfo(\n `Level filter: ${command.args['level']}`,\n );\n }\n if (command.args['pattern']) {\n context.writer.writeInfo(\n `Pattern filter: ${command.args['pattern']}`,\n );\n }\n\n context.writer.writeInfo('Press Ctrl+C to stop');\n context.writer.writeln();\n };\n\n ws.onmessage = (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data);\n\n if (data.type === 'connected') {\n return;\n }\n\n if (data.type === 'disconnect') {\n ws.close();\n return;\n }\n\n if (data.type === 'log') {\n const timestamp = data.timestamp || '';\n const level = (data.level || '').toUpperCase();\n const category = data.category || '';\n const message = data.message || '';\n\n const logLine = `[${timestamp}] ${level} [${category}] ${message}`;\n\n if (patternRegex) {\n patternRegex.lastIndex = 0;\n if (!patternRegex.test(logLine)) {\n return;\n }\n patternRegex.lastIndex = 0;\n }\n\n logs.push(logLine);\n\n const displayLine = patternRegex\n ? highlightTextWithBg(logLine, patternRegex)\n : logLine;\n\n context.writer.writeln(\n `\\x1b[33m${++index}\\x1b[0m. ${displayLine}`,\n );\n }\n } catch {\n // Ignore non-JSON messages\n }\n };\n\n ws.onclose = () => {\n if (command.args['file'] && logs.length > 0) {\n const filename = `logs-${new Date().toISOString()}.txt`;\n context.writer.writeToFile(filename, logs.join('\\n'));\n }\n\n context.writer.writeInfo('Disconnected from live logs');\n resolve();\n };\n\n ws.onerror = () => {\n context.writer.writeError(\n 'WebSocket error occurred while connecting to live logs',\n );\n };\n\n context.onAbort.subscribe(() => {\n ws.close();\n });\n });\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln('Stream live server logs via WebSocket');\n writer.writeln();\n writer.writeln('📋 Usage:');\n writer.writeln(\n ` ${writer.wrapInColor('server logs', CliForegroundColor.Cyan)} Start streaming`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --level=error', CliForegroundColor.Cyan)} Filter by level`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --pattern=\"Exception\"', CliForegroundColor.Cyan)} Filter by regex`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('server logs --server=node', CliForegroundColor.Cyan)} Specific server`,\n );\n writer.writeln();\n writer.writeln(`⚙️ Options:`);\n writer.writeln(\n ` ${writer.wrapInColor('--level', CliForegroundColor.Yellow)} Log level: verbose, debug, information, warning, error, fatal`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--pattern', CliForegroundColor.Yellow)} Regex pattern to highlight matches`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--server', CliForegroundColor.Yellow)} Server name or URL to connect to`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('--file', CliForegroundColor.Yellow)} Export logs to a file on disconnect`,\n );\n writer.writeln();\n writer.writeln(\n `💡 Press ${writer.wrapInColor('Ctrl+C', CliForegroundColor.Yellow)} to stop streaming`,\n );\n }\n}\n\nfunction isValidRegex(pattern: string): boolean {\n try {\n new RegExp(pattern);\n return true;\n } catch (e) {\n return false;\n }\n}\n","/*\n * Public API Surface of server-logs\n */\n\nexport * from './lib/processors/cli-logs-command-processor';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliLogsCommandProcessor } from './lib/processors/cli-logs-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const serverLogsModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-server-logs',\n processors: [new CliLogsCommandProcessor()],\n translations: {\n es: { 'cli.server-logs.description': 'Mostrar registros en tiempo real' },\n fr: { 'cli.server-logs.description': 'Afficher les journaux en direct' },\n de: { 'cli.server-logs.description': 'Live-Protokolle anzeigen' },\n pt: { 'cli.server-logs.description': 'Mostrar logs em tempo real' },\n it: { 'cli.server-logs.description': 'Mostrare i log in tempo reale' },\n ja: { 'cli.server-logs.description': 'ライブログを表示' },\n ko: { 'cli.server-logs.description': '실시간 로그 표시' },\n zh: { 'cli.server-logs.description': '显示实时日志' },\n ru: { 'cli.server-logs.description': 'Показать журналы в реальном времени' },\n ro: { 'cli.server-logs.description': 'Afișează jurnalele în timp real' },\n },\n};\n"]}
|
|
@@ -1859,14 +1859,14 @@ var serverLogs = (() => {
|
|
|
1859
1859
|
*/
|
|
1860
1860
|
static async discover(baseUrl) {
|
|
1861
1861
|
try {
|
|
1862
|
-
const response = await fetch(`${baseUrl}/api/
|
|
1862
|
+
const response = await fetch(`${baseUrl}/api/qcli/versions`);
|
|
1863
1863
|
if (!response.ok) return null;
|
|
1864
1864
|
const info = await response.json();
|
|
1865
1865
|
const version = this.negotiate(info);
|
|
1866
1866
|
if (version === null) return null;
|
|
1867
1867
|
return {
|
|
1868
1868
|
apiVersion: version,
|
|
1869
|
-
basePath: `${baseUrl}/api/v${version}/
|
|
1869
|
+
basePath: `${baseUrl}/api/v${version}/qcli`
|
|
1870
1870
|
};
|
|
1871
1871
|
} catch {
|
|
1872
1872
|
return null;
|
|
@@ -2697,7 +2697,7 @@ var serverLogs = (() => {
|
|
|
2697
2697
|
};
|
|
2698
2698
|
|
|
2699
2699
|
// src/lib/version.ts
|
|
2700
|
-
var LIBRARY_VERSION = "2.0.0-beta.
|
|
2700
|
+
var LIBRARY_VERSION = "2.0.0-beta.3";
|
|
2701
2701
|
var API_VERSION = 2;
|
|
2702
2702
|
|
|
2703
2703
|
// src/lib/processors/cli-logs-command-processor.ts
|
|
@@ -2809,7 +2809,7 @@ var serverLogs = (() => {
|
|
|
2809
2809
|
}
|
|
2810
2810
|
const cleanServerUrl = serverUrl.replace(/\/+$/, "");
|
|
2811
2811
|
const wsUrl = cleanServerUrl.replace(/^http/, "ws");
|
|
2812
|
-
let fullUrl = `${wsUrl}/ws/v1/
|
|
2812
|
+
let fullUrl = `${wsUrl}/ws/v1/qcli/logs`;
|
|
2813
2813
|
if (command.args["level"]) {
|
|
2814
2814
|
fullUrl += `?level=${encodeURIComponent(command.args["level"])}`;
|
|
2815
2815
|
}
|