openyida 2026.4.14-beta.1 → 2026.4.14
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/bin/yida.js +49 -46
- package/lib/app/app-list.js +3 -2
- package/lib/app/create-app.js +25 -31
- package/lib/app/create-form.js +131 -167
- package/lib/app/create-page.js +17 -22
- package/lib/app/export-app.js +26 -28
- package/lib/app/get-schema.js +23 -34
- package/lib/app/import-app.js +42 -52
- package/lib/app/publish.js +60 -77
- package/lib/app/update-app.js +20 -25
- package/lib/app/update-form-config.js +38 -44
- package/lib/auth/auth.js +29 -27
- package/lib/auth/login.js +33 -31
- package/lib/auth/org.js +36 -36
- package/lib/auth/qr-login.js +38 -37
- package/lib/cdn/cdn-config.js +2 -1
- package/lib/cdn/cdn-refresh.js +14 -13
- package/lib/cdn/cdn-upload.js +12 -11
- package/lib/connector/connector-add-action.js +4 -3
- package/lib/connector/connector-create-connection.js +3 -2
- package/lib/connector/connector-create.js +9 -8
- package/lib/connector/connector-delete-action.js +3 -2
- package/lib/connector/connector-delete.js +2 -1
- package/lib/connector/connector-detail.js +2 -1
- package/lib/connector/connector-gen-template.js +2 -1
- package/lib/connector/connector-list-actions.js +2 -1
- package/lib/connector/connector-list-connections.js +2 -1
- package/lib/connector/connector-parse-api.js +3 -2
- package/lib/connector/connector-test.js +5 -4
- package/lib/conversation/collector.js +9 -8
- package/lib/conversation/export-conversation.js +17 -20
- package/lib/core/chalk.js +344 -0
- package/lib/core/check-data.js +9 -7
- package/lib/core/check-update.js +2 -1
- package/lib/core/copy.js +22 -25
- package/lib/core/doctor.js +20 -15
- package/lib/core/env-cmd.js +19 -18
- package/lib/core/env.js +34 -36
- package/lib/core/query-data.js +3 -1
- package/lib/core/sample.js +13 -18
- package/lib/core/task-center.js +4 -3
- package/lib/core/update.js +2 -1
- package/lib/core/utils.js +9 -8
- package/lib/db/db-seq-fix.js +11 -10
- package/lib/dws/dws-wrapper.js +6 -5
- package/lib/flash-note/flash-to-prd.js +45 -44
- package/lib/integration/integration-create.js +71 -70
- package/lib/page-config/get-page-config.js +17 -21
- package/lib/page-config/save-share-config.js +30 -35
- package/lib/page-config/verify-short-url.js +29 -34
- package/lib/permission/get-permission.js +20 -19
- package/lib/permission/save-permission.js +50 -49
- package/lib/process/configure-process.js +46 -45
- package/lib/process/create-process.js +48 -47
- package/lib/process/preview-process.js +12 -11
- package/lib/report/append.js +42 -41
- package/lib/report/chart-builder.js +9 -8
- package/lib/report/create-report.js +2 -1
- package/lib/report/index.js +45 -43
- package/package.json +1 -1
- package/yida-skills/SKILL.md +1 -1
package/bin/yida.js
CHANGED
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
const { checkUpdate } = require('../lib/core/check-update');
|
|
61
61
|
const { version: currentVersion } = require('../package.json');
|
|
62
62
|
const { t } = require('../lib/core/i18n');
|
|
63
|
+
const { warn, fail } = require('../lib/core/chalk');
|
|
63
64
|
|
|
64
65
|
// 异步检查更新,fire-and-forget,不阻塞主流程
|
|
65
66
|
const updateCheckPromise = checkUpdate(currentVersion);
|
|
@@ -95,6 +96,7 @@ function printHelp() {
|
|
|
95
96
|
console.log('');
|
|
96
97
|
console.log(` ${BOLD}${CYAN}OpenYida${RESET} ${DIM}v${currentVersion}${RESET}`);
|
|
97
98
|
console.log(` ${DIM}${t('help.subtitle')}${RESET}`);
|
|
99
|
+
console.log(` ${DIM}"We are on the verge of the Singularity"${RESET}`);
|
|
98
100
|
console.log('');
|
|
99
101
|
console.log(` ${YELLOW}${t('help.usage')}${RESET} openyida <command> [args...]`);
|
|
100
102
|
console.log(` ${DIM}${t('help.alias')}${RESET} yida`);
|
|
@@ -186,8 +188,9 @@ function printHelp() {
|
|
|
186
188
|
console.log(` ${DIM}${RESET} openyida login`);
|
|
187
189
|
console.log(` ${DIM}${RESET} openyida create-app "${t('help.quickstart_app_name')}"`);
|
|
188
190
|
console.log(` ${DIM}${RESET} openyida create-form create APP_XXX "${t('help.quickstart_form_name')}" fields.json`);
|
|
191
|
+
console.log(` ${DIM}${RESET} openyida dws contact user search --keyword "张三"`);
|
|
189
192
|
console.log('');
|
|
190
|
-
console.log(` ${DIM}${t('help.docs')} https://github.com/openyida/openyida${RESET}`);
|
|
193
|
+
console.log(` ${DIM}${t('help.docs')} https://openyida.ai · https://github.com/openyida/openyida${RESET}`);
|
|
191
194
|
console.log('');
|
|
192
195
|
}
|
|
193
196
|
|
|
@@ -323,8 +326,8 @@ async function main() {
|
|
|
323
326
|
} else if (subCommand === 'logout') {
|
|
324
327
|
authLogout();
|
|
325
328
|
} else {
|
|
326
|
-
|
|
327
|
-
|
|
329
|
+
warn(t('cli.auth_usage'));
|
|
330
|
+
warn(t('cli.auth_example'));
|
|
328
331
|
process.exit(1);
|
|
329
332
|
}
|
|
330
333
|
break;
|
|
@@ -338,14 +341,14 @@ async function main() {
|
|
|
338
341
|
if (subCommand === 'list') {
|
|
339
342
|
const cookieData = loadCookieData();
|
|
340
343
|
if (!cookieData || !cookieData.cookies) {
|
|
341
|
-
|
|
344
|
+
warn(t('org.no_login'));
|
|
342
345
|
process.exit(1);
|
|
343
346
|
}
|
|
344
347
|
await listOrganizations(cookieData);
|
|
345
348
|
} else if (subCommand === 'switch') {
|
|
346
349
|
const cookieData = loadCookieData();
|
|
347
350
|
if (!cookieData || !cookieData.cookies) {
|
|
348
|
-
|
|
351
|
+
warn(t('org.no_login'));
|
|
349
352
|
process.exit(1);
|
|
350
353
|
}
|
|
351
354
|
|
|
@@ -359,8 +362,8 @@ async function main() {
|
|
|
359
362
|
await interactiveSwitch(cookieData);
|
|
360
363
|
}
|
|
361
364
|
} else {
|
|
362
|
-
|
|
363
|
-
|
|
365
|
+
warn(t('cli.org_usage'));
|
|
366
|
+
warn(t('cli.org_example'));
|
|
364
367
|
process.exit(1);
|
|
365
368
|
}
|
|
366
369
|
break;
|
|
@@ -397,8 +400,8 @@ async function main() {
|
|
|
397
400
|
const skipLint = args.includes('--skip-lint');
|
|
398
401
|
const filteredArgs = args.filter(arg => arg !== '--skip-lint');
|
|
399
402
|
if (filteredArgs.length < 3) {
|
|
400
|
-
|
|
401
|
-
|
|
403
|
+
warn(t('cli.publish_usage'));
|
|
404
|
+
warn(t('cli.publish_example'));
|
|
402
405
|
process.exit(1);
|
|
403
406
|
}
|
|
404
407
|
const [sourceFile, appType, formUuid] = filteredArgs;
|
|
@@ -414,8 +417,8 @@ async function main() {
|
|
|
414
417
|
|
|
415
418
|
case 'verify-short-url': {
|
|
416
419
|
if (args.length < 3) {
|
|
417
|
-
|
|
418
|
-
|
|
420
|
+
warn(t('cli.verify_usage'));
|
|
421
|
+
warn(t('cli.verify_example'));
|
|
419
422
|
process.exit(1);
|
|
420
423
|
}
|
|
421
424
|
process.argv = [process.argv[0], process.argv[1], ...args];
|
|
@@ -425,8 +428,8 @@ async function main() {
|
|
|
425
428
|
|
|
426
429
|
case 'save-share-config': {
|
|
427
430
|
if (args.length < 4) {
|
|
428
|
-
|
|
429
|
-
|
|
431
|
+
warn(t('cli.share_usage'));
|
|
432
|
+
warn(t('cli.share_example'));
|
|
430
433
|
process.exit(1);
|
|
431
434
|
}
|
|
432
435
|
process.argv = [process.argv[0], process.argv[1], ...args];
|
|
@@ -436,8 +439,8 @@ async function main() {
|
|
|
436
439
|
|
|
437
440
|
case 'get-page-config': {
|
|
438
441
|
if (args.length < 2) {
|
|
439
|
-
|
|
440
|
-
|
|
442
|
+
warn(t('cli.page_config_usage'));
|
|
443
|
+
warn(t('cli.page_config_example'));
|
|
441
444
|
process.exit(1);
|
|
442
445
|
}
|
|
443
446
|
process.argv = [process.argv[0], process.argv[1], ...args];
|
|
@@ -447,8 +450,8 @@ async function main() {
|
|
|
447
450
|
|
|
448
451
|
case 'update-form-config': {
|
|
449
452
|
if (args.length < 4) {
|
|
450
|
-
|
|
451
|
-
|
|
453
|
+
warn(t('cli.form_config_usage'));
|
|
454
|
+
warn(t('cli.form_config_example'));
|
|
452
455
|
process.exit(1);
|
|
453
456
|
}
|
|
454
457
|
process.argv = [process.argv[0], process.argv[1], ...args];
|
|
@@ -458,8 +461,8 @@ async function main() {
|
|
|
458
461
|
|
|
459
462
|
case 'update-app': {
|
|
460
463
|
if (args.length < 2) {
|
|
461
|
-
|
|
462
|
-
|
|
464
|
+
warn(t('cli.update_app_usage'));
|
|
465
|
+
warn(t('cli.update_app_example'));
|
|
463
466
|
process.exit(1);
|
|
464
467
|
}
|
|
465
468
|
const { run: runUpdateApp } = require('../lib/app/update-app');
|
|
@@ -469,8 +472,8 @@ async function main() {
|
|
|
469
472
|
|
|
470
473
|
case 'data': {
|
|
471
474
|
if (args.length < 2) {
|
|
472
|
-
|
|
473
|
-
|
|
475
|
+
warn('用法: openyida data <action> <resource> [args] [options]');
|
|
476
|
+
warn('示例: openyida data query form APP_XXX FORM_XXX --page 1 --size 20');
|
|
474
477
|
process.exit(1);
|
|
475
478
|
}
|
|
476
479
|
const { run: runDataManagement } = require('../lib/core/query-data');
|
|
@@ -486,9 +489,9 @@ async function main() {
|
|
|
486
489
|
|
|
487
490
|
case 'export': {
|
|
488
491
|
if (args.length < 1) {
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
+
warn(t('cli.export_usage'));
|
|
493
|
+
warn(t('cli.export_example1'));
|
|
494
|
+
warn(t('cli.export_example2'));
|
|
492
495
|
process.exit(1);
|
|
493
496
|
}
|
|
494
497
|
const { run: runExport } = require('../lib/app/export-app');
|
|
@@ -498,9 +501,9 @@ async function main() {
|
|
|
498
501
|
|
|
499
502
|
case 'import': {
|
|
500
503
|
if (args.length < 1) {
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
+
warn(t('cli.import_usage'));
|
|
505
|
+
warn(t('cli.import_example1'));
|
|
506
|
+
warn(t('cli.import_example2'));
|
|
504
507
|
process.exit(1);
|
|
505
508
|
}
|
|
506
509
|
const { run: runImport } = require('../lib/app/import-app');
|
|
@@ -510,8 +513,8 @@ async function main() {
|
|
|
510
513
|
|
|
511
514
|
case 'get-permission': {
|
|
512
515
|
if (args.length < 2) {
|
|
513
|
-
|
|
514
|
-
|
|
516
|
+
warn(t('cli.get_permission_usage'));
|
|
517
|
+
warn(t('cli.get_permission_example'));
|
|
515
518
|
process.exit(1);
|
|
516
519
|
}
|
|
517
520
|
const { run: runGetPermission } = require('../lib/permission/get-permission');
|
|
@@ -521,8 +524,8 @@ async function main() {
|
|
|
521
524
|
|
|
522
525
|
case 'save-permission': {
|
|
523
526
|
if (args.length < 2) {
|
|
524
|
-
|
|
525
|
-
|
|
527
|
+
warn(t('cli.save_permission_usage'));
|
|
528
|
+
warn(t('cli.save_permission_example'));
|
|
526
529
|
process.exit(1);
|
|
527
530
|
}
|
|
528
531
|
const { run: runSavePermission } = require('../lib/permission/save-permission');
|
|
@@ -532,8 +535,8 @@ async function main() {
|
|
|
532
535
|
|
|
533
536
|
case 'configure-process': {
|
|
534
537
|
if (args.length < 3) {
|
|
535
|
-
|
|
536
|
-
|
|
538
|
+
warn(t('cli.configure_process_usage'));
|
|
539
|
+
warn(t('cli.configure_process_example'));
|
|
537
540
|
process.exit(1);
|
|
538
541
|
}
|
|
539
542
|
const { run: runConfigureProcess } = require('../lib/process/configure-process');
|
|
@@ -543,8 +546,8 @@ async function main() {
|
|
|
543
546
|
|
|
544
547
|
case 'create-process': {
|
|
545
548
|
if (args.length < 2) {
|
|
546
|
-
|
|
547
|
-
|
|
549
|
+
warn(t('cli.create_process_usage'));
|
|
550
|
+
warn(t('cli.create_process_example'));
|
|
548
551
|
process.exit(1);
|
|
549
552
|
}
|
|
550
553
|
const { run: runCreateProcess } = require('../lib/process/create-process');
|
|
@@ -558,14 +561,14 @@ async function main() {
|
|
|
558
561
|
|
|
559
562
|
if (subCommand === 'preview') {
|
|
560
563
|
if (subArgs.length < 2) {
|
|
561
|
-
|
|
562
|
-
|
|
564
|
+
warn(t('cli.process_preview_usage'));
|
|
565
|
+
warn(t('cli.process_preview_example'));
|
|
563
566
|
process.exit(1);
|
|
564
567
|
}
|
|
565
568
|
const { run: runPreviewProcess } = require('../lib/process/preview-process');
|
|
566
569
|
await runPreviewProcess(subArgs);
|
|
567
570
|
} else {
|
|
568
|
-
|
|
571
|
+
warn(t('cli.process_usage'));
|
|
569
572
|
process.exit(1);
|
|
570
573
|
}
|
|
571
574
|
break;
|
|
@@ -647,8 +650,8 @@ async function main() {
|
|
|
647
650
|
|
|
648
651
|
const modulePath = connectorSubCommands[subCommand];
|
|
649
652
|
if (!modulePath) {
|
|
650
|
-
|
|
651
|
-
|
|
653
|
+
warn(`未知的 connector 子命令: ${subCommand}`);
|
|
654
|
+
warn('使用 openyida connector --help 查看可用子命令');
|
|
652
655
|
process.exit(1);
|
|
653
656
|
}
|
|
654
657
|
|
|
@@ -668,7 +671,7 @@ async function main() {
|
|
|
668
671
|
const subArgs = args.slice(1); // 路由层消费 subCommand,传递剩余参数
|
|
669
672
|
|
|
670
673
|
if (!subCommand || subCommand === '--help' || subCommand === '-h') {
|
|
671
|
-
|
|
674
|
+
warn(t('cli.integration_help'));
|
|
672
675
|
break;
|
|
673
676
|
}
|
|
674
677
|
|
|
@@ -676,8 +679,8 @@ async function main() {
|
|
|
676
679
|
const { run: runIntegration } = require('../lib/integration/integration-create');
|
|
677
680
|
await runIntegration(subArgs);
|
|
678
681
|
} else {
|
|
679
|
-
|
|
680
|
-
|
|
682
|
+
warn(t('cli.integration_unknown', subCommand));
|
|
683
|
+
warn(t('cli.integration_help_hint'));
|
|
681
684
|
process.exit(1);
|
|
682
685
|
}
|
|
683
686
|
break;
|
|
@@ -720,8 +723,8 @@ async function main() {
|
|
|
720
723
|
}
|
|
721
724
|
|
|
722
725
|
default: {
|
|
723
|
-
|
|
724
|
-
|
|
726
|
+
warn(t('cli.unknown_command', command));
|
|
727
|
+
warn(t('cli.run_help'));
|
|
725
728
|
process.exit(1);
|
|
726
729
|
}
|
|
727
730
|
}
|
|
@@ -730,6 +733,6 @@ async function main() {
|
|
|
730
733
|
main()
|
|
731
734
|
.then(() => updateCheckPromise)
|
|
732
735
|
.catch((err) => {
|
|
733
|
-
|
|
736
|
+
warn(t('cli.exec_failed', err.message));
|
|
734
737
|
process.exit(1);
|
|
735
738
|
});
|
package/lib/app/app-list.js
CHANGED
|
@@ -124,9 +124,10 @@ async function run(args) {
|
|
|
124
124
|
console.log(JSON.stringify(formattedApps, null, 2));
|
|
125
125
|
|
|
126
126
|
// stderr 输出人类可读摘要
|
|
127
|
-
|
|
127
|
+
const { c, success: chalkSuccess, listItem } = require('../core/chalk');
|
|
128
|
+
chalkSuccess(`共找到 ${c.cyan}${formattedApps.length}${c.reset} 个应用`);
|
|
128
129
|
for (const app of formattedApps) {
|
|
129
|
-
|
|
130
|
+
listItem(`${c.bold}${app.appName}${c.reset} ${c.dim}[${app.appType}]${c.reset} ${c.cyan}${app.systemLink}${c.reset}`);
|
|
130
131
|
}
|
|
131
132
|
}
|
|
132
133
|
|
package/lib/app/create-app.js
CHANGED
|
@@ -38,7 +38,8 @@ function findPrdFile() {
|
|
|
38
38
|
|
|
39
39
|
function updatePrdCorpId(prdFilePath, corpId, appType, baseUrl) {
|
|
40
40
|
if (!prdFilePath || !fs.existsSync(prdFilePath)) {
|
|
41
|
-
|
|
41
|
+
const { warn: chalkWarn } = require('../core/chalk');
|
|
42
|
+
chalkWarn(t('create_app.prd_not_found'));
|
|
42
43
|
return false;
|
|
43
44
|
}
|
|
44
45
|
|
|
@@ -68,10 +69,12 @@ function updatePrdCorpId(prdFilePath, corpId, appType, baseUrl) {
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
fs.writeFileSync(prdFilePath, content, 'utf-8');
|
|
71
|
-
|
|
72
|
+
const { success: prdSuccess } = require('../core/chalk');
|
|
73
|
+
prdSuccess(t('create_app.prd_updated', path.basename(prdFilePath)));
|
|
72
74
|
return true;
|
|
73
75
|
} catch (err) {
|
|
74
|
-
|
|
76
|
+
const { warn: prdWarn } = require('../core/chalk');
|
|
77
|
+
prdWarn(t('create_app.prd_update_failed', err.message));
|
|
75
78
|
return false;
|
|
76
79
|
}
|
|
77
80
|
}
|
|
@@ -80,13 +83,8 @@ function updatePrdCorpId(prdFilePath, corpId, appType, baseUrl) {
|
|
|
80
83
|
|
|
81
84
|
async function run(args) {
|
|
82
85
|
if (args.length < 1) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
console.error(t('create_app.available_icons'));
|
|
86
|
-
console.error(t('create_app.icons_list'));
|
|
87
|
-
console.error(t('create_app.available_colors'));
|
|
88
|
-
console.error(t('create_app.colors_list'));
|
|
89
|
-
process.exit(1);
|
|
86
|
+
const { error: chalkError } = require('../core/chalk');
|
|
87
|
+
chalkError(t('create_app.usage'), { hint: `${t('create_app.example')}\n ${t('create_app.available_icons')}\n ${t('create_app.icons_list')}\n ${t('create_app.available_colors')}\n ${t('create_app.colors_list')}` });
|
|
90
88
|
}
|
|
91
89
|
|
|
92
90
|
const appName = args[0];
|
|
@@ -97,20 +95,19 @@ async function run(args) {
|
|
|
97
95
|
const navTheme = args[5] || 'dark';
|
|
98
96
|
const layoutDirection = args[6] || 'slide';
|
|
99
97
|
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
console.error(t('create_app.app_theme', colour, navTheme, layoutDirection));
|
|
98
|
+
const { c, banner, step, label, info, success: chalkSuccess, fail: chalkFail, result: chalkResult, sep } = require('../core/chalk');
|
|
99
|
+
|
|
100
|
+
banner(t('create_app.title'));
|
|
101
|
+
label('Name', appName);
|
|
102
|
+
label('Desc', description);
|
|
103
|
+
label('Icon', `${icon} ${c.dim}(${iconColor})${c.reset}`);
|
|
104
|
+
label('Theme', `${colour} / ${navTheme} / ${layoutDirection}`);
|
|
108
105
|
|
|
109
106
|
// Step 1: 读取登录态
|
|
110
|
-
|
|
107
|
+
step(1, t('common.step_login', 1));
|
|
111
108
|
let cookieData = loadCookieData();
|
|
112
109
|
if (!cookieData) {
|
|
113
|
-
|
|
110
|
+
info(t('common.login_no_cache'));
|
|
114
111
|
cookieData = triggerLogin();
|
|
115
112
|
}
|
|
116
113
|
|
|
@@ -120,10 +117,10 @@ async function run(args) {
|
|
|
120
117
|
baseUrl: resolveBaseUrl(cookieData),
|
|
121
118
|
cookieData,
|
|
122
119
|
};
|
|
123
|
-
|
|
120
|
+
chalkSuccess(t('common.login_ready', authRef.baseUrl));
|
|
124
121
|
|
|
125
122
|
// Step 2: 创建应用
|
|
126
|
-
|
|
123
|
+
step(2, t('create_app.step_create'));
|
|
127
124
|
|
|
128
125
|
// 查询企业专属域名配置,动态决定 openExclusive / openPhysicColumn 参数
|
|
129
126
|
// 避免在开启了专属数据库策略的企业中硬编码 "n" 导致创建失败
|
|
@@ -166,18 +163,16 @@ async function run(args) {
|
|
|
166
163
|
}, authRef);
|
|
167
164
|
|
|
168
165
|
// 输出结果
|
|
169
|
-
const SEP2 = '='.repeat(50);
|
|
170
|
-
console.error('\n' + SEP2);
|
|
171
166
|
if (response && response.success && response.content) {
|
|
172
167
|
const appType = response.content;
|
|
173
168
|
const appUrl = `${authRef.baseUrl}/${appType}/admin`;
|
|
174
169
|
const corpId = authRef.cookieData.corp_id || '';
|
|
175
170
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
171
|
+
chalkResult(true, t('create_app.success'), [
|
|
172
|
+
['appType', appType],
|
|
173
|
+
['Corp ID', corpId || t('common.unknown_error')],
|
|
174
|
+
['URL', `${c.cyan}${appUrl}${c.reset}`],
|
|
175
|
+
]);
|
|
181
176
|
|
|
182
177
|
const prdFile = findPrdFile();
|
|
183
178
|
if (prdFile) {updatePrdCorpId(prdFile, corpId, appType, authRef.baseUrl);}
|
|
@@ -185,8 +180,7 @@ async function run(args) {
|
|
|
185
180
|
console.log(JSON.stringify({ success: true, appType, appName, corpId, url: appUrl }));
|
|
186
181
|
} else {
|
|
187
182
|
const errorMsg = response ? response.errorMsg || t('common.unknown_error') : t('common.request_failed');
|
|
188
|
-
|
|
189
|
-
console.error(SEP2);
|
|
183
|
+
chalkResult(false, t('create_app.failed', errorMsg));
|
|
190
184
|
console.log(JSON.stringify({ success: false, error: errorMsg }));
|
|
191
185
|
process.exit(1);
|
|
192
186
|
}
|