@lark-apaas/coding-preset-vite-react 1.0.13-alpha.0 → 1.0.13-alpha.10

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 (162) hide show
  1. package/lib/index.d.ts +9 -1
  2. package/lib/index.d.ts.map +1 -1
  3. package/lib/index.js +153 -114
  4. package/lib/index.js.map +1 -1
  5. package/lib/plugins/{basename-injection.d.ts → basename.d.ts} +4 -4
  6. package/lib/plugins/basename.d.ts.map +1 -0
  7. package/lib/plugins/{basename-injection.js → basename.js} +7 -15
  8. package/lib/plugins/basename.js.map +1 -0
  9. package/lib/plugins/capabilities.d.ts +9 -6
  10. package/lib/plugins/capabilities.d.ts.map +1 -1
  11. package/lib/plugins/capabilities.js +27 -29
  12. package/lib/plugins/capabilities.js.map +1 -1
  13. package/lib/plugins/dev-proxy.d.ts +41 -0
  14. package/lib/plugins/dev-proxy.d.ts.map +1 -0
  15. package/lib/plugins/dev-proxy.js +229 -0
  16. package/lib/plugins/dev-proxy.js.map +1 -0
  17. package/lib/plugins/fonts-mirror.d.ts.map +1 -1
  18. package/lib/plugins/fonts-mirror.js +28 -0
  19. package/lib/plugins/fonts-mirror.js.map +1 -1
  20. package/lib/plugins/html-output.d.ts +21 -0
  21. package/lib/plugins/html-output.d.ts.map +1 -0
  22. package/lib/plugins/html-output.js +171 -0
  23. package/lib/plugins/html-output.js.map +1 -0
  24. package/lib/plugins/server-log.d.ts +55 -0
  25. package/lib/plugins/server-log.d.ts.map +1 -0
  26. package/lib/plugins/server-log.js +80 -0
  27. package/lib/plugins/server-log.js.map +1 -0
  28. package/lib/plugins/view-context.d.ts +0 -5
  29. package/lib/plugins/view-context.d.ts.map +1 -1
  30. package/lib/plugins/view-context.js +0 -3
  31. package/lib/plugins/view-context.js.map +1 -1
  32. package/lib/server-log/compat.d.ts +36 -0
  33. package/lib/server-log/compat.d.ts.map +1 -0
  34. package/lib/server-log/compat.js +73 -0
  35. package/lib/server-log/compat.js.map +1 -0
  36. package/lib/server-log/dev-logs/api-list-handler.d.ts +6 -0
  37. package/lib/server-log/dev-logs/api-list-handler.d.ts.map +1 -0
  38. package/lib/server-log/dev-logs/api-list-handler.js +132 -0
  39. package/lib/server-log/dev-logs/api-list-handler.js.map +1 -0
  40. package/lib/server-log/dev-logs/controller.d.ts +45 -0
  41. package/lib/server-log/dev-logs/controller.d.ts.map +1 -0
  42. package/lib/server-log/dev-logs/controller.js +239 -0
  43. package/lib/server-log/dev-logs/controller.js.map +1 -0
  44. package/lib/server-log/dev-logs/health.controller.d.ts +15 -0
  45. package/lib/server-log/dev-logs/health.controller.d.ts.map +1 -0
  46. package/lib/server-log/dev-logs/health.controller.js +79 -0
  47. package/lib/server-log/dev-logs/health.controller.js.map +1 -0
  48. package/lib/server-log/dev-logs/helper/path-matcher.d.ts +117 -0
  49. package/lib/server-log/dev-logs/helper/path-matcher.d.ts.map +1 -0
  50. package/lib/server-log/dev-logs/helper/path-matcher.js +214 -0
  51. package/lib/server-log/dev-logs/helper/path-matcher.js.map +1 -0
  52. package/lib/server-log/dev-logs/index.d.ts +12 -0
  53. package/lib/server-log/dev-logs/index.d.ts.map +1 -0
  54. package/lib/server-log/dev-logs/index.js +61 -0
  55. package/lib/server-log/dev-logs/index.js.map +1 -0
  56. package/lib/server-log/dev-logs/router.d.ts +7 -0
  57. package/lib/server-log/dev-logs/router.d.ts.map +1 -0
  58. package/lib/server-log/dev-logs/router.js +40 -0
  59. package/lib/server-log/dev-logs/router.js.map +1 -0
  60. package/lib/server-log/dev-logs/services/capability.service.d.ts +33 -0
  61. package/lib/server-log/dev-logs/services/capability.service.d.ts.map +1 -0
  62. package/lib/server-log/dev-logs/services/capability.service.js +127 -0
  63. package/lib/server-log/dev-logs/services/capability.service.js.map +1 -0
  64. package/lib/server-log/dev-logs/services/file-reader.d.ts +10 -0
  65. package/lib/server-log/dev-logs/services/file-reader.d.ts.map +1 -0
  66. package/lib/server-log/dev-logs/services/file-reader.js +67 -0
  67. package/lib/server-log/dev-logs/services/file-reader.js.map +1 -0
  68. package/lib/server-log/dev-logs/services/index.d.ts +8 -0
  69. package/lib/server-log/dev-logs/services/index.d.ts.map +1 -0
  70. package/lib/server-log/dev-logs/services/index.js +30 -0
  71. package/lib/server-log/dev-logs/services/index.js.map +1 -0
  72. package/lib/server-log/dev-logs/services/parsers.d.ts +23 -0
  73. package/lib/server-log/dev-logs/services/parsers.d.ts.map +1 -0
  74. package/lib/server-log/dev-logs/services/parsers.js +157 -0
  75. package/lib/server-log/dev-logs/services/parsers.js.map +1 -0
  76. package/lib/server-log/dev-logs/services/server-log.service.d.ts +17 -0
  77. package/lib/server-log/dev-logs/services/server-log.service.d.ts.map +1 -0
  78. package/lib/server-log/dev-logs/services/server-log.service.js +119 -0
  79. package/lib/server-log/dev-logs/services/server-log.service.js.map +1 -0
  80. package/lib/server-log/dev-logs/services/trace.service.d.ts +14 -0
  81. package/lib/server-log/dev-logs/services/trace.service.d.ts.map +1 -0
  82. package/lib/server-log/dev-logs/services/trace.service.js +162 -0
  83. package/lib/server-log/dev-logs/services/trace.service.js.map +1 -0
  84. package/lib/server-log/dev-logs/services/trigger.service.d.ts +14 -0
  85. package/lib/server-log/dev-logs/services/trigger.service.d.ts.map +1 -0
  86. package/lib/server-log/dev-logs/services/trigger.service.js +153 -0
  87. package/lib/server-log/dev-logs/services/trigger.service.js.map +1 -0
  88. package/lib/server-log/dev-logs/services.d.ts +7 -0
  89. package/lib/server-log/dev-logs/services.d.ts.map +1 -0
  90. package/lib/server-log/dev-logs/services.js +20 -0
  91. package/lib/server-log/dev-logs/services.js.map +1 -0
  92. package/lib/server-log/dev-logs/sse/client-manager.d.ts +61 -0
  93. package/lib/server-log/dev-logs/sse/client-manager.d.ts.map +1 -0
  94. package/lib/server-log/dev-logs/sse/client-manager.js +140 -0
  95. package/lib/server-log/dev-logs/sse/client-manager.js.map +1 -0
  96. package/lib/server-log/dev-logs/sse/index.d.ts +5 -0
  97. package/lib/server-log/dev-logs/sse/index.d.ts.map +1 -0
  98. package/lib/server-log/dev-logs/sse/index.js +11 -0
  99. package/lib/server-log/dev-logs/sse/index.js.map +1 -0
  100. package/lib/server-log/dev-logs/sse/log-watcher.d.ts +51 -0
  101. package/lib/server-log/dev-logs/sse/log-watcher.d.ts.map +1 -0
  102. package/lib/server-log/dev-logs/sse/log-watcher.js +381 -0
  103. package/lib/server-log/dev-logs/sse/log-watcher.js.map +1 -0
  104. package/lib/server-log/dev-logs/sse/sse.controller.d.ts +25 -0
  105. package/lib/server-log/dev-logs/sse/sse.controller.d.ts.map +1 -0
  106. package/lib/server-log/dev-logs/sse/sse.controller.js +95 -0
  107. package/lib/server-log/dev-logs/sse/sse.controller.js.map +1 -0
  108. package/lib/server-log/dev-logs/types.d.ts +104 -0
  109. package/lib/server-log/dev-logs/types.d.ts.map +1 -0
  110. package/lib/server-log/dev-logs/types.js +3 -0
  111. package/lib/server-log/dev-logs/types.js.map +1 -0
  112. package/lib/server-log/dev-logs/utils.d.ts +68 -0
  113. package/lib/server-log/dev-logs/utils.d.ts.map +1 -0
  114. package/lib/server-log/dev-logs/utils.js +151 -0
  115. package/lib/server-log/dev-logs/utils.js.map +1 -0
  116. package/lib/server-log/openapi/controller.d.ts +7 -0
  117. package/lib/server-log/openapi/controller.d.ts.map +1 -0
  118. package/lib/server-log/openapi/controller.js +60 -0
  119. package/lib/server-log/openapi/controller.js.map +1 -0
  120. package/lib/server-log/openapi/index.d.ts +10 -0
  121. package/lib/server-log/openapi/index.d.ts.map +1 -0
  122. package/lib/server-log/openapi/index.js +48 -0
  123. package/lib/server-log/openapi/index.js.map +1 -0
  124. package/lib/server-log/openapi/router.d.ts +20 -0
  125. package/lib/server-log/openapi/router.d.ts.map +1 -0
  126. package/lib/server-log/openapi/router.js +26 -0
  127. package/lib/server-log/openapi/router.js.map +1 -0
  128. package/lib/server-log/openapi/services.d.ts +15 -0
  129. package/lib/server-log/openapi/services.d.ts.map +1 -0
  130. package/lib/server-log/openapi/services.js +276 -0
  131. package/lib/server-log/openapi/services.js.map +1 -0
  132. package/lib/server-log/openapi/spec-controller.d.ts +4 -0
  133. package/lib/server-log/openapi/spec-controller.d.ts.map +1 -0
  134. package/lib/server-log/openapi/spec-controller.js +136 -0
  135. package/lib/server-log/openapi/spec-controller.js.map +1 -0
  136. package/lib/server-log/openapi/types.d.ts +56 -0
  137. package/lib/server-log/openapi/types.d.ts.map +1 -0
  138. package/lib/server-log/openapi/types.js +3 -0
  139. package/lib/server-log/openapi/types.js.map +1 -0
  140. package/lib/server-log/openapi/utils.d.ts +18 -0
  141. package/lib/server-log/openapi/utils.d.ts.map +1 -0
  142. package/lib/server-log/openapi/utils.js +128 -0
  143. package/lib/server-log/openapi/utils.js.map +1 -0
  144. package/lib/server-log/register.d.ts +34 -0
  145. package/lib/server-log/register.d.ts.map +1 -0
  146. package/lib/server-log/register.js +196 -0
  147. package/lib/server-log/register.js.map +1 -0
  148. package/lib/server-log/types.d.ts +99 -0
  149. package/lib/server-log/types.d.ts.map +1 -0
  150. package/lib/server-log/types.js +3 -0
  151. package/lib/server-log/types.js.map +1 -0
  152. package/lib/utils/local-dev.d.ts +46 -0
  153. package/lib/utils/local-dev.d.ts.map +1 -0
  154. package/lib/utils/local-dev.js +96 -0
  155. package/lib/utils/local-dev.js.map +1 -0
  156. package/lib/utils/proxy-error.d.ts +29 -0
  157. package/lib/utils/proxy-error.d.ts.map +1 -0
  158. package/lib/utils/proxy-error.js +158 -0
  159. package/lib/utils/proxy-error.js.map +1 -0
  160. package/package.json +3 -1
  161. package/lib/plugins/basename-injection.d.ts.map +0 -1
  162. package/lib/plugins/basename-injection.js.map +0 -1
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LogWatcher = void 0;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ /**
40
+ * Log level mapping from Pino numeric levels
41
+ */
42
+ function mapPinoLevelToServerLogLevel(pinoLevel) {
43
+ if (typeof pinoLevel === 'string') {
44
+ const lower = pinoLevel.toLowerCase();
45
+ if (lower === 'fatal')
46
+ return 'fatal';
47
+ if (lower === 'error')
48
+ return 'error';
49
+ if (lower === 'warn' || lower === 'warning')
50
+ return 'warn';
51
+ if (lower === 'info' || lower === 'log')
52
+ return 'log';
53
+ if (lower === 'debug')
54
+ return 'debug';
55
+ if (lower === 'trace' || lower === 'verbose')
56
+ return 'verbose';
57
+ return 'log';
58
+ }
59
+ if (pinoLevel >= 60)
60
+ return 'fatal';
61
+ if (pinoLevel >= 50)
62
+ return 'error';
63
+ if (pinoLevel >= 40)
64
+ return 'warn';
65
+ if (pinoLevel >= 30)
66
+ return 'log';
67
+ if (pinoLevel >= 20)
68
+ return 'debug';
69
+ return 'verbose';
70
+ }
71
+ /**
72
+ * Extract log level from text content
73
+ */
74
+ function extractLogLevel(text) {
75
+ const lower = text.toLowerCase();
76
+ if (lower.includes('fatal') || lower.includes('critical'))
77
+ return 'fatal';
78
+ if (lower.includes('error') || lower.includes('<e>') || lower.includes('✖'))
79
+ return 'error';
80
+ if (lower.includes('warn') || lower.includes('warning') || lower.includes('<w>') || lower.includes('⚠'))
81
+ return 'warn';
82
+ if (lower.includes('debug') || lower.includes('<d>'))
83
+ return 'debug';
84
+ if (lower.includes('verbose') || lower.includes('trace'))
85
+ return 'verbose';
86
+ return 'log';
87
+ }
88
+ /**
89
+ * Generate a simple UUID v4
90
+ */
91
+ function generateUUID() {
92
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
93
+ const r = (Math.random() * 16) | 0;
94
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
95
+ return v.toString(16);
96
+ });
97
+ }
98
+ /**
99
+ * Parse Pino JSON log to ServerLog format
100
+ */
101
+ function parsePinoLog(line, source) {
102
+ try {
103
+ const pinoLog = JSON.parse(line);
104
+ const id = generateUUID();
105
+ return {
106
+ id,
107
+ level: mapPinoLevelToServerLogLevel(pinoLog.level),
108
+ timestamp: new Date(pinoLog.time).getTime(),
109
+ message: pinoLog.message || pinoLog.msg || '',
110
+ context: pinoLog.context || null,
111
+ traceId: pinoLog.trace_id || null,
112
+ userId: pinoLog.user_id || null,
113
+ appId: pinoLog.app_id || null,
114
+ tenantId: pinoLog.tenant_id || null,
115
+ stack: pinoLog.stack || null,
116
+ meta: {
117
+ pid: pinoLog.pid,
118
+ hostname: pinoLog.hostname,
119
+ path: pinoLog.path,
120
+ method: pinoLog.method,
121
+ statusCode: pinoLog.status_code,
122
+ durationMs: pinoLog.duration_ms,
123
+ ip: pinoLog.ip,
124
+ pageRoute: pinoLog.page_route,
125
+ requestBody: pinoLog.request_body,
126
+ responseBody: pinoLog.response_body,
127
+ queryParams: pinoLog.query_params,
128
+ },
129
+ tags: [source],
130
+ };
131
+ }
132
+ catch {
133
+ return null;
134
+ }
135
+ }
136
+ /**
137
+ * Parse plain text log to ServerLog format
138
+ */
139
+ function parseStdLog(line, source) {
140
+ const id = generateUUID();
141
+ const match = line.match(/^\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\] \[(server|client)\] (.*)$/);
142
+ if (!match) {
143
+ return {
144
+ id,
145
+ level: extractLogLevel(line),
146
+ timestamp: Date.now(),
147
+ message: line,
148
+ context: null,
149
+ traceId: null,
150
+ userId: null,
151
+ appId: null,
152
+ tenantId: null,
153
+ stack: null,
154
+ meta: null,
155
+ tags: [source],
156
+ };
157
+ }
158
+ const [, timeStr, , content] = match;
159
+ let timestamp;
160
+ try {
161
+ const isoStr = timeStr.replace(' ', 'T');
162
+ timestamp = new Date(isoStr).getTime();
163
+ if (isNaN(timestamp)) {
164
+ timestamp = Date.now();
165
+ }
166
+ }
167
+ catch {
168
+ timestamp = Date.now();
169
+ }
170
+ return {
171
+ id,
172
+ level: extractLogLevel(content),
173
+ timestamp,
174
+ message: content,
175
+ context: null,
176
+ traceId: null,
177
+ userId: null,
178
+ appId: null,
179
+ tenantId: null,
180
+ stack: null,
181
+ meta: null,
182
+ tags: [source],
183
+ };
184
+ }
185
+ /**
186
+ * LogWatcher - watches log files and emits new log entries via SSE
187
+ */
188
+ class LogWatcher {
189
+ constructor(options = {}) {
190
+ this.logDir = '';
191
+ this.watchers = new Map();
192
+ this.filePositions = new Map();
193
+ this.subscribers = new Set();
194
+ this.isRunning = false;
195
+ this.debug = false;
196
+ this.logFiles = [
197
+ { fileName: 'server.log', source: 'server', parser: parsePinoLog },
198
+ { fileName: 'trace.log', source: 'trace', parser: parsePinoLog },
199
+ { fileName: 'server.std.log', source: 'server-std', parser: parseStdLog },
200
+ { fileName: 'client.std.log', source: 'client-std', parser: parseStdLog },
201
+ ];
202
+ this.debug = options.debug ?? false;
203
+ }
204
+ log(...args) {
205
+ if (this.debug) {
206
+ console.log('[LogWatcher]', ...args);
207
+ }
208
+ }
209
+ /**
210
+ * Start watching log files
211
+ */
212
+ start(logDir) {
213
+ if (this.isRunning) {
214
+ this.log('Already running, ignoring start call');
215
+ return;
216
+ }
217
+ this.logDir = logDir;
218
+ this.isRunning = true;
219
+ this.log(`Starting to watch log files in: ${logDir}`);
220
+ for (const config of this.logFiles) {
221
+ this.watchFile(config);
222
+ }
223
+ }
224
+ /**
225
+ * Stop watching all files
226
+ */
227
+ stop() {
228
+ if (!this.isRunning) {
229
+ return;
230
+ }
231
+ this.log('Stopping file watchers');
232
+ this.isRunning = false;
233
+ Array.from(this.watchers.entries()).forEach(([fileName, watcher]) => {
234
+ watcher.close();
235
+ this.log(`Closed watcher for: ${fileName}`);
236
+ });
237
+ this.watchers.clear();
238
+ this.filePositions.clear();
239
+ }
240
+ /**
241
+ * Subscribe to new log events
242
+ */
243
+ onLog(callback) {
244
+ this.subscribers.add(callback);
245
+ this.log(`Subscriber added, total: ${this.subscribers.size}`);
246
+ return () => {
247
+ this.subscribers.delete(callback);
248
+ this.log(`Subscriber removed, total: ${this.subscribers.size}`);
249
+ };
250
+ }
251
+ /**
252
+ * Get subscriber count
253
+ */
254
+ getSubscriberCount() {
255
+ return this.subscribers.size;
256
+ }
257
+ /**
258
+ * Watch a single log file
259
+ */
260
+ watchFile(config) {
261
+ const filePath = path.join(this.logDir, config.fileName);
262
+ // Check if file exists
263
+ if (!fs.existsSync(filePath)) {
264
+ this.log(`File not found, skipping: ${config.fileName}`);
265
+ return;
266
+ }
267
+ // Initialize file position to end of file (only watch new content)
268
+ try {
269
+ const stats = fs.statSync(filePath);
270
+ this.filePositions.set(config.fileName, stats.size);
271
+ this.log(`Initialized position for ${config.fileName}: ${stats.size} bytes`);
272
+ }
273
+ catch (error) {
274
+ this.log(`Failed to get initial position for ${config.fileName}:`, error);
275
+ this.filePositions.set(config.fileName, 0);
276
+ }
277
+ // Start watching
278
+ try {
279
+ const watcher = fs.watch(filePath, (eventType) => {
280
+ if (eventType === 'change') {
281
+ this.handleFileChange(config);
282
+ }
283
+ });
284
+ watcher.on('error', (error) => {
285
+ this.log(`Watcher error for ${config.fileName}:`, error);
286
+ // Try to restart watcher
287
+ this.restartWatcher(config);
288
+ });
289
+ this.watchers.set(config.fileName, watcher);
290
+ this.log(`Started watching: ${config.fileName}`);
291
+ }
292
+ catch (error) {
293
+ this.log(`Failed to start watcher for ${config.fileName}:`, error);
294
+ }
295
+ }
296
+ /**
297
+ * Restart a file watcher after error
298
+ */
299
+ restartWatcher(config) {
300
+ const existingWatcher = this.watchers.get(config.fileName);
301
+ if (existingWatcher) {
302
+ existingWatcher.close();
303
+ this.watchers.delete(config.fileName);
304
+ }
305
+ // Wait a bit before restarting
306
+ setTimeout(() => {
307
+ if (this.isRunning) {
308
+ this.log(`Restarting watcher for: ${config.fileName}`);
309
+ this.watchFile(config);
310
+ }
311
+ }, 1000);
312
+ }
313
+ /**
314
+ * Handle file change event - read new content
315
+ */
316
+ handleFileChange(config) {
317
+ const filePath = path.join(this.logDir, config.fileName);
318
+ const lastPosition = this.filePositions.get(config.fileName) || 0;
319
+ try {
320
+ const stats = fs.statSync(filePath);
321
+ const currentSize = stats.size;
322
+ // File was truncated/rotated - reset position
323
+ if (currentSize < lastPosition) {
324
+ this.log(`File ${config.fileName} was truncated, resetting position`);
325
+ this.filePositions.set(config.fileName, 0);
326
+ this.handleFileChange(config); // Re-read from beginning
327
+ return;
328
+ }
329
+ // No new content
330
+ if (currentSize === lastPosition) {
331
+ return;
332
+ }
333
+ // Read new content
334
+ const readSize = currentSize - lastPosition;
335
+ const buffer = Buffer.alloc(readSize);
336
+ const fd = fs.openSync(filePath, 'r');
337
+ try {
338
+ fs.readSync(fd, buffer, 0, readSize, lastPosition);
339
+ }
340
+ finally {
341
+ fs.closeSync(fd);
342
+ }
343
+ // Update position
344
+ this.filePositions.set(config.fileName, currentSize);
345
+ // Parse lines
346
+ const content = buffer.toString('utf8');
347
+ const lines = content.split('\n');
348
+ for (const line of lines) {
349
+ if (!line.trim())
350
+ continue;
351
+ try {
352
+ const log = config.parser(line, config.source);
353
+ if (log) {
354
+ this.notifySubscribers(log);
355
+ }
356
+ }
357
+ catch {
358
+ // Ignore parse errors for individual lines
359
+ }
360
+ }
361
+ }
362
+ catch (error) {
363
+ this.log(`Error reading file ${config.fileName}:`, error);
364
+ }
365
+ }
366
+ /**
367
+ * Notify all subscribers of new log
368
+ */
369
+ notifySubscribers(log) {
370
+ Array.from(this.subscribers).forEach(subscriber => {
371
+ try {
372
+ subscriber(log);
373
+ }
374
+ catch (error) {
375
+ this.log('Subscriber error:', error);
376
+ }
377
+ });
378
+ }
379
+ }
380
+ exports.LogWatcher = LogWatcher;
381
+ //# sourceMappingURL=log-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-watcher.js","sourceRoot":"","sources":["../../../../src/server-log/dev-logs/sse/log-watcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,gDAAkC;AAGlC;;GAEG;AACH,SAAS,4BAA4B,CACnC,SAA0B;IAE1B,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,OAAO,CAAC;QACtC,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,OAAO,CAAC;QACtC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAC3D,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QACtD,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,OAAO,CAAC;QACtC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,OAAO,CAAC;IACpC,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,OAAO,CAAC;IACpC,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,OAAO,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5F,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACvH,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3E,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,YAAY;IACnB,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,IAAY,EAAE,MAA0B;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;QAE1B,OAAO;YACL,EAAE;YACF,KAAK,EAAE,4BAA4B,CAAC,OAAO,CAAC,KAAK,CAAC;YAClD,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;YAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,IAAI,EAAE;YAC7C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;YACjC,MAAM,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAC/B,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;YAC7B,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACnC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;YAC5B,IAAI,EAAE;gBACJ,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,WAAW,EAAE,OAAO,CAAC,YAAY;gBACjC,YAAY,EAAE,OAAO,CAAC,aAAa;gBACnC,WAAW,EAAE,OAAO,CAAC,YAAY;aAClC;YACD,IAAI,EAAE,CAAC,MAAM,CAAC;SACf,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,MAAmC;IACpE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAEjG,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,EAAE;YACF,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC;YAC5B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,CAAC,MAAM,CAAC;SACf,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,EAAE,OAAO,EAAE,AAAD,EAAG,OAAO,CAAC,GAAG,KAAK,CAAC;IACrC,IAAI,SAAiB,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzC,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACrB,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;QACL,EAAE;QACF,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC;QAC/B,SAAS;QACT,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,CAAC,MAAM,CAAC;KACf,CAAC;AACJ,CAAC;AAUD;;GAEG;AACH,MAAa,UAAU;IAerB,YAAY,UAA+B,EAAE;QAdrC,WAAM,GAAW,EAAE,CAAC;QACpB,aAAQ,GAA8B,IAAI,GAAG,EAAE,CAAC;QAChD,kBAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;QAC/C,gBAAW,GAAuB,IAAI,GAAG,EAAE,CAAC;QAC5C,cAAS,GAAY,KAAK,CAAC;QAC3B,UAAK,GAAY,KAAK,CAAC;QAEd,aAAQ,GAAoB;YAC3C,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAkE,EAAE;YACxH,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAkE,EAAE;YACtH,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAiE,EAAE;YAC/H,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAiE,EAAE;SAChI,CAAC;QAGA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IACtC,CAAC;IAEO,GAAG,CAAC,GAAG,IAAe;QAC5B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAc;QAClB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC;QAEtD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;YAClE,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAuB;QAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAE9D,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,8BAA8B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,MAAqB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEzD,uBAAuB;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,mEAAmE;QACnE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,sCAAsC,MAAM,CAAC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1E,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE;gBAC/C,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAC3B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;gBACzD,yBAAyB;gBACzB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,MAAqB;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAED,+BAA+B;QAC/B,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,MAAqB;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YAE/B,8CAA8C;YAC9C,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,QAAQ,oCAAoC,CAAC,CAAC;gBACtE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB;gBACxD,OAAO;YACT,CAAC;YAED,iBAAiB;YACjB,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,OAAO;YACT,CAAC;YAED,mBAAmB;YACnB,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAEtC,IAAI,CAAC;gBACH,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YACrD,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;YAED,kBAAkB;YAClB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAErD,cAAc;YACd,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAE3B,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC/C,IAAI,GAAG,EAAE,CAAC;wBACR,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,2CAA2C;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,GAAc;QACtC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAChD,IAAI,CAAC;gBACH,UAAU,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAxND,gCAwNC"}
@@ -0,0 +1,25 @@
1
+ import type { RequestHandler } from 'express';
2
+ import { LogWatcher } from './log-watcher';
3
+ import { ClientManager } from './client-manager';
4
+ interface SSEHandlerOptions {
5
+ debug?: boolean;
6
+ heartbeatInterval?: number;
7
+ }
8
+ /**
9
+ * Create SSE handler for server logs streaming
10
+ *
11
+ * Endpoint: GET /dev/logs/server-logs/stream
12
+ *
13
+ * SSE Events:
14
+ * - connected: { clientId: string } - sent when client connects
15
+ * - log: ServerLog - sent when new log entry is written
16
+ * - heartbeat: { timestamp: number } - sent periodically to keep connection alive
17
+ */
18
+ export declare function createSSEHandler(logDir: string, options?: SSEHandlerOptions): RequestHandler;
19
+ /**
20
+ * Create a handler that returns current SSE status
21
+ * Useful for debugging/monitoring
22
+ */
23
+ export declare function createSSEStatusHandler(clientManager: ClientManager, logWatcher: LogWatcher): RequestHandler;
24
+ export {};
25
+ //# sourceMappingURL=sse.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.controller.d.ts","sourceRoot":"","sources":["../../../../src/server-log/dev-logs/sse/sse.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,cAAc,CA+EhG;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,GACrB,cAAc,CAQhB"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSSEHandler = createSSEHandler;
4
+ exports.createSSEStatusHandler = createSSEStatusHandler;
5
+ const log_watcher_1 = require("./log-watcher");
6
+ const client_manager_1 = require("./client-manager");
7
+ /**
8
+ * Create SSE handler for server logs streaming
9
+ *
10
+ * Endpoint: GET /dev/logs/server-logs/stream
11
+ *
12
+ * SSE Events:
13
+ * - connected: { clientId: string } - sent when client connects
14
+ * - log: ServerLog - sent when new log entry is written
15
+ * - heartbeat: { timestamp: number } - sent periodically to keep connection alive
16
+ */
17
+ function createSSEHandler(logDir, options = {}) {
18
+ const { debug = false, heartbeatInterval = 30000 } = options;
19
+ // Shared instances across all connections
20
+ const logWatcher = new log_watcher_1.LogWatcher({ debug });
21
+ const clientManager = new client_manager_1.ClientManager({ debug });
22
+ const log = (...args) => {
23
+ if (debug) {
24
+ console.log('[SSEHandler]', ...args);
25
+ }
26
+ };
27
+ return (req, res) => {
28
+ // Set SSE headers
29
+ res.setHeader('Content-Type', 'text/event-stream');
30
+ res.setHeader('Cache-Control', 'no-cache');
31
+ res.setHeader('Connection', 'keep-alive');
32
+ res.setHeader('X-Accel-Buffering', 'no'); // Disable nginx buffering
33
+ // Disable response timeout
34
+ res.setTimeout(0);
35
+ // Generate client ID and register
36
+ const clientId = clientManager.generateClientId();
37
+ clientManager.addClient(clientId, res);
38
+ log(`New SSE connection: ${clientId}`);
39
+ // Start log watcher if this is the first client
40
+ if (clientManager.getClientCount() === 1) {
41
+ log('First client connected, starting log watcher');
42
+ logWatcher.start(logDir);
43
+ }
44
+ // Subscribe to new logs
45
+ const unsubscribe = logWatcher.onLog((logEntry) => {
46
+ clientManager.sendToClient(clientId, 'log', logEntry);
47
+ });
48
+ // Send connected event
49
+ clientManager.sendToClient(clientId, 'connected', {
50
+ clientId,
51
+ timestamp: Date.now(),
52
+ });
53
+ // Set up heartbeat
54
+ const heartbeat = setInterval(() => {
55
+ const success = clientManager.sendToClient(clientId, 'heartbeat', {
56
+ timestamp: Date.now(),
57
+ });
58
+ if (!success) {
59
+ // Client disconnected, clean up
60
+ clearInterval(heartbeat);
61
+ }
62
+ }, heartbeatInterval);
63
+ // Handle client disconnect
64
+ const cleanup = () => {
65
+ log(`Client disconnected: ${clientId}`);
66
+ clearInterval(heartbeat);
67
+ unsubscribe();
68
+ clientManager.removeClient(clientId);
69
+ // Stop log watcher if no more clients
70
+ if (clientManager.getClientCount() === 0) {
71
+ log('No more clients, stopping log watcher');
72
+ logWatcher.stop();
73
+ }
74
+ };
75
+ req.on('close', cleanup);
76
+ req.on('error', (error) => {
77
+ log(`Client error ${clientId}:`, error);
78
+ cleanup();
79
+ });
80
+ };
81
+ }
82
+ /**
83
+ * Create a handler that returns current SSE status
84
+ * Useful for debugging/monitoring
85
+ */
86
+ function createSSEStatusHandler(clientManager, logWatcher) {
87
+ return (_req, res) => {
88
+ res.json({
89
+ clients: clientManager.getClientCount(),
90
+ clientIds: clientManager.getClientIds(),
91
+ subscribers: logWatcher.getSubscriberCount(),
92
+ });
93
+ };
94
+ }
95
+ //# sourceMappingURL=sse.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.controller.js","sourceRoot":"","sources":["../../../../src/server-log/dev-logs/sse/sse.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Log entry structure
3
+ */
4
+ export interface LogEntry {
5
+ trace_id?: string;
6
+ time?: string;
7
+ message?: string;
8
+ method?: string;
9
+ path?: string;
10
+ capability_id?: string;
11
+ plugin_key?: string;
12
+ action?: string;
13
+ is_stream?: boolean;
14
+ input?: string;
15
+ output?: string;
16
+ error?: string;
17
+ duration_ms?: number;
18
+ [key: string]: any;
19
+ }
20
+ /**
21
+ * Trace builder for aggregating log entries
22
+ */
23
+ export interface TraceBuilder {
24
+ traceId: string;
25
+ entries: LogEntry[];
26
+ method?: string;
27
+ path?: string;
28
+ startTime?: string;
29
+ endTime?: string;
30
+ statusCode?: number;
31
+ durationMs?: number;
32
+ hasCompleted: boolean;
33
+ }
34
+ /**
35
+ * Summary of a completed trace call
36
+ */
37
+ export interface TraceSummary {
38
+ traceId: string;
39
+ method?: string;
40
+ path?: string;
41
+ startTime?: string;
42
+ endTime?: string;
43
+ statusCode?: number;
44
+ durationMs?: number;
45
+ entries: LogEntry[];
46
+ }
47
+ /**
48
+ * Paginated response structure
49
+ */
50
+ export interface PaginatedResponse<T> {
51
+ page: number;
52
+ pageSize: number;
53
+ totalPages: number;
54
+ calls: T[];
55
+ }
56
+ /**
57
+ * Response for recent trace calls
58
+ */
59
+ export interface RecentTraceCallsResponse extends PaginatedResponse<TraceSummary> {
60
+ totalCalls: number;
61
+ }
62
+ /**
63
+ * Response for log file page
64
+ */
65
+ export interface LogFilePageResponse {
66
+ page: number;
67
+ pageSize: number;
68
+ totalLines: number;
69
+ totalPages: number;
70
+ lines: string[];
71
+ }
72
+ /**
73
+ * Router options
74
+ */
75
+ export interface RouterOptions {
76
+ logDir?: string;
77
+ }
78
+ /**
79
+ * ServerLog 接口(与前端完全一致)
80
+ * 来自 miaoda/packages/L2/sandbox-console/src/server-log-types.ts
81
+ */
82
+ export interface ServerLog {
83
+ id: string;
84
+ level: 'fatal' | 'error' | 'warn' | 'log' | 'debug' | 'verbose';
85
+ timestamp: number;
86
+ message: string;
87
+ context?: string | null;
88
+ traceId?: string | null;
89
+ userId?: string | null;
90
+ appId?: string | null;
91
+ tenantId?: string | null;
92
+ stack?: string | null;
93
+ meta?: Record<string, any> | null;
94
+ tags?: string[] | null;
95
+ }
96
+ /**
97
+ * ServerLog 查询响应
98
+ */
99
+ export interface ServerLogResponse {
100
+ logs: ServerLog[];
101
+ total: number;
102
+ hasMore: boolean;
103
+ }
104
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server-log/dev-logs/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server-log/dev-logs/types.ts"],"names":[],"mappings":""}