vibefast-cli 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -95
- package/dist/__tests__/recipes.test.js +8 -9
- package/dist/__tests__/recipes.test.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +271 -125
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/checklist.d.ts.map +1 -1
- package/dist/commands/checklist.js +85 -44
- package/dist/commands/checklist.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +13 -4
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +118 -26
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +202 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +61 -3
- package/dist/commands/remove.js.map +1 -1
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +20 -18
- package/dist/core/auth.js.map +1 -1
- package/dist/core/codemod.d.ts +33 -0
- package/dist/core/codemod.d.ts.map +1 -1
- package/dist/core/codemod.js +116 -0
- package/dist/core/codemod.js.map +1 -1
- package/dist/core/detect.d.ts.map +1 -1
- package/dist/core/detect.js +24 -7
- package/dist/core/detect.js.map +1 -1
- package/dist/core/journal.d.ts +1 -0
- package/dist/core/journal.d.ts.map +1 -1
- package/dist/core/journal.js.map +1 -1
- package/dist/core/recipes.d.ts.map +1 -1
- package/dist/core/recipes.js +25 -7
- package/dist/core/recipes.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/docs/architecture.md +50 -0
- package/docs/commands.md +78 -0
- package/docs/contributing.md +27 -0
- package/docs/quickstart.md +50 -0
- package/docs/recipes.md +57 -0
- package/docs/troubleshooting.md +31 -0
- package/package.json +2 -2
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/demo.tsx +445 -0
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +355 -0
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/types.ts +31 -0
- package/recipes/0/recipe.json +18 -0
- package/recipes/animated-chip/apps/native/src/components/advanced-ui/chip/demo.tsx +2 -1
- package/recipes/animated-chip/recipe.json +5 -2
- package/recipes/animated-chip-native@latest.zip +0 -0
- package/recipes/animated-chip@latest.zip +0 -0
- package/recipes/animated-switch/apps/native/src/components/advanced-ui/switch/demo.tsx +1 -1
- package/recipes/animated-switch/recipe.json +5 -2
- package/recipes/animated-switch-native@latest.zip +0 -0
- package/recipes/animated-switch@latest.zip +0 -0
- package/recipes/audio-recorder/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +2 -1
- package/recipes/audio-recorder/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +2 -2
- package/recipes/audio-recorder/recipe.json +7 -2
- package/recipes/audio-recorder-native@latest.zip +0 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +2 -1
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +2 -1
- package/recipes/audio-recorder-supabase/recipe.json +12 -33
- package/recipes/audio-recorder-supabase-native@latest.zip +0 -0
- package/recipes/audio-recorder-supabase@latest.zip +0 -0
- package/recipes/audio-recorder@latest.zip +0 -0
- package/recipes/charts/apps/native/src/app/charts/index.tsx +3 -0
- package/recipes/charts/apps/native/src/features/charts/components/bar-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/candlestick-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/column-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/doughnut-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/line-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/radar-chart.tsx +3 -1
- package/recipes/charts/apps/native/src/features/charts/components/stacked-bar-chart.tsx +3 -1
- package/recipes/charts/recipe.json +13 -4
- package/recipes/charts-native@latest.zip +0 -0
- package/recipes/charts@latest.zip +0 -0
- package/recipes/chatbot/apps/native/src/features/chatbot/components/chat-markdown.tsx +86 -86
- package/recipes/chatbot/apps/native/src/features/chatbot/components/markdown/code-block.tsx +4 -4
- package/recipes/chatbot/recipe.json +3 -40
- package/recipes/chatbot-native@latest.zip +0 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-markdown.tsx +4 -1
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/code-block.tsx +86 -53
- package/recipes/chatbot-supabase/recipe.json +3 -69
- package/recipes/chatbot-supabase-native@latest.zip +0 -0
- package/recipes/chatbot-supabase@latest.zip +0 -0
- package/recipes/chatbot@latest.zip +0 -0
- package/recipes/glowing-button/recipe.json +6 -2
- package/recipes/glowing-button-native@latest.zip +0 -0
- package/recipes/glowing-button@latest.zip +0 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/_layout.tsx +5 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/analysis-options.tsx +50 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/camera.tsx +2 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/index.tsx +50 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/loading.tsx +50 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/results.tsx +2 -0
- package/recipes/image-analysis/apps/native/src/app/analysis/[type]/trait-details.tsx +3 -0
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/analysis-options-screen.tsx +2 -2
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/camera.tsx +72 -65
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/image-capture-screen.tsx +65 -47
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/loading-screen.tsx +43 -2
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/loading.tsx +34 -1
- package/recipes/image-analysis/apps/native/src/features/image-analyzer/hooks/use-image-analysis.ts +83 -2
- package/recipes/image-analysis/recipe.json +11 -19
- package/recipes/image-analysis-native@latest.zip +0 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/_layout.tsx +5 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/analysis-options.tsx +50 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/camera.tsx +2 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/index.tsx +50 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/loading.tsx +50 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/results.tsx +2 -0
- package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/trait-details.tsx +3 -0
- package/recipes/image-analysis-supabase/recipe.json +10 -70
- package/recipes/image-analysis-supabase-native@latest.zip +0 -0
- package/recipes/image-analysis-supabase@latest.zip +0 -0
- package/recipes/image-analysis@latest.zip +0 -0
- package/recipes/image-analyzer/apps/native/src/app/(root)/(protected)/image-analyzer/index.tsx +2 -0
- package/recipes/image-generator/apps/native/src/app/image-generator/gallery.tsx +3 -0
- package/recipes/image-generator/apps/native/src/app/image-generator/index.tsx +3 -0
- package/recipes/image-generator/recipe.json +8 -18
- package/recipes/image-generator-native@latest.zip +0 -0
- package/recipes/image-generator-supabase/recipe.json +6 -62
- package/recipes/image-generator-supabase-native@latest.zip +0 -0
- package/recipes/image-generator-supabase@latest.zip +0 -0
- package/recipes/image-generator@latest.zip +0 -0
- package/recipes/ios-widget/recipe.json +18 -119
- package/recipes/ios-widget-native@latest.zip +0 -0
- package/recipes/ios-widget@latest.zip +0 -0
- package/recipes/number-stepper/apps/native/src/components/advanced-ui/stepper/demo.tsx +1 -1
- package/recipes/number-stepper/recipe.json +5 -2
- package/recipes/number-stepper-native@latest.zip +0 -0
- package/recipes/number-stepper@latest.zip +0 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/interactive-onboarding.tsx +11 -18
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/ai-tone-step.tsx +5 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/currency-step.tsx +9 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-ai-step.tsx +8 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-chatbot-step.tsx +6 -5
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-manual-step.tsx +4 -3
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-scan-step.tsx +6 -5
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/main-reason-step.tsx +5 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/notification-step.tsx +7 -6
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/overspend-step.tsx +5 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/personalizing-step.tsx +8 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/rating-step.tsx +6 -5
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/reminder-step.tsx +5 -6
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/safety-step.tsx +5 -4
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/struggle-step.tsx +5 -7
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/welcome-step.tsx +7 -6
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/ui/onboarding-header.tsx +4 -3
- package/recipes/onboarding/recipe.json +9 -6
- package/recipes/onboarding-native@latest.zip +0 -0
- package/recipes/onboarding@latest.zip +0 -0
- package/recipes/payments/apps/native/src/app/paywall/index.tsx +74 -0
- package/recipes/payments/apps/native/src/app/paywall/local.tsx +25 -0
- package/recipes/payments/apps/native/src/app/paywall/remote.tsx +23 -0
- package/recipes/payments/packages/backend/convex/payments.ts +21 -3
- package/recipes/payments/recipe.json +14 -34
- package/recipes/payments-native@latest.zip +0 -0
- package/recipes/payments-supabase/apps/native/src/app/paywall/index.tsx +74 -0
- package/recipes/payments-supabase/apps/native/src/app/paywall/local.tsx +25 -0
- package/recipes/payments-supabase/apps/native/src/app/paywall/remote.tsx +23 -0
- package/recipes/payments-supabase/recipe.json +16 -44
- package/recipes/payments-supabase-native@latest.zip +0 -0
- package/recipes/payments-supabase@latest.zip +0 -0
- package/recipes/payments@latest.zip +0 -0
- package/recipes/posthog/apps/native/src/components/analytics/navigation-tracker.tsx +14 -0
- package/recipes/posthog/apps/native/src/lib/hooks/use-navigation-analytics.ts +44 -0
- package/recipes/posthog/apps/native/src/providers/posthog-provider.tsx +51 -0
- package/recipes/posthog/recipe.json +60 -0
- package/recipes/posthog-native@latest.zip +0 -0
- package/recipes/progress-circle/apps/native/src/components/advanced-ui/progress-bars/progress-circle-page.tsx +1 -1
- package/recipes/progress-circle/recipe.json +5 -2
- package/recipes/progress-circle-native@latest.zip +0 -0
- package/recipes/progress-circle@latest.zip +0 -0
- package/recipes/quiz/apps/native/src/app/quiz/index.tsx +47 -0
- package/recipes/quiz/recipe.json +9 -6
- package/recipes/quiz-native@latest.zip +0 -0
- package/recipes/quiz@latest.zip +0 -0
- package/recipes/screen-kits/apps/native/src/app/screen-kits/_layout.tsx +12 -0
- package/recipes/screen-kits/apps/native/src/app/screen-kits/index.tsx +114 -0
- package/recipes/screen-kits/apps/native/src/features/screen-kits/index.ts +1 -0
- package/recipes/screen-kits/apps/native/src/features/screen-kits/types.ts +28 -0
- package/recipes/screen-kits/recipe.json +26 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/_layout.tsx +12 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/home.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/index.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson-complete.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson-fail.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/skill-tree.tsx +5 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/duo-button.tsx +174 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/skill-button.tsx +186 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/xp-header.tsx +115 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/constants.ts +89 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/index.ts +3 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/home-screen.tsx +225 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-complete-screen.tsx +485 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-fail-screen.tsx +105 -0
- package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-screen.tsx +384 -0
- package/recipes/screen-kits-duolingo/recipe.json +58 -0
- package/recipes/screen-kits-duolingo-native@latest.zip +0 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/_layout.tsx +45 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/asset-detail.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/notifications.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/receive.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/send.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/swap.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/wallet.tsx +3 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/ActionButtons.tsx +78 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/AssetRow.tsx +94 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/BalanceCard.tsx +118 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/constants.ts +85 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/asset-detail.tsx +378 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/notifications.tsx +210 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/receive-modal.tsx +317 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/send-modal.tsx +420 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/swap-modal.tsx +363 -0
- package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/wallet-dashboard.tsx +281 -0
- package/recipes/screen-kits-finance/recipe.json +46 -0
- package/recipes/screen-kits-finance-native@latest.zip +0 -0
- package/recipes/screen-kits-fitness/apps/native/assets/sounds/timer-beep.wav +0 -0
- package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/_layout.tsx +10 -0
- package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/index.tsx +6 -0
- package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/timer.tsx +3 -0
- package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/workout.tsx +3 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/timer-components.tsx +500 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/timer-settings-modal.tsx +352 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/workout-card.tsx +105 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/constants.ts +189 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/hooks/use-timer.ts +307 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/index.ts +1 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/screens/timer-screen.tsx +278 -0
- package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/screens/workout-dashboard.tsx +350 -0
- package/recipes/screen-kits-fitness/recipe.json +63 -0
- package/recipes/screen-kits-fitness-native@latest.zip +0 -0
- package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/habits.tsx +1 -0
- package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/kanban.tsx +1 -0
- package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/routes.ts +4 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/AddTaskModal.tsx +246 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/DraggableTaskCard.tsx +92 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/KanbanColumn.tsx +238 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/TaskCard.tsx +144 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/add-habit-modal.tsx +271 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/constants.ts +295 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/kanban-utils.ts +62 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/screens/habit-tracker.tsx +1160 -0
- package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/screens/kanban-board.tsx +432 -0
- package/recipes/screen-kits-habits/recipe.json +52 -0
- package/recipes/screen-kits-habits-native@latest.zip +0 -0
- package/recipes/screen-kits-native@latest.zip +0 -0
- package/recipes/sentry/apps/native/src/providers/sentry-provider.tsx +64 -0
- package/recipes/sentry/recipe.json +39 -0
- package/recipes/sentry-native@latest.zip +0 -0
- package/recipes/swipe-slider/apps/native/src/components/advanced-ui/sliders/swipe-slider-page.tsx +1 -1
- package/recipes/swipe-slider/recipe.json +5 -2
- package/recipes/swipe-slider-native@latest.zip +0 -0
- package/recipes/swipe-slider@latest.zip +0 -0
- package/recipes/timeline/apps/native/src/components/advanced-ui/timeline/demo.tsx +2 -1
- package/recipes/timeline/recipe.json +5 -2
- package/recipes/timeline-native@latest.zip +0 -0
- package/recipes/timeline@latest.zip +0 -0
- package/recipes/tracker-app/apps/native/src/app/tracker-app/index.tsx +1 -0
- package/recipes/tracker-app/recipe.json +10 -7
- package/recipes/tracker-app-native@latest.zip +0 -0
- package/recipes/tracker-app@latest.zip +0 -0
- package/recipes/upload-all.sh +8 -31
- package/recipes/voice-bot/apps/native/src/app/voice-bot/index.tsx +56 -0
- package/recipes/voice-bot/recipe.json +31 -7
- package/recipes/voice-bot-native@latest.zip +0 -0
- package/recipes/voice-bot@latest.zip +0 -0
- package/recipes/wake-word/apps/native/src/app/{(root)/(protected)/test-wake-word.tsx → test-wake-word.tsx} +43 -4
- package/recipes/wake-word/recipe.json +16 -26
- package/recipes/wake-word-native@latest.zip +0 -0
- package/recipes/wake-word@latest.zip +0 -0
- package/scripts/create-advanced-ui-recipes.sh +46 -19
- package/scripts/create-recipes.mjs +471 -117
- package/scripts/package-recipes.mjs +76 -0
- package/scripts/publish-all.sh +6 -2
- package/CHANGELOG.md +0 -198
- package/docs/archive/AUTO-DETECT-DEPS.md +0 -607
- package/docs/archive/FINAL-PACKAGE-STRATEGY.md +0 -583
- package/docs/archive/FINAL-SIMPLE-PLAN.md +0 -487
- package/docs/archive/FINAL-STATUS.md +0 -144
- package/docs/archive/FLOW-DIAGRAM.md +0 -1629
- package/docs/archive/GOTCHAS-AND-RISKS.md +0 -801
- package/docs/archive/IMPLEMENTATION-PLAN.md +0 -1360
- package/docs/archive/PLAN.md +0 -453
- package/docs/archive/PRODUCTION-READINESS.md +0 -684
- package/docs/archive/PRODUCTION-TEST-RESULTS.md +0 -465
- package/docs/archive/SIMPLIFIED-PLAN.md +0 -578
- package/docs/archive/STATUS.md +0 -199
- package/docs/archive/SUCCESS.md +0 -259
- package/docs/archive/TEST-SUMMARY.md +0 -261
- package/docs/archive/TESTING-CHECKLIST.md +0 -450
- package/docs/archive/USER-MODIFICATIONS.md +0 -448
- package/docs/decisions.md +0 -55
- package/docs/manual-testing.md +0 -91
- package/docs/next-steps.md +0 -12
- package/recipes/README.md +0 -156
- package/recipes/audio-recorder-supabase/packages/backend/src/services/recordings.ts +0 -369
- package/recipes/chatbot/apps/native/src/api-client/chatbot.ts +0 -83
- package/recipes/chatbot/packages/backend/convex/agents.ts +0 -115
- package/recipes/chatbot/packages/backend/convex/tools/index.ts +0 -18
- package/recipes/chatbot/packages/backend/convex/tools/knowledgeRetrieval.ts +0 -97
- package/recipes/chatbot/packages/backend/convex/tools/tavilySearch.ts +0 -83
- package/recipes/chatbot/packages/backend/convex/tools/userProfile.ts +0 -72
- package/recipes/chatbot-supabase/apps/native/src/api-client/supabase/chatbot.ts +0 -515
- package/recipes/chatbot-supabase/packages/backend/src/services/conversations.ts +0 -243
- package/recipes/chatbot-supabase/packages/backend/src/services/messages.ts +0 -327
- package/recipes/image-analysis/apps/native/src/api-client/image-analyzer.ts +0 -62
- package/recipes/image-analysis-supabase/packages/backend/src/services/image-analyses.ts +0 -132
- package/recipes/image-generator/apps/native/src/api-client/image-generator.ts +0 -34
- package/recipes/payments/apps/native/src/api-client/payments.ts +0 -44
- package/recipes/payments-supabase/packages/backend/src/services/payments.ts +0 -201
- package/recipes/posthog.json +0 -47
- package/recipes/revenuecat.json +0 -43
- package/recipes/sentry.json +0 -47
- package/recipes/wake-word/apps/native/assets/vosk-model/README.md +0 -103
- package/recipes/wake-word/apps/native/scripts/download-vosk-model.mjs +0 -127
- /package/recipes/{audio-recorder/apps/native/src/app/(root)/(protected) → audio-recorder-supabase/apps/native/src/app}/audio-recorder/index.tsx +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/AppIntent.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/CalorieTrackerWidget.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/HabitTrackerWidget.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Info.plist +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/WidgetLiveActivity.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/expo-target.config.js +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/generated.entitlements +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/index.swift +0 -0
- /package/recipes/ios-widget/{targets → apps/native/targets}/widget/widgets.swift +0 -0
|
@@ -1,583 +0,0 @@
|
|
|
1
|
-
# 📦 Final Package Management Strategy
|
|
2
|
-
|
|
3
|
-
## The Brilliant Solution: Let Expo Handle Versions!
|
|
4
|
-
|
|
5
|
-
### The Problem We Were Overcomplicating
|
|
6
|
-
|
|
7
|
-
**What we were thinking:**
|
|
8
|
-
```bash
|
|
9
|
-
# Manually specify versions in recipe.json
|
|
10
|
-
"dependencies": {
|
|
11
|
-
"react-native-chart-kit": "^6.12.0", // ← We manage versions
|
|
12
|
-
"react-native-svg": "^13.9.0" // ← Version conflicts!
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
# Then worry about:
|
|
16
|
-
# - Version conflicts
|
|
17
|
-
# - Peer dependencies
|
|
18
|
-
# - React Native compatibility
|
|
19
|
-
# - Expo SDK compatibility
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### The Simple Solution: Use Expo Install
|
|
23
|
-
|
|
24
|
-
**What we should do:**
|
|
25
|
-
```bash
|
|
26
|
-
# Just list package NAMES (no versions!)
|
|
27
|
-
"dependencies": {
|
|
28
|
-
"npm": [
|
|
29
|
-
"react-native-chart-kit",
|
|
30
|
-
"react-native-svg"
|
|
31
|
-
]
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
# Then run:
|
|
35
|
-
npx expo install react-native-chart-kit react-native-svg
|
|
36
|
-
|
|
37
|
-
# Expo automatically:
|
|
38
|
-
# ✅ Picks compatible versions
|
|
39
|
-
# ✅ Handles peer dependencies
|
|
40
|
-
# ✅ Resolves conflicts
|
|
41
|
-
# ✅ Works with current Expo SDK
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## Updated Recipe Format
|
|
47
|
-
|
|
48
|
-
### For Native Apps (Expo)
|
|
49
|
-
|
|
50
|
-
```json
|
|
51
|
-
{
|
|
52
|
-
"name": "charts",
|
|
53
|
-
"version": "1.0.0",
|
|
54
|
-
"description": "Beautiful data visualization",
|
|
55
|
-
"target": "native",
|
|
56
|
-
|
|
57
|
-
"copy": [...],
|
|
58
|
-
"nav": {...},
|
|
59
|
-
|
|
60
|
-
"dependencies": {
|
|
61
|
-
"expo": [
|
|
62
|
-
"react-native-chart-kit",
|
|
63
|
-
"react-native-svg",
|
|
64
|
-
"react-native-gesture-handler"
|
|
65
|
-
]
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
"postInstall": {
|
|
69
|
-
"message": "Charts installed! Run your dev server to see it."
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### For Web Apps (Next.js)
|
|
75
|
-
|
|
76
|
-
```json
|
|
77
|
-
{
|
|
78
|
-
"name": "charts-web",
|
|
79
|
-
"version": "1.0.0",
|
|
80
|
-
"description": "Charts for web",
|
|
81
|
-
"target": "web",
|
|
82
|
-
|
|
83
|
-
"copy": [...],
|
|
84
|
-
|
|
85
|
-
"dependencies": {
|
|
86
|
-
"npm": [
|
|
87
|
-
"recharts",
|
|
88
|
-
"d3"
|
|
89
|
-
]
|
|
90
|
-
},
|
|
91
|
-
|
|
92
|
-
"postInstall": {
|
|
93
|
-
"message": "Charts installed!"
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## Implementation
|
|
101
|
-
|
|
102
|
-
### Step 1: Update Recipe Schema
|
|
103
|
-
|
|
104
|
-
**File:** `src/commands/add.ts`
|
|
105
|
-
|
|
106
|
-
```typescript
|
|
107
|
-
interface RecipeManifest {
|
|
108
|
-
name: string;
|
|
109
|
-
version: string;
|
|
110
|
-
description: string;
|
|
111
|
-
copy: Array<{ from: string; to: string }>;
|
|
112
|
-
nav: { href: string; label: string };
|
|
113
|
-
target: 'native' | 'web';
|
|
114
|
-
|
|
115
|
-
// SIMPLIFIED: Just array of package names
|
|
116
|
-
dependencies?: {
|
|
117
|
-
expo?: string[]; // For native (use expo install)
|
|
118
|
-
npm?: string[]; // For web (use npm/pnpm/yarn)
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
postInstall?: {
|
|
122
|
-
message?: string;
|
|
123
|
-
commands?: string[];
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Step 2: Show Install Command
|
|
129
|
-
|
|
130
|
-
**File:** `src/commands/add.ts`
|
|
131
|
-
|
|
132
|
-
```typescript
|
|
133
|
-
// After copying files
|
|
134
|
-
|
|
135
|
-
if (manifest.dependencies) {
|
|
136
|
-
log.plain('');
|
|
137
|
-
log.warn('⚠ This feature requires additional packages');
|
|
138
|
-
log.plain('');
|
|
139
|
-
|
|
140
|
-
if (manifest.target === 'native' && manifest.dependencies.expo) {
|
|
141
|
-
// Native app - use expo install
|
|
142
|
-
const packages = manifest.dependencies.expo;
|
|
143
|
-
|
|
144
|
-
log.info('📦 Required packages:');
|
|
145
|
-
packages.forEach(pkg => {
|
|
146
|
-
log.plain(` • ${pkg}`);
|
|
147
|
-
});
|
|
148
|
-
log.plain('');
|
|
149
|
-
|
|
150
|
-
log.info('Install with:');
|
|
151
|
-
log.plain(` npx expo install ${packages.join(' ')}`);
|
|
152
|
-
log.plain('');
|
|
153
|
-
|
|
154
|
-
log.info('💡 Expo will automatically pick compatible versions');
|
|
155
|
-
|
|
156
|
-
} else if (manifest.target === 'web' && manifest.dependencies.npm) {
|
|
157
|
-
// Web app - use package manager
|
|
158
|
-
const packages = manifest.dependencies.npm;
|
|
159
|
-
const pm = await detectPackageManager(paths.cwd);
|
|
160
|
-
|
|
161
|
-
log.info('📦 Required packages:');
|
|
162
|
-
packages.forEach(pkg => {
|
|
163
|
-
log.plain(` • ${pkg}`);
|
|
164
|
-
});
|
|
165
|
-
log.plain('');
|
|
166
|
-
|
|
167
|
-
log.info('Install with:');
|
|
168
|
-
if (pm === 'pnpm') {
|
|
169
|
-
log.plain(` pnpm add ${packages.join(' ')}`);
|
|
170
|
-
} else if (pm === 'yarn') {
|
|
171
|
-
log.plain(` yarn add ${packages.join(' ')}`);
|
|
172
|
-
} else {
|
|
173
|
-
log.plain(` npm install ${packages.join(' ')}`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
log.plain('');
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## User Experience
|
|
184
|
-
|
|
185
|
-
### Installing a Native Feature
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
$ vf add charts
|
|
189
|
-
|
|
190
|
-
ℹ Fetching charts for native...
|
|
191
|
-
ℹ Downloading recipe...
|
|
192
|
-
ℹ Installing charts v1.0.0...
|
|
193
|
-
ℹ Copying files...
|
|
194
|
-
✓ Navigation link added
|
|
195
|
-
✓ charts installed successfully!
|
|
196
|
-
ℹ Files added: 17
|
|
197
|
-
|
|
198
|
-
⚠ This feature requires additional packages
|
|
199
|
-
|
|
200
|
-
📦 Required packages:
|
|
201
|
-
• react-native-chart-kit
|
|
202
|
-
• react-native-svg
|
|
203
|
-
|
|
204
|
-
Install with:
|
|
205
|
-
npx expo install react-native-chart-kit react-native-svg
|
|
206
|
-
|
|
207
|
-
💡 Expo will automatically pick compatible versions
|
|
208
|
-
|
|
209
|
-
✓ Installation complete!
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
### Installing a Web Feature
|
|
213
|
-
|
|
214
|
-
```bash
|
|
215
|
-
$ vf add charts-web --target web
|
|
216
|
-
|
|
217
|
-
✓ charts-web installed successfully!
|
|
218
|
-
ℹ Files added: 12
|
|
219
|
-
|
|
220
|
-
⚠ This feature requires additional packages
|
|
221
|
-
|
|
222
|
-
📦 Required packages:
|
|
223
|
-
• recharts
|
|
224
|
-
• d3
|
|
225
|
-
|
|
226
|
-
Install with:
|
|
227
|
-
pnpm add recharts d3
|
|
228
|
-
|
|
229
|
-
✓ Installation complete!
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Advantages of This Approach
|
|
235
|
-
|
|
236
|
-
### 1. No Version Management ✅
|
|
237
|
-
```json
|
|
238
|
-
// Before (complex):
|
|
239
|
-
{
|
|
240
|
-
"dependencies": {
|
|
241
|
-
"react-native-svg": "^13.9.0" // ← What if user has Expo SDK 48?
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// After (simple):
|
|
246
|
-
{
|
|
247
|
-
"dependencies": {
|
|
248
|
-
"expo": ["react-native-svg"] // ← Expo figures it out!
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
### 2. No Conflicts ✅
|
|
254
|
-
```bash
|
|
255
|
-
# Expo handles everything:
|
|
256
|
-
$ npx expo install react-native-svg
|
|
257
|
-
|
|
258
|
-
# If user has Expo SDK 49:
|
|
259
|
-
# → Installs react-native-svg@13.9.0
|
|
260
|
-
|
|
261
|
-
# If user has Expo SDK 50:
|
|
262
|
-
# → Installs react-native-svg@14.1.0
|
|
263
|
-
|
|
264
|
-
# Always compatible!
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
### 3. No Peer Dependency Hell ✅
|
|
268
|
-
```bash
|
|
269
|
-
# Package needs react-native-gesture-handler
|
|
270
|
-
# Expo installs it automatically with compatible version
|
|
271
|
-
$ npx expo install react-native-reanimated
|
|
272
|
-
# → Also installs react-native-gesture-handler@2.x
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### 4. Simpler Recipe Creation ✅
|
|
276
|
-
```json
|
|
277
|
-
// Recipe creator just lists packages:
|
|
278
|
-
{
|
|
279
|
-
"dependencies": {
|
|
280
|
-
"expo": [
|
|
281
|
-
"react-native-chart-kit",
|
|
282
|
-
"react-native-svg"
|
|
283
|
-
]
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// No need to:
|
|
288
|
-
// ❌ Check versions
|
|
289
|
-
// ❌ Test compatibility
|
|
290
|
-
// ❌ Update when Expo SDK changes
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
---
|
|
294
|
-
|
|
295
|
-
## For Services with Manual Steps
|
|
296
|
-
|
|
297
|
-
### Sentry Example
|
|
298
|
-
|
|
299
|
-
```json
|
|
300
|
-
{
|
|
301
|
-
"name": "sentry",
|
|
302
|
-
"version": "1.0.0",
|
|
303
|
-
"target": "native",
|
|
304
|
-
|
|
305
|
-
"copy": [...],
|
|
306
|
-
|
|
307
|
-
"dependencies": {
|
|
308
|
-
"expo": [
|
|
309
|
-
"@sentry/react-native"
|
|
310
|
-
]
|
|
311
|
-
},
|
|
312
|
-
|
|
313
|
-
"env": {
|
|
314
|
-
"required": [
|
|
315
|
-
{
|
|
316
|
-
"key": "SENTRY_DSN",
|
|
317
|
-
"description": "Your Sentry DSN from sentry.io",
|
|
318
|
-
"example": "https://xxx@xxx.ingest.sentry.io/xxx",
|
|
319
|
-
"link": "https://sentry.io/settings/projects/"
|
|
320
|
-
}
|
|
321
|
-
]
|
|
322
|
-
},
|
|
323
|
-
|
|
324
|
-
"manualSteps": [
|
|
325
|
-
{
|
|
326
|
-
"step": 1,
|
|
327
|
-
"title": "Create Sentry Project",
|
|
328
|
-
"description": "Go to sentry.io and create a new React Native project",
|
|
329
|
-
"link": "https://sentry.io/signup/"
|
|
330
|
-
},
|
|
331
|
-
{
|
|
332
|
-
"step": 2,
|
|
333
|
-
"title": "Add DSN to .env",
|
|
334
|
-
"description": "Copy your DSN and add it to your .env file",
|
|
335
|
-
"file": ".env",
|
|
336
|
-
"content": "SENTRY_DSN=your-dsn-here"
|
|
337
|
-
}
|
|
338
|
-
],
|
|
339
|
-
|
|
340
|
-
"postInstall": {
|
|
341
|
-
"message": "Sentry installed! Complete the manual steps above.",
|
|
342
|
-
"commands": [
|
|
343
|
-
"npx expo install @sentry/react-native"
|
|
344
|
-
]
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
**User sees:**
|
|
350
|
-
|
|
351
|
-
```bash
|
|
352
|
-
$ vf add sentry
|
|
353
|
-
|
|
354
|
-
✓ sentry installed successfully!
|
|
355
|
-
ℹ Files added: 5
|
|
356
|
-
|
|
357
|
-
📦 Required packages:
|
|
358
|
-
• @sentry/react-native
|
|
359
|
-
|
|
360
|
-
Install with:
|
|
361
|
-
npx expo install @sentry/react-native
|
|
362
|
-
|
|
363
|
-
⚠ MANUAL STEPS REQUIRED:
|
|
364
|
-
|
|
365
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
366
|
-
│ Step 1: Create Sentry Project │
|
|
367
|
-
│ │
|
|
368
|
-
│ Go to sentry.io and create a new React Native project │
|
|
369
|
-
│ 🔗 https://sentry.io/signup/ │
|
|
370
|
-
└─────────────────────────────────────────────────────────────┘
|
|
371
|
-
|
|
372
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
373
|
-
│ Step 2: Add DSN to .env │
|
|
374
|
-
│ │
|
|
375
|
-
│ Copy your DSN and add it to your .env file: │
|
|
376
|
-
│ SENTRY_DSN=your-dsn-here │
|
|
377
|
-
│ │
|
|
378
|
-
│ 📝 File: .env │
|
|
379
|
-
└─────────────────────────────────────────────────────────────┘
|
|
380
|
-
|
|
381
|
-
💡 Run 'vf checklist sentry' to see these steps again
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
---
|
|
385
|
-
|
|
386
|
-
## Edge Cases Handled
|
|
387
|
-
|
|
388
|
-
### 1. Monorepo Workspaces
|
|
389
|
-
```bash
|
|
390
|
-
# User is in: apps/native/
|
|
391
|
-
$ vf add charts
|
|
392
|
-
|
|
393
|
-
# Shows:
|
|
394
|
-
Install with:
|
|
395
|
-
npx expo install react-native-chart-kit react-native-svg
|
|
396
|
-
|
|
397
|
-
# User runs it from apps/native/
|
|
398
|
-
# Expo handles workspace detection automatically!
|
|
399
|
-
```
|
|
400
|
-
|
|
401
|
-
### 2. Different Package Managers
|
|
402
|
-
```bash
|
|
403
|
-
# For native (always use expo install):
|
|
404
|
-
npx expo install package-name
|
|
405
|
-
|
|
406
|
-
# For web (detect package manager):
|
|
407
|
-
pnpm add package-name # or yarn add, or npm install
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### 3. No Expo CLI Installed
|
|
411
|
-
```bash
|
|
412
|
-
# npx downloads it automatically!
|
|
413
|
-
$ npx expo install package-name
|
|
414
|
-
# → Downloads expo-cli if needed
|
|
415
|
-
# → Runs install
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
---
|
|
419
|
-
|
|
420
|
-
## Type Checking Integration
|
|
421
|
-
|
|
422
|
-
### Optional: Verify Packages Were Installed
|
|
423
|
-
|
|
424
|
-
```typescript
|
|
425
|
-
// After showing install command
|
|
426
|
-
|
|
427
|
-
if (!options.skipVerify) {
|
|
428
|
-
log.plain('');
|
|
429
|
-
const shouldVerify = promptYesNo(
|
|
430
|
-
'Verify packages after installation? (Y/n): ',
|
|
431
|
-
true
|
|
432
|
-
);
|
|
433
|
-
|
|
434
|
-
if (shouldVerify) {
|
|
435
|
-
log.info('Waiting for you to install packages...');
|
|
436
|
-
log.plain('Press Enter when done: ');
|
|
437
|
-
readlineSync.question('');
|
|
438
|
-
|
|
439
|
-
// Run type check to verify
|
|
440
|
-
log.info('Verifying installation...');
|
|
441
|
-
const typeCheck = await runTypeCheck(paths.cwd);
|
|
442
|
-
|
|
443
|
-
if (typeCheck.missingPackages.length > 0) {
|
|
444
|
-
log.warn('⚠ Some packages are still missing:');
|
|
445
|
-
typeCheck.missingPackages.forEach(pkg => {
|
|
446
|
-
log.plain(` • ${pkg}`);
|
|
447
|
-
});
|
|
448
|
-
log.info('Make sure you ran the install command');
|
|
449
|
-
} else {
|
|
450
|
-
log.success('✓ All packages installed correctly!');
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
---
|
|
457
|
-
|
|
458
|
-
## Complete Flow
|
|
459
|
-
|
|
460
|
-
```
|
|
461
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
462
|
-
│ SIMPLIFIED PACKAGE FLOW │
|
|
463
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
464
|
-
|
|
465
|
-
Step 1: User Installs Feature
|
|
466
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
467
|
-
│ $ vf add charts │
|
|
468
|
-
└──────────────────────────────────────────────────────────────┘
|
|
469
|
-
│
|
|
470
|
-
▼
|
|
471
|
-
Step 2: CLI Copies Files
|
|
472
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
473
|
-
│ ✓ 17 files copied │
|
|
474
|
-
│ ✓ Navigation added │
|
|
475
|
-
└──────────────────────────────────────────────────────────────┘
|
|
476
|
-
│
|
|
477
|
-
▼
|
|
478
|
-
Step 3: CLI Shows Package Command
|
|
479
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
480
|
-
│ 📦 Required packages: │
|
|
481
|
-
│ • react-native-chart-kit │
|
|
482
|
-
│ • react-native-svg │
|
|
483
|
-
│ │
|
|
484
|
-
│ Install with: │
|
|
485
|
-
│ npx expo install react-native-chart-kit react-native-svg │
|
|
486
|
-
│ │
|
|
487
|
-
│ 💡 Expo will pick compatible versions │
|
|
488
|
-
└──────────────────────────────────────────────────────────────┘
|
|
489
|
-
│
|
|
490
|
-
▼
|
|
491
|
-
Step 4: User Runs Command
|
|
492
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
493
|
-
│ $ npx expo install react-native-chart-kit react-native-svg │
|
|
494
|
-
│ │
|
|
495
|
-
│ Expo automatically: │
|
|
496
|
-
│ ✓ Detects Expo SDK version │
|
|
497
|
-
│ ✓ Picks compatible package versions │
|
|
498
|
-
│ ✓ Installs peer dependencies │
|
|
499
|
-
│ ✓ Updates package.json │
|
|
500
|
-
└──────────────────────────────────────────────────────────────┘
|
|
501
|
-
│
|
|
502
|
-
▼
|
|
503
|
-
Step 5: Done!
|
|
504
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
505
|
-
│ ✓ Feature installed │
|
|
506
|
-
│ ✓ Packages installed │
|
|
507
|
-
│ ✓ Ready to use! │
|
|
508
|
-
└──────────────────────────────────────────────────────────────┘
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
---
|
|
512
|
-
|
|
513
|
-
## Summary
|
|
514
|
-
|
|
515
|
-
### What Changed
|
|
516
|
-
|
|
517
|
-
**Before (Complex):**
|
|
518
|
-
- ❌ Specify versions in recipe.json
|
|
519
|
-
- ❌ Worry about conflicts
|
|
520
|
-
- ❌ Update recipes when Expo SDK changes
|
|
521
|
-
- ❌ Handle peer dependencies
|
|
522
|
-
- ❌ Test compatibility
|
|
523
|
-
|
|
524
|
-
**After (Simple):**
|
|
525
|
-
- ✅ Just list package names
|
|
526
|
-
- ✅ Let `expo install` handle versions
|
|
527
|
-
- ✅ No conflicts ever
|
|
528
|
-
- ✅ Always compatible
|
|
529
|
-
- ✅ No maintenance
|
|
530
|
-
|
|
531
|
-
### Recipe Format
|
|
532
|
-
|
|
533
|
-
```json
|
|
534
|
-
{
|
|
535
|
-
"dependencies": {
|
|
536
|
-
"expo": [
|
|
537
|
-
"package-name-1",
|
|
538
|
-
"package-name-2"
|
|
539
|
-
]
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
```
|
|
543
|
-
|
|
544
|
-
### CLI Output
|
|
545
|
-
|
|
546
|
-
```bash
|
|
547
|
-
Install with:
|
|
548
|
-
npx expo install package-name-1 package-name-2
|
|
549
|
-
|
|
550
|
-
💡 Expo will automatically pick compatible versions
|
|
551
|
-
```
|
|
552
|
-
|
|
553
|
-
### For Web Apps
|
|
554
|
-
|
|
555
|
-
```json
|
|
556
|
-
{
|
|
557
|
-
"dependencies": {
|
|
558
|
-
"npm": [
|
|
559
|
-
"package-name-1",
|
|
560
|
-
"package-name-2"
|
|
561
|
-
]
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
```bash
|
|
567
|
-
Install with:
|
|
568
|
-
pnpm add package-name-1 package-name-2
|
|
569
|
-
```
|
|
570
|
-
|
|
571
|
-
---
|
|
572
|
-
|
|
573
|
-
## This Solves EVERYTHING
|
|
574
|
-
|
|
575
|
-
1. ✅ No version management
|
|
576
|
-
2. ✅ No conflicts
|
|
577
|
-
3. ✅ No peer dependency issues
|
|
578
|
-
4. ✅ No Expo SDK compatibility issues
|
|
579
|
-
5. ✅ No monorepo complexity
|
|
580
|
-
6. ✅ Simple recipe creation
|
|
581
|
-
7. ✅ Always works
|
|
582
|
-
|
|
583
|
-
**This is the way!** 🎉
|