feng3d-cli 0.0.1 → 0.0.3

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 (46) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +148 -148
  3. package/dist/cli.js +10 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/create.d.ts.map +1 -1
  6. package/dist/commands/create.js +13 -6
  7. package/dist/commands/create.js.map +1 -1
  8. package/dist/commands/oss.d.ts.map +1 -1
  9. package/dist/commands/oss.js +26 -1
  10. package/dist/commands/oss.js.map +1 -1
  11. package/dist/commands/update.d.ts +10 -0
  12. package/dist/commands/update.d.ts.map +1 -1
  13. package/dist/commands/update.js +444 -134
  14. package/dist/commands/update.js.map +1 -1
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/templates.d.ts +79 -27
  20. package/dist/templates.d.ts.map +1 -1
  21. package/dist/templates.js +147 -140
  22. package/dist/templates.js.map +1 -1
  23. package/dist/types/config.d.ts +111 -0
  24. package/dist/types/config.d.ts.map +1 -0
  25. package/dist/types/config.js +50 -0
  26. package/dist/types/config.js.map +1 -0
  27. package/dist/versions.d.ts +2 -0
  28. package/dist/versions.d.ts.map +1 -1
  29. package/dist/versions.js +6 -0
  30. package/dist/versions.js.map +1 -1
  31. package/package.json +81 -64
  32. package/schemas/feng3d.schema.json +191 -0
  33. package/templates/.cursorrules +159 -79
  34. package/templates/.github/workflows/pages.yml +60 -0
  35. package/templates/.github/workflows/publish.yml +128 -0
  36. package/templates/.github/workflows/pull-request.yml +31 -0
  37. package/templates/.husky/pre-commit +2 -0
  38. package/templates/.vscode/settings.json +10 -0
  39. package/templates/LICENSE +15 -0
  40. package/templates/eslint.config.js +159 -0
  41. package/templates/feng3d.json +42 -0
  42. package/templates/gitignore +23 -0
  43. package/templates/test/_.test.ts +5 -0
  44. package/templates/tsconfig.json +20 -0
  45. package/templates/typedoc.json +8 -0
  46. package/templates/vitest.config.ts +8 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7D,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -5,5 +5,6 @@
5
5
  export { eslintConfig, createEslintConfig } from './eslint.js';
6
6
  export { VERSIONS, getDevDependencies } from './versions.js';
7
7
  export * from './templates.js';
8
+ export * from './types/config.js';
8
9
  export { ossUploadDir } from './commands/oss.js';
9
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7D,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -2,43 +2,95 @@
2
2
  * 项目模板文件内容
3
3
  */
4
4
  /**
5
- * .gitignore 模板
5
+ * 获取 .gitignore 模板内容
6
6
  */
7
- export declare const gitignoreTemplate = "node_modules\ndist\nlib\npublic\nout\n/package-lock.json\n# \u81EA\u52A8\u751F\u6210\u7684\u6D4B\u8BD5\u914D\u7F6E\u6587\u4EF6\n**/test-config.ts\n# \u6D4B\u8BD5\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55\ntest_dist\n# \u6D4B\u8BD5\u8986\u76D6\u7387\ncoverage\n";
7
+ export declare function getGitignoreTemplate(): string;
8
8
  /**
9
- * .cursorrules 模板
9
+ * 获取 .cursorrules 模板内容
10
10
  */
