package-installer-cli 2.3.0 → 2.4.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 (372) hide show
  1. checksums.yaml +4 -4
  2. data/bundle-standalone/cli-with-packages.js +568 -369
  3. data/bundle-standalone/template.json +87 -14
  4. data/bundle-standalone/templates/c++_c/crow/template/CMakeLists.txt +18 -0
  5. data/bundle-standalone/templates/c++_c/crow/template/README.md +11 -0
  6. data/bundle-standalone/templates/c++_c/crow/template/include/routes.hpp +19 -0
  7. data/bundle-standalone/templates/c++_c/crow/template/main.cpp +12 -0
  8. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/README.md +36 -0
  9. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/eslint.config.mjs +16 -0
  10. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/middleware.ts +18 -0
  11. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/next.config.ts +7 -0
  12. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/package.json +28 -0
  13. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/pnpm-lock.yaml +3819 -0
  14. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/postcss.config.mjs +5 -0
  15. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/file.svg +1 -0
  16. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/globe.svg +1 -0
  17. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/next.svg +1 -0
  18. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/vercel.svg +1 -0
  19. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/window.svg +1 -0
  20. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/app/favicon.ico +0 -0
  21. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/app/globals.css +26 -0
  22. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/app/layout.tsx +34 -0
  23. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/app/page.tsx +33 -0
  24. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/lib/auth0.ts +3 -0
  25. data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/tsconfig.json +27 -0
  26. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/README.md +36 -0
  27. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/components.json +21 -0
  28. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/eslint.config.mjs +16 -0
  29. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/middleware.ts +12 -0
  30. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/next.config.ts +7 -0
  31. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/package.json +37 -0
  32. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/pnpm-lock.yaml +4113 -0
  33. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/postcss.config.mjs +5 -0
  34. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/file.svg +1 -0
  35. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/globe.svg +1 -0
  36. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/next.svg +1 -0
  37. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/vercel.svg +1 -0
  38. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/window.svg +1 -0
  39. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/app/favicon.ico +0 -0
  40. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/app/globals.css +122 -0
  41. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/app/layout.tsx +55 -0
  42. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/app/page.tsx +10 -0
  43. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/components/ui/button.tsx +59 -0
  44. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/components/ui/card.tsx +92 -0
  45. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/components/ui/input.tsx +21 -0
  46. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/components/ui/textarea.tsx +18 -0
  47. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/lib/utils.ts +6 -0
  48. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/middleware.ts +12 -0
  49. data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/tsconfig.json +27 -0
  50. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/README.md +36 -0
  51. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/eslint.config.mjs +16 -0
  52. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/middleware.ts +0 -0
  53. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/next.config.ts +7 -0
  54. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/package.json +28 -0
  55. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/pnpm-lock.yaml +3862 -0
  56. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/postcss.config.mjs +5 -0
  57. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/file.svg +1 -0
  58. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/globe.svg +1 -0
  59. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/next.svg +1 -0
  60. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/vercel.svg +1 -0
  61. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/window.svg +1 -0
  62. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/api/auth/[...nextauth]/route.ts +6 -0
  63. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/favicon.ico +0 -0
  64. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/globals.css +26 -0
  65. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/layout.tsx +39 -0
  66. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/page.tsx +10 -0
  67. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/lib/auth-provider.tsx +7 -0
  68. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/lib/auth.ts +126 -0
  69. data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/tsconfig.json +27 -0
  70. data/bundle-standalone/templates/game/unity/template/README.md +3 -0
  71. data/bundle-standalone/templates/game/unity/template/Scripts/PlayerController.cs +25 -0
  72. data/bundle-standalone/templates/game/unreal/template/README.md +3 -0
  73. data/bundle-standalone/templates/game/unreal/template/Source/PlayerCharacter.cpp +33 -0
  74. data/bundle-standalone/templates/game/unreal/template/Source/PlayerCharacter.h +20 -0
  75. data/bundle-standalone/templates/javascript/preactjs/javascript/template/index.html +13 -0
  76. data/bundle-standalone/templates/javascript/preactjs/javascript/template/package.json +18 -0
  77. data/bundle-standalone/templates/javascript/preactjs/javascript/template/public/vite.svg +1 -0
  78. data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/app.css +25 -0
  79. data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/app.jsx +43 -0
  80. data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/assets/preact.svg +1 -0
  81. data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/index.css +68 -0
  82. data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/main.jsx +5 -0
  83. data/bundle-standalone/templates/javascript/preactjs/javascript/template/vite.config.js +7 -0
  84. data/bundle-standalone/templates/javascript/preactjs/typescript/template/index.html +13 -0
  85. data/bundle-standalone/templates/javascript/preactjs/typescript/template/package.json +20 -0
  86. data/bundle-standalone/templates/javascript/preactjs/typescript/template/public/vite.svg +1 -0
  87. data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/app.css +25 -0
  88. data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/app.tsx +43 -0
  89. data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/assets/preact.svg +1 -0
  90. data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/index.css +68 -0
  91. data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/main.tsx +5 -0
  92. data/bundle-standalone/templates/javascript/preactjs/typescript/template/tsconfig.app.json +33 -0
  93. data/bundle-standalone/templates/javascript/preactjs/typescript/template/tsconfig.json +7 -0
  94. data/bundle-standalone/templates/javascript/preactjs/typescript/template/tsconfig.node.json +26 -0
  95. data/bundle-standalone/templates/javascript/preactjs/typescript/template/vite.config.ts +7 -0
  96. data/bundle-standalone/templates/javascript/solidjs/javascript/template/README.md +28 -0
  97. data/bundle-standalone/templates/javascript/solidjs/javascript/template/index.html +13 -0
  98. data/bundle-standalone/templates/javascript/solidjs/javascript/template/package.json +18 -0
  99. data/bundle-standalone/templates/javascript/solidjs/javascript/template/public/vite.svg +1 -0
  100. data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/App.css +27 -0
  101. data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/App.jsx +35 -0
  102. data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/assets/solid.svg +1 -0
  103. data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/index.css +68 -0
  104. data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/index.jsx +8 -0
  105. data/bundle-standalone/templates/javascript/solidjs/javascript/template/vite.config.js +6 -0
  106. data/bundle-standalone/templates/javascript/solidjs/typescript/template/README.md +28 -0
  107. data/bundle-standalone/templates/javascript/solidjs/typescript/template/index.html +13 -0
  108. data/bundle-standalone/templates/javascript/solidjs/typescript/template/package.json +20 -0
  109. data/bundle-standalone/templates/javascript/solidjs/typescript/template/public/vite.svg +1 -0
  110. data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/App.css +27 -0
  111. data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/App.tsx +35 -0
  112. data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/assets/solid.svg +1 -0
  113. data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/index.css +68 -0
  114. data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/index.tsx +8 -0
  115. data/bundle-standalone/templates/javascript/solidjs/typescript/template/tsconfig.app.json +29 -0
  116. data/bundle-standalone/templates/javascript/solidjs/typescript/template/tsconfig.json +7 -0
  117. data/bundle-standalone/templates/javascript/solidjs/typescript/template/tsconfig.node.json +26 -0
  118. data/bundle-standalone/templates/javascript/solidjs/typescript/template/vite.config.ts +6 -0
  119. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/README.md +43 -0
  120. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/index.html +13 -0
  121. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/jsconfig.json +33 -0
  122. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/package.json +16 -0
  123. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/public/vite.svg +1 -0
  124. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/App.svelte +47 -0
  125. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/app.css +79 -0
  126. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/assets/svelte.svg +1 -0
  127. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/lib/Counter.svelte +10 -0
  128. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/main.js +9 -0
  129. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/svelte.config.js +8 -0
  130. data/bundle-standalone/templates/javascript/sveltejs/javascript/template/vite.config.js +7 -0
  131. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/README.md +47 -0
  132. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/index.html +13 -0
  133. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/package.json +21 -0
  134. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/public/vite.svg +1 -0
  135. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/App.svelte +47 -0
  136. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/app.css +79 -0
  137. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/assets/svelte.svg +1 -0
  138. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/lib/Counter.svelte +10 -0
  139. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/main.ts +9 -0
  140. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/svelte.config.js +8 -0
  141. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/tsconfig.app.json +21 -0
  142. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/tsconfig.json +7 -0
  143. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/tsconfig.node.json +26 -0
  144. data/bundle-standalone/templates/javascript/sveltejs/typescript/template/vite.config.ts +7 -0
  145. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/README.md +50 -0
  146. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/(tabs)/_layout.jsx +35 -0
  147. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/(tabs)/explore.jsx +112 -0
  148. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/(tabs)/index.jsx +98 -0
  149. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/_layout.jsx +24 -0
  150. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/modal.jsx +29 -0
  151. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app.json +48 -0
  152. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/android-icon-background.png +0 -0
  153. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/android-icon-foreground.png +0 -0
  154. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/android-icon-monochrome.png +0 -0
  155. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/favicon.png +0 -0
  156. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/icon.png +0 -0
  157. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/partial-react-logo.png +0 -0
  158. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/react-logo.png +0 -0
  159. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/react-logo@2x.png +0 -0
  160. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/react-logo@3x.png +0 -0
  161. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/splash-icon.png +0 -0
  162. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/external-link.jsx +25 -0
  163. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/haptic-tab.jsx +18 -0
  164. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/hello-wave.jsx +19 -0
  165. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/parallax-scroll-view.jsx +79 -0
  166. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/themed-text.jsx +60 -0
  167. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/themed-view.jsx +14 -0
  168. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/ui/collapsible.jsx +45 -0
  169. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/ui/icon-symbol.ios.jsx +32 -0
  170. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/ui/icon-symbol.jsx +41 -0
  171. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/constants/theme.js +53 -0
  172. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/eslint.config.js +10 -0
  173. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/hooks/use-color-scheme.js +1 -0
  174. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/hooks/use-color-scheme.web.js +21 -0
  175. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/hooks/use-theme-color.js +21 -0
  176. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/jsconfig.json +17 -0
  177. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/package.json +47 -0
  178. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/pnpm-workspace.yaml +1 -0
  179. data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/scripts/reset-project.js +112 -0
  180. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/README.md +50 -0
  181. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/(tabs)/_layout.tsx +35 -0
  182. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/(tabs)/explore.tsx +112 -0
  183. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/(tabs)/index.tsx +98 -0
  184. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/_layout.tsx +24 -0
  185. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/modal.tsx +29 -0
  186. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app.json +48 -0
  187. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/android-icon-background.png +0 -0
  188. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/android-icon-foreground.png +0 -0
  189. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/android-icon-monochrome.png +0 -0
  190. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/favicon.png +0 -0
  191. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/icon.png +0 -0
  192. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/partial-react-logo.png +0 -0
  193. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/react-logo.png +0 -0
  194. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/react-logo@2x.png +0 -0
  195. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/react-logo@3x.png +0 -0
  196. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/splash-icon.png +0 -0
  197. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/external-link.tsx +25 -0
  198. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/haptic-tab.tsx +18 -0
  199. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/hello-wave.tsx +19 -0
  200. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/parallax-scroll-view.tsx +79 -0
  201. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/themed-text.tsx +60 -0
  202. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/themed-view.tsx +14 -0
  203. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/ui/collapsible.tsx +45 -0
  204. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/ui/icon-symbol.ios.tsx +32 -0
  205. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/ui/icon-symbol.tsx +41 -0
  206. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/constants/theme.ts +53 -0
  207. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/eslint.config.js +10 -0
  208. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/hooks/use-color-scheme.ts +1 -0
  209. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/hooks/use-color-scheme.web.ts +21 -0
  210. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/hooks/use-theme-color.ts +21 -0
  211. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/package.json +47 -0
  212. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/pnpm-workspace.yaml +1 -0
  213. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/scripts/reset-project.js +112 -0
  214. data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/tsconfig.json +17 -0
  215. data/bundle-standalone/templates/python/bottle/template/README.md +0 -0
  216. data/bundle-standalone/templates/python/bottle/template/main.py +6 -0
  217. data/bundle-standalone/templates/python/bottle/template/pyproject.toml +7 -0
  218. data/bundle-standalone/templates/python/dash/template/README.md +0 -0
  219. data/bundle-standalone/templates/python/dash/template/main.py +6 -0
  220. data/bundle-standalone/templates/python/dash/template/pyproject.toml +7 -0
  221. data/bundle-standalone/templates/python/falcon/template/README.md +0 -0
  222. data/bundle-standalone/templates/python/falcon/template/main.py +6 -0
  223. data/bundle-standalone/templates/python/falcon/template/pyproject.toml +7 -0
  224. data/bundle-standalone/templates/python/fastapi/template/README.md +0 -0
  225. data/bundle-standalone/templates/python/fastapi/template/main.py +27 -0
  226. data/bundle-standalone/templates/python/fastapi/template/pyproject.toml +7 -0
  227. data/bundle-standalone/templates/python/pyramid/template/README.md +0 -0
  228. data/bundle-standalone/templates/python/pyramid/template/main.py +6 -0
  229. data/bundle-standalone/templates/python/pyramid/template/pyproject.toml +7 -0
  230. data/bundle-standalone/templates/python/quart/template/README.md +0 -0
  231. data/bundle-standalone/templates/python/quart/template/main.py +6 -0
  232. data/bundle-standalone/templates/python/quart/template/pyproject.toml +7 -0
  233. data/bundle-standalone/templates/python/streamlit/template/README.md +0 -0
  234. data/bundle-standalone/templates/python/streamlit/template/main.py +6 -0
  235. data/bundle-standalone/templates/python/streamlit/template/pyproject.toml +7 -0
  236. data/bundle-standalone/templates/python/tornado/template/README.md +0 -0
  237. data/bundle-standalone/templates/python/tornado/template/main.py +6 -0
  238. data/bundle-standalone/templates/python/tornado/template/pyproject.toml +7 -0
  239. data/bundle-standalone/templates/template.json +87 -14
  240. data/bundle-standalone/templates/web3/anchor/template/Anchor.toml +6 -0
  241. data/bundle-standalone/templates/web3/anchor/template/Cargo.toml +23 -0
  242. data/bundle-standalone/templates/web3/anchor/template/README.md +10 -0
  243. data/bundle-standalone/templates/web3/anchor/template/migrations/deploy.ts +27 -0
  244. data/bundle-standalone/templates/web3/anchor/template/programs/mysolanaapp/src/lib.rs +40 -0
  245. data/bundle-standalone/templates/web3/anchor/template/tests/mysolanaapp.ts +26 -0
  246. data/bundle-standalone/templates/web3/ethersjs/template/README.md +12 -0
  247. data/bundle-standalone/templates/web3/ethersjs/template/contracts/SimpleStorage.sol +17 -0
  248. data/bundle-standalone/templates/web3/ethersjs/template/hardhat.config.js +8 -0
  249. data/bundle-standalone/templates/web3/ethersjs/template/package.json +29 -0
  250. data/bundle-standalone/templates/web3/ethersjs/template/scripts/deploy.ts +18 -0
  251. data/bundle-standalone/templates/web3/ethersjs/template/scripts/interact.ts +17 -0
  252. data/bundle-standalone/templates/web3/solidity/solidity-learning/01_data-types/DataTypes.sol +37 -0
  253. data/bundle-standalone/templates/web3/solidity/solidity-learning/01_data-types/SolidityOperations.sol +48 -0
  254. data/bundle-standalone/templates/web3/solidity/solidity-learning/02_contructors/Constructor.sol +16 -0
  255. data/bundle-standalone/templates/web3/solidity/solidity-learning/03_variables/Variables.sol +31 -0
  256. data/bundle-standalone/templates/web3/solidity/solidity-learning/04_functions/Functions.sol +19 -0
  257. data/bundle-standalone/templates/web3/solidity/solidity-learning/05_visibility/FunctionVisibility.sol +39 -0
  258. data/bundle-standalone/templates/web3/solidity/solidity-learning/06_pure_and_view_functions/PureAndViewFunction.sol +19 -0
  259. data/bundle-standalone/templates/web3/solidity/solidity-learning/07_function_modifiers/Modifiers.sol +27 -0
  260. data/bundle-standalone/templates/web3/solidity/solidity-learning/09_events/Events.sol +19 -0
  261. data/bundle-standalone/templates/web3/solidity/solidity-learning/10_error_handling/ErrorHandling.sol +25 -0
  262. data/bundle-standalone/templates/web3/solidity/solidity-learning/11_fallback_function/Fallback.sol +7 -0
  263. data/bundle-standalone/templates/web3/solidity/solidity-learning/12_for_loop/ForLoop.sol +15 -0
  264. data/bundle-standalone/templates/web3/solidity/solidity-learning/13_array/Array.sol +40 -0
  265. data/bundle-standalone/templates/web3/solidity/solidity-learning/14_mapping/Mapping.sol +21 -0
  266. data/bundle-standalone/templates/web3/solidity/solidity-learning/14_mapping/NestedMapping.sol +25 -0
  267. data/bundle-standalone/templates/web3/solidity/solidity-learning/15_enum/Enum.sol +22 -0
  268. data/bundle-standalone/templates/web3/solidity/solidity-learning/16_struct/Struct.sol +23 -0
  269. data/bundle-standalone/templates/web3/solidity/solidity-learning/17_payable_modifier/Payable.sol +26 -0
  270. data/bundle-standalone/templates/web3/solidity/solidity-learning/18_imports/Contract1.sol +15 -0
  271. data/bundle-standalone/templates/web3/solidity/solidity-learning/18_imports/Contract2.sol +11 -0
  272. data/bundle-standalone/templates/web3/solidity/solidity-learning/19_contract_cleanup/Cleanup.sol +18 -0
  273. data/bundle-standalone/templates/web3/solidity/solidity-learning/20_memory_and_storage/MemoryAndStorage.sol +20 -0
  274. data/bundle-standalone/templates/web3/solidity/solidity-learning/21_inheritance/Inheritance.sol +67 -0
  275. data/bundle-standalone/templates/web3/solidity/solidity-learning/22_if_statement/if-statement.sol +22 -0
  276. data/bundle-standalone/templates/web3/solidity/solidity-learning/23_libraries/libraries.sol +31 -0
  277. data/bundle-standalone/templates/web3/solidity/solidity-learning/23_libraries/safemath.sol +116 -0
  278. data/bundle-standalone/templates/web3/solidity/solidity-learning/24_interface/interface.sol +88 -0
  279. data/bundle-standalone/templates/web3/solidity/solidity-learning/README.md +423 -0
  280. data/bundle-standalone/templates/web3/solidity/uniswap-simple-swap/SimpleSwap.sol +46 -0
  281. metadata +369 -93
  282. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/App.jsx +0 -0
  283. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/Gemfile +0 -0
  284. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/README.md +0 -0
  285. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/__tests__/App.test.tsx +0 -0
  286. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/build.gradle +0 -0
  287. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/debug.keystore +0 -0
  288. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/proguard-rules.pro +0 -0
  289. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/AndroidManifest.xml +0 -0
  290. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/java/com/template/MainActivity.kt +0 -0
  291. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/java/com/template/MainApplication.kt +0 -0
  292. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -0
  293. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  294. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  295. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  296. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  297. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  298. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  299. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  300. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  301. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  302. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  303. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/values/strings.xml +0 -0
  304. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/values/styles.xml +0 -0
  305. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/build.gradle +0 -0
  306. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  307. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradle/wrapper/gradle-wrapper.properties +0 -0
  308. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradle.properties +0 -0
  309. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradlew +0 -0
  310. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradlew.bat +0 -0
  311. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/settings.gradle +0 -0
  312. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/app.json +0 -0
  313. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/babel.config.js +0 -0
  314. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/index.js +0 -0
  315. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/Podfile +0 -0
  316. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/AppDelegate.swift +0 -0
  317. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/Images.xcassets/AppIcon.appiconset/Contents.json +0 -0
  318. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/Images.xcassets/Contents.json +0 -0
  319. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/Info.plist +0 -0
  320. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/LaunchScreen.storyboard +0 -0
  321. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/PrivacyInfo.xcprivacy +0 -0
  322. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template.xcodeproj/project.pbxproj +0 -0
  323. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template.xcodeproj/xcshareddata/xcschemes/template.xcscheme +0 -0
  324. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/jest.config.js +0 -0
  325. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/metro.config.js +0 -0
  326. /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/package.json +0 -0
  327. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/App.tsx +0 -0
  328. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/Gemfile +0 -0
  329. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/README.md +0 -0
  330. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/__tests__/App.test.tsx +0 -0
  331. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/build.gradle +0 -0
  332. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/debug.keystore +0 -0
  333. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/proguard-rules.pro +0 -0
  334. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/AndroidManifest.xml +0 -0
  335. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/java/com/template/MainActivity.kt +0 -0
  336. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/java/com/template/MainApplication.kt +0 -0
  337. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -0
  338. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  339. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  340. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  341. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  342. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  343. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  344. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  345. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  346. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  347. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  348. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/values/strings.xml +0 -0
  349. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/values/styles.xml +0 -0
  350. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/build.gradle +0 -0
  351. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  352. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradle/wrapper/gradle-wrapper.properties +0 -0
  353. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradle.properties +0 -0
  354. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradlew +0 -0
  355. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradlew.bat +0 -0
  356. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/settings.gradle +0 -0
  357. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/app.json +0 -0
  358. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/babel.config.js +0 -0
  359. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/index.js +0 -0
  360. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/Podfile +0 -0
  361. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/AppDelegate.swift +0 -0
  362. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/Images.xcassets/AppIcon.appiconset/Contents.json +0 -0
  363. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/Images.xcassets/Contents.json +0 -0
  364. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/Info.plist +0 -0
  365. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/LaunchScreen.storyboard +0 -0
  366. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/PrivacyInfo.xcprivacy +0 -0
  367. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template.xcodeproj/project.pbxproj +0 -0
  368. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template.xcodeproj/xcshareddata/xcschemes/template.xcscheme +0 -0
  369. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/jest.config.js +0 -0
  370. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/metro.config.js +0 -0
  371. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/package.json +0 -0
  372. /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/tsconfig.json +0 -0
