paas-build-package 0.0.1

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 (106) hide show
  1. package/.editorconfig +13 -0
  2. package/.vscode/extensions.json +13 -0
  3. package/.vscode/settings.json +19 -0
  4. package/.vscode/tasks.json +158 -0
  5. package/LICENSE +21 -0
  6. package/README.md +1 -0
  7. package/lerna.json +8 -0
  8. package/package.json +37 -0
  9. package/packages/build/CHANGELOG.md +14 -0
  10. package/packages/build/LICENSE +21 -0
  11. package/packages/build/README.md +1 -0
  12. package/packages/build/build.config.ts +22 -0
  13. package/packages/build/eslint.config.js +8 -0
  14. package/packages/build/package.json +103 -0
  15. package/packages/build/prettier.config.js +3 -0
  16. package/packages/build/src/commitlint/commitlint-config/commitlint-config.ts +37 -0
  17. package/packages/build/src/commitlint/index.ts +1 -0
  18. package/packages/build/src/constants/index.ts +70 -0
  19. package/packages/build/src/eslint/eslint-config/eslint-config.ts +161 -0
  20. package/packages/build/src/eslint/index.ts +1 -0
  21. package/packages/build/src/index.ts +8 -0
  22. package/packages/build/src/prettier/index.ts +1 -0
  23. package/packages/build/src/prettier/prettier-config/prettier-config.ts +48 -0
  24. package/packages/build/src/stylelint/index.ts +1 -0
  25. package/packages/build/src/stylelint/stylelint-config/stylelint-config.ts +39 -0
  26. package/packages/build/src/types/index.d.ts +1 -0
  27. package/packages/build/src/unocss/index.ts +1 -0
  28. package/packages/build/src/unocss/unocss.config.ts +45 -0
  29. package/packages/build/src/util/env-state/env-state.ts +9 -0
  30. package/packages/build/src/util/index.ts +52 -0
  31. package/packages/build/src/util/reg-exp/reg-exp.ts +1 -0
  32. package/packages/build/src/util/watcher/watcher.ts +114 -0
  33. package/packages/build/src/vite/index.ts +13 -0
  34. package/packages/build/src/vite/vite-config/vite-base-config.ts +49 -0
  35. package/packages/build/src/vite/vite-config/vite-config.ts +74 -0
  36. package/packages/build/src/vite/vite-config/vite-dev-config.ts +26 -0
  37. package/packages/build/src/vite/vite-config/vite-pkg-dev-config.ts +123 -0
  38. package/packages/build/src/vite/vite-config/vite-plugin-config.ts +149 -0
  39. package/packages/build/src/vite/vite-config/vite-project-config.ts +82 -0
  40. package/packages/build/src/vite/vite-plugins/imnport-external-plugin.ts +21 -0
  41. package/packages/build/src/vite/vite-plugins/inject-importmap-plugin.ts +133 -0
  42. package/packages/build/tsconfig.json +32 -0
  43. package/packages/cli/CHANGELOG.md +20 -0
  44. package/packages/cli/LICENSE +21 -0
  45. package/packages/cli/README.md +1 -0
  46. package/packages/cli/build.config.ts +22 -0
  47. package/packages/cli/hbs-temp/api-config.ts.hbs +21 -0
  48. package/packages/cli/hbs-temp/apis/{{api}}.service.d.ts.hbs +39 -0
  49. package/packages/cli/hbs-temp/entities.d.ts.hbs +19 -0
  50. package/packages/cli/hbs-temp/index.d.ts.hbs +9 -0
  51. package/packages/cli/package.json +72 -0
  52. package/packages/cli/src/actions/gen-api/api-manage.ts +96 -0
  53. package/packages/cli/src/actions/gen-api/gen-api.ts +211 -0
  54. package/packages/cli/src/actions/gen-api/model-manage.ts +269 -0
  55. package/packages/cli/src/actions/gen-api/special-entities.config.ts +26 -0
  56. package/packages/cli/src/actions/gen-cdn-lib/gen-cdn-lib.ts +149 -0
  57. package/packages/cli/src/actions/index.ts +3 -0
  58. package/packages/cli/src/actions/init-git/init-git.ts +28 -0
  59. package/packages/cli/src/bin.ts +5 -0
  60. package/packages/cli/src/commands/gen-api/gen-api.ts +65 -0
  61. package/packages/cli/src/commands/gen-cdn-lib/gen-cdn-lib.ts +25 -0
  62. package/packages/cli/src/commands/index.ts +22 -0
  63. package/packages/cli/src/commands/init-git/init-git.ts +16 -0
  64. package/packages/cli/src/core/handlebars/constant/index.ts +4 -0
  65. package/packages/cli/src/core/handlebars/handlebars-engine.ts +143 -0
  66. package/packages/cli/src/core/handlebars/helpers/and/and.ts +24 -0
  67. package/packages/cli/src/core/handlebars/helpers/camel-case/camel-case.ts +23 -0
  68. package/packages/cli/src/core/handlebars/helpers/concat/concat.ts +20 -0
  69. package/packages/cli/src/core/handlebars/helpers/eq/eq.ts +27 -0
  70. package/packages/cli/src/core/handlebars/helpers/format-import/format-import.ts +46 -0
  71. package/packages/cli/src/core/handlebars/helpers/format-import-item/format-import-item.ts +67 -0
  72. package/packages/cli/src/core/handlebars/helpers/format-js-type/format-js-type.ts +50 -0
  73. package/packages/cli/src/core/handlebars/helpers/gt/gt.ts +27 -0
  74. package/packages/cli/src/core/handlebars/helpers/gte/gte.ts +27 -0
  75. package/packages/cli/src/core/handlebars/helpers/helper-base.ts +27 -0
  76. package/packages/cli/src/core/handlebars/helpers/includes/includes.ts +25 -0
  77. package/packages/cli/src/core/handlebars/helpers/index.ts +52 -0
  78. package/packages/cli/src/core/handlebars/helpers/json/json.ts +23 -0
  79. package/packages/cli/src/core/handlebars/helpers/lower-case/lower-case.ts +22 -0
  80. package/packages/cli/src/core/handlebars/helpers/lt/lt.ts +27 -0
  81. package/packages/cli/src/core/handlebars/helpers/lte/lte.ts +27 -0
  82. package/packages/cli/src/core/handlebars/helpers/neq/neq.ts +27 -0
  83. package/packages/cli/src/core/handlebars/helpers/not/not.ts +25 -0
  84. package/packages/cli/src/core/handlebars/helpers/not-includes/not-includes.ts +25 -0
  85. package/packages/cli/src/core/handlebars/helpers/or/or.ts +26 -0
  86. package/packages/cli/src/core/handlebars/helpers/pascal-case/pascal-case.ts +23 -0
  87. package/packages/cli/src/core/handlebars/helpers/snake-case/snake-case.ts +23 -0
  88. package/packages/cli/src/core/handlebars/helpers/spinal-case/spinal-case.ts +23 -0
  89. package/packages/cli/src/core/handlebars/helpers/upper-case/upper-case.ts +22 -0
  90. package/packages/cli/src/core/handlebars/index.ts +2 -0
  91. package/packages/cli/src/core/handlebars/utils/helper/helper.ts +67 -0
  92. package/packages/cli/src/core/handlebars/utils/index.ts +23 -0
  93. package/packages/cli/src/core/index.ts +2 -0
  94. package/packages/cli/src/core/interface/index.ts +4 -0
  95. package/packages/cli/src/index.ts +36 -0
  96. package/packages/cli/src/interface/i-command/i-command.ts +23 -0
  97. package/packages/cli/src/interface/i-gen-cdn-lib-options/i-gen-cdn-lib-options.ts +58 -0
  98. package/packages/cli/src/interface/index.ts +2 -0
  99. package/packages/cli/src/types/index.d.ts +1 -0
  100. package/packages/cli/src/utils/index.ts +4 -0
  101. package/packages/cli/src/utils/local-binaries/local-binaries.ts +16 -0
  102. package/packages/cli/tsconfig.json +32 -0
  103. package/pnpm-workspace.yaml +10 -0
  104. package/tsconfig.app.json +18 -0
  105. package/tsconfig.json +11 -0
  106. package/tsconfig.node.json +26 -0
