@tomjs/create-app 1.6.1 → 2.0.0

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 (263) hide show
  1. package/README.md +1 -1
  2. package/README.zh_CN.md +1 -1
  3. package/dist/index.js +10 -22
  4. package/package.json +48 -48
  5. package/templates/{base/core → config/base}/.editorconfig +0 -4
  6. package/templates/config/base/.vscode/settings.json +50 -0
  7. package/templates/{base/core/_gitignore → config/base/_.gitignore} +1 -3
  8. package/templates/config/base/_commitlint.config.mjs +3 -0
  9. package/templates/config/base/_eslint.config.mjs +8 -0
  10. package/templates/config/base/lint-staged.config.mjs +3 -0
  11. package/templates/config/base/package.json +24 -0
  12. package/templates/config/base/pnpm-workspace.yaml +3 -0
  13. package/templates/config/base/simple-git-hooks.mjs +4 -0
  14. package/templates/{vscode → config/public}/LICENSE +1 -1
  15. package/templates/config/public/README.md +20 -0
  16. package/templates/config/public/README.zh_CN.md +20 -0
  17. package/templates/config/public/package.json +10 -0
  18. package/templates/config/style/lint-staged.config.mjs +7 -0
  19. package/templates/config/style/package.json +12 -0
  20. package/templates/config/style/stylelint.config.mjs +3 -0
  21. package/templates/{base/electron → electron-react}/.vscode/launch.json +23 -3
  22. package/templates/electron-react/.vscode/tasks.json +67 -0
  23. package/templates/electron-react/README.md +1 -1
  24. package/templates/electron-react/_eslint.config.mjs +8 -0
  25. package/templates/electron-react/electron/main/index.ts +71 -40
  26. package/templates/electron-react/electron/preload/index.ts +4 -0
  27. package/templates/electron-react/index.html +1 -2
  28. package/templates/electron-react/package.json +35 -1
  29. package/templates/electron-react/pnpm-workspace.yaml +6 -0
  30. package/templates/electron-react/src/App.css +6 -2
  31. package/templates/electron-react/src/App.tsx +12 -5
  32. package/templates/electron-react/src/index.css +14 -9
  33. package/templates/electron-react/tsconfig.json +9 -0
  34. package/templates/{base/electron → electron-react}/tsconfig.node.json +1 -1
  35. package/templates/electron-react/vite.config.ts +8 -21
  36. package/templates/electron-vue/.vscode/launch.json +48 -0
  37. package/templates/electron-vue/.vscode/tasks.json +67 -0
  38. package/templates/electron-vue/README.md +1 -1
  39. package/templates/electron-vue/_eslint.config.mjs +8 -0
  40. package/templates/electron-vue/electron/env.d.ts +1 -0
  41. package/templates/electron-vue/electron/main/index.ts +46 -30
  42. package/templates/electron-vue/electron/preload/index.ts +4 -0
  43. package/templates/electron-vue/index.html +1 -2
  44. package/templates/electron-vue/package.json +31 -2
  45. package/templates/electron-vue/pnpm-workspace.yaml +5 -0
  46. package/templates/electron-vue/src/App.vue +1 -1
  47. package/templates/electron-vue/src/style.css +15 -10
  48. package/templates/electron-vue/tsconfig.json +5 -0
  49. package/templates/electron-vue/tsconfig.node.json +7 -0
  50. package/templates/electron-vue/vite.config.ts +2 -20
  51. package/templates/{node-cli-legacy → node-base}/.vscode/launch.json +3 -6
  52. package/templates/node-base/package.json +15 -0
  53. package/templates/node-base/src/index.ts +5 -0
  54. package/templates/{node-cli-legacy → node-base}/tsconfig.json +1 -1
  55. package/templates/node-cli/.vscode/i18n-ally-custom-framework.yml +35 -0
  56. package/templates/node-cli/.vscode/launch.json +3 -6
  57. package/templates/node-cli/.vscode/settings.json +56 -0
  58. package/templates/node-cli/_.gitignore +59 -0
  59. package/templates/node-cli/locales/en-US.json +11 -0
  60. package/templates/node-cli/locales/zh-Hans.json +11 -0
  61. package/templates/node-cli/locales/zh-Hant.json +11 -0
  62. package/templates/node-cli/package.json +18 -20
  63. package/templates/node-cli/src/app.ts +19 -0
  64. package/templates/node-cli/src/config.ts +2 -2
  65. package/templates/node-cli/src/index.ts +77 -1
  66. package/templates/node-cli/src/types.ts +5 -1
  67. package/templates/node-cli/src/utils/exec.ts +68 -0
  68. package/templates/node-cli/src/utils/index.ts +3 -0
  69. package/templates/node-cli/src/utils/lang.ts +104 -0
  70. package/templates/node-cli/src/utils/util.ts +20 -0
  71. package/templates/node-cli/tsconfig.json +2 -2
  72. package/templates/node-cli/{tsup.config.ts → tsdown.config.ts} +3 -4
  73. package/templates/node-vite/examples/react/README.md +1 -0
  74. package/templates/node-vite/examples/react/_eslint.config.mjs +6 -0
  75. package/templates/{react → node-vite/examples/react}/index.html +1 -2
  76. package/templates/node-vite/examples/react/package.json +27 -0
  77. package/templates/{react → node-vite/examples/react}/src/App.css +5 -2
  78. package/templates/{react → node-vite/examples/react}/src/App.tsx +8 -9
  79. package/templates/{react → node-vite/examples/react}/src/index.css +15 -11
  80. package/templates/node-vite/examples/react/src/main.tsx +10 -0
  81. package/templates/node-vite/examples/react/tsconfig.json +5 -0
  82. package/templates/node-vite/examples/react/vite.config.ts +14 -0
  83. package/templates/node-vite/examples/vue/README.md +1 -0
  84. package/templates/node-vite/examples/vue/_eslint.config.mjs +6 -0
  85. package/templates/{vue → node-vite/examples/vue}/index.html +1 -2
  86. package/templates/node-vite/examples/vue/package.json +22 -0
  87. package/templates/{vue → node-vite/examples/vue}/src/App.vue +3 -3
  88. package/templates/node-vite/examples/vue/src/components/HelloWorld.vue +19 -0
  89. package/templates/{vue → node-vite/examples/vue}/src/main.ts +0 -1
  90. package/templates/{vue → node-vite/examples/vue}/src/style.css +16 -12
  91. package/templates/{base → node-vite/examples}/vue/tsconfig.json +2 -2
  92. package/templates/{vue → node-vite/examples/vue}/vite.config.ts +1 -1
  93. package/templates/node-vite/package.json +16 -0
  94. package/templates/node-vite/pnpm-lock.yaml +2293 -0
  95. package/templates/node-vite/pnpm-workspace.yaml +6 -0
  96. package/templates/{node → node-vite}/tsconfig.json +1 -1
  97. package/templates/{node-cli-legacy/tsup.config.ts → node-vite/tsdown.config.ts} +4 -5
  98. package/templates/vscode-base/.vscode/settings.json +59 -0
  99. package/templates/{vscode → vscode-base}/.vscode/tasks.json +2 -2
  100. package/templates/{base/node → vscode-base}/LICENSE +1 -1
  101. package/templates/{vscode/_gitignore → vscode-base/_.gitignore} +1 -0
  102. package/templates/vscode-base/locales/zh-CN.json +6 -0
  103. package/templates/{vscode → vscode-base}/package.json +12 -19
  104. package/templates/vscode-base/resources/logo.png +0 -0
  105. package/templates/vscode-base/resources/logo.svg +1 -0
  106. package/templates/{vscode/tsup.config.ts → vscode-base/tsdown.config.ts} +3 -3
  107. package/templates/{base/vscode → vscode-react}/.vscode/launch.json +14 -1
  108. package/templates/vscode-react/.vscode/settings.json +59 -0
  109. package/templates/{base/vscode → vscode-react}/.vscode/tasks.json +10 -1
  110. package/templates/{base/vscode → vscode-react}/LICENSE +1 -1
  111. package/templates/vscode-react/README.md +2 -2
  112. package/templates/{base/vscode/_gitignore → vscode-react/_.gitignore} +2 -1
  113. package/templates/{base/vscode → vscode-react}/extension/views/helper.ts +5 -4
  114. package/templates/{base/vscode → vscode-react}/extension/views/panel.ts +2 -1
  115. package/templates/vscode-react/package.json +65 -1
  116. package/templates/vscode-react/pnpm-workspace.yaml +5 -0
  117. package/templates/vscode-react/src/App.css +1 -1
  118. package/templates/vscode-react/src/App.tsx +16 -10
  119. package/templates/vscode-react/src/utils/vscode.ts +2 -81
  120. package/templates/vscode-react/src/vite-env.d.ts +1 -0
  121. package/templates/vscode-react/tsconfig.json +5 -0
  122. package/templates/vscode-react/vite.config.ts +4 -5
  123. package/templates/vscode-vue/.vscode/extensions.json +5 -0
  124. package/templates/vscode-vue/.vscode/launch.json +34 -0
  125. package/templates/vscode-vue/.vscode/settings.json +59 -0
  126. package/templates/{base/electron → vscode-vue}/.vscode/tasks.json +14 -6
  127. package/templates/vscode-vue/.vscodeignore +73 -0
  128. package/templates/vscode-vue/LICENSE +21 -0
  129. package/templates/vscode-vue/README.md +2 -2
  130. package/templates/vscode-vue/_.gitignore +65 -0
  131. package/templates/vscode-vue/extension/env.d.ts +1 -0
  132. package/templates/vscode-vue/extension/index.ts +21 -0
  133. package/templates/vscode-vue/extension/views/helper.ts +28 -0
  134. package/templates/vscode-vue/extension/views/panel.ts +49 -0
  135. package/templates/vscode-vue/locales/en.json +6 -0
  136. package/templates/vscode-vue/package.json +56 -2
  137. package/templates/vscode-vue/pnpm-workspace.yaml +4 -0
  138. package/templates/vscode-vue/src/App.vue +17 -11
  139. package/templates/vscode-vue/src/utils/vscode.ts +2 -81
  140. package/templates/vscode-vue/src/vite-env.d.ts +1 -0
  141. package/templates/vscode-vue/tsconfig.json +5 -0
  142. package/templates/vscode-vue/tsconfig.node.json +7 -0
  143. package/templates/vscode-vue/vite.config.ts +0 -4
  144. package/templates/web-react/README.md +1 -0
  145. package/templates/web-react/_eslint.config.mjs +6 -0
  146. package/templates/web-react/index.html +13 -0
  147. package/templates/web-react/package.json +27 -0
  148. package/templates/web-react/public/vite.svg +1 -0
  149. package/templates/web-react/src/App.css +45 -0
  150. package/templates/web-react/src/App.tsx +31 -0
  151. package/templates/web-react/src/assets/react.svg +1 -0
  152. package/templates/web-react/src/index.css +73 -0
  153. package/templates/web-react/src/main.tsx +10 -0
  154. package/templates/web-react/tsconfig.app.json +28 -0
  155. package/templates/web-react/tsconfig.json +7 -0
  156. package/templates/web-react/tsconfig.node.json +26 -0
  157. package/templates/web-react/vite.config.ts +14 -0
  158. package/templates/web-vue/README.md +1 -0
  159. package/templates/web-vue/_eslint.config.mjs +6 -0
  160. package/templates/web-vue/index.html +13 -0
  161. package/templates/web-vue/package.json +22 -0
  162. package/templates/web-vue/public/vite.svg +1 -0
  163. package/templates/web-vue/src/App.vue +32 -0
  164. package/templates/web-vue/src/assets/vue.svg +1 -0
  165. package/templates/web-vue/src/components/HelloWorld.vue +19 -0
  166. package/templates/web-vue/src/main.ts +5 -0
  167. package/templates/web-vue/src/style.css +84 -0
  168. package/templates/web-vue/tsconfig.app.json +4 -0
  169. package/templates/web-vue/tsconfig.json +7 -0
  170. package/templates/web-vue/tsconfig.node.json +7 -0
  171. package/templates/web-vue/vite.config.ts +7 -0
  172. package/templates/base/core/.commitlintrc.cjs +0 -3
  173. package/templates/base/core/.eslintignore +0 -14
  174. package/templates/base/core/.husky/commit-msg +0 -1
  175. package/templates/base/core/.husky/pre-commit +0 -1
  176. package/templates/base/core/.prettierignore +0 -17
  177. package/templates/base/core/.prettierrc.cjs +0 -1
  178. package/templates/base/core/_eslintrc.cjs +0 -7
  179. package/templates/base/core/_lintstagedrc.cjs +0 -4
  180. package/templates/base/core/package.json +0 -31
  181. package/templates/base/electron/electron/main/index.ts +0 -111
  182. package/templates/base/electron/electron/polyfills.ts +0 -4
  183. package/templates/base/electron/electron/preload/index.ts +0 -1
  184. package/templates/base/electron/package.json +0 -25
  185. package/templates/base/node/README.md +0 -13
  186. package/templates/base/node/README.zh_CN.md +0 -13
  187. package/templates/base/node/package.json +0 -47
  188. package/templates/base/node/test/index.test.ts +0 -7
  189. package/templates/base/package/package.json +0 -8
  190. package/templates/base/react/_eslintrc.cjs +0 -7
  191. package/templates/base/react/_lintstagedrc.cjs +0 -6
  192. package/templates/base/react/package.json +0 -19
  193. package/templates/base/react/tsconfig.json +0 -5
  194. package/templates/base/style/.stylelintignore +0 -16
  195. package/templates/base/style/.stylelintrc.cjs +0 -3
  196. package/templates/base/style/_lintstagedrc.cjs +0 -5
  197. package/templates/base/style/package.json +0 -10
  198. package/templates/base/vscode/.vscode/settings.json +0 -10
  199. package/templates/base/vscode/package.json +0 -67
  200. package/templates/base/vue/_eslintrc.cjs +0 -7
  201. package/templates/base/vue/_lintstagedrc.cjs +0 -6
  202. package/templates/base/vue/package.json +0 -17
  203. package/templates/config.json +0 -108
  204. package/templates/electron-react/public/img/icon.png +0 -0
  205. package/templates/electron-vue/public/img/icon.png +0 -0
  206. package/templates/node/package.json +0 -12
  207. package/templates/node/src/index.ts +0 -3
  208. package/templates/node/tsup.config.ts +0 -19
  209. package/templates/node-cli/index.d.ts +0 -5
  210. package/templates/node-cli/src/cli.ts +0 -68
  211. package/templates/node-cli/xxx.config.cjs +0 -0
  212. package/templates/node-cli-legacy/index.d.ts +0 -5
  213. package/templates/node-cli-legacy/package.json +0 -31
  214. package/templates/node-cli-legacy/src/cli.ts +0 -45
  215. package/templates/node-cli-legacy/src/config.ts +0 -28
  216. package/templates/node-cli-legacy/src/index.ts +0 -3
  217. package/templates/node-cli-legacy/src/types.ts +0 -1
  218. package/templates/node-cli-legacy/src/utils.ts +0 -5
  219. package/templates/node-vite-plugin/package.json +0 -19
  220. package/templates/node-vite-plugin/test/index.test.ts +0 -7
  221. package/templates/node-vite-plugin/tsconfig.json +0 -4
  222. package/templates/node-vite-plugin/tsup.config.ts +0 -18
  223. package/templates/node-workspaces/package.json +0 -10
  224. package/templates/react/package.json +0 -12
  225. package/templates/react/src/main.tsx +0 -11
  226. package/templates/react/src/vite-env.d.ts +0 -1
  227. package/templates/react/vite.config.ts +0 -7
  228. package/templates/schema.json +0 -110
  229. package/templates/vscode/.vscode/settings.json +0 -10
  230. package/templates/vscode/README.md +0 -3
  231. package/templates/vue/package.json +0 -12
  232. package/templates/vue/src/components/HelloWorld.vue +0 -37
  233. package/templates/vue/src/vite-env.d.ts +0 -1
  234. package/templates/{base/core → config/base}/.gitattributes +0 -0
  235. package/templates/{node-cli-legacy/xxx.config.cjs → config/base/README.md} +0 -0
  236. package/templates/{base/electron → electron-react}/electron/env.d.ts +0 -0
  237. package/templates/{react → node-vite/examples/react}/public/vite.svg +0 -0
  238. package/templates/{react → node-vite/examples/react}/src/assets/react.svg +0 -0
  239. package/templates/{base → node-vite/examples}/react/tsconfig.node.json +0 -0
  240. package/templates/{vue → node-vite/examples/vue}/public/vite.svg +0 -0
  241. package/templates/{vue → node-vite/examples/vue}/src/assets/vue.svg +0 -0
  242. package/templates/{base → node-vite/examples}/vue/tsconfig.node.json +0 -0
  243. package/templates/{node-vite-plugin → node-vite}/src/index.ts +0 -0
  244. package/templates/{node-vite-plugin → node-vite}/src/types.ts +0 -0
  245. package/templates/{base/vscode → vscode-base}/.vscode/extensions.json +0 -0
  246. package/templates/{vscode → vscode-base}/.vscode/launch.json +0 -0
  247. package/templates/{vscode → vscode-base}/.vscodeignore +0 -0
  248. package/templates/{base/vscode → vscode-base}/README.md +0 -0
  249. package/templates/{vscode → vscode-base}/locales/en.json +0 -0
  250. package/templates/{vscode → vscode-base}/src/index.ts +1 -1
  251. package/templates/{vscode → vscode-base}/tsconfig.json +0 -0
  252. package/templates/{vscode → vscode-react}/.vscode/extensions.json +0 -0
  253. package/templates/{base/vscode → vscode-react}/.vscodeignore +0 -0
  254. package/templates/{base/vscode → vscode-react}/extension/env.d.ts +0 -0
  255. package/templates/{base/vscode → vscode-react}/extension/index.ts +1 -1
  256. /package/templates/{base/vscode → vscode-react}/locales/en.json +0 -0
  257. /package/templates/{base/vscode → vscode-react}/locales/zh-CN.json +0 -0
  258. /package/templates/{base/vscode → vscode-react}/resources/logo.png +0 -0
  259. /package/templates/{base/vscode → vscode-react}/resources/logo.svg +0 -0
  260. /package/templates/{base/vscode → vscode-react}/tsconfig.node.json +0 -0
  261. /package/templates/{vscode → vscode-vue}/locales/zh-CN.json +0 -0
  262. /package/templates/{vscode → vscode-vue}/resources/logo.png +0 -0
  263. /package/templates/{vscode → vscode-vue}/resources/logo.svg +0 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @tomjs/create-app
