@zhin.js/cli 1.0.13 → 1.0.15
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/CHANGELOG.md +16 -0
- package/TEST_GENERATION.md +398 -0
- package/lib/commands/new.d.ts.map +1 -1
- package/lib/commands/new.js +534 -4
- package/lib/commands/new.js.map +1 -1
- package/package.json +22 -14
- package/src/commands/new.ts +552 -6
- package/tests/new-integration.test.ts +232 -0
- package/tests/utils.test.ts +77 -0
package/lib/commands/new.js
CHANGED
|
@@ -9,6 +9,7 @@ export const newCommand = new Command('new')
|
|
|
9
9
|
.argument('[plugin-name]', '插件名称(如: my-plugin)')
|
|
10
10
|
.option('--is-official', '是否为官方插件', false)
|
|
11
11
|
.option('--skip-install', '跳过依赖安装', false)
|
|
12
|
+
.option('--type <type>', '插件类型 (normal|service|adapter)', 'normal')
|
|
12
13
|
.action(async (pluginName, options) => {
|
|
13
14
|
try {
|
|
14
15
|
let name = pluginName;
|
|
@@ -39,7 +40,24 @@ export const newCommand = new Command('new')
|
|
|
39
40
|
logger.error(`插件目录已存在: ${pluginDir}`);
|
|
40
41
|
process.exit(1);
|
|
41
42
|
}
|
|
42
|
-
|
|
43
|
+
// 询问插件类型(如果未指定)
|
|
44
|
+
if (!options.type) {
|
|
45
|
+
const { type } = await inquirer.prompt([
|
|
46
|
+
{
|
|
47
|
+
type: 'list',
|
|
48
|
+
name: 'type',
|
|
49
|
+
message: '请选择插件类型:',
|
|
50
|
+
choices: [
|
|
51
|
+
{ name: '普通插件 (Normal)', value: 'normal' },
|
|
52
|
+
{ name: '服务 (Service)', value: 'service' },
|
|
53
|
+
{ name: '适配器 (Adapter)', value: 'adapter' }
|
|
54
|
+
],
|
|
55
|
+
default: 'normal'
|
|
56
|
+
}
|
|
57
|
+
]);
|
|
58
|
+
options.type = type;
|
|
59
|
+
}
|
|
60
|
+
logger.info(`正在创建${options.type === 'service' ? '服务' : options.type === 'adapter' ? '适配器' : '插件'}包 ${name}...`);
|
|
43
61
|
// 创建插件包结构
|
|
44
62
|
await createPluginPackage(pluginDir, name, options);
|
|
45
63
|
// 自动添加到 app/package.json
|
|
@@ -58,7 +76,12 @@ export const newCommand = new Command('new')
|
|
|
58
76
|
logger.log(` pnpm publish`);
|
|
59
77
|
}
|
|
60
78
|
catch (error) {
|
|
61
|
-
|
|
79
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
80
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
81
|
+
logger.error(`创建插件失败: ${errorMessage}`);
|
|
82
|
+
if (errorStack && process.env.DEBUG) {
|
|
83
|
+
logger.error(errorStack);
|
|
84
|
+
}
|
|
62
85
|
process.exit(1);
|
|
63
86
|
}
|
|
64
87
|
});
|
|
@@ -71,6 +94,7 @@ async function createPluginPackage(pluginDir, pluginName, options) {
|
|
|
71
94
|
await fs.ensureDir(path.join(pluginDir, 'client'));
|
|
72
95
|
await fs.ensureDir(path.join(pluginDir, 'lib'));
|
|
73
96
|
await fs.ensureDir(path.join(pluginDir, 'dist'));
|
|
97
|
+
await fs.ensureDir(path.join(pluginDir, 'tests'));
|
|
74
98
|
// 创建 package.json
|
|
75
99
|
const packageJson = {
|
|
76
100
|
name: packageName,
|
|
@@ -102,6 +126,9 @@ async function createPluginPackage(pluginDir, pluginName, options) {
|
|
|
102
126
|
'build:client': 'zhin-console build',
|
|
103
127
|
dev: 'tsc --watch',
|
|
104
128
|
clean: 'rm -rf lib dist',
|
|
129
|
+
test: 'vitest run',
|
|
130
|
+
'test:watch': 'vitest',
|
|
131
|
+
'test:coverage': 'vitest run --coverage',
|
|
105
132
|
prepublishOnly: 'pnpm build'
|
|
106
133
|
},
|
|
107
134
|
keywords: [
|
|
@@ -126,7 +153,9 @@ async function createPluginPackage(pluginDir, pluginName, options) {
|
|
|
126
153
|
"@zhin.js/client": "workspace:*",
|
|
127
154
|
'lucide-react': 'latest',
|
|
128
155
|
'radix-ui': 'latest',
|
|
129
|
-
'@radix-ui/themes': 'latest'
|
|
156
|
+
'@radix-ui/themes': 'latest',
|
|
157
|
+
'vitest': 'latest',
|
|
158
|
+
'@vitest/coverage-v8': 'latest'
|
|
130
159
|
}
|
|
131
160
|
};
|
|
132
161
|
await fs.writeJson(path.join(pluginDir, 'package.json'), packageJson, { spaces: 2 });
|
|
@@ -301,6 +330,8 @@ dist/
|
|
|
301
330
|
.DS_Store
|
|
302
331
|
`;
|
|
303
332
|
await fs.writeFile(path.join(pluginDir, '.gitignore'), gitignoreContent);
|
|
333
|
+
// 生成测试文件
|
|
334
|
+
await generateTestFiles(pluginDir, pluginName, capitalizedName, options);
|
|
304
335
|
// 安装依赖
|
|
305
336
|
if (!options.skipInstall) {
|
|
306
337
|
logger.info('正在安装依赖...');
|
|
@@ -316,6 +347,504 @@ dist/
|
|
|
316
347
|
}
|
|
317
348
|
}
|
|
318
349
|
}
|
|
350
|
+
/**
|
|
351
|
+
* 生成测试文件
|
|
352
|
+
*/
|
|
353
|
+
async function generateTestFiles(pluginDir, pluginName, capitalizedName, options) {
|
|
354
|
+
const testsDir = path.join(pluginDir, 'tests');
|
|
355
|
+
const pluginType = options.type || 'plugin';
|
|
356
|
+
// 根据插件类型生成不同的测试文件
|
|
357
|
+
if (pluginType === 'service') {
|
|
358
|
+
await generateServiceTest(testsDir, pluginName, capitalizedName);
|
|
359
|
+
}
|
|
360
|
+
else if (pluginType === 'adapter') {
|
|
361
|
+
await generateAdapterTest(testsDir, pluginName, capitalizedName);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
await generatePluginTest(testsDir, pluginName, capitalizedName);
|
|
365
|
+
}
|
|
366
|
+
logger.success('✓ 测试文件已生成');
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* 生成普通插件测试
|
|
370
|
+
*/
|
|
371
|
+
async function generatePluginTest(testsDir, pluginName, capitalizedName) {
|
|
372
|
+
const testContent = `import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
|
|
373
|
+
import { Plugin } from '@zhin.js/core'
|
|
374
|
+
|
|
375
|
+
describe('${capitalizedName} Plugin', () => {
|
|
376
|
+
let plugin: Plugin
|
|
377
|
+
let rootPlugin: Plugin
|
|
378
|
+
|
|
379
|
+
beforeEach(async () => {
|
|
380
|
+
rootPlugin = new Plugin('/test/root-plugin.ts')
|
|
381
|
+
plugin = new Plugin('/plugins/${pluginName}/src/index.ts', rootPlugin)
|
|
382
|
+
})
|
|
383
|
+
|
|
384
|
+
afterEach(async () => {
|
|
385
|
+
if (plugin && plugin.started) {
|
|
386
|
+
await plugin.stop()
|
|
387
|
+
}
|
|
388
|
+
})
|
|
389
|
+
|
|
390
|
+
describe('Plugin Instance', () => {
|
|
391
|
+
it('should create plugin instance', () => {
|
|
392
|
+
expect(plugin).toBeDefined()
|
|
393
|
+
expect(plugin).toBeInstanceOf(Plugin)
|
|
394
|
+
})
|
|
395
|
+
|
|
396
|
+
it('should have correct name', () => {
|
|
397
|
+
expect(plugin.name).toBe('${pluginName}')
|
|
398
|
+
})
|
|
399
|
+
|
|
400
|
+
it('should have parent plugin', () => {
|
|
401
|
+
expect(plugin.parent).toBe(rootPlugin)
|
|
402
|
+
})
|
|
403
|
+
|
|
404
|
+
it('should have logger', () => {
|
|
405
|
+
expect(plugin.logger).toBeDefined()
|
|
406
|
+
expect(typeof plugin.logger.info).toBe('function')
|
|
407
|
+
})
|
|
408
|
+
})
|
|
409
|
+
|
|
410
|
+
describe('Plugin Lifecycle', () => {
|
|
411
|
+
it('should start successfully', async () => {
|
|
412
|
+
await expect(plugin.start()).resolves.not.toThrow()
|
|
413
|
+
expect(plugin.started).toBe(true)
|
|
414
|
+
})
|
|
415
|
+
|
|
416
|
+
it('should stop successfully', async () => {
|
|
417
|
+
await plugin.start()
|
|
418
|
+
await expect(plugin.stop()).resolves.not.toThrow()
|
|
419
|
+
expect(plugin.started).toBe(false)
|
|
420
|
+
})
|
|
421
|
+
|
|
422
|
+
it('should emit mounted event on start', async () => {
|
|
423
|
+
const mountedSpy = vi.fn()
|
|
424
|
+
plugin.on('mounted', mountedSpy)
|
|
425
|
+
|
|
426
|
+
await plugin.start()
|
|
427
|
+
|
|
428
|
+
expect(mountedSpy).toHaveBeenCalled()
|
|
429
|
+
})
|
|
430
|
+
|
|
431
|
+
it('should emit dispose event on stop', async () => {
|
|
432
|
+
const disposeSpy = vi.fn()
|
|
433
|
+
plugin.on('dispose', disposeSpy)
|
|
434
|
+
|
|
435
|
+
await plugin.start()
|
|
436
|
+
await plugin.stop()
|
|
437
|
+
|
|
438
|
+
expect(disposeSpy).toHaveBeenCalled()
|
|
439
|
+
})
|
|
440
|
+
})
|
|
441
|
+
|
|
442
|
+
describe('Plugin Features', () => {
|
|
443
|
+
it('should register middleware', () => {
|
|
444
|
+
plugin.addMiddleware(async (event, next) => {
|
|
445
|
+
return next()
|
|
446
|
+
})
|
|
447
|
+
|
|
448
|
+
expect(plugin.middlewares.length).toBeGreaterThan(0)
|
|
449
|
+
})
|
|
450
|
+
|
|
451
|
+
it('should execute middleware', async () => {
|
|
452
|
+
const executionOrder: number[] = []
|
|
453
|
+
|
|
454
|
+
plugin.addMiddleware(async (event, next) => {
|
|
455
|
+
executionOrder.push(1)
|
|
456
|
+
await next()
|
|
457
|
+
})
|
|
458
|
+
|
|
459
|
+
plugin.addMiddleware(async (event, next) => {
|
|
460
|
+
executionOrder.push(2)
|
|
461
|
+
await next()
|
|
462
|
+
})
|
|
463
|
+
|
|
464
|
+
const mockEvent = {
|
|
465
|
+
$adapter: 'test',
|
|
466
|
+
$bot: 'test-bot',
|
|
467
|
+
$content: [],
|
|
468
|
+
$raw: 'test'
|
|
469
|
+
} as any
|
|
470
|
+
|
|
471
|
+
await plugin.middleware(mockEvent, async () => {})
|
|
472
|
+
|
|
473
|
+
expect(executionOrder).toEqual([1, 2])
|
|
474
|
+
})
|
|
475
|
+
})
|
|
476
|
+
|
|
477
|
+
describe('Custom Tests', () => {
|
|
478
|
+
// 在这里添加你的自定义测试
|
|
479
|
+
it('should pass custom test', () => {
|
|
480
|
+
expect(true).toBe(true)
|
|
481
|
+
})
|
|
482
|
+
})
|
|
483
|
+
})
|
|
484
|
+
`;
|
|
485
|
+
await fs.writeFile(path.join(testsDir, 'index.test.ts'), testContent);
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* 生成服务测试
|
|
489
|
+
*/
|
|
490
|
+
async function generateServiceTest(testsDir, pluginName, capitalizedName) {
|
|
491
|
+
const testContent = `import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
|
|
492
|
+
import { Plugin } from '@zhin.js/core'
|
|
493
|
+
|
|
494
|
+
describe('${capitalizedName} Service', () => {
|
|
495
|
+
let plugin: Plugin
|
|
496
|
+
let service: any
|
|
497
|
+
|
|
498
|
+
beforeEach(async () => {
|
|
499
|
+
plugin = new Plugin('/test/service-plugin.ts')
|
|
500
|
+
// TODO: 初始化你的服务实例
|
|
501
|
+
// service = await createYourService(plugin)
|
|
502
|
+
})
|
|
503
|
+
|
|
504
|
+
afterEach(() => {
|
|
505
|
+
if (plugin && typeof (plugin as any).stop === 'function') {
|
|
506
|
+
(plugin as any).stop()
|
|
507
|
+
}
|
|
508
|
+
})
|
|
509
|
+
|
|
510
|
+
describe('Service Instance', () => {
|
|
511
|
+
it('should create service instance', () => {
|
|
512
|
+
// TODO: 取消注释并实现
|
|
513
|
+
// expect(service).toBeDefined()
|
|
514
|
+
// expect(service).not.toBeNull()
|
|
515
|
+
expect(true).toBe(true)
|
|
516
|
+
})
|
|
517
|
+
|
|
518
|
+
it('should have correct type', () => {
|
|
519
|
+
// TODO: 取消注释并实现
|
|
520
|
+
// expect(typeof service).toBe('object')
|
|
521
|
+
expect(true).toBe(true)
|
|
522
|
+
})
|
|
523
|
+
})
|
|
524
|
+
|
|
525
|
+
describe('Service Methods', () => {
|
|
526
|
+
it('should have required methods', () => {
|
|
527
|
+
// TODO: 添加你的服务方法测试
|
|
528
|
+
// expect(service).toHaveProperty('methodName')
|
|
529
|
+
// expect(typeof service.methodName).toBe('function')
|
|
530
|
+
expect(true).toBe(true)
|
|
531
|
+
})
|
|
532
|
+
|
|
533
|
+
it('should execute methods correctly', async () => {
|
|
534
|
+
// TODO: 测试方法执行
|
|
535
|
+
// const result = await service.methodName()
|
|
536
|
+
// expect(result).toBeDefined()
|
|
537
|
+
expect(true).toBe(true)
|
|
538
|
+
})
|
|
539
|
+
})
|
|
540
|
+
|
|
541
|
+
describe('Service Lifecycle', () => {
|
|
542
|
+
it('should handle initialization', async () => {
|
|
543
|
+
// TODO: 测试初始化
|
|
544
|
+
expect(true).toBe(true)
|
|
545
|
+
})
|
|
546
|
+
|
|
547
|
+
it('should handle cleanup on dispose', async () => {
|
|
548
|
+
// TODO: 测试清理逻辑
|
|
549
|
+
expect(true).toBe(true)
|
|
550
|
+
})
|
|
551
|
+
})
|
|
552
|
+
|
|
553
|
+
describe('Service Dependencies', () => {
|
|
554
|
+
it('should inject required dependencies', () => {
|
|
555
|
+
// TODO: 测试依赖注入
|
|
556
|
+
// plugin.provide({ name: 'dep', value: mockDep })
|
|
557
|
+
// const dep = plugin.inject('dep')
|
|
558
|
+
// expect(dep).toBeDefined()
|
|
559
|
+
expect(true).toBe(true)
|
|
560
|
+
})
|
|
561
|
+
})
|
|
562
|
+
|
|
563
|
+
describe('Custom Tests', () => {
|
|
564
|
+
// 在这里添加你的自定义测试
|
|
565
|
+
it('should pass custom test', () => {
|
|
566
|
+
expect(true).toBe(true)
|
|
567
|
+
})
|
|
568
|
+
})
|
|
569
|
+
})
|
|
570
|
+
`;
|
|
571
|
+
await fs.writeFile(path.join(testsDir, 'index.test.ts'), testContent);
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* 生成适配器测试
|
|
575
|
+
*/
|
|
576
|
+
async function generateAdapterTest(testsDir, pluginName, capitalizedName) {
|
|
577
|
+
const testContent = `import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
|
|
578
|
+
import { Plugin, Adapter, Bot } from '@zhin.js/core'
|
|
579
|
+
import { EventEmitter } from 'events'
|
|
580
|
+
|
|
581
|
+
// TODO: 导入你的适配器和 Bot 类
|
|
582
|
+
// import { ${capitalizedName}Adapter, ${capitalizedName}Bot } from '../src/index'
|
|
583
|
+
|
|
584
|
+
// Mock Bot 类(用于测试)
|
|
585
|
+
class Mock${capitalizedName}Bot extends EventEmitter implements Bot {
|
|
586
|
+
adapter: string
|
|
587
|
+
unique: string
|
|
588
|
+
self_id: string
|
|
589
|
+
quote_self: boolean
|
|
590
|
+
forward_length: number
|
|
591
|
+
$connected: boolean = false
|
|
592
|
+
|
|
593
|
+
constructor(adapter: any, config: any) {
|
|
594
|
+
super()
|
|
595
|
+
this.adapter = '${pluginName}'
|
|
596
|
+
this.unique = config.name || 'mock-bot'
|
|
597
|
+
this.self_id = config.self_id || 'mock-bot-id'
|
|
598
|
+
this.quote_self = config.quote_self ?? true
|
|
599
|
+
this.forward_length = config.forward_length ?? 3
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
async connect() {
|
|
603
|
+
this.$connected = true
|
|
604
|
+
this.emit('online')
|
|
605
|
+
return true
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
async disconnect() {
|
|
609
|
+
this.$connected = false
|
|
610
|
+
this.emit('offline')
|
|
611
|
+
return true
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
async sendMessage(channel_id: string, content: any) {
|
|
615
|
+
return 'mock-message-id'
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
async recallMessage(message_id: string) {
|
|
619
|
+
return true
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
// Mock Adapter 类(用于测试)
|
|
624
|
+
class Mock${capitalizedName}Adapter extends Adapter<any, any> {
|
|
625
|
+
constructor(plugin: Plugin, name: string, config: any[]) {
|
|
626
|
+
super(plugin, name)
|
|
627
|
+
config.forEach(cfg => {
|
|
628
|
+
const bot = this.createBot(cfg)
|
|
629
|
+
this.bots.set(bot.unique, bot)
|
|
630
|
+
})
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
createBot(config: any): Bot {
|
|
634
|
+
return new Mock${capitalizedName}Bot(this, config)
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
describe('${capitalizedName} Adapter', () => {
|
|
639
|
+
let plugin: Plugin
|
|
640
|
+
let adapter: Mock${capitalizedName}Adapter
|
|
641
|
+
|
|
642
|
+
beforeEach(() => {
|
|
643
|
+
plugin = new Plugin('/test/adapter-plugin.ts')
|
|
644
|
+
adapter = new Mock${capitalizedName}Adapter(plugin, '${pluginName}', [
|
|
645
|
+
{ name: 'test-bot', token: 'test-token' }
|
|
646
|
+
])
|
|
647
|
+
})
|
|
648
|
+
|
|
649
|
+
afterEach(async () => {
|
|
650
|
+
if (adapter) {
|
|
651
|
+
await adapter.stop()
|
|
652
|
+
}
|
|
653
|
+
})
|
|
654
|
+
|
|
655
|
+
describe('Adapter Instance', () => {
|
|
656
|
+
it('should create adapter instance', () => {
|
|
657
|
+
expect(adapter).toBeDefined()
|
|
658
|
+
expect(adapter).toBeInstanceOf(Adapter)
|
|
659
|
+
})
|
|
660
|
+
|
|
661
|
+
it('should have correct name', () => {
|
|
662
|
+
expect(adapter.name).toBe('${pluginName}')
|
|
663
|
+
})
|
|
664
|
+
|
|
665
|
+
it('should have plugin reference', () => {
|
|
666
|
+
expect(adapter.plugin).toBe(plugin)
|
|
667
|
+
})
|
|
668
|
+
|
|
669
|
+
it('should have logger', () => {
|
|
670
|
+
expect(adapter.logger).toBeDefined()
|
|
671
|
+
expect(typeof adapter.logger.info).toBe('function')
|
|
672
|
+
})
|
|
673
|
+
|
|
674
|
+
it('should initialize with bots', () => {
|
|
675
|
+
expect(adapter.bots).toBeInstanceOf(Map)
|
|
676
|
+
expect(adapter.bots.size).toBeGreaterThan(0)
|
|
677
|
+
})
|
|
678
|
+
})
|
|
679
|
+
|
|
680
|
+
describe('Bot Management', () => {
|
|
681
|
+
it('should create bots from config', () => {
|
|
682
|
+
expect(adapter.bots.size).toBe(1)
|
|
683
|
+
const bot = adapter.bots.values().next().value
|
|
684
|
+
expect(bot).toBeDefined()
|
|
685
|
+
expect(bot.adapter).toBe('${pluginName}')
|
|
686
|
+
})
|
|
687
|
+
|
|
688
|
+
it('should have createBot method', () => {
|
|
689
|
+
expect(typeof adapter.createBot).toBe('function')
|
|
690
|
+
})
|
|
691
|
+
|
|
692
|
+
it('should create bot with correct properties', () => {
|
|
693
|
+
const bot = adapter.bots.values().next().value
|
|
694
|
+
expect(bot.unique).toBeDefined()
|
|
695
|
+
expect(bot.self_id).toBeDefined()
|
|
696
|
+
})
|
|
697
|
+
})
|
|
698
|
+
|
|
699
|
+
describe('Adapter Lifecycle', () => {
|
|
700
|
+
it('should have start method', () => {
|
|
701
|
+
expect(typeof adapter.start).toBe('function')
|
|
702
|
+
})
|
|
703
|
+
|
|
704
|
+
it('should have stop method', () => {
|
|
705
|
+
expect(typeof adapter.stop).toBe('function')
|
|
706
|
+
})
|
|
707
|
+
|
|
708
|
+
it('should start successfully', async () => {
|
|
709
|
+
await expect(adapter.start()).resolves.not.toThrow()
|
|
710
|
+
})
|
|
711
|
+
|
|
712
|
+
it('should stop successfully', async () => {
|
|
713
|
+
await adapter.start()
|
|
714
|
+
await expect(adapter.stop()).resolves.not.toThrow()
|
|
715
|
+
})
|
|
716
|
+
|
|
717
|
+
it('should add to plugin adapters on start', async () => {
|
|
718
|
+
await adapter.start()
|
|
719
|
+
expect(plugin.adapters).toContain(adapter)
|
|
720
|
+
})
|
|
721
|
+
|
|
722
|
+
it('should remove from plugin adapters on stop', async () => {
|
|
723
|
+
await adapter.start()
|
|
724
|
+
await adapter.stop()
|
|
725
|
+
expect(plugin.adapters).not.toContain(adapter)
|
|
726
|
+
})
|
|
727
|
+
|
|
728
|
+
it('should clear bots on stop', async () => {
|
|
729
|
+
await adapter.start()
|
|
730
|
+
await adapter.stop()
|
|
731
|
+
expect(adapter.bots.size).toBe(0)
|
|
732
|
+
})
|
|
733
|
+
})
|
|
734
|
+
|
|
735
|
+
describe('Event Handling', () => {
|
|
736
|
+
it('should listen to call.recallMessage event', () => {
|
|
737
|
+
const listeners = adapter.listeners('call.recallMessage')
|
|
738
|
+
expect(listeners.length).toBeGreaterThan(0)
|
|
739
|
+
})
|
|
740
|
+
|
|
741
|
+
it('should listen to call.sendMessage event', () => {
|
|
742
|
+
const listeners = adapter.listeners('call.sendMessage')
|
|
743
|
+
expect(listeners.length).toBeGreaterThan(0)
|
|
744
|
+
})
|
|
745
|
+
|
|
746
|
+
it('should listen to message.receive event', () => {
|
|
747
|
+
const listeners = adapter.listeners('message.receive')
|
|
748
|
+
expect(listeners.length).toBeGreaterThan(0)
|
|
749
|
+
})
|
|
750
|
+
|
|
751
|
+
it('should remove all listeners on stop', async () => {
|
|
752
|
+
await adapter.start()
|
|
753
|
+
await adapter.stop()
|
|
754
|
+
|
|
755
|
+
expect(adapter.listenerCount('call.recallMessage')).toBe(0)
|
|
756
|
+
expect(adapter.listenerCount('call.sendMessage')).toBe(0)
|
|
757
|
+
expect(adapter.listenerCount('message.receive')).toBe(0)
|
|
758
|
+
})
|
|
759
|
+
})
|
|
760
|
+
|
|
761
|
+
describe('Message Sending', () => {
|
|
762
|
+
it('should handle sendMessage event', async () => {
|
|
763
|
+
const bot = adapter.bots.values().next().value
|
|
764
|
+
const sendSpy = vi.spyOn(bot, 'sendMessage')
|
|
765
|
+
|
|
766
|
+
await adapter.emit('call.sendMessage', bot.unique, 'test-channel', 'test message')
|
|
767
|
+
|
|
768
|
+
expect(sendSpy).toHaveBeenCalled()
|
|
769
|
+
})
|
|
770
|
+
|
|
771
|
+
it('should throw error when bot not found for sending', async () => {
|
|
772
|
+
await expect(
|
|
773
|
+
adapter.emit('call.sendMessage', 'non-existent-bot', 'channel', 'message')
|
|
774
|
+
).rejects.toThrow()
|
|
775
|
+
})
|
|
776
|
+
})
|
|
777
|
+
|
|
778
|
+
describe('Message Receiving', () => {
|
|
779
|
+
it('should process received messages through middleware', async () => {
|
|
780
|
+
const bot = adapter.bots.values().next().value
|
|
781
|
+
|
|
782
|
+
const middlewareSpy = vi.fn()
|
|
783
|
+
plugin.addMiddleware(async (event, next) => {
|
|
784
|
+
middlewareSpy(event)
|
|
785
|
+
return next()
|
|
786
|
+
})
|
|
787
|
+
|
|
788
|
+
const mockMessage = {
|
|
789
|
+
adapter: '${pluginName}',
|
|
790
|
+
bot: bot.unique,
|
|
791
|
+
channel: { id: 'test-channel', type: 'text' },
|
|
792
|
+
sender: { id: 'test-user' },
|
|
793
|
+
content: 'test message',
|
|
794
|
+
timestamp: Date.now()
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
await adapter.emit('message.receive', mockMessage)
|
|
798
|
+
|
|
799
|
+
expect(middlewareSpy).toHaveBeenCalled()
|
|
800
|
+
})
|
|
801
|
+
})
|
|
802
|
+
|
|
803
|
+
describe('Bot Methods', () => {
|
|
804
|
+
let bot: Mock${capitalizedName}Bot
|
|
805
|
+
|
|
806
|
+
beforeEach(() => {
|
|
807
|
+
bot = adapter.bots.values().next().value as Mock${capitalizedName}Bot
|
|
808
|
+
})
|
|
809
|
+
|
|
810
|
+
it('should have connect method', () => {
|
|
811
|
+
expect(typeof bot.connect).toBe('function')
|
|
812
|
+
})
|
|
813
|
+
|
|
814
|
+
it('should have disconnect method', () => {
|
|
815
|
+
expect(typeof bot.disconnect).toBe('function')
|
|
816
|
+
})
|
|
817
|
+
|
|
818
|
+
it('should have sendMessage method', () => {
|
|
819
|
+
expect(typeof bot.sendMessage).toBe('function')
|
|
820
|
+
})
|
|
821
|
+
|
|
822
|
+
it('should have recallMessage method', () => {
|
|
823
|
+
expect(typeof bot.recallMessage).toBe('function')
|
|
824
|
+
})
|
|
825
|
+
|
|
826
|
+
it('should connect successfully', async () => {
|
|
827
|
+
await bot.connect()
|
|
828
|
+
expect(bot.$connected).toBe(true)
|
|
829
|
+
})
|
|
830
|
+
|
|
831
|
+
it('should disconnect successfully', async () => {
|
|
832
|
+
await bot.connect()
|
|
833
|
+
await bot.disconnect()
|
|
834
|
+
expect(bot.$connected).toBe(false)
|
|
835
|
+
})
|
|
836
|
+
})
|
|
837
|
+
|
|
838
|
+
describe('Custom Tests', () => {
|
|
839
|
+
// 在这里添加你的自定义测试
|
|
840
|
+
it('should pass custom test', () => {
|
|
841
|
+
expect(true).toBe(true)
|
|
842
|
+
})
|
|
843
|
+
})
|
|
844
|
+
})
|
|
845
|
+
`;
|
|
846
|
+
await fs.writeFile(path.join(testsDir, 'index.test.ts'), testContent);
|
|
847
|
+
}
|
|
319
848
|
async function addPluginToApp(pluginName, isOfficial) {
|
|
320
849
|
try {
|
|
321
850
|
const rootPackageJsonPath = path.resolve(process.cwd(), 'package.json');
|
|
@@ -349,7 +878,8 @@ async function addPluginToApp(pluginName, isOfficial) {
|
|
|
349
878
|
}
|
|
350
879
|
}
|
|
351
880
|
catch (error) {
|
|
352
|
-
|
|
881
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
882
|
+
logger.warn(`⚠ 添加到 package.json 失败: ${errorMessage}`);
|
|
353
883
|
}
|
|
354
884
|
}
|
|
355
885
|
//# sourceMappingURL=new.js.map
|
package/lib/commands/new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAQ9C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,SAAS,CAAC;KACtB,QAAQ,CAAC,eAAe,EAAE,oBAAoB,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC;KACzC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC;KACzC,MAAM,CAAC,eAAe,EAAE,+BAA+B,EAAE,QAAQ,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,UAAkB,EAAE,OAAyB,EAAE,EAAE;IAC9D,IAAI,CAAC;QACH,IAAI,IAAI,GAAG,UAAU,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACtD;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,UAAU;oBACnB,OAAO,EAAE,WAAW;oBACpB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;4BAClB,OAAO,UAAU,CAAC;wBACpB,CAAC;wBACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;4BACpC,OAAO,sBAAsB,CAAC;wBAChC,CAAC;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC;iBACF;aACF,CAAC,CAAC;YACH,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;QAED,SAAS;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAE/D,YAAY;QACZ,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACrC;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,UAAU;oBACnB,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE;wBAC1C,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;wBAC1C,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE;qBAC5C;oBACD,OAAO,EAAE,QAAQ;iBAClB;aACF,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC;QAEhH,UAAU;QACV,MAAM,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEpD,yBAAyB;QACzB,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QACnC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,MAAM,CAAC,KAAK,CAAC,WAAW,YAAY,EAAE,CAAC,CAAC;QACxC,IAAI,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,KAAK,UAAU,mBAAmB,CAAC,SAAiB,EAAE,UAAkB,EAAE,OAAyB;IACjG,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACjI,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC;IAE5F,SAAS;IACT,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAElD,kBAAkB;IAClB,MAAM,WAAW,GAAG;QAClB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,WAAW,eAAe,KAAK;QAC5C,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE;YACP,GAAG,EAAE;gBACH,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,gBAAgB;aACzB;YACD,UAAU,EAAE;gBACV,MAAM,EAAE,iBAAiB;aAC1B;SACF;QACD,KAAK,EAAE;YACL,KAAK;YACL,KAAK;YACL,MAAM;YACN,QAAQ;YACR,WAAW;YACX,cAAc;SACf;QACD,OAAO,EAAE;YACP,KAAK,EAAE,sCAAsC;YAC7C,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,oBAAoB;YACpC,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE,QAAQ;YACtB,eAAe,EAAE,uBAAuB;YACxC,cAAc,EAAE,YAAY;SAC7B;QACD,QAAQ,EAAE;YACR,SAAS;YACT,QAAQ;YACR,UAAU;SACX;QACD,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE;YAChB,SAAS,EAAE,aAAa;YACxB,iBAAiB,EAAE,aAAa;SACjC;QACD,eAAe,EAAE;YACf,gBAAgB,EAAE,aAAa;YAC/B,aAAa,EAAE,QAAQ;YACvB,cAAc,EAAE,QAAQ;YACxB,kBAAkB,EAAE,QAAQ;YAC5B,YAAY,EAAE,QAAQ;YACtB,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,QAAQ;YACrB,iBAAiB,EAAC,aAAa;YAC/B,cAAc,EAAE,QAAQ;YACxB,UAAU,EAAE,QAAQ;YACpB,kBAAkB,EAAE,QAAQ;YAC5B,QAAQ,EAAE,QAAQ;YAClB,qBAAqB,EAAE,QAAQ;SAChC;KACF,CAAC;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAErF,4BAA4B;IAC5B,MAAM,QAAQ,GAAG;QACf,iBAAiB,EAAE;YACjB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;YAClB,kBAAkB,EAAE,SAAS;YAC7B,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,IAAI;YACvB,cAAc,EAAE,IAAI;YACpB,kCAAkC,EAAE,IAAI;YACxC,mBAAmB,EAAE,IAAI;YACzB,iBAAiB,EAAE,IAAI;YACvB,8BAA8B,EAAE,IAAI;YACpC,wBAAwB,EAAE,IAAI;YAC9B,uBAAuB,EAAE,IAAI;YAC7B,aAAa,EAAE,IAAI;YACnB,gBAAgB,EAAE,IAAI;YACtB,WAAW,EAAE,IAAI;YACjB,sBAAsB,EAAE,KAAK;YAC7B,OAAO,EAAE;gBACP,eAAe;aAChB;SACF;QACD,SAAS,EAAE,CAAC,UAAU,CAAC;QACvB,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC;KAC7C,CACA;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAGnF,mCAAmC;IACnC,MAAM,cAAc,GAAG;QACrB,iBAAiB,EAAE;YACjB,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,QAAQ;YAClB,kBAAkB,EAAE,SAAS;YAC7B,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAC,WAAW;YACjB,gBAAgB,EAAE,IAAI;YACtB,WAAW,EAAE,IAAI;YACjB,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,KAAK;SAChB;QACD,SAAS,EAAE;YACT,QAAQ;SACT;KACF,CACA;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAEnG,yBAAyB;IACzB,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;iBAsBN,eAAe;;;eAGjB,eAAe;CAC7B,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IAE1E,6BAA6B;IAC7B,MAAM,aAAa,GAAG;;SAEf,eAAe,sBAAsB,eAAe;;;UAGnD,UAAU;oBACA,UAAU;YAClB,eAAe;;cAEb,eAAe;;;WAGlB,eAAe;CACzB,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;IAE/E,YAAY;IACZ,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG;;0BAEI,eAAe;;;mBAGtB,eAAe;;;;;gDAKc,eAAe;;;;CAI9D,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,eAAe,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;IAEvG,eAAe;IACf,MAAM,aAAa,GAAG,KAAK,WAAW;;EAEtC,eAAe;;;;;WAKN,WAAW;;;;;;;;;;OAUf,UAAU;;;;;;;;;;;;;;;;;;;;;CAqBhB,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;IAErE,kBAAkB;IAClB,MAAM,gBAAgB,GAAG,KAAK,WAAW;;;;;;;CAO1C,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAE3E,gBAAgB;IAChB,MAAM,gBAAgB,GAAG;;;;;CAK1B,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAEzE,SAAS;IACT,MAAM,iBAAiB,CAAC,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAEzE,OAAO;IACP,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,CAAC,cAAc,EAAE;gBACvB,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,SAAiB,EACjB,UAAkB,EAClB,eAAuB,EACvB,OAAyB;IAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IAE5C,kBAAkB;IAClB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,MAAM,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,UAAkB,EAAE,eAAuB;IAC7F,MAAM,WAAW,GAAG;;;YAGV,eAAe;;;;;;oCAMS,UAAU;;;;;;;;;;;;;;;;kCAgBZ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuF3C,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,QAAgB,EAAE,UAAkB,EAAE,eAAuB;IAC9F,MAAM,WAAW,GAAG;;;YAGV,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4E1B,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,QAAgB,EAAE,UAAkB,EAAE,eAAuB;IAC9F,MAAM,WAAW,GAAG;;;;;cAKR,eAAe,YAAY,eAAe;;;YAG5C,eAAe;;;;;;;;;;sBAUL,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA6BpB,eAAe;;;;;;;;;;qBAUN,eAAe;;;;YAIxB,eAAe;;qBAEN,eAAe;;;;wBAIZ,eAAe,oBAAoB,UAAU;;;;;;;;;;;;;;;;;;mCAkBlC,UAAU;;;;;;;;;;;;;;;;;;;;;;;kCAuBX,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAwGxB,UAAU;;;;;;;;;;;;;;;mBAeX,eAAe;;;wDAGsB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCtE,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,UAAkB,EAAE,UAAoB;IACpE,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QAExE,wBAAwB;QACxB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC;QAEpF,mBAAmB;QACnB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YAC9B,WAAW,CAAC,YAAY,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,kBAAkB;QAClB,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC;QAEtD,OAAO;QACP,MAAM,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAEpE,MAAM,CAAC,OAAO,CAAC,QAAQ,WAAW,mBAAmB,CAAC,CAAC;QAEvD,SAAS;QACT,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,CAAC,cAAc,EAAE;gBACvB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;IACD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,CAAC,IAAI,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;IACxD,CAAC;AACL,CAAC"}
|