@@ -669,6 +669,7 @@ function generateVersionBanner() {
669
669
  return (0,boxen__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#00d2d3')('📦 Version: ') + chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#ffa502')(`v${version}`) +
670
670
  chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')(' • ') + chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#00d2d3')('🎯 Frameworks: ') + chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#ffa502')('75') +
671
671
  chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')(' • ') + chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#00d2d3')('📋 Templates: ') + chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#ffa502')('50+') +
672
+ chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')(' • ') + chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#00d2d3')('📋 Commands: ') + chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#ffa502')('22') +
672
673
  chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')(' • ') + chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#00d2d3')('⚡ Status: ') + chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#10ac84')('Ready to scaffold!'), {
673
674
  padding: { top: 0, bottom: 0, left: 2, right: 2 },
674
675
  borderStyle: 'round',
@@ -13740,13 +13741,13 @@ function showFeatureDisclaimer() {
13740
13741
  * Prompt for feature category selection
13741
13742
  */
13742
13743
  async function promptFeatureCategory(availableFeatures) {
13743
- const { feature } = await inquirer__WEBPACK_IMPORTED_MODULE_1__["default"].prompt([
13744
+ const { feature } = await inquirer.prompt([
13744
13745
  {
13745
13746
  type: 'list',
13746
13747
  name: 'feature',
13747
- message: `${chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.blue('❯')} Choose a feature category to add:`,
13748
+ message: `${chalk.blue('❯')} Choose a feature category to add:`,
13748
13749
  choices: availableFeatures.map(feature => ({
13749
- name: `${chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.green('▸')} ${capitalize(feature)}`,
13750
+ name: `${chalk.green('▸')} ${capitalize(feature)}`,
13750
13751
  value: feature,
13751
13752
  short: feature
13752
13753
  })),
@@ -13759,13 +13760,13 @@ async function promptFeatureCategory(availableFeatures) {
13759
13760
  * Prompt for feature provider selection
13760
13761
  */
13761
13762
  async function promptFeatureProvider(category, providers) {
13762
- const { provider } = await inquirer__WEBPACK_IMPORTED_MODULE_1__["default"].prompt([
13763
+ const { provider } = await inquirer.prompt([
13763
13764
  {
13764
13765
  type: 'list',
13765
13766
  name: 'provider',
13766
- message: `${chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.blue('❯')} Choose a ${category} provider:`,
13767
+ message: `${chalk.blue('❯')} Choose a ${category} provider:`,
13767
13768
  choices: providers.map(provider => ({
13768
- name: `${chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.green('▸')} ${capitalize(provider.replace(/-/g, ' '))}`,
13769
+ name: `${chalk.green('▸')} ${capitalize(provider.replace(/-/g, ' '))}`,
13769
13770
  value: provider,
13770
13771
  short: provider
13771
13772
  })),
@@ -13794,76 +13795,76 @@ function isFrameworkSupported(featureConfig, framework) {
13794
13795
  * Show enhanced setup instructions for specific features
13795
13796
  */
13796
13797
  function showEnhancedSetupInstructions(feature, provider) {
13797
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.green(`\n🔧 Setup Instructions for ${chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.bold(provider)} (${feature}):`));
13798
+ console.log(chalk.green(`\n🔧 Setup Instructions for ${chalk.bold(provider)} (${feature}):`));
13798
13799
  switch (feature) {
13799
13800
  case 'auth':
13800
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Configure authentication provider credentials'));
13801
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Add environment variables to .env file'));
13802
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Set up authentication routes and middleware'));
13803
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Update your app configuration'));
13801
+ console.log(chalk.hex('#95afc0')('1. Configure authentication provider credentials'));
13802
+ console.log(chalk.hex('#95afc0')('2. Add environment variables to .env file'));
13803
+ console.log(chalk.hex('#95afc0')('3. Set up authentication routes and middleware'));
13804
+ console.log(chalk.hex('#95afc0')('4. Update your app configuration'));
13804
13805
  break;
13805
13806
  case 'ai':
13806
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Get API key from your AI provider'));
13807
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Add API key to .env file'));
13808
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Test AI integration endpoints'));
13809
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Configure rate limiting and error handling'));
13807
+ console.log(chalk.hex('#95afc0')('1. Get API key from your AI provider'));
13808
+ console.log(chalk.hex('#95afc0')('2. Add API key to .env file'));
13809
+ console.log(chalk.hex('#95afc0')('3. Test AI integration endpoints'));
13810
+ console.log(chalk.hex('#95afc0')('4. Configure rate limiting and error handling'));
13810
13811
  break;
13811
13812
  case 'database':
13812
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Set up your database connection'));
13813
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Update connection string in .env'));
13814
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Run migrations if needed'));
13815
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Test database connectivity'));
13813
+ console.log(chalk.hex('#95afc0')('1. Set up your database connection'));
13814
+ console.log(chalk.hex('#95afc0')('2. Update connection string in .env'));
13815
+ console.log(chalk.hex('#95afc0')('3. Run migrations if needed'));
13816
+ console.log(chalk.hex('#95afc0')('4. Test database connectivity'));
13816
13817
  break;
13817
13818
  case 'aws':
13818
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Configure AWS credentials (AWS CLI or IAM roles)'));
13819
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Set up required AWS permissions'));
13820
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Update AWS region in configuration'));
13821
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Test AWS service integration'));
13819
+ console.log(chalk.hex('#95afc0')('1. Configure AWS credentials (AWS CLI or IAM roles)'));
13820
+ console.log(chalk.hex('#95afc0')('2. Set up required AWS permissions'));
13821
+ console.log(chalk.hex('#95afc0')('3. Update AWS region in configuration'));
13822
+ console.log(chalk.hex('#95afc0')('4. Test AWS service integration'));
13822
13823
  break;
13823
13824
  case 'payment':
13824
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Get API keys from payment provider'));
13825
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Add keys to .env file (separate test/live keys)'));
13826
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Configure webhooks for payment events'));
13827
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Test payment flow in sandbox mode'));
13825
+ console.log(chalk.hex('#95afc0')('1. Get API keys from payment provider'));
13826
+ console.log(chalk.hex('#95afc0')('2. Add keys to .env file (separate test/live keys)'));
13827
+ console.log(chalk.hex('#95afc0')('3. Configure webhooks for payment events'));
13828
+ console.log(chalk.hex('#95afc0')('4. Test payment flow in sandbox mode'));
13828
13829
  break;
13829
13830
  case 'storage':
13830
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Configure storage provider credentials'));
13831
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Set up bucket/container permissions'));
13832
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Add storage configuration to .env'));
13833
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Test file upload/download functionality'));
13831
+ console.log(chalk.hex('#95afc0')('1. Configure storage provider credentials'));
13832
+ console.log(chalk.hex('#95afc0')('2. Set up bucket/container permissions'));
13833
+ console.log(chalk.hex('#95afc0')('3. Add storage configuration to .env'));
13834
+ console.log(chalk.hex('#95afc0')('4. Test file upload/download functionality'));
13834
13835
  break;
13835
13836
  case 'monitoring':
13836
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Get monitoring service API key'));
13837
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Add configuration to .env file'));
13838
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Set up error tracking and alerts'));
13839
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Configure performance monitoring'));
13837
+ console.log(chalk.hex('#95afc0')('1. Get monitoring service API key'));
13838
+ console.log(chalk.hex('#95afc0')('2. Add configuration to .env file'));
13839
+ console.log(chalk.hex('#95afc0')('3. Set up error tracking and alerts'));
13840
+ console.log(chalk.hex('#95afc0')('4. Configure performance monitoring'));
13840
13841
  break;
13841
13842
  case 'analytics':
13842
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Get analytics service tracking ID'));
13843
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Add tracking configuration'));
13844
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Set up custom events and goals'));
13845
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Verify data collection'));
13843
+ console.log(chalk.hex('#95afc0')('1. Get analytics service tracking ID'));
13844
+ console.log(chalk.hex('#95afc0')('2. Add tracking configuration'));
13845
+ console.log(chalk.hex('#95afc0')('3. Set up custom events and goals'));
13846
+ console.log(chalk.hex('#95afc0')('4. Verify data collection'));
13846
13847
  break;
13847
13848
  case 'docker':
13848
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Install Docker on your system'));
13849
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Run: docker-compose up -d'));
13850
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Your app will be available at the configured port'));
13851
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Check logs: docker-compose logs'));
13849
+ console.log(chalk.hex('#95afc0')('1. Install Docker on your system'));
13850
+ console.log(chalk.hex('#95afc0')('2. Run: docker-compose up -d'));
13851
+ console.log(chalk.hex('#95afc0')('3. Your app will be available at the configured port'));
13852
+ console.log(chalk.hex('#95afc0')('4. Check logs: docker-compose logs'));
13852
13853
  break;
13853
13854
  case 'testing':
13854
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('1. Configure test environment variables'));
13855
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Set up test database/services'));
13856
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Run tests: npm test'));
13857
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Set up CI/CD test automation'));
13855
+ console.log(chalk.hex('#95afc0')('1. Configure test environment variables'));
13856
+ console.log(chalk.hex('#95afc0')('2. Set up test database/services'));
13857
+ console.log(chalk.hex('#95afc0')('3. Run tests: npm test'));
13858
+ console.log(chalk.hex('#95afc0')('4. Set up CI/CD test automation'));
13858
13859
  break;
13859
13860
  default:
13860
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')(`1. Check the ${feature} configuration files`));
13861
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('2. Update .env file with necessary variables'));
13862
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('3. Test the integration'));
13863
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('4. Review documentation for advanced setup'));
13861
+ console.log(chalk.hex('#95afc0')(`1. Check the ${feature} configuration files`));
13862
+ console.log(chalk.hex('#95afc0')('2. Update .env file with necessary variables'));
13863
+ console.log(chalk.hex('#95afc0')('3. Test the integration'));
13864
+ console.log(chalk.hex('#95afc0')('4. Review documentation for advanced setup'));
13864
13865
  }
13865
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('\n💡 Check your project files for any additional setup instructions'));
13866
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#95afc0')('🔗 Refer to the provider\'s official documentation for detailed configuration'));
13866
+ console.log(chalk.hex('#95afc0')('\n💡 Check your project files for any additional setup instructions'));
13867
+ console.log(chalk.hex('#95afc0')('🔗 Refer to the provider\'s official documentation for detailed configuration'));
13867
13868
  }
13868
13869
  /**
13869
13870
  * Show help for add command
@@ -13888,7 +13889,7 @@ async function showAddHelp() {
13888
13889
  { command: 'add', description: 'Interactive feature selection' },
13889
13890
  { command: 'add auth', description: 'Show auth providers dropdown' },
13890
13891
  { command: 'add auth clerk', description: 'Add Clerk authentication' },
13891
- { command: 'add aws ec2', description: 'Add AWS EC2 integration' },
13892
+ { command: 'add aws ec2,s3,ecs', description: 'Add AWS EC2, S3, and ECS integration' },
13892
13893
  { command: 'add ai openai', description: 'Add OpenAI integration' },
13893
13894
  { command: 'add database postgres', description: 'Add PostgreSQL integration' },
13894
13895
  { command: 'add payment stripe', description: 'Add Stripe payment integration' },
@@ -13921,7 +13922,7 @@ async function showAddHelp() {
13921
13922
  'Use "pi add --list" to see detailed feature information'
13922
13923
  ]
13923
13924
  };
13924
- (0,_utils_helpFormatter_js__WEBPACK_IMPORTED_MODULE_6__/* .createStandardHelp */ .ht)(helpConfig);
13925
+ (0,_utils_helpFormatter_js__WEBPACK_IMPORTED_MODULE_6__.createStandardHelp)(helpConfig);
13925
13926
  }
13926
13927
  /**
13927
13928
  * Main add command handler with enhanced syntax support
@@ -13936,6 +13937,49 @@ async function addCommand(feature, provider, options = {}) {
13936
13937
  try {
13937
13938
  // Ensure features are loaded first
13938
13939
  await (0,_utils_featureInstaller_js__WEBPACK_IMPORTED_MODULE_7__/* .ensureFeaturesLoaded */ .vV)();
13940
+ // Batch processing: support comma-separated features and/or providers.
13941
+ // Examples supported:
13942
+ // - pi add aws s3,ec2,ecs (single feature, multiple providers)
13943
+ // - pi add auth,database (multiple features, interactive providers)
13944
+ // - pi add auth,database clerk,prisma (paired lists)
13945
+ if (feature && (feature.includes(',') || (provider && provider.includes(',')))) {
13946
+ const featureList = feature.split(',').map(f => f.trim()).filter(Boolean);
13947
+ const providerList = provider ? provider.split(',').map(p => p.trim()).filter(Boolean) : [];
13948
+ // Helper to dispatch a single pair
13949
+ const runSingle = async (f, p) => {
13950
+ // call addCommand recursively for each pair; avoid infinite loop as we pass single items
13951
+ await addCommand(f, p, options);
13952
+ };
13953
+ // If only one feature but multiple providers -> add each provider for that feature
13954
+ if (featureList.length === 1 && providerList.length > 0) {
13955
+ for (const p of providerList) {
13956
+ await runSingle(featureList[0], p);
13957
+ }
13958
+ return;
13959
+ }
13960
+ // If multiple features and equal number of providers -> pair them
13961
+ if (featureList.length > 1 && providerList.length === featureList.length) {
13962
+ for (let i = 0; i < featureList.length; i++) {
13963
+ await runSingle(featureList[i], providerList[i]);
13964
+ }
13965
+ return;
13966
+ }
13967
+ // If multiple features and a single provider -> apply provider to all features
13968
+ if (featureList.length > 1 && providerList.length === 1) {
13969
+ for (const f of featureList) {
13970
+ await runSingle(f, providerList[0]);
13971
+ }
13972
+ return;
13973
+ }
13974
+ // If multiple features and no providers -> process each feature (interactive provider selection inside)
13975
+ if (featureList.length > 1 && providerList.length === 0) {
13976
+ for (const f of featureList) {
13977
+ await runSingle(f, undefined);
13978
+ }
13979
+ return;
13980
+ }
13981
+ // Fallback: if single feature and single provider (shouldn't reach here) just continue
13982
+ }
13939
13983
  // Handle list flag
13940
13984
  if (options.list || feature === '--list' || feature === '-l') {
13941
13985
  await listAvailableFeatures();
@@ -14009,73 +14053,6 @@ async function addCommand(feature, provider, options = {}) {
14009
14053
  }
14010
14054
  const featuresConfig = await getFeaturesConfig();
14011
14055
  const availableFeatures = Object.keys(featuresConfig.features || {});
14012
- // Handle different command syntax cases
14013
- if (!feature) {
14014
- // Case 1: "pi add" - Show interactive dropdown for all features
14015
- const selectedFeature = await promptFeatureCategory(availableFeatures);
14016
- if (!selectedFeature)
14017
- return;
14018
- feature = selectedFeature;
14019
- }
14020
- // Validate feature exists
14021
- if (!availableFeatures.includes(feature)) {
14022
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.red(`❌ Feature '${feature}' not found`));
14023
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.yellow(`💡 Available features: ${availableFeatures.join(', ')}`));
14024
- return;
14025
- }
14026
- const currentFeatureConfig = featuresConfig.features[feature];
14027
- if (!provider) {
14028
- // Case 2: "pi add <category>" - Show providers for category
14029
- const providers = getFeatureProviders(feature, currentFeatureConfig);
14030
- if (providers.length === 0) {
14031
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.yellow(`⚠️ No providers found for ${feature}`));
14032
- return;
14033
- }
14034
- if (providers.length === 1) {
14035
- provider = providers[0];
14036
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.cyan(`🔧 Using ${chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.bold(provider)} (only provider available)`));
14037
- }
14038
- else {
14039
- const selectedProvider = await promptFeatureProvider(feature, providers);
14040
- if (!selectedProvider)
14041
- return;
14042
- provider = selectedProvider;
14043
- }
14044
- }
14045
- // Case 3: "pi add <category> <provider>" - Direct installation
14046
- // Validate provider exists for feature
14047
- const providers = getFeatureProviders(feature, currentFeatureConfig);
14048
- if (!providers.includes(provider)) {
14049
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.red(`❌ Provider '${provider}' not found for ${feature}`));
14050
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.yellow(`💡 Available providers: ${providers.join(', ')}`));
14051
- return;
14052
- }
14053
- // Check framework compatibility
14054
- if (!isFrameworkSupported(currentFeatureConfig, projectInfo.framework)) {
14055
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.red(`❌ ${feature} (${provider}) is not supported for ${projectInfo.framework}`));
14056
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.yellow(`💡 Supported frameworks: ${currentFeatureConfig.supportedFrameworks?.join(', ') || 'Not specified'}`));
14057
- return;
14058
- }
14059
- // Install the feature
14060
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.hex('#00d2d3')(`\n🚀 Installing ${feature} (${provider})...\n`));
14061
- try {
14062
- await (0,_utils_featureInstaller_js__WEBPACK_IMPORTED_MODULE_7__/* .addFeature */ .Ue)(feature, provider, projectPath);
14063
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.green(`\n✅ Successfully added ${feature} (${provider})`));
14064
- // Show setup instructions
14065
- showEnhancedSetupInstructions(feature, provider);
14066
- // Update history (if available)
14067
- try {
14068
- if ("addFeature" in _utils_historyManager_js__WEBPACK_IMPORTED_MODULE_8__/* .historyManager */ .O && typeof _utils_historyManager_js__WEBPACK_IMPORTED_MODULE_8__/* .historyManager */ .O.addFeature === 'function') {
14069
- await _utils_historyManager_js__WEBPACK_IMPORTED_MODULE_8__/* .historyManager */ .O.addFeature(feature, provider, projectPath);
14070
- }
14071
- }
14072
- catch (error) {
14073
- // History update is optional
14074
- }
14075
- }
14076
- catch (error) {
14077
- console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.red(`\n❌ Failed to add ${feature} (${provider}): ${error}`));
14078
- }
14079
14056
  // Show additional project details
