vona-cli-set-api 1.0.402 → 1.0.406

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 (96) hide show
  1. package/cli/templates/create/project/basic/boilerplate/env/.env +1 -1
  2. package/cli/templates/create/project/basic/boilerplate/env/.env.prod +1 -1
  3. package/cli/templates/create/project/basic/boilerplate/package.original.json +1 -1
  4. package/cli/templates/create/project/basic/boilerplate/src/backend/config/config/config.ts +1 -0
  5. package/cli/templates/tools/crud/snippets/2-meta.index.ts +10 -5
  6. package/cli/templates/tools/crud/snippets/2-meta.version.ts +11 -9
  7. package/cli/templates/tools/crud/snippets/3-en-us.ts +1 -1
  8. package/cli/templates/tools/crud/snippets/4-zh-cn.ts +1 -1
  9. package/cli/templates/tools/crud/utils.ts +15 -15
  10. package/dist/index.js +3314 -3
  11. package/dist/lib/bean/cli.bin.buildGeneral.d.ts +12 -0
  12. package/dist/lib/beans.d.ts +2 -0
  13. package/dist/lib/command/bin.buildGeneral.d.ts +19 -0
  14. package/dist/lib/commands.d.ts +18 -0
  15. package/dist/lib/utils.d.ts +0 -1
  16. package/dist/utils.d.ts +1 -0
  17. package/package.json +9 -9
  18. package/dist/lib/bean/cli.bin.build.js +0 -185
  19. package/dist/lib/bean/cli.bin.buildModule.js +0 -106
  20. package/dist/lib/bean/cli.bin.dbReset.js +0 -48
  21. package/dist/lib/bean/cli.bin.dev.js +0 -66
  22. package/dist/lib/bean/cli.bin.play.js +0 -92
  23. package/dist/lib/bean/cli.bin.test.js +0 -93
  24. package/dist/lib/bean/cli.bin.tsc.js +0 -48
  25. package/dist/lib/bean/cli.create.bean.js +0 -81
  26. package/dist/lib/bean/cli.create.module.js +0 -73
  27. package/dist/lib/bean/cli.create.project.js +0 -119
  28. package/dist/lib/bean/cli.create.suite.js +0 -35
  29. package/dist/lib/bean/cli.create.test.js +0 -39
  30. package/dist/lib/bean/cli.default.list.js +0 -93
  31. package/dist/lib/bean/cli.init.appMonkey.js +0 -24
  32. package/dist/lib/bean/cli.init.asset.js +0 -28
  33. package/dist/lib/bean/cli.init.config.js +0 -38
  34. package/dist/lib/bean/cli.init.constant.js +0 -38
  35. package/dist/lib/bean/cli.init.error.js +0 -49
  36. package/dist/lib/bean/cli.init.lib.js +0 -38
  37. package/dist/lib/bean/cli.init.locale.js +0 -38
  38. package/dist/lib/bean/cli.init.main.js +0 -38
  39. package/dist/lib/bean/cli.init.monkey.js +0 -64
  40. package/dist/lib/bean/cli.init.static.js +0 -38
  41. package/dist/lib/bean/cli.init.types.js +0 -38
  42. package/dist/lib/bean/cli.tools.crud.js +0 -46
  43. package/dist/lib/bean/cli.tools.deps.js +0 -42
  44. package/dist/lib/bean/cli.tools.metadata.js +0 -234
  45. package/dist/lib/bean/toolsBin/configUtils.js +0 -56
  46. package/dist/lib/bean/toolsBin/dbReset.js +0 -8
  47. package/dist/lib/bean/toolsBin/generateEntryFiles.js +0 -90
  48. package/dist/lib/bean/toolsBin/generateVonaMeta.js +0 -17
  49. package/dist/lib/bean/toolsBin/generateZod.js +0 -48
  50. package/dist/lib/bean/toolsBin/play.js +0 -59
  51. package/dist/lib/bean/toolsBin/test.js +0 -137
  52. package/dist/lib/bean/toolsBin/types.js +0 -1
  53. package/dist/lib/bean/toolsMetadata/generateBeanGenerals.js +0 -33
  54. package/dist/lib/bean/toolsMetadata/generateConfig.js +0 -62
  55. package/dist/lib/bean/toolsMetadata/generateMetadataCustom.js +0 -23
  56. package/dist/lib/bean/toolsMetadata/generateMonkey.js +0 -24
  57. package/dist/lib/bean/toolsMetadata/generateOnions.js +0 -112
  58. package/dist/lib/bean/toolsMetadata/generateScope.js +0 -83
  59. package/dist/lib/bean/toolsMetadata/generateScopeResources.js +0 -33
  60. package/dist/lib/bean/toolsMetadata/generateScopeResourcesMeta.js +0 -13
  61. package/dist/lib/bean/toolsMetadata/utils.js +0 -84
  62. package/dist/lib/beans.js +0 -56
  63. package/dist/lib/command/bin.build.js +0 -18
  64. package/dist/lib/command/bin.buildModule.js +0 -18
  65. package/dist/lib/command/bin.dbReset.js +0 -14
  66. package/dist/lib/command/bin.dev.js +0 -18
  67. package/dist/lib/command/bin.play.js +0 -27
  68. package/dist/lib/command/bin.test.js +0 -18
  69. package/dist/lib/command/bin.tsc.js +0 -14
  70. package/dist/lib/command/create.bean.js +0 -46
  71. package/dist/lib/command/create.module.js +0 -36
  72. package/dist/lib/command/create.project.js +0 -43
  73. package/dist/lib/command/create.suite.js +0 -23
  74. package/dist/lib/command/create.test.js +0 -33
  75. package/dist/lib/command/default.list.js +0 -18
  76. package/dist/lib/command/init.appMonkey.js +0 -10
  77. package/dist/lib/command/init.asset.js +0 -33
  78. package/dist/lib/command/init.config.js +0 -10
  79. package/dist/lib/command/init.constant.js +0 -10
  80. package/dist/lib/command/init.error.js +0 -10
  81. package/dist/lib/command/init.lib.js +0 -10
  82. package/dist/lib/command/init.locale.js +0 -10
  83. package/dist/lib/command/init.main.js +0 -10
  84. package/dist/lib/command/init.monkey.js +0 -10
  85. package/dist/lib/command/init.static.js +0 -10
  86. package/dist/lib/command/init.types.js +0 -10
  87. package/dist/lib/command/tools.crud.js +0 -33
  88. package/dist/lib/command/tools.deps.js +0 -9
  89. package/dist/lib/command/tools.metadata.js +0 -14
  90. package/dist/lib/commands.js +0 -67
  91. package/dist/lib/this.js +0 -1
  92. package/dist/lib/utils.js +0 -80
  93. package/dist/typings.js +0 -1
  94. /package/dist/lib/bean/{toolsBin → toolsIsolate}/dbReset.d.ts +0 -0
  95. /package/dist/lib/bean/{toolsBin → toolsIsolate}/play.d.ts +0 -0
  96. /package/dist/lib/bean/{toolsBin → toolsIsolate}/test.d.ts +0 -0