2
2
 
3
- ![npm](https://img.shields.io/npm/v/@tomjs/create-app) ![node-current (scoped)](https://img.shields.io/node/v/@tomjs/create-app) ![NPM](https://img.shields.io/npm/l/@tomjs/create-app)
3
+ ![npm](https://img.shields.io/npm/v/@tomjs/create-app) ![node-current (scoped)](https://img.shields.io/node/v/@tomjs/create-app) ![license](https://img.shields.io/npm/l/@tomjs/create-app)
4
4
 
5
5
  **English** | [中文](./README.zh_CN.md)
6
6
 
package/README.zh_CN.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](./README.md) | **中文**
4
4
 
5
- ![npm](https://img.shields.io/npm/v/@tomjs/create-app) ![node-current (scoped)](https://img.shields.io/node/v/@tomjs/create-app) ![NPM](https://img.shields.io/npm/l/@tomjs/create-app)
5
+ ![npm](https://img.shields.io/npm/v/@tomjs/create-app) ![node-current (scoped)](https://img.shields.io/node/v/@tomjs/create-app) ![license](https://img.shields.io/npm/l/@tomjs/create-app)
6
6
 
7
7
  > 创建基于 [vite](https://github.com/vitejs/vite) + [tomjs](https://github.com/tomjs) 的 web 应用。
8
8
 
package/dist/index.js CHANGED
@@ -1,26 +1,14 @@
1
- import qe from"meow";import w from"node:fs";import Ae from"node:os";import g from"node:path";import{fileURLToPath as Pe}from"node:url";import{copySync as Ee,mkdirSync as $e,readFileSync as ie,readJsonSync as ae,rmSync as N,writeFileSync as T,writeJsonSync as Se}from"@tomjs/node";import x from"chalk";import{camelCase as De,cloneDeep as ce,merge as Ce}from"lodash-es";import B from"node:os";import X from"node:path";import{mkdirSync as be,readJsonSync as ve,writeJsonSync as ke}from"@tomjs/node";import O from"chalk";import je from"inquirer";import he from"@tomjs/logger";import{$ as xe}from"execa";import $ from"inquirer";var d=new he({directory:"create-app/logs"});function S(e,t,o){let s={message:e};return Array.isArray(t)||typeof t!="object"?s.default=t:Object.assign(s,t),Object.assign(s,o)}async function h(e,t){let o=`confirm-${Date.now()}`,s=S(e,t);return(await $.prompt([{type:"confirm",name:o,...s}]))[o]}async function V(e,t){let o=`input-${Date.now()}`,{required:s,...r}=S(e,t),i=s??!0,a=r.validate;return(i||a)&&(r.validate=n=>{let m=(n||"").trim();return i&&!m?"It's required!":a?a(n):!0}),(await $.prompt([{type:"input",name:o,...r}]))[o]}async function K(e,t,o){let s=`checkbox-${Date.now()}`,{required:r,min:i,max:a,...p}=S(e,o),n=r??!0,m=p.validate;return(n||i||a)&&(p.validate=c=>n&&c.length===0?"Please select at least one option":i&&c.length<i?`Please select at least ${i} options`:a&&c.length>a?`Please select at most ${a} options`:m?m(c):!0),(await $.prompt([{type:"checkbox",name:s,choices:t,pageSize:Math.min(t.length,10),...p}]))[s]}async function v(e,t,o){let s=`list-${Date.now()}`,r=S(e,o);return(await $.prompt([{type:"list",name:s,choices:t,pageSize:Math.min(t.length,10),...r}]))[s]}var F={cwd:"."};async function D(e,t){let{trim:o,...s}=Object.assign({stdio:"pipe",shell:!0,cwd:F.cwd},t);s.cwd??=F.cwd,Array.isArray(e)&&(e=e.join(" "));let r=i=>{F.verbose?d.debug(i):d.write(i)};r(`$ ${e}`);try{let a=(await xe(s)`${e}`).stdout;return r(a),o?a.trim().replace(/\n|\r/g,""):a.trim()}catch(i){let a=i.stderr||i.message;throw r(a),new Error(a)}}function Q(e){if(e&&e.packageManager)return e.packageManager.split("@")[0];let t=process.env.npm_config_user_agent;return t?t.split(" ")[0].split("/")[0]:void 0}var Y={repo:"https://github.com",owner:B.userInfo().username};function q(e){let{repo:t,owner:o}=e;return`${t}${t.endsWith("/")?"":"/"}${o}`}async function H(e){let t=await je.prompt([{type:"text",name:"repo",message:`${e?.repo?"Edit":"Add"} git repository url:`,default:e?.repo||Y.repo},{type:"text",name:"owner",message:`${e?.owner?"Edit":"Add"} git repository owner:`,default:e?.owner||Y.owner}]);return{id:e?.id||Date.now().toString(),repo:t.repo,owner:t.owner}}var Z=X.join(B.homedir(),".tomjs","create-app"),ee=X.join(Z,"config.json");function C(){return be(Z),Object.assign({gitRepos:[]},ve(ee))}function Oe(e){let t=C();t.createTime?t.updateTime=Date.now():t.createTime=Date.now(),ke(ee,Object.assign(t,e))}function G(e){Oe({gitRepos:e})}async function k(e,t=!1){e||(e=C().gitRepos||[]);let o=e.map(p=>({name:q(p),value:p.id})).concat([{name:O.green("+ Add"),value:"add"},{name:O.yellow("\u2190 Exit"),value:"exit"}]),s=await v(e.length===0?"You choose to add or exit:":"You can choose the repository to be operated, or choose to add or exit:",o);if(s==="exit")return;if(s==="add"){let p=await H();return e.push(p),G(e),k(e,t)}let r=e.findIndex(p=>p.id===s),i=await v("Select an action?",[{name:O.green("^ Edit"),value:"edit"},{name:O.red("- Remove"),value:"remove"},{name:O.yellow("\u2190 Exit"),value:"exit"}]);if(i==="exit")return t?k(e,t):C();if(i==="remove")return await h("Where confirm to remove?",!0)&&(e.splice(r,1),G(e)),k(e,t);let a=await H(e[r]);return e[r]=a,G(e),k(e,t)}async function te(){let e=C(),{gitRepos:t}=e;return t.length===0&&(console.log(`You need to set the ${O.blue("git remote repository")} for the first time.`),await k(t)),e}var b={},Te=g.join(Pe(import.meta.url),"../../"),pe=g.join(Te,"templates"),Ie=ae(g.join(pe,"config.json"))||{},A=Ie.list||[],I=A.map(e=>e.variants?e.variants.map(t=>({parent:e,...t})):[]).flat(),Re=A.map(e=>e.variants&&e.variants.map(t=>t.name)||[e.name]).reduce((e,t)=>e.concat(t),[]),Ne=["name","version","displayName","description","private","type","engines","packageManager","keywords","categories","author","publisher","contributors","homepage","bugs","license","files","bin","main","module","types","exports","publishConfig","repository","activationEvents","contributes","badges","icon","vsce","scripts","dependencies","devDependencies","peerDependencies","optionalDependencies"],Ue=["dev","dev:","debug","start","build","build:","release","clean","preview","test","lint","lint:eslint","lint:stylelint","lint:prettier"];async function ne(e){return D(`git config --get ${e}`,{trim:!0})}var se=e=>/^(?:(@[a-z0-9.+-]+(-[a-z0-9.+-]+)*\/)?([a-z0-9][a-z0-9._-]*[a-z0-9]))$/.test(e),Fe=e=>/^[a-z0-9._-]+$/.test(e),_e=e=>e.includes("/")?e.substring(e.indexOf("/")+1):e;function R(e){return ae(g.join(e,"package.json"))||{}}function M(e,t){Se(g.join(e,"package.json"),t)}function re(e,t,o){let s={},r=Object.keys(e);{let n=r.filter(u=>u.includes(":"));r=r.filter(u=>!u.includes(":")).sort().concat(n)}let i=p(t),a=p(o);return i.concat(r.filter(n=>!i.includes(n)&&!a.includes(n))).concat(a).forEach(n=>{s[n]=e[n]}),s;function p(n){let m=Array.isArray(n)?n:[];return m.length>0&&(m=m.reduce((u,c)=>{if(c.endsWith(":")){let l=r.filter(y=>!u.includes(y)&&y.startsWith(c));return u.concat(l)}return r.includes(c)?u.concat(c):u},[])),m}}async function le(e){if(Object.assign(b,e),b.git){await k(void 0,!0);return}b.type==="project"?await Le():await ue(b.type)}async function Le(){let e="project",t=await me(e,b.cwd),{projectDir:o}=t.userOptions;W(e,t),await J(t);let{workspaces:s}=t,r=g.join(o,"packages");s&&await h("Do you want to create an package?")&&await ue("package",r);let{examples:i}=t,a=Array.isArray(i)&&i.length>0;if(a){let n=I.filter(u=>i.includes(u.name)),m=g.join(o,"examples");for(let u of n){let c=ce(u);c.templates=fe(c.templates).concat(c.name);let l=g.join(m,c.name);c.userOptions={projectDir:l,pkgName:c.name,gitUserUrl:"",textVars:{}},await ge(c),W("example",c),await J(c)}}let p=w.existsSync(r)&&w.readdirSync(g.join(o,"packages")).length>0;if(p||a){let n=R(o),m=Q(n)||"npm",u=[];if(p&&u.push("packages"),a&&u.push("examples"),m==="pnpm"){let l=g.join(o,"pnpm-workspace.yaml");w.existsSync(l)||T(l,`packages:
2
- ${u.map(y=>` - '${y}/*'
3
- `)}`)}else n.workspaces??=u.map(l=>`"${l}/*"`),M(o,n);let c=n.devDependencies??{};p&&"vitest"in c&&T(g.join(o,"vitest.config.ts"),'export default ["packages/*"];')}await Ge(t)}async function ue(e,t){let o=!0,s=0;for(;o;){s++;let r=await me(e,t||b.cwd,s===1?b.template:void 0),{pkgName:i}=r.userOptions;W(e,r),await J(r),d.success(`${x.green(i)} created successfully!`),o=await h(`Do you want to create another ${e}?`)}}function oe(e,...t){!Array.isArray(t)||t.length===0||t.forEach(o=>{let s=g.join(e,o);w.existsSync(s)&&N(s)})}function Ve(e,t,o){if(!w.existsSync(e))return;let s=ie(e);s=s.replaceAll(t,o),T(e,s)}function Qe(e,t,o){let s=o.userOptions,{textVars:r}=s;if(["scripts","dependencies","devDependencies","peerDependencies"].forEach(i=>{e[i]&&(i==="scripts"?e[i]=re(e[i],Ue,["prepare"]):e[i]=re(e[i]))}),t==="example"?(delete e.types,delete e.exports,delete e.publishConfig,delete e.repository,delete e.module,delete e.license,e.private=!0):t==="package"&&(e.repository&&typeof e.repository=="object"&&(e.repository.directory=`packages/${r.pkgShortName}`),e.scripts&&Object.keys(e.scripts).forEach(i=>{i.startsWith("lint")&&delete e.scripts[i]})),!o.test){let i=e.scripts;if(i){delete i.test;{let a=i["lint:eslint"]||"";a&&(i["lint:eslint"]=a.replace(",test",""))}}delete e.devDependencies?.vitest}e.type==="commonjs"&&delete e.type,e.private===!1&&delete e.private,o.userOptions.gitUserUrl||delete e.repository}function W(e,t,o){let s=o??t.userOptions.projectDir,r=g.join(s,".temp");$e(r);let i=t.templates||[],a=[];e==="package"?a=["base/package"]:e==="project"&&(a=["base/core"]);let p=a.concat(i);if(p.forEach((n,m)=>{let u=g.join(pe,n);if(!w.existsSync(u))return;Ee(u,s);let c=R(r)||{},l=Ce(c,R(s));if(m===p.length-1){let y={};Ne.forEach(j=>{j in l&&(y[j]=l[j],delete l[j])}),l=Object.assign(y,l),Qe(l,e,t),M(s,l)}else M(r,l)}),N(r),t.test||(oe(s,"test"),Ve(g.join(s,"tsconfig.json"),', "test"',"")),e==="package"){let n=[".vscode"].concat(t.packages?.exclude??[]);oe(s,...n)}}async function J(e,t){let o=e.userOptions,{textVars:s}=o,r=t??o.projectDir;w.readdirSync(r).filter(p=>p.startsWith("_")).forEach(p=>{w.renameSync(g.join(r,p),g.join(r,p.replace("_",".")))});let i=R(r),a=["LICENSE","README.md","README.zh_CN.md"];!i.publishConfig&&!i.publisher&&a.forEach(p=>{N(g.join(r,p))}),["package.json",...a].forEach(p=>{let n=g.join(r,p);if(!w.existsSync(n))return;let m=ie(n);Object.keys(s).forEach(u=>{m=m.replace(new RegExp("{{"+u+"}}","g"),s[u])}),T(n,m)})}async function me(e,t,o){let{gitRepos:s}=await te(),r=(b.name||"").trim(),i=se(r);(!r||!i)&&(r=await V("Package name:",{validate:c=>se(c)?!0:"Please input a valid name!"}));let a=_e(r);a!==r&&(a=await V("Project name:",{default:a,validate:c=>Fe(c)?!0:"Please input a valid name!"})),d.debug("projectName:",a);let p=g.join(t,a);w.existsSync(p)&&await h("Project already exists, overwrite?")&&N(p),d.debug("projectDir:",p);let n;o&&Re.includes(o)&&(n=I.find(c=>c.name===o));let m=async c=>{let l=await v(!n&&c?`${x.red(c)} is invalid, please select a framework again:`:"Select a framework:",A.filter(f=>!f.variants||!f.variants.length?!1:e==="package"?f.variants.filter(E=>!E.packages?.ignore).length>0:!0).map(f=>({name:f.display,value:f.name})));d.debug("framework:",l);let y=A.find(f=>f.name===l)?.variants||[],j=e==="package"?y.filter(f=>!f.packages?.ignore).map(f=>{let E=f.parent;return E?{name:`${E.display} > ${f.display}`,value:f.name}:{name:f.display,value:f.name}}):y.map(f=>({name:f.display,value:f.name})),we=A.find(f=>f.name===l)?.display,U=await v(`Select a ${x.blue(we)} variant:`,j.concat([{name:x.yellow("\u2190 Back"),value:"_"}]));d.debug("variant:",U),U==="_"?await m(c):n=y.find(f=>f.name===U)};if(n||await m(o),!n)throw new Error("variant not found");n=ce(n),n.templates||(n.templates=[]),n.templates=fe(n.templates).concat(n.name),d.debug("variant:",n),e==="project"&&Array.isArray(n.examples)&&(n.examples=await K("Select examples:",n.examples.map(c=>{let l=I.find(y=>y.name===c);if(!l)throw new Error(`Can't find example ${x.yellow(c)} from ${x.blue(n.name)}`);return{name:l.display,value:l.name,checked:!0}}),{required:!1}));let u="";if(e==="example"?(n.devDependencies=0,n.workspaces=!1,n.test=!1):e==="package"?n.workspaces=!1:n.git&&(u=await v("Which git repository do you want to choose?",s.map(c=>{let l=q(c);return{name:l,value:l}}).concat([{name:x.yellow("None"),value:""}]))),n.devDependencies===2){let c=await h("Whether it will be used for devDependencies?");n.devDependencies=c?1:0}return n.test&&(n.test=await h("Whether to use test?")),n.userOptions={pkgName:r,projectDir:p,gitUserUrl:u},await ge(n),n}function fe(e){let t=[],o=async s=>{if(!(!Array.isArray(s)||!s.length))for(let r of s){if(r.startsWith("base/")){t.push(r);continue}let i=I.find(a=>a.name===r);if(!i){d.warning(`Can't find template ${x.yellow(r)}`);continue}o(i.templates)}};return o(e),[...new Set(t)]}async function ge(e){let{pkgName:t,gitUserUrl:o}=e.userOptions,s=await ne("user.name"),r=await ne("user.email"),i={name:s||Ae.userInfo().username,email:r||""},a=["pnpm","yarn","npm"].map(c=>`# ${c}
4
- ${c} add ${t}${e.devDependencies?" -D":""}`).join(`
5
-
6
- `),p={pkgName:t,pkgShortName:t.startsWith("@")?t.split("/")[1]:t,pkgInstall:a,gitUserName:i.name,gitUserEmail:i.email,gitOrg:m(),gitUrl:n(),gitFullUrl:u(),gitFullSSHUrl:u(),dateYear:new Date().getFullYear()};function n(){return`${o||`https://github.com/${m()}`}/${t.substring(t.indexOf("/")+1)}`}function m(){return o?o.substring(o.lastIndexOf("/")+1):t.startsWith("@")?t.split("/")[0].substring(1):De(i.name)}function u(c=!1){let l=o||`https://github.com/${m()}`;return c&&(l=l.replace(/http(s):\/\//g,"git@").replace(/\//,":")),`${l}/${t.substring(t.indexOf("/")+1)}.git`}return e.userOptions.textVars=p,p}async function Ge(e){let{gitUserUrl:t,textVars:o,projectDir:s}=e.userOptions;t&&(await D("git init",{cwd:s}),await D(`git remote add origin ${o.gitFullSSHUrl}`,{cwd:s}));let r=process.cwd(),i=g.relative(r,s);console.log(`
7
- Done. Now run:
8
- `),s!==r&&console.log(` cd ${i.includes(" ")?`"${i}"`:i}`);let a=Q()||"npm";switch(a){case"yarn":console.log(" yarn"),console.log(" yarn dev");break;default:console.log(` ${a} install`),console.log(` ${a} run dev`);break}}var z=qe(`
1
+ import e from"meow";import t from"node:fs";import n from"node:fs/promises";import r from"node:os";import i from"node:path";import{fileURLToPath as a}from"node:url";import*as o from"@clack/prompts";import{copy as s,mkdir as c,mkdirp as l,readFile as u,readJson as d,rm as f,rmSync as p,writeFile as m,writeJson as h}from"@tomjs/node";import{merge as g,omit as ee}from"lodash-es";import{glob as _}from"tinyglobby";import v from"chalk";import{$ as y}from"execa";import b from"@tomjs/logger";const x=a(new URL(`..`,import.meta.url)),S=[{name:`node`,display:`Node`,color:v.green,children:[{name:`node-base`,display:`Base`,color:v.green},{name:`node-cli`,display:`CLI`,color:v.green},{name:`node-vite`,display:`Vite Plugin`,color:v.blue,hasStyle:!0}]},{name:`web`,display:`Web`,color:v.magenta,children:[{name:`web-vue`,display:`Vue`,color:v.green,hasStyle:!0,isPublic:!1},{name:`web-react`,display:`React`,color:v.blue,hasStyle:!0,isPublic:!1}]},{name:`vscode`,display:`VSCode`,color:v.blue,children:[{name:`vscode-base`,display:`Base`,color:v.yellow,isPublic:`public`},{name:`vscode-vue`,display:`Vue`,color:v.green,hasStyle:!0,isPublic:`public`},{name:`vscode-react`,display:`React`,color:v.blue,hasStyle:!0,isPublic:`public`}]},{name:`electron`,display:`Electron`,color:v.cyan,children:[{name:`electron-vue`,display:`Vue`,color:v.green,hasStyle:!0,isPublic:!1},{name:`electron-react`,display:`React`,color:v.blue,hasStyle:!0,isPublic:!1}]}],C=[{id:`github`,name:`Github`,url:`https://github.com`},{id:`gitcode`,name:`GitCode`,url:`https://gitcode.com`},{id:`gitee`,name:`码云`,url:`https://gitee.com`}],w=`publisher.name.displayName.type.version.private.packageManager.description.author.contributors.license.funding.homepage.repository.publishConfig.bugs.keywords.categories.sideEffects.imports.exports.main.module.unpkg.jsdelivr.types.typesVersions.bin.icon.files.engines.activationEvents.contributes.scripts.peerDependencies.peerDependenciesMeta.dependencies.optionalDependencies.devDependencies.pnpm.overrides.resolutions.husky.simple-git-hooks.lint-staged.eslintConfig`.split(`.`),T=[`dev`,`dev:`,`debug`,`debug:`,`start`,`build`,`build:`,`preview`,`release`,`release:`,`clean`,`clean:`,`test`,`lint`,`lint:`],E=new b({directory:`create-app/logs`}),te=process.platform===`win32`;let D={};function O(e){D=e}function k(){return D}async function A(e,t){let{trim:n,...r}=Object.assign({stdio:`pipe`,shell:!0},t);Array.isArray(e)&&(e=e.join(` `));let i=e=>{k().verbose?E.debug(e):E.write(e)};i(`$ ${e}`);try{let t=(await y(r)`${e}`).stdout;return i(t),n?t.trim().replace(/\n|\r/g,``):t.trim()}catch(e){let t=e.stderr||e.message;throw i(t),Error(t)}}function j(e){if(e===`C`)return`en-US`;let t=``;try{t=Intl.getCanonicalLocales(e)[0]}catch(t){console.log(`${t.toString()}, invalid language tag: "${e}"\n`)}switch(t){case`zh-TW`:case`zh-HK`:case`zh-MO`:case`zh-CN`:case`zh-SG`:t=`zh-CN`;break;default:t=e}return t}function M(){return j((process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||Intl.DateTimeFormat().resolvedOptions().locale||`en-US`).split(`.`)[0].replace(`_`,`-`))}async function N(e){return await t.promises.readFile(e,`utf-8`).then(e=>JSON.parse(e)||{})}async function ne(e){let n=M(),r=i.resolve(e,`${n}.json`),a=i.resolve(e,`en-US.json`);return t.existsSync(r)?await N(r):await N(a)}const P=await ne(i.join(x,`locales`));function F(...e){if(e.length===0||!P)return``;let[t,...n]=e,r=P[t]??``;if(n[0]===null||n[0]===void 0||n[0]===``)return r;let i=typeof n[0]==`object`?n[0]:n;return r.replace(/\{([^}]+)\}/g,(e,t)=>i[t]??e)}const re=i.join(a(import.meta.url),`../../`),I=i.join(re,`templates`),L=()=>o.cancel(F(`prompt.cancel`));async function R(e){O(e);let t=await z(e);t&&await B(t)}async function z(e){let n=async function(){let e=await o.select({message:F(`prompt.templateType.message`),options:S.map(e=>({label:e.color(e.display||e.name),value:e.name}))});if(o.isCancel(e))return L();let t=S.find(t=>t.name===e),r=await o.select({message:F(`prompt.template.message`),options:t.children.map(e=>({label:e.color(e.display||e.name),value:e.name})).concat({label:F(`prompt.template.back`),value:`back`})});return o.isCancel(r)?L():r===`back`?await n():{template:r,templateOptions:t.children.find(e=>e.name===r)}},a=await n();if(!a)return;let{template:s,templateOptions:c}=a,l=V(e.dir);if(!l||[`.`,`~`].includes(l)){let e=await o.text({message:F(`prompt.project.message`),defaultValue:s,placeholder:s,validate:e=>e.length===0||V(e).length>0?void 0:F(`prompt.project.invalid`)});if(o.isCancel(e))return L();l=i.resolve(l===`~`&&!te?r.homedir():process.cwd(),V(e))}if(t.existsSync(l)&&!H(l)){let t=e.overwrite;if(!t){let e=await o.select({message:F(`prompt.exist.message`,l),options:[{label:F(`prompt.exist.option.no`),value:`no`},{label:F(`prompt.exist.option.yes`),value:`yes`},{label:F(`prompt.exist.option.ignore`),value:`ignore`}]});if(o.isCancel(e))return L();t=e}switch(t){case`yes`:U(l);break;case`no`:L();return}}let u=i.basename(i.resolve(l)),d=await o.text({message:F(`prompt.package.message`),defaultValue:K(u),placeholder:K(u),validate:e=>e.length===0||W(e)?void 0:F(`prompt.package.invalid`)});if(o.isCancel(d))return L();u=d;let f;if(e.private!==!0&&c.isPublic!==`public`){let e=await o.confirm({message:F(`prompt.public.message`),active:F(`prompt.confirm.yes`),inactive:F(`prompt.confirm.no`),initialValue:c.isPublic??!0});if(o.isCancel(e))return L();f=e}else f=!e.private;let p;if(f){let e=await o.select({message:F(`prompt.gitUrl.message`),options:C.map(e=>({label:`${e.name} (${e.url})`,value:e.id}))});if(o.isCancel(e))return L();p=C.find(t=>t.id===e)?.url}let m;if(f){let e=J(u);e||await q(`user.email`)===`tom@tomgao.cc`&&(e=`tomjs`);let t=await o.text({message:F(`prompt.gitOrg.message`),defaultValue:e,placeholder:e,validate:t=>e&&!t||G(t)?void 0:F(`prompt.gitOrg.invalid`)});if(o.isCancel(t))return L();m=t}return{targetDir:l,packageName:u,template:s,templateOptions:c,isPublic:f,gitUrl:p,gitOrg:m}}async function B(e){E.debug(`projectOptions:`,ee(e,`templateOptions`));let{targetDir:t,packageName:a,template:o,isPublic:p,gitUrl:v,gitOrg:y,templateOptions:b}=e;await c(t);let x=o.includes(`vscode`),S={},C=i.join(t,`.temp`);if(await l(C),await Y(S,`base`,C),b.hasStyle&&await Y(S,`style`,C),p&&!x&&await Y(S,`public`,C),await s(C,t),await f(C),await s(i.join(I,o),t),g(S,await d(i.join(i.join(I,o),`package.json`))),S.name=a,p){delete S.private,S.name=a,S.license=`MIT`;let e=await q(`user.name`)||r.userInfo().username,n=await q(`user.email`);e&&n?S.author={name:e,email:n}:e&&(S.author=e);let o=`${v}/${y}/${i.basename(t)}`;x?(S.publisher=y,S.homepage=`${o}/blob/main/README.md`,S.bugs={url:`${o}/issues`}):delete S.publishConfig,S.repository={type:`git`,url:`git+${o}.git`}}else S.private=!0,delete S.publishConfig,S.devDependencies&&delete S.devDependencies.publint;if(await h(i.join(t,`package.json`),ae(S)),p){let{author:e}=S,r=``;e&&(typeof e==`string`?r=e:typeof e==`object`&&(e.name&&e.email?r=`${e.name}<${e.email}>`:e.name?r=e.name:e.email&&(r=e.email)));let o={pkgName:a,dateYear:new Date().getFullYear(),gitUserName:r},s=(await n.readdir(t)).filter(e=>[`README.md`,`README.zh_CN.md`,`LICENSE`].includes(e));for(let e of s){let n=await u(i.join(t,e));Object.keys(o).forEach(e=>{n=n.replace(RegExp(`{{${e}}}`,`g`),o[e])}),await m(i.join(t,e),n)}}let w=await _(`**/_*`,{ignore:[`**/node_modules/**`,`**/.*`],cwd:t});for(let e of w){let r=e.split(`/`);r[r.length-1]=r[r.length-1].substring(1),await n.rename(i.join(t,e),i.join(t,r.join(`/`)))}await A(`git init`,{cwd:t})}function V(e){return(e||``).trim().replace(/\/+$/g,``)}function H(e){return t.readdirSync(e).length===0}function U(e){t.existsSync(e)&&p(e)}function W(e){return/^(?:@[a-z\d\-*~][a-z\d\-*._~]*\/)?[a-z\d\-~][a-z\d\-._~]*$/.test(e)}function G(e){return/^[a-z][a-z\d\-._]*$/.test(e)}function K(e){return e.trim().toLowerCase().replace(/\s+/g,`-`).replace(/^[._]/,``).replace(/[^a-z\d\-~]+/g,`-`)}async function q(e){return A(`git config --get ${e}`,{trim:!0})}function J(e){if(e.startsWith(`@`))return e.split(`/`)[0].substring(1)}async function Y(e,t,r){let a=i.join(I,`config/${t}`),o=await n.readdir(a);for(let t of o)[`node_modules`,`.git`].includes(t)||(t===`package.json`?g(e,await d(i.join(a,`package.json`))):await s(i.join(a,t),i.join(r,t)))}function X(e,t){if(!e)return e;let n={};return Array.isArray(t)&&t.length>0?(t.filter(t=>t in e).forEach(t=>{n[t]=e[t]}),Object.keys(e).filter(e=>!t.includes(e)).sort().forEach(t=>{n[t]=e[t]})):Object.keys(e).sort().forEach(t=>{n[t]=e[t]}),n}function ie(e,t,n){let r={},i=Object.keys(e);{let e=i.filter(e=>e.includes(`:`));i=i.filter(e=>!e.includes(`:`)).sort().concat(e)}let a=s(t),o=s(n);return a.concat(i.filter(e=>!a.includes(e)&&!o.includes(e))).concat(o).forEach(t=>{r[t]=e[t]}),r;function s(e){let t=Array.isArray(e)?e:[];return t.length>0&&(t=t.reduce((e,t)=>{if(t.endsWith(`:`)){let n=i.filter(n=>!e.includes(n)&&n.startsWith(t));return e.concat(n)}return i.includes(t)?e.concat(t):e},[])),t}}function ae(e){return e=X(e,w),e.scripts&&=ie(e.scripts,T,[`prepare`,`prepublishOnly`]),[`dependencies`,`devDependencies`,`peerDependencies`].forEach(t=>{e[t]&&(e[t]=X(e[t]))}),e}const Z=e(`
9
2
  Usage
10
- $ create-app [name] [options]
3
+ $ create-app [options] <dir>
11
4
 
12
- name The package name
5
+ dir ${F(`options.dir`)}
13
6
 
14
7
  Options
15
- --cwd The current working directory (default: ".")
16
- -e, --example Only create examples
17
- -p, --package Only create packages
18
- --git Only manage git repository
19
- --verbose Display verbose output
20
- -h, --help Display this message
21
- -v, --version Display version number
22
-
23
- Examples
24
- $ create-app my-project
25
- $ create-app my-project --template=vue
26
- `,{importMeta:import.meta,booleanDefault:void 0,helpIndent:0,flags:{cwd:{type:"string"},verbose:{type:"boolean",default:process.env.NODE_ENV==="development"},example:{shortFlag:"e",type:"boolean"},package:{shortFlag:"p",type:"boolean"},h:{type:"boolean",default:!1},v:{type:"boolean",default:!1}}}),{input:de,flags:P}=z;if(P.h)z.showHelp(0);else if(P.v)z.showVersion();else{d.enableDebug(P.verbose),d.debug("cli options:",de,P);let e=Object.assign({name:de[0],type:"project"},P);e.cwd||=process.cwd(),e.example??=ye(process.env.CA_EXAMPLE),e.package??=ye(process.env.CA_PACKAGE),d.debug("final options:",e),e.type=Me(e),await le(e)}function Me(e){return e.example?"example":e.package?"package":"project"}function ye(e){return e==="1"||e==="true"}
8
+ -o, --overwrite ${F(`options.overwrite`)}
9
+ -p, --private ${F(`options.private`)}
10
+ -i, --install ${F(`options.install`)}
11
+ --verbose ${F(`options.verbose`)}
12
+ -h, --help ${F(`options.help`)}
13
+ -v, --version ${F(`options.version`)}
14
+ `,{importMeta:import.meta,booleanDefault:void 0,helpIndent:0,flags:{overwrite:{type:`string`},private:{type:`boolean`,shortFlag:`p`},install:{type:`boolean`,shortFlag:`i`},verbose:{type:`boolean`,default:!1},help:{type:`boolean`,shortFlag:`h`},version:{type:`boolean`,shortFlag:`v`}}}),{input:Q,flags:$}=Z;$.help?Z.showHelp(0):$.version?Z.showVersion():(E.enableDebug($.verbose),E.debug(`project dir:`,Q.join()),E.debug(`cli options:`,$),R(Object.assign({dir:Q[0]},$)));export{};
package/package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "name": "@tomjs/create-app",
3
3
  "type": "module",
4
- "version": "1.6.1",
4
+ "version": "2.0.0",
5
5
  "description": "create tomjs web app",
6
+ "author": {
7
+ "name": "Tom Gao",
8
+ "email": "tom@tomgao.cc"
9
+ },
10
+ "license": "MIT",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/tomjs/create-app.git"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public",
17
+ "registry": "https://registry.npmjs.org"
18
+ },
6
19
  "keywords": [
7
20
  "tomjs",
8
21
  "front-end",
@@ -21,70 +34,57 @@
21
34
  "web",
22
35
  "node"
23
36
  ],
24
- "author": {
25
- "name": "Tom Gao",
26
- "email": "tom@tomgao.cc"
27
- },
28
- "license": "MIT",
29
37
  "bin": {
30
38
  "create-app": "dist/index.js"
31
39
  },
32
40
  "files": [
33
41
  "dist",
34
- "templates/**"
42
+ "templates",
43
+ "!templates/*/node_modules/.bin/*"
35
44
  ],
36
45
  "engines": {
37
46
  "node": ">=18"
38
47
  },
39
- "repository": {
40
- "type": "git",
41
- "url": "git+https://github.com/tomjs/create-app.git"
42
- },
43
- "publishConfig": {
44
- "access": "public",
45
- "registry": "https://registry.npmjs.org"
46
- },
47
48
  "dependencies": {
48
- "@tomjs/logger": "^1.1.4",
49
+ "@clack/prompts": "^0.11.0",
50
+ "@tomjs/logger": "^1.4.0",
49
51
  "@tomjs/node": "^2.2.3",
50
- "chalk": "^5.3.0",
51
- "dayjs": "^1.11.12",
52
- "execa": "^9.3.0",
53
- "inquirer": "^10.1.6",
52
+ "chalk": "^5.6.2",
53
+ "dayjs": "^1.11.19",
54
+ "execa": "^9.6.0",
54
55
  "lodash-es": "^4.17.21",
55
- "meow": "^13.2.0"
56
+ "meow": "^14.0.0",
57
+ "tinyglobby": "^0.2.15"
56
58
  },
57
59
  "devDependencies": {
58
- "@commitlint/cli": "^19.3.0",
59
- "@tomjs/commitlint": "^3.3.0",
60
- "@tomjs/eslint": "^3.3.0",
61
- "@tomjs/prettier": "^1.4.1",
62
- "@tomjs/stylelint": "^2.6.1",
63
- "@tomjs/tsconfig": "^1.7.1",
64
- "@types/inquirer": "^9.0.7",
60
+ "@antfu/eslint-config": "^6.2.0",
61
+ "@commitlint/cli": "^20.1.0",
62
+ "@tomjs/commitlint": "^5.0.0",
63
+ "@tomjs/eslint": "^6.0.0",
64
+ "@tomjs/stylelint": "^7.0.0",
65
+ "@tomjs/tsconfig": "^2.1.0",
66
+ "@tsconfig/node20": "^20.1.8",
65
67
  "@types/lodash-es": "^4.17.12",
66
- "@types/node": "^18.19.42",
67
- "@types/prompts": "^2.4.9",
68
- "cross-env": "^7.0.3",
69
- "dotenv": "^16.4.5",
70
- "eslint": "^8.57.0",
71
- "husky": "^9.1.4",
72
- "lint-staged": "^15.2.7",
73
- "npm-run-all": "^4.1.5",
74
- "prettier": "^3.3.3",
75
- "stylelint": "^16.8.1",
76
- "tsup": "^8.2.3",
77
- "tsx": "^4.16.5",
78
- "type-fest": "^4.23.0",
79
- "typescript": "~5.5.4"
68
+ "@types/node": "^20.19.25",
69
+ "dotenv": "^17.2.3",
70
+ "eslint": "^9.39.1",
71
+ "lint-staged": "^16.2.7",
72
+ "npm-run-all2": "^8.0.4",
73
+ "publint": "^0.3.15",
74
+ "rimraf": "^6.1.2",
75
+ "simple-git-hooks": "^2.13.1",
76
+ "stylelint": "^16.26.1",
77
+ "tsdown": "~0.15.12",
78
+ "tsx": "^4.20.6",
79
+ "type-fest": "^5.2.0",
80
+ "typescript": "~5.9.3"
80
81
  },
81
82
  "scripts": {
82
- "dev": "tsup --watch",
83
+ "dev": "tsdown --watch",
83
84
  "debug": "tsx -r dotenv/config src/index.ts",
84
- "build": "tsup --minify",
85
- "lint": "run-s lint:eslint lint:stylelint lint:prettier",
86
- "lint:eslint": "eslint \"{src,templates}/**/*.{js,cjs,ts,tsx,vue}\" *.{js,cjs,ts} --fix --cache",
87
- "lint:stylelint": "stylelint \"templates/**/*.{css,scss,less,vue,html}\" --fix --cache",
88
- "lint:prettier": "prettier --write ."
85
+ "build": "tsdown --minify",
86
+ "lint": "run-s lint:stylelint lint:eslint",
87
+ "lint:eslint": "eslint --fix",
88
+ "lint:stylelint": "stylelint \"templates/**/*.{css,scss,vue,html}\" --fix --cache"
89
89
  }
90
90
  }
@@ -9,7 +9,3 @@ indent_style = space
9
9
  indent_size = 2
10
10
  trim_trailing_whitespace = true
11
11
  insert_final_newline = true
12
-
13
- [*.md]
14
- insert_final_newline = false
15
- trim_trailing_whitespace = false
@@ -0,0 +1,50 @@
1
+ {
2
+ // Disable the default formatter, use eslint instead
3
+ "prettier.enable": false,
4
+ "editor.formatOnSave": false,
5
+
6
+ // Auto fix
7
+ "editor.codeActionsOnSave": {
8
+ "source.fixAll.eslint": "explicit",
9
+ "source.organizeImports": "never"
10
+ },
11
+
12
+ // Silent the stylistic rules in your IDE, but still auto fix them
13
+ "eslint.rules.customizations": [
14
+ { "rule": "style/*", "severity": "off", "fixable": true },
15
+ { "rule": "format/*", "severity": "off", "fixable": true },
16
+ { "rule": "*-indent", "severity": "off", "fixable": true },
17
+ { "rule": "*-spacing", "severity": "off", "fixable": true },
18
+ { "rule": "*-spaces", "severity": "off", "fixable": true },
19
+ { "rule": "*-order", "severity": "off", "fixable": true },
20
+ { "rule": "*-dangle", "severity": "off", "fixable": true },
21
+ { "rule": "*-newline", "severity": "off", "fixable": true },
22
+ { "rule": "*quotes", "severity": "off", "fixable": true },
23
+ { "rule": "*semi", "severity": "off", "fixable": true }
24
+ ],
25
+
26
+ // Enable eslint for all supported languages
27
+ "eslint.validate": [
28
+ "javascript",
29
+ "javascriptreact",
30
+ "typescript",
31
+ "typescriptreact",
32
+ "vue",
33
+ "html",
34
+ "markdown",
35
+ "json",
36
+ "jsonc",
37
+ "yaml",
38
+ "toml",
39
+ "xml",
40
+ "gql",
41
+ "graphql",
42
+ "astro",
43
+ "svelte",
44
+ "css",
45
+ "less",
46
+ "scss",
47
+ "pcss",
48
+ "postcss"
49
+ ]
50
+ }
@@ -32,7 +32,7 @@ web_modules
32
32
  tsconfig.tsbuildinfo
33
33
 
34
34
  # environment
35
- *.local
35
+ .env
36
36
 
37
37
  # macOS
38
38
  .DS_Store
@@ -46,7 +46,6 @@ tsconfig.tsbuildinfo
46
46
  *.tar.*
47
47
  *.tgz
48
48
  *.zip
49
- *.vsix
50
49
 
51
50
  # IDEA
52
51
  .idea
@@ -57,4 +56,3 @@ tsconfig.tsbuildinfo
57
56
  # build output
58
57
  build
59
58
  dist
60
- release
@@ -0,0 +1,3 @@
1
+ export default {
2
+ extends: ['@tomjs/commitlint'],
3
+ };
@@ -0,0 +1,8 @@
1
+ import defineConfig from '@tomjs/eslint';
2
+
3
+ export default defineConfig({
4
+ rules: {
5
+ 'antfu/no-top-level-await': 'off',
6
+ 'jsonc/sort-array-values': 'off',
7
+ },
8
+ });
@@ -0,0 +1,3 @@
1
+ export default {
2
+ '*': 'eslint --fix',
3
+ };
@@ -0,0 +1,24 @@
1
+ {
2
+
3
+ "type": "module",
4
+ "version": "0.0.0",
5
+ "packageManager": "pnpm@10.24.0",
6
+ "scripts": {
7
+ "lint": "eslint --fix",
8
+ "prepare": "simple-git-hooks"
9
+ },
10
+ "devDependencies": {
11
+ "@antfu/eslint-config": "^6.2.0",
12
+ "@commitlint/cli": "^20.1.0",
13
+ "@tomjs/commitlint": "^5.0.0",
14
+ "@tomjs/eslint": "^6.0.0",
15
+ "@tomjs/tsconfig": "^2.1.0",
16
+ "@types/node": "^20.19.25",
17
+ "eslint": "^9.39.1",
18
+ "lint-staged": "^16.2.7",
19
+ "npm-run-all2": "^8.0.4",
20
+ "simple-git-hooks": "^2.13.1",
21
+ "tsx": "^4.20.6",
22
+ "typescript": "~5.9.3"
23
+ }
24
+ }
@@ -0,0 +1,3 @@
1
+ onlyBuiltDependencies:
2
+ - esbuild
3
+ - simple-git-hooks
@@ -0,0 +1,4 @@
1
+ export default {
2
+ 'pre-commit': 'pnpm lint-staged',
3
+ 'commit-msg': 'pnpm commitlint --edit "$1"',
4
+ };
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) {{dateYear}}-PRESENT {{gitUserName}}<{{gitUserEmail}}>
3
+ Copyright (c) {{dateYear}}-PRESENT {{gitUserName}}
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,20 @@
1
+ # {{pkgName}}
2
+
3
+ [![npm](https://img.shields.io/npm/v/{{pkgName}})](https://www.npmjs.com/package/{{pkgName}}) ![node-current (scoped)](https://img.shields.io/node/v/{{pkgName}}) ![license](https://img.shields.io/npm/l/{{pkgName}}) [![jsDocs.io](https://img.shields.io/badge/jsDocs.io-reference-blue)](https://www.jsdocs.io/package/{{pkgName}})
4
+
5
+ **English** | [中文](./README.zh_CN.md)
6
+
7
+ > Basic template
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ # pnpm
13
+ pnpm add -D {{pkgName}}
14
+
15
+ # yarn
16
+ yarn add -D {{pkgName}}
17
+
18
+ # npm
19
+ npm add -D {{pkgName}}
20
+ ```
@@ -0,0 +1,20 @@
1
+ # {{pkgName}}
2
+
3
+ [![npm](https://img.shields.io/npm/v/{{pkgName}})](https://www.npmjs.com/package/{{pkgName}}) ![node-current (scoped)](https://img.shields.io/node/v/{{pkgName}}) ![license](https://img.shields.io/npm/l/{{pkgName}}) [![jsDocs.io](https://img.shields.io/badge/jsDocs.io-reference-blue)](https://www.jsdocs.io/package/{{pkgName}})
4
+
5
+ [English](./README.md) | **中文**
6
+
7
+ > 基础模板
8
+
9
+ ## 安装
10
+
11
+ ```bash
12
+ # pnpm
13
+ pnpm add -D {{pkgName}}
14
+
15
+ # yarn
16
+ yarn add -D {{pkgName}}
17
+
18
+ # npm
19
+ npm add -D {{pkgName}}
20
+ ```
@@ -0,0 +1,10 @@
1
+ {
2
+ "license": "MIT",
3
+ "publishConfig": {
4
+ "access": "public",
5
+ "registry": "https://registry.npmjs.org"
6
+ },
7
+ "scripts": {
8
+ "prepublishOnly": "pnpm build"
9
+ }
10
+ }
@@ -0,0 +1,7 @@
1
+ export default {
2
+ '*.{vue,css,scss,html}': [
3
+ 'stylelint --fix',
4
+ 'eslint --fix',
5
+ ],
6
+ '*.{js,jsx,cjs,mjs,json,ts,tsx,md}': 'eslint --fix',
7
+ };
@@ -0,0 +1,12 @@
1
+ {
2
+ "scripts": {
3
+ "lint": "run-s lint:stylelint lint:eslint",
4
+ "lint:stylelint": "stylelint \"src/**/*.{css,scss,vue}\" --fix",
5
+ "lint:eslint": "eslint --fix"
6
+ },
7
+ "devDependencies": {
8
+ "@tomjs/stylelint": "^7.0.0",
9
+ "sass": "1.94.2",
10
+ "stylelint": "^16.26.1"
11
+ }
12
+ }
@@ -0,0 +1,3 @@
1
+ export default {
2
+ extends: ['@tomjs/stylelint'],
3
+ };
@@ -5,7 +5,7 @@
5
5
  "version": "0.2.0",
6
6
  "configurations": [
7
7
  {
8
- "name": "Debug Main Process",
8
+ "name": "Debug Electron",
9
9
  "type": "node",
10
10
  "request": "launch",
11
11
  "cwd": "${workspaceFolder}",
@@ -14,7 +14,7 @@
14
14
  "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"
15
15
  },
16
16
  "args": [
17
- ".",
17
+ "."
18
18
  ],
19
19
  "outFiles": [
20
20
  "${workspaceFolder}/**/*.js",
@@ -22,7 +22,27 @@
22
22
  "${workspaceFolder}/**/*.mjs",
23
23
  "!**/node_modules/**"
24
24
  ],
25
- "preLaunchTask": "${defaultBuildTask}",
25
+ "preLaunchTask": "npm:dev"
26
+ },
27
+ {
28
+ "name": "Debug Web",
29
+ "type": "node",
30
+ "request": "launch",
31
+ "cwd": "${workspaceFolder}",
32
+ "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
33
+ "windows": {
34
+ "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"
35
+ },
36
+ "args": [
37
+ "."
38
+ ],
39
+ "outFiles": [
40
+ "${workspaceFolder}/**/*.js",
41
+ "${workspaceFolder}/**/*.cjs",
42
+ "${workspaceFolder}/**/*.mjs",
43
+ "!**/node_modules/**"
44
+ ],
45
+ "preLaunchTask": "npm:debug"
26
46
  }
27
47
  ]
28
48
  }
@@ -0,0 +1,67 @@
1
+ {
2
+ // See https://go.microsoft.com/fwlink/?LinkId=733558
3
+ // for the documentation about the tasks.json format
4
+ "version": "2.0.0",
5
+ "tasks": [
6
+ {
7
+ "type": "npm",
8
+ "script": "dev",
9
+ "label": "npm:dev",
10
+ "problemMatcher": {
11
+ "owner": "typescript",
12
+ "fileLocation": "relative",
13
+ "pattern": {
14
+ "regexp": "^([a-zA-Z]\\:\\/?([\\w\\-]\\/?)+\\.\\w+):(\\d+):(\\d+): (ERROR|WARNING)\\: (.*)$",
15
+ "file": 1,
16
+ "line": 3,
17
+ "column": 4,
18
+ "code": 5,
19
+ "message": 6
20
+ },
21
+ "background": {
22
+ "activeOnStart": true,
23
+ "beginsPattern": "^.*VITE v.* ready in \\d* ms.*$",
24
+ "endsPattern": "^.*\\[tomjs:electron\\] startup electron*$"
25
+ }
26
+ },
27
+ "isBackground": true,
28
+ "presentation": {
29
+ "reveal": "never"
30
+ },
31
+ "group": {
32
+ "kind": "build",
33
+ "isDefault": true
34
+ }
35
+ },
36
+ {
37
+ "type": "npm",
38
+ "script": "debug",
39
+ "label": "npm:debug",
40
+ "problemMatcher": {
41
+ "owner": "typescript",
42
+ "fileLocation": "relative",
43
+ "pattern": {
44
+ "regexp": "^([a-zA-Z]\\:\\/?([\\w\\-]\\/?)+\\.\\w+):(\\d+):(\\d+): (ERROR|WARNING)\\: (.*)$",
45
+ "file": 1,
46
+ "line": 3,
47
+ "column": 4,
48
+ "code": 5,
49
+ "message": 6
50
+ },
51
+ "background": {
52
+ "activeOnStart": true,
53
+ "beginsPattern": "^.*VITE v.* ready in \\d* ms.*$",
54
+ "endsPattern": "^.*\\[tomjs:electron\\] startup electron*$"
55
+ }
56
+ },
57
+ "isBackground": true,
58
+ "presentation": {
59
+ "reveal": "never"
60
+ },
61
+ "group": {
62
+ "kind": "build",
63
+ "isDefault": true
64
+ }
65
+ }
66
+ ]
67
+ }
@@ -1,3 +1,3 @@
1
- # electron-react
1
+ # react
2
2
 
3
3
  vite + electron + react
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from '@tomjs/eslint';
2
+
3
+ export default defineConfig({
4
+ rules: {
5
+ 'no-console': 'off',
6
+ 'n/prefer-global/process': 'off',
7
+ },
8
+ });