14080
14057
  if (projectInfo.packageManager) {
14081
14058
  console.log(chalk__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay.gray(`📦 Package manager: ${projectInfo.packageManager}`));
@@ -23531,7 +23508,7 @@ exports.firstValueFrom = firstValueFrom;
23531
23508
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
23532
23509
 
23533
23510
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23534
- /* harmony export */ ht: () => (/* binding */ createStandardHelp)
23511
+ /* harmony export */ createStandardHelp: () => (/* binding */ createStandardHelp)
23535
23512
  /* harmony export */ });
23536
23513
  /* unused harmony exports createQuickHelp, createErrorHelp */
23537
23514
  /* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3757);
@@ -51438,8 +51415,11 @@ function generateTemplateName(framework, options) {
51438
51415
  if (config.templates && config.templates.length > 0) {
51439
51416
  // Build template name based on selected options
51440
51417
  const parts = [];
51441
- // Handle src option (only for nextjs and reactjs)
51442
- if ((framework === 'nextjs' || framework === 'reactjs') && config.options?.includes('src')) {
51418
+ const templatesList = Array.isArray(config.templates) ? config.templates : [];
51419
+ // Helper: check if any template mentions a token
51420
+ const templateIncludes = (token) => templatesList.some(t => t.includes(token));
51421
+ // Handle src option (only for nextjs) but only if templates actually include src/no-src
51422
+ if ((framework === 'nextjs') && config.options?.includes('src') && templateIncludes('src')) {
51443
51423
  if (options.src) {
51444
51424
  parts.push('src');
51445
51425
  }
@@ -51447,16 +51427,12 @@ function generateTemplateName(framework, options) {
51447
51427
  parts.push('no-src');
51448
51428
  }
51449
51429
  }
51450
- // Handle UI library - only add if actually selected (not "none")
51451
- // When UI is "none", templates simply omit the UI part from their names
51452
- if (config.ui && config.ui.length > 0) {
51453
- if (options.ui && options.ui !== 'none') {
51454
- parts.push(options.ui);
51455
- }
51456
- // For "none" selection, don't add any UI part to the template name
51430
+ // Handle UI library - only add if actually selected (not "none") and templates reference the UI token
51431
+ if (config.ui && config.ui.length > 0 && options.ui && options.ui !== 'none' && templateIncludes(options.ui)) {
51432
+ parts.push(options.ui);
51457
51433
  }
51458
- // Handle tailwind option
51459
- if (config.options?.includes('tailwind')) {
51434
+ // Handle tailwind option only if templates contain tailwind/no-tailwind
51435
+ if (config.options?.includes('tailwind') && templateIncludes('tailwind')) {
51460
51436
  if (options.tailwind) {
51461
51437
  parts.push('tailwind');
51462
51438
  }
@@ -51464,7 +51440,11 @@ function generateTemplateName(framework, options) {
51464
51440
  parts.push('no-tailwind');
51465
51441
  }
51466
51442
  }
51467
- const generatedName = parts.join('-') + '-template';
51443
+ // Handle bundler option only if templates reference bundler token
51444
+ if (config.bundlers && Array.isArray(config.bundlers) && options.bundler && templateIncludes(options.bundler)) {
51445
+ parts.push(options.bundler);
51446
+ }
51447
+ const generatedName = (parts.length > 0 ? parts.join('-') + '-template' : '');
51468
51448
  // Find exact match in templates array
51469
51449
  const exactMatch = config.templates.find((template) => template === generatedName);
51470
51450
  if (exactMatch) {
@@ -51554,6 +51534,37 @@ function resolveTemplatePath(projectInfo) {
51554
51534
  // keep default baseFrameworkPath (top-level legacy location)
51555
51535
  }
51556
51536
  }
51537
+ // If a specific template name was provided, try to resolve that exact template folder
51538
+ // across language subfolders and all top-level categories. This avoids returning a
51539
+ // language directory (which would copy all templates) when the user selected a single template.
51540
+ if (projectInfo && projectInfo.templateName) {
51541
+ const requested = projectInfo.templateName;
51542
+ // 1) try language-specific location under the discovered base path
51543
+ if (projectInfo.language) {
51544
+ const p = external_path_.join(baseFrameworkPath, projectInfo.language, requested);
51545
+ if (fs_extra_lib.existsSync(p) && fs_extra_lib.statSync(p).isDirectory())
51546
+ return p;
51547
+ }
51548
+ // 2) try baseFrameworkPath/templateName
51549
+ const direct = external_path_.join(baseFrameworkPath, requested);
51550
+ if (fs_extra_lib.existsSync(direct) && fs_extra_lib.statSync(direct).isDirectory())
51551
+ return direct;
51552
+ // 3) scan other categories under templates root to find the exact template folder
51553
+ const topLevelItems = fs_extra_lib.readdirSync(templatesRoot, { withFileTypes: true });
51554
+ for (const dirent of topLevelItems) {
51555
+ if (!dirent.isDirectory())
51556
+ continue;
51557
+ const candidateLang = projectInfo.language
51558
+ ? external_path_.join(templatesRoot, dirent.name, framework, projectInfo.language, requested)
51559
+ : null;
51560
+ if (candidateLang && fs_extra_lib.existsSync(candidateLang) && fs_extra_lib.statSync(candidateLang).isDirectory())
51561
+ return candidateLang;
51562
+ const candidate = external_path_.join(templatesRoot, dirent.name, framework, requested);
51563
+ if (fs_extra_lib.existsSync(candidate) && fs_extra_lib.statSync(candidate).isDirectory())
51564
+ return candidate;
51565
+ }
51566
+ // If nothing found, continue to the regular resolution logic which may return a sensible default.
51567
+ }
51557
51568
  // If a language-specific folder exists, prefer it
51558
51569
  // Use template.json config to resolve paths when available
51559
51570
  const fwConfig = templateResolver_getFrameworkConfig(framework);
@@ -52177,7 +52188,46 @@ const execAsync = (0,external_util_.promisify)(external_child_process_.exec);
52177
52188
  * Create a project from a template with progress indicators and error handling
52178
52189
  */
