feng3d-cli 0.0.2 → 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 (44) hide show
  1. package/LICENSE +15 -0
  2. package/dist/cli.js +10 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/create.d.ts.map +1 -1
  5. package/dist/commands/create.js +8 -1
  6. package/dist/commands/create.js.map +1 -1
  7. package/dist/commands/oss.d.ts.map +1 -1
  8. package/dist/commands/oss.js +26 -1
  9. package/dist/commands/oss.js.map +1 -1
  10. package/dist/commands/update.d.ts +10 -0
  11. package/dist/commands/update.d.ts.map +1 -1
  12. package/dist/commands/update.js +442 -24
  13. package/dist/commands/update.js.map +1 -1
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/templates.d.ts +57 -2
  19. package/dist/templates.d.ts.map +1 -1
  20. package/dist/templates.js +95 -5
  21. package/dist/templates.js.map +1 -1
  22. package/dist/types/config.d.ts +111 -0
  23. package/dist/types/config.d.ts.map +1 -0
  24. package/dist/types/config.js +50 -0
  25. package/dist/types/config.js.map +1 -0
  26. package/dist/versions.d.ts +2 -0
  27. package/dist/versions.d.ts.map +1 -1
  28. package/dist/versions.js +6 -0
  29. package/dist/versions.js.map +1 -1
  30. package/package.json +81 -64
  31. package/schemas/feng3d.schema.json +191 -0
  32. package/templates/.cursorrules +97 -17
  33. package/templates/.github/workflows/pages.yml +60 -0
  34. package/templates/.github/workflows/publish.yml +128 -0
  35. package/templates/.github/workflows/pull-request.yml +31 -0
  36. package/templates/.husky/pre-commit +2 -0
  37. package/templates/.vscode/settings.json +10 -0
  38. package/templates/LICENSE +15 -0
  39. package/templates/eslint.config.js +116 -65
  40. package/templates/feng3d.json +42 -0
  41. package/templates/gitignore +23 -0
  42. package/templates/test/_.test.ts +5 -0
  43. package/templates/tsconfig.json +14 -13
  44. package/templates/typedoc.json +1 -1
package/dist/templates.js CHANGED
@@ -13,7 +13,8 @@ const TEMPLATES_DIR = path.resolve(__dirname, '../templates');
13
13
  * 获取 .gitignore 模板内容
14
14
  */
15
15
  export function getGitignoreTemplate() {
16
- return fs.readFileSync(path.join(TEMPLATES_DIR, '.gitignore'), 'utf-8');
16
+ // 模板文件命名为 gitignore(不带点),避免对 templates 目录生效
17
+ return fs.readFileSync(path.join(TEMPLATES_DIR, 'gitignore'), 'utf-8');
17
18
  }
18
19
  /**
19
20
  * 获取 .cursorrules 模板内容
@@ -22,11 +23,17 @@ export function getCursorrrulesTemplate() {
22
23
  return fs.readFileSync(path.join(TEMPLATES_DIR, '.cursorrules'), 'utf-8');
23
24
  }
24
25
  /**
25
- * 获取 tsconfig.json 模板内容
26
+ * 获取 tsconfig.json 模板内容(对象形式)
26
27
  */
27
28
  export function getTsconfigTemplate() {
28
29
  return fs.readJsonSync(path.join(TEMPLATES_DIR, 'tsconfig.json'));
29
30
  }
31
+ /**
32
+ * 获取 tsconfig.json 模板内容(字符串形式)
33
+ */
34
+ export function getTsconfigTemplateString() {
35
+ return fs.readFileSync(path.join(TEMPLATES_DIR, 'tsconfig.json'), 'utf-8');
36
+ }
30
37
  /**
31
38
  * 获取 vitest.config.ts 模板内容
32
39
  */
@@ -40,14 +47,97 @@ export function getEslintConfigTemplate() {
40
47
  return fs.readFileSync(path.join(TEMPLATES_DIR, 'eslint.config.js'), 'utf-8');
41
48
  }
42
49
  /**
43
- * 获取 typedoc.json 模板内容
50
+ * 获取 typedoc.json 模板内容(返回对象)
44
51
  */
45
52
  export function getTypedocConfig(options) {
53
+ return JSON.parse(getTypedocConfigTemplate(options));
54
+ }
55
+ /**
56
+ * 获取 typedoc.json 模板内容(返回字符串)
57
+ */
58
+ export function getTypedocConfigTemplate(options) {
46
59
  const templateContent = fs.readFileSync(path.join(TEMPLATES_DIR, 'typedoc.json'), 'utf-8');
47
- const content = templateContent
60
+ return templateContent
48
61
  .replace(/\{\{name\}\}/g, options.name)
49
62
  .replace(/\{\{repoName\}\}/g, options.repoName);
50
- return JSON.parse(content);
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;
51
141
  }
52
142
  // 为了向后兼容,保留原有的变量导出
