@cjwddz/mirror 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +89 -222
  2. package/dist/cli/client.d.ts +19 -0
  3. package/dist/cli/client.d.ts.map +1 -0
  4. package/dist/cli/client.js +107 -0
  5. package/dist/cli/client.js.map +1 -0
  6. package/dist/cli/index.d.ts +1 -1
  7. package/dist/cli/index.js +88 -51
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/server.d.ts +19 -0
  10. package/dist/cli/server.d.ts.map +1 -0
  11. package/dist/cli/server.js +82 -0
  12. package/dist/cli/server.js.map +1 -0
  13. package/dist/core/http-tunnel-client.d.ts +64 -0
  14. package/dist/core/http-tunnel-client.d.ts.map +1 -0
  15. package/dist/core/http-tunnel-client.js +315 -0
  16. package/dist/core/http-tunnel-client.js.map +1 -0
  17. package/dist/core/http-tunnel-protocol.d.ts +86 -0
  18. package/dist/core/http-tunnel-protocol.d.ts.map +1 -0
  19. package/dist/core/http-tunnel-protocol.js +29 -0
  20. package/dist/core/http-tunnel-protocol.js.map +1 -0
  21. package/dist/core/http-tunnel-server.d.ts +74 -0
  22. package/dist/core/http-tunnel-server.d.ts.map +1 -0
  23. package/dist/core/http-tunnel-server.js +317 -0
  24. package/dist/core/http-tunnel-server.js.map +1 -0
  25. package/dist/index.d.ts +4 -8
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +4 -8
  28. package/dist/index.js.map +1 -1
  29. package/package.json +12 -10
  30. package/dist/cli/exec.d.ts +0 -9
  31. package/dist/cli/exec.d.ts.map +0 -1
  32. package/dist/cli/exec.js +0 -32
  33. package/dist/cli/exec.js.map +0 -1
  34. package/dist/cli/host-impl.d.ts +0 -58
  35. package/dist/cli/host-impl.d.ts.map +0 -1
  36. package/dist/cli/host-impl.js +0 -547
  37. package/dist/cli/host-impl.js.map +0 -1
  38. package/dist/cli/host.d.ts +0 -9
  39. package/dist/cli/host.d.ts.map +0 -1
  40. package/dist/cli/host.js +0 -57
  41. package/dist/cli/host.js.map +0 -1
  42. package/dist/cli/link.d.ts +0 -10
  43. package/dist/cli/link.d.ts.map +0 -1
  44. package/dist/cli/link.js +0 -105
  45. package/dist/cli/link.js.map +0 -1
  46. package/dist/cli/logs.d.ts +0 -8
  47. package/dist/cli/logs.d.ts.map +0 -1
  48. package/dist/cli/logs.js +0 -48
  49. package/dist/cli/logs.js.map +0 -1
  50. package/dist/cli/shell.d.ts +0 -6
  51. package/dist/cli/shell.d.ts.map +0 -1
  52. package/dist/cli/shell.js +0 -53
  53. package/dist/cli/shell.js.map +0 -1
  54. package/dist/cli/status.d.ts +0 -6
  55. package/dist/cli/status.d.ts.map +0 -1
  56. package/dist/cli/status.js +0 -33
  57. package/dist/cli/status.js.map +0 -1
  58. package/dist/cli/stop.d.ts +0 -6
  59. package/dist/cli/stop.d.ts.map +0 -1
  60. package/dist/cli/stop.js +0 -18
  61. package/dist/cli/stop.js.map +0 -1
  62. package/dist/cli/ui/MirrorUI.d.ts +0 -22
  63. package/dist/cli/ui/MirrorUI.d.ts.map +0 -1
  64. package/dist/cli/ui/MirrorUI.js +0 -71
  65. package/dist/cli/ui/MirrorUI.js.map +0 -1
  66. package/dist/cli/ui/interactive-terminal.d.ts +0 -3
  67. package/dist/cli/ui/interactive-terminal.d.ts.map +0 -1
  68. package/dist/cli/ui/interactive-terminal.js +0 -150
  69. package/dist/cli/ui/interactive-terminal.js.map +0 -1
  70. package/dist/cli/watch.d.ts +0 -6
  71. package/dist/cli/watch.d.ts.map +0 -1
  72. package/dist/cli/watch.js +0 -29
  73. package/dist/cli/watch.js.map +0 -1
  74. package/dist/core/daemon.d.ts +0 -154
  75. package/dist/core/daemon.d.ts.map +0 -1
  76. package/dist/core/daemon.js +0 -590
  77. package/dist/core/daemon.js.map +0 -1
  78. package/dist/core/process-manager.d.ts +0 -19
  79. package/dist/core/process-manager.d.ts.map +0 -1
  80. package/dist/core/process-manager.js +0 -76
  81. package/dist/core/process-manager.js.map +0 -1
  82. package/dist/transport/pty.d.ts +0 -7
  83. package/dist/transport/pty.d.ts.map +0 -1
  84. package/dist/transport/pty.js +0 -26
  85. package/dist/transport/pty.js.map +0 -1