52179
52190
  async function createProjectFromTemplate(options) {
52180
- const { projectName, templatePath } = options;
52191
+ const { projectName } = options;
52192
+ // allow adjusting templatePath if a specific templateName was provided
52193
+ let templatePath = options.templatePath;
52194
+ const templateName = options.templateName;
52195
+ const language = options.language;
52196
+ // If a specific templateName was provided, try to resolve it under the given templatePath
52197
+ if (templateName) {
52198
+ // 1) language-specific location
52199
+ if (language) {
52200
+ const langCandidate = external_path_.join(templatePath, language, templateName);
52201
+ if (await fs_extra_lib.pathExists(langCandidate) && (await fs_extra_lib.stat(langCandidate)).isDirectory()) {
52202
+ templatePath = langCandidate;
52203
+ }
52204
+ }
52205
+ // 2) direct template folder under templatePath
52206
+ if (templatePath === options.templatePath) {
52207
+ const directCandidate = external_path_.join(templatePath, templateName);
52208
+ if (await fs_extra_lib.pathExists(directCandidate) && (await fs_extra_lib.stat(directCandidate)).isDirectory()) {
52209
+ templatePath = directCandidate;
52210
+ }
52211
+ }
52212
+ // 3) scan any subdirectories of templatePath to find an exact match (covers category mismatches)
52213
+ if (templatePath === options.templatePath) {
52214
+ try {
52215
+ const items = await fs_extra_lib.readdir(options.templatePath, { withFileTypes: true });
52216
+ for (const it of items) {
52217
+ if (!it.isDirectory())
52218
+ continue;
52219
+ const candidate = external_path_.join(options.templatePath, it.name, templateName);
52220
+ if (await fs_extra_lib.pathExists(candidate) && (await fs_extra_lib.stat(candidate)).isDirectory()) {
52221
+ templatePath = candidate;
52222
+ break;
52223
+ }
52224
+ }
52225
+ }
52226
+ catch (err) {
52227
+ // ignore scanning errors and let subsequent validation handle missing template
52228
+ }
52229
+ }
52230
+ }
52181
52231
  const spinner = (0,node_modules_ora/* default */.Ay)(source/* default */.Ay.hex('#10ac84')('Creating project structure...')).start();
52182
52232
  try {
52183
52233
  // Handle "." as project name - create in current directory
@@ -52748,7 +52798,7 @@ function showCreateHelp() {
52748
52798
  'All templates support both JavaScript and TypeScript'
52749
52799
  ]
52750
52800
  };
52751
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
52801
+ (0,helpFormatter.createStandardHelp)(helpConfig);
52752
52802
  }