53
143
  /** @deprecated 请使用 getGitignoreTemplate() 函数 */
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAEhC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IAEnC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IAE/B,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IAEnC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IAEnC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAGhC;IAEG,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,eAAe;SAC1B,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC;SACtC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,mBAAmB;AACnB,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;AACxD,mDAAmD;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;AAC9D,+CAA+C;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;AACtD,mDAAmD;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;AAC9D,4CAA4C;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,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 配置
@@ -1 +1 @@
1
- {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;CAyBX,CAAC;AAEX;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgC9B"}
1
+ {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;CA6BX,CAAC;AAEX;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoC9B"}
package/dist/versions.js CHANGED
@@ -22,6 +22,9 @@ export const VERSIONS = {
22
22
  'cross-env': '7.0.3',
23
23
  // 文档
24
24
  typedoc: '^0.28.4',
25
+ // Git hooks
26
+ husky: '^9.1.7',
27
+ 'lint-staged': '^15.2.10',
25
28
  };
26
29
  /**
27
30
  * 获取 devDependencies 配置
@@ -49,6 +52,9 @@ export function getDevDependencies(options = {}) {
49
52
  if (options.includeTypedoc !== false) {
50
53
  deps.typedoc = VERSIONS.typedoc;
51
54
  }
55
+ // 默认包含 husky 和 lint-staged
56
+ deps.husky = VERSIONS.husky;
57
+ deps['lint-staged'] = VERSIONS['lint-staged'];
52
58
  return deps;
53
59
  }
54
60
  //# sourceMappingURL=versions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,gBAAgB;IAChB,UAAU,EAAE,OAAO;IACnB,KAAK,EAAE,QAAQ;IAEf,YAAY;IACZ,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,QAAQ;IACtB,kCAAkC,EAAE,QAAQ;IAC5C,2BAA2B,EAAE,QAAQ;IACrC,mBAAmB,EAAE,SAAS;IAC9B,OAAO,EAAE,SAAS;IAElB,OAAO;IACP,MAAM,EAAE,QAAQ;IAChB,qBAAqB,EAAE,QAAQ;IAC/B,WAAW,EAAE,UAAU;IAEvB,OAAO;IACP,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,OAAO;IAEpB,KAAK;IACL,OAAO,EAAE,SAAS;CACZ,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAI/B,EAAE;IAEF,MAAM,IAAI,GAA2B;QACjC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC;QACpC,kCAAkC,EAAE,QAAQ,CAAC,kCAAkC,CAAC;QAChF,2BAA2B,EAAE,QAAQ,CAAC,2BAA2B,CAAC;QAClE,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC;QAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,CAAC;QAClD,IAAI,EAAE,QAAQ,CAAC,IAAI;KACtB,CAAC;IAEF,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EACnC,CAAC;QACG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,CAAC,eAAe,EAC3B,CAAC;QACG,IAAI,CAAC,qBAAqB,CAAC,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EACpC,CAAC;QACG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,gBAAgB;IAChB,UAAU,EAAE,OAAO;IACnB,KAAK,EAAE,QAAQ;IAEf,YAAY;IACZ,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,QAAQ;IACtB,kCAAkC,EAAE,QAAQ;IAC5C,2BAA2B,EAAE,QAAQ;IACrC,mBAAmB,EAAE,SAAS;IAC9B,OAAO,EAAE,SAAS;IAElB,OAAO;IACP,MAAM,EAAE,QAAQ;IAChB,qBAAqB,EAAE,QAAQ;IAC/B,WAAW,EAAE,UAAU;IAEvB,OAAO;IACP,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,OAAO;IAEpB,KAAK;IACL,OAAO,EAAE,SAAS;IAElB,YAAY;IACZ,KAAK,EAAE,QAAQ;IACf,aAAa,EAAE,UAAU;CACnB,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAI/B,EAAE;IAEF,MAAM,IAAI,GAA2B;QACjC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC;QACpC,kCAAkC,EAAE,QAAQ,CAAC,kCAAkC,CAAC;QAChF,2BAA2B,EAAE,QAAQ,CAAC,2BAA2B,CAAC;QAClE,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC;QAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,CAAC;QAClD,IAAI,EAAE,QAAQ,CAAC,IAAI;KACtB,CAAC;IAEF,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EACnC,CAAC;QACG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,CAAC,eAAe,EAC3B,CAAC;QACG,IAAI,CAAC,qBAAqB,CAAC,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EACpC,CAAC;QACG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE9C,OAAO,IAAI,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,68 +1,85 @@
1
1
  {
2
- "name": "feng3d-cli",
3
- "version": "0.0.2",
4
- "description": "feng3d 项目通用标准,包含代码规范、配置模板和 CLI 工具",
5
- "homepage": "https://github.com/feng3d-labs/feng3d-cli",
6
- "author": "feng",
7
- "license": "MIT",
8
- "type": "module",
9
- "main": "./dist/index.js",
10
- "types": "./dist/index.d.ts",
11
- "bin": {
12
- "feng3d-cli": "./dist/cli.js"
2
+ "name": "feng3d-cli",
3
+ "version": "0.0.3",
4
+ "description": "feng3d 项目通用标准,包含代码规范、配置模板和 CLI 工具",
5
+ "homepage": "https://feng3d.com/feng3d-cli/",
6
+ "author": "feng",
7
+ "license": "MIT",
8
+ "type": "module",
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "bin": {
12
+ "feng3d-cli": "./dist/cli.js"
13
+ },
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
13
18
  },
14
- "exports": {
15
- ".": {
16
- "types": "./dist/index.d.ts",
17
- "import": "./dist/index.js"
18
- },
19
- "./eslint": {
20
- "types": "./dist/eslint.d.ts",
21
- "import": "./dist/eslint.js"
22
- }
23
- },
24
- "scripts": {
25
- "build": "tsc",
26
- "dev": "tsc -w",
27
- "test": "vitest run",
28
- "test:watch": "vitest",
29
- "lint": "eslint . --ext .js,.ts --max-warnings 0",
30
- "lintfix": "npm run lint -- --fix",
31
- "update-rules": "node dist/cli.js update --all",
32
- "prepublishOnly": "npm run lint && npm test && npm run build",
33
- "publish:manual": "npm publish"
34
- },
35
- "publishConfig": {
36
- "access": "public"
37
- },
38
- "repository": {
39
- "type": "git",
40
- "url": "https://github.com/feng3d-labs/feng3d-cli.git"
41
- },
42
- "files": [
43
- "dist",
44
- "templates"
45
- ],
46
- "dependencies": {
47
- "ali-oss": "^6.22.0",
48
- "chalk": "^5.3.0",
49
- "commander": "^12.1.0",
50
- "fs-extra": "^11.2.0"
51
- },
52
- "devDependencies": {
53
- "@eslint/js": "^9.0.0",
54
- "@types/fs-extra": "^11.0.4",
55
- "@types/node": "^22.10.2",
56
- "@typescript-eslint/eslint-plugin": "8.32.1",
57
- "@typescript-eslint/parser": "8.32.1",
58
- "eslint": "9.26.0",
59
- "globals": "^14.0.0",
60
- "rimraf": "6.0.1",
61
- "tslib": "^2.8.1",
62
- "typedoc": "^0.28.4",
63
- "typescript": "5.8.3",
64
- "typescript-eslint": "^8.32.1",
65
- "vite": "^6.3.5",
66
- "vitest": "^3.1.3"
19
+ "./eslint": {
20
+ "types": "./dist/eslint.d.ts",
21
+ "import": "./dist/eslint.js"
67
22
  }
23
+ },
24
+ "scripts": {
25
+ "clean": "rimraf \"{lib,dist,public}\"",
26
+ "build": "tsc",
27
+ "dev": "tsc -w",
28
+ "test": "vitest run",
29
+ "test:watch": "vitest",
30
+ "types": "tsc",
31
+ "watch": "tsc -w",
32
+ "lint": "eslint . --ext .js,.ts --max-warnings 0",
33
+ "lintfix": "npm run lint -- --fix",
34
+ "docs": "typedoc",
35
+ "upload_oss": "npm run build && npm run docs && node dist/cli.js oss_upload_dir",
36
+ "update": "npm run build && node dist/cli.js update && npm install",
37
+ "release": "npm run clean && npm run lint && npm run build && npm run docs && npm publish",
38
+ "prepublishOnly": "npm run lint && npm test && npm run build",
39
+ "publish:manual": "npm publish",
40
+ "prepare": "husky",
41
+ "postinstall": "npm run build && node dist/cli.js update || exit 0"
42
+ },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/feng3d-labs/feng3d-cli.git"
49
+ },
50
+ "files": [
51
+ "dist",
52
+ "templates",
53
+ "schemas"
54
+ ],
55
+ "dependencies": {
56
+ "ali-oss": "^6.22.0",
57
+ "chalk": "^5.3.0",
58
+ "commander": "^12.1.0",
59
+ "fs-extra": "^11.2.0"
60
+ },
61
+ "devDependencies": {
62
+ "@eslint/js": "^9.0.0",
63
+ "@types/fs-extra": "^11.0.4",
64
+ "@types/node": "^22.10.2",
65
+ "@typescript-eslint/eslint-plugin": "8.32.1",
66
+ "@typescript-eslint/parser": "8.32.1",
67
+ "eslint": "9.26.0",
68
+ "globals": "^14.0.0",
69
+ "husky": "^9.1.7",
70
+ "lint-staged": "^15.2.10",
71
+ "rimraf": "6.0.1",
72
+ "tslib": "^2.8.1",
73
+ "typedoc": "^0.28.4",
74
+ "typescript": "5.8.3",
75
+ "typescript-eslint": "^8.32.1",
76
+ "vite": "^6.3.5",
77
+ "vitest": "^3.1.3",
78
+ "cross-env": "7.0.3"
79
+ },
80
+ "lint-staged": {
81
+ "*.{js,ts}": [
82
+ "eslint --fix --max-warnings 0"
83
+ ]
84
+ }
68
85
  }