ylyx-cli 1.0.16 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +313 -276
  2. package/bin/ylyx.js +176 -168
  3. package/lib/config.js +325 -283
  4. package/lib/deploy.js +509 -529
  5. package/lib/environments.js +111 -0
  6. package/lib/generator.js +192 -192
  7. package/lib/index.js +113 -113
  8. package/lib/interactive.js +87 -87
  9. package/lib/remote.js +179 -179
  10. package/lib/template.js +174 -174
  11. package/lib/utils.js +148 -148
  12. package/package.json +61 -59
  13. package/templates/react-app/files/.gitignore +22 -0
  14. package/templates/react-app/files/README.md +23 -23
  15. package/templates/react-app/files/package.json +28 -28
  16. package/templates/react-app/files/public/index.html +11 -11
  17. package/templates/react-app/files/src/App.css +15 -15
  18. package/templates/react-app/files/src/App.js +15 -15
  19. package/templates/react-app/files/src/index.css +10 -10
  20. package/templates/react-app/files/src/index.js +11 -11
  21. package/templates/react-app/template.json +11 -11
  22. package/templates/react-component/files/Component.module.css +5 -5
  23. package/templates/react-component/files/Component.tsx +31 -31
  24. package/templates/react-component/files/index.ts +2 -2
  25. package/templates/react-component/template.json +48 -48
  26. package/templates/vue-app/files/.editorconfig +14 -14
  27. package/templates/vue-app/files/.env.development +21 -21
  28. package/templates/vue-app/files/.env.production +18 -18
  29. package/templates/vue-app/files/.eslintignore +5 -5
  30. package/templates/vue-app/files/.eslintrc.js +267 -267
  31. package/templates/vue-app/files/.gitignore +24 -0
  32. package/templates/vue-app/files/.prettierignore +11 -11
  33. package/templates/vue-app/files/.travis.yml +5 -5
  34. package/templates/vue-app/files/.vscode/extensions.json +7 -7
  35. package/templates/vue-app/files/.vscode/settings.json +39 -39
  36. package/templates/vue-app/files/LICENSE +191 -191
  37. package/templates/vue-app/files/README.md +87 -87
  38. package/templates/vue-app/files/babel.config.js +11 -11
  39. package/templates/vue-app/files/jest.config.js +24 -24
  40. package/templates/vue-app/files/package.json +136 -136
  41. package/templates/vue-app/files/plopfile.js +7 -7
  42. package/templates/vue-app/files/postcss.config.js +5 -5
  43. package/templates/vue-app/files/public/default.js +25 -25
  44. package/templates/vue-app/files/public/index.html +26 -26
  45. package/templates/vue-app/files/src/App.vue +54 -54
  46. package/templates/vue-app/files/src/api/bigDataV/index.js +198 -198
  47. package/templates/vue-app/files/src/api/data.js +42 -42
  48. package/templates/vue-app/files/src/api/dataArchive/index.js +186 -186
  49. package/templates/vue-app/files/src/api/generator/genConfig.js +16 -16
  50. package/templates/vue-app/files/src/api/generator/generator.js +32 -32
  51. package/templates/vue-app/files/src/api/indexManagement/index.js +39 -39
  52. package/templates/vue-app/files/src/api/institutionMonitor/index.js +396 -396
  53. package/templates/vue-app/files/src/api/institutionSet/index.js +120 -120
  54. package/templates/vue-app/files/src/api/login.js +44 -44
  55. package/templates/vue-app/files/src/api/selfStatistics/index.js +50 -50
  56. package/templates/vue-app/files/src/api/system/code.js +15 -15
  57. package/templates/vue-app/files/src/api/system/dict.js +34 -34
  58. package/templates/vue-app/files/src/api/system/dictDetail.js +52 -52
  59. package/templates/vue-app/files/src/api/system/equipment.js +35 -35
  60. package/templates/vue-app/files/src/api/system/examManage.js +49 -49
  61. package/templates/vue-app/files/src/api/system/examProject.js +48 -48
  62. package/templates/vue-app/files/src/api/system/hosModel.js +35 -35
  63. package/templates/vue-app/files/src/api/system/hospital.js +88 -88
  64. package/templates/vue-app/files/src/api/system/job.js +40 -40
  65. package/templates/vue-app/files/src/api/system/menu.js +67 -67
  66. package/templates/vue-app/files/src/api/system/model.js +42 -42
  67. package/templates/vue-app/files/src/api/system/risConfig.js +9 -9
  68. package/templates/vue-app/files/src/api/system/role.js +64 -64
  69. package/templates/vue-app/files/src/api/system/sysSet.js +19 -19
  70. package/templates/vue-app/files/src/api/system/timing.js +41 -41
  71. package/templates/vue-app/files/src/api/system/user.js +121 -121
  72. package/templates/vue-app/files/src/api/tools/alipay.js +25 -25
  73. package/templates/vue-app/files/src/api/tools/email.js +24 -24
  74. package/templates/vue-app/files/src/api/tools/localStorage.js +27 -27
  75. package/templates/vue-app/files/src/api/tools/qiniu.js +40 -40
  76. package/templates/vue-app/files/src/assets/css/font-awesome.css +2342 -2342
  77. package/templates/vue-app/files/src/assets/css/font-awesome.min.css +2336 -2336
  78. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.svg +2671 -2671
  79. package/templates/vue-app/files/src/assets/icons/index.js +9 -9
  80. package/templates/vue-app/files/src/assets/icons/svg/hospital.svg +1 -1
  81. package/templates/vue-app/files/src/assets/icons/svg/hospital1.svg +1 -1
  82. package/templates/vue-app/files/src/assets/icons/svg/loginOne.svg +35 -35
  83. package/templates/vue-app/files/src/assets/icons/svg/loginOneWhite.svg +19 -19
  84. package/templates/vue-app/files/src/assets/icons/svg/loginOr.svg +93 -93
  85. package/templates/vue-app/files/src/assets/icons/svg/loginUp.svg +96 -96
  86. package/templates/vue-app/files/src/assets/icons/svg/monitor.svg +1 -1
  87. package/templates/vue-app/files/src/assets/icons/svg/offline.svg +1 -1
  88. package/templates/vue-app/files/src/assets/icons/svg/online.svg +1 -1
  89. package/templates/vue-app/files/src/assets/icons/svg/system.svg +1 -1
  90. package/templates/vue-app/files/src/assets/icons/svgo.yml +21 -21
  91. package/templates/vue-app/files/src/assets/styles/btn.scss +103 -103
  92. package/templates/vue-app/files/src/assets/styles/eladmin.scss +124 -124
  93. package/templates/vue-app/files/src/assets/styles/element-ui.scss +217 -217
  94. package/templates/vue-app/files/src/assets/styles/element-variables.scss +31 -31
  95. package/templates/vue-app/files/src/assets/styles/global.scss +73 -73
  96. package/templates/vue-app/files/src/assets/styles/index.scss +220 -220
  97. package/templates/vue-app/files/src/assets/styles/mixin.scss +60 -60
  98. package/templates/vue-app/files/src/assets/styles/publicStyle.scss +224 -224
  99. package/templates/vue-app/files/src/assets/styles/sidebar.scss +239 -239
  100. package/templates/vue-app/files/src/assets/styles/transition.scss +48 -48
  101. package/templates/vue-app/files/src/assets/styles/variables.scss +44 -44
  102. package/templates/vue-app/files/src/common/flexible.js +145 -145
  103. package/templates/vue-app/files/src/components/Breadcrumb/index.vue +87 -87
  104. package/templates/vue-app/files/src/components/Crud/CRUD.operation.vue +248 -248
  105. package/templates/vue-app/files/src/components/Crud/Pagination.vue +20 -20
  106. package/templates/vue-app/files/src/components/Crud/RR.operation.vue +39 -39
  107. package/templates/vue-app/files/src/components/Crud/UD.operation.vue +106 -106
  108. package/templates/vue-app/files/src/components/Crud/crud.js +907 -907
  109. package/templates/vue-app/files/src/components/Crud/user/UR.operation.vue +154 -154
  110. package/templates/vue-app/files/src/components/DateRangePicker/index.vue +42 -42
  111. package/templates/vue-app/files/src/components/DateRangePickerProhibitNext/index.vue +42 -42
  112. package/templates/vue-app/files/src/components/DateRangePickerProhibitTodayNext/index.vue +48 -48
  113. package/templates/vue-app/files/src/components/Dict/Dict.js +31 -31
  114. package/templates/vue-app/files/src/components/Dict/index.js +29 -29
  115. package/templates/vue-app/files/src/components/Doc/index.vue +16 -16
  116. package/templates/vue-app/files/src/components/Echarts/BarChart.vue +115 -115
  117. package/templates/vue-app/files/src/components/Echarts/Category.vue +768 -768
  118. package/templates/vue-app/files/src/components/Echarts/Funnel.vue +120 -120
  119. package/templates/vue-app/files/src/components/Echarts/Gauge.vue +74 -74
  120. package/templates/vue-app/files/src/components/Echarts/Graph.vue +101 -101
  121. package/templates/vue-app/files/src/components/Echarts/HeatMap.vue +301 -301
  122. package/templates/vue-app/files/src/components/Echarts/Line3D.vue +110 -110
  123. package/templates/vue-app/files/src/components/Echarts/PieChart.vue +84 -84
  124. package/templates/vue-app/files/src/components/Echarts/Point.vue +161 -161
  125. package/templates/vue-app/files/src/components/Echarts/RadarChart.vue +123 -123
  126. package/templates/vue-app/files/src/components/Echarts/Rich.vue +160 -160
  127. package/templates/vue-app/files/src/components/Echarts/Sankey.vue +114 -114
  128. package/templates/vue-app/files/src/components/Echarts/Scatter.vue +192 -192
  129. package/templates/vue-app/files/src/components/Echarts/Sunburst.vue +127 -127
  130. package/templates/vue-app/files/src/components/Echarts/ThemeRiver.vue +233 -233
  131. package/templates/vue-app/files/src/components/Echarts/WordCloud.vue +201 -201
  132. package/templates/vue-app/files/src/components/GithubCorner/index.vue +55 -55
  133. package/templates/vue-app/files/src/components/Hamburger/index.vue +44 -44
  134. package/templates/vue-app/files/src/components/HeaderSearch/index.vue +196 -196
  135. package/templates/vue-app/files/src/components/IconSelect/index.vue +74 -74
  136. package/templates/vue-app/files/src/components/IconSelect/requireIcons.js +10 -10
  137. package/templates/vue-app/files/src/components/Iframe/index.vue +30 -30
  138. package/templates/vue-app/files/src/components/JavaEdit/index.vue +78 -78
  139. package/templates/vue-app/files/src/components/Pagination/index.vue +100 -100
  140. package/templates/vue-app/files/src/components/PanThumb/index.vue +149 -149
  141. package/templates/vue-app/files/src/components/ParentView/index.vue +3 -3
  142. package/templates/vue-app/files/src/components/Permission/index.js +13 -13
  143. package/templates/vue-app/files/src/components/Permission/permission.js +21 -21
  144. package/templates/vue-app/files/src/components/RightPanel/index.vue +149 -149
  145. package/templates/vue-app/files/src/components/Screenfull/index.vue +60 -60
  146. package/templates/vue-app/files/src/components/SizeSelect/index.vue +60 -60
  147. package/templates/vue-app/files/src/components/SvgIcon/index.vue +66 -66
  148. package/templates/vue-app/files/src/components/ThemePicker/index.vue +177 -177
  149. package/templates/vue-app/files/src/components/UploadExcel/index.vue +149 -149
  150. package/templates/vue-app/files/src/components/WaterMark/setWaterMark.js +68 -68
  151. package/templates/vue-app/files/src/components/WaterMark/waterMark.vue +69 -69
  152. package/templates/vue-app/files/src/components/Xgplayer/index.vue +49 -49
  153. package/templates/vue-app/files/src/components/YamlEdit/index.vue +81 -81
  154. package/templates/vue-app/files/src/layout/components/AppMain.vue +67 -67
  155. package/templates/vue-app/files/src/layout/components/Navbar.vue +209 -209
  156. package/templates/vue-app/files/src/layout/components/Settings/index.vue +125 -125
  157. package/templates/vue-app/files/src/layout/components/Sidebar/FixiOSBug.js +26 -26
  158. package/templates/vue-app/files/src/layout/components/Sidebar/Item.vue +29 -29
  159. package/templates/vue-app/files/src/layout/components/Sidebar/Link.vue +35 -35
  160. package/templates/vue-app/files/src/layout/components/Sidebar/Logo.vue +93 -93
  161. package/templates/vue-app/files/src/layout/components/Sidebar/SidebarItem.vue +104 -104
  162. package/templates/vue-app/files/src/layout/components/Sidebar/index.vue +79 -79
  163. package/templates/vue-app/files/src/layout/components/TagsView/ScrollPane.vue +90 -90
  164. package/templates/vue-app/files/src/layout/components/TagsView/index.vue +299 -299
  165. package/templates/vue-app/files/src/layout/components/index.js +5 -5
  166. package/templates/vue-app/files/src/layout/index.vue +119 -119
  167. package/templates/vue-app/files/src/layout/mixin/ResizeHandler.js +45 -45
  168. package/templates/vue-app/files/src/main.js +89 -89
  169. package/templates/vue-app/files/src/mixins/crud.js +348 -348
  170. package/templates/vue-app/files/src/router/index.js +156 -156
  171. package/templates/vue-app/files/src/router/routers.js +203 -203
  172. package/templates/vue-app/files/src/settings.js +57 -57
  173. package/templates/vue-app/files/src/store/getters.js +29 -29
  174. package/templates/vue-app/files/src/store/index.js +25 -25
  175. package/templates/vue-app/files/src/store/modules/api.js +33 -33
  176. package/templates/vue-app/files/src/store/modules/app.js +55 -55
  177. package/templates/vue-app/files/src/store/modules/permission.js +79 -79
  178. package/templates/vue-app/files/src/store/modules/register.js +17 -17
  179. package/templates/vue-app/files/src/store/modules/settings.js +46 -46
  180. package/templates/vue-app/files/src/store/modules/tagsView.js +168 -168
  181. package/templates/vue-app/files/src/store/modules/user.js +119 -119
  182. package/templates/vue-app/files/src/utils/auth.js +18 -18
  183. package/templates/vue-app/files/src/utils/base64ToFile.js +27 -27
  184. package/templates/vue-app/files/src/utils/clipboard.js +36 -36
  185. package/templates/vue-app/files/src/utils/datetime.js +289 -289
  186. package/templates/vue-app/files/src/utils/getBlobFile.js +10 -10
  187. package/templates/vue-app/files/src/utils/getTime.js +29 -29
  188. package/templates/vue-app/files/src/utils/index.js +520 -520
  189. package/templates/vue-app/files/src/utils/permission.js +29 -29
  190. package/templates/vue-app/files/src/utils/pinyin.js +450 -450
  191. package/templates/vue-app/files/src/utils/request.js +139 -139
  192. package/templates/vue-app/files/src/utils/rsaEncrypt.js +37 -37
  193. package/templates/vue-app/files/src/utils/shortcuts.js +210 -210
  194. package/templates/vue-app/files/src/utils/upload.js +12 -12
  195. package/templates/vue-app/files/src/utils/validate.js +262 -262
  196. package/templates/vue-app/files/src/views/components/Echarts.vue +124 -124
  197. package/templates/vue-app/files/src/views/components/Editor.vue +75 -75
  198. package/templates/vue-app/files/src/views/components/MarkDown.vue +44 -44
  199. package/templates/vue-app/files/src/views/components/UVideo.vue +37 -37
  200. package/templates/vue-app/files/src/views/components/YamlEdit.vue +206 -206
  201. package/templates/vue-app/files/src/views/components/camera/camera.vue +115 -115
  202. package/templates/vue-app/files/src/views/components/camera/cameraTest.vue +158 -158
  203. package/templates/vue-app/files/src/views/components/excel/upload-excel.vue +41 -41
  204. package/templates/vue-app/files/src/views/components/icons/element-icons.js +74 -74
  205. package/templates/vue-app/files/src/views/components/icons/index.vue +106 -106
  206. package/templates/vue-app/files/src/views/components/icons/svg-icons.js +10 -10
  207. package/templates/vue-app/files/src/views/components/scroll/index.vue +107 -107
  208. package/templates/vue-app/files/src/views/components/scrollFull/index.vue +99 -99
  209. package/templates/vue-app/files/src/views/dashboard/LineChart.vue +138 -138
  210. package/templates/vue-app/files/src/views/dashboard/PanelGroup.vue +173 -173
  211. package/templates/vue-app/files/src/views/dashboard/mixins/resize.js +57 -57
  212. package/templates/vue-app/files/src/views/dataArchive/delTable.vue +354 -354
  213. package/templates/vue-app/files/src/views/dataArchive/exportDetail.vue +121 -121
  214. package/templates/vue-app/files/src/views/dataArchive/exportList.vue +160 -160
  215. package/templates/vue-app/files/src/views/dataArchive/index.vue +2104 -2104
  216. package/templates/vue-app/files/src/views/features/401.vue +83 -83
  217. package/templates/vue-app/files/src/views/features/404.vue +226 -226
  218. package/templates/vue-app/files/src/views/features/redirect.vue +12 -12
  219. package/templates/vue-app/files/src/views/generator/config.vue +348 -348
  220. package/templates/vue-app/files/src/views/generator/index.vue +143 -143
  221. package/templates/vue-app/files/src/views/generator/preview.vue +39 -39
  222. package/templates/vue-app/files/src/views/home.vue +80 -80
  223. package/templates/vue-app/files/src/views/indexManagement/index.vue +422 -422
  224. package/templates/vue-app/files/src/views/indexManagement/other.vue +286 -286
  225. package/templates/vue-app/files/src/views/institutionMonitor/components/LineChart.vue +191 -191
  226. package/templates/vue-app/files/src/views/institutionMonitor/index.scss +339 -339
  227. package/templates/vue-app/files/src/views/institutionMonitor/index.vue +1385 -1385
  228. package/templates/vue-app/files/src/views/institutionMonitor/mixins/resize.js +57 -57
  229. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/checkProjectCode.vue +267 -267
  230. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/imageAbnormalMonitor.vue +361 -361
  231. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/index.vue +686 -686
  232. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/leakageAnomaly.vue +270 -270
  233. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/moveMonitore.vue +114 -114
  234. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/qualityMonitore.vue +338 -338
  235. package/templates/vue-app/files/src/views/institutionSet/cloudSet.vue +534 -534
  236. package/templates/vue-app/files/src/views/institutionSet/index.vue +2550 -2550
  237. package/templates/vue-app/files/src/views/login.vue +243 -243
  238. package/templates/vue-app/files/src/views/qualityLogin.vue +280 -280
  239. package/templates/vue-app/files/src/views/selfStatistics/components/LineChart.vue +296 -296
  240. package/templates/vue-app/files/src/views/selfStatistics/hospitalDetail/index.vue +533 -533
  241. package/templates/vue-app/files/src/views/selfStatistics/index.scss +447 -447
  242. package/templates/vue-app/files/src/views/selfStatistics/index.vue +903 -903
  243. package/templates/vue-app/files/src/views/selfStatistics/mixins/resize.js +57 -57
  244. package/templates/vue-app/files/src/views/selfStatistics/monitorDetail/index.vue +285 -285
  245. package/templates/vue-app/files/src/views/selfStatistics/offlineDetail/index.vue +104 -104
  246. package/templates/vue-app/files/src/views/selfStatistics/selfActiveDetail/index.vue +104 -104
  247. package/templates/vue-app/files/src/views/selfStatistics/selfMonitorDetail/index.vue +420 -420
  248. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/setWaterMark.js +68 -68
  249. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/waterMark.vue +69 -69
  250. package/templates/vue-app/files/src/views/system/dept/index.vue +144 -144
  251. package/templates/vue-app/files/src/views/system/dict/dictDetail.vue +146 -146
  252. package/templates/vue-app/files/src/views/system/dict/index.vue +159 -159
  253. package/templates/vue-app/files/src/views/system/examModality/index.vue +174 -174
  254. package/templates/vue-app/files/src/views/system/examPart/index.vue +184 -184
  255. package/templates/vue-app/files/src/views/system/examProject/index.vue +321 -321
  256. package/templates/vue-app/files/src/views/system/examine/index.vue +66 -66
  257. package/templates/vue-app/files/src/views/system/job/index.vue +119 -119
  258. package/templates/vue-app/files/src/views/system/job/module/form.vue +72 -72
  259. package/templates/vue-app/files/src/views/system/job/module/header.vue +48 -48
  260. package/templates/vue-app/files/src/views/system/menu/index.vue +327 -327
  261. package/templates/vue-app/files/src/views/system/model/index.vue +285 -285
  262. package/templates/vue-app/files/src/views/system/role/index.vue +434 -434
  263. package/templates/vue-app/files/src/views/system/sysSet/index.vue +84 -84
  264. package/templates/vue-app/files/src/views/system/timing/index.vue +289 -289
  265. package/templates/vue-app/files/src/views/system/timing/log.vue +143 -143
  266. package/templates/vue-app/files/src/views/system/user/admin.vue +414 -414
  267. package/templates/vue-app/files/src/views/system/user/center/updateEmail.vue +146 -146
  268. package/templates/vue-app/files/src/views/system/user/center/updatePass.vue +168 -168
  269. package/templates/vue-app/files/src/views/system/user/center.vue +140 -140
  270. package/templates/vue-app/files/src/views/system/user/index.vue +972 -972
  271. package/templates/vue-app/files/src/views/systemSet/role/index.vue +314 -314
  272. package/templates/vue-app/files/src/views/systemSet/user/admin.vue +414 -414
  273. package/templates/vue-app/files/src/views/systemSet/user/center/updateEmail.vue +146 -146
  274. package/templates/vue-app/files/src/views/systemSet/user/center/updatePass.vue +115 -115
  275. package/templates/vue-app/files/src/views/systemSet/user/center.vue +351 -351
  276. package/templates/vue-app/files/src/views/systemSet/user/index.vue +928 -928
  277. package/templates/vue-app/files/src/views/tools/aliPay/config.vue +102 -102
  278. package/templates/vue-app/files/src/views/tools/aliPay/index.vue +48 -48
  279. package/templates/vue-app/files/src/views/tools/aliPay/toPay.vue +91 -91
  280. package/templates/vue-app/files/src/views/tools/email/config.vue +91 -91
  281. package/templates/vue-app/files/src/views/tools/email/index.vue +42 -42
  282. package/templates/vue-app/files/src/views/tools/email/send.vue +159 -159
  283. package/templates/vue-app/files/src/views/tools/storage/index.vue +35 -35
  284. package/templates/vue-app/files/src/views/tools/storage/local/index.vue +207 -207
  285. package/templates/vue-app/files/src/views/tools/storage/qiniu/form.vue +108 -108
  286. package/templates/vue-app/files/src/views/tools/storage/qiniu/index.vue +241 -241
  287. package/templates/vue-app/files/src/views/tools/swagger/index.vue +14 -14
  288. package/templates/vue-app/files/vue.config.js +173 -173
  289. package/templates/vue-app/template.json +29 -29