@@ -0,0 +1,50 @@
1
+ import { IObject } from '../../../interface';
2
+ import { HelperBase } from '../helper-base';
3
+
4
+ /**
5
+ * 格式化导入
6
+ *
7
+ * @description 针对后台的 swagger 生成的 js 类型,进行对 js 的类型转换
8
+ * @export
9
+ * @class HelperFormatJsType
10
+ * @extends {HelperBase}
11
+ */
12
+ export class HelperFormatJsType extends HelperBase {
13
+ constructor() {
14
+ super('formatJsType');
15
+ }
16
+
17
+ onExecute(config: IObject): string {
18
+ if (!config) {
19
+ return 'unknown';
20
+ }
21
+ const { type, items: cfg, originalRef } = config;
22
+ const fieldType = type || originalRef;
23
+ if (!fieldType) {
24
+ return 'unknown';
25
+ }
26
+ if (fieldType === 'array') {
27
+ if (cfg) {
28
+ let type: string = cfg.type || cfg.originalRef;
29
+ if (type) {
30
+ if (type === 'integer') {
31
+ type = 'number';
32
+ } else if (type.startsWith('Triple«')) {
33
+ type = type.replace('Triple«', 'ITripleObject<').replace('»', '>');
34
+ }
35
+ } else {
36
+ type = 'unknown';
37
+ }
38
+ return type + '[]';
39
+ }
40
+ return 'unknown[]';
41
+ }
42
+ if (fieldType === 'integer') {
43
+ return 'number';
44
+ }
45
+ if (fieldType === 'object') {
46
+ return 'IObject';
47
+ }
48
+ return fieldType;
49
+ }
50
+ }
@@ -0,0 +1,27 @@
1
+ import * as Handlebars from 'handlebars';
2
+ import { gt } from 'lodash-es';
3
+ import { HelperUtil } from '../../utils';
4
+ import { HelperBase } from '../helper-base';
5
+
6
+ /**
7
+ * 大于
8
+ *
9
+ * @description 判断: word > word2, 用法: {{#gt word word2}}xxx{{else}}yyy{{/gt}}、{{gt word word2}} 返回值为 boolean 类型
10
+ * @export
11
+ * @class HelperGt
12
+ * @extends {HelperBase}
13
+ */
14
+ export class HelperGt extends HelperBase {
15
+ constructor() {
16
+ super('gt');
17
+ }
18
+
19
+ onExecute(
20
+ param: unknown,
21
+ param2: unknown,
22
+ options: Handlebars.HelperOptions,
23
+ ): string | boolean {
24
+ const bol = gt(param, param2);
25
+ return HelperUtil.handleJudgmentExecute(this, bol, options);
26
+ }
27
+ }
@@ -0,0 +1,27 @@
1
+ import * as Handlebars from 'handlebars';
2
+ import { gte } from 'lodash-es';
3
+ import { HelperUtil } from '../../utils';
4
+ import { HelperBase } from '../helper-base';
5
+
6
+ /**
7
+ * 大于等于
8
+ *
9
+ * @description 判断: word >= word2, 用法 {{#gte word word2}}xxx{{else}}yyy{{/gte}}、{{gte word word2}} 返回值为 boolean 类型
10
+ * @export
11
+ * @class HelperGte
12
+ * @extends {HelperBase}
13
+ */
14
+ export class HelperGte extends HelperBase {
15
+ constructor() {
16
+ super('gte');
17
+ }
18
+
19
+ onExecute(
20
+ param: unknown,
21
+ param2: unknown,
22
+ options: Handlebars.HelperOptions,
23
+ ): string | boolean {
24
+ const bol = gte(param, param2);
25
+ return HelperUtil.handleJudgmentExecute(this, bol, options);
26
+ }
27
+ }
@@ -0,0 +1,27 @@
1
+ import Handlebars from 'handlebars';
2
+
3
+ /**
4
+ * helper 基类
5
+ *
6
+ * @export
7
+ * @class HelperBase
8
+ */
9
+ export abstract class HelperBase {
10
+ /**
11
+ * Creates an instance of HelperBase.
12
+ *
13
+ * @param {string} tag 助手标识
14
+ */
15
+ constructor(tag: string) {
16
+ Handlebars.registerHelper(tag, this.onExecute);
17
+ }
18
+
19
+ /**
20
+ * 助手执行
21
+ *
22
+ * @abstract
23
+ * @param {...unknown[]} args
24
+ * @return {*} {(string | boolean)}
25
+ */
26
+ abstract onExecute(...args: unknown[]): string | boolean;
27
+ }
@@ -0,0 +1,25 @@
1
+ import { HelperUtil } from '../../utils';
2
+ import { HelperBase } from '../helper-base';
3
+
4
+ /**
5
+ * 字符串包含内容
6
+ *
7
+ * @description 判断: 'test'.includes('t'), 用法: {{#includes word word2}}xxx{{else}}yyy{{/includes}}、{{includes word word2}} 返回值为 boolean 类型
8
+ * @export
9
+ * @class HelperIncludes
10
+ * @extends {HelperBase}
11
+ */
12
+ export class HelperIncludes extends HelperBase {
13
+ constructor() {
14
+ super('includes');
15
+ }
16
+
17
+ onExecute(
18
+ param: string,
19
+ param2: string,
20
+ options: Handlebars.HelperOptions,
21
+ ): string | boolean {
22
+ const bol = param.includes(param2);
23
+ return HelperUtil.handleJudgmentExecute(this, bol, options);
24
+ }
25
+ }
@@ -0,0 +1,52 @@
1
+ import { HelperAnd } from './and/and';
2
+ import { HelperCamelCase } from './camel-case/camel-case';
3
+ import { HelperConcat } from './concat/concat';
4
+ import { HelperEq } from './eq/eq';
5
+ import { HelperFormatImport } from './format-import/format-import';
6
+ import { HelperFormatImportItem } from './format-import-item/format-import-item';
7
+ import { HelperFormatJsType } from './format-js-type/format-js-type';
8
+ import { HelperGt } from './gt/gt';
9
+ import { HelperGte } from './gte/gte';
10
+ import { HelperIncludes } from './includes/includes';
11
+ import { HelperJson } from './json/json';
12
+ import { HelperLowerCase } from './lower-case/lower-case';
13
+ import { HelperLt } from './lt/lt';
14
+ import { HelperLte } from './lte/lte';
15
+ import { HelperNeq } from './neq/neq';
16
+ import { HelperNotIncludes } from './not-includes/not-includes';
17
+ import { HelperNot } from './not/not';
18
+ import { HelperOr } from './or/or';
19
+ import { HelperPascalCase } from './pascal-case/pascal-case';
20
+ import { HelperSnakeCase } from './snake-case/snake-case';
21
+ import { HelperSpinalCase } from './spinal-case/spinal-case';
22
+ import { HelperUpperCase } from './upper-case/upper-case';
23
+
24
+ /**
25
+ * 安装自定义助手
26
+ *
27
+ * @export
28
+ */
29
+ export function installHelpers(): void {
30
+ new HelperAnd();
31
+ new HelperCamelCase();
32
+ new HelperConcat();
33
+ new HelperEq();
34
+ new HelperFormatImport();
35
+ new HelperFormatImportItem();
36
+ new HelperFormatJsType();
37
+ new HelperGt();
38
+ new HelperGte();
39
+ new HelperIncludes();
40
+ new HelperJson();
41
+ new HelperLowerCase();
42
+ new HelperLt();
43
+ new HelperLte();
44
+ new HelperNeq();
45
+ new HelperNot();
46
+ new HelperNotIncludes();
47
+ new HelperOr();
48
+ new HelperPascalCase();
49
+ new HelperSnakeCase();
50
+ new HelperSpinalCase();
51
+ new HelperUpperCase();
52
+ }
@@ -0,0 +1,23 @@
1
+ import { HelperBase } from '../helper-base';
2
+
3
+ /**
4
+ * json 转 string
5
+ *
6
+ * @description 用法 {{json xxx 2}},支持第二个参数传递格式化。效果: 将 json 对象转为 json 字符串
7
+ * @export
8
+ * @class HelperJson
9
+ * @extends {HelperBase}
10
+ */
11
+ export class HelperJson extends HelperBase {
12
+ constructor() {
13
+ super('jsonStringify');
14
+ }
15
+
16
+ onExecute(obj: Record<string, unknown> | unknown[], space: number): string {
17
+ return JSON.stringify(
18
+ obj,
19
+ null,
20
+ typeof space === 'number' ? space : undefined,
21
+ );
22
+ }
23
+ }
@@ -0,0 +1,22 @@
1
+ import { HelperBase } from '../helper-base';
2
+
3
+ /**
4
+ * 字符串转换小写
5
+ *
6
+ * @description 用法 {{lowerCase word}}, 效果: MyName => myname
7
+ * @export
8
+ * @class HelperLowerCase
9
+ * @extends {HelperBase}
10
+ */
11
+ export class HelperLowerCase extends HelperBase {
12
+ constructor() {
13
+ super('lowerCase');
14
+ }
15
+
16
+ onExecute(param: string): string {
17
+ if (!param) {
18
+ return '';
19
+ }
20
+ return param.toLowerCase();
21
+ }
22
+ }
@@ -0,0 +1,27 @@
1
+ import * as Handlebars from 'handlebars';
2
+ import { lt } from 'lodash-es';
3
+ import { HelperUtil } from '../../utils';
4
+ import { HelperBase } from '../helper-base';
5
+
6
+ /**
7
+ * 小于
8
+ *
9
+ * @description 判断: word < word2, 用法 {{#lt word word2}}xxx{{else}}yyy{{/lt}}、{{lt word word2}} 返回值为 boolean 类型
10
+ * @export
11
+ * @class HelperLt
12
+ * @extends {HelperBase}
13
+ */
14
+ export class HelperLt extends HelperBase {
15
+ constructor() {
16
+ super('lt');
17
+ }
18
+
19
+ onExecute(
20
+ param: unknown,
21
+ param2: unknown,
22
+ options: Handlebars.HelperOptions,
23
+ ): string | boolean {
24
+ const bol = lt(param, param2);
25
+ return HelperUtil.handleJudgmentExecute(this, bol, options);
26
+ }
27
+ }
@@ -0,0 +1,27 @@
1
+ import * as Handlebars from 'handlebars';
2
+ import { lte } from 'lodash-es';
3
+ import { HelperUtil } from '../../utils';
4
+ import { HelperBase } from '../helper-base';
5
+
6
+ /**
7
+ * 小于等于
8
+ *
9
+ * @description 判断: word <= word2, 用法 {{#lte word word2}}xxx{{else}}yyy{{/lte}}、{{lte word word2}} 返回值为 boolean 类型
10
+ * @export
11
+ * @class HelperLte
12
+ * @extends {HelperBase}
13
+ */
14
+ export class HelperLte extends HelperBase {
15
+ constructor() {
16
+ super('lte');
17
+ }
18
+
19
+ onExecute(
20
+ param: unknown,
21
+ param2: unknown,
22
+ options: Handlebars.HelperOptions,
23
+ ): string | boolean {
24
+ const bol = lte(param, param2);
25
+ return HelperUtil.handleJudgmentExecute(this, bol, options);
26
+ }
27
+ }
@@ -0,0 +1,27 @@
1
+ import * as Handlebars from 'handlebars';
2
+ import { eq } from 'lodash-es';
3
+ import { HelperUtil } from '../../utils';
4
+ import { HelperBase } from '../helper-base';
5
+
6
+ /**
7
+ * 不等于
8
+ *
9
+ * @description 判断: word !== word2, 用法 {{#neq word 'xxx'}}xxx{{else}}yyy{{/neq}}、{{neq word 'xxx'}} 返回值为 boolean 类型
10
+ * @export
11
+ * @class HelperNeq
12
+ * @extends {HelperBase}
13
+ */
14
+ export class HelperNeq extends HelperBase {
15
+ constructor() {
16
+ super('neq');
17
+ }
18
+
19
+ onExecute(
20
+ param: unknown,
21
+ param2: unknown,
22
+ options: Handlebars.HelperOptions,
23
+ ): string | boolean {
24
+ const bol = !eq(param, param2);
25
+ return HelperUtil.handleJudgmentExecute(this, bol, options);
26
+ }
27
+ }
@@ -0,0 +1,25 @@
1
+ import * as Handlebars from 'handlebars';
2
+ import { HelperUtil } from '../../utils';
3
+ import { HelperBase } from '../helper-base';
4
+
5
+ /**
6
+ * 参数不存在或者为空时返回 true
7
+ *
8
+ * @description 判断: 参数为 null、undefined、空字符串、空数组、空对象时返回 true, 用法: {{#not value}}xxx{{else}}yyy{{/not}}、{{not value}} 返回值为 boolean 类型
9
+ * @export
10
+ * @class HelperNot
11
+ * @extends {HelperBase}
12
+ */
13
+ export class HelperNot extends HelperBase {
14
+ constructor() {
15
+ super('not');
16
+ }
17
+
18
+ onExecute(
19
+ param: unknown,
20
+ options: Handlebars.HelperOptions,
21
+ ): string | boolean {
22
+ const bol = Handlebars.Utils.isEmpty(param);
23
+ return HelperUtil.handleJudgmentExecute(this, bol, options);
24
+ }
25
+ }
@@ -0,0 +1,25 @@
1
+ import { HelperUtil } from '../../utils';
2
+ import { HelperBase } from '../helper-base';
3
+
4
+ /**
5
+ * 字符串不包含内容
6
+ *
7
+ * @description 判断: !'test'.notIncludes('t'), 用法: {{#notIncludes word word2}}xxx{{else}}yyy{{/notIncludes}}、{{notIncludes word word2}} 返回值为 boolean 类型
8
+ * @export
9
+ * @class HelperNotIncludes
10
+ * @extends {HelperBase}
11
+ */
12
+ export class HelperNotIncludes extends HelperBase {
13
+ constructor() {
14
+ super('notIncludes');
15
+ }
16
+
17
+ onExecute(
18
+ param: string,
19
+ param2: string,
20
+ options: Handlebars.HelperOptions,
21
+ ): string | boolean {
22
+ const bol = !param.includes(param2);
23
+ return HelperUtil.handleJudgmentExecute(this, bol, options);
24
+ }
25
+ }
@@ -0,0 +1,26 @@
1
+ import { HelperBase } from '../helper-base';
2
+
3
+ /**
4
+ * 或者条件
5
+ *
6
+ * @description 判断: word word2 word3 其中任意一个值在判断中为 true, 用法 {{#or word word2 word3}}xxx{{else}}yyy{{/or}}、{{or word word2 word3}} 返回值为 boolean 类型
7
+ * @export
8
+ * @class HelperOr
9
+ * @extends {HelperBase}
10
+ */
11
+ export class HelperOr extends HelperBase {
12
+ constructor() {
13
+ super('or');
14
+ }
15
+
16
+ onExecute(...args: unknown[] | Handlebars.HelperOptions[]): string {
17
+ const options = args[args.length - 1] as Handlebars.HelperOptions;
18
+ args.pop();
19
+ const item = (args as unknown[]).find(itemArg => !!itemArg);
20
+ if (options.fn) {
21
+ const data = options.data?.root || {};
22
+ return item ? options.fn(data) : options.inverse(data);
23
+ }
24
+ return (item as string) || '';
25
+ }
26
+ }
@@ -0,0 +1,23 @@
1
+ import { upperFirst } from 'lodash-es';
2
+ import { HelperBase } from '../helper-base';
3
+
4
+ /**
5
+ * 首字母转大写
6
+ *
7
+ * @description 用法 {{pascalCase word}},效果: myName => MyName
8
+ * @export
9
+ * @class HelperPascalCase
10
+ * @extends {HelperBase}
11
+ */
12
+ export class HelperPascalCase extends HelperBase {
13
+ constructor() {
14
+ super('pascalCase');
15
+ }
16
+
17
+ onExecute(param: string): string {
18
+ if (!param) {
19
+ return '';
20
+ }
21
+ return upperFirst(param);
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ import { snakeCase } from 'lodash-es';
2
+ import { HelperBase } from '../helper-base';
3
+
4
+ /**
5
+ * 驼峰转蛇形命名法
6
+ *
7
+ * @description 用法 {{snakeCase word}},效果: myName => my_name
8
+ * @export
9
+ * @class HelperSnakeCase
10
+ * @extends {HelperBase}
11
+ */
12
+ export class HelperSnakeCase extends HelperBase {
13
+ constructor() {
14
+ super('snakeCase');
15
+ }
16
+
17
+ onExecute(param: string): string {
18
+ if (!param) {
19
+ return '';
20
+ }
21
+ return snakeCase(param);
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ import { kebabCase } from 'lodash-es';
2
+ import { HelperBase } from '../helper-base';
3
+
4
+ /**
5
+ * 驼峰命名法转为横线命名法
6
+ *
7
+ * @description 用法 {{spinalCase word}},效果: myName => my-name
8
+ * @export
9
+ * @class HelperSpinalCase
10
+ * @extends {HelperBase}
11
+ */
12
+ export class HelperSpinalCase extends HelperBase {
13
+ constructor() {
14
+ super('spinalCase');
15
+ }
16
+
17
+ onExecute(param: string): string {
18
+ if (!param) {
19
+ return '';
20
+ }
21
+ return kebabCase(param);
22
+ }
23
+ }
@@ -0,0 +1,22 @@
1
+ import { HelperBase } from '../helper-base';
2
+
3
+ /**
4
+ * 字符串转大写
5
+ *
6
+ * @description 用法 {{upperCase word}},效果: myName => MYNAME
7
+ * @export
8
+ * @class HelperUpCase
9
+ * @extends {HelperBase}
10
+ */
11
+ export class HelperUpperCase extends HelperBase {
12
+ constructor() {
13
+ super('upperCase');
14
+ }
15
+
16
+ onExecute(param: string): string {
17
+ if (!param) {
18
+ return '';
19
+ }
20
+ return param.toUpperCase();
21
+ }
22
+ }
@@ -0,0 +1,2 @@
1
+ export { HandlebarsEngine } from './handlebars-engine';
2
+ export * from './constant';
@@ -0,0 +1,67 @@
1
+ /**
2
+ * 助手工具类
3
+ *
4
+ * @export
5
+ * @class HelperUtil
6
+ */
7
+ export class HelperUtil {
8
+ /**
9
+ * 当前所有助手 tag 名称
10
+ *
11
+ * @protected
12
+ * @type {string[]}
13
+ */
14
+ protected static helperNames: string[] = [
15
+ 'lookup',
16
+ 'log',
17
+ 'and',
18
+ 'camelCase',
19
+ 'concat',
20
+ 'eq',
21
+ 'gt',
22
+ 'get',
23
+ 'lowerCase',
24
+ 'lt',
25
+ 'lte',
26
+ 'neq',
27
+ 'not',
28
+ 'or',
29
+ 'pascalCase',
30
+ 'pluralize',
31
+ 'snakeCase',
32
+ 'spinalCase',
33
+ 'upperCase',
34
+ ];
35
+
36
+ /**
37
+ * 判断字符串是否为助手
38
+ *
39
+ * @static
40
+ * @param {string} name
41
+ * @return {*} {boolean}
42
+ */
43
+ static isHelperName(name: string): boolean {
44
+ return this.helperNames.includes(name);
45
+ }
46
+
47
+ /**
48
+ * 判断类助手统一结果调用处理
49
+ *
50
+ * @static
51
+ * @param {unknown} context 执行上下文
52
+ * @param {boolean} bol 判断结果
53
+ * @param {Handlebars.HelperOptions} options
54
+ * @return {*} {(string | boolean)}
55
+ */
56
+ static handleJudgmentExecute(
57
+ context: unknown,
58
+ bol: boolean,
59
+ options: Handlebars.HelperOptions,
60
+ ): string | boolean {
61
+ if (options.fn) {
62
+ return bol ? options.fn(context) : options.inverse(context);
63
+ }
64
+
65
+ return bol ? (options.hash.yes = true) : (options.hash.no = false);
66
+ }
67
+ }
@@ -0,0 +1,23 @@
1
+ export { HelperUtil } from './helper/helper';
2
+
3
+ /**
4
+ * win 路径 \\ 转 linux 路径 /
5
+ *
6
+ * @export
7
+ * @param {string} path
8
+ * @return {*} {string}
9
+ */
10
+ export function winToUnixPath(path: string): string {
11
+ return path.replace(/\\/g, '/');
12
+ }
13
+
14
+ /**
15
+ * linux 路径 / 转 win 路径 \\
16
+ *
17
+ * @export
18
+ * @param {string} path
19
+ * @return {*} {string}
20
+ */
21
+ export function unixToWinPath(path: string): string {
22
+ return path.replace(/\//g, '\\');
23
+ }
@@ -0,0 +1,2 @@
1
+ export * from './handlebars';
2
+ export * from './interface';
@@ -0,0 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ // 全局对象类型
4
+ export type IObject = Record<string | symbol, any>;
@@ -0,0 +1,36 @@
1
+ import { program } from 'commander';
2
+ import { CommandLoader } from './commands';
3
+ import { loadLocalBinCommandLoader, localBinExists } from './utils';
4
+ import pkg from '../package.json' with { type: 'json' };
5
+
6
+ export async function bootstrap(): Promise<void> {
7
+ // 监控 ctrl + c 停止进程,触发 exit 事件
8
+ process.on('SIGINT', () => {
9
+ process.exit();
10
+ });
11
+ // 初始化命令行
12
+ program
13
+ .version(pkg.version, '-v, --version', '查看当前版本')
14
+ .usage('<command> [options]')
15
+ .helpOption('-h, --help', '获取帮助信息')
16
+ .configureOutput({
17
+ // Visibly override write routines as example!
18
+ writeErr: str => process.stdout.write(`[ERR] ${str}`),
19
+ // Highlight errors in color.
20
+ outputError: (str, write) => write(`\x1b[31m${str}\x1b[0m`),
21
+ });
22
+
23
+ if (localBinExists()) {
24
+ const localCommandLoader = loadLocalBinCommandLoader();
25
+ localCommandLoader.load(program);
26
+ } else {
27
+ CommandLoader.load(program);
28
+ }
29
+ program.parse(process.argv);
30
+
31
+ if (!process.argv.slice(2).length) {
32
+ program.outputHelp();
33
+ }
34
+ }
35
+
36
+ export * from './core';