11
- export declare const cursorrrulesTemplate = "# Cursor \u9879\u76EE\u89C4\u5219\n\n## Git \u63D0\u4EA4\u4FE1\u606F\u89C4\u8303\n\n\u5F53\u751F\u6210 Git \u63D0\u4EA4\u4FE1\u606F\u65F6\uFF1A\n\n1. **\u8BED\u8A00**\uFF1A\u59CB\u7EC8\u4F7F\u7528\u7B80\u4F53\u4E2D\u6587\n\n2. **\u683C\u5F0F**\uFF1A\u9075\u5FAA\u7EA6\u5B9A\u5F0F\u63D0\u4EA4\uFF08Conventional Commits\uFF09\u683C\u5F0F\n ```\n <\u7C7B\u578B>(<\u8303\u56F4>): <\u7B80\u77ED\u63CF\u8FF0>\n\n [\u53EF\u9009\u7684\u8BE6\u7EC6\u8BF4\u660E]\n\n [\u53EF\u9009\u7684\u811A\u6CE8]\n ```\n\n3. **\u63D0\u4EA4\u7C7B\u578B**\uFF08\u4E2D\u6587\u63CF\u8FF0\uFF09\uFF1A\n - `feat`: \u65B0\u589E\u529F\u80FD\n - `fix`: \u4FEE\u590D\u95EE\u9898\n - `refactor`: \u4EE3\u7801\u91CD\u6784\uFF08\u4E0D\u6539\u53D8\u529F\u80FD\uFF09\n - `perf`: \u6027\u80FD\u4F18\u5316\n - `style`: \u4EE3\u7801\u683C\u5F0F\u8C03\u6574\uFF08\u4E0D\u5F71\u54CD\u4EE3\u7801\u542B\u4E49\uFF09\n - `docs`: \u6587\u6863\u66F4\u65B0\n - `test`: \u6D4B\u8BD5\u76F8\u5173\n - `chore`: \u6784\u5EFA\u8FC7\u7A0B\u6216\u8F85\u52A9\u5DE5\u5177\u7684\u53D8\u52A8\n - `build`: \u6784\u5EFA\u7CFB\u7EDF\u6216\u5916\u90E8\u4F9D\u8D56\u9879\u7684\u66F4\u6539\n - `ci`: CI \u914D\u7F6E\u6587\u4EF6\u548C\u811A\u672C\u7684\u66F4\u6539\n\n4. **\u8303\u56F4**\uFF08\u53EF\u9009\uFF09\uFF1A\u53EF\u4EE5\u662F\u6A21\u5757\u3001\u7EC4\u4EF6\u6216\u529F\u80FD\u533A\u57DF\n\n5. **\u63D0\u4EA4\u4FE1\u606F\u8981\u6C42**\uFF1A\n - \u7B2C\u4E00\u884C\u7B80\u77ED\u63CF\u8FF0\uFF0C\u4E0D\u8D85\u8FC7 50 \u4E2A\u5B57\u7B26\n - \u4F7F\u7528\u7948\u4F7F\u53E5\uFF0C\u5982\"\u6DFB\u52A0\"\u3001\"\u4FEE\u590D\"\u3001\"\u4F18\u5316\"\n - \u63CF\u8FF0\u8981\u6E05\u6670\u3001\u5177\u4F53\u3001\u6709\u610F\u4E49\n\n## \u4EE3\u7801\u98CE\u683C\n\n- \u4F18\u5148\u4F7F\u7528 TypeScript\n- \u9075\u5FAA\u73B0\u6709\u4EE3\u7801\u7684\u547D\u540D\u7EA6\u5B9A\u548C\u683C\u5F0F\n- \u6DFB\u52A0\u5FC5\u8981\u7684\u4E2D\u6587\u6CE8\u91CA\u4EE5\u63D0\u9AD8\u4EE3\u7801\u53EF\u8BFB\u6027\n- \u4F7F\u7528 ESLint \u4FDD\u6301\u4EE3\u7801\u683C\u5F0F\u4E00\u81F4\n- \u63D0\u4EA4\u524D\u5FC5\u987B\u901A\u8FC7 lint \u68C0\u67E5\n- \u907F\u514D\u4F7F\u7528 `any` \u7C7B\u578B\uFF0C\u4F18\u5148\u4F7F\u7528\u660E\u786E\u7684\u7C7B\u578B\u5B9A\u4E49\n\n## \u547D\u540D\u89C4\u8303\n\n- **\u53D8\u91CF\u548C\u51FD\u6570**\uFF1A\u4F7F\u7528\u9A7C\u5CF0\u547D\u540D\uFF08camelCase\uFF09\n- **\u7C7B\u548C\u63A5\u53E3**\uFF1A\u4F7F\u7528\u5E15\u65AF\u5361\u547D\u540D\uFF08PascalCase\uFF09\n- **\u5E38\u91CF**\uFF1A\u4F7F\u7528\u5168\u5927\u5199\u4E0B\u5212\u7EBF\u5206\u9694\uFF08UPPER_SNAKE_CASE\uFF09\n- **\u6587\u4EF6\u540D**\uFF1A\u4F7F\u7528\u5C0F\u5199\u5B57\u6BCD\u548C\u8FDE\u5B57\u7B26\uFF08kebab-case\uFF09\u6216\u4E0E\u5BFC\u51FA\u7684\u4E3B\u8981\u7C7B/\u51FD\u6570\u540C\u540D\n\n## \u6CE8\u91CA\u89C4\u8303\n\n- \u516C\u5171 API \u5FC5\u987B\u6DFB\u52A0 JSDoc \u6CE8\u91CA\n- \u590D\u6742\u903B\u8F91\u5FC5\u987B\u6DFB\u52A0\u4E2D\u6587\u6CE8\u91CA\u8BF4\u660E\n- \u4E34\u65F6\u89E3\u51B3\u65B9\u6848\u6216\u5F85\u4F18\u5316\u4EE3\u7801\u5FC5\u987B\u6DFB\u52A0 TODO \u6CE8\u91CA\n- \u6CE8\u91CA\u5E94\u8BE5\u89E3\u91CA\"\u4E3A\u4EC0\u4E48\"\u800C\u4E0D\u662F\"\u662F\u4EC0\u4E48\"\n\n## \u6A21\u5757\u7ED3\u6784\n\n- \u907F\u514D\u4F7F\u7528\u9ED8\u8BA4\u5BFC\u51FA\uFF0C\u4F18\u5148\u4F7F\u7528\u547D\u540D\u5BFC\u51FA\n- \u6BCF\u4E2A\u6587\u4EF6\u5E94\u8BE5\u6709\u4E00\u4E2A\u660E\u786E\u7684\u804C\u8D23\n- \u6BCF\u4E2A\u6587\u4EF6\u5E94\u8BE5\u4E0D\u8D85\u8FC7 300 \u884C\u4EE3\u7801\n- \u76F8\u5173\u529F\u80FD\u5E94\u8BE5\u7EC4\u7EC7\u5728\u540C\u4E00\u4E2A\u76EE\u5F55\u4E0B\n\n## \u6D4B\u8BD5\u89C4\u8303\n\n- \u65B0\u529F\u80FD\u5FC5\u987B\u5305\u542B\u76F8\u5E94\u7684\u6D4B\u8BD5\n- \u4FEE\u590D bug \u65F6\u5FC5\u987B\u6DFB\u52A0\u56DE\u5F52\u6D4B\u8BD5\n- \u6D4B\u8BD5\u8986\u76D6\u7387\u5E94\u8BE5\u4FDD\u6301\u5728\u5408\u7406\u6C34\u5E73\uFF08\u5EFA\u8BAE > 80%\uFF09\n- \u6D4B\u8BD5\u5E94\u8BE5\u6E05\u6670\u3001\u72EC\u7ACB\u3001\u53EF\u91CD\u590D\n\n## Agent \u89C4\u5219\n\n- \u6CA1\u6709\u6B63\u786E\u4FEE\u590D\u95EE\u9898\u65F6\u91CD\u65B0\u4FEE\u590D\u65F6\uFF0C\u5C3D\u91CF\u8FD8\u539F\u4E0A\u6B21\u4FEE\u6539\u7684\u5185\u5BB9\u540E\u518D\u8FDB\u884C\u4FEE\u590D\n- \u6BCF\u6B21\u5B8C\u6210\u4EE3\u7801\u4FEE\u6539\u540E\uFF0C\u5FC5\u987B\u68C0\u67E5\u5E76\u5904\u7406\u7F16\u8BD1\u9519\u8BEF\n- \u786E\u4FDD\u6240\u6709\u6D4B\u8BD5\u901A\u8FC7\u540E\u518D\u544A\u77E5\u7528\u6237\u4EFB\u52A1\u5B8C\u6210\n";
11
+ export declare function getCursorrrulesTemplate(): string;
12
12
  /**
13
- * tsconfig.json 模板
13
+ * 获取 tsconfig.json 模板内容(对象形式)
14
14
  */
