vona-cli-set-api 1.0.5 → 1.0.11
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/cli/templates/create/module/boilerplate/_package.json +28 -8
- package/cli/templates/create/module/boilerplate/_tsconfig.build.json +8 -0
- package/cli/templates/create/module/boilerplate/_tsconfig.json +2 -3
- package/cli/templates/create/module/snippets/package.json.ts +17 -0
- package/cli/templates/create/module/snippets/tsconfig.json.ts +19 -0
- package/cli/templates/create/project/basic/boilerplate/.editorconfig +9 -0
- package/cli/templates/create/project/basic/boilerplate/.gitattributes +2 -0
- package/cli/templates/create/project/basic/boilerplate/.vscode/extensions.json +4 -0
- package/cli/templates/create/project/basic/boilerplate/.vscode/settings.json +45 -0
- package/cli/templates/create/project/basic/boilerplate/.vscode/vona.code-snippets +51 -0
- package/cli/templates/create/project/basic/boilerplate/env/.env +59 -0
- package/cli/templates/create/project/basic/boilerplate/env/.env.local +0 -0
- package/cli/templates/create/project/basic/boilerplate/env/.env.prod +26 -0
- package/cli/templates/create/project/basic/boilerplate/env/.env.test +0 -0
- package/cli/templates/create/project/basic/boilerplate/eslint.config.mjs +16 -0
- package/cli/templates/create/project/basic/boilerplate/package.original.json +45 -0
- package/cli/templates/create/project/basic/boilerplate/pnpm-workspace.yaml +7 -0
- package/cli/templates/create/project/basic/boilerplate/scripts/app-init.sh +4 -0
- package/cli/templates/create/project/basic/boilerplate/scripts/wait-for-it.sh +156 -0
- package/cli/templates/create/project/basic/boilerplate/src/backend/config/config/config.local.ts +10 -0
- package/cli/templates/create/project/basic/boilerplate/src/backend/config/config/config.prod.ts +21 -0
- package/cli/templates/create/project/basic/boilerplate/src/backend/config/config/config.test.ts +10 -0
- package/cli/templates/create/project/basic/boilerplate/src/backend/config/config/config.ts +10 -0
- package/cli/templates/create/project/basic/boilerplate/src/backend/config/locale/en-us.ts +5 -0
- package/cli/templates/create/project/basic/boilerplate/src/backend/config/locale/zh-cn.ts +5 -0
- package/cli/templates/create/project/basic/boilerplate/src/backend/config/locales.ts +7 -0
- package/cli/templates/create/project/basic/boilerplate/src/backend/typing/env.d.ts +5 -0
- package/cli/templates/create/project/basic/boilerplate/src/module/.gitkeep +0 -0
- package/cli/templates/create/project/basic/boilerplate/src/module-vendor/.gitkeep +0 -0
- package/cli/templates/create/project/basic/boilerplate/src/suite/.gitkeep +0 -0
- package/cli/templates/create/project/basic/boilerplate/src/suite-vendor/.gitkeep +0 -0
- package/cli/templates/create/project/basic/boilerplate/tsconfig.base.esm.json +10 -0
- package/cli/templates/create/project/basic/boilerplate/tsconfig.base.json +3 -0
- package/cli/templates/create/project/basic/boilerplate/tsconfig.json +12 -0
- package/cli/templates/create/suite/_package.json +2 -2
- package/cli/templates/create/suite/_tsconfig.json +2 -2
- package/cli/templates/create/test/boilerplate/{{name}}.test.ts +11 -0
- package/cli/templates/init/config/boilerplate/config/config.ts +5 -0
- package/cli/templates/init/constant/boilerplate/config/constants.ts +1 -0
- package/cli/templates/init/error/boilerplate/config/errors.ts +1 -0
- package/cli/templates/init/locale/boilerplate/config/locale/en-us.ts +1 -0
- package/cli/templates/init/locale/boilerplate/config/locale/zh-cn.ts +1 -0
- package/cli/templates/init/main/boilerplate/main.ts +8 -0
- package/cli/templates/init/monkey/boilerplate/monkey.ts +9 -0
- package/cli/templates/init/static/boilerplate/static/img/vona.png +0 -0
- package/cli/templates/tools/crud/boilerplate/src/controller/{{resourceName}}.ts_ +43 -0
- package/cli/templates/tools/crud/boilerplate/src/dto/{{resourceName}}Create.ts_ +9 -0
- package/cli/templates/tools/crud/boilerplate/src/dto/{{resourceName}}Update.ts_ +9 -0
- package/cli/templates/tools/crud/boilerplate/src/entity/{{resourceName}}.ts_ +15 -0
- package/cli/templates/tools/crud/boilerplate/src/model/{{resourceName}}.ts_ +5 -0
- package/cli/templates/tools/crud/boilerplate/src/service/{{resourceName}}.ts_ +32 -0
- package/cli/templates/tools/crud/boilerplate/test/{{resourceName}}.test.ts_ +46 -0
- package/cli/templates/tools/crud/snippets/1-package.json.ts +16 -0
- package/cli/templates/tools/crud/snippets/2-meta.version.ts +42 -0
- package/cli/templates/tools/crud/snippets/3-en-us.ts +27 -0
- package/cli/templates/tools/crud/snippets/4-zh-cn.ts +10 -0
- package/cli/templates/tools/crud/utils.ts +20 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/lib/bean/cli.bin.build.d.ts +15 -0
- package/dist/lib/bean/cli.bin.build.js +139 -0
- package/dist/lib/bean/cli.bin.dbReset.d.ts +13 -0
- package/dist/lib/bean/cli.bin.dbReset.js +46 -0
- package/dist/lib/bean/cli.bin.demo.d.ts +12 -0
- package/dist/lib/bean/cli.bin.demo.js +50 -0
- package/dist/lib/bean/cli.bin.dev.d.ts +14 -0
- package/dist/lib/bean/cli.bin.dev.js +53 -0
- package/dist/lib/bean/cli.bin.test.d.ts +15 -0
- package/dist/lib/bean/cli.bin.test.js +67 -0
- package/dist/lib/bean/{cli.tools.build.d.ts → cli.bin.tsc.d.ts} +2 -3
- package/dist/lib/bean/{cli.tools.build.js → cli.bin.tsc.js} +13 -5
- package/dist/lib/bean/cli.create.bean.d.ts +3 -4
- package/dist/lib/bean/cli.create.bean.js +42 -28
- package/dist/lib/bean/cli.create.module.d.ts +1 -2
- package/dist/lib/bean/cli.create.module.js +3 -4
- package/dist/lib/bean/cli.create.project.d.ts +26 -0
- package/dist/lib/bean/cli.create.project.js +115 -0
- package/dist/lib/bean/cli.create.suite.d.ts +1 -2
- package/dist/lib/bean/cli.create.suite.js +5 -9
- package/dist/lib/bean/cli.create.test.d.ts +15 -0
- package/dist/lib/bean/cli.create.test.js +39 -0
- package/dist/lib/bean/cli.default.list.d.ts +0 -1
- package/dist/lib/bean/cli.default.list.js +0 -1
- package/dist/lib/bean/cli.init.config.d.ts +8 -0
- package/dist/lib/bean/cli.init.config.js +36 -0
- package/dist/lib/bean/cli.init.constant.d.ts +8 -0
- package/dist/lib/bean/cli.init.constant.js +36 -0
- package/dist/lib/bean/cli.init.error.d.ts +8 -0
- package/dist/lib/bean/cli.init.error.js +47 -0
- package/dist/lib/bean/cli.init.locale.d.ts +8 -0
- package/dist/lib/bean/cli.init.locale.js +36 -0
- package/dist/lib/bean/cli.init.main.d.ts +8 -0
- package/dist/lib/bean/cli.init.main.js +36 -0
- package/dist/lib/bean/cli.init.monkey.d.ts +9 -0
- package/dist/lib/bean/cli.init.monkey.js +62 -0
- package/dist/lib/bean/cli.init.static.d.ts +8 -0
- package/dist/lib/bean/cli.init.static.js +36 -0
- package/dist/lib/bean/cli.tools.crud.d.ts +15 -0
- package/dist/lib/bean/cli.tools.crud.js +42 -0
- package/dist/lib/bean/cli.tools.deps.d.ts +2 -10
- package/dist/lib/bean/cli.tools.deps.js +16 -123
- package/dist/lib/bean/cli.tools.metadata.d.ts +1 -1
- package/dist/lib/bean/cli.tools.metadata.js +71 -32
- package/dist/lib/bean/toolsBin/configUtils.d.ts +7 -0
- package/dist/lib/bean/toolsBin/configUtils.js +56 -0
- package/dist/lib/bean/toolsBin/dbReset.d.ts +1 -0
- package/dist/lib/bean/toolsBin/dbReset.js +8 -0
- package/dist/lib/bean/toolsBin/demo.d.ts +1 -0
- package/dist/lib/bean/toolsBin/demo.js +41 -0
- package/dist/lib/bean/toolsBin/generateEntryFiles.d.ts +4 -0
- package/dist/lib/bean/toolsBin/generateEntryFiles.js +75 -0
- package/dist/lib/bean/toolsBin/generateVonaMeta.d.ts +10 -0
- package/dist/lib/bean/toolsBin/generateVonaMeta.js +17 -0
- package/dist/lib/bean/toolsBin/test.d.ts +1 -0
- package/dist/lib/bean/toolsBin/test.js +121 -0
- package/dist/lib/bean/toolsBin/types.d.ts +5 -0
- package/dist/lib/bean/toolsBin/types.js +1 -0
- package/dist/lib/bean/toolsMetadata/generateBeanGenerals.d.ts +2 -0
- package/dist/lib/bean/toolsMetadata/generateBeanGenerals.js +33 -0
- package/dist/lib/bean/toolsMetadata/generateBeans.d.ts +2 -2
- package/dist/lib/bean/toolsMetadata/generateBeans.js +33 -21
- package/dist/lib/bean/toolsMetadata/generateConfig.d.ts +3 -4
- package/dist/lib/bean/toolsMetadata/generateConfig.js +12 -14
- package/dist/lib/bean/toolsMetadata/generateMetadataCustom.d.ts +3 -0
- package/dist/lib/bean/toolsMetadata/generateMetadataCustom.js +23 -0
- package/dist/lib/bean/toolsMetadata/generateMonkey.d.ts +2 -3
- package/dist/lib/bean/toolsMetadata/generateMonkey.js +3 -4
- package/dist/lib/bean/toolsMetadata/generateOnions.d.ts +2 -0
- package/dist/lib/bean/toolsMetadata/generateOnions.js +90 -0
- package/dist/lib/bean/toolsMetadata/generateScope.d.ts +1 -4
- package/dist/lib/bean/toolsMetadata/generateScope.js +43 -16
- package/dist/lib/bean/toolsMetadata/generateScopeResources.d.ts +2 -0
- package/dist/lib/bean/toolsMetadata/generateScopeResources.js +29 -0
- package/dist/lib/bean/toolsMetadata/generateScopeResourcesMeta.d.ts +2 -0
- package/dist/lib/bean/toolsMetadata/generateScopeResourcesMeta.js +13 -0
- package/dist/lib/bean/toolsMetadata/utils.d.ts +9 -0
- package/dist/lib/bean/toolsMetadata/utils.js +82 -0
- package/dist/lib/beans.d.ts +38 -9
- package/dist/lib/beans.js +38 -9
- package/dist/lib/command/bin.build.d.ts +19 -0
- package/dist/lib/command/bin.build.js +18 -0
- package/dist/lib/command/bin.dbReset.d.ts +15 -0
- package/dist/lib/command/bin.dbReset.js +14 -0
- package/dist/lib/command/bin.demo.d.ts +15 -0
- package/dist/lib/command/bin.demo.js +14 -0
- package/dist/lib/command/bin.dev.d.ts +19 -0
- package/dist/lib/command/bin.dev.js +18 -0
- package/dist/lib/command/bin.test.d.ts +19 -0
- package/dist/lib/command/bin.test.js +18 -0
- package/dist/lib/command/{tools.build.d.ts → bin.tsc.d.ts} +0 -1
- package/dist/lib/command/{tools.build.js → bin.tsc.js} +3 -4
- package/dist/lib/command/create.bean.d.ts +0 -1
- package/dist/lib/command/create.bean.js +0 -1
- package/dist/lib/command/create.module.d.ts +0 -1
- package/dist/lib/command/create.module.js +0 -1
- package/dist/lib/command/create.project.d.ts +45 -0
- package/dist/lib/command/create.project.js +43 -0
- package/dist/lib/command/create.suite.d.ts +0 -1
- package/dist/lib/command/create.suite.js +0 -1
- package/dist/lib/command/create.test.d.ts +34 -0
- package/dist/lib/command/create.test.js +33 -0
- package/dist/lib/command/default.list.d.ts +0 -1
- package/dist/lib/command/default.list.js +0 -1
- package/dist/lib/command/init.config.d.ts +9 -0
- package/dist/lib/command/init.config.js +10 -0
- package/dist/lib/command/init.constant.d.ts +9 -0
- package/dist/lib/command/init.constant.js +10 -0
- package/dist/lib/command/init.error.d.ts +9 -0
- package/dist/lib/command/init.error.js +10 -0
- package/dist/lib/command/init.locale.d.ts +9 -0
- package/dist/lib/command/init.locale.js +10 -0
- package/dist/lib/command/init.main.d.ts +9 -0
- package/dist/lib/command/init.main.js +10 -0
- package/dist/lib/command/init.monkey.d.ts +9 -0
- package/dist/lib/command/init.monkey.js +10 -0
- package/dist/lib/command/init.static.d.ts +9 -0
- package/dist/lib/command/init.static.js +10 -0
- package/dist/lib/command/tools.crud.d.ts +34 -0
- package/dist/lib/command/tools.crud.js +33 -0
- package/dist/lib/command/tools.deps.d.ts +1 -11
- package/dist/lib/command/tools.deps.js +2 -12
- package/dist/lib/command/tools.metadata.d.ts +0 -1
- package/dist/lib/command/tools.metadata.js +0 -1
- package/dist/lib/commands.d.ts +253 -12
- package/dist/lib/commands.js +42 -10
- package/dist/lib/this.d.ts +0 -1
- package/dist/lib/this.js +0 -1
- package/dist/lib/utils.d.ts +15 -0
- package/dist/lib/utils.js +63 -0
- package/dist/typings.d.ts +0 -1
- package/dist/typings.js +0 -1
- package/package.json +50 -26
- package/templates/app/app.ejs +15 -0
- package/templates/app/bootstrap.ejs +13 -0
- package/templates/app/vona-modules-meta.ejs +49 -0
- package/templates/config/_tsconfig_project.json +12 -0
- package/templates/config/_tsconfig_source.json +40 -0
- package/templates/test/done-only.test.ts +3 -0
- package/templates/test/done.test.ts +3 -0
- package/cli/templates/create/bean/boilerplate/{{sceneName}}.{{beanName}}.ts_ +0 -4
- package/cli/templates/create/module/snippets/package.json.cjs +0 -11
- package/cli/templates/create/module/snippets/tsconfig.json.cjs +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/bean/cli.create.bean.d.ts.map +0 -1
- package/dist/lib/bean/cli.create.bean.js.map +0 -1
- package/dist/lib/bean/cli.create.module.d.ts.map +0 -1
- package/dist/lib/bean/cli.create.module.js.map +0 -1
- package/dist/lib/bean/cli.create.suite.d.ts.map +0 -1
- package/dist/lib/bean/cli.create.suite.js.map +0 -1
- package/dist/lib/bean/cli.default.list.d.ts.map +0 -1
- package/dist/lib/bean/cli.default.list.js.map +0 -1
- package/dist/lib/bean/cli.tools.build.d.ts.map +0 -1
- package/dist/lib/bean/cli.tools.build.js.map +0 -1
- package/dist/lib/bean/cli.tools.deps.d.ts.map +0 -1
- package/dist/lib/bean/cli.tools.deps.js.map +0 -1
- package/dist/lib/bean/cli.tools.metadata.d.ts.map +0 -1
- package/dist/lib/bean/cli.tools.metadata.js.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateAtoms.d.ts +0 -2
- package/dist/lib/bean/toolsMetadata/generateAtoms.d.ts.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateAtoms.js +0 -24
- package/dist/lib/bean/toolsMetadata/generateAtoms.js.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateBeans.d.ts.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateBeans.js.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateConfig.d.ts.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateConfig.js.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateControllers.d.ts +0 -2
- package/dist/lib/bean/toolsMetadata/generateControllers.d.ts.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateControllers.js +0 -24
- package/dist/lib/bean/toolsMetadata/generateControllers.js.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateEntities.d.ts +0 -2
- package/dist/lib/bean/toolsMetadata/generateEntities.d.ts.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateEntities.js +0 -24
- package/dist/lib/bean/toolsMetadata/generateEntities.js.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateModels.d.ts +0 -2
- package/dist/lib/bean/toolsMetadata/generateModels.d.ts.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateModels.js +0 -34
- package/dist/lib/bean/toolsMetadata/generateModels.js.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateMonkey.d.ts.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateMonkey.js.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateScope.d.ts.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateScope.js.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateServices.d.ts +0 -2
- package/dist/lib/bean/toolsMetadata/generateServices.d.ts.map +0 -1
- package/dist/lib/bean/toolsMetadata/generateServices.js +0 -54
- package/dist/lib/bean/toolsMetadata/generateServices.js.map +0 -1
- package/dist/lib/beans.d.ts.map +0 -1
- package/dist/lib/beans.js.map +0 -1
- package/dist/lib/command/create.bean.d.ts.map +0 -1
- package/dist/lib/command/create.bean.js.map +0 -1
- package/dist/lib/command/create.module.d.ts.map +0 -1
- package/dist/lib/command/create.module.js.map +0 -1
- package/dist/lib/command/create.suite.d.ts.map +0 -1
- package/dist/lib/command/create.suite.js.map +0 -1
- package/dist/lib/command/default.list.d.ts.map +0 -1
- package/dist/lib/command/default.list.js.map +0 -1
- package/dist/lib/command/tools.build.d.ts.map +0 -1
- package/dist/lib/command/tools.build.js.map +0 -1
- package/dist/lib/command/tools.deps.d.ts.map +0 -1
- package/dist/lib/command/tools.deps.js.map +0 -1
- package/dist/lib/command/tools.metadata.d.ts.map +0 -1
- package/dist/lib/command/tools.metadata.js.map +0 -1
- package/dist/lib/commands.d.ts.map +0 -1
- package/dist/lib/commands.js.map +0 -1
- package/dist/lib/this.d.ts.map +0 -1
- package/dist/lib/this.js.map +0 -1
- package/dist/typings.d.ts.map +0 -1
- package/dist/typings.js.map +0 -1
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
1
2
|
import { BeanCliBase } from '@cabloy/cli';
|
|
3
|
+
import { getOnionMetasMeta, getOnionScenesMeta } from '@cabloy/module-info';
|
|
4
|
+
import { toUpperCaseFirstChar } from '@cabloy/word-utils';
|
|
2
5
|
import fse from 'fs-extra';
|
|
3
|
-
import
|
|
4
|
-
import { generateBeans } from
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { generateMonkey, generateMain } from './toolsMetadata/generateMonkey.js';
|
|
6
|
+
import { generateBeanGenerals } from "./toolsMetadata/generateBeanGenerals.js";
|
|
7
|
+
import { generateBeans } from "./toolsMetadata/generateBeans.js";
|
|
8
|
+
import { generateConfig, generateConstant, generateError, generateLocale } from "./toolsMetadata/generateConfig.js";
|
|
9
|
+
import { generateMetadataCustom } from "./toolsMetadata/generateMetadataCustom.js";
|
|
10
|
+
import { generateMain, generateMonkey } from "./toolsMetadata/generateMonkey.js";
|
|
11
|
+
import { generateOnions } from "./toolsMetadata/generateOnions.js";
|
|
12
|
+
import { generateScope } from "./toolsMetadata/generateScope.js";
|
|
13
|
+
import { generateScopeResources } from "./toolsMetadata/generateScopeResources.js";
|
|
14
|
+
import { generateScopeResourcesMeta } from "./toolsMetadata/generateScopeResourcesMeta.js";
|
|
13
15
|
export class CliToolsMetadata extends BeanCliBase {
|
|
14
16
|
async execute() {
|
|
15
17
|
const { argv } = this.context;
|
|
@@ -49,22 +51,49 @@ export class CliToolsMetadata extends BeanCliBase {
|
|
|
49
51
|
await this.helper.ensureDir(metaDir);
|
|
50
52
|
// relativeNameCapitalize
|
|
51
53
|
const relativeNameCapitalize = this.helper.stringToCapitalize(moduleName, '-');
|
|
54
|
+
// onionScenesMeta
|
|
55
|
+
const onionScenesMeta = getOnionScenesMeta(this.modulesMeta.modules);
|
|
52
56
|
// content
|
|
53
57
|
let content = '';
|
|
54
58
|
// beans
|
|
55
|
-
content += await generateBeans(moduleName, modulePath);
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
59
|
+
content += await generateBeans(onionScenesMeta, moduleName, modulePath);
|
|
60
|
+
// onions
|
|
61
|
+
const scopeResources = {};
|
|
62
|
+
for (const sceneName in onionScenesMeta) {
|
|
63
|
+
const sceneMeta = onionScenesMeta[sceneName];
|
|
64
|
+
// general
|
|
65
|
+
content += await generateOnions(sceneName, sceneMeta, moduleName, modulePath);
|
|
66
|
+
// scope resources
|
|
67
|
+
if (sceneMeta.scopeResource) {
|
|
68
|
+
const contentScopeResource = await generateScopeResources(sceneName, sceneMeta, moduleName, modulePath);
|
|
69
|
+
if (contentScopeResource) {
|
|
70
|
+
content += contentScopeResource;
|
|
71
|
+
scopeResources[sceneName] = `IModule${toUpperCaseFirstChar(sceneName)}`;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// bean generals
|
|
75
|
+
if (sceneMeta.beanGeneral) {
|
|
76
|
+
content += await generateBeanGenerals(sceneName, sceneMeta, moduleName, modulePath);
|
|
77
|
+
}
|
|
78
|
+
// metas
|
|
79
|
+
if (sceneName === 'meta') {
|
|
80
|
+
const onionMetasMeta = getOnionMetasMeta(this.modulesMeta.modules);
|
|
81
|
+
for (const metaName in onionMetasMeta) {
|
|
82
|
+
const metaMeta = onionMetasMeta[metaName];
|
|
83
|
+
if (metaMeta.scopeResource) {
|
|
84
|
+
const contentScopeResourceMeta = await generateScopeResourcesMeta(metaName, metaMeta, sceneName, sceneMeta, moduleName, modulePath);
|
|
85
|
+
if (contentScopeResourceMeta) {
|
|
86
|
+
content += contentScopeResourceMeta;
|
|
87
|
+
scopeResources[metaName] = `Meta${toUpperCaseFirstChar(metaName)}`;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// metadata custom
|
|
93
|
+
if (sceneMeta.metadataCustom) {
|
|
94
|
+
content += await generateMetadataCustom(this, sceneName, sceneMeta, moduleName, modulePath);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
68
97
|
// config
|
|
69
98
|
const contentConfig = await generateConfig(modulePath);
|
|
70
99
|
content += contentConfig;
|
|
@@ -82,14 +111,14 @@ export class CliToolsMetadata extends BeanCliBase {
|
|
|
82
111
|
// main
|
|
83
112
|
content += await generateMain(modulePath);
|
|
84
113
|
// scope
|
|
85
|
-
content += await generateScope(moduleName, relativeNameCapitalize, {
|
|
114
|
+
content += await generateScope(moduleName, relativeNameCapitalize, scopeResources, {
|
|
86
115
|
config: contentConfig,
|
|
87
116
|
errors: contentErrors,
|
|
88
117
|
locales: contentLocales,
|
|
89
118
|
constants: contentConstants,
|
|
90
|
-
services: contentServices,
|
|
91
|
-
models: contentModels,
|
|
92
119
|
});
|
|
120
|
+
// patch
|
|
121
|
+
content = this._generatePatch(content);
|
|
93
122
|
// empty
|
|
94
123
|
if (!content.trim()) {
|
|
95
124
|
content = 'export {};';
|
|
@@ -102,31 +131,41 @@ export class CliToolsMetadata extends BeanCliBase {
|
|
|
102
131
|
// index
|
|
103
132
|
await this._generateIndex(modulePath);
|
|
104
133
|
}
|
|
134
|
+
_generatePatch(content) {
|
|
135
|
+
if (!content)
|
|
136
|
+
return content;
|
|
137
|
+
if (content.includes('TypeEntityOptionsFields')) {
|
|
138
|
+
content = `import type { TypeEntityOptionsFields } from 'vona-module-a-openapi';\n${content}`;
|
|
139
|
+
}
|
|
140
|
+
if (content.includes('TypeControllerOptionsActions')) {
|
|
141
|
+
content = `import type { TypeControllerOptionsActions } from 'vona-module-a-openapi';\n${content}`;
|
|
142
|
+
}
|
|
143
|
+
return content;
|
|
144
|
+
}
|
|
105
145
|
async _generateThis(moduleName, relativeNameCapitalize, modulePath) {
|
|
106
146
|
const thisDest = path.join(modulePath, 'src/.metadata/this.ts');
|
|
107
147
|
if (fse.existsSync(thisDest))
|
|
108
148
|
return;
|
|
109
149
|
const content = `export const __ThisModule__ = '${moduleName}';
|
|
110
|
-
export { ScopeModule${relativeNameCapitalize} as ScopeModule } from './index.
|
|
150
|
+
export { ScopeModule${relativeNameCapitalize} as ScopeModule } from './index.ts';
|
|
111
151
|
`;
|
|
112
152
|
// save
|
|
113
153
|
await fse.writeFile(thisDest, content);
|
|
114
154
|
}
|
|
115
155
|
async _generateIndex(modulePath) {
|
|
116
|
-
const jsExport = "export * from './.metadata/index.
|
|
156
|
+
const jsExport = "export * from './.metadata/index.ts';";
|
|
117
157
|
const jsFile = path.join(modulePath, 'src/index.ts');
|
|
118
158
|
let jsContent;
|
|
119
159
|
if (fse.existsSync(jsFile)) {
|
|
120
160
|
jsContent = (await fse.readFile(jsFile)).toString();
|
|
121
|
-
if (jsContent.
|
|
161
|
+
if (jsContent.includes(jsExport))
|
|
122
162
|
return;
|
|
123
|
-
jsContent = jsExport
|
|
163
|
+
jsContent = `${jsExport}\n${jsContent}`;
|
|
124
164
|
jsContent = jsContent.replace('export {};\n', '');
|
|
125
165
|
}
|
|
126
166
|
else {
|
|
127
|
-
jsContent = jsExport
|
|
167
|
+
jsContent = `${jsExport}\n`;
|
|
128
168
|
}
|
|
129
169
|
await fse.writeFile(jsFile, jsContent);
|
|
130
170
|
}
|
|
131
171
|
}
|
|
132
|
-
//# sourceMappingURL=cli.tools.metadata.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { VonaConfigMeta } from '@cabloy/module-info';
|
|
2
|
+
import type { VonaBinConfigOptions } from './types.ts';
|
|
3
|
+
import { glob } from '@cabloy/module-glob';
|
|
4
|
+
export declare function createConfigUtils(configMeta: VonaConfigMeta, configOptions: VonaBinConfigOptions): {
|
|
5
|
+
loadEnvs: () => NodeJS.ProcessEnv;
|
|
6
|
+
loadModulesMeta: () => ReturnType<typeof glob>;
|
|
7
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import * as dotenv from '@cabloy/dotenv';
|
|
4
|
+
import { glob } from '@cabloy/module-glob';
|
|
5
|
+
import { getEnvMeta, getNodeEnv } from "../../utils.js";
|
|
6
|
+
export function createConfigUtils(configMeta, configOptions) {
|
|
7
|
+
let __modulesMeta;
|
|
8
|
+
return {
|
|
9
|
+
loadEnvs: __loadEnvs,
|
|
10
|
+
loadModulesMeta: __loadModulesMeta,
|
|
11
|
+
};
|
|
12
|
+
//////////////////////////////
|
|
13
|
+
function __loadEnvs() {
|
|
14
|
+
const meta = getEnvMeta(configMeta);
|
|
15
|
+
const envDir = path.join(configOptions.appDir, 'env');
|
|
16
|
+
const envs = dotenv.loadEnvs(meta, envDir, '.env');
|
|
17
|
+
const res = Object.assign({
|
|
18
|
+
NODE_ENV: getNodeEnv(meta.mode),
|
|
19
|
+
}, envs, {
|
|
20
|
+
META_FLAVOR: meta.flavor,
|
|
21
|
+
META_MODE: meta.mode,
|
|
22
|
+
});
|
|
23
|
+
if (configOptions.workers !== undefined) {
|
|
24
|
+
res.SERVER_WORKERS = configOptions.workers.toString();
|
|
25
|
+
}
|
|
26
|
+
// maybe empty string
|
|
27
|
+
if (!res.SERVER_WORKERS) {
|
|
28
|
+
if (meta.mode === 'prod') {
|
|
29
|
+
res.SERVER_WORKERS = os.cpus().length.toString();
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
res.SERVER_WORKERS = '1';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
for (const key of ['NODE_ENV', 'SERVER_WORKERS', 'META_FLAVOR', 'META_MODE']) {
|
|
36
|
+
if (res[key] !== false) {
|
|
37
|
+
process.env[key] = res[key];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// ok
|
|
41
|
+
return res;
|
|
42
|
+
}
|
|
43
|
+
async function __loadModulesMeta() {
|
|
44
|
+
const meta = getEnvMeta(configMeta);
|
|
45
|
+
// modules
|
|
46
|
+
__modulesMeta = await glob({
|
|
47
|
+
projectMode: 'vona',
|
|
48
|
+
projectPath: configOptions.appDir,
|
|
49
|
+
disabledModules: process.env.PROJECT_DISABLED_MODULES,
|
|
50
|
+
disabledSuites: process.env.PROJECT_DISABLED_SUITES,
|
|
51
|
+
log: false,
|
|
52
|
+
meta,
|
|
53
|
+
});
|
|
54
|
+
return __modulesMeta;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import fse from 'fs-extra';
|
|
11
|
+
import { closeApp, createGeneralApp, pathToHref } from 'vona-core';
|
|
12
|
+
import parser from 'yargs-parser';
|
|
13
|
+
const __template = `import type { IArgv, VonaApplication } from 'vona';
|
|
14
|
+
|
|
15
|
+
export async function main(app: VonaApplication, _argv: IArgv) {}
|
|
16
|
+
`;
|
|
17
|
+
const projectPath = process.argv[2];
|
|
18
|
+
const argv = parser(process.argv.slice(3));
|
|
19
|
+
let mainFile;
|
|
20
|
+
if (argv._[0]?.endsWith('.ts')) {
|
|
21
|
+
mainFile = argv._[0];
|
|
22
|
+
argv._ = argv._.slice(1);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
mainFile = 'index.ts';
|
|
26
|
+
}
|
|
27
|
+
await demoRun(projectPath);
|
|
28
|
+
async function demoRun(projectPath) {
|
|
29
|
+
// create
|
|
30
|
+
const app = await createGeneralApp(projectPath, { SERVER_LISTEN_DISABLE: 'true' });
|
|
31
|
+
// demo
|
|
32
|
+
const demoFile = path.join(projectPath, `src/backend/demo/${mainFile}`);
|
|
33
|
+
if (!fse.existsSync(demoFile)) {
|
|
34
|
+
await fse.outputFile(demoFile, __template);
|
|
35
|
+
}
|
|
36
|
+
// run
|
|
37
|
+
const demoInstance = await import(__rewriteRelativeImportExtension(pathToHref(demoFile)));
|
|
38
|
+
await demoInstance.main(app, argv);
|
|
39
|
+
// close
|
|
40
|
+
await closeApp();
|
|
41
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { glob } from '@cabloy/module-glob';
|
|
2
|
+
import type { VonaConfigMeta } from '@cabloy/module-info';
|
|
3
|
+
import type { VonaBinConfigOptions } from './types.ts';
|
|
4
|
+
export declare function generateEntryFiles(configMeta: VonaConfigMeta, configOptions: VonaBinConfigOptions, modulesMeta: Awaited<ReturnType<typeof glob>>, env: NodeJS.ProcessEnv): Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { getEnvFiles } from '@cabloy/dotenv';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import fse from 'fs-extra';
|
|
5
|
+
import { copyTemplateFile, getEnvMeta, resolveTemplatePath } from "../../utils.js";
|
|
6
|
+
export async function generateEntryFiles(configMeta, configOptions, modulesMeta, env) {
|
|
7
|
+
// config
|
|
8
|
+
await __generateConfig();
|
|
9
|
+
// modules meta
|
|
10
|
+
await __generateModulesMeta();
|
|
11
|
+
// env
|
|
12
|
+
await __generateEnvJson();
|
|
13
|
+
// app
|
|
14
|
+
await __generateApp();
|
|
15
|
+
//////////////////////////////
|
|
16
|
+
async function __generateConfig() {
|
|
17
|
+
// check config
|
|
18
|
+
let configDir = path.join(configOptions.appDir, 'src/backend/config');
|
|
19
|
+
if (!fse.existsSync(configDir)) {
|
|
20
|
+
// eslint-disable-next-line
|
|
21
|
+
console.log(chalk.red('path not found: src/backend/config\n'));
|
|
22
|
+
process.exit(0);
|
|
23
|
+
}
|
|
24
|
+
// meta
|
|
25
|
+
const meta = getEnvMeta(configMeta);
|
|
26
|
+
configDir = path.join(configOptions.appDir, 'src/backend/config/config');
|
|
27
|
+
const files = getEnvFiles(meta, configDir, 'config', '.ts');
|
|
28
|
+
const filenames = files.map(item => path.basename(item));
|
|
29
|
+
const imports = [];
|
|
30
|
+
const constNames = [];
|
|
31
|
+
for (const filename of filenames) {
|
|
32
|
+
const parts = filename.split('.');
|
|
33
|
+
let constName = parts[0];
|
|
34
|
+
for (let index = 1; index < parts.length - 1; index++) {
|
|
35
|
+
constName += parts[index].charAt(0).toUpperCase() + parts[index].substring(1);
|
|
36
|
+
}
|
|
37
|
+
imports.push(`import ${constName} from '../src/backend/config/config/${filename}';`);
|
|
38
|
+
constNames.push(constName);
|
|
39
|
+
}
|
|
40
|
+
const contentDest = `${imports.join('\n')}\nexport default [${constNames.join(', ')}];`;
|
|
41
|
+
// output
|
|
42
|
+
const fileDest = path.join(configOptions.appDir, configOptions.runtimeDir, 'config.ts');
|
|
43
|
+
fse.ensureFileSync(fileDest);
|
|
44
|
+
fse.writeFileSync(fileDest, contentDest, 'utf-8');
|
|
45
|
+
}
|
|
46
|
+
async function __generateApp() {
|
|
47
|
+
const templates = [['app/bootstrap.ejs', 'bootstrap.ts'], ['app/app.ejs', 'app.ts']];
|
|
48
|
+
for (const [templateSrc, templateDest] of templates) {
|
|
49
|
+
const fileSrc = resolveTemplatePath(templateSrc);
|
|
50
|
+
const fileDest = path.join(configOptions.appDir, configOptions.runtimeDir, templateDest);
|
|
51
|
+
await fse.ensureDir(path.join(configOptions.appDir, configOptions.runtimeDir));
|
|
52
|
+
const vars = {
|
|
53
|
+
appMonkey: fse.existsSync(path.join(configOptions.appDir, 'src/backend/config/monkey.ts')),
|
|
54
|
+
};
|
|
55
|
+
await copyTemplateFile(fileSrc, fileDest, vars);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function __generateModulesMeta() {
|
|
59
|
+
// modules
|
|
60
|
+
const { modules, modulesArray } = modulesMeta;
|
|
61
|
+
const moduleNames = modulesArray.map(item => item.info.relativeName);
|
|
62
|
+
// src
|
|
63
|
+
const fileSrc = resolveTemplatePath('app/vona-modules-meta.ejs');
|
|
64
|
+
const fileDest = path.join(configOptions.appDir, configOptions.runtimeDir, 'modules-meta.ts');
|
|
65
|
+
await fse.ensureDir(path.join(configOptions.appDir, configOptions.runtimeDir));
|
|
66
|
+
await copyTemplateFile(fileSrc, fileDest, { modules, moduleNames });
|
|
67
|
+
}
|
|
68
|
+
async function __generateEnvJson() {
|
|
69
|
+
const contentDest = `export default ${JSON.stringify(env, null, 2)} as unknown as NodeJS.ProcessEnv;\n`;
|
|
70
|
+
// output
|
|
71
|
+
const fileDest = path.join(configOptions.appDir, configOptions.runtimeDir, 'env.ts');
|
|
72
|
+
fse.ensureFileSync(fileDest);
|
|
73
|
+
fse.writeFileSync(fileDest, contentDest, 'utf-8');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { VonaConfigMeta } from '@cabloy/module-info';
|
|
2
|
+
import type { VonaBinConfigOptions } from './types.ts';
|
|
3
|
+
export declare function generateVonaMeta(configMeta: VonaConfigMeta, configOptions: VonaBinConfigOptions): Promise<{
|
|
4
|
+
env: NodeJS.ProcessEnv;
|
|
5
|
+
modulesMeta: {
|
|
6
|
+
suites: Record<string, import("@cabloy/module-info").ISuite>;
|
|
7
|
+
modules: Record<string, import("@cabloy/module-info").IModule>;
|
|
8
|
+
modulesArray: import("@cabloy/module-info").IModule[];
|
|
9
|
+
};
|
|
10
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createConfigUtils } from "./configUtils.js";
|
|
2
|
+
import { generateEntryFiles } from "./generateEntryFiles.js";
|
|
3
|
+
export async function generateVonaMeta(configMeta, configOptions) {
|
|
4
|
+
// config utils
|
|
5
|
+
const configUtils = createConfigUtils(configMeta, configOptions);
|
|
6
|
+
// env
|
|
7
|
+
const env = configUtils.loadEnvs();
|
|
8
|
+
// modulesMeta
|
|
9
|
+
const modulesMeta = await configUtils.loadModulesMeta();
|
|
10
|
+
// generateEntryFiles
|
|
11
|
+
await generateEntryFiles(configMeta, configOptions, modulesMeta, env);
|
|
12
|
+
// ok
|
|
13
|
+
return {
|
|
14
|
+
env,
|
|
15
|
+
modulesMeta,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { createWriteStream } from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { run } from 'node:test';
|
|
5
|
+
import { sleep } from '@cabloy/utils';
|
|
6
|
+
import TableClass from 'cli-table3';
|
|
7
|
+
import fse from 'fs-extra';
|
|
8
|
+
import { globby } from 'globby';
|
|
9
|
+
import { lcov, tap } from 'node:test/reporters';
|
|
10
|
+
import { closeApp, createGeneralApp } from 'vona-core';
|
|
11
|
+
import whyIsNodeRunning from 'why-is-node-running';
|
|
12
|
+
import { resolveTemplatePath } from "../../utils.js";
|
|
13
|
+
const argv = process.argv.slice(2);
|
|
14
|
+
const projectPath = argv[0];
|
|
15
|
+
const coverage = argv[1] === 'true';
|
|
16
|
+
const patterns = (argv[2] || '').split(',');
|
|
17
|
+
await testRun(projectPath, coverage, patterns);
|
|
18
|
+
async function testRun(projectPath, coverage, patterns) {
|
|
19
|
+
// patterns ignore
|
|
20
|
+
const patternsIgnore = (!coverage && process.env.TEST_PATTERNS_IGNORE) ? process.env.TEST_PATTERNS_IGNORE.split(',') : undefined;
|
|
21
|
+
// files
|
|
22
|
+
const files = await globby(patterns, {
|
|
23
|
+
cwd: projectPath,
|
|
24
|
+
ignore: patternsIgnore,
|
|
25
|
+
});
|
|
26
|
+
if (process.env.TEST_ONLY === 'true') {
|
|
27
|
+
files.push(resolveTemplatePath('test/done-only.test.ts'));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
files.push(resolveTemplatePath('test/done.test.ts'));
|
|
31
|
+
}
|
|
32
|
+
// concurrency
|
|
33
|
+
let concurrency = 1;
|
|
34
|
+
if (process.env.TEST_CONCURRENCY === 'true') {
|
|
35
|
+
concurrency = os.cpus().length;
|
|
36
|
+
}
|
|
37
|
+
else if (process.env.TEST_CONCURRENCY === 'false') {
|
|
38
|
+
concurrency = 1;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
concurrency = Number.parseInt(process.env.TEST_CONCURRENCY);
|
|
42
|
+
}
|
|
43
|
+
// coverage
|
|
44
|
+
let coverageIncludeGlobs = [];
|
|
45
|
+
if (coverage) {
|
|
46
|
+
if (fse.existsSync(path.join(projectPath, 'packages-vona/vona-core'))) {
|
|
47
|
+
coverageIncludeGlobs = coverageIncludeGlobs.concat(['packages-vona/vona-core/**/*.ts', 'src/module-vendor/**/*.ts', 'src/suite-vendor/**/*.ts']);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
coverageIncludeGlobs = coverageIncludeGlobs.concat(['src/module/**/*.ts', 'src/suite/**/*.ts']);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const coverageExcludeGlobs = [
|
|
54
|
+
'src/module/*/cli/**/*.ts',
|
|
55
|
+
'src/module/*/templates/**/*.ts',
|
|
56
|
+
'src/suite/*/modules/*/cli/**/*.ts',
|
|
57
|
+
'src/suite/*/modules/*/templates/**/*.ts',
|
|
58
|
+
'src/module-vendor/*/cli/**/*.ts',
|
|
59
|
+
'src/module-vendor/*/templates/**/*.ts',
|
|
60
|
+
'src/suite-vendor/*/modules/*/cli/**/*.ts',
|
|
61
|
+
'src/suite-vendor/*/modules/*/templates/**/*.ts',
|
|
62
|
+
];
|
|
63
|
+
return new Promise(resolve => {
|
|
64
|
+
const testStream = run({
|
|
65
|
+
isolation: 'none',
|
|
66
|
+
concurrency,
|
|
67
|
+
only: process.env.TEST_ONLY === 'true',
|
|
68
|
+
coverage,
|
|
69
|
+
coverageIncludeGlobs,
|
|
70
|
+
coverageExcludeGlobs,
|
|
71
|
+
cwd: projectPath,
|
|
72
|
+
files,
|
|
73
|
+
setup: async () => {
|
|
74
|
+
await createGeneralApp(projectPath);
|
|
75
|
+
},
|
|
76
|
+
})
|
|
77
|
+
.on('test:coverage', data => {
|
|
78
|
+
outputCoverageReport(data.summary.totals);
|
|
79
|
+
})
|
|
80
|
+
.on('test:summary', async () => {
|
|
81
|
+
resolve(undefined);
|
|
82
|
+
})
|
|
83
|
+
.on('test:pass', async (t) => {
|
|
84
|
+
if (t.name === '---done---') {
|
|
85
|
+
await closeApp();
|
|
86
|
+
// handles
|
|
87
|
+
if (process.env.TEST_WHYISNODERUNNING === 'true') {
|
|
88
|
+
await sleep(2000);
|
|
89
|
+
const handles = process._getActiveHandles();
|
|
90
|
+
if (handles.length > 3) {
|
|
91
|
+
whyIsNodeRunning();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
if (coverage) {
|
|
97
|
+
const reporterDir = path.join(projectPath, 'coverage');
|
|
98
|
+
fse.ensureDirSync(reporterDir);
|
|
99
|
+
const reporter = createWriteStream(path.join(reporterDir, 'lcov.info'));
|
|
100
|
+
testStream.compose(lcov)
|
|
101
|
+
.pipe(reporter);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
testStream.compose(tap)
|
|
105
|
+
.pipe(process.stdout);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function outputCoverageReport(totals) {
|
|
110
|
+
// table
|
|
111
|
+
const table = new TableClass({
|
|
112
|
+
head: ['', 'Total', 'Covered', 'Percent'],
|
|
113
|
+
colWidths: [15, 15, 15, 25],
|
|
114
|
+
});
|
|
115
|
+
table.push(['Lines', totals.totalLineCount, totals.coveredLineCount, totals.coveredLinePercent]);
|
|
116
|
+
table.push(['Branches', totals.totalBranchCount, totals.coveredBranchCount, totals.coveredBranchPercent]);
|
|
117
|
+
table.push(['Functions', totals.totalFunctionCount, totals.coveredFunctionCount, totals.coveredFunctionPercent]);
|
|
118
|
+
// eslint-disable-next-line
|
|
119
|
+
console.log(table.toString());
|
|
120
|
+
}
|
|
121
|
+
;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { globBeanFiles } from "./utils.js";
|
|
2
|
+
export async function generateBeanGenerals(sceneName, sceneMeta, moduleName, modulePath) {
|
|
3
|
+
const globFiles = await globBeanFiles(sceneName, sceneMeta, moduleName, modulePath);
|
|
4
|
+
if (globFiles.length === 0)
|
|
5
|
+
return '';
|
|
6
|
+
//
|
|
7
|
+
const contentImports = [];
|
|
8
|
+
const contentRecords = [];
|
|
9
|
+
for (const globFile of globFiles) {
|
|
10
|
+
const { fileNameJSRelative, className, beanName, isIgnore } = globFile;
|
|
11
|
+
const beanFullName = `${moduleName}.${sceneName}.${beanName}`;
|
|
12
|
+
if (isIgnore)
|
|
13
|
+
continue;
|
|
14
|
+
if (!sceneMeta.scopeResource) {
|
|
15
|
+
contentImports.push(`import type { ${className} } from '${fileNameJSRelative}';`);
|
|
16
|
+
}
|
|
17
|
+
contentRecords.push(`'${beanFullName}': ${className};`);
|
|
18
|
+
}
|
|
19
|
+
if (contentRecords.length === 0)
|
|
20
|
+
return '';
|
|
21
|
+
// combine
|
|
22
|
+
const content = `/** ${sceneName}: begin */
|
|
23
|
+
${contentImports.join('\n')}
|
|
24
|
+
import 'vona';
|
|
25
|
+
declare module 'vona' {
|
|
26
|
+
export interface IBeanRecordGeneral {
|
|
27
|
+
${contentRecords.join('\n')}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** ${sceneName}: end */
|
|
31
|
+
`;
|
|
32
|
+
return content;
|
|
33
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { OnionScenesMeta } from '@cabloy/module-info';
|
|
2
|
+
export declare function generateBeans(onionScenesMeta: OnionScenesMeta, moduleName: string, modulePath: string): Promise<string>;
|
|
@@ -1,33 +1,51 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { toUpperCaseFirstChar } from '@cabloy/word-utils';
|
|
3
|
+
import { globby } from 'globby';
|
|
4
|
+
import { checkIgnoreOfParts, getScopeModuleName } from "./utils.js";
|
|
5
|
+
// todo: remove
|
|
6
|
+
export async function generateBeans(onionScenesMeta, moduleName, modulePath) {
|
|
7
|
+
const scopeModuleName = getScopeModuleName(moduleName);
|
|
8
|
+
// ignore
|
|
9
|
+
const ignore = Object.keys(onionScenesMeta).map(item => `**/${item}.*.ts`);
|
|
10
|
+
// files
|
|
11
|
+
const files = await globby('src/bean/*.ts', { ignore, cwd: modulePath });
|
|
6
12
|
if (files.length === 0)
|
|
7
13
|
return '';
|
|
8
14
|
files.sort();
|
|
9
15
|
const contentExports = [];
|
|
16
|
+
const contentScopes = [];
|
|
10
17
|
const contentImports = [];
|
|
11
18
|
const contentRecordsGlobal = [];
|
|
12
19
|
const contentRecordsGeneral = [];
|
|
13
20
|
for (const file of files) {
|
|
14
21
|
const fileName = path.basename(file);
|
|
22
|
+
if (fileName.startsWith('_'))
|
|
23
|
+
continue;
|
|
15
24
|
const parts = fileName.split('.').slice(0, -1);
|
|
16
25
|
if (parts.length < 2)
|
|
17
26
|
continue;
|
|
18
27
|
const isIgnore = checkIgnoreOfParts(parts);
|
|
19
28
|
const isBeanGlobal = parts[0] === 'bean';
|
|
20
|
-
const
|
|
21
|
-
|
|
29
|
+
// const sceneName = parts.slice(0, -1).join('.');
|
|
30
|
+
// const beanName = parts[parts.length - 1];
|
|
31
|
+
// const beanNameCapitalize = toUpperCaseFirstChar(beanName);
|
|
32
|
+
const fileNameJS = fileName; // fileName.replace('.ts', '.js');
|
|
33
|
+
const className = parts.map(item => toUpperCaseFirstChar(item)).join('');
|
|
22
34
|
const beanFullName = isBeanGlobal ? parts[1] : `${moduleName}.${parts.join('.')}`;
|
|
23
|
-
if (className === 'BeanBase')
|
|
24
|
-
className = 'BeanBase2';
|
|
25
35
|
contentExports.push(`export * from '../bean/${fileNameJS}';`);
|
|
26
|
-
|
|
36
|
+
// ignore virtual
|
|
37
|
+
contentScopes.push(`
|
|
38
|
+
export interface ${className} {
|
|
39
|
+
/** @internal */
|
|
40
|
+
get scope(): ${scopeModuleName};
|
|
41
|
+
}`);
|
|
42
|
+
if (isBeanGlobal || !isIgnore) {
|
|
43
|
+
contentImports.push(`import type { ${className} } from '../bean/${fileNameJS}';`);
|
|
44
|
+
}
|
|
27
45
|
if (isBeanGlobal && !isIgnore) {
|
|
28
46
|
contentRecordsGlobal.push(`'${beanFullName}': ${className};`);
|
|
29
47
|
}
|
|
30
|
-
|
|
48
|
+
if ((isBeanGlobal && isIgnore) || (!isBeanGlobal && !isIgnore)) {
|
|
31
49
|
contentRecordsGeneral.push(`'${beanFullName}': ${className};`);
|
|
32
50
|
}
|
|
33
51
|
}
|
|
@@ -43,18 +61,12 @@ declare module 'vona' {
|
|
|
43
61
|
|
|
44
62
|
export interface IBeanRecordGeneral {
|
|
45
63
|
${contentRecordsGeneral.join('\n')}
|
|
46
|
-
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
declare module 'vona-module-${moduleName}' {
|
|
67
|
+
${contentScopes.join('\n')}
|
|
47
68
|
}
|
|
48
69
|
/** beans: end */
|
|
49
70
|
`;
|
|
50
71
|
return content;
|
|
51
72
|
}
|
|
52
|
-
function checkIgnoreOfParts(parts) {
|
|
53
|
-
const indexLast = parts.length - 1;
|
|
54
|
-
if (parts[indexLast].endsWith('_')) {
|
|
55
|
-
parts[indexLast] = parts[indexLast].substring(0, parts[indexLast].length - 1);
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=generateBeans.js.map
|