react-nest-cli 1.0.3 → 1.0.5

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 (72) hide show
  1. package/.cspell/project-words.txt +3 -0
  2. package/.editorconfig +5 -0
  3. package/.husky/commit-msg +3 -0
  4. package/.husky/pre-commit +3 -0
  5. package/.prettierignore +1 -0
  6. package/apps/components/Button/index.css +9 -0
  7. package/apps/components/Button/index.jsx +12 -0
  8. package/apps/components/Button/index.less +10 -0
  9. package/apps/components/Button/index.tsx +21 -0
  10. package/apps/components/Card/index.css +10 -0
  11. package/apps/components/Card/index.jsx +11 -0
  12. package/apps/components/Card/index.less +9 -0
  13. package/apps/components/Card/index.tsx +20 -0
  14. package/commitlint.config.ts +113 -0
  15. package/cspell.config.ts +16 -0
  16. package/eslint.config.ts +52 -0
  17. package/package.json +86 -38
  18. package/packages/cli/dist/chunk-2LOTRMC6.js +24 -0
  19. package/packages/cli/dist/chunk-2LOTRMC6.js.map +1 -0
  20. package/packages/cli/dist/chunk-6IS4OKS7.js +69 -0
  21. package/packages/cli/dist/chunk-6IS4OKS7.js.map +1 -0
  22. package/packages/cli/dist/chunk-B7N5IJK6.js +120 -0
  23. package/packages/cli/dist/chunk-B7N5IJK6.js.map +1 -0
  24. package/packages/cli/dist/chunk-K5MQOF6Z.js +12 -0
  25. package/packages/cli/dist/chunk-K5MQOF6Z.js.map +1 -0
  26. package/packages/cli/dist/chunk-NCNZGYLV.js +13 -0
  27. package/packages/cli/dist/chunk-NCNZGYLV.js.map +1 -0
  28. package/packages/cli/dist/chunk-PMB2T2TP.js +13 -0
  29. package/packages/cli/dist/chunk-PMB2T2TP.js.map +1 -0
  30. package/packages/cli/dist/chunk-YUGLQSSS.js +19 -0
  31. package/packages/cli/dist/chunk-YUGLQSSS.js.map +1 -0
  32. package/packages/cli/dist/commands/base/info.d.ts +6 -0
  33. package/packages/cli/dist/commands/base/info.js +10 -0
  34. package/packages/cli/dist/commands/base/info.js.map +1 -0
  35. package/packages/cli/dist/commands/base/init.d.ts +5 -0
  36. package/packages/cli/dist/commands/base/init.js +8 -0
  37. package/packages/cli/dist/commands/base/init.js.map +1 -0
  38. package/packages/cli/dist/commands/base/initComponent.d.ts +5 -0
  39. package/packages/cli/dist/commands/base/initComponent.js +7 -0
  40. package/packages/cli/dist/commands/base/initComponent.js.map +1 -0
  41. package/packages/cli/dist/commands/base/version.d.ts +5 -0
  42. package/packages/cli/dist/commands/base/version.js +8 -0
  43. package/packages/cli/dist/commands/base/version.js.map +1 -0
  44. package/packages/cli/dist/commands/baseRegisterCommands.d.ts +7 -0
  45. package/packages/cli/dist/commands/baseRegisterCommands.js +7 -0
  46. package/packages/cli/dist/commands/baseRegisterCommands.js.map +1 -0
  47. package/packages/cli/dist/configs/prompts.config.d.ts +10 -0
  48. package/packages/cli/dist/configs/prompts.config.js +7 -0
  49. package/packages/cli/dist/configs/prompts.config.js.map +1 -0
  50. package/packages/cli/dist/configs/text.config.d.ts +5 -0
  51. package/packages/cli/dist/configs/text.config.js +7 -0
  52. package/packages/cli/dist/configs/text.config.js.map +1 -0
  53. package/packages/cli/dist/index.js +38 -85
  54. package/packages/cli/dist/index.js.map +1 -1
  55. package/packages/cli/package.json +13 -0
  56. package/packages/cli/src/commands/base/info.ts +22 -0
  57. package/packages/cli/src/commands/base/init.ts +73 -0
  58. package/packages/cli/src/commands/base/initComponent.ts +174 -0
  59. package/packages/cli/src/commands/base/version.ts +16 -0
  60. package/packages/cli/src/commands/baseRegisterCommands.ts +9 -0
  61. package/packages/cli/src/configs/prompts.config.ts +21 -6
  62. package/packages/cli/src/index.ts +22 -102
  63. package/packages/templates/react-nest/index.css +7 -0
  64. package/packages/templates/react-nest/index.js +1 -0
  65. package/packages/templates/react-nest-ts/index.js +1 -0
  66. package/packages/templates/vue-template/vue +0 -0
  67. package/pnpm-workspace.yaml +2 -2
  68. package/prettier.config.js +6 -0
  69. package/stylelint.config.mjs +17 -0
  70. package/tsconfig.json +40 -39
  71. package/tsup.config.ts +12 -5
  72. package/turbo.json +0 -0
