vybekiit 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +840 -296
- package/dist/global-skills/add-ai/SKILL.md +53 -0
- package/dist/global-skills/add-analytics/SKILL.md +65 -0
- package/dist/global-skills/add-app-clip/SKILL.md +280 -0
- package/dist/global-skills/add-app-clip/agents/openai.yaml +4 -0
- package/dist/global-skills/add-app-clip/references/native-module.md +96 -0
- package/dist/global-skills/add-blog/SKILL.md +49 -0
- package/dist/global-skills/add-crud/SKILL.md +28 -0
- package/dist/global-skills/add-files/SKILL.md +65 -0
- package/dist/global-skills/add-images/SKILL.md +64 -0
- package/dist/global-skills/add-language/SKILL.md +44 -0
- package/dist/global-skills/add-notifications/SKILL.md +61 -0
- package/dist/global-skills/add-realtime/SKILL.md +49 -0
- package/dist/global-skills/add-route/SKILL.md +28 -0
- package/dist/global-skills/add-search/SKILL.md +43 -0
- package/dist/global-skills/add-signin/SKILL.md +78 -0
- package/dist/global-skills/add-teams/SKILL.md +64 -0
- package/dist/global-skills/add-upload/SKILL.md +27 -0
- package/dist/global-skills/aws-cdk/SKILL.md +72 -0
- package/dist/global-skills/aws-cdk/references/bootstrap-and-project-setup.md +257 -0
- package/dist/global-skills/aws-cdk/references/compliance-and-drift.md +193 -0
- package/dist/global-skills/aws-cdk/references/construct-patterns.md +315 -0
- package/dist/global-skills/aws-cdk/references/import-and-migrate.md +184 -0
- package/dist/global-skills/aws-cdk/references/refactor-and-prevent-replacement.md +198 -0
- package/dist/global-skills/aws-cdk/references/troubleshooting-credentials.md +183 -0
- package/dist/global-skills/aws-cdk/references/troubleshooting-deployment.md +293 -0
- package/dist/global-skills/aws-cdk/references/troubleshooting-synth.md +274 -0
- package/dist/global-skills/aws-cdk/references/v1-to-v2-migration.md +119 -0
- package/dist/global-skills/aws-cloudformation/SKILL.md +88 -0
- package/dist/global-skills/aws-cloudformation/references/author-cloudformation-best-practices.script.md +179 -0
- package/dist/global-skills/aws-cloudformation/references/check-cloudformation-template-compliance.script.md +159 -0
- package/dist/global-skills/aws-cloudformation/references/cloudformation-pre-deploy-validation.script.md +217 -0
- package/dist/global-skills/aws-cloudformation/references/deploy-with-express-mode.script.md +271 -0
- package/dist/global-skills/aws-cloudformation/references/lookup-resource-properties.script.md +130 -0
- package/dist/global-skills/aws-cloudformation/references/troubleshoot-deployment.script.md +200 -0
- package/dist/global-skills/aws-cloudformation/references/validate-cloudformation-template.script.md +135 -0
- package/dist/global-skills/aws-serverless/SKILL.md +51 -0
- package/dist/global-skills/aws-serverless/assets/powertools-handler.py +49 -0
- package/dist/global-skills/aws-serverless/references/api-gateway.md +553 -0
- package/dist/global-skills/aws-serverless/references/architecture.md +262 -0
- package/dist/global-skills/aws-serverless/references/concurrency.md +200 -0
- package/dist/global-skills/aws-serverless/references/deployment.md +94 -0
- package/dist/global-skills/aws-serverless/references/event-sources.md +484 -0
- package/dist/global-skills/aws-serverless/references/lambda.md +548 -0
- package/dist/global-skills/aws-serverless/references/orchestration.md +449 -0
- package/dist/global-skills/aws-serverless/references/production.md +493 -0
- package/dist/global-skills/aws-serverless/references/troubleshooting.md +711 -0
- package/dist/global-skills/back-up-my-code/SKILL.md +48 -0
- package/dist/global-skills/better-auth-best-practices/SKILL.md +182 -0
- package/dist/global-skills/better-auth-security-best-practices/SKILL.md +432 -0
- package/dist/global-skills/building-native-ui/SKILL.md +377 -0
- package/dist/global-skills/building-native-ui/agents/openai.yaml +4 -0
- package/dist/global-skills/building-native-ui/references/animations.md +220 -0
- package/dist/global-skills/building-native-ui/references/controls.md +270 -0
- package/dist/global-skills/building-native-ui/references/form-sheet.md +253 -0
- package/dist/global-skills/building-native-ui/references/gradients.md +106 -0
- package/dist/global-skills/building-native-ui/references/icons.md +213 -0
- package/dist/global-skills/building-native-ui/references/media.md +198 -0
- package/dist/global-skills/building-native-ui/references/route-structure.md +229 -0
- package/dist/global-skills/building-native-ui/references/search.md +248 -0
- package/dist/global-skills/building-native-ui/references/storage.md +121 -0
- package/dist/global-skills/building-native-ui/references/tabs.md +433 -0
- package/dist/global-skills/building-native-ui/references/toolbar-and-headers.md +284 -0
- package/dist/global-skills/building-native-ui/references/visual-effects.md +197 -0
- package/dist/global-skills/building-native-ui/references/webgpu-three.md +605 -0
- package/dist/global-skills/building-native-ui/references/zoom-transitions.md +158 -0
- package/dist/global-skills/buy-domain/SKILL.md +64 -0
- package/dist/global-skills/check-safety/SKILL.md +94 -0
- package/dist/global-skills/claimable-postgres/SKILL.md +249 -0
- package/dist/global-skills/configure-capabilities/SKILL.md +38 -0
- package/dist/global-skills/connect-account/SKILL.md +64 -0
- package/dist/global-skills/connect-account-backend/SKILL.md +41 -0
- package/dist/global-skills/create-auth-skill/SKILL.md +321 -0
- package/dist/global-skills/design-my-data/SKILL.md +48 -0
- package/dist/global-skills/doctor/SKILL.md +84 -0
- package/dist/global-skills/eas-app-stores/SKILL.md +152 -0
- package/dist/global-skills/eas-app-stores/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/dist/global-skills/eas-app-stores/references/ios-app-store.md +371 -0
- package/dist/global-skills/eas-app-stores/references/play-store.md +246 -0
- package/dist/global-skills/eas-app-stores/references/testflight.md +58 -0
- package/dist/global-skills/eas-app-stores/references/workflows.md +120 -0
- package/dist/global-skills/eas-hosting/SKILL.md +423 -0
- package/dist/global-skills/eas-hosting/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-observe/SKILL.md +32 -0
- package/dist/global-skills/eas-observe/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-observe/references/metrics.md +47 -0
- package/dist/global-skills/eas-observe/references/queries.md +342 -0
- package/dist/global-skills/eas-observe/references/setup.md +317 -0
- package/dist/global-skills/eas-simulator/SKILL.md +156 -0
- package/dist/global-skills/eas-simulator/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-simulator/references/controllers.md +67 -0
- package/dist/global-skills/eas-simulator/references/run-your-app.md +185 -0
- package/dist/global-skills/eas-simulator/references/troubleshooting.md +38 -0
- package/dist/global-skills/eas-update-insights/SKILL.md +230 -0
- package/dist/global-skills/eas-update-insights/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/dist/global-skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/dist/global-skills/eas-workflows/SKILL.md +94 -0
- package/dist/global-skills/eas-workflows/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-workflows/scripts/fetch.js +109 -0
- package/dist/global-skills/eas-workflows/scripts/package.json +11 -0
- package/dist/global-skills/eas-workflows/scripts/validate.js +84 -0
- package/dist/global-skills/email-best-practices/SKILL.md +73 -0
- package/dist/global-skills/expo-api-routes/SKILL.md +368 -0
- package/dist/global-skills/expo-api-routes/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-app-clip/SKILL.md +282 -0
- package/dist/global-skills/expo-app-clip/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-app-clip/references/native-module.md +96 -0
- package/dist/global-skills/expo-brownfield/SKILL.md +54 -0
- package/dist/global-skills/expo-brownfield/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-brownfield/references/brownfield-integrated.md +526 -0
- package/dist/global-skills/expo-brownfield/references/brownfield-isolated.md +402 -0
- package/dist/global-skills/expo-brownfield/references/comparison.md +63 -0
- package/dist/global-skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/dist/global-skills/expo-cicd-workflows/SKILL.md +92 -0
- package/dist/global-skills/expo-cicd-workflows/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-cicd-workflows/scripts/fetch.js +109 -0
- package/dist/global-skills/expo-cicd-workflows/scripts/package.json +11 -0
- package/dist/global-skills/expo-cicd-workflows/scripts/validate.js +84 -0
- package/dist/global-skills/expo-data-fetching/SKILL.md +449 -0
- package/dist/global-skills/expo-data-fetching/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
- package/dist/global-skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
- package/dist/global-skills/expo-deployment/SKILL.md +167 -0
- package/dist/global-skills/expo-deployment/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-deployment/references/app-store-metadata.md +497 -0
- package/dist/global-skills/expo-deployment/references/ios-app-store.md +371 -0
- package/dist/global-skills/expo-deployment/references/play-store.md +246 -0
- package/dist/global-skills/expo-deployment/references/testflight.md +58 -0
- package/dist/global-skills/expo-deployment/references/workflows.md +160 -0
- package/dist/global-skills/expo-dev-client/SKILL.md +174 -0
- package/dist/global-skills/expo-dev-client/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-dom/SKILL.md +417 -0
- package/dist/global-skills/expo-dom/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-examples/SKILL.md +99 -0
- package/dist/global-skills/expo-examples/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-examples/references/catalog.md +105 -0
- package/dist/global-skills/expo-module/SKILL.md +141 -0
- package/dist/global-skills/expo-module/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-module/references/config-plugin.md +90 -0
- package/dist/global-skills/expo-module/references/create-expo-module.md +206 -0
- package/dist/global-skills/expo-module/references/lifecycle.md +127 -0
- package/dist/global-skills/expo-module/references/module-config.md +48 -0
- package/dist/global-skills/expo-module/references/native-module.md +286 -0
- package/dist/global-skills/expo-module/references/native-view.md +171 -0
- package/dist/global-skills/expo-native-ui/SKILL.md +181 -0
- package/dist/global-skills/expo-native-ui/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-native-ui/references/animations.md +220 -0
- package/dist/global-skills/expo-native-ui/references/controls.md +270 -0
- package/dist/global-skills/expo-native-ui/references/gradients.md +106 -0
- package/dist/global-skills/expo-native-ui/references/icons.md +213 -0
- package/dist/global-skills/expo-native-ui/references/media.md +198 -0
- package/dist/global-skills/expo-native-ui/references/storage.md +121 -0
- package/dist/global-skills/expo-native-ui/references/visual-effects.md +197 -0
- package/dist/global-skills/expo-native-ui/references/webgpu-three.md +605 -0
- package/dist/global-skills/expo-observe/SKILL.md +30 -0
- package/dist/global-skills/expo-observe/references/metrics.md +47 -0
- package/dist/global-skills/expo-observe/references/queries.md +342 -0
- package/dist/global-skills/expo-observe/references/setup.md +317 -0
- package/dist/global-skills/expo-router/SKILL.md +230 -0
- package/dist/global-skills/expo-router/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-router/references/form-sheet.md +253 -0
- package/dist/global-skills/expo-router/references/route-structure.md +229 -0
- package/dist/global-skills/expo-router/references/search.md +248 -0
- package/dist/global-skills/expo-router/references/tabs.md +433 -0
- package/dist/global-skills/expo-router/references/toolbar-and-headers.md +284 -0
- package/dist/global-skills/expo-router/references/zoom-transitions.md +158 -0
- package/dist/global-skills/expo-skill-eval/SKILL.md +314 -0
- package/dist/global-skills/expo-skill-eval/agents/visual-grader.md +52 -0
- package/dist/global-skills/expo-skill-eval/references/design-rubric.md +45 -0
- package/dist/global-skills/expo-skill-eval/references/runtime-matrix.md +34 -0
- package/dist/global-skills/expo-skill-eval/scripts/check-static.sh +64 -0
- package/dist/global-skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
- package/dist/global-skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
- package/dist/global-skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
- package/dist/global-skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
- package/dist/global-skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
- package/dist/global-skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
- package/dist/global-skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
- package/dist/global-skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
- package/dist/global-skills/expo-skill-feedback/SKILL.md +54 -0
- package/dist/global-skills/expo-skill-feedback/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-skill-feedback/scripts/skill-event.cjs +180 -0
- package/dist/global-skills/expo-skill-feedback/scripts/skill-feedback.cjs +118 -0
- package/dist/global-skills/expo-skill-feedback/scripts/telemetry.cjs +65 -0
- package/dist/global-skills/expo-skill-feedback/scripts/telemetry_common.cjs +171 -0
- package/dist/global-skills/expo-tailwind-setup/SKILL.md +480 -0
- package/dist/global-skills/expo-tailwind-setup/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-ui/SKILL.md +47 -0
- package/dist/global-skills/expo-ui/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-ui/references/drop-in-replacements.md +27 -0
- package/dist/global-skills/expo-ui/references/jetpack-compose.md +73 -0
- package/dist/global-skills/expo-ui/references/swift-ui.md +73 -0
- package/dist/global-skills/expo-ui/references/universal.md +73 -0
- package/dist/global-skills/expo-ui/scripts/list-components.js +193 -0
- package/dist/global-skills/expo-upgrade/SKILL.md +134 -0
- package/dist/global-skills/expo-upgrade/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
- package/dist/global-skills/expo-upgrade/references/expo-av-to-video.md +160 -0
- package/dist/global-skills/expo-upgrade/references/native-tabs.md +124 -0
- package/dist/global-skills/expo-upgrade/references/new-architecture.md +79 -0
- package/dist/global-skills/expo-upgrade/references/react-19.md +79 -0
- package/dist/global-skills/expo-upgrade/references/react-compiler.md +59 -0
- package/dist/global-skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
- package/dist/global-skills/expo-web-to-native/SKILL.md +83 -0
- package/dist/global-skills/expo-web-to-native/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-web-to-native/references/false-friends.md +119 -0
- package/dist/global-skills/expo-web-to-native/references/native-patterns.md +39 -0
- package/dist/global-skills/expo-web-to-native/references/run-as-goal.md +48 -0
- package/dist/global-skills/expo-web-to-native/references/verify-on-device.md +45 -0
- package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +165 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/flutter_setup.md +95 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/ios_setup.md +156 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_android.md +157 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_web.md +186 -0
- package/dist/global-skills/firebase-app-hosting-basics/SKILL.md +73 -0
- package/dist/global-skills/firebase-app-hosting-basics/references/cli_commands.md +85 -0
- package/dist/global-skills/firebase-app-hosting-basics/references/configuration.md +59 -0
- package/dist/global-skills/firebase-app-hosting-basics/references/emulation.md +59 -0
- package/dist/global-skills/firebase-auth-basics/SKILL.md +118 -0
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_android.md +160 -0
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_web.md +301 -0
- package/dist/global-skills/firebase-auth-basics/references/flutter_setup.md +149 -0
- package/dist/global-skills/firebase-auth-basics/references/ios_setup.md +87 -0
- package/dist/global-skills/firebase-auth-basics/references/security_rules.md +49 -0
- package/dist/global-skills/firebase-basics/SKILL.md +148 -0
- package/dist/global-skills/firebase-basics/references/android_setup.md +41 -0
- package/dist/global-skills/firebase-basics/references/firebase-cli-guide.md +18 -0
- package/dist/global-skills/firebase-basics/references/firebase-service-init.md +20 -0
- package/dist/global-skills/firebase-basics/references/flutter_setup.md +143 -0
- package/dist/global-skills/firebase-basics/references/ios_setup.md +113 -0
- package/dist/global-skills/firebase-basics/references/local-env-setup.md +80 -0
- package/dist/global-skills/firebase-basics/references/refresh/android_studio.md +41 -0
- package/dist/global-skills/firebase-basics/references/refresh/antigravity.md +64 -0
- package/dist/global-skills/firebase-basics/references/refresh/claude.md +12 -0
- package/dist/global-skills/firebase-basics/references/refresh/gemini-cli.md +13 -0
- package/dist/global-skills/firebase-basics/references/refresh/other-agents.md +67 -0
- package/dist/global-skills/firebase-basics/references/setup/android_studio.md +23 -0
- package/dist/global-skills/firebase-basics/references/setup/antigravity.md +98 -0
- package/dist/global-skills/firebase-basics/references/setup/claude_code.md +45 -0
- package/dist/global-skills/firebase-basics/references/setup/cursor.md +93 -0
- package/dist/global-skills/firebase-basics/references/setup/gemini_cli.md +53 -0
- package/dist/global-skills/firebase-basics/references/setup/github_copilot.md +104 -0
- package/dist/global-skills/firebase-basics/references/setup/other_agents.md +99 -0
- package/dist/global-skills/firebase-basics/references/web_setup.md +77 -0
- package/dist/global-skills/firebase-crashlytics/SKILL.md +42 -0
- package/dist/global-skills/firebase-crashlytics/references/android_setup.md +152 -0
- package/dist/global-skills/firebase-crashlytics/references/ios_setup.md +115 -0
- package/dist/global-skills/firebase-data-connect/SKILL.md +191 -0
- package/dist/global-skills/firebase-data-connect/examples.md +638 -0
- package/dist/global-skills/firebase-data-connect/reference/cloud_functions.md +184 -0
- package/dist/global-skills/firebase-data-connect/reference/config.md +271 -0
- package/dist/global-skills/firebase-data-connect/reference/data_seeding.md +185 -0
- package/dist/global-skills/firebase-data-connect/reference/native_sql.md +170 -0
- package/dist/global-skills/firebase-data-connect/reference/operations.md +385 -0
- package/dist/global-skills/firebase-data-connect/reference/realtime.md +210 -0
- package/dist/global-skills/firebase-data-connect/reference/schema.md +290 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_admin_node.md +141 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_android.md +126 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_flutter.md +134 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_ios.md +157 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_web.md +146 -0
- package/dist/global-skills/firebase-data-connect/reference/search.md +264 -0
- package/dist/global-skills/firebase-data-connect/reference/security.md +295 -0
- package/dist/global-skills/firebase-data-connect/templates.md +318 -0
- package/dist/global-skills/firebase-firestore/SKILL.md +89 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/android_sdk_usage.md +230 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/data_model.md +66 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/flutter_setup.md +180 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/indexes.md +135 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/ios_setup.md +189 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/provisioning.md +118 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/python_sdk_usage.md +138 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/security_rules.md +577 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/web_sdk_usage.md +127 -0
- package/dist/global-skills/firebase-firestore/references/standard/android_sdk_usage.md +193 -0
- package/dist/global-skills/firebase-firestore/references/standard/flutter_setup.md +176 -0
- package/dist/global-skills/firebase-firestore/references/standard/indexes.md +113 -0
- package/dist/global-skills/firebase-firestore/references/standard/ios_setup.md +174 -0
- package/dist/global-skills/firebase-firestore/references/standard/provisioning.md +110 -0
- package/dist/global-skills/firebase-firestore/references/standard/security_rules.md +577 -0
- package/dist/global-skills/firebase-firestore/references/standard/web_sdk_usage.md +192 -0
- package/dist/global-skills/firebase-hosting-basics/SKILL.md +64 -0
- package/dist/global-skills/firebase-hosting-basics/references/configuration.md +115 -0
- package/dist/global-skills/firebase-hosting-basics/references/deploying.md +48 -0
- package/dist/global-skills/firebase-remote-config-basics/SKILL.md +124 -0
- package/dist/global-skills/firebase-remote-config-basics/references/android_setup.md +91 -0
- package/dist/global-skills/firebase-remote-config-basics/references/ios_setup.md +89 -0
- package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +70 -0
- package/dist/global-skills/go-live/SKILL.md +90 -0
- package/dist/global-skills/harden/SKILL.md +101 -0
- package/dist/global-skills/instrument-feature-flags/SKILL.md +88 -0
- package/dist/global-skills/instrument-feature-flags/references/adding-feature-flag-code.md +3578 -0
- package/dist/global-skills/instrument-feature-flags/references/android.md +146 -0
- package/dist/global-skills/instrument-feature-flags/references/api.md +194 -0
- package/dist/global-skills/instrument-feature-flags/references/best-practices.md +231 -0
- package/dist/global-skills/instrument-feature-flags/references/django.md +263 -0
- package/dist/global-skills/instrument-feature-flags/references/dotnet.md +763 -0
- package/dist/global-skills/instrument-feature-flags/references/elixir.md +47 -0
- package/dist/global-skills/instrument-feature-flags/references/flask.md +131 -0
- package/dist/global-skills/instrument-feature-flags/references/flutter.md +212 -0
- package/dist/global-skills/instrument-feature-flags/references/go.md +208 -0
- package/dist/global-skills/instrument-feature-flags/references/ios.md +146 -0
- package/dist/global-skills/instrument-feature-flags/references/java.md +94 -0
- package/dist/global-skills/instrument-feature-flags/references/laravel.md +170 -0
- package/dist/global-skills/instrument-feature-flags/references/next-js.md +383 -0
- package/dist/global-skills/instrument-feature-flags/references/nodejs.md +216 -0
- package/dist/global-skills/instrument-feature-flags/references/php.md +187 -0
- package/dist/global-skills/instrument-feature-flags/references/python.md +191 -0
- package/dist/global-skills/instrument-feature-flags/references/react-native.md +166 -0
- package/dist/global-skills/instrument-feature-flags/references/react.md +302 -0
- package/dist/global-skills/instrument-feature-flags/references/ruby-on-rails.md +604 -0
- package/dist/global-skills/instrument-feature-flags/references/ruby.md +200 -0
- package/dist/global-skills/instrument-feature-flags/references/rust.md +222 -0
- package/dist/global-skills/instrument-feature-flags/references/usage.md +600 -0
- package/dist/global-skills/instrument-feature-flags/references/web.md +193 -0
- package/dist/global-skills/instrument-product-analytics/SKILL.md +139 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-android.md +1639 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-angular.md +944 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-hybrid.md +1001 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-ssr.md +1004 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-static.md +720 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-view-transitions.md +810 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-django.md +1167 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-expo.md +1412 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-fastapi.md +1585 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-flask.md +1208 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-laravel.md +2267 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-next-app-router.md +712 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-next-pages-router.md +767 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-3-6.md +939 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-4.md +1078 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-php.md +527 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-python.md +481 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-native.md +1823 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-6.md +582 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-data.md +892 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-declarative.md +649 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-framework.md +1218 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-tanstack-router-code-based.md +793 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-tanstack-router-file-based.md +780 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby-on-rails.md +1320 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby.md +452 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-sveltekit.md +854 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-swift.md +665 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-tanstack-start.md +1199 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-vue-3.md +910 -0
- package/dist/global-skills/instrument-product-analytics/references/android.md +811 -0
- package/dist/global-skills/instrument-product-analytics/references/angular.md +376 -0
- package/dist/global-skills/instrument-product-analytics/references/astro.md +165 -0
- package/dist/global-skills/instrument-product-analytics/references/configuration.md +299 -0
- package/dist/global-skills/instrument-product-analytics/references/django.md +263 -0
- package/dist/global-skills/instrument-product-analytics/references/dotnet.md +763 -0
- package/dist/global-skills/instrument-product-analytics/references/elixir.md +414 -0
- package/dist/global-skills/instrument-product-analytics/references/flask.md +131 -0
- package/dist/global-skills/instrument-product-analytics/references/flutter.md +845 -0
- package/dist/global-skills/instrument-product-analytics/references/go.md +567 -0
- package/dist/global-skills/instrument-product-analytics/references/identify-users.md +272 -0
- package/dist/global-skills/instrument-product-analytics/references/ios.md +154 -0
- package/dist/global-skills/instrument-product-analytics/references/laravel.md +170 -0
- package/dist/global-skills/instrument-product-analytics/references/next-js.md +383 -0
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js-3-6.md +244 -0
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js.md +253 -0
- package/dist/global-skills/instrument-product-analytics/references/php.md +646 -0
- package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +1675 -0
- package/dist/global-skills/instrument-product-analytics/references/python.md +898 -0
- package/dist/global-skills/instrument-product-analytics/references/react-native.md +1338 -0
- package/dist/global-skills/instrument-product-analytics/references/react-router-v6.md +376 -0
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-data-mode.md +364 -0
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-declarative-mode.md +376 -0
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-framework-mode.md +479 -0
- package/dist/global-skills/instrument-product-analytics/references/ruby-on-rails.md +604 -0
- package/dist/global-skills/instrument-product-analytics/references/ruby.md +759 -0
- package/dist/global-skills/instrument-product-analytics/references/svelte.md +234 -0
- package/dist/global-skills/instrument-product-analytics/references/tanstack-start.md +193 -0
- package/dist/global-skills/instrument-product-analytics/references/usage.md +600 -0
- package/dist/global-skills/instrument-product-analytics/references/vue-js.md +306 -0
- package/dist/global-skills/manifest.json +125 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/SKILL.md +284 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/connection-configs.md +298 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/development-workflow.md +304 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/mcp-troubleshooting.md +55 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/output-diagnostics.md +150 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/pipeline-patterns.md +457 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/sizing-and-parallelism.md +178 -0
- package/dist/global-skills/mongodb-connection/SKILL.md +201 -0
- package/dist/global-skills/mongodb-connection/references/monitoring-guide.md +191 -0
- package/dist/global-skills/mongodb-mcp-setup/SKILL.md +324 -0
- package/dist/global-skills/mongodb-natural-language-querying/SKILL.md +195 -0
- package/dist/global-skills/mongodb-query-optimizer/SKILL.md +150 -0
- package/dist/global-skills/mongodb-query-optimizer/references/aggregation-optimization.md +210 -0
- package/dist/global-skills/mongodb-query-optimizer/references/antipattern-examples.md +74 -0
- package/dist/global-skills/mongodb-query-optimizer/references/core-indexing-principles.md +134 -0
- package/dist/global-skills/mongodb-query-optimizer/references/update-query-examples.md +39 -0
- package/dist/global-skills/mongodb-schema-design/SKILL.md +181 -0
- package/dist/global-skills/mongodb-schema-design/references/antipattern-excessive-lookups.md +84 -0
- package/dist/global-skills/mongodb-schema-design/references/antipattern-unnecessary-collections.md +91 -0
- package/dist/global-skills/mongodb-schema-design/references/antipattern-unnecessary-indexes.md +95 -0
- package/dist/global-skills/mongodb-schema-design/references/fundamental-document-model.md +91 -0
- package/dist/global-skills/mongodb-schema-design/references/fundamental-document-size.md +226 -0
- package/dist/global-skills/mongodb-schema-design/references/fundamental-embed-vs-reference.md +418 -0
- package/dist/global-skills/mongodb-schema-design/references/fundamental-schema-validation.md +131 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-approximation.md +80 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-archive.md +143 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-attribute.md +77 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-bucket.md +102 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-computed.md +162 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-document-versioning.md +166 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-extended-reference.md +72 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-outlier.md +159 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-polymorphic.md +167 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-schema-versioning.md +273 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-time-series-collections.md +190 -0
- package/dist/global-skills/mongodb-schema-design/references/source-query-stats.md +123 -0
- package/dist/global-skills/mongodb-schema-design/references/source-slow-query-logs.md +63 -0
- package/dist/global-skills/mongodb-search-and-ai/SKILL.md +142 -0
- package/dist/global-skills/mongodb-search-and-ai/references/hybrid-search.md +697 -0
- package/dist/global-skills/mongodb-search-and-ai/references/lexical-search-indexing.md +584 -0
- package/dist/global-skills/mongodb-search-and-ai/references/lexical-search-querying.md +636 -0
- package/dist/global-skills/mongodb-search-and-ai/references/vector-search.md +746 -0
- package/dist/global-skills/native-data-fetching/SKILL.md +505 -0
- package/dist/global-skills/native-data-fetching/agents/openai.yaml +4 -0
- package/dist/global-skills/native-data-fetching/references/expo-router-loaders.md +341 -0
- package/dist/global-skills/neon/SKILL.md +343 -0
- package/dist/global-skills/neon-ai-gateway/SKILL.md +236 -0
- package/dist/global-skills/neon-functions/SKILL.md +490 -0
- package/dist/global-skills/neon-functions/references/ai-sdk.md +139 -0
- package/dist/global-skills/neon-functions/references/hono-websockets.md +145 -0
- package/dist/global-skills/neon-functions/references/mastra-studio.md +127 -0
- package/dist/global-skills/neon-functions/references/mcp.md +137 -0
- package/dist/global-skills/neon-functions/references/sentry.md +131 -0
- package/dist/global-skills/neon-functions/references/sse.md +143 -0
- package/dist/global-skills/neon-object-storage/SKILL.md +197 -0
- package/dist/global-skills/neon-postgres/SKILL.md +376 -0
- package/dist/global-skills/neon-postgres-branches/SKILL.md +281 -0
- package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +247 -0
- package/dist/global-skills/onboarding/SKILL.md +101 -0
- package/dist/global-skills/plan-my-idea/SKILL.md +67 -0
- package/dist/global-skills/publish-app/SKILL.md +72 -0
- package/dist/global-skills/publish-extension/SKILL.md +47 -0
- package/dist/global-skills/resend/SKILL.md +294 -0
- package/dist/global-skills/resend/references/api-keys.md +98 -0
- package/dist/global-skills/resend/references/automations.md +228 -0
- package/dist/global-skills/resend/references/broadcasts.md +125 -0
- package/dist/global-skills/resend/references/contact-properties.md +111 -0
- package/dist/global-skills/resend/references/contacts.md +174 -0
- package/dist/global-skills/resend/references/domains.md +179 -0
- package/dist/global-skills/resend/references/events.md +119 -0
- package/dist/global-skills/resend/references/fetch-all-templates.mjs +37 -0
- package/dist/global-skills/resend/references/installation.md +142 -0
- package/dist/global-skills/resend/references/logs.md +161 -0
- package/dist/global-skills/resend/references/receiving.md +287 -0
- package/dist/global-skills/resend/references/segments.md +77 -0
- package/dist/global-skills/resend/references/sending/batch-email-examples.md +807 -0
- package/dist/global-skills/resend/references/sending/best-practices.md +453 -0
- package/dist/global-skills/resend/references/sending/email-management.md +135 -0
- package/dist/global-skills/resend/references/sending/overview.md +209 -0
- package/dist/global-skills/resend/references/sending/single-email-examples.md +470 -0
- package/dist/global-skills/resend/references/templates.md +202 -0
- package/dist/global-skills/resend/references/topics.md +104 -0
- package/dist/global-skills/resend/references/webhooks.md +317 -0
- package/dist/global-skills/reset-password/SKILL.md +59 -0
- package/dist/global-skills/save-data/SKILL.md +70 -0
- package/dist/global-skills/sentry-sdk-setup/SKILL.md +116 -0
- package/dist/global-skills/sentry-workflow/SKILL.md +32 -0
- package/dist/global-skills/setup-email/SKILL.md +69 -0
- package/dist/global-skills/setup-payments/SKILL.md +82 -0
- package/dist/global-skills/setup-sms/SKILL.md +51 -0
- package/dist/global-skills/sign-in-with-email-link/SKILL.md +53 -0
- package/dist/global-skills/sign-in-with-google/SKILL.md +68 -0
- package/dist/global-skills/sign-in-with-phone/SKILL.md +53 -0
- package/dist/global-skills/stripe-best-practices/SKILL.md +48 -0
- package/dist/global-skills/stripe-best-practices/references/billing.md +58 -0
- package/dist/global-skills/stripe-best-practices/references/connect.md +173 -0
- package/dist/global-skills/stripe-best-practices/references/payments.md +79 -0
- package/dist/global-skills/stripe-best-practices/references/security.md +109 -0
- package/dist/global-skills/stripe-best-practices/references/tax.md +37 -0
- package/dist/global-skills/stripe-best-practices/references/treasury.md +16 -0
- package/dist/global-skills/supabase/CHANGELOG.md +53 -0
- package/dist/global-skills/supabase/SKILL.md +145 -0
- package/dist/global-skills/supabase/assets/feedback-issue-template.md +17 -0
- package/dist/global-skills/supabase/references/skill-feedback.md +17 -0
- package/dist/global-skills/supabase-postgres-best-practices/CHANGELOG.md +43 -0
- package/dist/global-skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/dist/global-skills/track-errors/SKILL.md +67 -0
- package/dist/global-skills/update-kit/SKILL.md +75 -0
- package/dist/global-skills/upgrading-expo/SKILL.md +134 -0
- package/dist/global-skills/upgrading-expo/agents/openai.yaml +4 -0
- package/dist/global-skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
- package/dist/global-skills/upgrading-expo/references/expo-av-to-video.md +160 -0
- package/dist/global-skills/upgrading-expo/references/native-tabs.md +124 -0
- package/dist/global-skills/upgrading-expo/references/new-architecture.md +79 -0
- package/dist/global-skills/upgrading-expo/references/react-19.md +79 -0
- package/dist/global-skills/upgrading-expo/references/react-compiler.md +59 -0
- package/dist/global-skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
- package/dist/global-skills/use-dom/SKILL.md +417 -0
- package/dist/global-skills/use-dom/agents/openai.yaml +4 -0
- package/dist/global-skills/use-kit-mcp/SKILL.md +100 -0
- package/dist/global-skills/use-railway/SKILL.md +357 -0
- package/dist/global-skills/use-railway/references/analyze-db-mongo.md +84 -0
- package/dist/global-skills/use-railway/references/analyze-db-mysql.md +254 -0
- package/dist/global-skills/use-railway/references/analyze-db-postgres.md +479 -0
- package/dist/global-skills/use-railway/references/analyze-db-redis.md +208 -0
- package/dist/global-skills/use-railway/references/analyze-db.md +344 -0
- package/dist/global-skills/use-railway/references/configure.md +359 -0
- package/dist/global-skills/use-railway/references/deploy.md +225 -0
- package/dist/global-skills/use-railway/references/feature-flags.md +89 -0
- package/dist/global-skills/use-railway/references/iac.md +108 -0
- package/dist/global-skills/use-railway/references/operate.md +273 -0
- package/dist/global-skills/use-railway/references/request.md +262 -0
- package/dist/global-skills/use-railway/references/sandbox.md +167 -0
- package/dist/global-skills/use-railway/references/setup.md +364 -0
- package/dist/global-skills/use-railway/scripts/analyze-mongo.py +1549 -0
- package/dist/global-skills/use-railway/scripts/analyze-mysql.py +1195 -0
- package/dist/global-skills/use-railway/scripts/analyze-postgres.py +3058 -0
- package/dist/global-skills/use-railway/scripts/analyze-redis.py +1090 -0
- package/dist/global-skills/use-railway/scripts/dal.py +671 -0
- package/dist/global-skills/use-railway/scripts/enable-pg-stats.py +170 -0
- package/dist/global-skills/use-railway/scripts/pg-extensions.py +370 -0
- package/dist/global-skills/use-railway/scripts/railway-api.sh +52 -0
- package/dist/global-skills/vercel-composition-patterns/AGENTS.md +946 -0
- package/dist/global-skills/vercel-composition-patterns/README.md +60 -0
- package/dist/global-skills/vercel-composition-patterns/SKILL.md +89 -0
- package/dist/global-skills/vercel-composition-patterns/metadata.json +11 -0
- package/dist/global-skills/vercel-composition-patterns/rules/_sections.md +29 -0
- package/dist/global-skills/vercel-composition-patterns/rules/_template.md +24 -0
- package/dist/global-skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/dist/global-skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/dist/global-skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/dist/global-skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/dist/global-skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/dist/global-skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/dist/global-skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/dist/global-skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/dist/global-skills/vercel-react-best-practices/AGENTS.md +3810 -0
- package/dist/global-skills/vercel-react-best-practices/README.md +123 -0
- package/dist/global-skills/vercel-react-best-practices/SKILL.md +149 -0
- package/dist/global-skills/vercel-react-best-practices/metadata.json +15 -0
- package/dist/global-skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/dist/global-skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/dist/global-skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/dist/global-skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/global-skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/dist/global-skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/global-skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/global-skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/global-skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/global-skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/dist/global-skills/web-to-native/SKILL.md +83 -0
- package/dist/global-skills/web-to-native/references/false-friends.md +119 -0
- package/dist/global-skills/web-to-native/references/native-patterns.md +39 -0
- package/dist/global-skills/web-to-native/references/run-as-goal.md +48 -0
- package/dist/global-skills/web-to-native/references/verify-on-device.md +45 -0
- package/dist/global-skills/wire-auth/SKILL.md +28 -0
- package/dist/global-skills/wire-database/SKILL.md +28 -0
- package/dist/global-skills/wire-email/SKILL.md +27 -0
- package/dist/global-skills/wire-payments/SKILL.md +27 -0
- package/dist/global-skills/workers-best-practices/SKILL.md +127 -0
- package/dist/global-skills/workers-best-practices/references/review.md +174 -0
- package/dist/global-skills/workers-best-practices/references/rules.md +463 -0
- package/dist/global-skills/wrangler/SKILL.md +922 -0
- package/dist/global-skills/xcode-project-setup/SKILL.md +140 -0
- package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Package.resolved +41 -0
- package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Package.swift +17 -0
- package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Sources/main.swift +232 -0
- package/package.json +21 -20
- package/LICENSE.md +0 -47
- package/dist/index.js +0 -21593
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Web SDK Usage (Enterprise Native Mode)
|
|
2
|
+
|
|
3
|
+
This guide focuses on the **Modular Web SDK** (v9+) designed for tree-shaking
|
|
4
|
+
and efficiency.
|
|
5
|
+
|
|
6
|
+
______________________________________________________________________
|
|
7
|
+
|
|
8
|
+
## 1. Initialization
|
|
9
|
+
|
|
10
|
+
Initialize the SDK and Firestore instance:
|
|
11
|
+
|
|
12
|
+
```javascript
|
|
13
|
+
import { initializeApp } from "firebase/app";
|
|
14
|
+
import { getFirestore } from "firebase/firestore";
|
|
15
|
+
|
|
16
|
+
const firebaseConfig = {
|
|
17
|
+
// Retrieve values using 'firebase apps:sdkconfig web <app-id>'
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const app = initializeApp(firebaseConfig);
|
|
21
|
+
const db = getFirestore(app);
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
______________________________________________________________________
|
|
25
|
+
|
|
26
|
+
## 2. Decision Framework: Pipelines vs. Standard Queries
|
|
27
|
+
|
|
28
|
+
> [!IMPORTANT] **Querying Preference: Use Pipelines** Pipelines are
|
|
29
|
+
> significantly more powerful than standard queries and should always be your
|
|
30
|
+
> default architectural choice.
|
|
31
|
+
|
|
32
|
+
### Rules & Accountability
|
|
33
|
+
|
|
34
|
+
1. **Check API References:** Always read `pipeline.d.ts` in
|
|
35
|
+
`node_modules/@firebase/firestore/dist/lite/firestore/src/lite-api/` before
|
|
36
|
+
querying. Reference `expressions.d.ts` in the same folder only when verifying
|
|
37
|
+
specific expressions, and never assume they exist.
|
|
38
|
+
1. **Shift Processing to Backend:** Always aim to transform and filter data
|
|
39
|
+
dynamically at the database level via pipeline stages. Avoid local Javascript
|
|
40
|
+
arrays mapping, sorting, or aggregating client-side.
|
|
41
|
+
1. **Reverting to Standard Queries:** Standard `collection.where()` queries and
|
|
42
|
+
real-time listeners are an EXCEPTION. Use them only when real-time snapshots
|
|
43
|
+
or offline querying/caching are absolute application requirements. When doing
|
|
44
|
+
so, explicitly document the reason in your response.
|
|
45
|
+
|
|
46
|
+
______________________________________________________________________
|
|
47
|
+
|
|
48
|
+
## 3. Pipeline Examples
|
|
49
|
+
|
|
50
|
+
### Relational Joins Pattern
|
|
51
|
+
|
|
52
|
+
When building data logic for relationships, use pipelines to perform joins at
|
|
53
|
+
the database level instead of manual client-side lookups. - Use `.define()` to
|
|
54
|
+
bind alias parameters. - Invoke `.addFields()` incorporating a new subquery
|
|
55
|
+
linking the documents.
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
import { field, variable } from "firebase/firestore/pipelines";
|
|
59
|
+
|
|
60
|
+
// Fetch articles and join the associated author Profile side-by-side
|
|
61
|
+
const articlesWithAuthProfile = db.pipeline().collection("articles")
|
|
62
|
+
.define(field("authorUid").as("author_id"))
|
|
63
|
+
.addFields(
|
|
64
|
+
db.pipeline().collection("users")
|
|
65
|
+
.where(field("__name__").documentId().equal(variable("author_id")))
|
|
66
|
+
.select(field("displayName"), field("avatarUrl"), field("handle"))
|
|
67
|
+
.toScalarExpression()
|
|
68
|
+
.as("author")
|
|
69
|
+
);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Full-Text Search
|
|
73
|
+
|
|
74
|
+
Leverage the database-native `.search()` stage for high-performance text
|
|
75
|
+
lookups.
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
import { documentMatches, score } from "firebase/firestore/pipelines";
|
|
79
|
+
// Execute full-text search within pipeline
|
|
80
|
+
const searchPipeline = db.pipeline()
|
|
81
|
+
.collection("articles")
|
|
82
|
+
.search({
|
|
83
|
+
query: documentMatches("machine learning"),
|
|
84
|
+
sort: score().descending()
|
|
85
|
+
})
|
|
86
|
+
.limit(5);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
______________________________________________________________________
|
|
90
|
+
|
|
91
|
+
## 4. Real-Time Listener & Document Operations
|
|
92
|
+
|
|
93
|
+
When real-time capabilities are strictly required, use standard query listeners
|
|
94
|
+
alongside standard read/write transactions as shown in this comprehensive
|
|
95
|
+
example.
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
import { collection, query, where, onSnapshot, doc, setDoc, updateDoc, addDoc } from "firebase/firestore";
|
|
99
|
+
|
|
100
|
+
// 1. Add a new document to a collection
|
|
101
|
+
const newDocRef = await addDoc(collection(db, "tasks"), {
|
|
102
|
+
title: "Refactor Web SDK",
|
|
103
|
+
status: "pending"
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
// 2. Update fields on an existing document
|
|
107
|
+
await updateDoc(doc(db, "tasks", newDocRef.id), {
|
|
108
|
+
priority: "high"
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// 3. Establish a real-time listener on a compound query
|
|
112
|
+
const q = query(collection(db, "tasks"), where("status", "==", "pending"));
|
|
113
|
+
|
|
114
|
+
const unsubscribe = onSnapshot(q, (snapshot) => {
|
|
115
|
+
snapshot.docChanges().forEach((change) => {
|
|
116
|
+
if (change.type === "added") {
|
|
117
|
+
console.log("Added Task: ", change.doc.id, change.doc.data());
|
|
118
|
+
}
|
|
119
|
+
if (change.type === "modified") {
|
|
120
|
+
console.log("Updated Task: ", change.doc.id, change.doc.data());
|
|
121
|
+
}
|
|
122
|
+
if (change.type === "removed") {
|
|
123
|
+
console.log("Removed Task: ", change.doc.id, change.doc.data());
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
```
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Cloud Firestore on Android (Kotlin)
|
|
2
|
+
|
|
3
|
+
This guide walks you through using Cloud Firestore in your Android app using
|
|
4
|
+
Kotlin.
|
|
5
|
+
|
|
6
|
+
### Enable Firestore via CLI
|
|
7
|
+
|
|
8
|
+
Before adding dependencies in your app, make sure you enable the Firestore
|
|
9
|
+
service in your Firebase Project using the Firebase CLI:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx -y firebase-tools@latest init firestore
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
______________________________________________________________________
|
|
16
|
+
|
|
17
|
+
### 1. Add Dependencies
|
|
18
|
+
|
|
19
|
+
In your module-level `build.gradle.kts` (usually `app/build.gradle.kts`), add
|
|
20
|
+
the dependency for Cloud Firestore:
|
|
21
|
+
|
|
22
|
+
```kotlin
|
|
23
|
+
dependencies {
|
|
24
|
+
// [AGENT] Fetch the latest available BoM version from https://firebase.google.com/support/release-notes/android before adding this
|
|
25
|
+
implementation(platform("com.google.firebase:firebase-bom:<latest_bom_version>"))
|
|
26
|
+
|
|
27
|
+
// Add the dependency for the Cloud Firestore library
|
|
28
|
+
// When using the BoM, you don't specify versions in Firebase library dependencies
|
|
29
|
+
implementation("com.google.firebase:firebase-firestore")
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
______________________________________________________________________
|
|
34
|
+
|
|
35
|
+
### 2. Initialize Firestore
|
|
36
|
+
|
|
37
|
+
In your Activity or Fragment, initialize the `FirebaseFirestore` instance:
|
|
38
|
+
|
|
39
|
+
```kotlin
|
|
40
|
+
import com.google.firebase.firestore.FirebaseFirestore
|
|
41
|
+
import com.google.firebase.firestore.ktx.firestore
|
|
42
|
+
import com.google.firebase.ktx.Firebase
|
|
43
|
+
|
|
44
|
+
class MainActivity : AppCompatActivity() {
|
|
45
|
+
|
|
46
|
+
private lateinit var db: FirebaseFirestore
|
|
47
|
+
|
|
48
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
49
|
+
super.onCreate(savedInstanceState)
|
|
50
|
+
val db = Firebase.firestore
|
|
51
|
+
|
|
52
|
+
setContent {
|
|
53
|
+
MaterialTheme {
|
|
54
|
+
Text("Firestore initialized!")
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
#### Jetpack Compose (Modern)
|
|
62
|
+
|
|
63
|
+
Initialize inside a `ComponentActivity` using `setContent`:
|
|
64
|
+
|
|
65
|
+
```kotlin
|
|
66
|
+
import android.os.Bundle
|
|
67
|
+
import androidx.activity.ComponentActivity
|
|
68
|
+
import androidx.activity.compose.setContent
|
|
69
|
+
import androidx.compose.material3.MaterialTheme
|
|
70
|
+
import androidx.compose.material3.Text
|
|
71
|
+
import com.google.firebase.Firebase
|
|
72
|
+
import com.google.firebase.firestore.firestore
|
|
73
|
+
|
|
74
|
+
class MainActivity : ComponentActivity() {
|
|
75
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
76
|
+
super.onCreate(savedInstanceState)
|
|
77
|
+
val db = Firebase.firestore
|
|
78
|
+
|
|
79
|
+
setContent {
|
|
80
|
+
MaterialTheme {
|
|
81
|
+
Text("Firestore initialized!")
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
______________________________________________________________________
|
|
89
|
+
|
|
90
|
+
### 3. Add Data
|
|
91
|
+
|
|
92
|
+
Add a new document with a generated ID using `add()`:
|
|
93
|
+
|
|
94
|
+
```kotlin
|
|
95
|
+
// Create a new user with a first and last name
|
|
96
|
+
val user = hashMapOf(
|
|
97
|
+
"first" to "Ada",
|
|
98
|
+
"last" to "Lovelace",
|
|
99
|
+
"born" to 1815
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
// Add a new document with a generated ID
|
|
103
|
+
db.collection("users")
|
|
104
|
+
.add(user)
|
|
105
|
+
.addOnSuccessListener { documentReference ->
|
|
106
|
+
Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
|
|
107
|
+
}
|
|
108
|
+
.addOnFailureListener { e ->
|
|
109
|
+
Log.w(TAG, "Error adding document", e)
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Or set a document with a specific ID using `set()`:
|
|
114
|
+
|
|
115
|
+
```kotlin
|
|
116
|
+
val city = hashMapOf(
|
|
117
|
+
"name" to "Los Angeles",
|
|
118
|
+
"state" to "CA",
|
|
119
|
+
"country" to "USA"
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
db.collection("cities").document("LA")
|
|
123
|
+
.set(city)
|
|
124
|
+
.addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully written!") }
|
|
125
|
+
.addOnFailureListener { e -> Log.w(TAG, "Error writing document", e) }
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
______________________________________________________________________
|
|
129
|
+
|
|
130
|
+
### 4. Read Data
|
|
131
|
+
|
|
132
|
+
Read a single document using `get()`:
|
|
133
|
+
|
|
134
|
+
```kotlin
|
|
135
|
+
val docRef = db.collection("cities").document("SF")
|
|
136
|
+
docRef.get()
|
|
137
|
+
.addOnSuccessListener { document ->
|
|
138
|
+
if (document != null && document.exists()) {
|
|
139
|
+
Log.d(TAG, "DocumentSnapshot data: ${document.data}")
|
|
140
|
+
} else {
|
|
141
|
+
Log.d(TAG, "No such document")
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
.addOnFailureListener { exception ->
|
|
145
|
+
Log.d(TAG, "get failed with ", exception)
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Read multiple documents using a query:
|
|
150
|
+
|
|
151
|
+
```kotlin
|
|
152
|
+
db.collection("cities")
|
|
153
|
+
.whereEqualTo("capital", true)
|
|
154
|
+
.get()
|
|
155
|
+
.addOnSuccessListener { documents ->
|
|
156
|
+
for (document in documents) {
|
|
157
|
+
Log.d(TAG, "${document.id} => ${document.data}")
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
.addOnFailureListener { exception ->
|
|
161
|
+
Log.w(TAG, "Error getting documents: ", exception)
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
______________________________________________________________________
|
|
166
|
+
|
|
167
|
+
### 5. Update Data
|
|
168
|
+
|
|
169
|
+
Update some fields of a document using `update()` without overwriting the entire
|
|
170
|
+
document:
|
|
171
|
+
|
|
172
|
+
```kotlin
|
|
173
|
+
val washingtonRef = db.collection("cities").document("DC")
|
|
174
|
+
|
|
175
|
+
// Set the "isCapital" field to true
|
|
176
|
+
washingtonRef
|
|
177
|
+
.update("capital", true)
|
|
178
|
+
.addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully updated!") }
|
|
179
|
+
.addOnFailureListener { e -> Log.w(TAG, "Error updating document", e) }
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
______________________________________________________________________
|
|
183
|
+
|
|
184
|
+
### 6. Delete Data
|
|
185
|
+
|
|
186
|
+
Delete a document using `delete()`:
|
|
187
|
+
|
|
188
|
+
```kotlin
|
|
189
|
+
db.collection("cities").document("DC")
|
|
190
|
+
.delete()
|
|
191
|
+
.addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully deleted!") }
|
|
192
|
+
.addOnFailureListener { e -> Log.w(TAG, "Error deleting document", e) }
|
|
193
|
+
```
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Cloud Firestore in Flutter
|
|
2
|
+
|
|
3
|
+
This guide covers basic CRUD operations, type-safe data modeling, and real-time
|
|
4
|
+
streams when using Cloud Firestore in a Flutter application via the
|
|
5
|
+
`cloud_firestore` package.
|
|
6
|
+
|
|
7
|
+
## 1. Setup
|
|
8
|
+
|
|
9
|
+
Ensure you have added the required dependency:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
flutter pub add cloud_firestore
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Also, ensure FlutterFire is configured properly for your target platforms.
|
|
16
|
+
|
|
17
|
+
______________________________________________________________________
|
|
18
|
+
|
|
19
|
+
## 2. Best Practices: Type-Safe Models
|
|
20
|
+
|
|
21
|
+
Instead of passing raw `Map<String, dynamic>` maps throughout your UI layer,
|
|
22
|
+
define a domain model class with `fromFirestore` and `toFirestore` converters to
|
|
23
|
+
maintain type safety.
|
|
24
|
+
|
|
25
|
+
```dart
|
|
26
|
+
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
27
|
+
|
|
28
|
+
class Item {
|
|
29
|
+
final String id;
|
|
30
|
+
final String name;
|
|
31
|
+
final String ownerId;
|
|
32
|
+
final DateTime createdAt;
|
|
33
|
+
|
|
34
|
+
Item({
|
|
35
|
+
required this.id,
|
|
36
|
+
required this.name,
|
|
37
|
+
required this.ownerId,
|
|
38
|
+
required this.createdAt,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
factory Item.fromFirestore(DocumentSnapshot doc) {
|
|
42
|
+
final data = doc.data() as Map<String, dynamic>? ?? {};
|
|
43
|
+
return Item(
|
|
44
|
+
id: doc.id,
|
|
45
|
+
name: data['name'] as String? ?? '',
|
|
46
|
+
ownerId: data['ownerId'] as String? ?? '',
|
|
47
|
+
createdAt: data['createdAt'] is Timestamp
|
|
48
|
+
? (data['createdAt'] as Timestamp).toDate()
|
|
49
|
+
: DateTime.now(),
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
Map<String, dynamic> toFirestore() {
|
|
54
|
+
return {
|
|
55
|
+
'name': name,
|
|
56
|
+
'ownerId': ownerId,
|
|
57
|
+
'createdAt': Timestamp.fromDate(createdAt),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
______________________________________________________________________
|
|
64
|
+
|
|
65
|
+
## 3. The Service Layer
|
|
66
|
+
|
|
67
|
+
Encapsulate all database interactions within a dedicated service class to keep
|
|
68
|
+
your UI code clean and testable.
|
|
69
|
+
|
|
70
|
+
### Initialization & References
|
|
71
|
+
|
|
72
|
+
```dart
|
|
73
|
+
class ItemService {
|
|
74
|
+
final FirebaseFirestore _db = FirebaseFirestore.instance;
|
|
75
|
+
|
|
76
|
+
// Define your collection reference
|
|
77
|
+
CollectionReference get _itemsRef => _db.collection('items');
|
|
78
|
+
|
|
79
|
+
// 1. Create Data
|
|
80
|
+
Future<void> createItem(Item item) async {
|
|
81
|
+
try {
|
|
82
|
+
await _itemsRef.add(item.toFirestore());
|
|
83
|
+
} catch (e) {
|
|
84
|
+
print("Error creating document: \$e");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 2. Read Data (One-Time Fetch)
|
|
89
|
+
Future<List<Item>> fetchItems(String ownerId) async {
|
|
90
|
+
try {
|
|
91
|
+
final querySnapshot = await _itemsRef
|
|
92
|
+
.where('ownerId', isEqualTo: ownerId)
|
|
93
|
+
.orderBy('createdAt', descending: true)
|
|
94
|
+
.get();
|
|
95
|
+
|
|
96
|
+
return querySnapshot.docs.map((doc) => Item.fromFirestore(doc)).toList();
|
|
97
|
+
} catch (e) {
|
|
98
|
+
print("Error fetching documents: \$e");
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// 3. Read Data (Real-Time Stream)
|
|
104
|
+
Stream<List<Item>> streamItems(String ownerId) {
|
|
105
|
+
return _itemsRef
|
|
106
|
+
.where('ownerId', isEqualTo: ownerId)
|
|
107
|
+
.snapshots()
|
|
108
|
+
.map((snapshot) {
|
|
109
|
+
// If a custom composite index is missing during prototyping, apply sorting client-side:
|
|
110
|
+
final items = snapshot.docs.map((doc) => Item.fromFirestore(doc)).toList();
|
|
111
|
+
items.sort((a, b) => b.createdAt.compareTo(a.createdAt));
|
|
112
|
+
return items;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// 4. Update Data
|
|
117
|
+
Future<void> updateItemName(String id, String newName) async {
|
|
118
|
+
try {
|
|
119
|
+
await _itemsRef.doc(id).update({'name': newName});
|
|
120
|
+
} catch (e) {
|
|
121
|
+
print("Error updating document: \$e");
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// 5. Delete Data
|
|
126
|
+
Future<void> deleteItem(String id) async {
|
|
127
|
+
try {
|
|
128
|
+
await _itemsRef.doc(id).delete();
|
|
129
|
+
} catch (e) {
|
|
130
|
+
print("Error deleting document: \$e");
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
______________________________________________________________________
|
|
137
|
+
|
|
138
|
+
## 4. Listening to Streams in the UI (`StreamBuilder`)
|
|
139
|
+
|
|
140
|
+
Use Flutter's `StreamBuilder` to rebuild the interface reactively whenever data
|
|
141
|
+
changes in your database collection.
|
|
142
|
+
|
|
143
|
+
```dart
|
|
144
|
+
StreamBuilder<List<Item>>(
|
|
145
|
+
stream: itemService.streamItems(currentUser.uid),
|
|
146
|
+
builder: (context, snapshot) {
|
|
147
|
+
if (snapshot.hasError) {
|
|
148
|
+
return const Center(child: Text('Failed to load data'));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (snapshot.connectionState == ConnectionState.waiting) {
|
|
152
|
+
return const Center(child: CircularProgressIndicator());
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
final items = snapshot.data ?? [];
|
|
156
|
+
|
|
157
|
+
if (items.isEmpty) {
|
|
158
|
+
return const Center(child: Text('No items found.'));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return ListView.builder(
|
|
162
|
+
itemCount: items.length,
|
|
163
|
+
itemBuilder: (context, index) {
|
|
164
|
+
final item = items[index];
|
|
165
|
+
return ListTile(
|
|
166
|
+
title: Text(item.name),
|
|
167
|
+
trailing: IconButton(
|
|
168
|
+
icon: const Icon(Icons.delete),
|
|
169
|
+
onPressed: () => itemService.deleteItem(item.id),
|
|
170
|
+
),
|
|
171
|
+
);
|
|
172
|
+
},
|
|
173
|
+
);
|
|
174
|
+
},
|
|
175
|
+
);
|
|
176
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Firestore Indexes Reference
|
|
2
|
+
|
|
3
|
+
Indexes allow Firestore to ensure that query performance depends on the size of
|
|
4
|
+
the result set, not the size of the database.
|
|
5
|
+
|
|
6
|
+
## Index Types
|
|
7
|
+
|
|
8
|
+
### Single-Field Indexes
|
|
9
|
+
|
|
10
|
+
In Standard Edition, Firestore **automatically creates** a single-field index
|
|
11
|
+
for every field in a document (and subfields in maps). * **Support**: Simple
|
|
12
|
+
equality queries (`==`) and single-field range/sort queries (`<`, `<=`,
|
|
13
|
+
`orderBy`). * **Behavior**: You generally don't need to manage these unless you
|
|
14
|
+
want to *exempt* a field.
|
|
15
|
+
|
|
16
|
+
### Composite Indexes
|
|
17
|
+
|
|
18
|
+
A composite index stores a sorted mapping of all documents based on an ordered
|
|
19
|
+
list of fields. * **Support**: Complex queries that filter or sort by **multiple
|
|
20
|
+
fields**. * **Creation**: These are **NOT** automatically created. You must
|
|
21
|
+
define them manually or via the console/CLI.
|
|
22
|
+
|
|
23
|
+
## Automatic vs. Manual Management
|
|
24
|
+
|
|
25
|
+
### What is Automatic?
|
|
26
|
+
|
|
27
|
+
- Indexes for simple queries.
|
|
28
|
+
- Merging of single-field indexes for multiple equality filters (e.g.,
|
|
29
|
+
`where("state", "==", "CA").where("country", "==", "USA")`).
|
|
30
|
+
|
|
31
|
+
### When Do I Need to Act?
|
|
32
|
+
|
|
33
|
+
If you attempt a query that requires a composite index, the SDK will throw an
|
|
34
|
+
error containing a **direct link** to the Firebase Console to create that
|
|
35
|
+
specific index.
|
|
36
|
+
|
|
37
|
+
**Example Error:**
|
|
38
|
+
|
|
39
|
+
> "The query requires an index. You can create it here:
|
|
40
|
+
> https://console.firebase.google.com/project/..."
|
|
41
|
+
|
|
42
|
+
## Query Support Examples
|
|
43
|
+
|
|
44
|
+
| Query Type | Index Required |
|
|
45
|
+
| :-------------------------------------------------------- | :----------------------------------- |
|
|
46
|
+
| **Simple Equality**<br>\`where("a", | Automatic (Single-Field) |
|
|
47
|
+
| : "==", 1)\` : : | |
|
|
48
|
+
| **Simple Range/Sort**<br>\`where("a", | Automatic (Single-Field) |
|
|
49
|
+
| : ">", 1).orderBy("a")\` : : | |
|
|
50
|
+
| **Multiple Equality**<br>\`where("a", | Automatic (Merged Single-Field) |
|
|
51
|
+
| : "==", 1).where("b", "==", 2)\` : : | |
|
|
52
|
+
| \*\*Equality + | **Composite Index** |
|
|
53
|
+
| : Range/Sort\*\*<br>\`where("a", "==", : : | |
|
|
54
|
+
| : 1).where("b", ">", 2)\` : : | |
|
|
55
|
+
| **Multiple Ranges**<br>\`where("a", | **Composite Index** (and technically |
|
|
56
|
+
| : ">", 1).where("b", ">", 2)\` : limited query support) : | |
|
|
57
|
+
| \*\*Array Contains + | **Composite Index** |
|
|
58
|
+
| : Equality\*\*<br>\`where("tags", : : | |
|
|
59
|
+
| : "array-contains", : : | |
|
|
60
|
+
| : "news").where("active", "==", true)\` : : | |
|
|
61
|
+
|
|
62
|
+
## Best Practices & Exemptions
|
|
63
|
+
|
|
64
|
+
You can **exempt** fields from automatic indexing to save storage or strictly
|
|
65
|
+
enforce write limits.
|
|
66
|
+
|
|
67
|
+
### 1. High Write Rates (Sequential Values)
|
|
68
|
+
|
|
69
|
+
- **Problem**: Indexing fields that increase sequentially (like `timestamp`)
|
|
70
|
+
limits the write rate to ~500 writes/second per collection.
|
|
71
|
+
- **Solution**: If you don't query on this field, **exempt** it from simple
|
|
72
|
+
indexing.
|
|
73
|
+
|
|
74
|
+
### 2. Large String/Map/Array Fields
|
|
75
|
+
|
|
76
|
+
- **Problem**: Indexing limits (40k entries per doc). Indexing large blobs
|
|
77
|
+
wastes storage.
|
|
78
|
+
- **Solution**: Exempt large text blobs or huge arrays if they aren't used for
|
|
79
|
+
filtering.
|
|
80
|
+
|
|
81
|
+
### 3. TTL Fields
|
|
82
|
+
|
|
83
|
+
- **Problem**: TTL (Time-To-Live) deletion can cause index churn.
|
|
84
|
+
- **Solution**: Exempt the TTL timestamp field from indexing if you don't query
|
|
85
|
+
it.
|
|
86
|
+
|
|
87
|
+
## Management
|
|
88
|
+
|
|
89
|
+
### Config files
|
|
90
|
+
|
|
91
|
+
Your indexes should be defined in `firestore.indexes.json` (pointed to by
|
|
92
|
+
`firebase.json`).
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"indexes": [
|
|
97
|
+
{
|
|
98
|
+
"collectionGroup": "cities",
|
|
99
|
+
"queryScope": "COLLECTION",
|
|
100
|
+
"fields": [
|
|
101
|
+
{ "fieldPath": "country", "order": "ASCENDING" },
|
|
102
|
+
{ "fieldPath": "population", "order": "DESCENDING" }
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
"fieldOverrides": []
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### CLI Commands
|
|
111
|
+
|
|
112
|
+
Deploy indexes only:
|
|
113
|
+
`bash npx -y firebase-tools@latest deploy --only firestore:indexes`
|