package/lib/index.js CHANGED
@@ -1,113 +1,113 @@
1
- const fs = require('fs-extra');
2
- const path = require('path');
3
- const inquirer = require('inquirer');
4
- const { getTemplateConfig } = require('./template');
5
- const { generateFiles } = require('./generator');
6
- const { getOutputDir, log } = require('./utils');
7
-
8
- /**
9
- * 生成代码
10
- */
11
- async function generate(templateName, options = {}) {
12
- try {
13
- // 获取模板配置
14
- const templateConfig = getTemplateConfig(templateName);
15
- const templatePath = templateConfig.path;
16
-
17
- // 准备变量
18
- let variables = { ...(options.variables || {}) };
19
-
20
- // 如果模板定义了变量但用户没有提供,使用交互式收集
21
- if (templateConfig.variables && Object.keys(templateConfig.variables).length > 0) {
22
- const missingVars = Object.keys(templateConfig.variables).filter((key) => !(key in variables));
23
-
24
- if (missingVars.length > 0) {
25
- const prompts = missingVars.map((key) => {
26
- const config = templateConfig.variables[key];
27
- return {
28
- type: config.type || 'input',
29
- name: key,
30
- message: config.message || `请输入 ${key}`,
31
- default: config.default,
32
- choices: config.choices,
33
- validate: config.validate,
34
- };
35
- });
36
-
37
- const answers = await inquirer.prompt(prompts);
38
- variables = { ...variables, ...answers };
39
- }
40
- }
41
-
42
- // 应用变量替换规则
43
- if (templateConfig.replacements) {
44
- Object.entries(templateConfig.replacements).forEach(([key, value]) => {
45
- if (typeof value === 'string' && value.includes('{{')) {
46
- // 使用 Handlebars 处理替换规则
47
- const handlebars = require('handlebars');
48
- const { registerHandlebarsHelpers } = require('./utils');
49
- registerHandlebarsHelpers(handlebars);
50
- const template = handlebars.compile(value, { noEscape: true });
51
- variables[key] = template(variables);
52
- } else {
53
- variables[key] = value;
54
- }
55
- });
56
- }
57
-
58
- // 添加一些常用的辅助变量
59
- if (variables.name) {
60
- const { camelCase, pascalCase, kebabCase, snakeCase } = require('./utils');
61
- variables.nameCamel = camelCase(variables.name);
62
- variables.namePascal = pascalCase(variables.name);
63
- variables.nameKebab = kebabCase(variables.name);
64
- variables.nameSnake = snakeCase(variables.name);
65
- }
66
-
67
- // 为 React 组件添加 className 辅助变量
68
- if (variables.componentName) {
69
- const { pascalCase, kebabCase } = require('./utils');
70
- const componentNameKebab = kebabCase(variables.componentName);
71
- const useCSS = variables.useCSS || 'none';
72
-
73
- // 根据样式方案生成 className 属性字符串(完整的 JSX 属性)
74
- if (useCSS === 'modules') {
75
- variables.classNameAttr = "className={`${styles.container} ${className || ''}`}";
76
- } else if (useCSS === 'css') {
77
- variables.classNameAttr = `className={\`${componentNameKebab} \${className || ''}\`}`;
78
- } else {
79
- variables.classNameAttr = 'className={className}';
80
- }
81
-
82
- // 生成导入语句
83
- if (useCSS === 'modules') {
84
- variables.cssImport = `import styles from './${componentNameKebab}.module.css';`;
85
- } else if (useCSS === 'styled') {
86
- variables.cssImport = "import styled from 'styled-components';";
87
- } else if (useCSS === 'css') {
88
- variables.cssImport = `import './${componentNameKebab}.css';`;
89
- } else {
90
- variables.cssImport = '';
91
- }
92
-
93
- variables.componentNamePascal = pascalCase(variables.componentName);
94
- variables.componentNameKebab = componentNameKebab;
95
- }
96
-
97
- // 确定输出目录
98
- const outputDir = getOutputDir(options.outputDir);
99
- fs.ensureDirSync(outputDir);
100
-
101
- // 生成文件
102
- await generateFiles(templatePath, outputDir, variables, templateConfig);
103
-
104
- log.success(`代码已生成到: ${outputDir}`);
105
- } catch (error) {
106
- log.error(`生成失败: ${error.message}`);
107
- throw error;
108
- }
109
- }
110
-
111
- module.exports = {
112
- generate,
113
- };
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const inquirer = require('inquirer');
4
+ const { getTemplateConfig } = require('./template');
5
+ const { generateFiles } = require('./generator');
6
+ const { getOutputDir, log } = require('./utils');
7
+
8
+ /**
9
+ * 生成代码
10
+ */
11
+ async function generate(templateName, options = {}) {
12
+ try {
13
+ // 获取模板配置
14
+ const templateConfig = getTemplateConfig(templateName);
15
+ const templatePath = templateConfig.path;
16
+
17
+ // 准备变量
18
+ let variables = { ...(options.variables || {}) };
19
+
20
+ // 如果模板定义了变量但用户没有提供,使用交互式收集
21
+ if (templateConfig.variables && Object.keys(templateConfig.variables).length > 0) {
22
+ const missingVars = Object.keys(templateConfig.variables).filter((key) => !(key in variables));
23
+
24
+ if (missingVars.length > 0) {
25
+ const prompts = missingVars.map((key) => {
26
+ const config = templateConfig.variables[key];
27
+ return {
28
+ type: config.type || 'input',
29
+ name: key,
30
+ message: config.message || `请输入 ${key}`,
31
+ default: config.default,
32
+ choices: config.choices,
33
+ validate: config.validate,
34
+ };
35
+ });
36
+
37
+ const answers = await inquirer.prompt(prompts);
38
+ variables = { ...variables, ...answers };
39
+ }
40
+ }
41
+
42
+ // 应用变量替换规则
43
+ if (templateConfig.replacements) {
44
+ Object.entries(templateConfig.replacements).forEach(([key, value]) => {
45
+ if (typeof value === 'string' && value.includes('{{')) {
46
+ // 使用 Handlebars 处理替换规则
47
+ const handlebars = require('handlebars');
48
+ const { registerHandlebarsHelpers } = require('./utils');
49
+ registerHandlebarsHelpers(handlebars);
50
+ const template = handlebars.compile(value, { noEscape: true });
51
+ variables[key] = template(variables);
52
+ } else {
53
+ variables[key] = value;
54
+ }
55
+ });
56
+ }
57
+
58
+ // 添加一些常用的辅助变量
59
+ if (variables.name) {
60
+ const { camelCase, pascalCase, kebabCase, snakeCase } = require('./utils');
61
+ variables.nameCamel = camelCase(variables.name);
62
+ variables.namePascal = pascalCase(variables.name);
63
+ variables.nameKebab = kebabCase(variables.name);
64
+ variables.nameSnake = snakeCase(variables.name);
65
+ }
66
+
67
+ // 为 React 组件添加 className 辅助变量
68
+ if (variables.componentName) {
69
+ const { pascalCase, kebabCase } = require('./utils');
70
+ const componentNameKebab = kebabCase(variables.componentName);
71
+ const useCSS = variables.useCSS || 'none';
72
+
73
+ // 根据样式方案生成 className 属性字符串(完整的 JSX 属性)
74
+ if (useCSS === 'modules') {
75
+ variables.classNameAttr = "className={`${styles.container} ${className || ''}`}";
76
+ } else if (useCSS === 'css') {
77
+ variables.classNameAttr = `className={\`${componentNameKebab} \${className || ''}\`}`;
78
+ } else {
79
+ variables.classNameAttr = 'className={className}';
80
+ }
81
+
82
+ // 生成导入语句
83
+ if (useCSS === 'modules') {
84
+ variables.cssImport = `import styles from './${componentNameKebab}.module.css';`;
85
+ } else if (useCSS === 'styled') {
86
+ variables.cssImport = "import styled from 'styled-components';";
87
+ } else if (useCSS === 'css') {
88
+ variables.cssImport = `import './${componentNameKebab}.css';`;
89
+ } else {
90
+ variables.cssImport = '';
91
+ }
92
+
93
+ variables.componentNamePascal = pascalCase(variables.componentName);
94
+ variables.componentNameKebab = componentNameKebab;
95
+ }
96
+
97
+ // 确定输出目录
98
+ const outputDir = getOutputDir(options.outputDir);
99
+ fs.ensureDirSync(outputDir);
100
+
101
+ // 生成文件
102
+ await generateFiles(templatePath, outputDir, variables, templateConfig);
103
+
104
+ log.success(`代码已生成到: ${outputDir}`);
105
+ } catch (error) {
106
+ log.error(`生成失败: ${error.message}`);
107
+ throw error;
108
+ }
109
+ }
110
+
111
+ module.exports = {
112
+ generate,
113
+ };
@@ -1,87 +1,87 @@
1
- const inquirer = require('inquirer');
2
- const { generate } = require('./index');
3
- const { listTemplates } = require('./template');
4
- const { log } = require('./utils');
5
-
6
- /**
7
- * 交互式创建代码
8
- */
9
- async function interactiveCreate() {
10
- try {
11
- // 获取模板列表(不打印)
12
- const templates = listTemplates(false);
13
-
14
- if (templates.length === 0) {
15
- log.error('没有可用的模板');
16
- return;
17
- }
18
-
19
- // 选择模板
20
- const { templateName } = await inquirer.prompt([
21
- {
22
- type: 'list',
23
- name: 'templateName',
24
- message: '请选择模板',
25
- choices: templates.map((t) => ({
26
- name: `${t.name} - ${t.config.description || '无描述'}`,
27
- value: t.name,
28
- })),
29
- },
30
- ]);
31
-
32
- // 获取模板配置
33
- const { getTemplateConfig } = require('./template');
34
- const templateConfig = getTemplateConfig(templateName);
35
-
36
- // 收集变量
37
- const variables = {};
38
-
39
- if (templateConfig.variables) {
40
- const prompts = Object.entries(templateConfig.variables).map(([key, config]) => {
41
- return {
42
- type: config.type || 'input',
43
- name: key,
44
- message: config.message || `请输入 ${key}`,
45
- default: config.default,
46
- when:
47
- config.when !== undefined
48
- ? (answers) => {
49
- if (typeof config.when === 'function') {
50
- return config.when(answers);
51
- }
52
- return config.when;
53
- }
54
- : undefined,
55
- choices: config.choices,
56
- validate: config.validate,
57
- };
58
- });
59
-
60
- const answers = await inquirer.prompt(prompts);
61
- Object.assign(variables, answers);
62
- }
63
-
64
- // 询问输出目录
65
- const { outputDir } = await inquirer.prompt([
66
- {
67
- type: 'input',
68
- name: 'outputDir',
69
- message: '输出目录',
70
- default: './',
71
- },
72
- ]);
73
-
74
- // 生成代码
75
- await generate(templateName, {
76
- outputDir,
77
- variables,
78
- });
79
- } catch (error) {
80
- log.error(`创建失败: ${error.message}`);
81
- process.exit(1);
82
- }
83
- }
84
-
85
- module.exports = {
86
- interactiveCreate,
87
- };
1
+ const inquirer = require('inquirer');
2
+ const { generate } = require('./index');
3
+ const { listTemplates } = require('./template');
4
+ const { log } = require('./utils');
5
+
6
+ /**
7
+ * 交互式创建代码
8
+ */
9
+ async function interactiveCreate() {
10
+ try {
11
+ // 获取模板列表(不打印)
12
+ const templates = listTemplates(false);
13
+
14
+ if (templates.length === 0) {
15
+ log.error('没有可用的模板');
16
+ return;
17
+ }
18
+
19
+ // 选择模板
20
+ const { templateName } = await inquirer.prompt([
21
+ {
22
+ type: 'list',
23
+ name: 'templateName',
24
+ message: '请选择模板',
25
+ choices: templates.map((t) => ({
26
+ name: `${t.name} - ${t.config.description || '无描述'}`,
27
+ value: t.name,
28
+ })),
29
+ },
30
+ ]);
31
+
32
+ // 获取模板配置
33
+ const { getTemplateConfig } = require('./template');
34
+ const templateConfig = getTemplateConfig(templateName);
35
+
36
+ // 收集变量
37
+ const variables = {};
38
+
39
+ if (templateConfig.variables) {
40
+ const prompts = Object.entries(templateConfig.variables).map(([key, config]) => {
41
+ return {
42
+ type: config.type || 'input',
43
+ name: key,
44
+ message: config.message || `请输入 ${key}`,
45
+ default: config.default,
46
+ when:
47
+ config.when !== undefined
48
+ ? (answers) => {
49
+ if (typeof config.when === 'function') {
50
+ return config.when(answers);
51
+ }
52
+ return config.when;
53
+ }
54
+ : undefined,
55
+ choices: config.choices,
56
+ validate: config.validate,
57
+ };
58
+ });
59
+
60
+ const answers = await inquirer.prompt(prompts);
61
+ Object.assign(variables, answers);
62
+ }
63
+
64
+ // 询问输出目录
65
+ const { outputDir } = await inquirer.prompt([
66
+ {
67
+ type: 'input',
68
+ name: 'outputDir',
69
+ message: '输出目录',
70
+ default: './',
71
+ },
72
+ ]);
73
+
74
+ // 生成代码
75
+ await generate(templateName, {
76
+ outputDir,
77
+ variables,
78
+ });
79
+ } catch (error) {
80
+ log.error(`创建失败: ${error.message}`);
81
+ process.exit(1);
82
+ }
83
+ }
84
+
85
+ module.exports = {
86
+ interactiveCreate,
87
+ };