52753
52803
  /**
52754
52804
  * Main create project function with comprehensive prompt system
@@ -53322,11 +53372,11 @@ function showCheckHelp() {
53322
53372
  'check [options]'
53323
53373
  ],
53324
53374
  options: [
53325
- { flag: '-v, --verbose', description: 'Show detailed information for all packages' }
53375
+ // verbose flag removed: command now shows full information by default
53326
53376
  ],
53327
53377
  examples: [
53328
53378
  { command: 'check', description: 'Check all packages in current project' },
53329
- { command: 'check --verbose', description: 'Check all packages with detailed info' },
53379
+ { command: 'check', description: 'Check all packages with detailed info' },
53330
53380
  { command: 'check react', description: 'Check specific package version' },
53331
53381
  { command: 'check @types/node', description: 'Check scoped packages' },
53332
53382
  { command: 'check --help', description: 'Show this help message' }
@@ -53344,11 +53394,10 @@ function showCheckHelp() {
53344
53394
  }
53345
53395
  ],
53346
53396
  tips: [
53347
- 'Use --verbose for detailed package information including security vulnerabilities',
53348
53397
  'Check specific packages by name for targeted updates'
53349
53398
  ]
53350
53399
  };
53351
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
53400
+ (0,helpFormatter.createStandardHelp)(helpConfig);
53352
53401
  }
53353
53402
  async function checkCommand(packageName, options) {
53354
53403
  // Check for help flag
@@ -53361,17 +53410,13 @@ async function checkCommand(packageName, options) {
53361
53410
  showCheckHelp();
53362
53411
  return;
53363
53412
  }
53364
- // Check for verbose flag
53365
- const isVerbose = packageName === '--verbose' || packageName === '-v' || options?.verbose;
53366
- // If verbose is the first argument, check all packages with verbose output
53367
- if (packageName === '--verbose' || packageName === '-v') {
53368
- packageName = undefined;
53369
- }
53413
+ // The check command now shows full details by default (verbose removed)
53414
+ const isVerbose = true;
53370
53415
  try {
53371
53416
  // Display command banner
53372
53417
  (0,banner/* displayCommandBanner */.kn)('Check', 'Check package versions and updates for your project dependencies');
53373
53418
  console.log('\n' + source/* default */.Ay.hex('#f39c12')('🔍 Starting package check...'));
