@be-link/smart-test 1.0.1-beta.13 → 1.0.1-beta.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/dist/bin/smart-test.js +25 -22
- package/dist/cli/commands/generate-mock.d.ts.map +1 -1
- package/dist/cli/templates/playwright.config.template.ts +1 -1
- package/dist/core/ai-assistant.d.ts.map +1 -1
- package/dist/core/prompts.d.ts.map +1 -1
- package/dist/index.esm.mjs +20 -20
- package/dist/index.js +20 -20
- package/dist/utils/file-writer.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/bin/smart-test.js
CHANGED
|
@@ -506,13 +506,14 @@ async function buildTestCaseGenerationPrompt(options) {
|
|
|
506
506
|
prompt += `
|
|
507
507
|
要求:
|
|
508
508
|
1. 使用 @playwright/test 框架
|
|
509
|
-
2.
|
|
510
|
-
3.
|
|
511
|
-
4.
|
|
512
|
-
5.
|
|
513
|
-
6.
|
|
514
|
-
7.
|
|
515
|
-
8.
|
|
509
|
+
2. TS使用单引号,不要使用双引号
|
|
510
|
+
3. 在 beforeEach 中引入已生成的 API mock
|
|
511
|
+
4. 生成完整可运行的测试代码
|
|
512
|
+
5. 包含适当的 Playwright 断言和等待
|
|
513
|
+
6. 只返回代码,不要包含额外的解释文本
|
|
514
|
+
7. 使用代码块格式返回
|
|
515
|
+
8. 不要导入除 @playwright/test 之外的其他测试库
|
|
516
|
+
9. 如果有AI 视觉检查预期:添加一个新的case,调用aiReviewScreenshot,详情参考现有测试代码风格
|
|
516
517
|
`;
|
|
517
518
|
// 自动拼接参考代码:优先使用配置文件,否则使用默认模板
|
|
518
519
|
const referenceCode = getDefaultTestCaseReferenceCode(options);
|
|
@@ -553,7 +554,7 @@ Mock 数据描述:${description}
|
|
|
553
554
|
5. **代码可读性**:route.fulfill 中只需要写 JSON.stringify(mockData),保持代码简洁清晰
|
|
554
555
|
6. 设置正确的响应头(使用 jsonHeaders 常量)
|
|
555
556
|
7. 数据应该符合常见的业务场景
|
|
556
|
-
8. **重要**:严格遵循提供的 TypeScript
|
|
557
|
+
8. **重要**:严格遵循提供的 TypeScript 类型定义,生成的数据必须完全符合类型结构, TS使用单引号,不要使用双引号
|
|
557
558
|
9. 字段类型、必填/可选字段、嵌套结构等必须与类型定义一致
|
|
558
559
|
10. 根据字段注释生成合理的测试数据值
|
|
559
560
|
11. 只返回代码,不要包含额外的解释文本
|
|
@@ -652,19 +653,17 @@ async function aiGenerateTestCase(options) {
|
|
|
652
653
|
// 自动加载配置文件
|
|
653
654
|
await ensureConfigLoaded();
|
|
654
655
|
const config = mergeConfig(options.aiConfig);
|
|
656
|
+
console.log('🤖 AI 正在生成代码...\n');
|
|
655
657
|
const result = await callAi({
|
|
656
658
|
taskType: 'codeModel',
|
|
657
659
|
config,
|
|
658
|
-
messages: [
|
|
659
|
-
{
|
|
660
|
-
role: 'user',
|
|
661
|
-
content: await buildTestCaseGenerationPrompt(options),
|
|
662
|
-
},
|
|
663
|
-
],
|
|
660
|
+
messages: [{ role: 'user', content: await buildTestCaseGenerationPrompt(options) }],
|
|
664
661
|
});
|
|
665
662
|
if (result.skipped) {
|
|
663
|
+
console.log(`🤖 AI 测试用例生成跳过: ${result.reason}\n`);
|
|
666
664
|
return { ok: false, skipped: true, reason: `AI 测试用例生成跳过: ${result.reason}` };
|
|
667
665
|
}
|
|
666
|
+
console.log('🤖 AI 测试用例生成成功\n');
|
|
668
667
|
return {
|
|
669
668
|
ok: true,
|
|
670
669
|
code: extractCodeFromResponse(result.content),
|
|
@@ -681,19 +680,18 @@ async function aiGenerateMock(options) {
|
|
|
681
680
|
// 自动加载配置文件
|
|
682
681
|
await ensureConfigLoaded();
|
|
683
682
|
const config = mergeConfig(options.aiConfig);
|
|
683
|
+
console.log('🤖 AI 正在生成代码...\n');
|
|
684
|
+
console.log(`🤖 AI 配置: ${JSON.stringify(config, null, 2)}\n`);
|
|
684
685
|
const result = await callAi({
|
|
685
686
|
taskType: 'codeModel',
|
|
686
687
|
config,
|
|
687
|
-
messages: [
|
|
688
|
-
{
|
|
689
|
-
role: 'user',
|
|
690
|
-
content: await buildMockGenerationPrompt(options),
|
|
691
|
-
},
|
|
692
|
-
],
|
|
688
|
+
messages: [{ role: 'user', content: await buildMockGenerationPrompt(options) }],
|
|
693
689
|
});
|
|
694
690
|
if (result.skipped) {
|
|
691
|
+
console.log(`🤖 AI Mock 数据生成跳过: ${result.reason}\n`);
|
|
695
692
|
return { ok: false, skipped: true, reason: `AI Mock 数据生成跳过: ${result.reason}` };
|
|
696
693
|
}
|
|
694
|
+
console.log(`🤖 AI Mock 数据生成成功\n`);
|
|
697
695
|
return {
|
|
698
696
|
ok: true,
|
|
699
697
|
code: extractCodeFromResponse(result.content),
|
|
@@ -709,6 +707,7 @@ function extractCodeFromResponse(content) {
|
|
|
709
707
|
* 格式化并写入文件
|
|
710
708
|
*/
|
|
711
709
|
async function writeFormattedFile(targetPath, content, options = {}) {
|
|
710
|
+
console.log(`文件写入中...\n: ${targetPath}`);
|
|
712
711
|
// 确保目录存在
|
|
713
712
|
await promises.mkdir(path.dirname(targetPath), { recursive: true });
|
|
714
713
|
let finalContent = content;
|
|
@@ -729,6 +728,7 @@ async function writeFormattedFile(targetPath, content, options = {}) {
|
|
|
729
728
|
}
|
|
730
729
|
}
|
|
731
730
|
await promises.writeFile(targetPath, finalContent, 'utf-8');
|
|
731
|
+
console.log(`文件写入成功: ${targetPath}\n`);
|
|
732
732
|
}
|
|
733
733
|
/**
|
|
734
734
|
* 生成文件头注释
|
|
@@ -810,11 +810,14 @@ async function generateTestCase(options) {
|
|
|
810
810
|
* 执行 Mock 数据生成
|
|
811
811
|
*/
|
|
812
812
|
async function executeGenerateMock(interactiveResult, apiKey, cwd) {
|
|
813
|
-
console.log('\n🚀 开始生成 Mock
|
|
813
|
+
console.log('\n🚀 开始生成 Mock 数据...\n');
|
|
814
814
|
const mockParams = interactiveResult.mock; // 交互式模式保证了这些字段存在
|
|
815
815
|
const typeDefinitions = mockParams.typeFile && mockParams.types
|
|
816
816
|
? await extractTypeDefinitions(path.resolve(cwd, mockParams.typeFile), mockParams.types)
|
|
817
817
|
: undefined;
|
|
818
|
+
if (typeDefinitions && typeDefinitions.length > 0) {
|
|
819
|
+
console.log(`🔍 已提取 ${typeDefinitions.length} 个类型定义`);
|
|
820
|
+
}
|
|
818
821
|
const mockResult = await generateMock({
|
|
819
822
|
apiPath: mockParams.apiPath,
|
|
820
823
|
description: mockParams.description,
|
|
@@ -838,7 +841,7 @@ async function executeGenerateMock(interactiveResult, apiKey, cwd) {
|
|
|
838
841
|
* 执行测试用例生成
|
|
839
842
|
*/
|
|
840
843
|
async function executeGenerateTestCase(interactiveResult, apiKey, cwd) {
|
|
841
|
-
console.log('\n🚀
|
|
844
|
+
console.log('\n🚀 开始生成测试用例...\n');
|
|
842
845
|
const testcaseParams = interactiveResult.testcase; // 交互式模式保证了这些字段存在
|
|
843
846
|
const testCaseResult = await generateTestCase({
|
|
844
847
|
pageUrl: testcaseParams.pageUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-mock.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-mock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAI3D;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"generate-mock.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-mock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAI3D;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-assistant.d.ts","sourceRoot":"","sources":["../../src/core/ai-assistant.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAG5B,MAAM,SAAS,CAAC;AAmGjB;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAqC7G;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"ai-assistant.d.ts","sourceRoot":"","sources":["../../src/core/ai-assistant.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAG5B,MAAM,SAAS,CAAC;AAmGjB;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAqC7G;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAwB9G;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAyBtG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAgFpF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiB1D;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAgFpF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiB1D;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,MAAM,CAAC,CA6CzG;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuDjG"}
|
package/dist/index.esm.mjs
CHANGED
|
@@ -233,13 +233,14 @@ async function buildTestCaseGenerationPrompt(options) {
|
|
|
233
233
|
prompt += `
|
|
234
234
|
要求:
|
|
235
235
|
1. 使用 @playwright/test 框架
|
|
236
|
-
2.
|
|
237
|
-
3.
|
|
238
|
-
4.
|
|
239
|
-
5.
|
|
240
|
-
6.
|
|
241
|
-
7.
|
|
242
|
-
8.
|
|
236
|
+
2. TS使用单引号,不要使用双引号
|
|
237
|
+
3. 在 beforeEach 中引入已生成的 API mock
|
|
238
|
+
4. 生成完整可运行的测试代码
|
|
239
|
+
5. 包含适当的 Playwright 断言和等待
|
|
240
|
+
6. 只返回代码,不要包含额外的解释文本
|
|
241
|
+
7. 使用代码块格式返回
|
|
242
|
+
8. 不要导入除 @playwright/test 之外的其他测试库
|
|
243
|
+
9. 如果有AI 视觉检查预期:添加一个新的case,调用aiReviewScreenshot,详情参考现有测试代码风格
|
|
243
244
|
`;
|
|
244
245
|
// 自动拼接参考代码:优先使用配置文件,否则使用默认模板
|
|
245
246
|
const referenceCode = getDefaultTestCaseReferenceCode(options);
|
|
@@ -280,7 +281,7 @@ Mock 数据描述:${description}
|
|
|
280
281
|
5. **代码可读性**:route.fulfill 中只需要写 JSON.stringify(mockData),保持代码简洁清晰
|
|
281
282
|
6. 设置正确的响应头(使用 jsonHeaders 常量)
|
|
282
283
|
7. 数据应该符合常见的业务场景
|
|
283
|
-
8. **重要**:严格遵循提供的 TypeScript
|
|
284
|
+
8. **重要**:严格遵循提供的 TypeScript 类型定义,生成的数据必须完全符合类型结构, TS使用单引号,不要使用双引号
|
|
284
285
|
9. 字段类型、必填/可选字段、嵌套结构等必须与类型定义一致
|
|
285
286
|
10. 根据字段注释生成合理的测试数据值
|
|
286
287
|
11. 只返回代码,不要包含额外的解释文本
|
|
@@ -456,19 +457,17 @@ async function aiGenerateTestCase(options) {
|
|
|
456
457
|
// 自动加载配置文件
|
|
457
458
|
await ensureConfigLoaded();
|
|
458
459
|
const config = mergeConfig(options.aiConfig);
|
|
460
|
+
console.log('🤖 AI 正在生成代码...\n');
|
|
459
461
|
const result = await callAi({
|
|
460
462
|
taskType: 'codeModel',
|
|
461
463
|
config,
|
|
462
|
-
messages: [
|
|
463
|
-
{
|
|
464
|
-
role: 'user',
|
|
465
|
-
content: await buildTestCaseGenerationPrompt(options),
|
|
466
|
-
},
|
|
467
|
-
],
|
|
464
|
+
messages: [{ role: 'user', content: await buildTestCaseGenerationPrompt(options) }],
|
|
468
465
|
});
|
|
469
466
|
if (result.skipped) {
|
|
467
|
+
console.log(`🤖 AI 测试用例生成跳过: ${result.reason}\n`);
|
|
470
468
|
return { ok: false, skipped: true, reason: `AI 测试用例生成跳过: ${result.reason}` };
|
|
471
469
|
}
|
|
470
|
+
console.log('🤖 AI 测试用例生成成功\n');
|
|
472
471
|
return {
|
|
473
472
|
ok: true,
|
|
474
473
|
code: extractCodeFromResponse(result.content),
|
|
@@ -485,19 +484,18 @@ async function aiGenerateMock(options) {
|
|
|
485
484
|
// 自动加载配置文件
|
|
486
485
|
await ensureConfigLoaded();
|
|
487
486
|
const config = mergeConfig(options.aiConfig);
|
|
487
|
+
console.log('🤖 AI 正在生成代码...\n');
|
|
488
|
+
console.log(`🤖 AI 配置: ${JSON.stringify(config, null, 2)}\n`);
|
|
488
489
|
const result = await callAi({
|
|
489
490
|
taskType: 'codeModel',
|
|
490
491
|
config,
|
|
491
|
-
messages: [
|
|
492
|
-
{
|
|
493
|
-
role: 'user',
|
|
494
|
-
content: await buildMockGenerationPrompt(options),
|
|
495
|
-
},
|
|
496
|
-
],
|
|
492
|
+
messages: [{ role: 'user', content: await buildMockGenerationPrompt(options) }],
|
|
497
493
|
});
|
|
498
494
|
if (result.skipped) {
|
|
495
|
+
console.log(`🤖 AI Mock 数据生成跳过: ${result.reason}\n`);
|
|
499
496
|
return { ok: false, skipped: true, reason: `AI Mock 数据生成跳过: ${result.reason}` };
|
|
500
497
|
}
|
|
498
|
+
console.log(`🤖 AI Mock 数据生成成功\n`);
|
|
501
499
|
return {
|
|
502
500
|
ok: true,
|
|
503
501
|
code: extractCodeFromResponse(result.content),
|
|
@@ -530,6 +528,7 @@ function extractCodeFromResponse(content) {
|
|
|
530
528
|
* 格式化并写入文件
|
|
531
529
|
*/
|
|
532
530
|
async function writeFormattedFile(targetPath, content, options = {}) {
|
|
531
|
+
console.log(`文件写入中...\n: ${targetPath}`);
|
|
533
532
|
// 确保目录存在
|
|
534
533
|
await mkdir(path.dirname(targetPath), { recursive: true });
|
|
535
534
|
let finalContent = content;
|
|
@@ -550,6 +549,7 @@ async function writeFormattedFile(targetPath, content, options = {}) {
|
|
|
550
549
|
}
|
|
551
550
|
}
|
|
552
551
|
await writeFile(targetPath, finalContent, 'utf-8');
|
|
552
|
+
console.log(`文件写入成功: ${targetPath}\n`);
|
|
553
553
|
}
|
|
554
554
|
/**
|
|
555
555
|
* 生成文件头注释
|
package/dist/index.js
CHANGED
|
@@ -254,13 +254,14 @@ async function buildTestCaseGenerationPrompt(options) {
|
|
|
254
254
|
prompt += `
|
|
255
255
|
要求:
|
|
256
256
|
1. 使用 @playwright/test 框架
|
|
257
|
-
2.
|
|
258
|
-
3.
|
|
259
|
-
4.
|
|
260
|
-
5.
|
|
261
|
-
6.
|
|
262
|
-
7.
|
|
263
|
-
8.
|
|
257
|
+
2. TS使用单引号,不要使用双引号
|
|
258
|
+
3. 在 beforeEach 中引入已生成的 API mock
|
|
259
|
+
4. 生成完整可运行的测试代码
|
|
260
|
+
5. 包含适当的 Playwright 断言和等待
|
|
261
|
+
6. 只返回代码,不要包含额外的解释文本
|
|
262
|
+
7. 使用代码块格式返回
|
|
263
|
+
8. 不要导入除 @playwright/test 之外的其他测试库
|
|
264
|
+
9. 如果有AI 视觉检查预期:添加一个新的case,调用aiReviewScreenshot,详情参考现有测试代码风格
|
|
264
265
|
`;
|
|
265
266
|
// 自动拼接参考代码:优先使用配置文件,否则使用默认模板
|
|
266
267
|
const referenceCode = getDefaultTestCaseReferenceCode(options);
|
|
@@ -301,7 +302,7 @@ Mock 数据描述:${description}
|
|
|
301
302
|
5. **代码可读性**:route.fulfill 中只需要写 JSON.stringify(mockData),保持代码简洁清晰
|
|
302
303
|
6. 设置正确的响应头(使用 jsonHeaders 常量)
|
|
303
304
|
7. 数据应该符合常见的业务场景
|
|
304
|
-
8. **重要**:严格遵循提供的 TypeScript
|
|
305
|
+
8. **重要**:严格遵循提供的 TypeScript 类型定义,生成的数据必须完全符合类型结构, TS使用单引号,不要使用双引号
|
|
305
306
|
9. 字段类型、必填/可选字段、嵌套结构等必须与类型定义一致
|
|
306
307
|
10. 根据字段注释生成合理的测试数据值
|
|
307
308
|
11. 只返回代码,不要包含额外的解释文本
|
|
@@ -477,19 +478,17 @@ async function aiGenerateTestCase(options) {
|
|
|
477
478
|
// 自动加载配置文件
|
|
478
479
|
await ensureConfigLoaded();
|
|
479
480
|
const config = mergeConfig(options.aiConfig);
|
|
481
|
+
console.log('🤖 AI 正在生成代码...\n');
|
|
480
482
|
const result = await callAi({
|
|
481
483
|
taskType: 'codeModel',
|
|
482
484
|
config,
|
|
483
|
-
messages: [
|
|
484
|
-
{
|
|
485
|
-
role: 'user',
|
|
486
|
-
content: await buildTestCaseGenerationPrompt(options),
|
|
487
|
-
},
|
|
488
|
-
],
|
|
485
|
+
messages: [{ role: 'user', content: await buildTestCaseGenerationPrompt(options) }],
|
|
489
486
|
});
|
|
490
487
|
if (result.skipped) {
|
|
488
|
+
console.log(`🤖 AI 测试用例生成跳过: ${result.reason}\n`);
|
|
491
489
|
return { ok: false, skipped: true, reason: `AI 测试用例生成跳过: ${result.reason}` };
|
|
492
490
|
}
|
|
491
|
+
console.log('🤖 AI 测试用例生成成功\n');
|
|
493
492
|
return {
|
|
494
493
|
ok: true,
|
|
495
494
|
code: extractCodeFromResponse(result.content),
|
|
@@ -506,19 +505,18 @@ async function aiGenerateMock(options) {
|
|
|
506
505
|
// 自动加载配置文件
|
|
507
506
|
await ensureConfigLoaded();
|
|
508
507
|
const config = mergeConfig(options.aiConfig);
|
|
508
|
+
console.log('🤖 AI 正在生成代码...\n');
|
|
509
|
+
console.log(`🤖 AI 配置: ${JSON.stringify(config, null, 2)}\n`);
|
|
509
510
|
const result = await callAi({
|
|
510
511
|
taskType: 'codeModel',
|
|
511
512
|
config,
|
|
512
|
-
messages: [
|
|
513
|
-
{
|
|
514
|
-
role: 'user',
|
|
515
|
-
content: await buildMockGenerationPrompt(options),
|
|
516
|
-
},
|
|
517
|
-
],
|
|
513
|
+
messages: [{ role: 'user', content: await buildMockGenerationPrompt(options) }],
|
|
518
514
|
});
|
|
519
515
|
if (result.skipped) {
|
|
516
|
+
console.log(`🤖 AI Mock 数据生成跳过: ${result.reason}\n`);
|
|
520
517
|
return { ok: false, skipped: true, reason: `AI Mock 数据生成跳过: ${result.reason}` };
|
|
521
518
|
}
|
|
519
|
+
console.log(`🤖 AI Mock 数据生成成功\n`);
|
|
522
520
|
return {
|
|
523
521
|
ok: true,
|
|
524
522
|
code: extractCodeFromResponse(result.content),
|
|
@@ -551,6 +549,7 @@ function extractCodeFromResponse(content) {
|
|
|
551
549
|
* 格式化并写入文件
|
|
552
550
|
*/
|
|
553
551
|
async function writeFormattedFile(targetPath, content, options = {}) {
|
|
552
|
+
console.log(`文件写入中...\n: ${targetPath}`);
|
|
554
553
|
// 确保目录存在
|
|
555
554
|
await promises.mkdir(path.dirname(targetPath), { recursive: true });
|
|
556
555
|
let finalContent = content;
|
|
@@ -571,6 +570,7 @@ async function writeFormattedFile(targetPath, content, options = {}) {
|
|
|
571
570
|
}
|
|
572
571
|
}
|
|
573
572
|
await promises.writeFile(targetPath, finalContent, 'utf-8');
|
|
573
|
+
console.log(`文件写入成功: ${targetPath}\n`);
|
|
574
574
|
}
|
|
575
575
|
/**
|
|
576
576
|
* 生成文件头注释
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-writer.d.ts","sourceRoot":"","sources":["../../src/utils/file-writer.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"file-writer.d.ts","sourceRoot":"","sources":["../../src/utils/file-writer.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
package/package.json
CHANGED