@@ -1,590 +0,0 @@
1
- /**
2
- * Mirror 守护进程
3
- * 管理连接、文件同步和命令执行
4
- */
5
- import { WebSocketTransport } from '../transport/websocket.js';
6
- import { readFileWithHash, getRelativePath, compressContent, shouldCompress } from '../core/file-sync.js';
7
- import chokidar from 'chokidar';
8
- import { readdir } from 'fs/promises';
9
- import { join } from 'path';
10
- import { randomUUID } from 'crypto';
11
- import { TokenManager } from './token-manager.js';
12
- import { OutputBuffer } from './output-buffer.js';
13
- export class MirrorDaemon {
14
- transport = null;
15
- watcher = null;
16
- tokenManager;
17
- outputBuffers = new Map();
18
- commandHistory = [];
19
- currentVersion = 0;
20
- isConnected = false;
21
- isConnecting = false;
22
- autoReconnect = false;
23
- reconnectAttempts = 0;
24
- maxReconnectAttempts = 10;
25
- reconnectDelay = 2000; // 初始 2 秒
26
- maxReconnectDelay = 30000; // 最大 30 秒
27
- lastActivityTime = Date.now();
28
- inactivityTimeout = 30 * 60 * 1000; // 30 分钟
29
- inactivityTimer = null;
30
- commandTimeout = 5 * 60 * 1000; // 5 分钟
31
- commandTimeouts = new Map();
32
- messageHandlers = new Map();
33
- // 交互式会话管理
34
- hasInteractiveSession = false;
35
- interactiveSessionId = null;
36
- // 命令执行队列
37
- commandQueue = [];
38
- activeCommands = 0;
39
- maxConcurrentCommands = 5;
40
- constructor() {
41
- this.tokenManager = new TokenManager();
42
- this.setupInactivityCheck();
43
- }
44
- /**
45
- * 连接并启动守护进程
46
- */
47
- async connect(config) {
48
- if (this.isConnecting) {
49
- throw new Error('Already connecting');
50
- }
51
- if (this.isConnected) {
52
- throw new Error('Already connected');
53
- }
54
- this.isConnecting = true;
55
- try {
56
- this.transport = new WebSocketTransport();
57
- await this.transport.connect(config.wsUrl);
58
- // 设置消息处理器
59
- this.setupMessageHandlers();
60
- // 发送 HELLO 消息
61
- this.transport.send({
62
- type: 'HELLO',
63
- clientId: config.clientId,
64
- token: config.token,
65
- clientVersion: config.clientVersion,
66
- workspacePath: config.workspacePath,
67
- });
68
- // 等待服务端响应
69
- await this.waitForServerReady();
70
- // 保存 token
71
- const host = new URL(config.wsUrl).host;
72
- await this.tokenManager.saveToken(config.token, host);
73
- // 开始全量同步
74
- await this.performSnapshot(config.workspacePath);
75
- // 设置文件监听
76
- this.setupFileWatcher(config.workspacePath);
77
- this.isConnected = true;
78
- this.updateActivity();
79
- }
80
- finally {
81
- this.isConnecting = false;
82
- }
83
- }
84
- /**
85
- * 连接到远程工作区(用于 link 命令)
86
- */
87
- async link(url) {
88
- const config = this.parseUrl(url);
89
- await this.connect(config);
90
- }
91
- /**
92
- * 解析 URL
93
- */
94
- parseUrl(url) {
95
- let urlToParse = url;
96
- if (!url.startsWith('ws://') && !url.startsWith('wss://')) {
97
- urlToParse = `ws://${url}`;
98
- }
99
- const urlObj = new URL(urlToParse);
100
- const clientId = randomUUID();
101
- return {
102
- wsUrl: urlToParse,
103
- clientId,
104
- token: urlObj.searchParams.get('token') || '',
105
- clientVersion: '1.0.0',
106
- workspacePath: process.cwd(),
107
- };
108
- }
109
- /**
110
- * 等待服务端就绪
111
- */
112
- async waitForServerReady() {
113
- return new Promise((resolve, reject) => {
114
- if (!this.transport) {
115
- reject(new Error('Transport not initialized'));
116
- return;
117
- }
118
- const timeout = setTimeout(() => {
119
- reject(new Error('Wait for server ready timeout'));
120
- }, 60000);
121
- this.transport.onMessage('READY', () => {
122
- clearTimeout(timeout);
123
- resolve();
124
- });
125
- this.transport.onMessage('ERROR', (msg) => {
126
- clearTimeout(timeout);
127
- const errorMsg = msg;
128
- reject(new Error(`Connection failed: ${errorMsg.message}`));
129
- });
130
- });
131
- }
132
- /**
133
- * 设置消息处理器
134
- */
135
- setupMessageHandlers() {
136
- if (!this.transport)
137
- return;
138
- // EXEC_OUTPUT
139
- this.transport.onMessage('EXEC_OUTPUT', (msg) => {
140
- const outputMsg = msg;
141
- if (outputMsg.execId) {
142
- const buffer = this.outputBuffers.get(outputMsg.execId);
143
- if (buffer && outputMsg.data) {
144
- buffer.append(outputMsg.data);
145
- }
146
- }
147
- });
148
- // EXEC_EXIT
149
- this.transport.onMessage('EXEC_EXIT', (msg) => {
150
- const exitMsg = msg;
151
- if (exitMsg.execId) {
152
- const buffer = this.outputBuffers.get(exitMsg.execId);
153
- if (buffer) {
154
- // 保存到历史记录
155
- const commandResult = this.commandHistory.find(r => r.execId === exitMsg.execId);
156
- if (commandResult) {
157
- commandResult.output = buffer.getAll();
158
- commandResult.exitCode = exitMsg.code;
159
- }
160
- }
161
- // 清理超时定时器
162
- const timeout = this.commandTimeouts.get(exitMsg.execId);
163
- if (timeout) {
164
- clearTimeout(timeout);
165
- this.commandTimeouts.delete(exitMsg.execId);
166
- }
167
- // 减少活跃命令计数
168
- this.activeCommands--;
169
- this.processCommandQueue();
170
- }
171
- });
172
- // FILE_SYNC_STATUS
173
- this.transport.onMessage('FILE_SYNC_STATUS', () => {
174
- // 文件同步状态更新(暂不处理)
175
- });
176
- // ERROR
177
- this.transport.onMessage('ERROR', (msg) => {
178
- const errorMsg = msg;
179
- console.error(`Error: ${errorMsg.message}`);
180
- });
181
- }
182
- /**
183
- * 执行全量快照同步
184
- */
185
- async performSnapshot(workspacePath) {
186
- this.currentVersion = 1;
187
- const files = await this.collectFiles(workspacePath);
188
- const totalFiles = files.length;
189
- if (!this.transport) {
190
- throw new Error('Transport not initialized');
191
- }
192
- // 发送 SNAPSHOT_START
193
- this.transport.send({
194
- type: 'SNAPSHOT_START',
195
- version: this.currentVersion,
196
- totalFiles,
197
- });
198
- // 发送所有文件
199
- for (const file of files) {
200
- try {
201
- const { content, hash, size } = await readFileWithHash(file);
202
- const relativePath = getRelativePath(file, workspacePath);
203
- let finalContent = content;
204
- let compressed = false;
205
- if (shouldCompress(size)) {
206
- try {
207
- finalContent = await compressContent(content);
208
- compressed = true;
209
- }
210
- catch (error) {
211
- // 压缩失败,使用原始内容
212
- }
213
- }
214
- this.transport.send({
215
- type: 'FILE',
216
- path: relativePath,
217
- hash,
218
- content: finalContent.toString('base64'),
219
- compressed,
220
- size,
221
- });
222
- }
223
- catch (error) {
224
- console.error(`Failed to send file ${file}:`, error);
225
- }
226
- }
227
- // 发送 SNAPSHOT_END
228
- this.transport.send({
229
- type: 'SNAPSHOT_END',
230
- version: this.currentVersion,
231
- });
232
- }
233
- /**
234
- * 收集文件
235
- */
236
- async collectFiles(dir) {
237
- const files = [];
238
- const ignorePatterns = ['.vscode', 'node_modules', '.git', '.next'];
239
- async function walk(currentDir) {
240
- const entries = await readdir(currentDir, { withFileTypes: true });
241
- for (const entry of entries) {
242
- const fullPath = join(currentDir, entry.name);
243
- const relativePath = getRelativePath(fullPath, dir);
244
- if (ignorePatterns.some((pattern) => relativePath.includes(pattern))) {
245
- continue;
246
- }
247
- if (entry.isDirectory()) {
248
- await walk(fullPath);
249
- }
250
- else if (entry.isFile()) {
251
- files.push(fullPath);
252
- }
253
- }
254
- }
255
- await walk(dir);
256
- return files;
257
- }
258
- /**
259
- * 设置文件监听
260
- */
261
- setupFileWatcher(workspacePath) {
262
- this.watcher = chokidar.watch(workspacePath, {
263
- ignored: [/.vscode/, /node_modules/, /.git/, /.next/],
264
- ignoreInitial: true,
265
- persistent: true,
266
- });
267
- this.watcher.on('change', async (path) => {
268
- if (!this.transport)
269
- return;
270
- const ws = this.transport.getWebSocket();
271
- if (!ws || ws.readyState !== 1) {
272
- return;
273
- }
274
- this.currentVersion++;
275
- try {
276
- const { content, hash, size } = await readFileWithHash(path);
277
- const relativePath = getRelativePath(path, workspacePath);
278
- let finalContent = content;
279
- let compressed = false;
280
- if (shouldCompress(size)) {
281
- try {
282
- finalContent = await compressContent(content);
283
- compressed = true;
284
- }
285
- catch (error) {
286
- // 压缩失败,使用原始内容
287
- }
288
- }
289
- this.transport.send({
290
- type: 'FILE_DIFF',
291
- version: this.currentVersion,
292
- op: 'update',
293
- path: relativePath,
294
- hash,
295
- content: finalContent.toString('base64'),
296
- compressed,
297
- size,
298
- });
299
- }
300
- catch (error) {
301
- console.error(`Failed to sync file ${path}:`, error);
302
- }
303
- });
304
- this.watcher.on('unlink', (path) => {
305
- if (!this.transport)
306
- return;
307
- const ws = this.transport.getWebSocket();
308
- if (!ws || ws.readyState !== 1) {
309
- return;
310
- }
311
- this.currentVersion++;
312
- const relativePath = getRelativePath(path, workspacePath);
313
- try {
314
- this.transport.send({
315
- type: 'FILE_DIFF',
316
- version: this.currentVersion,
317
- op: 'delete',
318
- path: relativePath,
319
- hash: '',
320
- });
321
- }
322
- catch (error) {
323
- // 发送失败,静默跳过
324
- }
325
- });
326
- }
327
- /**
328
- * 执行命令
329
- */
330
- async execCommand(command) {
331
- if (!this.isConnected || !this.transport) {
332
- throw new Error('Not connected');
333
- }
334
- const execId = randomUUID();
335
- const buffer = new OutputBuffer();
336
- this.outputBuffers.set(execId, buffer);
337
- const commandResult = {
338
- execId,
339
- command,
340
- output: [],
341
- exitCode: null,
342
- timestamp: new Date(),
343
- };
344
- this.commandHistory.push(commandResult);
345
- // 设置命令超时
346
- const timeout = setTimeout(() => {
347
- if (this.transport) {
348
- try {
349
- this.transport.send({
350
- type: 'EXEC_SIGNAL',
351
- execId,
352
- signal: 'SIGTERM',
353
- });
354
- }
355
- catch (error) {
356
- // 忽略错误
357
- }
358
- }
359
- }, this.commandTimeout);
360
- this.commandTimeouts.set(execId, timeout);
361
- // 发送命令
362
- this.transport.send({
363
- type: 'EXEC',
364
- execId,
365
- version: this.currentVersion,
366
- command,
367
- });
368
- this.updateActivity();
369
- // 等待命令完成
370
- return new Promise((resolve, reject) => {
371
- const checkInterval = setInterval(() => {
372
- const result = this.commandHistory.find(r => r.execId === execId);
373
- if (result && result.exitCode !== null) {
374
- clearInterval(checkInterval);
375
- resolve(buffer.getText());
376
- }
377
- }, 100);
378
- // 10 秒超时保护
379
- setTimeout(() => {
380
- clearInterval(checkInterval);
381
- reject(new Error('Command execution timeout'));
382
- }, 10000);
383
- });
384
- }
385
- /**
386
- * 获取命令输出
387
- */
388
- getCommandOutput(execId) {
389
- const buffer = this.outputBuffers.get(execId);
390
- return buffer ? buffer.getAll() : null;
391
- }
392
- /**
393
- * 获取命令历史
394
- */
395
- getCommandHistory(limit = 10) {
396
- return this.commandHistory.slice(-limit);
397
- }
398
- /**
399
- * 更新活动时间
400
- */
401
- updateActivity() {
402
- this.lastActivityTime = Date.now();
403
- // 重置不活动超时
404
- if (this.inactivityTimer) {
405
- clearTimeout(this.inactivityTimer);
406
- }
407
- if (this.autoReconnect) {
408
- this.inactivityTimer = setTimeout(() => {
409
- this.disconnect();
410
- }, this.inactivityTimeout);
411
- }
412
- }
413
- /**
414
- * 设置不活动检查
415
- */
416
- setupInactivityCheck() {
417
- // 在 enableAutoReconnect 中设置
418
- }
419
- /**
420
- * 启用自动重连
421
- */
422
- enableAutoReconnect() {
423
- this.autoReconnect = true;
424
- this.updateActivity();
425
- }
426
- /**
427
- * 禁用自动重连
428
- */
429
- disableAutoReconnect() {
430
- this.autoReconnect = false;
431
- if (this.inactivityTimer) {
432
- clearTimeout(this.inactivityTimer);
433
- this.inactivityTimer = null;
434
- }
435
- }
436
- /**
437
- * 按需重连
438
- */
439
- async reconnect() {
440
- if (this.isConnected) {
441
- return;
442
- }
443
- if (this.isConnecting) {
444
- throw new Error('Already connecting');
445
- }
446
- if (this.reconnectAttempts >= this.maxReconnectAttempts) {
447
- throw new Error('Max reconnect attempts reached');
448
- }
449
- this.isConnecting = true;
450
- try {
451
- // 计算延迟时间(指数退避)
452
- const delay = Math.min(this.reconnectDelay * Math.pow(1.5, this.reconnectAttempts), this.maxReconnectDelay);
453
- await new Promise(resolve => setTimeout(resolve, delay));
454
- // 重新连接
455
- // 注意:这里需要保存原始连接配置
456
- // 实际实现应该保存配置并在重连时使用
457
- // 这里只是示例
458
- this.reconnectAttempts = 0;
459
- this.isConnected = true;
460
- }
461
- catch (error) {
462
- this.reconnectAttempts++;
463
- throw error;
464
- }
465
- finally {
466
- this.isConnecting = false;
467
- }
468
- }
469
- /**
470
- * 断开连接
471
- */
472
- async disconnect() {
473
- this.disableAutoReconnect();
474
- if (this.watcher) {
475
- this.watcher.close();
476
- this.watcher = null;
477
- }
478
- if (this.transport) {
479
- this.transport.close();
480
- this.transport = null;
481
- }
482
- this.isConnected = false;
483
- }
484
- /**
485
- * 停止守护进程
486
- */
487
- async stop() {
488
- await this.disconnect();
489
- // 清理所有定时器
490
- if (this.inactivityTimer) {
491
- clearTimeout(this.inactivityTimer);
492
- this.inactivityTimer = null;
493
- }
494
- for (const timeout of this.commandTimeouts.values()) {
495
- clearTimeout(timeout);
496
- }
497
- this.commandTimeouts.clear();
498
- }
499
- /**
500
- * 获取状态
501
- */
502
- getStatus() {
503
- return {
504
- isConnected: this.isConnected,
505
- isConnecting: this.isConnecting,
506
- hasInteractiveSession: this.hasInteractiveSession,
507
- activeCommands: this.activeCommands,
508
- commandQueueSize: this.commandQueue.length,
509
- reconnectAttempts: this.reconnectAttempts,
510
- };
511
- }
512
- /**
513
- * 进入交互式会话
514
- */
515
- async startInteractiveSession() {
516
- if (this.hasInteractiveSession) {
517
- throw new Error('Interactive session already exists');
518
- }
519
- this.hasInteractiveSession = true;
520
- this.interactiveSessionId = randomUUID();
521
- this.enableAutoReconnect();
522
- }
523
- /**
524
- * 退出交互式会话
525
- */
526
- async stopInteractiveSession() {
527
- this.hasInteractiveSession = false;
528
- this.interactiveSessionId = null;
529
- this.disableAutoReconnect();
530
- }
531
- /**
532
- * 添加命令到队列
533
- */
534
- async processCommandQueue() {
535
- if (this.activeCommands >= this.maxConcurrentCommands || this.commandQueue.length === 0) {
536
- return;
537
- }
538
- const command = this.commandQueue.shift();
539
- if (command) {
540
- this.activeCommands++;
541
- try {
542
- await command();
543
- }
544
- finally {
545
- this.activeCommands--;
546
- this.processCommandQueue();
547
- }
548
- }
549
- }
550
- /**
551
- * 处理命令队列
552
- */
553
- async executeCommand(command) {
554
- return new Promise((resolve, reject) => {
555
- const wrappedCommand = async () => {
556
- try {
557
- await command();
558
- resolve();
559
- }
560
- catch (error) {
561
- reject(error);
562
- }
563
- };
564
- this.commandQueue.push(wrappedCommand);
565
- this.processCommandQueue();
566
- });
567
- }
568
- /**
569
- * 注册消息处理器
570
- */
571
- onMessage(type, handler) {
572
- if (!this.messageHandlers.has(type)) {
573
- this.messageHandlers.set(type, []);
574
- }
575
- this.messageHandlers.get(type).push(handler);
576
- }
577
- /**
578
- * 移除消息处理器
579
- */
580
- offMessage(type, handler) {
581
- const handlers = this.messageHandlers.get(type);
582
- if (handlers) {
583
- const index = handlers.indexOf(handler);
584
- if (index > -1) {
585
- handlers.splice(index, 1);
586
- }
587
- }
588
- }
589
- }
590
- //# sourceMappingURL=daemon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/core/daemon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAO/D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC1G,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAkBlD,MAAM,OAAO,YAAY;IACf,SAAS,GAA8B,IAAI,CAAC;IAC5C,OAAO,GAA8B,IAAI,CAAC;IAC1C,YAAY,CAAe;IAC3B,aAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;IACrD,cAAc,GAAoB,EAAE,CAAC;IACrC,cAAc,GAAG,CAAC,CAAC;IACnB,WAAW,GAAG,KAAK,CAAC;IACpB,YAAY,GAAG,KAAK,CAAC;IACrB,aAAa,GAAG,KAAK,CAAC;IACtB,iBAAiB,GAAG,CAAC,CAAC;IACtB,oBAAoB,GAAG,EAAE,CAAC;IAC1B,cAAc,GAAG,IAAI,CAAC,CAAC,SAAS;IAChC,iBAAiB,GAAG,KAAK,CAAC,CAAC,UAAU;IACrC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ;IAC5C,eAAe,GAA0B,IAAI,CAAC;IAC9C,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO;IACvC,eAAe,GAAgC,IAAI,GAAG,EAAE,CAAC;IACzD,eAAe,GAAgD,IAAI,GAAG,EAAE,CAAC;IAEjF,UAAU;IACF,qBAAqB,GAAG,KAAK,CAAC;IAC9B,oBAAoB,GAAkB,IAAI,CAAC;IAEnD,SAAS;IACD,YAAY,GAA+B,EAAE,CAAC;IAC9C,cAAc,GAAG,CAAC,CAAC;IACnB,qBAAqB,GAAG,CAAC,CAAC;IAElC;QACE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAkB,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE3C,UAAU;YACV,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE5B,cAAc;YACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,CAAC,CAAC;YAEH,UAAU;YACV,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEhC,WAAW;YACX,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;YACxC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAEtD,SAAS;YACT,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAEjD,SAAS;YACT,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAE5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,GAAW;QAC1B,IAAI,UAAU,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1D,UAAU,GAAG,QAAQ,GAAG,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;QAE9B,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,QAAQ;YACR,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;YAC7C,aAAa,EAAE,OAAO;YACtB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;SAC7B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACrD,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,QAAQ,GAAG,GAAmB,CAAC;gBACrC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,cAAc;QACd,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;YAC9C,MAAM,SAAS,GAAG,GAAwB,CAAC;YAC3C,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACxD,IAAI,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC7B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,YAAY;QACZ,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5C,MAAM,OAAO,GAAG,GAAsB,CAAC;YACvC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAI,MAAM,EAAE,CAAC;oBACX,UAAU;oBACV,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;oBACjF,IAAI,aAAa,EAAE,CAAC;wBAClB,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;wBACvC,aAAa,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;oBACxC,CAAC;gBACH,CAAC;gBAED,UAAU;gBACV,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzD,IAAI,OAAO,EAAE,CAAC;oBACZ,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC9C,CAAC;gBAED,WAAW;gBACX,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,mBAAmB;QACnB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAChD,iBAAiB;QACnB,CAAC,CAAC,CAAC;QAEH,QAAQ;QACR,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,GAAmB,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,aAAqB;QACjD,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAExB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAEhC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,UAAU;SACX,CAAC,CAAC;QAEH,SAAS;QACT,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC7D,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBAE1D,IAAI,YAAY,GAAG,OAAO,CAAC;gBAC3B,IAAI,UAAU,GAAG,KAAK,CAAC;gBACvB,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;wBAC9C,UAAU,GAAG,IAAI,CAAC;oBACpB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,cAAc;oBAChB,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,YAAY;oBAClB,IAAI;oBACJ,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACxC,UAAU;oBACV,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,IAAI,CAAC,cAAc;SAC7B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,GAAW;QACpC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEpE,KAAK,UAAU,IAAI,CAAC,UAAkB;YACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAEnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAEpD,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBACrE,SAAS;gBACX,CAAC;gBAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,aAAqB;QAC5C,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE;YAC3C,OAAO,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;YACrD,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAE5B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACzC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC7D,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBAE1D,IAAI,YAAY,GAAG,OAAO,CAAC;gBAC3B,IAAI,UAAU,GAAG,KAAK,CAAC;gBACvB,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;wBAC9C,UAAU,GAAG,IAAI,CAAC;oBACpB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,cAAc;oBAChB,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,IAAI,CAAC,cAAc;oBAC5B,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,YAAY;oBAClB,IAAI;oBACJ,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACxC,UAAU;oBACV,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAE5B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACzC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAE1D,IAAI,CAAC;gBACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,IAAI,CAAC,cAAc;oBAC5B,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,EAAE;iBACT,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,YAAY;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAkB;YACnC,MAAM;YACN,OAAO;YACP,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAExC,SAAS;QACT,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC;oBACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;wBAClB,IAAI,EAAE,aAAa;wBACnB,MAAM;wBACN,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAExB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE1C,OAAO;QACP,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,MAAM;YACZ,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,SAAS;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;gBACrC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;gBAClE,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACvC,aAAa,CAAC,aAAa,CAAC,CAAC;oBAC7B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YAER,WAAW;YACX,UAAU,CAAC,GAAG,EAAE;gBACd,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACjD,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAc;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAgB,EAAE;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,UAAU;QACV,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE;gBACrC,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,4BAA4B;IAC9B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC;YACH,eAAe;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAC3D,IAAI,CAAC,iBAAiB,CACvB,CAAC;YAEF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAEzD,OAAO;YACP,kBAAkB;YAClB,oBAAoB;YACpB,SAAS;YAET,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,UAAU;QACV,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS;QAQP,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;YAC1C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB;QAC3B,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,oBAAoB,GAAG,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB;QAC1B,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB;QAC/B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxF,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,OAAO,EAAE,CAAC;YAClB,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,OAA4B;QACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;gBAChC,IAAI,CAAC;oBACH,MAAM,OAAO,EAAE,CAAC;oBAChB,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACvC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY,EAAE,OAAmC;QACzD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY,EAAE,OAAmC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACf,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -1,19 +0,0 @@
1
- /**
2
- * 进程管理
3
- */
4
- import * as pty from 'node-pty';
5
- export interface ProcessInfo {
6
- execId: string;
7
- process: pty.IPty;
8
- command: string;
9
- }
10
- export declare class ProcessManager {
11
- private processes;
12
- private processGroupPids;
13
- spawn(execId: string, command: string, cwd: string, env?: NodeJS.ProcessEnv): Promise<pty.IPty>;
14
- getProcess(execId: string): ProcessInfo | undefined;
15
- removeProcess(execId: string): void;
16
- killAll(): Promise<void>;
17
- getAllProcesses(): ProcessInfo[];
18
- }
19
- //# sourceMappingURL=process-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/core/process-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,gBAAgB,CAA0B;IAE5C,KAAK,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IA6BpB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAInD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B9B,eAAe,IAAI,WAAW,EAAE;CAGjC"}