53374
- if (packageName && packageName !== '--verbose' && packageName !== '-v') {
53419
+ if (packageName) {
53375
53420
  await checkSinglePackage(packageName, isVerbose);
53376
53421
  }
53377
53422
  else {
@@ -53785,14 +53830,14 @@ function displayPackageInfo(packages, projectType, verbose = false, isMultiProje
53785
53830
  if (projectType) {
53786
53831
  console.log(`${source/* default */.Ay.hex('#00d2d3')('📋')} ${projectType.name} (${source/* default */.Ay.cyan(projectType.packageManager)})`);
53787
53832
  }
53788
- // Determine how many packages to show
53789
- const packagesToShow = verbose ? packages : packages.slice(0, 12);
53790
- // Group packages by status for better organization
53833
+ // Since verbose mode is removed, show all packages by default
53834
+ const packagesToShow = packages;
53835
+ // Group packages by status for better organization (show all)
53791
53836
  const groupedPackages = [
53792
- ...deprecatedPackages.slice(0, verbose ? deprecatedPackages.length : 3),
53793
- ...outdatedPackages.slice(0, verbose ? outdatedPackages.length : 8),
53794
- ...upToDatePackages.slice(0, verbose ? upToDatePackages.length : 6)
53795
- ].slice(0, verbose ? packages.length : 12);
53837
+ ...deprecatedPackages,
53838
+ ...outdatedPackages,
53839
+ ...upToDatePackages
53840
+ ];
53796
53841
  if (groupedPackages.length > 0) {
53797
53842
  console.log('\n');
53798
53843
  // Compact table format
@@ -53816,26 +53861,7 @@ function displayPackageInfo(packages, projectType, verbose = false, isMultiProje
53816
53861
  });
53817
53862
  }
53818
53863
  // Show remaining packages summary when not in verbose mode
53819
- if (!verbose && packages.length > 12) {
53820
- const remaining = packages.length - groupedPackages.length;
53821
- const remainingOutdated = packages.filter(pkg => pkg.needsUpdate && !groupedPackages.includes(pkg)).length;
53822
- const remainingUpToDate = packages.filter(pkg => !pkg.needsUpdate && !pkg.isDeprecated && !groupedPackages.includes(pkg)).length;
53823
- console.log('\n' + source/* default */.Ay.gray('─'.repeat(80)));
53824
- const hiddenSummary = [
53825
- remainingUpToDate > 0 ? `${source/* default */.Ay.hex('#10ac84')('✅')} ${remainingUpToDate} more up-to-date` : null,
53826
- remainingOutdated > 0 ? `${source/* default */.Ay.hex('#f39c12')('⚠️')} ${remainingOutdated} more need updates` : null
53827
- ].filter(Boolean).join(' • ');
53828
- if (hiddenSummary) {
53829
- console.log(`${source/* default */.Ay.dim(`+${remaining} hidden:`)} ${hiddenSummary}`);
53830
- }
53831
- // Show sample of remaining package names
53832
- if (remainingOutdated > 0) {
53833
- const sampleNames = packages.filter(pkg => pkg.needsUpdate && !groupedPackages.includes(pkg))
53834
- .slice(0, 4).map(pkg => pkg.name).join(', ');
53835
- console.log(`${source/* default */.Ay.dim('Outdated:')} ${sampleNames}${remainingOutdated > 4 ? '...' : ''}`);
53836
- }
53837
- console.log(`\n${source/* default */.Ay.cyan('💡')} Use ${source/* default */.Ay.bold('--verbose')} to see all ${packages.length} packages`);
53838
- }
53864
+ // No 'hidden' summary - all packages are shown
53839
53865
  // Compact recommendations section
53840
53866
  if (outdatedPackages.length > 0 || deprecatedPackages.length > 0) {
53841
53867
  console.log('\n' + source/* default */.Ay.hex('#667eea')('💡 Quick Actions:'));
@@ -53872,6 +53898,222 @@ async function cachePackageCheckResults(packageInfos, projectType) {
53872
53898
  }
53873
53899
  }
53874
53900
 
53901
+ ;// ./dist/commands/size.js
53902
+
53903
+
53904
+
53905
+
53906
+ function humanBytes(bytes) {
53907
+ if (bytes < 1024)
53908
+ return `${bytes} B`;
53909
+ const units = ['KB', 'MB', 'GB', 'TB'];
53910
+ let i = -1;
53911
+ do {
53912
+ bytes = bytes / 1024;
53913
+ i++;
53914
+ } while (bytes >= 1024 && i < units.length - 1);
53915
+ return `${bytes.toFixed(2)} ${units[i]}`;
53916
+ }
53917
+ async function folderSize(p) {
53918
+ let total = 0;
53919
+ try {
53920
+ const stats = await fs_extra_lib.stat(p);
53921
+ if (stats.isFile())
53922
+ return stats.size;
53923
+ if (stats.isDirectory()) {
53924
+ const items = await fs_extra_lib.readdir(p);
53925
+ for (const item of items) {
53926
+ const itemPath = external_path_.join(p, item);
53927
+ total += await folderSize(itemPath);
53928
+ }
53929
+ }
53930
+ }
53931
+ catch (err) {
53932
+ // ignore permission errors
53933
+ }
53934
+ return total;
53935
+ }
53936
+ async function listLargestFiles(p, limit = 10) {
53937
+ const results = [];
53938
+ async function walk(curr) {
53939
+ try {
53940
+ const stats = await fs_extra_lib.stat(curr);
53941
+ if (stats.isFile()) {
53942
+ results.push({ file: curr, size: stats.size });
53943
+ return;
53944
+ }
53945
+ if (stats.isDirectory()) {
53946
+ const items = await fs_extra_lib.readdir(curr);
53947
+ for (const item of items) {
53948
+ await walk(external_path_.join(curr, item));
53949
+ }
53950
+ }
53951
+ }
53952
+ catch (err) {
53953
+ // ignore
53954
+ }
53955
+ }
53956
+ await walk(p);
53957
+ results.sort((a, b) => b.size - a.size);
53958
+ return results.slice(0, limit);
53959
+ }
53960
+ async function showSizeHelp() {
53961
+ const { createStandardHelp } = await Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 4120));
53962
+ const helpConfig = {
53963
+ commandName: 'Size',
53964
+ emoji: '📏',
53965
+ description: 'Show size of files and directories. Supports multiple paths and summary output.',
53966
+ usage: ['size [paths...]', 'size -a [paths...]', 'size --top <n> [paths...]'],
53967
+ options: [
53968
+ { flag: '-a, --all', description: 'Show sizes for all files and folders (verbose)' },
53969
+ { flag: '--top <n>', description: 'Show top N largest files (default 10)' },
53970
+ { flag: '--json', description: 'Output machine-readable JSON' }
53971
+ ],
53972
+ examples: [
53973
+ { command: 'size .', description: 'Show size for current directory' },
53974
+ { command: 'size src package.json', description: 'Show sizes for multiple paths' },
53975
+ { command: 'size -a src', description: 'List all files and folders sizes under src' }
53976
+ ]
53977
+ };
53978
+ // createStandardHelp is exported as named function; call it
53979
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
53980
+ // @ts-ignore
53981
+ createStandardHelp(helpConfig);
53982
+ }
53983
+ async function sizeCommand(targets, options) {
53984
+ try {
53985
+ (0,banner/* displayCommandBanner */.kn)('size', 'Show file or folder sizes');
53986
+ // Normalize targets to an array
53987
+ let paths = [];
53988
+ if (!targets) {
53989
+ paths = ['.'];
53990
+ }
53991
+ else if (Array.isArray(targets)) {
53992
+ paths = targets.length === 0 ? ['.'] : targets;
53993
+ }
53994
+ else if (typeof targets === 'string') {
53995
+ paths = [targets];
53996
+ }
53997
+ // Resolve and dedupe
53998
+ paths = Array.from(new Set(paths.map(p => p === '.' ? process.cwd() : external_path_.resolve(process.cwd(), p))));
53999
+ const topN = options?.top ? Number(options.top) : 10;
54000
+ const showAll = !!options?.all;
54001
+ const jsonOutput = !!options?.json;
54002
+ let combinedTotal = 0;
54003
+ const combinedFiles = [];
54004
+ const resultsPerPath = [];
54005
+ for (const p of paths) {
54006
+ if (!await fs_extra_lib.pathExists(p)) {
54007
+ console.log(source/* default */.Ay.red(`❌ Path not found: ${p}`));
54008
+ continue;
54009
+ }
54010
+ const stats = await fs_extra_lib.stat(p);
54011
+ if (stats.isFile()) {
54012
+ const entry = { path: p, type: 'file', size: stats.size };
54013
+ if (jsonOutput)
54014
+ resultsPerPath.push(entry);
54015
+ else {
54016
+ console.log(`\n${source/* default */.Ay.cyan('File:')} ${p}`);
54017
+ console.log(`${source/* default */.Ay.cyan('Size:')} ${source/* default */.Ay.bold(humanBytes(stats.size))}`);
54018
+ }
54019
+ combinedTotal += stats.size;
54020
+ combinedFiles.push({ file: p, size: stats.size });
54021
+ continue;
54022
+ }
54023
+ const total = await folderSize(p);
54024
+ combinedTotal += total;
54025
+ if (jsonOutput)
54026
+ resultsPerPath.push({ path: p, type: 'directory', size: total });
54027
+ else {
54028
+ console.log(`\n${source/* default */.Ay.cyan('Directory:')} ${p}`);
54029
+ console.log(`${source/* default */.Ay.cyan('Total size:')} ${source/* default */.Ay.bold(humanBytes(total))}`);
54030
+ }
54031
+ if (showAll) {
54032
+ // Walk directory and print sizes for every file and nested folder
54033
+ if (!jsonOutput)
54034
+ console.log(source/* default */.Ay.hex('#00d2d3')('\nListing all files and folders with sizes (may be verbose):'));
54035
+ async function walkAndPrint(curr) {
54036
+ try {
54037
+ const s = await fs_extra_lib.stat(curr);
54038
+ if (s.isFile()) {
54039
+ if (jsonOutput)
54040
+ resultsPerPath.push({ path: curr, type: 'file', size: s.size });
54041
+ else
54042
+ console.log(`${source/* default */.Ay.yellow(humanBytes(s.size)).padEnd(10)} ${source/* default */.Ay.gray(curr)}`);
54043
+ combinedFiles.push({ file: curr, size: s.size });
54044
+ return;
54045
+ }
54046
+ if (s.isDirectory()) {
54047
+ const items = await fs_extra_lib.readdir(curr);
54048
+ let folderTotal = 0;
54049
+ for (const it of items) {
54050
+ const ip = external_path_.join(curr, it);
54051
+ const childSize = await folderSize(ip);
54052
+ folderTotal += childSize;
54053
+ await walkAndPrint(ip);
54054
+ }
54055
+ if (jsonOutput)
54056
+ resultsPerPath.push({ path: curr, type: 'directory', size: folderTotal });
54057
+ else
54058
+ console.log(`${source/* default */.Ay.blue('Dir Total:')} ${source/* default */.Ay.bold(humanBytes(folderTotal)).padEnd(10)} ${source/* default */.Ay.gray(curr)}`);
54059
+ }
54060
+ }
54061
+ catch (err) {
54062
+ // ignore
54063
+ }
54064
+ }
54065
+ await walkAndPrint(p);
54066
+ }
54067
+ else if (topN > 0) {
54068
+ const largest = await listLargestFiles(p, topN);
54069
+ if (jsonOutput) {
54070
+ const last = resultsPerPath[resultsPerPath.length - 1];
54071
+ if (last)
54072
+ last.top = largest.map(f => ({ file: f.file, size: f.size }));
54073
+ }
54074
+ else {
54075
+ console.log(`\n${source/* default */.Ay.hex('#667eea')('Top ' + topN + ' largest files in ' + p + ':')}`);
54076
+ largest.forEach((f, idx) => {
54077
+ console.log(`${String(idx + 1).padStart(2)}. ${source/* default */.Ay.yellow(humanBytes(f.size)).padEnd(10)} ${source/* default */.Ay.gray(f.file)}`);
54078
+ combinedFiles.push(f);
54079
+ });
54080
+ }
54081
+ }
54082
+ }
54083
+ // JSON output
54084
+ if (jsonOutput) {
54085
+ const uniqCombined = Array.from(new Map(combinedFiles.map(f => [f.file, f])).values());
54086
+ uniqCombined.sort((a, b) => b.size - a.size);
54087
+ const out = {
54088
+ scannedPaths: paths,
54089
+ perPath: resultsPerPath,
54090
+ combinedSize: combinedTotal,
54091
+ topFiles: uniqCombined.slice(0, topN).map(f => ({ file: f.file, size: f.size }))
54092
+ };
54093
+ console.log(JSON.stringify(out, null, 2));
54094
+ return;
54095
+ }
54096
+ // Combined summary (human)
54097
+ if (paths.length > 1) {
54098
+ console.log('\n' + source/* default */.Ay.hex('#00d2d3')('📦 Combined Summary'));
54099
+ console.log(`${source/* default */.Ay.cyan('Paths scanned:')} ${paths.length}`);
54100
+ console.log(`${source/* default */.Ay.cyan('Combined size:')} ${source/* default */.Ay.bold(humanBytes(combinedTotal))}`);
54101
+ if (topN > 0 && combinedFiles.length > 0) {
54102
+ const uniqCombined = Array.from(new Map(combinedFiles.map(f => [f.file, f])).values());
54103
+ uniqCombined.sort((a, b) => b.size - a.size);
54104
+ console.log(`\n${source/* default */.Ay.hex('#667eea')('Top ' + topN + ' largest files across all inputs:')}`);
54105
+ uniqCombined.slice(0, topN).forEach((f, idx) => {
54106
+ console.log(`${String(idx + 1).padStart(2)}. ${source/* default */.Ay.yellow(humanBytes(f.size)).padEnd(10)} ${source/* default */.Ay.gray(f.file)}`);
54107
+ });
54108
+ }
54109
+ }
54110
+ }
54111
+ catch (err) {
54112
+ console.error(source/* default */.Ay.red('❌ Failed to calculate size:'), err.message || err);
54113
+ process.exit(1);
54114
+ }
54115
+ }
54116
+
53875
54117
  // EXTERNAL MODULE: ./node_modules/.pnpm/figlet@1.8.2/node_modules/figlet/lib/node-figlet.js
53876
54118
  var node_figlet = __webpack_require__(9372);
53877
54119
  ;// ./dist/utils/ui.js
@@ -54630,7 +54872,7 @@ function showCloneHelp() {
54630
54872
  'Shallow clones are faster but have limited git history'
54631
54873
  ]
54632
54874
  };
54633
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
54875
+ (0,helpFormatter.createStandardHelp)(helpConfig);
54634
54876
  }
54635
54877
  async function clone_cloneRepo(userRepo, projectName, options = {}) {
54636
54878
  const startTime = Date.now();
@@ -54740,7 +54982,7 @@ function showUpgradeHelp() {
54740
54982
  'Use npm install -g package-installer-cli@<version> to rollback'
54741
54983
  ]
54742
54984
  };
54743
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
54985
+ (0,helpFormatter.createStandardHelp)(helpConfig);
54744
54986
  }