15
- export declare const tsconfigTemplate: {
16
- compilerOptions: {
17
- target: string;
18
- module: string;
19
- noImplicitAny: boolean;
20
- sourceMap: boolean;
21
- declarationMap: boolean;
22
- declaration: boolean;
23
- experimentalDecorators: boolean;
24
- emitDeclarationOnly: boolean;
25
- skipLibCheck: boolean;
26
- esModuleInterop: boolean;
27
- downlevelIteration: boolean;
28
- lib: string[];
29
- outDir: string;
30
- };
31
- include: string[];
32
- };
15
+ export declare function getTsconfigTemplate(): object;
33
16
  /**
34
- * vitest.config.ts 模板
17
+ * 获取 tsconfig.json 模板内容(字符串形式)
35
18
  */
36
- export declare const vitestConfigTemplate = "import { defineConfig } from 'vitest/config';\n\nexport default defineConfig({\n test: {\n testTimeout: 0,\n },\n});\n";
19
+ export declare function getTsconfigTemplateString(): string;
37
20
  /**
38
- * typedoc.json 模板
21
+ * 获取 vitest.config.ts 模板内容
39
22
  */
40
- export declare function createTypedocConfig(options: {
23
+ export declare function getVitestConfigTemplate(): string;
24
+ /**
25
+ * 获取 eslint.config.js 模板内容
26
+ */
27
+ export declare function getEslintConfigTemplate(): string;
28
+ /**
29
+ * 获取 typedoc.json 模板内容(返回对象)
30
+ */
31
+ export declare function getTypedocConfig(options: {
41
32
  name: string;
42
33
  repoName: string;
43
34
  }): object;
35
+ /**
36
+ * 获取 typedoc.json 模板内容(返回字符串)
37
+ */
38
+ export declare function getTypedocConfigTemplate(options: {
39
+ name: string;
40
+ repoName: string;
41
+ }): string;
42
+ /**
43
+ * 获取 test/_.test.ts 模板内容(空文件占位)
44
+ */
45
+ export declare function getTestIndexTemplate(_options: {
46
+ name: string;
47
+ }): string;
48
+ /**
49
+ * 获取 GitHub Actions publish workflow 模板内容
50
+ */
51
+ export declare function getPublishWorkflowTemplate(): string;
52
+ /**
53
+ * 获取 GitHub Actions pages workflow 模板内容
54
+ */
55
+ export declare function getPagesWorkflowTemplate(): string;
56
+ /**
57
+ * 获取 GitHub Actions pull-request workflow 模板内容
58
+ */
59
+ export declare function getPullRequestWorkflowTemplate(): string;
60
+ /**
61
+ * 获取 .husky/pre-commit 模板内容
62
+ */
63
+ export declare function getHuskyPreCommitTemplate(): string;
64
+ /**
65
+ * 获取 LICENSE 模板内容
66
+ */
67
+ export declare function getLicenseTemplate(ctx?: {
68
+ year?: number;
69
+ }): string;
70
+ /**
71
+ * 获取 .vscode/settings.json 模板内容
72
+ */
73
+ export declare function getVscodeSettingsTemplate(): string;
74
+ /**
75
+ * 检测可用的 schema 路径
76
+ * 优先级:当前项目 -> 依赖目录
77
+ */
78
+ export declare function detectSchemaPath(projectDir: string): string;
79
+ /**
80
+ * 获取 feng3d.json 模板内容
81
+ */
82
+ export declare function getFeng3dConfigTemplate(options: {
83
+ name: string;
84
+ schemaPath?: string;
85
+ }): object;
86
+ /** @deprecated 请使用 getGitignoreTemplate() 函数 */
87
+ export declare const gitignoreTemplate: string;
88
+ /** @deprecated 请使用 getCursorrrulesTemplate() 函数 */
89
+ export declare const cursorrrulesTemplate: string;
90
+ /** @deprecated 请使用 getTsconfigTemplate() 函数 */
91
+ export declare const tsconfigTemplate: object;
92
+ /** @deprecated 请使用 getVitestConfigTemplate() 函数 */
93
+ export declare const vitestConfigTemplate: string;
94
+ /** @deprecated 请使用 getTypedocConfig() 函数 */
95
+ export declare const createTypedocConfig: typeof getTypedocConfig;
44
96
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,mQAY7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,4zIA8EhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAiB5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,wIAOhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAST"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAGlD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAGT;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAOT;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAGvE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAGnD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAGjD;AAED;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAGvD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAGlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAMtE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAGlD;AAUD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAc3D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAa9F;AAGD,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,QAAyB,CAAC;AACxD,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,QAA4B,CAAC;AAC9D,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,QAAwB,CAAC;AACtD,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,QAA4B,CAAC;AAC9D,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,yBAAmB,CAAC"}
package/dist/templates.js CHANGED
@@ -1,146 +1,153 @@
1
1
  /**
2
2
  * 项目模板文件内容
3
3
  */
4
+ import fs from 'fs-extra';
5
+ import path from 'path';
6
+ import { fileURLToPath } from 'url';
4
7
  /**
5
- * .gitignore 模板
6
- */
7
- export const gitignoreTemplate = `node_modules
8
- dist
9
- lib
10
- public
11
- out
12
- /package-lock.json
13
- # 自动生成的测试配置文件
14
- **/test-config.ts
15
- # 测试构建输出目录
16
- test_dist
17
- # 测试覆盖率
18
- coverage
19
- `;
20
- /**
21
- * .cursorrules 模板
22
- */
23
- export const cursorrrulesTemplate = `# Cursor 项目规则
24
-
25
- ## Git 提交信息规范
26
-
27
- 当生成 Git 提交信息时:
28
-
29
- 1. **语言**:始终使用简体中文
30
-
31
- 2. **格式**:遵循约定式提交(Conventional Commits)格式
32
- \`\`\`
33
- <类型>(<范围>): <简短描述>
34
-
35
- [可选的详细说明]
36
-
37
- [可选的脚注]
38
- \`\`\`
39
-
40
- 3. **提交类型**(中文描述):
41
- - \`feat\`: 新增功能
42
- - \`fix\`: 修复问题
43
- - \`refactor\`: 代码重构(不改变功能)
44
- - \`perf\`: 性能优化
45
- - \`style\`: 代码格式调整(不影响代码含义)
46
- - \`docs\`: 文档更新
47
- - \`test\`: 测试相关
48
- - \`chore\`: 构建过程或辅助工具的变动
49
- - \`build\`: 构建系统或外部依赖项的更改
50
- - \`ci\`: CI 配置文件和脚本的更改
51
-
52
- 4. **范围**(可选):可以是模块、组件或功能区域
53
-
54
- 5. **提交信息要求**:
55
- - 第一行简短描述,不超过 50 个字符
56
- - 使用祈使句,如"添加"、"修复"、"优化"
57
- - 描述要清晰、具体、有意义
58
-
59
- ## 代码风格
60
-
61
- - 优先使用 TypeScript
62
- - 遵循现有代码的命名约定和格式
63
- - 添加必要的中文注释以提高代码可读性
64
- - 使用 ESLint 保持代码格式一致
65
- - 提交前必须通过 lint 检查
66
- - 避免使用 \`any\` 类型,优先使用明确的类型定义
67
-
68
- ## 命名规范
69
-
70
- - **变量和函数**:使用驼峰命名(camelCase)
71
- - **类和接口**:使用帕斯卡命名(PascalCase)
72
- - **常量**:使用全大写下划线分隔(UPPER_SNAKE_CASE)
73
- - **文件名**:使用小写字母和连字符(kebab-case)或与导出的主要类/函数同名
74
-
75
- ## 注释规范
76
-
77
- - 公共 API 必须添加 JSDoc 注释
78
- - 复杂逻辑必须添加中文注释说明
79
- - 临时解决方案或待优化代码必须添加 TODO 注释
80
- - 注释应该解释"为什么"而不是"是什么"
81
-
82
- ## 模块结构
83
-
84
- - 避免使用默认导出,优先使用命名导出
85
- - 每个文件应该有一个明确的职责
86
- - 每个文件应该不超过 300 行代码
87
- - 相关功能应该组织在同一个目录下
88
-
89
- ## 测试规范
90
-
91
- - 新功能必须包含相应的测试
92
- - 修复 bug 时必须添加回归测试
93
- - 测试覆盖率应该保持在合理水平(建议 > 80%)
94
- - 测试应该清晰、独立、可重复
95
-
96
- ## Agent 规则
97
-
98
- - 没有正确修复问题时重新修复时,尽量还原上次修改的内容后再进行修复
99
- - 每次完成代码修改后,必须检查并处理编译错误
100
- - 确保所有测试通过后再告知用户任务完成
101
- `;
102
- /**
103
- * tsconfig.json 模板
104
- */
105
- export const tsconfigTemplate = {
106
- compilerOptions: {
107
- target: 'ES5',
108
- module: 'CommonJS',
109
- noImplicitAny: false,
110
- sourceMap: true,
111
- declarationMap: true,
112
- declaration: true,
113
- experimentalDecorators: true,
114
- emitDeclarationOnly: true,
115
- skipLibCheck: true,
116
- esModuleInterop: true,
117
- downlevelIteration: true,
118
- lib: ['ES2015', 'ES2017', 'ES2020', 'DOM'],
119
- outDir: 'lib',
120
- },
121
- include: ['src/**/*.ts'],
122
- };
123
- /**
124
- * vitest.config.ts 模板
125
- */
126
- export const vitestConfigTemplate = `import { defineConfig } from 'vitest/config';
127
-
128
- export default defineConfig({
129
- test: {
130
- testTimeout: 0,
131
- },
132
- });
133
- `;
134
- /**
135
- * typedoc.json 模板
136
- */
137
- export function createTypedocConfig(options) {
138
- return {
139
- name: options.name,
140
- $schema: 'https://typedoc.org/schema.json',
141
- entryPoints: ['src/index.ts'],
142
- sourceLinkTemplate: `https://github.com/feng3d-labs/${options.repoName}/tree/master/{path}#L{line}`,
143
- out: 'public/docs',
144
- };
8
+ * 模板目录路径
9
+ */
10
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
11
+ const TEMPLATES_DIR = path.resolve(__dirname, '../templates');
12
+ /**
13
+ * 获取 .gitignore 模板内容
14
+ */
15
+ export function getGitignoreTemplate() {
16
+ // 模板文件命名为 gitignore(不带点),避免对 templates 目录生效
17
+ return fs.readFileSync(path.join(TEMPLATES_DIR, 'gitignore'), 'utf-8');
18
+ }
19
+ /**
20
+ * 获取 .cursorrules 模板内容
21
+ */
22
+ export function getCursorrrulesTemplate() {
23
+ return fs.readFileSync(path.join(TEMPLATES_DIR, '.cursorrules'), 'utf-8');
24
+ }
25
+ /**
26
+ * 获取 tsconfig.json 模板内容(对象形式)
27
+ */
28
+ export function getTsconfigTemplate() {
29
+ return fs.readJsonSync(path.join(TEMPLATES_DIR, 'tsconfig.json'));
30
+ }
31
+ /**
32
+ * 获取 tsconfig.json 模板内容(字符串形式)
33
+ */
34
+ export function getTsconfigTemplateString() {
35
+ return fs.readFileSync(path.join(TEMPLATES_DIR, 'tsconfig.json'), 'utf-8');
36
+ }
37
+ /**
38
+ * 获取 vitest.config.ts 模板内容
39
+ */
40
+ export function getVitestConfigTemplate() {
41
+ return fs.readFileSync(path.join(TEMPLATES_DIR, 'vitest.config.ts'), 'utf-8');
42
+ }
43
+ /**
44
+ * 获取 eslint.config.js 模板内容
45
+ */
46
+ export function getEslintConfigTemplate() {
47
+ return fs.readFileSync(path.join(TEMPLATES_DIR, 'eslint.config.js'), 'utf-8');
48
+ }
49
+ /**
50
+ * 获取 typedoc.json 模板内容(返回对象)
51
+ */
52
+ export function getTypedocConfig(options) {
53
+ return JSON.parse(getTypedocConfigTemplate(options));
54
+ }
55
+ /**
56
+ * 获取 typedoc.json 模板内容(返回字符串)
57
+ */
58
+ export function getTypedocConfigTemplate(options) {
59
+ const templateContent = fs.readFileSync(path.join(TEMPLATES_DIR, 'typedoc.json'), 'utf-8');
60
+ return templateContent
61
+ .replace(/\{\{name\}\}/g, options.name)
62
+ .replace(/\{\{repoName\}\}/g, options.repoName);
63
+ }
64
+ /**
65
+ * 获取 test/_.test.ts 模板内容(空文件占位)
66
+ */
67
+ export function getTestIndexTemplate(_options) {
68
+ return fs.readFileSync(path.join(TEMPLATES_DIR, 'test/_.test.ts'), 'utf-8');
69
+ }
70
+ /**
71
+ * 获取 GitHub Actions publish workflow 模板内容
72
+ */
73
+ export function getPublishWorkflowTemplate() {
74
+ return fs.readFileSync(path.join(TEMPLATES_DIR, '.github/workflows/publish.yml'), 'utf-8');
75
+ }
76
+ /**
77
+ * 获取 GitHub Actions pages workflow 模板内容
78
+ */
79
+ export function getPagesWorkflowTemplate() {
80
+ return fs.readFileSync(path.join(TEMPLATES_DIR, '.github/workflows/pages.yml'), 'utf-8');
81
+ }
82
+ /**
83
+ * 获取 GitHub Actions pull-request workflow 模板内容
84
+ */
85
+ export function getPullRequestWorkflowTemplate() {
86
+ return fs.readFileSync(path.join(TEMPLATES_DIR, '.github/workflows/pull-request.yml'), 'utf-8');
87
+ }
88
+ /**
89
+ * 获取 .husky/pre-commit 模板内容
90
+ */
91
+ export function getHuskyPreCommitTemplate() {
92
+ return fs.readFileSync(path.join(TEMPLATES_DIR, '.husky/pre-commit'), 'utf-8');
93
+ }
94
+ /**
95
+ * 获取 LICENSE 模板内容
96
+ */
97
+ export function getLicenseTemplate(ctx = {}) {
98
+ const year = ctx.year || new Date().getFullYear();
99
+ const template = fs.readFileSync(path.join(TEMPLATES_DIR, 'LICENSE'), 'utf-8');
100
+ return template.replace('{{year}}', String(year));
101
+ }
102
+ /**
103
+ * 获取 .vscode/settings.json 模板内容
104
+ */
105
+ export function getVscodeSettingsTemplate() {
106
+ return fs.readFileSync(path.join(TEMPLATES_DIR, '.vscode/settings.json'), 'utf-8');
107
+ }
108
+ /**
109
+ * 可能的 schema 路径列表(按优先级排序)
110
+ */
111
+ const SCHEMA_PATHS = [
112
+ './schemas/feng3d.schema.json',
113
+ './node_modules/feng3d-cli/schemas/feng3d.schema.json',
114
+ ];
115
+ /**
116
+ * 检测可用的 schema 路径
117
+ * 优先级:当前项目 -> 依赖目录
118
+ */
119
+ export function detectSchemaPath(projectDir) {
120
+ for (const schemaPath of SCHEMA_PATHS) {
121
+ const fullPath = path.join(projectDir, schemaPath);
122
+ if (fs.existsSync(fullPath)) {
123
+ return schemaPath;
124
+ }
125
+ }
126
+ // 默认返回 node_modules 路径
127
+ return SCHEMA_PATHS[1];
128
+ }
129
+ /**
130
+ * 获取 feng3d.json 模板内容
131
+ */
132
+ export function getFeng3dConfigTemplate(options) {
133
+ const templateContent = fs.readFileSync(path.join(TEMPLATES_DIR, 'feng3d.json'), 'utf-8');
134
+ const content = templateContent.replace(/\{\{name\}\}/g, options.name);
135
+ const config = JSON.parse(content);
136
+ // 如果提供了 schemaPath,则使用它
137
+ if (options.schemaPath) {
138
+ config.$schema = options.schemaPath;
139
+ }
140
+ return config;
145
141
  }
142
+ // 为了向后兼容,保留原有的变量导出
143
+ /** @deprecated 请使用 getGitignoreTemplate() 函数 */
144
+ export const gitignoreTemplate = getGitignoreTemplate();
145
+ /** @deprecated 请使用 getCursorrrulesTemplate() 函数 */
146
+ export const cursorrrulesTemplate = getCursorrrulesTemplate();
147
+ /** @deprecated 请使用 getTsconfigTemplate() 函数 */
148
+ export const tsconfigTemplate = getTsconfigTemplate();
149
+ /** @deprecated 请使用 getVitestConfigTemplate() 函数 */
150
+ export const vitestConfigTemplate = getVitestConfigTemplate();
151
+ /** @deprecated 请使用 getTypedocConfig() 函数 */
152
+ export const createTypedocConfig = getTypedocConfig;
146
153
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;CAYhC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EnC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,eAAe,EAAE;QACb,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,UAAU;QAClB,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,IAAI;QACjB,sBAAsB,EAAE,IAAI;QAC5B,mBAAmB,EAAE,IAAI;QACzB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,IAAI;QACxB,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;QAC1C,MAAM,EAAE,KAAK;KAChB;IACD,OAAO,EAAE,CAAC,aAAa,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;CAOnC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAGnC;IAEG,OAAO;QACH,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,iCAAiC;QAC1C,WAAW,EAAE,CAAC,cAAc,CAAC;QAC7B,kBAAkB,EAAE,kCAAkC,OAAO,CAAC,QAAQ,6BAA6B;QACnG,GAAG,EAAE,aAAa;KACrB,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * feng3d 项目配置类型定义
3
+ */
4
+ /**
5
+ * ESLint 配置选项
6
+ */
7
+ export interface EslintConfig {
8
+ /** 是否启用 ESLint */
9
+ enabled?: boolean;
10
+ /** 额外需要忽略的目录 */
11
+ ignores?: string[];
12
+ /** 额外的规则覆盖 */
13
+ rules?: Record<string, unknown>;
14
+ }
15
+ /**
16
+ * Vitest 配置选项
17
+ */
18
+ export interface VitestConfig {
19
+ /** 是否启用 vitest */
20
+ enabled?: boolean;
21
+ /** 测试超时时间(0 表示无限制) */
22
+ testTimeout?: number;
23
+ }
24
+ /**
25
+ * TypeDoc 配置选项
26
+ */
27
+ export interface TypedocConfig {
28
+ /** 是否启用 typedoc */
29
+ enabled?: boolean;
30
+ /** 输出目录 */
31
+ outDir?: string;
32
+ }
33
+ /**
34
+ * OSS 上传配置
35
+ */
36
+ export interface OssConfig {
37
+ /** 本地目录 */
38
+ localDir?: string;
39
+ /** OSS 目录(默认使用 package.json 的 name) */
40
+ ossDir?: string;
41
+ }
42
+ /**
43
+ * 项目模板选项
44
+ */
45
+ export interface TemplatesConfig {
46
+ /** 是否创建示例目录 */
47
+ examples?: boolean;
48
+ /** 是否创建测试目录 */
49
+ test?: boolean;
50
+ }
51
+ /**
52
+ * 更新配置选项
53
+ */
54
+ export interface UpdateConfig {
55
+ /** 是否更新 feng3d.json 配置 */
56
+ config?: boolean;
57
+ /** 是否更新 ESLint 配置 */
58
+ eslint?: boolean;
59
+ /** 是否更新 .gitignore */
60
+ gitignore?: boolean;
61
+ /** 是否更新 .cursorrules */
62
+ cursorrules?: boolean;
63
+ /** 是否更新 npm publish workflow */
64
+ publish?: boolean;
65
+ /** 是否更新 GitHub Pages workflow */
66
+ pages?: boolean;
67
+ /** 是否更新 Pull Request CI workflow */
68
+ pullRequest?: boolean;
69
+ /** 是否更新 typedoc.json */
70
+ typedoc?: boolean;
71
+ /** 是否更新 test/_.test.ts */
72
+ test?: boolean;
73
+ /** 是否更新依赖版本 */
74
+ deps?: boolean;
75
+ /** 是否更新 husky pre-commit hook */
76
+ husky?: boolean;
77
+ /** 是否更新 LICENSE 文件 */
78
+ license?: boolean;
79
+ /** 是否更新 .vscode/settings.json */
80
+ vscode?: boolean;
81
+ /** 是否更新 tsconfig.json */
82
+ tsconfig?: boolean;
83
+ }
84
+ /**
85
+ * feng3d 项目配置
86
+ */
87
+ export interface Feng3dConfig {
88
+ /** 项目名称 */
89
+ name?: string;
90
+ /** ESLint 配置 */
91
+ eslint?: EslintConfig;
92
+ /** Vitest 配置 */
93
+ vitest?: VitestConfig;
94
+ /** TypeDoc 配置 */
95
+ typedoc?: TypedocConfig;
96
+ /** OSS 配置 */
97
+ oss?: OssConfig;
98
+ /** 模板配置 */
99
+ templates?: TemplatesConfig;
100
+ /** 更新配置(指定 feng3d-cli update 时默认更新哪些项目) */
101
+ update?: UpdateConfig;
102
+ }
103
+ /**
104
+ * 默认更新配置(全部启用)
105
+ */
106
+ export declare const DEFAULT_UPDATE_CONFIG: UpdateConfig;
107
+ /**
108
+ * 默认配置
109
+ */
110
+ export declare const DEFAULT_CONFIG: Feng3dConfig;
111
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,kBAAkB;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,kBAAkB;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,eAAe;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wBAAwB;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iCAAiC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sBAAsB;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,gBAAgB;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,iBAAiB;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa;IACb,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,WAAW;IACX,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,2CAA2C;IAC3C,MAAM,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAenC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,YAuB5B,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * feng3d 项目配置类型定义
3
+ */
4
+ /**
5
+ * 默认更新配置(全部启用)
6
+ */
7
+ export const DEFAULT_UPDATE_CONFIG = {
8
+ config: true,
9
+ eslint: true,
10
+ gitignore: true,
11
+ cursorrules: true,
12
+ publish: true,
13
+ pages: true,
14
+ pullRequest: true,
15
+ typedoc: true,
16
+ test: true,
17
+ deps: true,
18
+ husky: true,
19
+ license: true,
20
+ vscode: true,
21
+ tsconfig: true,
22
+ };
23
+ /**
24
+ * 默认配置
25
+ */
26
+ export const DEFAULT_CONFIG = {
27
+ eslint: {
28
+ enabled: true,
29
+ ignores: [],
30
+ rules: {},
31
+ },
32
+ vitest: {
33
+ enabled: true,
34
+ testTimeout: 0,
35
+ },
36
+ typedoc: {
37
+ enabled: true,
38
+ outDir: 'public',
39
+ },
40
+ oss: {
41
+ localDir: './public',
42
+ ossDir: '',
43
+ },
44
+ templates: {
45
+ examples: true,
46
+ test: true,
47
+ },
48
+ update: DEFAULT_UPDATE_CONFIG,
49
+ };
50
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4GH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IAC/C,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAiB;IACxC,MAAM,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;KACZ;IACD,MAAM,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,CAAC;KACjB;IACD,OAAO,EAAE;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,QAAQ;KACnB;IACD,GAAG,EAAE;QACD,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,EAAE;KACb;IACD,SAAS,EAAE;QACP,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,IAAI;KACb;IACD,MAAM,EAAE,qBAAqB;CAChC,CAAC"}
@@ -17,6 +17,8 @@ export declare const VERSIONS: {
17
17
  readonly rimraf: "6.0.1";
18
18
  readonly 'cross-env': "7.0.3";
19
19
  readonly typedoc: "^0.28.4";
20
+ readonly husky: "^9.1.7";
21
+ readonly 'lint-staged': "^15.2.10";
20
22
  };
21
23
  /**
22
24
  * 获取 devDependencies 配置