@@ -1,93 +0,0 @@
1
- import path from 'node:path';
2
- import { BeanCliBase } from '@cabloy/cli';
3
- import { catchError } from '@cabloy/utils';
4
- import fse from 'fs-extra';
5
- import { rimraf } from 'rimraf';
6
- import { getAbsolutePathOfModule, getImportEsm } from "../utils.js";
7
- import { generateVonaMeta } from "./toolsBin/generateVonaMeta.js";
8
- export class CliBinTest extends BeanCliBase {
9
- async execute() {
10
- const { argv } = this.context;
11
- // super
12
- await super.execute();
13
- const projectPath = argv.projectPath;
14
- // test
15
- await this._test(projectPath);
16
- }
17
- async _test(projectPath) {
18
- const { argv } = this.context;
19
- const mode = 'test';
20
- const flavor = argv.flavor || 'normal';
21
- const configMeta = { flavor, mode };
22
- const configOptions = {
23
- appDir: projectPath,
24
- runtimeDir: '.vona',
25
- workers: 1,
26
- };
27
- const { modulesMeta } = await generateVonaMeta(configMeta, configOptions);
28
- await this._run(projectPath, modulesMeta);
29
- if (argv.coverage && !argv.ci) {
30
- await this._outputCoverageReportViewer(projectPath);
31
- }
32
- await rimraf(path.join(projectPath, '.vona'));
33
- }
34
- async _run(projectPath, modulesMeta) {
35
- const { argv } = this.context;
36
- // globs
37
- const patterns = this._combineTestPatterns(projectPath, modulesMeta);
38
- // testFile
39
- let testFile = path.join(import.meta.dirname, './toolsBin/test.ts');
40
- if (!fse.existsSync(testFile)) {
41
- testFile = path.join(import.meta.dirname, './toolsBin/test.js');
42
- }
43
- // run
44
- let args = [];
45
- if (argv.coverage) {
46
- args.push('--experimental-test-coverage');
47
- }
48
- if (process.env.TEST_WHYISNODERUNNING === 'true') {
49
- args.push('--import=why-is-node-running/include');
50
- }
51
- args = args.concat([getImportEsm(), testFile, projectPath, (!!argv.coverage).toString(), patterns.join(',')]);
52
- // args = args.concat(['--experimental-transform-types', getImportEsm(), testFile, projectPath, (!!argv.coverage).toString(), patterns.join(',')]);
53
- // ignore error special in windows
54
- await catchError(() => {
55
- return this.helper.spawnExe({
56
- cmd: 'node',
57
- args,
58
- options: {
59
- cwd: projectPath,
60
- },
61
- });
62
- });
63
- }
64
- async _outputCoverageReportViewer(projectPath) {
65
- // lcovCliFile
66
- const lcovCliFile = getAbsolutePathOfModule('@lcov-viewer/cli/lib/index.js', '');
67
- // run
68
- const args = [lcovCliFile, 'lcov', '-o', './coverage/report', './coverage/lcov.info'];
69
- await catchError(() => {
70
- return this.helper.spawnExe({
71
- cmd: 'node',
72
- args,
73
- options: {
74
- cwd: projectPath,
75
- },
76
- });
77
- });
78
- }
79
- _combineTestPatterns(projectPath, modulesMeta) {
80
- const patterns = [];
81
- for (const moduleName in modulesMeta.modules) {
82
- const module = modulesMeta.modules[moduleName];
83
- if (module.info.node_modules)
84
- continue;
85
- const testDir = path.join(module.root, 'test');
86
- if (fse.existsSync(testDir)) {
87
- const relativePath = path.relative(projectPath, module.root).replaceAll('\\', '/');
88
- patterns.push(`${relativePath}/test/**/*.ts`);
89
- }
90
- }
91
- return patterns;
92
- }
93
- }
@@ -1,48 +0,0 @@
1
- import { BeanCliBase } from '@cabloy/cli';
2
- export class CliBinTsc extends BeanCliBase {
3
- async execute() {
4
- const { argv } = this.context;
5
- // super
6
- await super.execute();
7
- const projectPath = argv.projectPath;
8
- const force = argv.force;
9
- await this._tsc(projectPath, force);
10
- }
11
- async _tsc(projectPath, force) {
12
- const suiteNames = Object.keys(this.modulesMeta.suites).filter(suiteName => !this.modulesMeta.suites[suiteName].info.node_modules);
13
- const modulesArray = this.modulesMeta.modulesArray.filter(item => !item.suite && !item.info.node_modules);
14
- // count
15
- const count = 1 + suiteNames.length + modulesArray.length;
16
- // begin
17
- let counter = 0;
18
- const timeBegin = new Date();
19
- // eslint-disable-next-line
20
- console.log('===> build begin');
21
- // args
22
- const tscArgs = ['-b'];
23
- if (force) {
24
- tscArgs.push('--force');
25
- }
26
- // tsc: project
27
- // eslint-disable-next-line
28
- console.log(`===> ${++counter}/${count} project`);
29
- await this.helper.processHelper.tsc(tscArgs, { cwd: projectPath });
30
- // suites
31
- for (const key of suiteNames) {
32
- const suite = this.modulesMeta.suites[key];
33
- // eslint-disable-next-line
34
- console.log(`===> ${++counter}/${count} suite: ${suite.info.originalName}`);
35
- await this.helper.processHelper.tsc(tscArgs, { cwd: suite.root });
36
- }
37
- // modules
38
- for (const module of modulesArray) {
39
- // eslint-disable-next-line
40
- console.log(`===> ${++counter}/${count} module: ${module.info.originalName}`);
41
- await this.helper.processHelper.tsc(tscArgs, { cwd: module.root });
42
- }
43
- // end
44
- const timeEnd = new Date();
45
- // eslint-disable-next-line
46
- console.log(`===> build end: ${(timeEnd.valueOf() - timeBegin.valueOf()) / 1000}s`);
47
- }
48
- }
@@ -1,81 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { BeanCliBase } from '@cabloy/cli';
4
- import { getOnionMetasMeta, getOnionScenesMeta } from '@cabloy/module-info';
5
- import { toUpperCaseFirstChar } from '@cabloy/word-utils';
6
- import { __ThisSetName__ } from "../this.js";
7
- export class CliCreateBean extends BeanCliBase {
8
- async execute() {
9
- const { argv } = this.context;
10
- // super
11
- await super.execute();
12
- // module name/info
13
- const moduleName = argv.module;
14
- argv.moduleInfo = this.helper.parseModuleInfo(moduleName);
15
- // check if exists
16
- const _module = this.helper.findModule(moduleName);
17
- if (!_module) {
18
- throw new Error(`module does not exist: ${moduleName}`);
19
- }
20
- // target dir
21
- const targetDir = await this.helper.ensureDir(_module.root);
22
- // scene name
23
- const sceneName = argv.sceneName;
24
- argv.sceneNameCapitalize = this.helper.firstCharToUpperCase(sceneName);
25
- // scene meta
26
- // onionScenesMeta
27
- const onionScenesMeta = getOnionScenesMeta(this.modulesMeta.modules);
28
- const onionSceneMeta = onionScenesMeta[sceneName];
29
- // bean name
30
- const beanName = argv.beanName;
31
- argv.beanNameCapitalize = this.helper.firstCharToUpperCase(beanName);
32
- // moduleResourceName
33
- argv.moduleResourceName = this.helper.combineModuleNameAndResource(argv.moduleInfo.relativeName, argv.beanName);
34
- // directory
35
- const beanDir = path.join(targetDir, onionSceneMeta.sceneIsolate ? `src/${sceneName}` : 'src/bean');
36
- const beanFile = path.join(beanDir, onionSceneMeta.sceneIsolate ? `${beanName}.ts` : `${sceneName}.${beanName}.ts`);
37
- if (fs.existsSync(beanFile)) {
38
- throw new Error(`${sceneName} bean exists: ${beanName}`);
39
- }
40
- await this.helper.ensureDir(beanDir);
41
- // snippets/boilerplate
42
- const snippets = this._getBoilerplatesOrSnippets('snippets');
43
- const boilerplates = this._getBoilerplatesOrSnippets('boilerplate', argv.boilerplate);
44
- const snippetsName = snippets[`${sceneName}:${argv.beanName}`] || snippets[sceneName];
45
- const boilerplateName = boilerplates[`${sceneName}:${argv.beanName}`] || boilerplates[sceneName];
46
- // render
47
- await this.template.renderBoilerplateAndSnippets({
48
- targetDir: beanDir,
49
- setName: __ThisSetName__,
50
- snippetsPath: snippetsName,
51
- boilerplatePath: boilerplateName,
52
- });
53
- // tools.metadata
54
- if (!argv.nometadata) {
55
- await this.helper.invokeCli([':tools:metadata', moduleName], { cwd: argv.projectPath });
56
- }
57
- }
58
- _getBoilerplatesOrSnippets(type, custom) {
59
- const type2 = custom ? `${type}${toUpperCaseFirstChar(custom)}` : type;
60
- const result = {};
61
- // scenes
62
- const onionScenesMeta = getOnionScenesMeta(this.modulesMeta.modules);
63
- for (const sceneName in onionScenesMeta) {
64
- const onionSceneMeta = onionScenesMeta[sceneName];
65
- const scenePath = onionSceneMeta[type2];
66
- if (scenePath) {
67
- result[sceneName] = path.join(onionSceneMeta.module.root, scenePath);
68
- }
69
- }
70
- // metas
71
- const onionMetasMeta = getOnionMetasMeta(this.modulesMeta.modules);
72
- for (const sceneName in onionMetasMeta) {
73
- const onionMetaMeta = onionMetasMeta[sceneName];
74
- const scenePath = onionMetaMeta[type2];
75
- if (scenePath) {
76
- result[`meta:${sceneName}`] = path.join(onionMetaMeta.module.root, scenePath);
77
- }
78
- }
79
- return result;
80
- }
81
- }
@@ -1,73 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { BeanCliBase } from '@cabloy/cli';
4
- import { __ThisSetName__ } from "../this.js";
5
- export class CliCreateModule extends BeanCliBase {
6
- async execute() {
7
- const { argv } = this.context;
8
- // super
9
- await super.execute();
10
- // noformat
11
- argv.noformat = true;
12
- // suite name/info
13
- const suiteName = argv.suite;
14
- if (suiteName) {
15
- argv.suiteInfo = this.helper.parseSuiteInfo(suiteName);
16
- // check if exists
17
- argv._suite = this.helper.findSuite(suiteName);
18
- if (!argv._suite) {
19
- throw new Error(`suite does not exist: ${suiteName}`);
20
- }
21
- }
22
- // nameMeta
23
- const nameMeta = this.helper.parseNameMeta(argv.name);
24
- const moduleDir = nameMeta.directory || 'module';
25
- argv.name = nameMeta.short;
26
- // module name/info
27
- const moduleName = argv.name;
28
- argv.moduleInfo = this.helper.parseModuleInfo(moduleName);
29
- argv.relativeNameCapitalize = this.helper.stringToCapitalize(argv.moduleInfo.relativeName, '-');
30
- // check if exists
31
- const _module = this.helper.findModule(moduleName);
32
- if (!argv.force && _module) {
33
- throw new Error(`module exists: ${moduleName}`);
34
- }
35
- // target dir
36
- let targetDir;
37
- if (suiteName) {
38
- targetDir = path.join(argv._suite.root, 'modules', moduleName);
39
- }
40
- else {
41
- targetDir = path.join(argv.projectPath, `src/${moduleDir}`, moduleName);
42
- }
43
- if (!argv.force && fs.existsSync(targetDir)) {
44
- throw new Error(`module exists: ${moduleName}`);
45
- }
46
- // render module snippets for suite
47
- if (suiteName) {
48
- await this.template.renderBoilerplateAndSnippets({
49
- targetDir: argv._suite.root,
50
- setName: __ThisSetName__,
51
- snippetsPath: 'create/module/snippets',
52
- boilerplatePath: null,
53
- });
54
- await this.helper.removeGitkeep(path.join(argv._suite.root, 'modules'));
55
- }
56
- // render module boilerplate
57
- targetDir = await this.helper.ensureDir(targetDir);
58
- await this.template.renderBoilerplateAndSnippets({
59
- targetDir,
60
- setName: __ThisSetName__,
61
- snippetsPath: null,
62
- boilerplatePath: 'create/module/boilerplate',
63
- });
64
- // tools.deps
65
- if (!argv.vscode) {
66
- await this.helper.invokeCli([':tools:deps'], { cwd: argv.projectPath });
67
- }
68
- // pnpm install
69
- if (!argv.vscode && !argv.ci) {
70
- await this.helper.pnpmInstall();
71
- }
72
- }
73
- }
@@ -1,119 +0,0 @@
1
- import fs from 'node:fs';
2
- import { createRequire } from 'node:module';
3
- import os from 'node:os';
4
- import path from 'node:path';
5
- import { BeanCliBase } from '@cabloy/cli';
6
- import compressing from 'compressing';
7
- import fse from 'fs-extra';
8
- import randomize from 'randomatic';
9
- import { rimraf } from 'rimraf';
10
- import urllib from 'urllib';
11
- import * as uuid from 'uuid';
12
- import { __ThisSetName__ } from "../this.js";
13
- export class CliCreateProject extends BeanCliBase {
14
- httpClient;
15
- constructor(options) {
16
- super(options);
17
- this.httpClient = urllib;
18
- }
19
- async execute() {
20
- const { argv } = this.context;
21
- // super
22
- await super.execute();
23
- // noformat
24
- argv.noformat = true;
25
- // project name
26
- const projectName = argv.name;
27
- // target dir
28
- const targetDir = path.join(argv.projectPath, projectName);
29
- if (!argv.force && fs.existsSync(targetDir)) {
30
- throw new Error(`project exists: ${projectName}`);
31
- }
32
- fse.ensureDirSync(targetDir);
33
- // vars
34
- argv.SERVER_KEYS = `vona_${uuid.v4()}_${Date.now()}_${random(100, 10000)}`;
35
- argv.SERVER_KEYS_PROD = `vona_${uuid.v4()}_${Date.now()}_${random(100, 10000)}`;
36
- argv.DATABASE_CLIENT_MYSQL_USER = 'web_user';
37
- argv.DATABASE_CLIENT_MYSQL_PASSWORD = randomize('*', 16, { exclude: '\\\'"$' });
38
- argv.DATABASE_CLIENT_MYSQL_PASSWORD_ROOT = randomize('*', 16, { exclude: '\\\'"$' });
39
- argv.DATABASE_CLIENT_PG_USER = 'postgres';
40
- argv.DATABASE_CLIENT_PG_PASSWORD = randomize('*', 16, { exclude: '\\\'"$' });
41
- argv.DATABASE_CLIENT_PG_PASSWORD_ROOT = randomize('*', 16, { exclude: '\\\'"$' });
42
- // template
43
- const template = argv.template;
44
- // render project boilerplate
45
- await this.template.renderBoilerplateAndSnippets({
46
- targetDir,
47
- setName: __ThisSetName__,
48
- snippetsPath: null,
49
- boilerplatePath: `create/project/${template}/boilerplate`,
50
- });
51
- // create docker-compose/data/pg
52
- fse.ensureDirSync(path.join(targetDir, 'docker-compose/data/pg'));
53
- // copy package.json
54
- fse.copyFileSync(path.join(targetDir, 'package.original.json'), path.join(targetDir, 'package.json'));
55
- // npm run init
56
- await this.helper.spawnCmd({
57
- cmd: 'npm',
58
- args: ['run', 'init'],
59
- options: { cwd: targetDir },
60
- });
61
- // done
62
- await this.printUsage(targetDir);
63
- }
64
- async printUsage(targetDir) {
65
- await this.console.log(`usage:
66
- - cd ${targetDir}
67
- - pnpm install
68
- - npm run dev
69
- - npm run test
70
- - npm run build
71
- - npm run start
72
- `);
73
- }
74
- async downloadBoilerplate(packageName) {
75
- const result = await this.getPackageInfo(packageName, false);
76
- const tgzUrl = result.dist.tarball;
77
- await this.console.log(`downloading ${tgzUrl}`);
78
- const saveDir = path.join(os.tmpdir(), 'zova-project-boilerplate');
79
- await rimraf(saveDir);
80
- const response = await this.curl(tgzUrl, { streaming: true, followRedirect: true });
81
- await compressing.tgz.uncompress(response.res, saveDir);
82
- await this.console.log(`extract to ${saveDir}`);
83
- return path.join(saveDir, '/package');
84
- }
85
- async getPackageInfo(packageName, withFallback) {
86
- await this.console.log(`fetching npm info of ${packageName}`);
87
- try {
88
- const registry = await this.helper.getRegistry();
89
- const result = await this.curl(`${registry}${packageName}/latest`, {
90
- dataType: 'json',
91
- followRedirect: true,
92
- maxRedirects: 5,
93
- });
94
- if (result.status !== 200) {
95
- const message = `npm info ${packageName} got error: ${result.status}, ${result.data.reason}`;
96
- throw new Error(message);
97
- }
98
- return result.data;
99
- }
100
- catch (err) {
101
- if (withFallback) {
102
- await this.console.log(`use fallback from ${packageName}`);
103
- const require = createRequire(import.meta.url);
104
- return require(`${packageName}/package.json`);
105
- }
106
- throw err;
107
- }
108
- }
109
- async curl(url, options) {
110
- options = options || {};
111
- if (!options.timeout) {
112
- options.timeout = 30000;
113
- }
114
- return await this.httpClient.request(url, options);
115
- }
116
- }
117
- function random(start, end) {
118
- return Math.floor(Math.random() * (end - start) + start);
119
- }
@@ -1,35 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { BeanCliBase } from '@cabloy/cli';
4
- import { __ThisSetName__ } from "../this.js";
5
- export class CliCreateSuite extends BeanCliBase {
6
- async execute() {
7
- const { argv } = this.context;
8
- // super
9
- await super.execute();
10
- // noformat
11
- argv.noformat = true;
12
- // nameMeta
13
- const nameMeta = this.helper.parseNameMeta(argv.name);
14
- const suiteDir = nameMeta.directory || 'suite';
15
- argv.name = nameMeta.short;
16
- // suite name/info
17
- const suiteName = argv.name;
18
- argv.suiteInfo = this.helper.parseSuiteInfo(suiteName);
19
- // check if exists
20
- const _suite = this.helper.findSuite(suiteName);
21
- if (_suite) {
22
- throw new Error(`suite exists: ${suiteName}`);
23
- }
24
- // target dir
25
- let targetDir = path.join(argv.projectPath, `src/${suiteDir}`, suiteName);
26
- if (fs.existsSync(targetDir)) {
27
- throw new Error(`suite exists: ${suiteName}`);
28
- }
29
- targetDir = await this.helper.ensureDir(targetDir);
30
- // templateDir
31
- const templateDir = this.template.resolveTemplatePath(__ThisSetName__, 'create/suite');
32
- // render
33
- await this.template.renderDir(targetDir, templateDir);
34
- }
35
- }
@@ -1,39 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { BeanCliBase } from '@cabloy/cli';
4
- import { __ThisSetName__ } from "../this.js";
5
- export class CliCreateTest extends BeanCliBase {
6
- async execute() {
7
- const { argv } = this.context;
8
- // super
9
- await super.execute();
10
- // module name/info
11
- const moduleName = argv.module;
12
- argv.moduleInfo = this.helper.parseModuleInfo(moduleName);
13
- // check if exists
14
- const _module = this.helper.findModule(moduleName);
15
- if (!_module) {
16
- throw new Error(`module does not exist: ${moduleName}`);
17
- }
18
- // target dir
19
- const targetDir = await this.helper.ensureDir(_module.root);
20
- // name
21
- argv.nameCapitalize = this.helper.firstCharToUpperCase(argv.name);
22
- // nameMeta
23
- argv.nameMeta = this.helper.parseNameMeta(argv.name, ['test']);
24
- // directory
25
- const testDir = path.join(targetDir, 'test');
26
- const testFile = path.join(testDir, `${argv.name}.test.ts`);
27
- if (fs.existsSync(testFile)) {
28
- throw new Error(`test exists: ${testFile}`);
29
- }
30
- await this.helper.ensureDir(testDir);
31
- // render boilerplate
32
- await this.template.renderBoilerplateAndSnippets({
33
- targetDir: testDir,
34
- setName: __ThisSetName__,
35
- snippetsPath: null,
36
- boilerplatePath: 'create/test/boilerplate',
37
- });
38
- }
39
- }
@@ -1,93 +0,0 @@
1
- import { BeanCliBase, getCommandsMeta } from '@cabloy/cli';
2
- export class CliDefaultList extends BeanCliBase {
3
- async execute() {
4
- const { argv } = this.context;
5
- // super
6
- await super.execute();
7
- // set/group
8
- const setWant = argv.set;
9
- let groupWant = argv.group;
10
- if (!setWant)
11
- groupWant = undefined;
12
- // commandsAll
13
- const commandsAll = (await getCommandsMeta()).all;
14
- // setsShow
15
- let setsShow;
16
- if (setWant) {
17
- if (!commandsAll[setWant])
18
- throw new Error(`cli set not found: ${setWant}`);
19
- setsShow = [setWant];
20
- }
21
- else {
22
- setsShow = Object.keys(commandsAll);
23
- }
24
- // loop
25
- const total = setsShow.length;
26
- for (let index = 0; index < total; index++) {
27
- const setShow = setsShow[index];
28
- // log
29
- await this.console.log({
30
- total,
31
- progress: index,
32
- text: setShow,
33
- });
34
- // show
35
- await this._setShow({ setShow, groupWant, commandsAll });
36
- }
37
- // await this.console.log({ text: JSON.stringify(modulesWant) });
38
- }
39
- async _setShow({ setShow, groupWant, commandsAll }) {
40
- // _set
41
- const _set = commandsAll[setShow];
42
- // groupsShow
43
- let groupsShow;
44
- if (groupWant) {
45
- if (!_set[groupWant])
46
- throw new Error(`cli set group not found: ${setShow}:${groupWant}`);
47
- groupsShow = [groupWant];
48
- }
49
- else {
50
- groupsShow = Object.keys(_set);
51
- }
52
- // table
53
- const table = this.helper.newTable({
54
- head: ['Command', 'Version', 'Description'],
55
- colWidths: [30, 10, 40],
56
- });
57
- // group
58
- const groupCount = groupsShow.length;
59
- for (let index = 0; index < groupCount; index++) {
60
- const groupShow = groupsShow[index];
61
- const _group = _set[groupShow];
62
- for (const commandName in _group) {
63
- const _command = _group[commandName].command;
64
- const cliFullName = this._combineCliFullName({ setShow, groupShow, commandName });
65
- const version = _command.info.version;
66
- const description = _command.info.description || _command.info.title;
67
- table.push([cliFullName, version, description]);
68
- }
69
- if (index < groupCount - 1) {
70
- table.push([]);
71
- }
72
- }
73
- // log
74
- await this.console.log({ text: table.toString() });
75
- }
76
- _combineCliFullName({ setShow, groupShow, commandName }) {
77
- const parts = [];
78
- if (setShow === 'api') {
79
- parts.push('');
80
- }
81
- else {
82
- parts.push(setShow);
83
- }
84
- if (groupShow === 'default') {
85
- parts.push('');
86
- }
87
- else {
88
- parts.push(groupShow);
89
- }
90
- parts.push(commandName);
91
- return parts.join(':');
92
- }
93
- }
@@ -1,24 +0,0 @@
1
- import path from 'node:path';
2
- import { BeanCliBase } from '@cabloy/cli';
3
- import fse from 'fs-extra';
4
- import { __ThisSetName__ } from "../this.js";
5
- export class CliInitAppMonkey extends BeanCliBase {
6
- async execute() {
7
- const { argv } = this.context;
8
- // super
9
- await super.execute();
10
- // target dir
11
- const targetDir = path.join(argv.projectPath, 'src/backend/config');
12
- const monkeyFile = path.join(targetDir, 'monkey.ts');
13
- if (fse.existsSync(monkeyFile)) {
14
- throw new Error('app monkey exists');
15
- }
16
- // render boilerplate
17
- await this.template.renderBoilerplateAndSnippets({
18
- targetDir,
19
- setName: __ThisSetName__,
20
- snippetsPath: null,
21
- boilerplatePath: 'init/appMonkey/boilerplate',
22
- });
23
- }
24
- }
@@ -1,28 +0,0 @@
1
- import path from 'node:path';
2
- import { BeanCliBase } from '@cabloy/cli';
3
- import fse from 'fs-extra';
4
- export class CliInitAsset extends BeanCliBase {
5
- async execute() {
6
- const { argv } = this.context;
7
- // super
8
- await super.execute();
9
- // module name/info
10
- const moduleName = argv.module;
11
- argv.moduleInfo = this.helper.parseModuleInfo(moduleName);
12
- // check if exists
13
- const _module = this.helper.findModule(moduleName);
14
- if (!_module) {
15
- throw new Error(`module does not exist: ${moduleName}`);
16
- }
17
- // target dir
18
- const targetDir = await this.helper.ensureDir(_module.root);
19
- // scene
20
- const scene = argv.scene;
21
- // directory
22
- const assetDir = path.join(targetDir, 'assets', scene);
23
- if (fse.existsSync(assetDir)) {
24
- throw new Error(`asset exists: ${moduleName}/assets/${scene}`);
25
- }
26
- await this.helper.ensureDir(assetDir);
27
- }
28
- }
@@ -1,38 +0,0 @@
1
- import path from 'node:path';
2
- import { BeanCliBase } from '@cabloy/cli';
3
- import fse from 'fs-extra';
4
- import { __ThisSetName__ } from "../this.js";
5
- export class CliInitConfig extends BeanCliBase {
6
- async execute() {
7
- const { argv } = this.context;
8
- // super
9
- await super.execute();
10
- // module name/info
11
- const moduleName = argv._[0];
12
- if (!moduleName)
13
- return;
14
- argv.moduleInfo = this.helper.parseModuleInfo(moduleName);
15
- // check if exists
16
- const _module = this.helper.findModule(moduleName);
17
- if (!_module) {
18
- throw new Error(`module does not exist: ${moduleName}`);
19
- }
20
- // target dir
21
- const targetDir = await this.helper.ensureDir(_module.root);
22
- const configFile = path.join(targetDir, 'src/config/config.ts');
23
- if (fse.existsSync(configFile)) {
24
- throw new Error(`config exists: ${moduleName}`);
25
- }
26
- // render boilerplate
27
- await this.template.renderBoilerplateAndSnippets({
28
- targetDir: path.join(targetDir, 'src'),
29
- setName: __ThisSetName__,
30
- snippetsPath: null,
31
- boilerplatePath: 'init/config/boilerplate',
32
- });
33
- // tools.metadata
34
- if (!argv.nometadata) {
35
- await this.helper.invokeCli([':tools:metadata', moduleName], { cwd: argv.projectPath });
36
- }
37
- }
38
- }