vibefast-cli 1.1.5 → 1.2.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/CHANGELOG.md +32 -0
- package/README.md +63 -169
- package/dist/commands/add.d.ts +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +547 -589
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/checklist.d.ts +1 -1
- package/dist/commands/checklist.d.ts.map +1 -1
- package/dist/commands/checklist.js +40 -39
- package/dist/commands/checklist.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.js +22 -22
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/env.d.ts +1 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +58 -53
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/health.d.ts +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +101 -93
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +416 -296
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/remove.d.ts +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +77 -64
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +15 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/core/__tests__/detect.test.js +68 -34
- package/dist/core/__tests__/detect.test.js.map +1 -1
- package/dist/core/ast.d.ts +14 -0
- package/dist/core/ast.d.ts.map +1 -0
- package/dist/core/ast.js +239 -0
- package/dist/core/ast.js.map +1 -0
- package/dist/core/codemod.d.ts.map +1 -1
- package/dist/core/codemod.js +62 -44
- package/dist/core/codemod.js.map +1 -1
- package/dist/core/config.d.ts +10 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +51 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/detect.d.ts +8 -2
- package/dist/core/detect.d.ts.map +1 -1
- package/dist/core/detect.js +52 -21
- package/dist/core/detect.js.map +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +9 -8
- package/dist/core/errors.js.map +1 -1
- package/dist/core/exec.d.ts +16 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +48 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/manualSteps.d.ts +7 -0
- package/dist/core/manualSteps.d.ts.map +1 -0
- package/dist/core/manualSteps.js +59 -0
- package/dist/core/manualSteps.js.map +1 -0
- package/dist/core/paths.d.ts +3 -1
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +14 -10
- package/dist/core/paths.js.map +1 -1
- package/dist/core/spinner.d.ts +1 -1
- package/dist/core/spinner.d.ts.map +1 -1
- package/dist/core/spinner.js +38 -8
- package/dist/core/spinner.js.map +1 -1
- package/dist/core/vosk.d.ts.map +1 -1
- package/dist/core/vosk.js +50 -39
- package/dist/core/vosk.js.map +1 -1
- package/docs/manual-testing.md +91 -0
- package/package.json +6 -3
- package/recipes/audio-recorder/apps/native/src/app/audio-recorder/index.tsx +5 -0
- package/recipes/audio-recorder/recipe.json +3 -3
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-player.tsx +301 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +373 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-waveform.tsx +270 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/index.ts +4 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/recording-list.tsx +89 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/audio-player-demo.tsx +66 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/audio-recorder-cloud.tsx +68 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/audio-recorder-interview.tsx +102 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/basic.tsx +27 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/index.ts +5 -0
- package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +82 -0
- package/recipes/audio-recorder-supabase/packages/backend/src/services/recordings.ts +369 -0
- package/recipes/audio-recorder-supabase/packages/backend/supabase/migrations/recordings.sql +70 -0
- package/recipes/audio-recorder-supabase/recipe.json +35 -0
- package/recipes/audio-recorder-supabase@latest.zip +0 -0
- package/recipes/audio-recorder@latest.zip +0 -0
- package/recipes/charts/apps/native/src/features/charts/components/bar-chart.tsx +3 -3
- package/recipes/charts/apps/native/src/features/charts/components/candlestick-chart.tsx +2 -2
- package/recipes/charts/apps/native/src/features/charts/components/chart-card.tsx +5 -5
- package/recipes/charts/apps/native/src/features/charts/components/column-chart.tsx +3 -3
- package/recipes/charts/apps/native/src/features/charts/components/doughnut-chart.tsx +20 -4
- package/recipes/charts/apps/native/src/features/charts/components/line-chart.tsx +7 -6
- package/recipes/charts/apps/native/src/features/charts/components/radar-chart.tsx +6 -4
- package/recipes/charts/apps/native/src/features/charts/components/radial-bar-chart.tsx +1 -1
- package/recipes/charts/apps/native/src/features/charts/components/stacked-bar-chart.tsx +5 -4
- package/recipes/charts/recipe.json +4 -13
- package/recipes/charts@latest.zip +0 -0
- package/recipes/chatbot/apps/native/src/app/chatbot/index.tsx +1 -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 +86 -53
- package/recipes/chatbot/recipe.json +26 -92
- package/recipes/chatbot-supabase/apps/native/src/api-client/supabase/chatbot.ts +515 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/app/index.tsx +257 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-header-buttons.tsx +59 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-input-bar.tsx +485 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-markdown.tsx +575 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-message-bubble.tsx +223 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-settings-modal.tsx +161 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/image-preview-list.tsx +116 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/code-block.tsx +165 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/index.ts +10 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/table-renderer.tsx +129 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/message-error-boundary.tsx +78 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/message-list.tsx +170 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/model-selector.tsx +283 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/report-content-modal.tsx +188 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/suggested-messages.tsx +67 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/constants/models.ts +20 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/constants/report-reasons.ts +9 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-attachment-cache.ts +142 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-chat-config.ts +458 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-chat-handlers.ts +429 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-chatbot-settings.ts +89 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-conversation.ts +90 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-image-picker.ts +122 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-keyboard-coordinator.ts +161 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/hooks/use-smart-scroll-manager.ts +213 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/models/index.ts +86 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/models/models.ts +162 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/models/providers.ts +62 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/models/types.ts +40 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/services/file-uploader.ts +287 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/services/message-handler-service.ts +189 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/types/index.ts +70 -0
- package/recipes/chatbot-supabase/apps/native/src/features/chatbot/utils/chat-telemetry.ts +91 -0
- package/recipes/chatbot-supabase/packages/backend/src/services/conversations.ts +243 -0
- package/recipes/chatbot-supabase/packages/backend/src/services/messages.ts +327 -0
- package/recipes/chatbot-supabase/packages/backend/supabase/functions/chat-stream/index.ts +347 -0
- package/recipes/chatbot-supabase/packages/backend/supabase/migrations/chatbot.sql +104 -0
- package/recipes/chatbot-supabase/recipe.json +79 -0
- package/recipes/chatbot-supabase@latest.zip +0 -0
- package/recipes/chatbot.zip +0 -0
- package/recipes/chatbot@latest.zip +0 -0
- package/recipes/image-analysis/packages/backend/convex/imageAnalysis/index.ts +2 -2
- package/recipes/image-analysis/packages/backend/convex/imageAnalysis.ts +0 -1
- package/recipes/image-analysis/recipe.json +15 -55
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/analysis-options-screen.tsx +304 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/camera.tsx +221 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/image-capture-screen.tsx +333 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/loading-screen.tsx +214 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/loading.tsx +191 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/results.tsx +137 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/trait-details.tsx +172 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/use-analysis-data.ts +160 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/app/use-results-screen.ts +151 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/achievement-badge.tsx +77 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/achievement-card.tsx +75 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/achievement-unlocked-modal.tsx +162 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/achievements-section.tsx +44 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/advice-list.tsx +42 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/circular-progress.tsx +233 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/content-card.tsx +38 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/error-state.tsx +42 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/index.ts +9 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/loading-state.tsx +26 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/profile-image.tsx +60 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/results-header.tsx +62 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/score-display.tsx +54 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/share-options-modal.tsx +110 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/components/results/traits-grid.tsx +74 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/config/analysis-config.ts +80 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/config/master-analysis-config.ts +157 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/hooks/index.ts +1 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/hooks/use-analysis.ts +38 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/hooks/use-image-analysis.ts +208 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/services/analysis-service.ts +262 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/services/share-service.ts +176 -0
- package/recipes/image-analysis-supabase/apps/native/src/features/image-analyzer/services/trait-details-service.ts +289 -0
- package/recipes/image-analysis-supabase/packages/backend/src/services/image-analyses.ts +132 -0
- package/recipes/image-analysis-supabase/packages/backend/supabase/functions/analyze-image/index.ts +312 -0
- package/recipes/image-analysis-supabase/packages/backend/supabase/migrations/image_analysis.sql +42 -0
- package/recipes/image-analysis-supabase/recipe.json +57 -0
- package/recipes/image-analysis-supabase@latest.zip +0 -0
- package/recipes/image-analysis@latest.zip +0 -0
- package/recipes/image-generator/apps/native/src/features/image-generator/app/index.tsx +16 -2
- package/recipes/image-generator/apps/native/src/features/image-generator/components/image-model-selector.tsx +11 -5
- package/recipes/image-generator/apps/native/src/features/image-generator/hooks/use-image-generator.ts +11 -5
- package/recipes/image-generator/packages/backend/convex/imageGeneration/index.ts +2 -2
- package/recipes/image-generator/recipe.json +16 -39
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/app/_layout.tsx +26 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/app/gallery.tsx +217 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/app/index.tsx +251 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/components/gallery-image.tsx +25 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/components/image-detail-modal.tsx +215 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/components/image-model-selector.tsx +216 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/components/image-placeholder.tsx +26 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/hooks/use-image-gallery.ts +71 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/hooks/use-image-generator-settings.ts +152 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/hooks/use-image-generator.ts +103 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/models/models.ts +66 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/services/image-gallery-service.ts +96 -0
- package/recipes/image-generator-supabase/apps/native/src/features/image-generator/services/image-save-service.ts +120 -0
- package/recipes/image-generator-supabase/packages/backend/supabase/functions/generate-image/index.ts +291 -0
- package/recipes/image-generator-supabase/packages/backend/supabase/migrations/image_generator.sql +71 -0
- package/recipes/image-generator-supabase/recipe.json +59 -0
- package/recipes/image-generator-supabase@latest.zip +0 -0
- package/recipes/image-generator@latest.zip +0 -0
- package/recipes/ios-widget/recipe.json +15 -24
- package/recipes/ios-widget@latest.zip +0 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/analytics/index.ts +9 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/components/onboarding-with-analytics.tsx +141 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/components/onboarding.tsx +173 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/config/onboarding-flow-config.ts +189 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/demo-one/app/index.tsx +42 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/demo-one/data.ts +32 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/app/index.tsx +43 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/interactive-onboarding.tsx +222 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/ai-tone-step.tsx +133 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/currency-step.tsx +165 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-ai-step.tsx +199 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-chatbot-step.tsx +154 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-manual-step.tsx +156 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-scan-step.tsx +158 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/main-reason-step.tsx +139 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/notification-step.tsx +129 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/overspend-step.tsx +138 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/personalizing-step.tsx +190 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/rating-step.tsx +98 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/reminder-step.tsx +181 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/safety-step.tsx +110 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/struggle-step.tsx +139 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/welcome-step.tsx +217 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/ui/onboarding-header.tsx +58 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/constants.ts +179 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/hooks/use-onboarding-analytics.ts +323 -0
- package/recipes/onboarding/apps/native/src/features/onboarding/services/onboarding-analytics.ts +432 -0
- package/recipes/onboarding/recipe.json +15 -0
- package/recipes/onboarding@latest.zip +0 -0
- package/recipes/payments/recipe.json +28 -61
- package/recipes/payments-supabase/apps/native/src/features/payments/README.md +200 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/app/local-paywall.tsx +194 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/app/remote-paywall.tsx +79 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/payment-initializer.tsx +95 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/paywall-error-state.tsx +60 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/paywall-local-mode.tsx +116 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/paywall-product-card.tsx +133 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/components/paywall-remote-mode.tsx +146 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/hooks/use-entitlement.ts +63 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/index.ts +8 -0
- package/recipes/payments-supabase/apps/native/src/features/payments/services/revenuecat-adapter.ts +407 -0
- package/recipes/payments-supabase/packages/backend/src/services/payments.ts +201 -0
- package/recipes/payments-supabase/packages/backend/supabase/migrations/payments.sql +35 -0
- package/recipes/payments-supabase/recipe.json +51 -0
- package/recipes/payments-supabase@latest.zip +0 -0
- package/recipes/payments@latest.zip +0 -0
- package/recipes/quiz/apps/native/src/features/quiz/index.tsx +1 -2
- package/recipes/quiz/recipe.json +6 -9
- package/recipes/quiz@latest.zip +0 -0
- package/recipes/tracker-app/apps/native/src/features/tracker-app/app/index.tsx +1 -2
- package/recipes/tracker-app/recipe.json +7 -10
- package/recipes/tracker-app@latest.zip +0 -0
- package/recipes/voice-bot/recipe.json +8 -68
- package/recipes/voice-bot.zip +0 -0
- package/recipes/voice-bot@latest.zip +0 -0
- package/recipes/wake-word/recipe.json +10 -9
- package/recipes/wake-word.zip +0 -0
- package/recipes/wake-word@latest.zip +0 -0
- package/recipes/charts/apps/native/src/app/(root)/(protected)/charts/index.tsx +0 -3
- package/recipes/chatbot/packages/backend/convex/lib/rateLimit.ts +0 -100
- package/recipes/chatbot/packages/backend/convex/lib/telemetry.ts +0 -29
- package/recipes/chatbot/packages/backend/convex/ragKnowledge.ts +0 -0
- package/recipes/image-analysis/apps/native/assets/features/image-analyzer/front.jpg +0 -0
- package/recipes/image-analysis/apps/native/assets/features/image-analyzer/side.jpg +0 -0
- package/recipes/image-analysis/apps/native/assets/features/image-analyzer/threeQuarter.jpg +0 -0
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/_layout.tsx +0 -5
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/analysis-options.tsx +0 -50
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/camera.tsx +0 -2
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/index.tsx +0 -50
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/loading.tsx +0 -50
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/results.tsx +0 -2
- package/recipes/image-analysis/apps/native/src/app/(root)/(protected)/analysis/[type]/trait-details.tsx +0 -3
- package/recipes/image-analysis/packages/backend/convex/imageAnalysisFunctions.ts +0 -325
- package/recipes/image-analysis/packages/backend/convex/lib/ai/imageAnalysisAdapter.ts +0 -200
- package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/index.tsx +0 -74
- package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/local.tsx +0 -25
- package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/remote.tsx +0 -23
- package/recipes/quiz/apps/native/src/app/(root)/(protected)/quiz/index.tsx +0 -47
- package/recipes/tracker-app/apps/native/src/app/(root)/(protected)/tracker-app/index.tsx +0 -1
- package/recipes/voice-bot/apps/native/src/app/(root)/(protected)/voice-bot/index.tsx +0 -27
- package/recipes/voice-bot/packages/backend/convex/router.ts +0 -81
- /package/recipes/{chatbot/apps/native/src/app/(root)/(protected) → chatbot-supabase/apps/native/src/app}/chatbot/index.tsx +0 -0
- /package/recipes/{image-generator/apps/native/src/app/(root)/(protected) → image-generator-supabase/apps/native/src/app}/image-generator/gallery.tsx +0 -0
- /package/recipes/{image-generator/apps/native/src/app/(root)/(protected) → image-generator-supabase/apps/native/src/app}/image-generator/index.tsx +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/detect.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,
|
|
1
|
+
{"version":3,"file":"detect.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/detect.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAExD,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAClD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAClD,aAAa,CACX,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CACtD,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,EACzC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CACtC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,EACzC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CACxC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YACrE,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,EACzC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CACvC,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YACrE,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,EAAE,UAAU,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adds a plugin to the app.config.ts file safely using AST.
|
|
3
|
+
*/
|
|
4
|
+
export declare function addAppConfigPlugin(configPath: string, pluginName: string, pluginConfig?: any): Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Adds properties to the ios section of app.config.ts using AST.
|
|
7
|
+
* Used for adding appleTeamId and entitlements.
|
|
8
|
+
*/
|
|
9
|
+
export declare function addAppConfigIosProperties(configPath: string, properties: Record<string, string>): Promise<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* Adds an import to a file if it doesn't exist.
|
|
12
|
+
*/
|
|
13
|
+
export declare function addImport(filePath: string, moduleSpecifier: string, namedImports?: string[], defaultImport?: string): Promise<boolean>;
|
|
14
|
+
//# sourceMappingURL=ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/core/ast.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,GAAG,GACjB,OAAO,CAAC,OAAO,CAAC,CAuHlB;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,OAAO,CAAC,CA+ElB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAsClB"}
|
package/dist/core/ast.js
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { Project, SyntaxKind, Node, } from "ts-morph";
|
|
2
|
+
import { exists } from "./fsx.js";
|
|
3
|
+
/**
|
|
4
|
+
* Adds a plugin to the app.config.ts file safely using AST.
|
|
5
|
+
*/
|
|
6
|
+
export async function addAppConfigPlugin(configPath, pluginName, pluginConfig) {
|
|
7
|
+
if (!(await exists(configPath)))
|
|
8
|
+
return false;
|
|
9
|
+
const project = new Project();
|
|
10
|
+
const sourceFile = project.addSourceFileAtPath(configPath);
|
|
11
|
+
// Find the default export or the config object
|
|
12
|
+
const defaultExport = sourceFile.getExportAssignment((d) => !d.isExportEquals());
|
|
13
|
+
if (!defaultExport) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const expression = defaultExport.getExpression();
|
|
17
|
+
let configObject;
|
|
18
|
+
// Handle export default { ... }
|
|
19
|
+
if (Node.isObjectLiteralExpression(expression)) {
|
|
20
|
+
configObject = expression;
|
|
21
|
+
}
|
|
22
|
+
else if (Node.isCallExpression(expression)) {
|
|
23
|
+
// Handle withDefaults({...}) or similar wrappers
|
|
24
|
+
const args = expression.getArguments();
|
|
25
|
+
if (args.length > 0 && Node.isObjectLiteralExpression(args[0])) {
|
|
26
|
+
configObject = args[0];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else if (Node.isArrowFunction(expression)) {
|
|
30
|
+
// Handle export default () => ({...}) or () => { return {...} }
|
|
31
|
+
const body = expression.getBody();
|
|
32
|
+
if (Node.isParenthesizedExpression(body)) {
|
|
33
|
+
// () => ({...})
|
|
34
|
+
const inner = body.getExpression();
|
|
35
|
+
if (Node.isObjectLiteralExpression(inner)) {
|
|
36
|
+
configObject = inner;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (Node.isObjectLiteralExpression(body)) {
|
|
40
|
+
// () => {...} (rare but possible)
|
|
41
|
+
configObject = body;
|
|
42
|
+
}
|
|
43
|
+
else if (Node.isBlock(body)) {
|
|
44
|
+
// () => { return {...}; }
|
|
45
|
+
const returnStmt = body.getStatements().find(Node.isReturnStatement);
|
|
46
|
+
if (returnStmt) {
|
|
47
|
+
const returnExpr = returnStmt.getExpression();
|
|
48
|
+
if (returnExpr && Node.isObjectLiteralExpression(returnExpr)) {
|
|
49
|
+
configObject = returnExpr;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (Node.isParenthesizedExpression(expression)) {
|
|
55
|
+
// Handle ({...})
|
|
56
|
+
const inner = expression.getExpression();
|
|
57
|
+
if (Node.isObjectLiteralExpression(inner)) {
|
|
58
|
+
configObject = inner;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!configObject)
|
|
62
|
+
return false;
|
|
63
|
+
// Find or create 'plugins' array
|
|
64
|
+
let pluginsProp = configObject.getProperty("plugins");
|
|
65
|
+
let pluginsArray;
|
|
66
|
+
if (!pluginsProp) {
|
|
67
|
+
pluginsProp = configObject.addPropertyAssignment({
|
|
68
|
+
name: "plugins",
|
|
69
|
+
initializer: "[]",
|
|
70
|
+
});
|
|
71
|
+
pluginsArray = pluginsProp.getInitializer();
|
|
72
|
+
}
|
|
73
|
+
else if (pluginsProp.getKind() === SyntaxKind.PropertyAssignment) {
|
|
74
|
+
const initializer = pluginsProp.getInitializer();
|
|
75
|
+
if (initializer &&
|
|
76
|
+
initializer.getKind() === SyntaxKind.ArrayLiteralExpression) {
|
|
77
|
+
pluginsArray = initializer;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Plugins is not an array literal (e.g. variable reference)
|
|
81
|
+
// We can't safely edit it
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
// Check if plugin already exists
|
|
89
|
+
const pluginExists = pluginsArray.getElements().some((element) => {
|
|
90
|
+
if (Node.isArrayLiteralExpression(element)) {
|
|
91
|
+
const first = element.getElements()[0];
|
|
92
|
+
if (Node.isStringLiteral(first) &&
|
|
93
|
+
first.getLiteralValue() === pluginName) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (Node.isStringLiteral(element)) {
|
|
98
|
+
return element.getLiteralValue() === pluginName;
|
|
99
|
+
}
|
|
100
|
+
return false;
|
|
101
|
+
});
|
|
102
|
+
if (pluginExists)
|
|
103
|
+
return false;
|
|
104
|
+
// Add the plugin
|
|
105
|
+
if (pluginConfig) {
|
|
106
|
+
// If config is a string, use it as raw code (preserves template literals like ${Env.BUNDLE_ID})
|
|
107
|
+
// If config is an object, JSON.stringify it
|
|
108
|
+
const configStr = typeof pluginConfig === "string"
|
|
109
|
+
? pluginConfig
|
|
110
|
+
: JSON.stringify(pluginConfig, null, 2);
|
|
111
|
+
pluginsArray.addElement(`['${pluginName}', ${configStr}]`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
pluginsArray.addElement(`'${pluginName}'`);
|
|
115
|
+
}
|
|
116
|
+
await sourceFile.save();
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Adds properties to the ios section of app.config.ts using AST.
|
|
121
|
+
* Used for adding appleTeamId and entitlements.
|
|
122
|
+
*/
|
|
123
|
+
export async function addAppConfigIosProperties(configPath, properties) {
|
|
124
|
+
if (!(await exists(configPath)))
|
|
125
|
+
return false;
|
|
126
|
+
const project = new Project();
|
|
127
|
+
const sourceFile = project.addSourceFileAtPath(configPath);
|
|
128
|
+
// Find the default export
|
|
129
|
+
const defaultExport = sourceFile.getExportAssignment((d) => !d.isExportEquals());
|
|
130
|
+
if (!defaultExport)
|
|
131
|
+
return false;
|
|
132
|
+
const expression = defaultExport.getExpression();
|
|
133
|
+
let configObject;
|
|
134
|
+
if (Node.isObjectLiteralExpression(expression)) {
|
|
135
|
+
configObject = expression;
|
|
136
|
+
}
|
|
137
|
+
else if (Node.isCallExpression(expression)) {
|
|
138
|
+
const args = expression.getArguments();
|
|
139
|
+
if (args.length > 0 && Node.isObjectLiteralExpression(args[0])) {
|
|
140
|
+
configObject = args[0];
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else if (Node.isArrowFunction(expression)) {
|
|
144
|
+
// Handle export default () => ({...}) or () => { return {...} }
|
|
145
|
+
const body = expression.getBody();
|
|
146
|
+
if (Node.isParenthesizedExpression(body)) {
|
|
147
|
+
const inner = body.getExpression();
|
|
148
|
+
if (Node.isObjectLiteralExpression(inner)) {
|
|
149
|
+
configObject = inner;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else if (Node.isObjectLiteralExpression(body)) {
|
|
153
|
+
configObject = body;
|
|
154
|
+
}
|
|
155
|
+
else if (Node.isBlock(body)) {
|
|
156
|
+
const returnStmt = body.getStatements().find(Node.isReturnStatement);
|
|
157
|
+
if (returnStmt) {
|
|
158
|
+
const returnExpr = returnStmt.getExpression();
|
|
159
|
+
if (returnExpr && Node.isObjectLiteralExpression(returnExpr)) {
|
|
160
|
+
configObject = returnExpr;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else if (Node.isParenthesizedExpression(expression)) {
|
|
166
|
+
const inner = expression.getExpression();
|
|
167
|
+
if (Node.isObjectLiteralExpression(inner)) {
|
|
168
|
+
configObject = inner;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (!configObject)
|
|
172
|
+
return false;
|
|
173
|
+
// Find ios property
|
|
174
|
+
const iosProp = configObject.getProperty("ios");
|
|
175
|
+
if (!iosProp || iosProp.getKind() !== SyntaxKind.PropertyAssignment) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
const iosInitializer = iosProp.getInitializer();
|
|
179
|
+
if (!iosInitializer || !Node.isObjectLiteralExpression(iosInitializer)) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
const iosObject = iosInitializer;
|
|
183
|
+
let changed = false;
|
|
184
|
+
for (const [propName, propValue] of Object.entries(properties)) {
|
|
185
|
+
const existingProp = iosObject.getProperty(propName);
|
|
186
|
+
if (!existingProp) {
|
|
187
|
+
iosObject.addPropertyAssignment({
|
|
188
|
+
name: propName,
|
|
189
|
+
initializer: propValue,
|
|
190
|
+
});
|
|
191
|
+
changed = true;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (changed) {
|
|
195
|
+
await sourceFile.save();
|
|
196
|
+
}
|
|
197
|
+
return changed;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Adds an import to a file if it doesn't exist.
|
|
201
|
+
*/
|
|
202
|
+
export async function addImport(filePath, moduleSpecifier, namedImports, defaultImport) {
|
|
203
|
+
if (!(await exists(filePath)))
|
|
204
|
+
return false;
|
|
205
|
+
const project = new Project();
|
|
206
|
+
const sourceFile = project.addSourceFileAtPath(filePath);
|
|
207
|
+
const existingImport = sourceFile.getImportDeclaration((d) => d.getModuleSpecifierValue() === moduleSpecifier);
|
|
208
|
+
if (existingImport) {
|
|
209
|
+
let changed = false;
|
|
210
|
+
if (defaultImport && !existingImport.getDefaultImport()) {
|
|
211
|
+
existingImport.setDefaultImport(defaultImport);
|
|
212
|
+
changed = true;
|
|
213
|
+
}
|
|
214
|
+
if (namedImports) {
|
|
215
|
+
const existingNamed = existingImport
|
|
216
|
+
.getNamedImports()
|
|
217
|
+
.map((n) => n.getName());
|
|
218
|
+
for (const named of namedImports) {
|
|
219
|
+
if (!existingNamed.includes(named)) {
|
|
220
|
+
existingImport.addNamedImport(named);
|
|
221
|
+
changed = true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (changed)
|
|
226
|
+
await sourceFile.save();
|
|
227
|
+
return changed;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
sourceFile.addImportDeclaration({
|
|
231
|
+
defaultImport,
|
|
232
|
+
namedImports,
|
|
233
|
+
moduleSpecifier,
|
|
234
|
+
});
|
|
235
|
+
await sourceFile.save();
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/core/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codemod.d.ts","sourceRoot":"","sources":["../../src/core/codemod.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,6CAA6C,CAAC;AAC9E,eAAO,MAAM,iBAAiB,2CAA2C,CAAC;AAC1E,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"codemod.d.ts","sourceRoot":"","sources":["../../src/core/codemod.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,6CAA6C,CAAC;AAC9E,eAAO,MAAM,iBAAiB,2CAA2C,CAAC;AAC1E,eAAO,MAAM,uBAAuB,iDACY,CAAC;AACjD,eAAO,MAAM,qBAAqB,+CACY,CAAC;AAC/C,eAAO,MAAM,oBAAoB,8CAA8C,CAAC;AAChF,eAAO,MAAM,kBAAkB,4CAA4C,CAAC;AAC5E,eAAO,MAAM,2BAA2B,oDACW,CAAC;AACpD,eAAO,MAAM,yBAAyB,kDACW,CAAC;AAClD,eAAO,MAAM,wBAAwB,iDACW,CAAC;AACjD,eAAO,MAAM,sBAAsB,+CACW,CAAC;AA8B/C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACjD,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,OAAO,CAAC,CAwDlB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,OAAO,CAAC,CAiClB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,OAAO,CAAC,CA0ClB;AA6BD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,OAAO,CAAC,CA0ClB"}
|
package/dist/core/codemod.js
CHANGED
|
@@ -1,60 +1,64 @@
|
|
|
1
|
-
import { readFileContent, writeFileContent } from
|
|
2
|
-
const NATIVE_START =
|
|
3
|
-
const NATIVE_END =
|
|
4
|
-
const WEB_START =
|
|
5
|
-
const WEB_END =
|
|
6
|
-
export const ENV_CONSTANTS_START =
|
|
7
|
-
export const ENV_CONSTANTS_END =
|
|
8
|
-
export const ENV_CLIENT_SCHEMA_START =
|
|
9
|
-
export const ENV_CLIENT_SCHEMA_END =
|
|
10
|
-
export const ENV_CLIENT_ENV_START =
|
|
11
|
-
export const ENV_CLIENT_ENV_END =
|
|
12
|
-
export const ENV_BUILD_TIME_SCHEMA_START =
|
|
13
|
-
export const ENV_BUILD_TIME_SCHEMA_END =
|
|
14
|
-
export const ENV_BUILD_TIME_ENV_START =
|
|
15
|
-
export const ENV_BUILD_TIME_ENV_END =
|
|
1
|
+
import { readFileContent, writeFileContent } from "./fsx.js";
|
|
2
|
+
const NATIVE_START = "// --- @vibefast:features:start ---";
|
|
3
|
+
const NATIVE_END = "// --- @vibefast:features:end ---";
|
|
4
|
+
const WEB_START = "{/* @vibefast:nav:start */}";
|
|
5
|
+
const WEB_END = "{/* @vibefast:nav:end */}";
|
|
6
|
+
export const ENV_CONSTANTS_START = "// --- @vibefast:env:constants:start ---";
|
|
7
|
+
export const ENV_CONSTANTS_END = "// --- @vibefast:env:constants:end ---";
|
|
8
|
+
export const ENV_CLIENT_SCHEMA_START = "// --- @vibefast:env:client-schema:start ---";
|
|
9
|
+
export const ENV_CLIENT_SCHEMA_END = "// --- @vibefast:env:client-schema:end ---";
|
|
10
|
+
export const ENV_CLIENT_ENV_START = "// --- @vibefast:env:client-env:start ---";
|
|
11
|
+
export const ENV_CLIENT_ENV_END = "// --- @vibefast:env:client-env:end ---";
|
|
12
|
+
export const ENV_BUILD_TIME_SCHEMA_START = "// --- @vibefast:env:buildtime-schema:start ---";
|
|
13
|
+
export const ENV_BUILD_TIME_SCHEMA_END = "// --- @vibefast:env:buildtime-schema:end ---";
|
|
14
|
+
export const ENV_BUILD_TIME_ENV_START = "// --- @vibefast:env:buildtime-env:start ---";
|
|
15
|
+
export const ENV_BUILD_TIME_ENV_END = "// --- @vibefast:env:buildtime-env:end ---";
|
|
16
16
|
function escapeTsLiteral(value) {
|
|
17
17
|
return value
|
|
18
|
-
.replace(/\\/g,
|
|
18
|
+
.replace(/\\/g, "\\\\")
|
|
19
19
|
.replace(/'/g, "\\'")
|
|
20
|
-
.replace(/\r/g,
|
|
21
|
-
.replace(/\n/g,
|
|
22
|
-
.replace(/\u2028/g,
|
|
23
|
-
.replace(/\u2029/g,
|
|
20
|
+
.replace(/\r/g, "\\r")
|
|
21
|
+
.replace(/\n/g, "\\n")
|
|
22
|
+
.replace(/\u2028/g, "\\u2028")
|
|
23
|
+
.replace(/\u2029/g, "\\u2029");
|
|
24
24
|
}
|
|
25
25
|
function escapeHtmlAttribute(value) {
|
|
26
26
|
return value
|
|
27
|
-
.replace(/&/g,
|
|
28
|
-
.replace(/"/g,
|
|
29
|
-
.replace(/'/g,
|
|
30
|
-
.replace(/</g,
|
|
31
|
-
.replace(/>/g,
|
|
27
|
+
.replace(/&/g, "&")
|
|
28
|
+
.replace(/"/g, """)
|
|
29
|
+
.replace(/'/g, "'")
|
|
30
|
+
.replace(/</g, "<")
|
|
31
|
+
.replace(/>/g, ">");
|
|
32
32
|
}
|
|
33
33
|
function escapeForRegex(value) {
|
|
34
|
-
return value.replace(/[-/\\^$*+?.()|[\]{}]/g,
|
|
34
|
+
return value.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
35
35
|
}
|
|
36
36
|
function safeNavId(value) {
|
|
37
|
-
const sanitized = value.replace(/[^a-zA-Z0-9_-]/g,
|
|
38
|
-
return sanitized ||
|
|
37
|
+
const sanitized = value.replace(/[^a-zA-Z0-9_-]/g, "");
|
|
38
|
+
return sanitized || "feature";
|
|
39
39
|
}
|
|
40
40
|
export async function insertNavLinkNative(filePath, link, options) {
|
|
41
41
|
const content = await readFileContent(filePath);
|
|
42
42
|
if (!content.includes(NATIVE_START) || !content.includes(NATIVE_END)) {
|
|
43
|
-
throw new Error(`Missing navigation markers in ${filePath}`
|
|
43
|
+
throw new Error(`Missing navigation markers in ${filePath}\n\n` +
|
|
44
|
+
`Expected markers:\n` +
|
|
45
|
+
` ${NATIVE_START}\n` +
|
|
46
|
+
` ${NATIVE_END}\n\n` +
|
|
47
|
+
`Add these markers to your vibefast-features.ts file where feature links should be inserted.`);
|
|
44
48
|
}
|
|
45
49
|
// Check if link already exists by route
|
|
46
|
-
const routeCheck = link.href.replace(
|
|
50
|
+
const routeCheck = link.href.replace("/(root)/(protected)/", "/");
|
|
47
51
|
const safeRoute = escapeTsLiteral(routeCheck);
|
|
48
52
|
if (content.includes(`route: '${safeRoute}'`)) {
|
|
49
53
|
return false; // Already exists, idempotent
|
|
50
54
|
}
|
|
51
55
|
// Create feature object for the vibefast-features.ts file
|
|
52
|
-
const featureId = safeNavId(link.href.split(
|
|
56
|
+
const featureId = safeNavId(link.href.split("/").pop() || "feature");
|
|
53
57
|
const navItem = ` {
|
|
54
58
|
id: '${featureId}',
|
|
55
59
|
title: '${escapeTsLiteral(link.label)}',
|
|
56
|
-
icon: '${escapeTsLiteral(link.icon ||
|
|
57
|
-
color: '${escapeTsLiteral(link.color ||
|
|
60
|
+
icon: '${escapeTsLiteral(link.icon || "📦")}',
|
|
61
|
+
color: '${escapeTsLiteral(link.color || "#6366F1")}',
|
|
58
62
|
description: '${escapeTsLiteral(`${link.label} feature`)}',
|
|
59
63
|
route: '${safeRoute}',
|
|
60
64
|
testID: '${featureId}-button',
|
|
@@ -65,7 +69,7 @@ export async function insertNavLinkNative(filePath, link, options) {
|
|
|
65
69
|
const after = content.slice(endIdx);
|
|
66
70
|
const between = content.slice(startIdx, endIdx);
|
|
67
71
|
// Check if there are existing features (look for opening brace)
|
|
68
|
-
const hasExistingFeatures = between.includes(
|
|
72
|
+
const hasExistingFeatures = between.includes("{");
|
|
69
73
|
let newContent;
|
|
70
74
|
if (hasExistingFeatures) {
|
|
71
75
|
// Add comma after new item since there are more items
|
|
@@ -82,15 +86,15 @@ export async function insertNavLinkNative(filePath, link, options) {
|
|
|
82
86
|
}
|
|
83
87
|
export async function removeNavLinkNative(filePath, href, options) {
|
|
84
88
|
const content = await readFileContent(filePath);
|
|
85
|
-
const routeCheck = href.replace(
|
|
89
|
+
const routeCheck = href.replace("/(root)/(protected)/", "/");
|
|
86
90
|
const safeRoute = escapeTsLiteral(routeCheck);
|
|
87
91
|
if (!content.includes(`route: '${safeRoute}'`)) {
|
|
88
92
|
return false; // Not found
|
|
89
93
|
}
|
|
90
94
|
// Use regex to remove the entire feature object including trailing comma
|
|
91
95
|
// Match: { ... route: '/charts' ... }, or { ... route: '/charts' ... }
|
|
92
|
-
const featureObjectRegex = new RegExp(`\\s*\\{[^}]*route:\\s*'${escapeForRegex(safeRoute)}'[^}]*\\},?\\s*`,
|
|
93
|
-
const newContent = content.replace(featureObjectRegex,
|
|
96
|
+
const featureObjectRegex = new RegExp(`\\s*\\{[^}]*route:\\s*'${escapeForRegex(safeRoute)}'[^}]*\\},?\\s*`, "gs");
|
|
97
|
+
const newContent = content.replace(featureObjectRegex, "");
|
|
94
98
|
if (!options?.dryRun) {
|
|
95
99
|
await writeFileContent(filePath, newContent, { force: true });
|
|
96
100
|
}
|
|
@@ -128,18 +132,18 @@ export async function removeNavLinkWeb(filePath, href, options) {
|
|
|
128
132
|
if (!content.includes(`href="${safeHref}"`)) {
|
|
129
133
|
return false;
|
|
130
134
|
}
|
|
131
|
-
const lines = content.split(
|
|
135
|
+
const lines = content.split("\n");
|
|
132
136
|
const filtered = [];
|
|
133
137
|
let skipCount = 0;
|
|
134
138
|
for (let i = 0; i < lines.length; i++) {
|
|
135
139
|
const line = lines[i];
|
|
136
140
|
if (line.includes(`href="${safeHref}"`)) {
|
|
137
141
|
let start = i;
|
|
138
|
-
while (start > 0 && !lines[start].trim().startsWith(
|
|
142
|
+
while (start > 0 && !lines[start].trim().startsWith("<Link")) {
|
|
139
143
|
start--;
|
|
140
144
|
}
|
|
141
145
|
let end = i;
|
|
142
|
-
while (end < lines.length && !lines[end].trim().startsWith(
|
|
146
|
+
while (end < lines.length && !lines[end].trim().startsWith("</Link>")) {
|
|
143
147
|
end++;
|
|
144
148
|
}
|
|
145
149
|
skipCount = end - start + 1;
|
|
@@ -153,7 +157,7 @@ export async function removeNavLinkWeb(filePath, href, options) {
|
|
|
153
157
|
filtered.push(line);
|
|
154
158
|
}
|
|
155
159
|
if (!options?.dryRun) {
|
|
156
|
-
await writeFileContent(filePath, filtered.join(
|
|
160
|
+
await writeFileContent(filePath, filtered.join("\n"), { force: true });
|
|
157
161
|
}
|
|
158
162
|
return true;
|
|
159
163
|
}
|
|
@@ -164,7 +168,21 @@ function hasSnippet(content, snippet) {
|
|
|
164
168
|
const normalized = normalizeSnippet(snippet);
|
|
165
169
|
if (!normalized)
|
|
166
170
|
return false;
|
|
167
|
-
|
|
171
|
+
// Check for exact match
|
|
172
|
+
if (content.includes(normalized)) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
// Check if this is a variable declaration (const/let/var) and the variable already exists
|
|
176
|
+
const varMatch = normalized.match(/^(const|let|var)\s+(\w+)\s*=/);
|
|
177
|
+
if (varMatch) {
|
|
178
|
+
const varName = varMatch[2];
|
|
179
|
+
// Check if this variable is already declared anywhere in the file
|
|
180
|
+
const varDeclPattern = new RegExp(`(const|let|var)\\s+${varName}\\s*=`);
|
|
181
|
+
if (varDeclPattern.test(content)) {
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
168
186
|
}
|
|
169
187
|
export async function insertEnvSnippets(filePath, startMarker, endMarker, snippets, options) {
|
|
170
188
|
if (!snippets.length) {
|
|
@@ -188,8 +206,8 @@ export async function insertEnvSnippets(filePath, startMarker, endMarker, snippe
|
|
|
188
206
|
return false;
|
|
189
207
|
}
|
|
190
208
|
const normalizedLines = toInsert
|
|
191
|
-
.map(line => line.endsWith(
|
|
192
|
-
.join(
|
|
209
|
+
.map((line) => (line.endsWith("\n") ? line : `${line}\n`))
|
|
210
|
+
.join("");
|
|
193
211
|
const insertPosition = content.indexOf(endMarker);
|
|
194
212
|
const before = content.slice(0, insertPosition);
|
|
195
213
|
const after = content.slice(insertPosition);
|
package/dist/core/codemod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codemod.js","sourceRoot":"","sources":["../../src/core/codemod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE7D,MAAM,YAAY,GAAG,qCAAqC,CAAC;AAC3D,MAAM,UAAU,GAAG,mCAAmC,CAAC;AACvD,MAAM,SAAS,GAAG,6BAA6B,CAAC;AAChD,MAAM,OAAO,GAAG,2BAA2B,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,0CAA0C,CAAC;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,wCAAwC,CAAC;AAC1E,MAAM,CAAC,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"codemod.js","sourceRoot":"","sources":["../../src/core/codemod.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface VibefastConfig {
|
|
2
|
+
projectType: "monorepo" | "native" | "web";
|
|
3
|
+
paths: {
|
|
4
|
+
native: string;
|
|
5
|
+
web: string;
|
|
6
|
+
root: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export declare function loadConfig(cwd: string): Promise<VibefastConfig>;
|
|
10
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC3C,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAWD,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2CrE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { exists } from "./fsx.js";
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
|
+
projectType: "monorepo",
|
|
6
|
+
paths: {
|
|
7
|
+
native: "apps/native",
|
|
8
|
+
web: "apps/web",
|
|
9
|
+
root: ".",
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
export async function loadConfig(cwd) {
|
|
13
|
+
const configPath = join(cwd, "vibefast.json");
|
|
14
|
+
if (await exists(configPath)) {
|
|
15
|
+
try {
|
|
16
|
+
const content = await readFile(configPath, "utf-8");
|
|
17
|
+
const userConfig = JSON.parse(content);
|
|
18
|
+
// Merge with defaults to ensure all fields exist
|
|
19
|
+
return {
|
|
20
|
+
...DEFAULT_CONFIG,
|
|
21
|
+
...userConfig,
|
|
22
|
+
paths: {
|
|
23
|
+
...DEFAULT_CONFIG.paths,
|
|
24
|
+
...(userConfig.paths || {}),
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.warn("⚠ Failed to parse vibefast.json, using defaults.");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Auto-detect if no config
|
|
33
|
+
const nativeExists = await exists(join(cwd, "apps", "native"));
|
|
34
|
+
const webExists = await exists(join(cwd, "apps", "web"));
|
|
35
|
+
if (nativeExists && !webExists) {
|
|
36
|
+
return {
|
|
37
|
+
...DEFAULT_CONFIG,
|
|
38
|
+
projectType: "native",
|
|
39
|
+
paths: { ...DEFAULT_CONFIG.paths, web: "" },
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (!nativeExists && webExists) {
|
|
43
|
+
return {
|
|
44
|
+
...DEFAULT_CONFIG,
|
|
45
|
+
projectType: "web",
|
|
46
|
+
paths: { ...DEFAULT_CONFIG.paths, native: "" },
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return DEFAULT_CONFIG;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAWlC,MAAM,cAAc,GAAmB;IACrC,WAAW,EAAE,UAAU;IACvB,KAAK,EAAE;QACL,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,GAAG;KACV;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAE9C,IAAI,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvC,iDAAiD;YACjD,OAAO;gBACL,GAAG,cAAc;gBACjB,GAAG,UAAU;gBACb,KAAK,EAAE;oBACL,GAAG,cAAc,CAAC,KAAK;oBACvB,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;iBAC5B;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzD,IAAI,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,GAAG,cAAc;YACjB,WAAW,EAAE,QAAQ;YACrB,KAAK,EAAE,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;SAC5C,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,GAAG,cAAc;YACjB,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;SAC/C,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
package/dist/core/detect.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type Target =
|
|
1
|
+
export type Target = "native" | "web";
|
|
2
2
|
/**
|
|
3
3
|
* Auto-detect project target (native/web) based on directory structure
|
|
4
4
|
*/
|
|
@@ -6,5 +6,11 @@ export declare function detectTarget(cwd?: string): Promise<Target | null>;
|
|
|
6
6
|
/**
|
|
7
7
|
* Detect package manager based on lockfile
|
|
8
8
|
*/
|
|
9
|
-
export declare function detectPackageManager(cwd?: string):
|
|
9
|
+
export declare function detectPackageManager(cwd?: string): "pnpm" | "npm" | "yarn" | "bun" | null;
|
|
10
|
+
export type Backend = "convex" | "supabase";
|
|
11
|
+
/**
|
|
12
|
+
* Detect backend type (convex/supabase) from project structure.
|
|
13
|
+
* Uses signature file first, then filesystem detection for backwards compatibility.
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectBackendType(cwd?: string): Promise<Backend>;
|
|
10
16
|
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtC;;GAEG;AACH,wBAAsB,YAAY,
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtC;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuCxB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAsB,GAC1B,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAMxC;AAED,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE5C;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
|