@qodalis/cli-server-logs 2.0.0-beta.8 → 2.0.0-beta.9

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.8",
3
+ "version": "2.0.0-beta.9",
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",
@@ -21,7 +21,7 @@
21
21
  "umd": "./umd/index.global.js",
22
22
  "unpkg": "./umd/index.global.js",
23
23
  "dependencies": {
24
- "@qodalis/cli-core": "2.0.0-beta.8"
24
+ "@qodalis/cli-core": "2.0.0-beta.9"
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";
8
+ var LIBRARY_VERSION = "2.0.0-beta.9";
9
9
  var API_VERSION = 2;
10
10
 
11
11
  // src/lib/processors/cli-logs-command-processor.ts
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.8';\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"]}
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.9';\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.8";
6
+ var LIBRARY_VERSION = "2.0.0-beta.9";
7
7
  var API_VERSION = 2;
8
8
 
9
9
  // src/lib/processors/cli-logs-command-processor.ts
@@ -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.8';\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"]}
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.9';\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"]}
@@ -1838,9 +1838,11 @@ var serverLogs = (() => {
1838
1838
  email: "nicolae.lupei@qodalis.com"
1839
1839
  };
1840
1840
  var semver = __toESM(require_semver2());
1841
+ var API_VERSION = 2;
1842
+ var VERSIONS_ENDPOINT = "/api/qcli/versions";
1841
1843
  var ServerVersionNegotiator = class {
1842
1844
  static {
1843
- this.CLIENT_SUPPORTED_VERSIONS = [2];
1845
+ this.CLIENT_SUPPORTED_VERSIONS = [API_VERSION];
1844
1846
  }
1845
1847
  /**
1846
1848
  * Given a server's version info, pick the highest mutually compatible version.
@@ -1859,7 +1861,7 @@ var serverLogs = (() => {
1859
1861
  */
1860
1862
  static async discover(baseUrl) {
1861
1863
  try {
1862
- const response = await fetch(`${baseUrl}/api/qcli/versions`);
1864
+ const response = await fetch(`${baseUrl}${VERSIONS_ENDPOINT}`);
1863
1865
  if (!response.ok) return null;
1864
1866
  const info = await response.json();
1865
1867
  const version = this.negotiate(info);
@@ -2697,8 +2699,8 @@ var serverLogs = (() => {
2697
2699
  };
2698
2700
 
2699
2701
  // src/lib/version.ts
2700
- var LIBRARY_VERSION = "2.0.0-beta.8";
2701
- var API_VERSION = 2;
2702
+ var LIBRARY_VERSION = "2.0.0-beta.9";
2703
+ var API_VERSION2 = 2;
2702
2704
 
2703
2705
  // src/lib/processors/cli-logs-command-processor.ts
2704
2706
  var levels = ["verbose", "debug", "information", "warning", "error", "fatal"];
@@ -2934,7 +2936,7 @@ var serverLogs = (() => {
2934
2936
 
2935
2937
  // src/cli-entrypoint.ts
2936
2938
  bootCliModule({
2937
- apiVersion: API_VERSION,
2939
+ apiVersion: API_VERSION2,
2938
2940
  name: "@qodalis/cli-server-logs",
2939
2941
  processors: [new CliLogsCommandProcessor()]
2940
2942
  });