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,318 @@
|
|
|
1
|
+
# Templates
|
|
2
|
+
|
|
3
|
+
Ready-to-use templates for common Firebase SQL Connect patterns.
|
|
4
|
+
|
|
5
|
+
______________________________________________________________________
|
|
6
|
+
|
|
7
|
+
## Basic CRUD Schema
|
|
8
|
+
|
|
9
|
+
```graphql
|
|
10
|
+
# schema.gql
|
|
11
|
+
type Item @table {
|
|
12
|
+
id: UUID! @default(expr: "uuidV4()")
|
|
13
|
+
name: String!
|
|
14
|
+
description: String
|
|
15
|
+
createdAt: Timestamp! @default(expr: "request.time")
|
|
16
|
+
updatedAt: Timestamp! @default(expr: "request.time")
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```graphql
|
|
21
|
+
# queries.gql
|
|
22
|
+
query ListItems @auth(level: PUBLIC) {
|
|
23
|
+
items(orderBy: [{ createdAt: DESC }]) {
|
|
24
|
+
id name description createdAt
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
query GetItem($id: UUID!) @auth(level: PUBLIC) {
|
|
29
|
+
item(id: $id) { id name description createdAt updatedAt }
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```graphql
|
|
34
|
+
# mutations.gql
|
|
35
|
+
mutation CreateItem($name: String!, $description: String) @auth(level: USER) {
|
|
36
|
+
item_insert(data: { name: $name, description: $description })
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
mutation UpdateItem($id: UUID!, $name: String, $description: String) @auth(level: USER) {
|
|
40
|
+
item_update(id: $id, data: {
|
|
41
|
+
name: $name,
|
|
42
|
+
description: $description,
|
|
43
|
+
updatedAt_expr: "request.time"
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
mutation DeleteItem($id: UUID!) @auth(level: USER) {
|
|
48
|
+
item_delete(id: $id)
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
______________________________________________________________________
|
|
53
|
+
|
|
54
|
+
## User-Owned Resources
|
|
55
|
+
|
|
56
|
+
```graphql
|
|
57
|
+
# schema.gql
|
|
58
|
+
type User @table(key: "uid") {
|
|
59
|
+
uid: String! @default(expr: "auth.uid")
|
|
60
|
+
email: String! @unique
|
|
61
|
+
displayName: String
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
type Note @table {
|
|
65
|
+
id: UUID! @default(expr: "uuidV4()")
|
|
66
|
+
owner: User!
|
|
67
|
+
title: String!
|
|
68
|
+
content: String
|
|
69
|
+
createdAt: Timestamp! @default(expr: "request.time")
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
```graphql
|
|
74
|
+
# queries.gql
|
|
75
|
+
query MyNotes @auth(level: USER) {
|
|
76
|
+
notes(
|
|
77
|
+
where: { owner: { uid: { eq_expr: "auth.uid" }}},
|
|
78
|
+
orderBy: [{ createdAt: DESC }]
|
|
79
|
+
) { id title content createdAt }
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
query GetMyNote($id: UUID!) @auth(level: USER) {
|
|
83
|
+
note(
|
|
84
|
+
first: { where: {
|
|
85
|
+
id: { eq: $id },
|
|
86
|
+
owner: { uid: { eq_expr: "auth.uid" }}
|
|
87
|
+
}}
|
|
88
|
+
) { id title content }
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
```graphql
|
|
93
|
+
# mutations.gql
|
|
94
|
+
mutation CreateNote($title: String!, $content: String) @auth(level: USER) {
|
|
95
|
+
note_insert(data: {
|
|
96
|
+
owner: { uid_expr: "auth.uid" },
|
|
97
|
+
title: $title,
|
|
98
|
+
content: $content
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
mutation UpdateNote($id: UUID!, $title: String, $content: String) @auth(level: USER) {
|
|
103
|
+
note_update(
|
|
104
|
+
first: { where: { id: { eq: $id }, owner: { uid: { eq_expr: "auth.uid" }}}},
|
|
105
|
+
data: { title: $title, content: $content }
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
mutation DeleteNote($id: UUID!) @auth(level: USER) {
|
|
110
|
+
note_delete(
|
|
111
|
+
first: { where: { id: { eq: $id }, owner: { uid: { eq_expr: "auth.uid" }}}}
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
______________________________________________________________________
|
|
117
|
+
|
|
118
|
+
## Many-to-Many Relationship
|
|
119
|
+
|
|
120
|
+
```graphql
|
|
121
|
+
# schema.gql
|
|
122
|
+
type Tag @table {
|
|
123
|
+
id: UUID! @default(expr: "uuidV4()")
|
|
124
|
+
name: String! @unique
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
type Article @table {
|
|
128
|
+
id: UUID! @default(expr: "uuidV4()")
|
|
129
|
+
title: String!
|
|
130
|
+
content: String!
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
type ArticleTag @table(key: ["article", "tag"]) {
|
|
134
|
+
article: Article!
|
|
135
|
+
tag: Tag!
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```graphql
|
|
140
|
+
# queries.gql
|
|
141
|
+
query ArticlesByTag($tagName: String!) @auth(level: PUBLIC) {
|
|
142
|
+
articles(where: {
|
|
143
|
+
articleTags_on_article: { tag: { name: { eq: $tagName }}}
|
|
144
|
+
}) {
|
|
145
|
+
id title
|
|
146
|
+
tags: tags_via_ArticleTag { name }
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
query ArticleWithTags($id: UUID!) @auth(level: PUBLIC) {
|
|
151
|
+
article(id: $id) {
|
|
152
|
+
id title content
|
|
153
|
+
tags: tags_via_ArticleTag { id name }
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
```graphql
|
|
159
|
+
# mutations.gql
|
|
160
|
+
mutation AddTagToArticle($articleId: UUID!, $tagId: UUID!) @auth(level: USER) {
|
|
161
|
+
articleTag_insert(data: {
|
|
162
|
+
article: { id: $articleId },
|
|
163
|
+
tag: { id: $tagId }
|
|
164
|
+
})
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
mutation RemoveTagFromArticle($articleId: UUID!, $tagId: UUID!) @auth(level: USER) {
|
|
168
|
+
articleTag_delete(key: { articleId: $articleId, tagId: $tagId })
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
______________________________________________________________________
|
|
173
|
+
|
|
174
|
+
## dataconnect.yaml Template
|
|
175
|
+
|
|
176
|
+
```yaml
|
|
177
|
+
specVersion: "v1"
|
|
178
|
+
serviceId: "my-service"
|
|
179
|
+
location: "us-central1"
|
|
180
|
+
schema:
|
|
181
|
+
source: "./schema"
|
|
182
|
+
datasource:
|
|
183
|
+
postgresql:
|
|
184
|
+
database: "fdcdb"
|
|
185
|
+
cloudSql:
|
|
186
|
+
instanceId: "my-instance"
|
|
187
|
+
connectorDirs: ["./connector"]
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
______________________________________________________________________
|
|
191
|
+
|
|
192
|
+
## connector.yaml Template
|
|
193
|
+
|
|
194
|
+
```yaml
|
|
195
|
+
connectorId: "default"
|
|
196
|
+
generate:
|
|
197
|
+
javascriptSdk:
|
|
198
|
+
outputDir: "../web/src/lib/dataconnect"
|
|
199
|
+
package: "@myapp/dataconnect"
|
|
200
|
+
kotlinSdk:
|
|
201
|
+
outputDir: "../android/app/src/main/kotlin/com/myapp/dataconnect"
|
|
202
|
+
package: "com.myapp.dataconnect"
|
|
203
|
+
swiftSdk:
|
|
204
|
+
outputDir: "../ios/MyApp/DataConnect"
|
|
205
|
+
dartSdk:
|
|
206
|
+
outputDir: "../flutter/lib/dataconnect"
|
|
207
|
+
package: myapp_dataconnect
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
______________________________________________________________________
|
|
211
|
+
|
|
212
|
+
## Firebase Init Commands
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# Initialize SQL Connect in project
|
|
216
|
+
npx -y firebase-tools@latest init dataconnect
|
|
217
|
+
|
|
218
|
+
# Initialize with specific project
|
|
219
|
+
npx -y firebase-tools@latest use <project-id>
|
|
220
|
+
npx -y firebase-tools@latest init dataconnect
|
|
221
|
+
|
|
222
|
+
# Start emulator for development
|
|
223
|
+
npx -y firebase-tools@latest emulators:start --only dataconnect
|
|
224
|
+
|
|
225
|
+
# Generate SDKs
|
|
226
|
+
npx -y firebase-tools@latest dataconnect:sdk:generate
|
|
227
|
+
|
|
228
|
+
# Deploy to production
|
|
229
|
+
npx -y firebase-tools@latest deploy --only dataconnect
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
______________________________________________________________________
|
|
233
|
+
|
|
234
|
+
## SDK Initialization (Web)
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
// lib/firebase.ts
|
|
238
|
+
import { initializeApp } from 'firebase/app';
|
|
239
|
+
import { getAuth } from 'firebase/auth';
|
|
240
|
+
import { getDataConnect, connectDataConnectEmulator } from 'firebase/data-connect';
|
|
241
|
+
import { connectorConfig } from '@myapp/dataconnect';
|
|
242
|
+
|
|
243
|
+
const firebaseConfig = {
|
|
244
|
+
apiKey: "...",
|
|
245
|
+
authDomain: "...",
|
|
246
|
+
projectId: "...",
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
export const app = initializeApp(firebaseConfig);
|
|
250
|
+
export const auth = getAuth(app);
|
|
251
|
+
export const dataConnect = getDataConnect(app, connectorConfig);
|
|
252
|
+
|
|
253
|
+
// Connect to emulator in development
|
|
254
|
+
if (import.meta.env.DEV) {
|
|
255
|
+
connectDataConnectEmulator(dataConnect, 'localhost', 9399);
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
```typescript
|
|
260
|
+
// Example usage
|
|
261
|
+
import { listItems, createItem } from '@myapp/dataconnect';
|
|
262
|
+
|
|
263
|
+
// List items
|
|
264
|
+
const { data } = await listItems();
|
|
265
|
+
console.log(data.items);
|
|
266
|
+
|
|
267
|
+
// Create item (requires auth)
|
|
268
|
+
await createItem({ name: 'New Item', description: 'Description' });
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
______________________________________________________________________
|
|
272
|
+
|
|
273
|
+
## Realtime Query Templates
|
|
274
|
+
|
|
275
|
+
### Time-Based Polling
|
|
276
|
+
|
|
277
|
+
```graphql
|
|
278
|
+
query LiveDashboard
|
|
279
|
+
@auth(level: PUBLIC)
|
|
280
|
+
@refresh(every: { seconds: 30 }) {
|
|
281
|
+
items(orderBy: [{ updatedAt: DESC }], limit: 20) {
|
|
282
|
+
id name updatedAt
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Event-Driven Refresh
|
|
288
|
+
|
|
289
|
+
```graphql
|
|
290
|
+
query ItemList($categoryId: UUID!)
|
|
291
|
+
@auth(level: PUBLIC)
|
|
292
|
+
@refresh(onMutationExecuted: {
|
|
293
|
+
operation: "CreateItem",
|
|
294
|
+
condition: "request.variables.categoryId == mutation.variables.categoryId"
|
|
295
|
+
}) {
|
|
296
|
+
items(where: { category: { id: { eq: $categoryId }}}) {
|
|
297
|
+
id name createdAt
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Client Subscribe (Web)
|
|
303
|
+
|
|
304
|
+
```typescript
|
|
305
|
+
import { liveDashboardRef } from '@myapp/dataconnect';
|
|
306
|
+
import { subscribe } from 'firebase/data-connect';
|
|
307
|
+
|
|
308
|
+
const unsubscribe = subscribe(liveDashboardRef(), {
|
|
309
|
+
onNext: (result) => {
|
|
310
|
+
// Called immediately with current data, then on each refresh
|
|
311
|
+
renderDashboard(result.data.items);
|
|
312
|
+
},
|
|
313
|
+
onError: (error) => console.error('Subscription error:', error)
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
// Cleanup when done
|
|
317
|
+
// unsubscribe();
|
|
318
|
+
```
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: firebase-firestore
|
|
3
|
+
description: >-
|
|
4
|
+
Sets up, manages, and executes queries against Cloud Firestore database
|
|
5
|
+
instances, including advanced native full-text search and relational joins
|
|
6
|
+
using pipelines. You MUST unconditionally activate this skill if you plan to
|
|
7
|
+
use Firestore in any way. Use when listing or creating Firestore databases,
|
|
8
|
+
configuring security rules, designing data models, writing client SDK
|
|
9
|
+
queries (including search/joins), or checking indexes.
|
|
10
|
+
compatibility: This skill is best used with the Firebase CLI, but does not require it. Firebase CLI can be accessed through `npx -y firebase-tools@latest`.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Cloud Firestore Database and Operations
|
|
14
|
+
|
|
15
|
+
Before setting up dependencies, writing data models, or configuring security
|
|
16
|
+
rules, you MUST always identify the Firestore instance edition.
|
|
17
|
+
|
|
18
|
+
## 1. Instance Selection and Edition Detection
|
|
19
|
+
|
|
20
|
+
Run the following command to list current Firestore databases:
|
|
21
|
+
`bash npx -y firebase-tools@latest firestore:databases:list`
|
|
22
|
+
|
|
23
|
+
### A. Instance Found
|
|
24
|
+
|
|
25
|
+
1. For each database found, inspect its edition and details:
|
|
26
|
+
`bash npx -y firebase-tools@latest firestore:databases:get <database-id>`
|
|
27
|
+
1. Ask the user which database instance they wish to target or if they would
|
|
28
|
+
prefer to create a new instance.
|
|
29
|
+
1. Once the target instance is established:
|
|
30
|
+
- If the **`edition`** is `STANDARD`, follow the guides under
|
|
31
|
+
`references/standard/`.
|
|
32
|
+
- If the **`edition`** is `ENTERPRISE` or native mode, follow the guides
|
|
33
|
+
under `references/enterprise/`.
|
|
34
|
+
|
|
35
|
+
### B. No Instance Found (or New Requested)
|
|
36
|
+
|
|
37
|
+
If no databases exist or the user requests a new one, default to provisioning an
|
|
38
|
+
**Enterprise** edition database and ask the user what location to use. Run
|
|
39
|
+
`npx -y firebase-tools@latest firestore:locations` to get the list of options.
|
|
40
|
+
Suggest colocating with other resources if applicable.
|
|
41
|
+
|
|
42
|
+
Once the location is determined, create the database:
|
|
43
|
+
`bash npx -y firebase-tools@latest firestore:databases:create <database-id> --edition="enterprise" --location="<selected-location>"`
|
|
44
|
+
|
|
45
|
+
Proceed with using the guides under `references/enterprise/`.
|
|
46
|
+
|
|
47
|
+
______________________________________________________________________
|
|
48
|
+
|
|
49
|
+
## 2. Specialized Guides
|
|
50
|
+
|
|
51
|
+
Based on the identified or created instance edition, open and read the
|
|
52
|
+
corresponding reference guides:
|
|
53
|
+
|
|
54
|
+
### Standard Edition (`references/standard/`)
|
|
55
|
+
|
|
56
|
+
- **Provisioning**: Read [provisioning.md](references/standard/provisioning.md)
|
|
57
|
+
- **Security Rules**: Read
|
|
58
|
+
[security_rules.md](references/standard/security_rules.md)
|
|
59
|
+
- **SDK Usage**: Read [web_sdk_usage.md](references/standard/web_sdk_usage.md),
|
|
60
|
+
[android_sdk_usage.md](references/standard/android_sdk_usage.md),
|
|
61
|
+
[ios_setup.md](references/standard/ios_setup.md), or
|
|
62
|
+
[flutter_setup.md](references/standard/flutter_setup.md)
|
|
63
|
+
- **Indexes**: Read [indexes.md](references/standard/indexes.md)
|
|
64
|
+
|
|
65
|
+
### Enterprise Edition / Native Mode (`references/enterprise/`)
|
|
66
|
+
|
|
67
|
+
- **Provisioning**: Read
|
|
68
|
+
[provisioning.md](references/enterprise/provisioning.md)
|
|
69
|
+
|
|
70
|
+
- **Data Model**: Read [data_model.md](references/enterprise/data_model.md)
|
|
71
|
+
|
|
72
|
+
- **Security Rules**: Read
|
|
73
|
+
[security_rules.md](references/enterprise/security_rules.md)
|
|
74
|
+
|
|
75
|
+
- **SDK Usage**:
|
|
76
|
+
|
|
77
|
+
> [!CRITICAL] **Mandatory Reference Reading** Before writing or modifying any
|
|
78
|
+
> application code for Firestore Enterprise Edition, you **MUST** read at
|
|
79
|
+
> least one of the relevant reference documents below for the target
|
|
80
|
+
> platform/language to understand specific architectural requirements and
|
|
81
|
+
> pipeline initialization patterns.
|
|
82
|
+
|
|
83
|
+
Read [web_sdk_usage.md](references/enterprise/web_sdk_usage.md),
|
|
84
|
+
[python_sdk_usage.md](references/enterprise/python_sdk_usage.md),
|
|
85
|
+
[android_sdk_usage.md](references/enterprise/android_sdk_usage.md),
|
|
86
|
+
[ios_setup.md](references/enterprise/ios_setup.md), or
|
|
87
|
+
[flutter_setup.md](references/enterprise/flutter_setup.md)
|
|
88
|
+
|
|
89
|
+
- **Indexes**: Read [indexes.md](references/enterprise/indexes.md)
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# Android SDK Usage (Enterprise Native Mode)
|
|
2
|
+
|
|
3
|
+
This guide covers the Firestore Android SDK (Kotlin) setup and usage patterns
|
|
4
|
+
optimized for Firestore Enterprise edition in Native mode.
|
|
5
|
+
|
|
6
|
+
______________________________________________________________________
|
|
7
|
+
|
|
8
|
+
## 1. Initialization
|
|
9
|
+
|
|
10
|
+
### Add Dependencies
|
|
11
|
+
|
|
12
|
+
In your module-level `build.gradle.kts` (usually `app/build.gradle.kts`), add
|
|
13
|
+
the Firebase Kotlin Bill of Materials (BoM) and the dependency for Cloud
|
|
14
|
+
Firestore:
|
|
15
|
+
|
|
16
|
+
> [!IMPORTANT] **[AGENT] RESOLVING THE RESOLVED SDK VERSION DETERMINISTICALLY**
|
|
17
|
+
> Never guess or hardcode a memorized out-of-date SDK version. Before adding
|
|
18
|
+
> dependencies, you MUST query the latest available versions directly from the
|
|
19
|
+
> Google Maven Repository:
|
|
20
|
+
>
|
|
21
|
+
> ```bash
|
|
22
|
+
> # Find the latest Firebase BoM version
|
|
23
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-bom/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
24
|
+
>
|
|
25
|
+
> # Find the latest firebase-firestore version
|
|
26
|
+
> curl -s https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-firestore/maven-metadata.xml | grep -oE '<latest>[^<]+' | cut -d'>' -f2
|
|
27
|
+
> ```
|
|
28
|
+
>
|
|
29
|
+
> If the dependency is already declared, fetch the exact resolved version
|
|
30
|
+
> currently active in the workspace's build graph:
|
|
31
|
+
>
|
|
32
|
+
> ```bash
|
|
33
|
+
> ./gradlew -q :app:dependencyInsight --dependency firebase-firestore --configuration releaseRuntimeClasspath
|
|
34
|
+
> ```
|
|
35
|
+
|
|
36
|
+
```kotlin
|
|
37
|
+
dependencies {
|
|
38
|
+
// [AGENT] Fetch the latest resolved version using the Gradle command above
|
|
39
|
+
implementation(platform("com.google.firebase:firebase-bom:<latest_bom_version>"))
|
|
40
|
+
|
|
41
|
+
// Add the dependency for the Cloud Firestore library
|
|
42
|
+
// When using the BoM, you don't specify versions in Firebase library dependencies
|
|
43
|
+
implementation("com.google.firebase:firebase-firestore")
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Initialize Firestore
|
|
48
|
+
|
|
49
|
+
Initialize the `FirebaseFirestore` instance in your ComponentActivity (Jetpack
|
|
50
|
+
Compose) or standard Activity/Fragment:
|
|
51
|
+
|
|
52
|
+
```kotlin
|
|
53
|
+
import android.os.Bundle
|
|
54
|
+
import androidx.activity.ComponentActivity
|
|
55
|
+
import androidx.activity.compose.setContent
|
|
56
|
+
import androidx.compose.material3.MaterialTheme
|
|
57
|
+
import androidx.compose.material3.Text
|
|
58
|
+
import com.google.firebase.Firebase
|
|
59
|
+
import com.google.firebase.firestore.FirebaseFirestore
|
|
60
|
+
|
|
61
|
+
class MainActivity : ComponentActivity() {
|
|
62
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
63
|
+
super.onCreate(savedInstanceState)
|
|
64
|
+
// Initialize the Firestore instance
|
|
65
|
+
val db = FirebaseFirestore.getInstance("<database-name>")
|
|
66
|
+
|
|
67
|
+
setContent {
|
|
68
|
+
MaterialTheme {
|
|
69
|
+
Text("Firestore initialized!")
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
______________________________________________________________________
|
|
77
|
+
|
|
78
|
+
## 2. Decision Framework: Mandatory Pipeline Architecture
|
|
79
|
+
|
|
80
|
+
> [!CRITICAL] **MANDATORY PIPELINE ARCHITECTURE (ZERO TOLERANCE)** You are
|
|
81
|
+
> strictly forbidden from using standard collection queries (e.g.,
|
|
82
|
+
> `db.collection(...).where(...)` or client-side mapping loops) as the primary
|
|
83
|
+
> implementation for relational joins, aggregations, or search algorithms.
|
|
84
|
+
>
|
|
85
|
+
> Server-side execution via pipelines is the superior, non-negotiable core
|
|
86
|
+
> architecture for Enterprise instances.
|
|
87
|
+
|
|
88
|
+
### Strict Rules & Accountability
|
|
89
|
+
|
|
90
|
+
1. **Mandatory Execution Engine**: Every repository lookup requiring related
|
|
91
|
+
data mapping, textual relevance scoring, or multi-document counting MUST be
|
|
92
|
+
authored natively using the server-side `db.pipeline()` API.
|
|
93
|
+
1. **Required Proof of Use**: In your task execution summaries, you MUST
|
|
94
|
+
explicitly highlight the exact pipeline stages (`.define()`, `.addFields()`,
|
|
95
|
+
`.search()`, `.aggregate()`) integrated into your primary data layer return
|
|
96
|
+
paths. Failure to implement pipelines natively constitutes an immediate
|
|
97
|
+
violation of instructions.
|
|
98
|
+
1. **Check API References**:
|
|
99
|
+
- **Locate**: Locate the standard Maven sources JAR (`-sources.jar`)
|
|
100
|
+
corresponding to the resolved `firebase-firestore` dependency version
|
|
101
|
+
inside your local Gradle or Maven dependency cache.
|
|
102
|
+
- **Extract Once**: Extract the documentation files `pipeline.docs.txt` and
|
|
103
|
+
`expressions.docs.txt` from the root directory of that `-sources.jar`
|
|
104
|
+
archive into a temporary workspace scratch directory of your choice.
|
|
105
|
+
- **Read & Reference**:
|
|
106
|
+
- **Read** the extracted `pipeline.docs.txt` once fully to understand core
|
|
107
|
+
pipeline structure and stage capabilities.
|
|
108
|
+
- **Reference** the extracted `expressions.docs.txt` on-demand for specific
|
|
109
|
+
function overloads and parameters.
|
|
110
|
+
|
|
111
|
+
______________________________________________________________________
|
|
112
|
+
|
|
113
|
+
## 3. Pipeline Examples
|
|
114
|
+
|
|
115
|
+
### Relational Joins Pattern
|
|
116
|
+
|
|
117
|
+
When querying related data (e.g., articles and their author profiles), perform
|
|
118
|
+
the join at the database level via pipeline stages instead of executing multiple
|
|
119
|
+
sequential lookups on the client-side.
|
|
120
|
+
|
|
121
|
+
- Use `.define()` to bind parameters or document properties as variables.
|
|
122
|
+
- Use `.addFields()` and a nested subquery with a matching filter.
|
|
123
|
+
- Use `.toScalarExpression()` to convert a nested pipeline subquery to a single
|
|
124
|
+
field value.
|
|
125
|
+
- Assign variable and field aliases using `.alias(...)` (note: while the Web SDK
|
|
126
|
+
uses `.as()`, the Kotlin SDK uses `.alias()` to avoid keyword conflicts with
|
|
127
|
+
Kotlin's `as` operator).
|
|
128
|
+
|
|
129
|
+
```kotlin
|
|
130
|
+
import com.google.firebase.firestore.pipeline.Expression.field
|
|
131
|
+
import com.google.firebase.firestore.pipeline.Expression.variable
|
|
132
|
+
|
|
133
|
+
// Fetch articles and join the associated author Profile side-by-side
|
|
134
|
+
val articlesWithAuthProfile = db.pipeline().collection("articles")
|
|
135
|
+
.define(field("authorUid").alias("author_id"))
|
|
136
|
+
.addFields(
|
|
137
|
+
db.pipeline().collection("users")
|
|
138
|
+
.where(field("__name__").documentId().equalTo(variable("author_id")))
|
|
139
|
+
.select(field("displayName"), field("avatarUrl"), field("handle"))
|
|
140
|
+
.toScalarExpression()
|
|
141
|
+
.alias("author")
|
|
142
|
+
)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Full-Text Search
|
|
146
|
+
|
|
147
|
+
Leverage the database-native `.search()` stage within your pipelines to run
|
|
148
|
+
high-performance text query matches on the database level.
|
|
149
|
+
|
|
150
|
+
```kotlin
|
|
151
|
+
import com.google.firebase.firestore.pipeline.Expression.documentMatches
|
|
152
|
+
import com.google.firebase.firestore.pipeline.Expression.score
|
|
153
|
+
|
|
154
|
+
// Execute full-text search inside a pipeline, sorted by relevance score descending
|
|
155
|
+
val searchPipeline = db.pipeline()
|
|
156
|
+
.collection("articles")
|
|
157
|
+
.search(
|
|
158
|
+
query = documentMatches("machine learning"),
|
|
159
|
+
sort = score().descending()
|
|
160
|
+
)
|
|
161
|
+
.limit(5)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
______________________________________________________________________
|
|
165
|
+
|
|
166
|
+
## 4. Real-Time Listener & Document Operations
|
|
167
|
+
|
|
168
|
+
When real-time data sync or transaction-based document mutations are strictly
|
|
169
|
+
required by application specifications, write clean operations as shown in this
|
|
170
|
+
comprehensive example.
|
|
171
|
+
|
|
172
|
+
```kotlin
|
|
173
|
+
import android.util.Log
|
|
174
|
+
import com.google.firebase.Firebase
|
|
175
|
+
import com.google.firebase.firestore.DocumentChange
|
|
176
|
+
import com.google.firebase.firestore.firestore
|
|
177
|
+
|
|
178
|
+
val db = Firebase.firestore
|
|
179
|
+
// 1. Add a new document to a collection
|
|
180
|
+
val taskData = hashMapOf(
|
|
181
|
+
"title" to "Refactor Android SDK Usage Guide",
|
|
182
|
+
"status" to "pending"
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
db.collection("tasks")
|
|
186
|
+
.add(taskData)
|
|
187
|
+
.addOnSuccessListener { documentReference ->
|
|
188
|
+
val taskId = documentReference.id
|
|
189
|
+
Log.d("Firestore", "Document added with ID: $taskId")
|
|
190
|
+
|
|
191
|
+
// 2. Update specific fields of an existing document without replacing it
|
|
192
|
+
db.collection("tasks").document(taskId)
|
|
193
|
+
.update("priority", "high")
|
|
194
|
+
.addOnSuccessListener {
|
|
195
|
+
Log.d("Firestore", "Document successfully updated!")
|
|
196
|
+
}
|
|
197
|
+
.addOnFailureListener { e ->
|
|
198
|
+
Log.w("Firestore", "Error updating document", e)
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
.addOnFailureListener { e ->
|
|
202
|
+
Log.w("Firestore", "Error adding document", e)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// 3. Establish a real-time listener on a collection query
|
|
206
|
+
db.collection("tasks")
|
|
207
|
+
.whereEqualTo("status", "pending")
|
|
208
|
+
.addSnapshotListener { snapshot, error ->
|
|
209
|
+
if (error != null) {
|
|
210
|
+
Log.w("Firestore", "Listen failed.", error)
|
|
211
|
+
return@addSnapshotListener
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
snapshot?.documentChanges?.forEach { change ->
|
|
215
|
+
val docId = change.document.id
|
|
216
|
+
val docData = change.document.data
|
|
217
|
+
when (change.type) {
|
|
218
|
+
DocumentChange.Type.ADDED -> {
|
|
219
|
+
Log.d("Firestore", "Added Task: $docId => $docData")
|
|
220
|
+
}
|
|
221
|
+
DocumentChange.Type.MODIFIED -> {
|
|
222
|
+
Log.d("Firestore", "Updated Task: $docId => $docData")
|
|
223
|
+
}
|
|
224
|
+
DocumentChange.Type.REMOVED -> {
|
|
225
|
+
Log.d("Firestore", "Removed Task: $docId => $docData")
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Firestore Data Model Reference
|
|
2
|
+
|
|
3
|
+
Firestore is a NoSQL, document-oriented database. Unlike a SQL database, there
|
|
4
|
+
are no tables or rows. Instead, you store data in **documents**, which are
|
|
5
|
+
organized into **collections**.
|
|
6
|
+
|
|
7
|
+
## Document Data Model
|
|
8
|
+
|
|
9
|
+
Data in Firestore is organized into documents, collections, and subcollections.
|
|
10
|
+
|
|
11
|
+
### Documents
|
|
12
|
+
|
|
13
|
+
A **document** is a lightweight record that contains fields, which map to
|
|
14
|
+
values. Each document is identified by a name. A document can contain complex
|
|
15
|
+
nested objects in addition to basic data types like strings, numbers, and
|
|
16
|
+
booleans. Documents are limited to a maximum size of 1 MiB.
|
|
17
|
+
|
|
18
|
+
Example document (e.g., in a `users` collection):
|
|
19
|
+
`json { "first": "Ada", "last": "Lovelace", "born": 1815 }`
|
|
20
|
+
|
|
21
|
+
### Collections
|
|
22
|
+
|
|
23
|
+
Documents live in **collections**, which are containers for your documents. For
|
|
24
|
+
example, you could have a `users` collection to contain your various users, each
|
|
25
|
+
represented by a document. * Collections can only contain documents. They cannot
|
|
26
|
+
directly contain raw fields with values, and they cannot contain other
|
|
27
|
+
collections. * Documents within a collection can contain different fields. * You
|
|
28
|
+
don't need to "create" or "delete" collections explicitly. After you create the
|
|
29
|
+
first document in a collection, the collection exists. If you delete all of the
|
|
30
|
+
documents in a collection, the collection no longer exists.
|
|
31
|
+
|
|
32
|
+
### Subcollections
|
|
33
|
+
|
|
34
|
+
Documents can contain subcollections natively. A subcollection is a collection
|
|
35
|
+
associated with a specific document. For example, a user document in the `users`
|
|
36
|
+
collection could have a `messages` subcollection containing message documents
|
|
37
|
+
exclusively for that user. This creates a powerful hierarchical data structure.
|
|
38
|
+
|
|
39
|
+
Data path example: `users/user1/messages/message1`
|
|
40
|
+
|
|
41
|
+
## Collection Group Support
|
|
42
|
+
|
|
43
|
+
A **collection group** consists of all collections with the same ID. By default,
|
|
44
|
+
queries retrieve results from a single collection in your database. Use a
|
|
45
|
+
collection group query to retrieve documents from a collection group instead of
|
|
46
|
+
from a single collection.
|
|
47
|
+
|
|
48
|
+
### Use Cases
|
|
49
|
+
|
|
50
|
+
Collection group queries are useful when you want to query across multiple
|
|
51
|
+
subcollections that share the same organizational structure.
|
|
52
|
+
|
|
53
|
+
For example, imagine an app with a `landmarks` collection where each landmark
|
|
54
|
+
has a `reviews` subcollection. If you want to find all 5-star reviews across
|
|
55
|
+
*all* landmarks, it would involve checking many separate `reviews`
|
|
56
|
+
subcollections. With a collection group, you can perform a single query against
|
|
57
|
+
the `reviews` collection group.
|
|
58
|
+
|
|
59
|
+
### Examples
|
|
60
|
+
|
|
61
|
+
**Standard Query** (Single Collection): Find all 5-star reviews for a specific
|
|
62
|
+
landmark.
|
|
63
|
+
`javascript db.collection('landmarks/golden_gate_bridge/reviews').where('rating', '==', 5)`
|
|
64
|
+
|
|
65
|
+
**Collection Group Query**: Find all 5-star reviews across *all* landmarks.
|
|
66
|
+
`javascript db.collectionGroup('reviews').where('rating', '==', 5)`
|