@@ -0,0 +1,120 @@
1
+ // packages/cli/src/commands/base/initComponent.ts
2
+ import "commander";
3
+ import consola from "consola";
4
+ import fs from "fs";
5
+ import path from "path";
6
+ import { cwd } from "process";
7
+ import ora from "ora";
8
+ import prompts from "prompts";
9
+ var firstCharUpperCase = (str) => {
10
+ return str.charAt(0).toUpperCase() + str.slice(1);
11
+ };
12
+ var ensureDir = (dir) => {
13
+ return new Promise((resolve) => {
14
+ fs.mkdir(dir, { recursive: true }, (err) => {
15
+ if (err) {
16
+ consola.error(`\u521B\u5EFA\u76EE\u5F55 ${dir} \u5931\u8D25`);
17
+ resolve(false);
18
+ } else {
19
+ resolve(true);
20
+ }
21
+ });
22
+ });
23
+ };
24
+ var existsPath = (path2) => {
25
+ return new Promise((resolve) => {
26
+ fs.stat(path2, (err) => {
27
+ if (err) {
28
+ resolve(false);
29
+ } else {
30
+ resolve(true);
31
+ }
32
+ });
33
+ });
34
+ };
35
+ var safeSaveFile = async (path2, content, force = false) => {
36
+ return new Promise((resolve, reject) => {
37
+ existsPath(path2).then((exists) => {
38
+ if (exists) {
39
+ if (!force) {
40
+ consola.error(`\u6587\u4EF6${path2} \u5DF2\u5B58\u5728`);
41
+ reject(false);
42
+ return;
43
+ }
44
+ } else {
45
+ fs.writeFile(path2, content, "utf-8", (err) => {
46
+ if (err) {
47
+ consola.error(`\u6587\u4EF6${path2} \u5199\u5165\u5931\u8D25`);
48
+ reject(false);
49
+ } else {
50
+ resolve(true);
51
+ }
52
+ });
53
+ }
54
+ }).catch(() => {
55
+ reject(false);
56
+ });
57
+ });
58
+ };
59
+ var initComponent = (program) => {
60
+ program.command("init:component").alias("init:c").alias("init:comp").argument("[component-name]", "\u7EC4\u4EF6\u540D\u79F0(\u5982Button\u3001Text\u3001Card)").description("\u521D\u59CB\u5316React\u7EC4\u4EF6 TSX + CSS").option("-d, --dir <dir>", "\u751F\u6210\u7EC4\u4EF6\u76EE\u5F55\uFF0C\u9ED8\u8BA4src/components", "src/components").option("-s, --style <style>", "\u4F7F\u7528\u54EA\u79CD\u6837\u5F0F\u65B9\u6848\uFF0C\u9ED8\u8BA4css", "css").option("-j, --jsx", "\u662F\u5426\u4F7F\u7528JSX\u6587\u4EF6\uFF0C\u9ED8\u8BA4TSX", false).option("-f, --force", "\u662F\u5426\u5F3A\u5236\u8986\u76D6\u5DF2\u5B58\u5728\u7EC4\u4EF6", false).action(async (componentName, rest) => {
61
+ let { dir, style, jsx, force } = rest || {};
62
+ if (!componentName) {
63
+ const response = await prompts({
64
+ type: "text",
65
+ initial: "Button",
66
+ // 默认值
67
+ name: "componentName",
68
+ message: "\u8BF7\u8F93\u5165\u7EC4\u4EF6\u540D\u79F0"
69
+ });
70
+ componentName = response.componentName;
71
+ }
72
+ if (!componentName || !componentName.trim()) {
73
+ process.stderr.write("\u7EC4\u4EF6\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\n");
74
+ process.exit(1);
75
+ }
76
+ componentName = firstCharUpperCase(componentName);
77
+ const inputComponentDir = path.join("apps/components", componentName);
78
+ const outputComponentDir = path.resolve(cwd(), dir, componentName);
79
+ const inputExists = await existsPath(inputComponentDir);
80
+ if (!inputExists) {
81
+ consola.error(`\u7EC4\u4EF6 ${componentName} \u4E0D\u5B58\u5728`);
82
+ process.exit(1);
83
+ }
84
+ const tip = `\u521D\u59CB\u5316\u7EC4\u4EF6 ${componentName}`;
85
+ const spinner = ora(tip).start();
86
+ const dirExists = await ensureDir(outputComponentDir);
87
+ if (!dirExists) {
88
+ spinner.fail(`\u7EC4\u4EF6 ${componentName} \u521D\u59CB\u5316\u5931\u8D25, \u76EE\u5F55 ${outputComponentDir} \u521B\u5EFA\u5931\u8D25`);
89
+ return;
90
+ }
91
+ let esFileExt = "tsx";
92
+ let styleFileExt = "css";
93
+ if (jsx) {
94
+ esFileExt = "jsx";
95
+ }
96
+ if (style === "less") {
97
+ styleFileExt = "less";
98
+ }
99
+ const esPath = path.resolve(outputComponentDir, `index.${esFileExt}`);
100
+ const stylePath = path.resolve(outputComponentDir, `index.${styleFileExt}`);
101
+ let esContent = fs.readFileSync(path.resolve(inputComponentDir, `index.${esFileExt}`), "utf-8");
102
+ const styleContent = fs.readFileSync(path.resolve(inputComponentDir, `index.${styleFileExt}`), "utf-8");
103
+ esContent = `import './index.${styleFileExt}';
104
+ ${esContent}`;
105
+ Promise.all([
106
+ safeSaveFile(esPath, esContent, force),
107
+ safeSaveFile(stylePath, styleContent, force)
108
+ ]).then(() => {
109
+ spinner.succeed(`\u7EC4\u4EF6 ${componentName} \u521D\u59CB\u5316\u6210\u529F, \u76EE\u5F55 ${outputComponentDir}`);
110
+ }).catch(() => {
111
+ spinner.fail(`\u7EC4\u4EF6 ${componentName} \u521D\u59CB\u5316\u5931\u8D25`);
112
+ });
113
+ });
114
+ };
115
+ var initComponent_default = initComponent;
116
+
117
+ export {
118
+ initComponent_default
119
+ };
120
+ //# sourceMappingURL=chunk-B7N5IJK6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/base/initComponent.ts"],"sourcesContent":["import { type Command } from 'commander';\nimport consola from 'consola';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { cwd } from 'node:process';\nimport ora from 'ora';\nimport prompts from 'prompts';\n\n\nconst firstCharUpperCase = (str: string) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// 确保目录存在\nconst ensureDir = (dir: string) => {\n return new Promise((resolve) => {\n fs.mkdir(dir, { recursive: true }, (err) => {\n if (err) {\n consola.error(`创建目录 ${dir} 失败`)\n resolve(false)\n } else {\n resolve(true)\n }\n })\n })\n}\n\n// 检查路径是否存在\nconst existsPath = (path: string) => {\n return new Promise((resolve) => {\n fs.stat(path, (err) => {\n // consola.log(err)\n if (err) {\n resolve(false)\n } else {\n resolve(true)\n }\n })\n });\n}\n\n\nconst safeSaveFile = async (path: string, content: string, force: boolean = false) => {\n return new Promise((resolve, reject) => {\n existsPath(path).then(exists => {\n if (exists) {\n if (!force) {\n consola.error(`文件${path} 已存在`)\n reject(false)\n return;\n }\n } else {\n fs.writeFile(path, content, 'utf-8', (err) => {\n if (err) {\n consola.error(`文件${path} 写入失败`)\n reject(false)\n } else {\n resolve(true)\n }\n })\n }\n }).catch(() => {\n reject(false)\n })\n })\n}\n\nconst initComponent = (program: Command) => {\n program\n .command('init:component')\n .alias('init:c')\n .alias('init:comp')\n .argument('[component-name]', '组件名称(如Button、Text、Card)')\n .description('初始化React组件 TSX + CSS')\n .option('-d, --dir <dir>', '生成组件目录,默认src/components', 'src/components')\n .option('-s, --style <style>', '使用哪种样式方案,默认css', 'css')\n .option('-j, --jsx', '是否使用JSX文件,默认TSX', false)\n .option('-f, --force', '是否强制覆盖已存在组件', false)\n .action(async (componentName, rest) => {\n let { dir, style, jsx, force } = rest || {}\n if (!componentName) {\n const response = await prompts({\n type: 'text',\n initial: 'Button', // 默认值\n name: 'componentName',\n message: '请输入组件名称',\n })\n componentName = response.componentName;\n }\n if (!componentName || !componentName.trim()) {\n process.stderr.write('组件名称不能为空\\n')\n process.exit(1)\n }\n\n componentName = firstCharUpperCase(componentName);\n\n // 组件目录\n const inputComponentDir = path.join('apps/components', componentName)\n const outputComponentDir = path.resolve(cwd(), dir, componentName)\n\n const inputExists = await existsPath(inputComponentDir);\n // consola.log(inputExists)\n if (!inputExists) {\n consola.error(`组件 ${componentName} 不存在`)\n process.exit(1)\n }\n\n const tip = `初始化组件 ${componentName}`;\n const spinner = ora(tip).start()\n\n // 初始化组件 确保输出组件目录存在\n const dirExists = await ensureDir(outputComponentDir);\n if (!dirExists) {\n spinner.fail(`组件 ${componentName} 初始化失败, 目录 ${outputComponentDir} 创建失败`)\n return;\n }\n\n let esFileExt = 'tsx';\n let styleFileExt = 'css';\n if (jsx) {\n esFileExt = 'jsx';\n }\n if (style === 'less') {\n styleFileExt = 'less';\n }\n\n const esPath = path.resolve(outputComponentDir, `index.${esFileExt}`);\n const stylePath = path.resolve(outputComponentDir, `index.${styleFileExt}`);\n let esContent = fs.readFileSync(path.resolve(inputComponentDir, `index.${esFileExt}`), 'utf-8');\n const styleContent = fs.readFileSync(path.resolve(inputComponentDir, `index.${styleFileExt}`), 'utf-8');\n // 需要手动给esContent导入对应的style文件\n esContent = `import './index.${styleFileExt}';\\n${esContent}`\n\n Promise.all([\n safeSaveFile(esPath, esContent, force),\n safeSaveFile(stylePath, styleContent, force),\n ]).then(() => {\n spinner.succeed(`组件 ${componentName} 初始化成功, 目录 ${outputComponentDir}`)\n }).catch(() => {\n spinner.fail(`组件 ${componentName} 初始化失败`)\n })\n })\n}\n\nexport default initComponent\n"],"mappings":"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","names":["path"]}
@@ -0,0 +1,12 @@
1
+ // packages/cli/src/commands/baseRegisterCommands.ts
2
+ function baseRegisterCommands(program) {
3
+ return function registerCommand(fn) {
4
+ fn(program);
5
+ };
6
+ }
7
+ var baseRegisterCommands_default = baseRegisterCommands;
8
+
9
+ export {
10
+ baseRegisterCommands_default
11
+ };
12
+ //# sourceMappingURL=chunk-K5MQOF6Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/baseRegisterCommands.ts"],"sourcesContent":["import type { Command } from 'commander'\n\nfunction baseRegisterCommands(program: Command) {\n return function registerCommand(fn: (program: Command) => void) {\n fn(program)\n }\n}\n\nexport default baseRegisterCommands\n"],"mappings":";AAEA,SAAS,qBAAqB,SAAkB;AAC5C,SAAO,SAAS,gBAAgB,IAAgC;AAC5D,OAAG,OAAO;AAAA,EACd;AACJ;AAEA,IAAO,+BAAQ;","names":[]}
@@ -0,0 +1,13 @@
1
+ // packages/cli/src/configs/text.config.ts
2
+ var text_config_default = {
3
+ font: "Ghost",
4
+ horizontalLayout: "default",
5
+ verticalLayout: "default",
6
+ width: 200,
7
+ whitespaceBreak: true
8
+ };
9
+
10
+ export {
11
+ text_config_default
12
+ };
13
+ //# sourceMappingURL=chunk-NCNZGYLV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/configs/text.config.ts"],"sourcesContent":["import type { FigletOptions } from \"figlet\";\n\nexport default {\n font: \"Ghost\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n width: 200,\n whitespaceBreak: true,\n} as FigletOptions"],"mappings":";AAEA,IAAO,sBAAQ;AAAA,EACX,MAAM;AAAA,EACN,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,iBAAiB;AACrB;","names":[]}
@@ -0,0 +1,13 @@
1
+ // packages/cli/src/configs/prompts.config.ts
2
+ var prompts_config_default = {
3
+ templates: [
4
+ { title: "React + Nest", value: "react-nest", description: "\u8FD9\u4E2A\u6A21\u677F\u5305\u542B\u4E86 React + Nest \u9879\u76EE\u7684\u57FA\u672C\u914D\u7F6E", disabled: false },
5
+ { title: "React + Nest + TypeScript", value: "react-nest-ts", description: "\u8FD9\u4E2A\u6A21\u677F\u5305\u542B\u4E86 React + Nest + TypeScript \u9879\u76EE\u7684\u57FA\u672C\u914D\u7F6E", disabled: false },
6
+ { title: "Vue", value: "vue-template", description: "\u8FD9\u4E2A\u6A21\u677F\u5305\u542B\u4E86 Vue \u9879\u76EE\u7684\u57FA\u672C\u914D\u7F6E", disabled: false }
7
+ ]
8
+ };
9
+
10
+ export {
11
+ prompts_config_default
12
+ };
13
+ //# sourceMappingURL=chunk-PMB2T2TP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/configs/prompts.config.ts"],"sourcesContent":["\n\nexport default {\n templates: [\n { title: 'React + Nest', value: 'react-nest', description: '这个模板包含了 React + Nest 项目的基本配置', disabled: false },\n { title: 'React + Nest + TypeScript', value: 'react-nest-ts', description: '这个模板包含了 React + Nest + TypeScript 项目的基本配置', disabled: false },\n { title: 'Vue', value: 'vue-template', description: '这个模板包含了 Vue 项目的基本配置', disabled: false },\n ]\n}"],"mappings":";AAEA,IAAO,yBAAQ;AAAA,EACX,WAAW;AAAA,IACP,EAAE,OAAO,gBAAgB,OAAO,cAAc,aAAa,sGAAgC,UAAU,MAAM;AAAA,IAC3G,EAAE,OAAO,6BAA6B,OAAO,iBAAiB,aAAa,mHAA6C,UAAU,MAAM;AAAA,IACxI,EAAE,OAAO,OAAO,OAAO,gBAAgB,aAAa,6FAAuB,UAAU,MAAM;AAAA,EAC/F;AACJ;","names":[]}
@@ -0,0 +1,19 @@
1
+ import {
2
+ text_config_default
3
+ } from "./chunk-NCNZGYLV.js";
4
+
5
+ // packages/cli/src/commands/base/version.ts
6
+ import consola from "consola";
7
+ import figlet from "figlet";
8
+ function version(program) {
9
+ program.command("version").description("\u8F93\u51FA\u7248\u672C\u53F7").action(() => {
10
+ consola.info(
11
+ figlet.textSync(`version ==> ${program.version()}`, text_config_default)
12
+ );
13
+ });
14
+ }
15
+
16
+ export {
17
+ version
18
+ };
19
+ //# sourceMappingURL=chunk-YUGLQSSS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/base/version.ts"],"sourcesContent":["import type { Command } from 'commander'\nimport consola from 'consola'\nimport figlet from 'figlet'\nimport textConfig from '../../configs/text.config.ts'\n\nexport default function version(program: Command) {\n // 输出版本号\n program\n .command('version')\n .description('输出版本号')\n .action(() => {\n consola.info(\n figlet.textSync(`version ==> ${program.version()}`, textConfig)\n )\n })\n}\n"],"mappings":";;;;;AACA,OAAO,aAAa;AACpB,OAAO,YAAY;AAGJ,SAAR,QAAyB,SAAkB;AAE9C,UACK,QAAQ,SAAS,EACjB,YAAY,gCAAO,EACnB,OAAO,MAAM;AACV,YAAQ;AAAA,MACJ,OAAO,SAAS,eAAe,QAAQ,QAAQ,CAAC,IAAI,mBAAU;AAAA,IAClE;AAAA,EACJ,CAAC;AACT;","names":[]}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander'
2
+
3
+ declare const logInfo: (program: Command) => void
4
+ declare function info(program: Command): void
5
+
6
+ export { info as default, logInfo }
@@ -0,0 +1,10 @@
1
+ import {
2
+ info,
3
+ logInfo
4
+ } from "../../chunk-2LOTRMC6.js";
5
+ import "../../chunk-NCNZGYLV.js";
6
+ export {
7
+ info as default,
8
+ logInfo
9
+ };
10
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander'
2
+
3
+ declare function init(program: Command): void
4
+
5
+ export { init as default }
@@ -0,0 +1,8 @@
1
+ import {
2
+ init
3
+ } from "../../chunk-6IS4OKS7.js";
4
+ import "../../chunk-PMB2T2TP.js";
5
+ export {
6
+ init as default
7
+ };
8
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander'
2
+
3
+ declare const initComponent: (program: Command) => void
4
+
5
+ export { initComponent as default }
@@ -0,0 +1,7 @@
1
+ import {
2
+ initComponent_default
3
+ } from "../../chunk-B7N5IJK6.js";
4
+ export {
5
+ initComponent_default as default
6
+ };
7
+ //# sourceMappingURL=initComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander'
2
+
3
+ declare function version(program: Command): void
4
+
5
+ export { version as default }
@@ -0,0 +1,8 @@
1
+ import {
2
+ version
3
+ } from "../../chunk-YUGLQSSS.js";
4
+ import "../../chunk-NCNZGYLV.js";
5
+ export {
6
+ version as default
7
+ };
8
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,7 @@
1
+ import { Command } from 'commander'
2
+
3
+ declare function baseRegisterCommands(
4
+ program: Command
5
+ ): (fn: (program: Command) => void) => void
6
+
7
+ export { baseRegisterCommands as default }
@@ -0,0 +1,7 @@
1
+ import {
2
+ baseRegisterCommands_default
3
+ } from "../chunk-K5MQOF6Z.js";
4
+ export {
5
+ baseRegisterCommands_default as default
6
+ };
7
+ //# sourceMappingURL=baseRegisterCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,10 @@
1
+ declare const _default: {
2
+ templates: {
3
+ title: string
4
+ value: string
5
+ description: string
6
+ disabled: boolean
7
+ }[]
8
+ }
9
+
10
+ export { _default as default }
@@ -0,0 +1,7 @@
1
+ import {
2
+ prompts_config_default
3
+ } from "../chunk-PMB2T2TP.js";
4
+ export {
5
+ prompts_config_default as default
6
+ };
7
+ //# sourceMappingURL=prompts.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,5 @@
1
+ import { FigletOptions } from 'figlet'
2
+
3
+ declare const _default: FigletOptions
4
+
5
+ export { _default as default }
@@ -0,0 +1,7 @@
1
+ import {
2
+ text_config_default
3
+ } from "../chunk-NCNZGYLV.js";
4
+ export {
5
+ text_config_default as default
6
+ };
7
+ //# sourceMappingURL=text.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,94 +1,47 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ baseRegisterCommands_default
4
+ } from "./chunk-K5MQOF6Z.js";
5
+ import {
6
+ info,
7
+ logInfo
8
+ } from "./chunk-2LOTRMC6.js";
9
+ import {
10
+ init
11
+ } from "./chunk-6IS4OKS7.js";
12
+ import "./chunk-PMB2T2TP.js";
13
+ import {
14
+ initComponent_default
15
+ } from "./chunk-B7N5IJK6.js";
16
+ import {
17
+ version
18
+ } from "./chunk-YUGLQSSS.js";
19
+ import "./chunk-NCNZGYLV.js";
2
20
 
