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.
- checksums.yaml +4 -4
- data/bundle-standalone/cli-with-packages.js +568 -369
- data/bundle-standalone/template.json +87 -14
- data/bundle-standalone/templates/c++_c/crow/template/CMakeLists.txt +18 -0
- data/bundle-standalone/templates/c++_c/crow/template/README.md +11 -0
- data/bundle-standalone/templates/c++_c/crow/template/include/routes.hpp +19 -0
- data/bundle-standalone/templates/c++_c/crow/template/main.cpp +12 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/README.md +36 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/eslint.config.mjs +16 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/middleware.ts +18 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/next.config.ts +7 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/package.json +28 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/pnpm-lock.yaml +3819 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/postcss.config.mjs +5 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/file.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/globe.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/next.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/vercel.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/public/window.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/app/favicon.ico +0 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/app/globals.css +26 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/app/layout.tsx +34 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/app/page.tsx +33 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/src/lib/auth0.ts +3 -0
- data/bundle-standalone/templates/combination-templates/nextjs-auth0-shadcn/tsconfig.json +27 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/README.md +36 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/components.json +21 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/eslint.config.mjs +16 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/middleware.ts +12 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/next.config.ts +7 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/package.json +37 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/pnpm-lock.yaml +4113 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/postcss.config.mjs +5 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/file.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/globe.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/next.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/vercel.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/public/window.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/app/favicon.ico +0 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/app/globals.css +122 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/app/layout.tsx +55 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/app/page.tsx +10 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/components/ui/button.tsx +59 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/components/ui/card.tsx +92 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/components/ui/input.tsx +21 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/components/ui/textarea.tsx +18 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/lib/utils.ts +6 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/src/middleware.ts +12 -0
- data/bundle-standalone/templates/combination-templates/nextjs-clerk-shadcn/tsconfig.json +27 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/README.md +36 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/eslint.config.mjs +16 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/middleware.ts +0 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/next.config.ts +7 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/package.json +28 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/pnpm-lock.yaml +3862 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/postcss.config.mjs +5 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/file.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/globe.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/next.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/vercel.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/public/window.svg +1 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/api/auth/[...nextauth]/route.ts +6 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/favicon.ico +0 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/globals.css +26 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/layout.tsx +39 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/app/page.tsx +10 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/lib/auth-provider.tsx +7 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/src/lib/auth.ts +126 -0
- data/bundle-standalone/templates/combination-templates/nextjs-next-auth-shadcn/tsconfig.json +27 -0
- data/bundle-standalone/templates/game/unity/template/README.md +3 -0
- data/bundle-standalone/templates/game/unity/template/Scripts/PlayerController.cs +25 -0
- data/bundle-standalone/templates/game/unreal/template/README.md +3 -0
- data/bundle-standalone/templates/game/unreal/template/Source/PlayerCharacter.cpp +33 -0
- data/bundle-standalone/templates/game/unreal/template/Source/PlayerCharacter.h +20 -0
- data/bundle-standalone/templates/javascript/preactjs/javascript/template/index.html +13 -0
- data/bundle-standalone/templates/javascript/preactjs/javascript/template/package.json +18 -0
- data/bundle-standalone/templates/javascript/preactjs/javascript/template/public/vite.svg +1 -0
- data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/app.css +25 -0
- data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/app.jsx +43 -0
- data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/assets/preact.svg +1 -0
- data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/index.css +68 -0
- data/bundle-standalone/templates/javascript/preactjs/javascript/template/src/main.jsx +5 -0
- data/bundle-standalone/templates/javascript/preactjs/javascript/template/vite.config.js +7 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/index.html +13 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/package.json +20 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/public/vite.svg +1 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/app.css +25 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/app.tsx +43 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/assets/preact.svg +1 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/index.css +68 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/src/main.tsx +5 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/tsconfig.app.json +33 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/tsconfig.json +7 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/tsconfig.node.json +26 -0
- data/bundle-standalone/templates/javascript/preactjs/typescript/template/vite.config.ts +7 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/README.md +28 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/index.html +13 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/package.json +18 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/public/vite.svg +1 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/App.css +27 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/App.jsx +35 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/assets/solid.svg +1 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/index.css +68 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/src/index.jsx +8 -0
- data/bundle-standalone/templates/javascript/solidjs/javascript/template/vite.config.js +6 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/README.md +28 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/index.html +13 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/package.json +20 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/public/vite.svg +1 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/App.css +27 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/App.tsx +35 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/assets/solid.svg +1 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/index.css +68 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/src/index.tsx +8 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/tsconfig.app.json +29 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/tsconfig.json +7 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/tsconfig.node.json +26 -0
- data/bundle-standalone/templates/javascript/solidjs/typescript/template/vite.config.ts +6 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/README.md +43 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/index.html +13 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/jsconfig.json +33 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/package.json +16 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/public/vite.svg +1 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/App.svelte +47 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/app.css +79 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/assets/svelte.svg +1 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/lib/Counter.svelte +10 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/src/main.js +9 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/svelte.config.js +8 -0
- data/bundle-standalone/templates/javascript/sveltejs/javascript/template/vite.config.js +7 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/README.md +47 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/index.html +13 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/package.json +21 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/public/vite.svg +1 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/App.svelte +47 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/app.css +79 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/assets/svelte.svg +1 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/lib/Counter.svelte +10 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/src/main.ts +9 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/svelte.config.js +8 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/tsconfig.app.json +21 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/tsconfig.json +7 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/tsconfig.node.json +26 -0
- data/bundle-standalone/templates/javascript/sveltejs/typescript/template/vite.config.ts +7 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/README.md +50 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/(tabs)/_layout.jsx +35 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/(tabs)/explore.jsx +112 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/(tabs)/index.jsx +98 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/_layout.jsx +24 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app/modal.jsx +29 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/app.json +48 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/android-icon-background.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/android-icon-foreground.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/android-icon-monochrome.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/favicon.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/icon.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/partial-react-logo.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/react-logo.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/react-logo@2x.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/react-logo@3x.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/assets/images/splash-icon.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/external-link.jsx +25 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/haptic-tab.jsx +18 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/hello-wave.jsx +19 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/parallax-scroll-view.jsx +79 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/themed-text.jsx +60 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/themed-view.jsx +14 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/ui/collapsible.jsx +45 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/ui/icon-symbol.ios.jsx +32 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/components/ui/icon-symbol.jsx +41 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/constants/theme.js +53 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/eslint.config.js +10 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/hooks/use-color-scheme.js +1 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/hooks/use-color-scheme.web.js +21 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/hooks/use-theme-color.js +21 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/jsconfig.json +17 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/package.json +47 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/pnpm-workspace.yaml +1 -0
- data/bundle-standalone/templates/mobile/react-native/javascript/expo-cli-template/scripts/reset-project.js +112 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/README.md +50 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/(tabs)/_layout.tsx +35 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/(tabs)/explore.tsx +112 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/(tabs)/index.tsx +98 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/_layout.tsx +24 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app/modal.tsx +29 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/app.json +48 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/android-icon-background.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/android-icon-foreground.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/android-icon-monochrome.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/favicon.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/icon.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/partial-react-logo.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/react-logo.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/react-logo@2x.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/react-logo@3x.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/assets/images/splash-icon.png +0 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/external-link.tsx +25 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/haptic-tab.tsx +18 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/hello-wave.tsx +19 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/parallax-scroll-view.tsx +79 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/themed-text.tsx +60 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/themed-view.tsx +14 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/ui/collapsible.tsx +45 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/ui/icon-symbol.ios.tsx +32 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/components/ui/icon-symbol.tsx +41 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/constants/theme.ts +53 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/eslint.config.js +10 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/hooks/use-color-scheme.ts +1 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/hooks/use-color-scheme.web.ts +21 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/hooks/use-theme-color.ts +21 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/package.json +47 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/pnpm-workspace.yaml +1 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/scripts/reset-project.js +112 -0
- data/bundle-standalone/templates/mobile/react-native/typescript/expo-cli-template/tsconfig.json +17 -0
- data/bundle-standalone/templates/python/bottle/template/README.md +0 -0
- data/bundle-standalone/templates/python/bottle/template/main.py +6 -0
- data/bundle-standalone/templates/python/bottle/template/pyproject.toml +7 -0
- data/bundle-standalone/templates/python/dash/template/README.md +0 -0
- data/bundle-standalone/templates/python/dash/template/main.py +6 -0
- data/bundle-standalone/templates/python/dash/template/pyproject.toml +7 -0
- data/bundle-standalone/templates/python/falcon/template/README.md +0 -0
- data/bundle-standalone/templates/python/falcon/template/main.py +6 -0
- data/bundle-standalone/templates/python/falcon/template/pyproject.toml +7 -0
- data/bundle-standalone/templates/python/fastapi/template/README.md +0 -0
- data/bundle-standalone/templates/python/fastapi/template/main.py +27 -0
- data/bundle-standalone/templates/python/fastapi/template/pyproject.toml +7 -0
- data/bundle-standalone/templates/python/pyramid/template/README.md +0 -0
- data/bundle-standalone/templates/python/pyramid/template/main.py +6 -0
- data/bundle-standalone/templates/python/pyramid/template/pyproject.toml +7 -0
- data/bundle-standalone/templates/python/quart/template/README.md +0 -0
- data/bundle-standalone/templates/python/quart/template/main.py +6 -0
- data/bundle-standalone/templates/python/quart/template/pyproject.toml +7 -0
- data/bundle-standalone/templates/python/streamlit/template/README.md +0 -0
- data/bundle-standalone/templates/python/streamlit/template/main.py +6 -0
- data/bundle-standalone/templates/python/streamlit/template/pyproject.toml +7 -0
- data/bundle-standalone/templates/python/tornado/template/README.md +0 -0
- data/bundle-standalone/templates/python/tornado/template/main.py +6 -0
- data/bundle-standalone/templates/python/tornado/template/pyproject.toml +7 -0
- data/bundle-standalone/templates/template.json +87 -14
- data/bundle-standalone/templates/web3/anchor/template/Anchor.toml +6 -0
- data/bundle-standalone/templates/web3/anchor/template/Cargo.toml +23 -0
- data/bundle-standalone/templates/web3/anchor/template/README.md +10 -0
- data/bundle-standalone/templates/web3/anchor/template/migrations/deploy.ts +27 -0
- data/bundle-standalone/templates/web3/anchor/template/programs/mysolanaapp/src/lib.rs +40 -0
- data/bundle-standalone/templates/web3/anchor/template/tests/mysolanaapp.ts +26 -0
- data/bundle-standalone/templates/web3/ethersjs/template/README.md +12 -0
- data/bundle-standalone/templates/web3/ethersjs/template/contracts/SimpleStorage.sol +17 -0
- data/bundle-standalone/templates/web3/ethersjs/template/hardhat.config.js +8 -0
- data/bundle-standalone/templates/web3/ethersjs/template/package.json +29 -0
- data/bundle-standalone/templates/web3/ethersjs/template/scripts/deploy.ts +18 -0
- data/bundle-standalone/templates/web3/ethersjs/template/scripts/interact.ts +17 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/01_data-types/DataTypes.sol +37 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/01_data-types/SolidityOperations.sol +48 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/02_contructors/Constructor.sol +16 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/03_variables/Variables.sol +31 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/04_functions/Functions.sol +19 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/05_visibility/FunctionVisibility.sol +39 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/06_pure_and_view_functions/PureAndViewFunction.sol +19 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/07_function_modifiers/Modifiers.sol +27 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/09_events/Events.sol +19 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/10_error_handling/ErrorHandling.sol +25 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/11_fallback_function/Fallback.sol +7 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/12_for_loop/ForLoop.sol +15 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/13_array/Array.sol +40 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/14_mapping/Mapping.sol +21 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/14_mapping/NestedMapping.sol +25 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/15_enum/Enum.sol +22 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/16_struct/Struct.sol +23 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/17_payable_modifier/Payable.sol +26 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/18_imports/Contract1.sol +15 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/18_imports/Contract2.sol +11 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/19_contract_cleanup/Cleanup.sol +18 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/20_memory_and_storage/MemoryAndStorage.sol +20 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/21_inheritance/Inheritance.sol +67 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/22_if_statement/if-statement.sol +22 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/23_libraries/libraries.sol +31 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/23_libraries/safemath.sol +116 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/24_interface/interface.sol +88 -0
- data/bundle-standalone/templates/web3/solidity/solidity-learning/README.md +423 -0
- data/bundle-standalone/templates/web3/solidity/uniswap-simple-swap/SimpleSwap.sol +46 -0
- metadata +369 -93
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/App.jsx +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/Gemfile +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/README.md +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/__tests__/App.test.tsx +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/build.gradle +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/debug.keystore +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/proguard-rules.pro +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/AndroidManifest.xml +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/java/com/template/MainActivity.kt +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/java/com/template/MainApplication.kt +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/values/strings.xml +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/app/src/main/res/values/styles.xml +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/build.gradle +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradle/wrapper/gradle-wrapper.properties +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradle.properties +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradlew +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/gradlew.bat +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/android/settings.gradle +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/app.json +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/babel.config.js +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/index.js +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/Podfile +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/AppDelegate.swift +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/Images.xcassets/AppIcon.appiconset/Contents.json +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/Images.xcassets/Contents.json +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/Info.plist +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/LaunchScreen.storyboard +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template/PrivacyInfo.xcprivacy +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template.xcodeproj/project.pbxproj +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/ios/template.xcodeproj/xcshareddata/xcschemes/template.xcscheme +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/jest.config.js +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/metro.config.js +0 -0
- /data/bundle-standalone/templates/mobile/react-native/javascript/{template → react-native-cli-template}/package.json +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/App.tsx +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/Gemfile +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/README.md +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/__tests__/App.test.tsx +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/build.gradle +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/debug.keystore +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/proguard-rules.pro +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/AndroidManifest.xml +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/java/com/template/MainActivity.kt +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/java/com/template/MainApplication.kt +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/values/strings.xml +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/app/src/main/res/values/styles.xml +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/build.gradle +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradle/wrapper/gradle-wrapper.properties +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradle.properties +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradlew +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/gradlew.bat +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/android/settings.gradle +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/app.json +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/babel.config.js +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/index.js +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/Podfile +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/AppDelegate.swift +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/Images.xcassets/AppIcon.appiconset/Contents.json +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/Images.xcassets/Contents.json +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/Info.plist +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/LaunchScreen.storyboard +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template/PrivacyInfo.xcprivacy +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template.xcodeproj/project.pbxproj +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/ios/template.xcodeproj/xcshareddata/xcschemes/template.xcscheme +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/jest.config.js +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/metro.config.js +0 -0
- /data/bundle-standalone/templates/mobile/react-native/typescript/{template → react-native-cli-template}/package.json +0 -0
- /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
|
|
13744
|
+
const { feature } = await inquirer.prompt([
|
|
13744
13745
|
{
|
|
13745
13746
|
type: 'list',
|
|
13746
13747
|
name: 'feature',
|
|
13747
|
-
message: `${
|
|
13748
|
+
message: `${chalk.blue('❯')} Choose a feature category to add:`,
|
|
13748
13749
|
choices: availableFeatures.map(feature => ({
|
|
13749
|
-
name: `${
|
|
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
|
|
13763
|
+
const { provider } = await inquirer.prompt([
|
|
13763
13764
|
{
|
|
13764
13765
|
type: 'list',
|
|
13765
13766
|
name: 'provider',
|
|
13766
|
-
message: `${
|
|
13767
|
+
message: `${chalk.blue('❯')} Choose a ${category} provider:`,
|
|
13767
13768
|
choices: providers.map(provider => ({
|
|
13768
|
-
name: `${
|
|
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(
|
|
13798
|
+
console.log(chalk.green(`\n🔧 Setup Instructions for ${chalk.bold(provider)} (${feature}):`));
|
|
13798
13799
|
switch (feature) {
|
|
13799
13800
|
case 'auth':
|
|
13800
|
-
console.log(
|
|
13801
|
-
console.log(
|
|
13802
|
-
console.log(
|
|
13803
|
-
console.log(
|
|
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(
|
|
13807
|
-
console.log(
|
|
13808
|
-
console.log(
|
|
13809
|
-
console.log(
|
|
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(
|
|
13813
|
-
console.log(
|
|
13814
|
-
console.log(
|
|
13815
|
-
console.log(
|
|
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(
|
|
13819
|
-
console.log(
|
|
13820
|
-
console.log(
|
|
13821
|
-
console.log(
|
|
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(
|
|
13825
|
-
console.log(
|
|
13826
|
-
console.log(
|
|
13827
|
-
console.log(
|
|
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(
|
|
13831
|
-
console.log(
|
|
13832
|
-
console.log(
|
|
13833
|
-
console.log(
|
|
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(
|
|
13837
|
-
console.log(
|
|
13838
|
-
console.log(
|
|
13839
|
-
console.log(
|
|
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(
|
|
13843
|
-
console.log(
|
|
13844
|
-
console.log(
|
|
13845
|
-
console.log(
|
|
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(
|
|
13849
|
-
console.log(
|
|
13850
|
-
console.log(
|
|
13851
|
-
console.log(
|
|
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(
|
|
13855
|
-
console.log(
|
|
13856
|
-
console.log(
|
|
13857
|
-
console.log(
|
|
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(
|
|
13861
|
-
console.log(
|
|
13862
|
-
console.log(
|
|
13863
|
-
console.log(
|
|
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(
|
|
13866
|
-
console.log(
|
|
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__
|
|
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 */
|
|
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
|
-
|
|
51442
|
-
|
|
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
|
-
|
|
51452
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
//
|
|
53365
|
-
const isVerbose =
|
|
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
|
|
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
|
-
//
|
|
53789
|
-
const packagesToShow =
|
|
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
|
|
53793
|
-
...outdatedPackages
|
|
53794
|
-
...upToDatePackages
|
|
53795
|
-
]
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
68479
|
-
|
|
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
|
-
//
|
|
68644
|
-
process.env
|
|
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
|
-
|
|
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,
|
|
68797
|
+
const output = (0,external_child_process_.execSync)(command, execOptions);
|
|
68677
68798
|
return true;
|
|
68678
68799
|
}
|
|
68679
68800
|
catch (htmlError) {
|
|
68680
|
-
// If
|
|
68681
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
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'))
|