54745
54987
  /**
54746
54988
  * Get current CLI version
@@ -56572,7 +56814,7 @@ function showUpdateHelp() {
56572
56814
  'Use --latest flag with caution as it may introduce breaking changes'
56573
56815
  ]
56574
56816
  };
56575
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
56817
+ (0,helpFormatter.createStandardHelp)(helpConfig);
56576
56818
  }
56577
56819
 
56578
56820
  // EXTERNAL MODULE: external "os"
@@ -56636,7 +56878,7 @@ function showAnalyzeHelp() {
56636
56878
  'Use --reset to start fresh analytics tracking'
56637
56879
  ]
56638
56880
  };
56639
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
56881
+ (0,helpFormatter.createStandardHelp)(helpConfig);
56640
56882
  }
56641
56883
  /**
56642
56884
  * Main analyze command function
@@ -63593,7 +63835,7 @@ function showDeployHelp() {
63593
63835
  'Environment variables can be configured per platform'
63594
63836
  ]
63595
63837
  };
63596
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
63838
+ (0,helpFormatter.createStandardHelp)(helpConfig);
63597
63839
  }
63598
63840
  /**
63599
63841
  * Main deploy command function
@@ -64336,7 +64578,7 @@ function showCleanHelp() {
64336
64578
  'Use --cache to clean package manager caches for more space'
64337
64579
  ]
64338
64580
  };
64339
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
64581
+ (0,helpFormatter.createStandardHelp)(helpConfig);
64340
64582
  }
64341
64583
  /**
64342
64584
  * Main clean command function
@@ -64705,7 +64947,7 @@ function showCacheHelp() {
64705
64947
  'Use --size to check cache disk usage before clearing'
64706
64948
  ]
64707
64949
  };
64708
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
64950
+ (0,helpFormatter.createStandardHelp)(helpConfig);
64709
64951
  }
64710
64952
  const CLI_CACHE_DIR = '.package-installer-cli';
64711
64953
  /**
@@ -65256,7 +65498,7 @@ function showEnvironmentHelp() {
65256
65498
  'Validate .env files to catch configuration issues early'
65257
65499
  ]
65258
65500
  };
65259
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
65501
+ (0,helpFormatter.createStandardHelp)(helpConfig);
65260
65502
  }
65261
65503
  /**
65262
65504
  * Main environment command function
@@ -65915,7 +66157,7 @@ function showDoctorHelp() {
65915
66157
  ]
65916
66158
  };
65917
66159
  console.clear();
65918
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
66160
+ (0,helpFormatter.createStandardHelp)(helpConfig);
65919
66161
  }
65920
66162
  /**
65921
66163
  * Main doctor command function
@@ -68308,166 +68550,16 @@ function email_getSystemInfo() {
68308
68550
  };
68309
68551
  }
68310
68552
  }
68311
- /**
68312
- * Configure Email MCP Server with user's email credentials
68313
- */
68314
- async function configureEmailMcp() {
68315
- try {
68316
- console.log((0,node_modules_boxen/* default */.A)(source/* default */.Ay.hex('#00d2d3')('🔧 Email Configuration Setup') + '\n\n' +
68317
- source/* default */.Ay.white('To send emails, we need to configure your email credentials.') + '\n' +
68318
- source/* default */.Ay.hex('#95afc0')('Your credentials will be stored securely and used only for sending feedback emails.') + '\n\n' +
68319
- source/* default */.Ay.hex('#ffa502')('Supported Email Providers:') + '\n' +
68320
- source/* default */.Ay.hex('#95afc0')('• Gmail (recommended)') + '\n' +
68321
- source/* default */.Ay.hex('#95afc0')('• Outlook/Hotmail') + '\n' +
68322
- source/* default */.Ay.hex('#95afc0')('• Yahoo') + '\n' +
68323
- source/* default */.Ay.hex('#95afc0')('• Custom SMTP servers'), {
68324
- padding: 1,
68325
- margin: 1,
68326
- borderStyle: 'round',
68327
- borderColor: 'cyan'
68328
- }));
68329
- // Collect email configuration
68330
- const emailConfig = await lib["default"].prompt([
68331
- {
68332
- type: 'list',
68333
- name: 'provider',
68334
- message: 'Select your email provider:',
68335
- choices: [
68336
- { name: '📧 Gmail', value: 'gmail' },
68337
- { name: '🔷 Outlook/Hotmail', value: 'outlook' },
68338
- { name: '🟡 Yahoo', value: 'yahoo' },
68339
- { name: '⚙️ Custom SMTP', value: 'custom' }
68340
- ]
68341
- },
68342
- {
68343
- type: 'input',
68344
- name: 'email',
68345
- message: 'Enter your email address:',
68346
- validate: (input) => {
68347
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
68348
- return emailRegex.test(input) || 'Please enter a valid email address';
68349
- }
68350
- },
68351
- {
68352
- type: 'password',
68353
- name: 'password',
68354
- message: (answers) => {
68355
- if (answers.provider === 'gmail') {
68356
- return 'Enter your Gmail App Password (not regular password):';
68357
- }
68358
- return 'Enter your email password or app password:';
68359
- },
68360
- validate: (input) => input.length > 0 || 'Password is required'
68361
- }
68362
- ]);
68363
- // Add custom SMTP settings if needed
68364
- let smtpConfig = {};
68365
- if (emailConfig.provider === 'custom') {
68366
- smtpConfig = await lib["default"].prompt([
68367
- {
68368
- type: 'input',
68369
- name: 'host',
68370
- message: 'SMTP Host (e.g., smtp.gmail.com):',
68371
- validate: (input) => input.length > 0 || 'SMTP host is required'
68372
- },
68373
- {
68374
- type: 'input',
68375
- name: 'port',
68376
- message: 'SMTP Port (e.g., 587):',
68377
- default: '587',
68378
- validate: (input) => {
68379
- const port = parseInt(input);
68380
- return (port > 0 && port <= 65535) || 'Please enter a valid port number';
68381
- }
68382
- }
68383
- ]);
68384
- }
68385
- // Set provider-specific SMTP settings
68386
- let host, port;
68387
- switch (emailConfig.provider) {
68388
- case 'gmail':
68389
- host = 'smtp.gmail.com';
68390
- port = '587';
68391
- break;
68392
- case 'outlook':
68393
- host = 'smtp.live.com';
68394
- port = '587';
68395
- break;
68396
- case 'yahoo':
68397
- host = 'smtp.mail.yahoo.com';
68398
- port = '587';
68399
- break;
68400
- case 'custom':
68401
- host = smtpConfig.host;
68402
- port = smtpConfig.port;
68403
- break;
68404
- default:
68405
- host = 'smtp.gmail.com';
68406
- port = '587';
68407
- }
68408
- // Show provider-specific setup instructions
68409
- if (emailConfig.provider === 'gmail') {
68410
- console.log((0,node_modules_boxen/* default */.A)(source/* default */.Ay.hex('#ffa502')('📧 Gmail Setup Instructions') + '\n\n' +
68411
- source/* default */.Ay.hex('#95afc0')('For Gmail, you need to use an App Password:') + '\n' +
68412
- source/* default */.Ay.hex('#95afc0')('1. Enable 2-Factor Authentication in your Google Account') + '\n' +
68413
- source/* default */.Ay.hex('#95afc0')('2. Go to Google Account Settings > Security') + '\n' +
68414
- source/* default */.Ay.hex('#95afc0')('3. Under "2-Step Verification", click "App passwords"') + '\n' +
68415
- source/* default */.Ay.hex('#95afc0')('4. Generate a new app password for "Mail"') + '\n' +
68416
- source/* default */.Ay.hex('#95afc0')('5. Use that 16-character password above') + '\n\n' +
68417
- source/* default */.Ay.hex('#00d2d3')('💡 Regular Gmail passwords will NOT work!'), {
68418
- padding: 1,
68419
- margin: 1,
68420
- borderStyle: 'round',
68421
- borderColor: 'yellow'
68422
- }));
68423
- }
68424
- // Create .env content
68425
- const envContent = `# Email MCP Server Configuration
68426
- # Generated by Package Installer CLI
68427
- EMAIL_HOST=${host}
68428
- EMAIL_PORT=${port}
68429
- EMAIL_USER=${emailConfig.email}
68430
- EMAIL_PASS=${emailConfig.password}
68431
- EMAIL_SECURE=false
68432
- EMAIL_TLS=true
68433
- `;
68434
- // Find Email MCP Server directory and create .env file
68435
- const mcpInfo = await checkEmailMcpAvailability();
68436
- let envFilePath;
68437
- if (mcpInfo.installationType === 'local' && mcpInfo.path) {
68438
- // Local installation - create .env in the project directory
68439
- const projectDir = external_path_.dirname(mcpInfo.path);
68440
- envFilePath = external_path_.join(projectDir, '.env');
68441
- }
68442
- else {
68443
- // Global or npx installation - create .env in home directory
68444
- const configDir = external_path_.join(external_os_.homedir(), '.email-mcp-server');
68445
- await fs_extra_lib.ensureDir(configDir);
68446
- envFilePath = external_path_.join(configDir, '.env');
68447
- }
68448
- // Write .env file
68449
- await fs_extra_lib.writeFile(envFilePath, envContent, 'utf8');
68450
- console.log((0,node_modules_boxen/* default */.A)(source/* default */.Ay.green('✅ Email Configuration Saved!') + '\n\n' +
68451
- source/* default */.Ay.white('Email credentials have been configured successfully.') + '\n' +
68452
- source/* default */.Ay.hex('#95afc0')(`Configuration saved to: ${source/* default */.Ay.cyan(envFilePath)}`) + '\n\n' +
68453
- source/* default */.Ay.hex('#00d2d3')('You can now send feedback emails using the CLI!') + '\n' +
68454
- source/* default */.Ay.hex('#95afc0')('Test the setup with: ') + source/* default */.Ay.cyan('pi email --test'), {
68455
- padding: 1,
68456
- margin: 1,
68457
- borderStyle: 'round',
68458
- borderColor: 'green'
68459
- }));
68460
- return true;
68461
- }
68462
- catch (error) {
68463
- console.error(source/* default */.Ay.red(`❌ Failed to configure email: ${error.message}`));
68464
- return false;
68465
- }
68466
- }
68553
+ // NOTE: interactive configuration was removed. We delegate permanent setup
68554
+ // to the Email MCP Server installer (npx @0xshariq/email-mcp-server setup or email-cli setup).
68555
+ // The CLI will instruct the user to run the external setup command which persists config.
68467
68556
  /**
68468
68557
  * Check if email is configured and prompt for setup if needed
68469
68558
  */
68470
68559
  async function ensureEmailConfigured() {
68560
+ // If Email MCP Server is available but not configured, run the external setup command
68561
+ // interactively so the user can persist configuration. This keeps setup centralized
68562
+ // in the email CLI implementation.
68471
68563
  const mcpInfo = await checkEmailMcpAvailability();
68472
68564
  if (!mcpInfo.available) {
68473
68565
  console.log(source/* default */.Ay.yellow('⚠️ Email MCP Server not installed. Please install it first:'));
@@ -68475,8 +68567,36 @@ async function ensureEmailConfigured() {
68475
68567
  return false;
68476
68568
  }
68477
68569
  if (!mcpInfo.configured) {
68478
- console.log(source/* default */.Ay.yellow('⚠️ Email not configured. Setting up email configuration...'));
68479
- return await configureEmailMcp();
68570
+ console.log(source/* default */.Ay.yellow('⚠️ Email not configured. Running email CLI setup to configure your environment...'));
68571
+ try {
68572
+ let setupCmd = '';
68573
+ const execOptions = { stdio: 'inherit', encoding: 'utf8' };
68574
+ // Prefer the globally installed email-cli setup command if available, otherwise use npx
68575
+ switch (mcpInfo.installationType) {
68576
+ case 'global':
68577
+ setupCmd = 'email-cli setup';
68578
+ break;
68579
+ case 'npx':
68580
+ // npx may prompt to install/run interactively
68581
+ setupCmd = 'npx @0xshariq/email-mcp-server setup';
68582
+ break;
68583
+ case 'local':
68584
+ setupCmd = `node "${mcpInfo.path}" setup`;
68585
+ execOptions.cwd = external_path_.dirname(mcpInfo.path);
68586
+ break;
68587
+ default:
68588
+ setupCmd = 'email-cli setup';
68589
+ }
68590
+ (0,external_child_process_.execSync)(setupCmd, execOptions);
68591
+ // Re-check availability/configuration
68592
+ const refreshed = await checkEmailMcpAvailability();
68593
+ return refreshed.available && !!refreshed.configured;
68594
+ }
68595
+ catch (err) {
68596
+ console.log(source/* default */.Ay.red('❌ Failed to run external email setup command. Please run manually:'));
68597
+ console.log(source/* default */.Ay.cyan('email-cli setup') + ' ' + source/* default */.Ay.gray('(or: npx @0xshariq/email-mcp-server setup)'));
68598
+ return false;
68599
+ }
68480
68600
  }
68481
68601
  return true;
68482
68602
  }
@@ -68599,8 +68719,15 @@ async function collectSenderEmailOption() {
68599
68719
  * Supports both plain text and HTML emails
68600
68720
  * Uses user's configured or custom email to send to khanshariq92213@gmail.com
68601
68721
  */
68602
- async function sendEmailViaMcp(subject, body, htmlBody, customCredentials) {
68722
+ async function sendEmailViaMcp(subject, body, htmlBody, customCredentials, forceHtml = false) {
68603
68723
  let tempEnvFile = '';
68724
+ let tempHtmlFile = '';
68725
+ let execOptions = {
68726
+ stdio: 'pipe',
68727
+ timeout: 45000,
68728
+ encoding: 'utf8',
68729
+ env: { ...(process.env || {}) }
68730
+ };
68604
68731
  try {
68605
68732
  const mcpInfo = await checkEmailMcpAvailability();
68606
68733
  if (!mcpInfo.available) {
@@ -68640,23 +68767,17 @@ EMAIL_SECURE=false
68640
68767
  EMAIL_TLS=true
68641
68768
  `;
68642
68769
  await fs_extra_lib.writeFile(tempEnvFile, tempEnvContent);
68643
- // Set environment variable to use the temporary config
68644
- process.env.EMAIL_CONFIG_PATH = tempEnvFile;
68770
+ // Ensure execOptions.env contains the temporary config path so child process will see it
68771
+ execOptions.env = { ...(process.env || {}), EMAIL_CONFIG_PATH: tempEnvFile };
68645
68772
  }
68646
68773
  // Create temporary files for HTML content if provided
68647
- let tempHtmlFile = '';
68648
68774
  let command = '';
68649
- let options = {
68650
- stdio: 'pipe',
68651
- timeout: 45000,
68652
- encoding: 'utf8'
68653
- };
68654
68775
  if (htmlBody) {
68655
- // Try HTML email with ehtml command (if supported) or fall back to esend
68776
+ // Try HTML email with ehtml command (if supported) or fall back to eattach/esend
68656
68777
  const tempDir = external_os_.tmpdir();
68657
68778
  tempHtmlFile = external_path_.join(tempDir, `email-${Date.now()}.html`);
68658
68779
  try {
68659
- await fs_extra_lib.writeFile(tempHtmlFile, htmlBody);
68780
+ await fs_extra_lib.writeFile(tempHtmlFile, htmlBody, 'utf8');
68660
68781
  // Try HTML command first
68661
68782
  const htmlArgs = [to, subject, tempHtmlFile];
68662
68783
  const escapedHtmlArgs = htmlArgs.map(arg => `"${arg.replace(/"/g, '\\"')}"`).join(' ');
@@ -68669,27 +68790,48 @@ EMAIL_TLS=true
68669
68790
  break;
68670
68791
  case 'local':
68671
68792
  command = `node "${mcpInfo.path}" ehtml ${escapedHtmlArgs}`;
68672
- options.cwd = external_path_.dirname(mcpInfo.path);
68793
+ execOptions.cwd = external_path_.dirname(mcpInfo.path);
68673
68794
  break;
68674
68795
  }
68675
68796
  try {
68676
- const output = (0,external_child_process_.execSync)(command, options);
68797
+ const output = (0,external_child_process_.execSync)(command, execOptions);
68677
68798
  return true;
68678
68799
  }
68679
68800
  catch (htmlError) {
68680
- // If HTML command fails, fall back to regular esend
68681
- console.log(source/* default */.Ay.yellow('ℹ️ HTML email not supported, sending as rich text...'));
68801
+ // If ehtml isn't available or fails, try sending as attachment (eattach)
68802
+ try {
68803
+ console.log(source/* default */.Ay.yellow('ℹ️ ehtml failed, attempting to send HTML as attachment (eattach)'));
68804
+ const attachArgs = [to, subject, 'Please see attached HTML message', tempHtmlFile];
68805
+ const escapedAttachArgs = attachArgs.map(arg => `"${arg.replace(/"/g, '\"')}"`).join(' ');
68806
+ switch (mcpInfo.installationType) {
68807
+ case 'npx':
68808
+ command = `npx @0xshariq/email-mcp-server eattach ${escapedAttachArgs}`;
68809
+ break;
68810
+ case 'global':
68811
+ command = `email-cli eattach ${escapedAttachArgs}`;
68812
+ break;
68813
+ case 'local':
68814
+ command = `node "${mcpInfo.path}" eattach ${escapedAttachArgs}`;
68815
+ execOptions.cwd = external_path_.dirname(mcpInfo.path);
68816
+ break;
68817
+ }
68818
+ const out = (0,external_child_process_.execSync)(command, execOptions);
68819
+ return true;
68820
+ }
68821
+ catch (attachError) {
68822
+ // If forceHtml is requested, fail immediately instead of falling back
68823
+ if (forceHtml) {
68824
+ console.log(source/* default */.Ay.red('❌ HTML delivery failed and --force-html was specified. Not falling back to plain text.'));
68825
+ return false;
68826
+ }
68827
+ console.log(source/* default */.Ay.yellow('ℹ️ eattach also failed, will fall back to plain text send with HTML stripped'));
68828
+ }
68682
68829
  }
68683
68830
  }
68684
68831
  catch (fileError) {
68685
68832
  console.log(source/* default */.Ay.yellow('ℹ️ Could not create HTML file, sending as plain text...'));
68686
68833
  }
68687
- finally {
68688
- // Clean up temp file
68689
- if (tempHtmlFile && await fs_extra_lib.pathExists(tempHtmlFile)) {
68690
- await fs_extra_lib.remove(tempHtmlFile);
68691
- }
68692
- }
68834
+ // Do not remove tempHtmlFile here yet; cleanup in finally block below
68693
68835
  }
68694
68836
  // Fall back to regular text email
68695
68837
  const args = [to, subject, body];
@@ -68704,12 +68846,12 @@ EMAIL_TLS=true
68704
68846
  break;
68705
68847
  case 'local':
68706
68848
  command = `node "${mcpInfo.path}" esend ${escapedArgs}`;
68707
- options.cwd = external_path_.dirname(mcpInfo.path);
68849
+ execOptions.cwd = external_path_.dirname(mcpInfo.path);
68708
68850
  break;
68709
68851
  default:
68710
68852
  throw new Error('Unknown installation type');
68711
68853
  }