3
21
  // packages/cli/src/index.ts
4
22
  import { program } from "commander";
5
- import picocolors from "picocolors";
6
- import figlet from "figlet";
7
- import prompts from "prompts";
8
- import consola from "consola";
9
- import ora from "ora";
10
- import { downloadTemplate } from "giget";
11
- import path from "path";
12
- import fsExtra from "fs-extra";
13
23
 
14
- // packages/cli/src/configs/text.config.ts
15
- var text_config_default = {
16
- font: "Ghost",
17
- horizontalLayout: "default",
18
- verticalLayout: "default",
19
- width: 200,
20
- whitespaceBreak: true
21
- };
22
-
23
- // packages/cli/src/configs/prompts.config.ts
24
- var prompts_config_default = {
25
- templates: [
26
- { title: "React + Nest", value: "react-nest", description: "\u8FD9\u4E2A\u6A21\u677F\u5305\u542B\u4E86 React + Nest \u9879\u76EE\u7684\u57FA\u672C\u914D\u7F6E", disabled: false },
27
- { title: "React + Nest + TypeScript", value: "react-nest-ts", description: "\u8FD9\u4E2A\u6A21\u677F\u5305\u542B\u4E86 React + Nest + TypeScript \u9879\u76EE\u7684\u57FA\u672C\u914D\u7F6E", disabled: false }
28
- ]
24
+ // packages/cli/package.json
25
+ var package_default = {
26
+ name: "@react-nest/cli",
27
+ version: "1.0.5",
28
+ description: "\u4E00\u4E2A\u811A\u624B\u67B6\u5DE5\u5177\uFF0C\u7528\u4E8E\u5FEB\u901F\u751F\u6210 react+nest \u9879\u76EE",
29
+ main: "index.js",
30
+ type: "module",
31
+ scripts: {
32
+ test: 'echo "Error: no test specified" && exit 1'
33
+ },
34
+ keywords: [],
35
+ author: "",
36
+ license: "ISC"
29
37
  };
30
38
 
31
39
  // packages/cli/src/index.ts
32
- var logInfo = () => {
33
- console.info(picocolors.yellow(figlet.textSync("React Nest CLI", text_config_default)));
34
- consola.start(picocolors.yellow(program.description()));
35
- consola.info(picocolors.yellow(program.version()));
36
- };
37
- var cwd = process.cwd();
38
- var dirname = import.meta.dirname;
39
- var packageJsonPath = path.resolve(dirname, "../../../package.json");
40
- var packageJson = JSON.parse(fsExtra.readFileSync(packageJsonPath, "utf-8"));
41
- program.version(packageJson.version, "-V, --version", "\u8F93\u51FA\u7248\u672C\u53F7").helpOption("-h, --help", "\u8F93\u51FA\u5E2E\u52A9\u4FE1\u606F").description(packageJson.description).action(logInfo);
42
- program.command("info").description("\u8F93\u51FA\u9879\u76EE\u4FE1\u606F").action(logInfo);
43
- program.command("init").description("\u521D\u59CB\u5316\u9879\u76EE").argument("[project-name]", "\u9879\u76EE\u540D\u79F0").option("--template <template-name>", "\u9879\u76EE\u6A21\u677F\u540D\u79F0").action(async (projectName, rest) => {
44
- let { template } = rest || {};
45
- if (!projectName) {
46
- const response = await prompts({
47
- type: "text",
48
- initial: "my-project",
49
- // 默认值
50
- name: "projectName",
51
- message: "\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0"
52
- // validate: value => value.length ? true : '请输入项目名称'
53
- });
54
- projectName = response.projectName;
55
- }
56
- const noTemplate = template && !prompts_config_default.templates.find((item) => item.value === template);
57
- if (!template || noTemplate) {
58
- if (noTemplate) {
59
- consola.error(`\u9879\u76EE\u6A21\u677F ${template} \u4E0D\u5B58\u5728, \u8BF7\u9009\u62E9\u5176\u4ED6\u6A21\u677F`);
60
- }
61
- const response = await prompts({
62
- type: "select",
63
- name: "template",
64
- message: "\u8BF7\u9009\u62E9\u9879\u76EE\u6A21\u677F",
65
- choices: prompts_config_default.templates,
66
- initial: 0
67
- // 默认选择第一个
68
- });
69
- template = response.template;
70
- }
71
- const tip = `\u521D\u59CB\u5316\u9879\u76EE ${projectName}\uFF0C\u6A21\u677F ${template}`;
72
- const spinner = ora({
73
- text: tip,
74
- color: "blue"
75
- // spinner: 'growVertical',
76
- // isEnabled: false
77
- });
78
- spinner.start();
79
- const projectDir = path.resolve(cwd, projectName);
80
- if (fsExtra.existsSync(projectDir)) {
81
- spinner.fail(`\u{1F4A5}\u521D\u59CB\u5316\u5931\u8D25: \u9879\u76EE\u76EE\u5F55 ${projectName} \u5DF2\u5B58\u5728`);
82
- return;
83
- }
84
- const res = await downloadTemplate(`github:liaolonghui/react-nest-cli/packages/templates/${template}#main`, {
85
- dir: projectDir
86
- });
87
- const { dir } = res;
88
- spinner.succeed(`\u9879\u76EE\u521D\u59CB\u5316\u6210\u529F\uFF0C\u9879\u76EE\u76EE\u5F55\uFF1A${dir}`);
89
- });
90
- program.command("version").description("\u8F93\u51FA\u7248\u672C\u53F7").action(() => {
91
- consola.info(figlet.textSync(`version ==> ${program.version()}`, text_config_default));
92
- });
93
- program.parse();
40
+ program.version(package_default.version, "-V, --version", "\u8F93\u51FA\u7248\u672C\u53F7").helpOption("-h, --help", "\u8F93\u51FA\u5E2E\u52A9\u4FE1\u606F").description(package_default.description).action(() => logInfo(program));
41
+ var registerCommand = baseRegisterCommands_default(program);
42
+ registerCommand(info);
43
+ registerCommand(init);
44
+ registerCommand(initComponent_default);
45
+ registerCommand(version);
46
+ program.parse(process.argv);
94
47
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/configs/text.config.ts","../src/configs/prompts.config.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { program } from \"commander\";\nimport picocolors from \"picocolors\"; // 也可用chalk\nimport figlet from 'figlet';\nimport prompts from 'prompts'; // 也可用inquirer、手动readline等\nimport consola from \"consola\";\nimport ora from 'ora';\nimport { downloadTemplate } from 'giget';\nimport path from 'node:path';\nimport fsExtra from 'fs-extra';\nimport textConfig from './configs/text.config.ts';\nimport promptsConfig from \"./configs/prompts.config.ts\";\n\n\n// 输出项目信息\nconst logInfo = () => {\n console.info(picocolors.yellow(figlet.textSync('React Nest CLI', textConfig)))\n consola.start(picocolors.yellow(program.description()))\n consola.info(picocolors.yellow(program.version()))\n}\n\n// import.meta.dirname 指向当前文件所在目录\n// process.cwd() 指向当前工作目录\nconst cwd = process.cwd();\nconst dirname = import.meta.dirname;\nconst packageJsonPath = path.resolve(dirname, '../../../package.json');\nconst packageJson = JSON.parse(fsExtra.readFileSync(packageJsonPath, 'utf-8'));\n\n// console.log(packageJsonPath, packageJson);\n\nprogram\n .version(packageJson.version, '-V, --version', '输出版本号')\n .helpOption('-h, --help', '输出帮助信息')\n // .help((str) => '帮助信息:\\n' + str)\n .description(packageJson.description)\n .action(logInfo);\n\n// 输出项目信息\nprogram\n .command('info')\n .description('输出项目信息')\n .action(logInfo);\n\n// 初始化项目\nprogram\n .command('init')\n .description('初始化项目')\n .argument('[project-name]', '项目名称')\n .option('--template <template-name>', '项目模板名称')\n .action(async (projectName, rest) => {\n let { template } = rest || {};\n // 如果projectName没有提供,让用户输入\n if (!projectName) {\n const response = await prompts({\n type: 'text',\n initial: 'my-project', // 默认值\n name: 'projectName',\n message: '请输入项目名称',\n // validate: value => value.length ? true : '请输入项目名称'\n });\n projectName = response.projectName;\n }\n\n // 如果template没有提供或者template不存在,让用户选择\n const noTemplate = (template && !promptsConfig.templates.find(item => item.value === template));\n if (!template || noTemplate) {\n if (noTemplate) {\n consola.error(`项目模板 ${template} 不存在, 请选择其他模板`);\n }\n const response = await prompts({\n type: 'select',\n name: 'template',\n message: '请选择项目模板',\n choices: promptsConfig.templates,\n initial: 0, // 默认选择第一个\n });\n template = response.template;\n }\n\n const tip = `初始化项目 ${projectName},模板 ${template}`;\n const spinner = ora({\n text: tip,\n color: 'blue',\n // spinner: 'growVertical',\n // isEnabled: false\n });\n spinner.start();\n\n const projectDir = path.resolve(cwd, projectName);\n if (fsExtra.existsSync(projectDir)) {\n spinner.fail(`💥初始化失败: 项目目录 ${projectName} 已存在`);\n return;\n }\n\n const res = await downloadTemplate(`github:liaolonghui/react-nest-cli/packages/templates/${template}#main`, {\n dir: projectDir,\n });\n const { dir } = res;\n spinner.succeed(`项目初始化成功,项目目录:${dir}`);\n // console.log(res);\n\n });\n\n// 输出版本号\nprogram.command('version')\n .description('输出版本号')\n .action(() => {\n // 全局option -V, --version 已被注册,这里无需再注册version命令,只是为了演示\n consola.info(figlet.textSync(`version ==> ${program.version()}`, textConfig));\n });\n\nprogram.parse();","import type { FigletOptions } from \"figlet\";\n\nexport default {\n font: \"Ghost\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n width: 200,\n whitespaceBreak: true,\n} as FigletOptions","\n\nexport default {\n templates: [\n { title: 'React + Nest', value: 'react-nest', description: '这个模板包含了 React + Nest 项目的基本配置', disabled: false },\n { title: 'React + Nest + TypeScript', value: 'react-nest-ts', description: '这个模板包含了 React + Nest + TypeScript 项目的基本配置', disabled: false },\n ]\n}"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["#!/usr/bin/env node\nimport { program } from 'commander'\nimport packageJson from '../package.json' with { type: 'json' }\nimport baseRegisterCommands from './commands/baseRegisterCommands.ts'\nimport info, { logInfo } from './commands/base/info.ts'\nimport version from './commands/base/version.ts'\nimport init from './commands/base/init.ts'\nimport initComponent from './commands/base/initComponent.ts'\n\n// import.meta.dirname 指向当前文件所在目录\n// process.cwd() 指向当前工作目录 (实际运行时目录,不是当前文件所在目录)\n// const cwd = process.cwd();\n// const dirname = import.meta.dirname;\n\nprogram\n .version(packageJson.version, '-V, --version', '输出版本号')\n .helpOption('-h, --help', '输出帮助信息')\n // .help((str) => '帮助信息:\\n' + str)\n .description(packageJson.description)\n .action(() => logInfo(program))\n\nconst registerCommand = baseRegisterCommands(program)\n// 注册info命令\nregisterCommand(info)\n// 初始化项目命令\nregisterCommand(init)\n// 初始化组件命令\nregisterCommand(initComponent)\n// 输出版本号命令\nregisterCommand(version)\n\nprogram.parse(process.argv)\n","{\n \"name\": \"@react-nest/cli\",\n \"version\": \"1.0.5\",\n \"description\": \"一个脚手架工具,用于快速生成 react+nest 项目\",\n \"main\": \"index.js\",\n \"type\": \"module\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\"\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,SAAS,eAAe;;;ACDxB;AAAA,EACI,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,SAAW;AAAA,IACP,MAAQ;AAAA,EACZ;AAAA,EACA,UAAY,CAAC;AAAA,EACb,QAAU;AAAA,EACV,SAAW;AACf;;;ADEA,QACK,QAAQ,gBAAY,SAAS,iBAAiB,gCAAO,EACrD,WAAW,cAAc,sCAAQ,EAEjC,YAAY,gBAAY,WAAW,EACnC,OAAO,MAAM,QAAQ,OAAO,CAAC;AAElC,IAAM,kBAAkB,6BAAqB,OAAO;AAEpD,gBAAgB,IAAI;AAEpB,gBAAgB,IAAI;AAEpB,gBAAgB,qBAAa;AAE7B,gBAAgB,OAAO;AAEvB,QAAQ,MAAM,QAAQ,IAAI;","names":[]}
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "@react-nest/cli",
3
+ "version": "1.0.5",
4
+ "description": "一个脚手架工具,用于快速生成 react+nest 项目",
5
+ "main": "index.js",
6
+ "type": "module",
7
+ "scripts": {
8
+ "test": "echo \"Error: no test specified\" && exit 1"
9
+ },
10
+ "keywords": [],
11
+ "author": "",
12
+ "license": "ISC"
13
+ }
@@ -0,0 +1,22 @@
1
+ import type { Command } from 'commander'
2
+ import consola from 'consola'
3
+ import figlet from 'figlet'
4
+ import picocolors from 'picocolors'
5
+ import textConfig from '../../configs/text.config.ts'
6
+
7
+ // 输出项目信息
8
+ export const logInfo = (program: Command) => {
9
+ console.log(
10
+ picocolors.yellow(figlet.textSync('React Nest CLI', textConfig))
11
+ )
12
+ consola.start(picocolors.yellow(program.description()))
13
+ consola.info(picocolors.yellow(program.version()))
14
+ }
15
+
16
+ export default function info(program: Command) {
17
+ // 输出项目信息
18
+ program
19
+ .command('info')
20
+ .description('输出项目信息')
21
+ .action(() => logInfo(program))
22
+ }