68712
- const output = (0,external_child_process_.execSync)(command, options);
68854
+ const output = (0,external_child_process_.execSync)(command, execOptions);
68713
68855
  return true;
68714
68856
  }
68715
68857
  catch (error) {
@@ -68744,6 +68886,9 @@ EMAIL_TLS=true
68744
68886
  if (tempEnvFile && await fs_extra_lib.pathExists(tempEnvFile)) {
68745
68887
  await fs_extra_lib.remove(tempEnvFile);
68746
68888
  }
68889
+ if (tempHtmlFile && await fs_extra_lib.pathExists(tempHtmlFile)) {
68890
+ await fs_extra_lib.remove(tempHtmlFile);
68891
+ }
68747
68892
  if (process.env.EMAIL_CONFIG_PATH) {
68748
68893
  delete process.env.EMAIL_CONFIG_PATH;
68749
68894
  }
@@ -69006,6 +69151,7 @@ async function showEmailHelp() {
69006
69151
  options: [
69007
69152
  { flag: '-h, --help', description: 'Show this help message' },
69008
69153
  { flag: '-l, --list', description: 'List all available email categories' },
69154
+ { flag: '--force-html', description: 'Require HTML and fail if HTML cannot be sent (no fallback to plain text)' },
69009
69155
  { flag: '--install', description: 'Show Email MCP Server installation instructions' },
69010
69156
  { flag: '--setup', description: 'Configure your email credentials for sending feedback' },
69011
69157
  { flag: '--status', description: 'Check email system status and availability' },
@@ -69060,7 +69206,7 @@ async function showEmailHelp() {
69060
69206
  'Your contact info is optional but helpful for follow-up'
69061
69207
  ]
69062
69208
  };
69063
- (0,helpFormatter/* createStandardHelp */.ht)(helpConfig);
69209
+ (0,helpFormatter.createStandardHelp)(helpConfig);
69064
69210
  }
69065
69211
  /**
69066
69212
  * Main email command handler
@@ -69084,7 +69230,36 @@ async function emailCommand(category, options = {}) {
69084
69230
  }
69085
69231
  // Handle setup flag
69086
69232
  if (options.setup) {
69087
- await configureEmailMcp();
69233
+ // Delegate permanent setup to the Email MCP Server installer (npx/global/local)
69234
+ const mcpInfo = await checkEmailMcpAvailability();
69235
+ if (!mcpInfo.available) {
69236
+ console.log(source/* default */.Ay.yellow('⚠️ Email MCP Server not installed. Please install it first:'));
69237
+ console.log(source/* default */.Ay.cyan('npm install -g @0xshariq/email-mcp-server'));
69238
+ return;
69239
+ }
69240
+ try {
69241
+ let setupCmd = '';
69242
+ const execOptions = { stdio: 'inherit', encoding: 'utf8' };
69243
+ switch (mcpInfo.installationType) {
69244
+ case 'npx':
69245
+ setupCmd = 'npx @0xshariq/email-mcp-server setup';
69246
+ break;
69247
+ case 'global':
69248
+ setupCmd = 'email-cli setup';
69249
+ break;
69250
+ case 'local':
69251
+ setupCmd = `node "${mcpInfo.path}" setup`;
69252
+ execOptions.cwd = external_path_.dirname(mcpInfo.path);
69253
+ break;
69254
+ default:
69255
+ setupCmd = 'npx @0xshariq/email-mcp-server setup';
69256
+ }
69257
+ (0,external_child_process_.execSync)(setupCmd, execOptions);
69258
+ }
69259
+ catch (err) {
69260
+ console.log(source/* default */.Ay.red('❌ Failed to run external email setup command. Please run manually:'));
69261
+ console.log(source/* default */.Ay.cyan('npx @0xshariq/email-mcp-server setup'));
69262
+ }
69088
69263
  return;
69089
69264
  }
69090
69265
  // Handle status flag
@@ -69252,7 +69427,7 @@ async function emailCommand(category, options = {}) {
69252
69427
  provider: senderOption.customProvider || 'gmail'
69253
69428
  };
69254
69429
  }
69255
- const success = await sendEmailViaMcp(subject, plainBody, htmlBody, customCredentials);
69430
+ const success = await sendEmailViaMcp(subject, plainBody, htmlBody, customCredentials, !!options.forceHtml);
69256
69431
  if (success) {
69257
69432
  console.log((0,node_modules_boxen/* default */.A)(source/* default */.Ay.green('✅ Email sent successfully!') + '\n\n' +
69258
69433
  source/* default */.Ay.white('Thank you for your feedback!') + '\n' +
@@ -69847,7 +70022,7 @@ function showAuthHelp() {
69847
70022
  'Use "pi auth verify" to enable 2FA and unlock all features.',
69848
70023
  ],
69849
70024
  };
69850
- (0,helpFormatter/* createStandardHelp */.ht)(cfg);
70025
+ (0,helpFormatter.createStandardHelp)(cfg);
69851
70026
  }
69852
70027
 
69853
70028
  ;// ./dist/utils/timer.js
@@ -69908,6 +70083,7 @@ globalThis.path = external_path_;
69908
70083
 
69909
70084
 
69910
70085
 
70086
+
69911
70087
  // Import utilities
69912
70088
 
69913
70089
 
@@ -70068,6 +70244,28 @@ dist_program
70068
70244
  handleCommandError('check packages', error);
70069
70245
  }
70070
70246
  });
70247
+ // SIZE COMMAND - Show file/folder sizes
70248
+ dist_program
70249
+ .command('size')
70250
+ .description(source/* default */.Ay.hex('#95afc0')('📏 Show size of files or directories'))
70251
+ .argument('[paths...]', source/* default */.Ay.hex('#95afc0')('One or more paths to files or directories (defaults to cwd)'))
70252
+ .option('-a, --all', 'Show all files and folders with their sizes')
70253
+ .option('--json', 'Output machine-readable JSON')
70254
+ .option('--top <n>', 'Show top N largest files', '10')
70255
+ .option('-h, --help', 'Display help for this command')
70256
+ .on('--help', () => { showSizeHelp(); })
70257
+ .action(async (paths, options) => {
70258
+ try {
70259
+ if (options.help) {
70260
+ showSizeHelp();
70261
+ return;
70262
+ }
70263
+ await sizeCommand(paths, options);
70264
+ }
70265
+ catch (error) {
70266
+ handleCommandError('size', error);
70267
+ }
70268
+ });
70071
70269
  // CLONE COMMAND - GitHub repository cloning
70072
70270
  dist_program
70073
70271
  .command('clone')
@@ -70312,6 +70510,7 @@ dist_program
70312
70510
  .option('--setup', source/* default */.Ay.hex('#95afc0')('Show email configuration setup guide'))
70313
70511
  .option('--status', source/* default */.Ay.hex('#95afc0')('Check email system status and availability'))
70314
70512
  .option('--test', source/* default */.Ay.hex('#95afc0')('Send a test email to verify functionality'))
70513
+ .option('--force-html', source/* default */.Ay.hex('#95afc0')('Require HTML and fail if HTML cannot be sent (no fallback)'))
70315
70514
  .option('--commands', source/* default */.Ay.hex('#95afc0')('Show all available Email MCP Server commands'))
70316
70515
  .option('--dev', source/* default */.Ay.hex('#95afc0')('Show development setup information and troubleshooting'))
70317
70516
  .option('--quick', source/* default */.Ay.hex('#95afc0')('Quick feedback mode with minimal prompts'))