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,184 @@
|
|
|
1
|
+
# Cloud Functions Integration Reference
|
|
2
|
+
|
|
3
|
+
Use this reference to handle database events in SQL Connect by triggering Cloud
|
|
4
|
+
Functions in response to mutation executions.
|
|
5
|
+
|
|
6
|
+
______________________________________________________________________
|
|
7
|
+
|
|
8
|
+
## Core Trigger Configuration
|
|
9
|
+
|
|
10
|
+
To handle a mutation execution, define the `onMutationExecuted` event handler.
|
|
11
|
+
|
|
12
|
+
### 🚨 Critical Infinite Loop Constraint
|
|
13
|
+
|
|
14
|
+
Unlike document-based database triggers (like Firestore or Realtime Database),
|
|
15
|
+
**SQL Connect event triggers do not provide a "before" snapshot of the data.**
|
|
16
|
+
Because SQL Connect proxies requests directly to PostgreSQL, "before" states
|
|
17
|
+
cannot be resolved transactionally.
|
|
18
|
+
|
|
19
|
+
- **Warning**: If `onMutationExecuted` executes a SQL Connect mutation, it can
|
|
20
|
+
trigger another `onMutationExecuted` trigger in a cascading loop. Make sure
|
|
21
|
+
that `onMutationExecuted` has a filter on `operation` to reduce the chance of
|
|
22
|
+
infinite loops.
|
|
23
|
+
- **Rule**: Ensure that no mutation executed inside the function can ever
|
|
24
|
+
trigger the handler itself, even indirectly.
|
|
25
|
+
|
|
26
|
+
### Location & Region Matching Rule
|
|
27
|
+
|
|
28
|
+
**The Cloud Function region option must match your SQL Connect service
|
|
29
|
+
location.** You **must** explicitly configure the `region` parameter (e.g.,
|
|
30
|
+
`'us-central1'`) in the trigger options to match the `location` specified in
|
|
31
|
+
`dataconnect.yaml`.
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { onMutationExecuted } from "firebase-functions/dataconnect";
|
|
35
|
+
import { logger } from "firebase-functions";
|
|
36
|
+
|
|
37
|
+
export const logMutation = onMutationExecuted(
|
|
38
|
+
{
|
|
39
|
+
region: "europe-west1" // Must match the SQL Connect service location
|
|
40
|
+
},
|
|
41
|
+
(event) => {
|
|
42
|
+
logger.info("A mutation was executed!", {
|
|
43
|
+
eventId: event.id,
|
|
44
|
+
type: event.type
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
______________________________________________________________________
|
|
51
|
+
|
|
52
|
+
## Event Filtering
|
|
53
|
+
|
|
54
|
+
To prevent unnecessary function invocations and infinite execution loops,
|
|
55
|
+
**always specify narrow filters** using `service` and `operation` attributes.
|
|
56
|
+
|
|
57
|
+
- **`service` & `operation` (Recommended)**: Always specify these to restrict
|
|
58
|
+
the trigger to a specific mutation in your project.
|
|
59
|
+
- **`connector` (Optional)**: Can be omitted if you want to trigger on the same
|
|
60
|
+
operation name across multiple connectors. Specify it only if you need to
|
|
61
|
+
restrict the trigger to a specific connector.
|
|
62
|
+
|
|
63
|
+
### Comprehensive Example
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { onMutationExecuted } from "firebase-functions/dataconnect";
|
|
67
|
+
import { logger } from "firebase-functions";
|
|
68
|
+
|
|
69
|
+
// Triggers for "CreateUser" mutation in "myAppService" service.
|
|
70
|
+
// 'connector' is omitted (optional), meaning it matches "CreateUser" in any connector.
|
|
71
|
+
export const onUserCreate = onMutationExecuted(
|
|
72
|
+
{
|
|
73
|
+
service: "myAppService",
|
|
74
|
+
operation: "CreateUser",
|
|
75
|
+
// region: "us-central1" // Optional: defaults to us-central1, change if database is elsewhere
|
|
76
|
+
},
|
|
77
|
+
(event) => {
|
|
78
|
+
logger.info("A new user was created!");
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
// Advanced: Trigger using wildcards or capture variables
|
|
83
|
+
export const onMutationCaptures = onMutationExecuted(
|
|
84
|
+
{
|
|
85
|
+
service: "myAppService",
|
|
86
|
+
operation: "{operation}", // Captures matching operation name dynamically
|
|
87
|
+
},
|
|
88
|
+
(event) => {
|
|
89
|
+
const triggeredOp = event.params.operation;
|
|
90
|
+
logger.info(`Captured operation execution: ${triggeredOp}`);
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
______________________________________________________________________
|
|
96
|
+
|
|
97
|
+
## Accessing User Authentication Context
|
|
98
|
+
|
|
99
|
+
Extract security credentials about the caller who executed the mutation using
|
|
100
|
+
`event.authType` and `event.authId`.
|
|
101
|
+
|
|
102
|
+
### Auth Context Mappings
|
|
103
|
+
|
|
104
|
+
| Triggered Principal | `event.authType` | `event.authId` |
|
|
105
|
+
| :----------------------------------- | :------------------ | :----------------------------------------------- |
|
|
106
|
+
| **Authenticated end user** | `"app_user"` | Firebase Auth token UID |
|
|
107
|
+
| **Unauthenticated end user** | `"unauthenticated"` | Empty |
|
|
108
|
+
| **Admin SDK (Impersonating User)** | `"app_user"` | Firebase Auth token UID of the impersonated user |
|
|
109
|
+
| **Admin SDK (Impersonating Unauth)** | `"unauthenticated"` | Empty |
|
|
110
|
+
| **Admin SDK (Full privileges)** | `"admin"` | Empty |
|
|
111
|
+
|
|
112
|
+
### Auth Extraction Example
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
export const processSensitiveMutation = onMutationExecuted(
|
|
116
|
+
{ operation: "UpdateFinancials" },
|
|
117
|
+
(event) => {
|
|
118
|
+
if (event.authType === "admin") {
|
|
119
|
+
console.log("Elevated admin mutation execution.");
|
|
120
|
+
} else {
|
|
121
|
+
console.log(`Mutation initiated by user: ${event.authId}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
______________________________________________________________________
|
|
128
|
+
|
|
129
|
+
## Parsing Event Data Payloads
|
|
130
|
+
|
|
131
|
+
The trigger payload provides inputs passed to the mutation (`payload.variables`)
|
|
132
|
+
and return values generated from the execution (`payload.data`).
|
|
133
|
+
|
|
134
|
+
### Event Payload Structure
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"authType": "app_user",
|
|
139
|
+
"authId": "user-123",
|
|
140
|
+
"data": {
|
|
141
|
+
"payload": {
|
|
142
|
+
"variables": {
|
|
143
|
+
"movieId": "m-1",
|
|
144
|
+
"rating": 5
|
|
145
|
+
},
|
|
146
|
+
"data": {
|
|
147
|
+
"review_insert": {
|
|
148
|
+
"id": "r-99"
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"errors": []
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
- **`event.data.payload.variables`**: Inputs passed to the mutation.
|
|
158
|
+
- **`event.data.payload.data`**: Fields returned by the mutation execution.
|
|
159
|
+
- **`event.data.payload.errors`**: Array of execution errors. Empty if
|
|
160
|
+
successful.
|
|
161
|
+
|
|
162
|
+
### Payload Extraction Example
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
import { onMutationExecuted } from "firebase-functions/dataconnect";
|
|
166
|
+
import { logger } from "firebase-functions";
|
|
167
|
+
|
|
168
|
+
export const onNewReview = onMutationExecuted(
|
|
169
|
+
{
|
|
170
|
+
service: "myAppService",
|
|
171
|
+
connector: "reviews",
|
|
172
|
+
operation: "CreateReview",
|
|
173
|
+
},
|
|
174
|
+
(event) => {
|
|
175
|
+
// Extract input variables passed to the mutation
|
|
176
|
+
const inputVariables = event.data.payload.variables;
|
|
177
|
+
|
|
178
|
+
// Extract returned fields from the database write
|
|
179
|
+
const returnedFields = event.data.payload.data;
|
|
180
|
+
|
|
181
|
+
logger.info(`Processed review ${returnedFields.review_insert.id} for movie ${inputVariables.movieId}`);
|
|
182
|
+
}
|
|
183
|
+
);
|
|
184
|
+
```
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# Configuration Reference
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- [Project Structure](#project-structure)
|
|
6
|
+
- [dataconnect.yaml](#dataconnectyaml)
|
|
7
|
+
- [connector.yaml](#connectoryaml)
|
|
8
|
+
- [Firebase CLI Commands](#firebase-cli-commands)
|
|
9
|
+
- [Emulator](#emulator)
|
|
10
|
+
- [Deployment](#deployment)
|
|
11
|
+
|
|
12
|
+
______________________________________________________________________
|
|
13
|
+
|
|
14
|
+
## Project Structure
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
project-root/
|
|
18
|
+
├── firebase.json # Firebase project config
|
|
19
|
+
└── dataconnect/
|
|
20
|
+
├── dataconnect.yaml # Service configuration
|
|
21
|
+
├── schema/
|
|
22
|
+
│ └── schema.gql # Data model (types, relationships)
|
|
23
|
+
└── connector/
|
|
24
|
+
├── connector.yaml # Connector config + SDK generation
|
|
25
|
+
├── queries.gql # Query operations
|
|
26
|
+
└── mutations.gql # Mutation operations (optional separate file)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
______________________________________________________________________
|
|
30
|
+
|
|
31
|
+
## dataconnect.yaml
|
|
32
|
+
|
|
33
|
+
Main SQL Connect service configuration:
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
specVersion: "v1"
|
|
37
|
+
serviceId: "my-service"
|
|
38
|
+
location: "us-central1"
|
|
39
|
+
schemaValidation: "STRICT" # or "COMPATIBLE"
|
|
40
|
+
schema:
|
|
41
|
+
source: "./schema"
|
|
42
|
+
datasource:
|
|
43
|
+
postgresql:
|
|
44
|
+
database: "fdcdb"
|
|
45
|
+
cloudSql:
|
|
46
|
+
instanceId: "my-instance"
|
|
47
|
+
connectorDirs: ["./connector"]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
| Field | Description |
|
|
51
|
+
| ------------------- | ---------------------------------------------------------------------------------------- |
|
|
52
|
+
| `specVersion` | Always `"v1"` |
|
|
53
|
+
| `serviceId` | Unique identifier for the service |
|
|
54
|
+
| `location` | GCP region (us-central1, us-east4, europe-west1, etc.) |
|
|
55
|
+
| `schemaValidation` | Deployment mode: `"STRICT"` (must match exactly) or `"COMPATIBLE"` (backward compatible) |
|
|
56
|
+
| `schema.source` | Path to schema directory |
|
|
57
|
+
| `schema.datasource` | PostgreSQL connection config |
|
|
58
|
+
| `connectorDirs` | List of connector directories |
|
|
59
|
+
|
|
60
|
+
### Cloud SQL Configuration
|
|
61
|
+
|
|
62
|
+
```yaml
|
|
63
|
+
schema:
|
|
64
|
+
datasource:
|
|
65
|
+
postgresql:
|
|
66
|
+
database: "my-database" # Database name
|
|
67
|
+
cloudSql:
|
|
68
|
+
instanceId: "my-instance" # Cloud SQL instance ID
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
______________________________________________________________________
|
|
72
|
+
|
|
73
|
+
## connector.yaml
|
|
74
|
+
|
|
75
|
+
Connector configuration and SDK generation:
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
connectorId: "default"
|
|
79
|
+
generate:
|
|
80
|
+
javascriptSdk:
|
|
81
|
+
outputDir: "../web/src/lib/dataconnect"
|
|
82
|
+
package: "@myapp/dataconnect"
|
|
83
|
+
kotlinSdk:
|
|
84
|
+
outputDir: "../android/app/src/main/kotlin/com/myapp/dataconnect"
|
|
85
|
+
package: "com.myapp.dataconnect"
|
|
86
|
+
swiftSdk:
|
|
87
|
+
outputDir: "../ios/MyApp/DataConnect"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### SDK Generation Options
|
|
91
|
+
|
|
92
|
+
| SDK | Fields |
|
|
93
|
+
| --------------- | -------------------------------------- |
|
|
94
|
+
| `javascriptSdk` | `outputDir`, `package` |
|
|
95
|
+
| `kotlinSdk` | `outputDir`, `package` |
|
|
96
|
+
| `swiftSdk` | `outputDir` |
|
|
97
|
+
| `nodeAdminSdk` | `outputDir`, `package` (for Admin SDK) |
|
|
98
|
+
|
|
99
|
+
______________________________________________________________________
|
|
100
|
+
|
|
101
|
+
## Firebase CLI Commands
|
|
102
|
+
|
|
103
|
+
### Initialize SQL Connect
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Interactive setup
|
|
107
|
+
npx -y firebase-tools@latest init dataconnect
|
|
108
|
+
|
|
109
|
+
# Set project
|
|
110
|
+
npx -y firebase-tools@latest use <project-id>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Local Development
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Start emulator
|
|
117
|
+
npx -y firebase-tools@latest emulators:start --only dataconnect
|
|
118
|
+
|
|
119
|
+
# Start with database seed data
|
|
120
|
+
npx -y firebase-tools@latest emulators:start --only dataconnect --import=./seed-data
|
|
121
|
+
|
|
122
|
+
# Generate SDKs
|
|
123
|
+
npx -y firebase-tools@latest dataconnect:sdk:generate
|
|
124
|
+
|
|
125
|
+
# Watch for schema changes (auto-regenerate)
|
|
126
|
+
npx -y firebase-tools@latest dataconnect:sdk:generate --watch
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Schema Management
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# Compare local schema to production
|
|
133
|
+
npx -y firebase-tools@latest dataconnect:sql:diff
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
# Apply migration
|
|
137
|
+
npx -y firebase-tools@latest dataconnect:sql:migrate
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Deployment
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# Deploy SQL Connect service
|
|
144
|
+
npx -y firebase-tools@latest deploy --only dataconnect
|
|
145
|
+
|
|
146
|
+
# Deploy specific connector
|
|
147
|
+
npx -y firebase-tools@latest deploy --only dataconnect:connector-id
|
|
148
|
+
|
|
149
|
+
# Deploy with schema migration
|
|
150
|
+
npx -y firebase-tools@latest deploy --only dataconnect --force
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
______________________________________________________________________
|
|
154
|
+
|
|
155
|
+
## Emulator
|
|
156
|
+
|
|
157
|
+
### Start Emulator
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
npx -y firebase-tools@latest emulators:start --only dataconnect
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Default ports:
|
|
164
|
+
|
|
165
|
+
- SQL Connect: `9399`
|
|
166
|
+
- PostgreSQL: `9939` (local PostgreSQL instance)
|
|
167
|
+
|
|
168
|
+
### Emulator Configuration (firebase.json)
|
|
169
|
+
|
|
170
|
+
```json
|
|
171
|
+
{
|
|
172
|
+
"emulators": {
|
|
173
|
+
"dataconnect": {
|
|
174
|
+
"port": 9399
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Connect from SDK
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
// Web
|
|
184
|
+
import { connectDataConnectEmulator } from 'firebase/data-connect';
|
|
185
|
+
connectDataConnectEmulator(dc, 'localhost', 9399);
|
|
186
|
+
|
|
187
|
+
// Android
|
|
188
|
+
connector.dataConnect.useEmulator("10.0.2.2", 9399)
|
|
189
|
+
|
|
190
|
+
// iOS
|
|
191
|
+
connector.useEmulator(host: "localhost", port: 9399)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Seed Data
|
|
197
|
+
|
|
198
|
+
Create seed data files and import:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
# Export current emulator data
|
|
202
|
+
npx -y firebase-tools@latest emulators:export ./seed-data
|
|
203
|
+
|
|
204
|
+
# Start with seed data
|
|
205
|
+
npx -y firebase-tools@latest emulators:start --only dataconnect --import=./seed-data
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
______________________________________________________________________
|
|
209
|
+
|
|
210
|
+
## Deployment
|
|
211
|
+
|
|
212
|
+
### Deploy Workflow
|
|
213
|
+
|
|
214
|
+
1. **Test locally** with emulator
|
|
215
|
+
1. **Generate SQL diff**: `npx -y firebase-tools@latest dataconnect:sql:diff`
|
|
216
|
+
1. **Review migration**: Check breaking changes
|
|
217
|
+
1. **Deploy**: `npx -y firebase-tools@latest deploy --only dataconnect`
|
|
218
|
+
|
|
219
|
+
### Schema Migrations
|
|
220
|
+
|
|
221
|
+
SQL Connect auto-generates PostgreSQL migrations:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Preview migration
|
|
225
|
+
npx -y firebase-tools@latest dataconnect:sql:diff
|
|
226
|
+
|
|
227
|
+
# Apply migration (interactive)
|
|
228
|
+
npx -y firebase-tools@latest dataconnect:sql:migrate
|
|
229
|
+
|
|
230
|
+
# Force migration (non-interactive)
|
|
231
|
+
npx -y firebase-tools@latest dataconnect:sql:migrate --force
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Breaking Changes
|
|
235
|
+
|
|
236
|
+
Some schema changes require special handling:
|
|
237
|
+
|
|
238
|
+
- Removing required fields
|
|
239
|
+
- Changing field types
|
|
240
|
+
- Removing tables
|
|
241
|
+
|
|
242
|
+
Use `--force` flag to acknowledge breaking changes during deploy.
|
|
243
|
+
|
|
244
|
+
### CI/CD Integration
|
|
245
|
+
|
|
246
|
+
```yaml
|
|
247
|
+
# GitHub Actions example
|
|
248
|
+
- name: Deploy SQL Connect
|
|
249
|
+
run: |
|
|
250
|
+
npx -y firebase-tools@latest deploy --only dataconnect --token ${{ secrets.FIREBASE_TOKEN }} --force
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
______________________________________________________________________
|
|
254
|
+
|
|
255
|
+
## VS Code Extension
|
|
256
|
+
|
|
257
|
+
Install "Firebase SQL Connect" extension for:
|
|
258
|
+
|
|
259
|
+
- Schema intellisense and validation
|
|
260
|
+
- GraphQL operation testing
|
|
261
|
+
- Emulator integration
|
|
262
|
+
- SDK generation on save
|
|
263
|
+
|
|
264
|
+
### Extension Settings
|
|
265
|
+
|
|
266
|
+
```json
|
|
267
|
+
{
|
|
268
|
+
"firebase.dataConnect.autoGenerateSdk": true,
|
|
269
|
+
"firebase.dataConnect.emulator.port": 9399
|
|
270
|
+
}
|
|
271
|
+
```
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# Data Seeding & Bulk Operations Reference
|
|
2
|
+
|
|
3
|
+
Use this reference to populate local development databases for prototyping,
|
|
4
|
+
execute CI/CD tests, and perform bulk data migrations in production
|
|
5
|
+
environments.
|
|
6
|
+
|
|
7
|
+
______________________________________________________________________
|
|
8
|
+
|
|
9
|
+
## 1. Local Prototyping: Data Seeding
|
|
10
|
+
|
|
11
|
+
Local database seeding allows developer agents to test queries, mutations,
|
|
12
|
+
complex joins, and role-based access control (RBAC) under realistic conditions.
|
|
13
|
+
|
|
14
|
+
### The `seed_data.gql` Workflow
|
|
15
|
+
|
|
16
|
+
**Always write prototyping seed mutations to `dataconnect/seed_data.gql`**
|
|
17
|
+
(located at the project root, not inside `connector/`). This file is excluded
|
|
18
|
+
from production deployments and client SDK generation.
|
|
19
|
+
|
|
20
|
+
#### ⚠️ Seeding Directives Rule
|
|
21
|
+
|
|
22
|
+
**Do not declare `@auth` directives inside `seed_data.gql` mutations.** Since
|
|
23
|
+
this file runs locally to establish a test state and is not an exposed API
|
|
24
|
+
connector endpoint, authorization directives are completely unnecessary and
|
|
25
|
+
should be omitted.
|
|
26
|
+
|
|
27
|
+
### Seeding Independent Tables (FK Order)
|
|
28
|
+
|
|
29
|
+
When executing standard bulk insertions (`_insertMany`) across multiple tables,
|
|
30
|
+
**always insert parent tables before referencing them in child or join tables.**
|
|
31
|
+
|
|
32
|
+
```graphql
|
|
33
|
+
# dataconnect/seed_data.gql
|
|
34
|
+
mutation SeedIndependentTables @transaction {
|
|
35
|
+
# Step 1: Seed parent tables
|
|
36
|
+
movie_insertMany(data: [
|
|
37
|
+
{ id: "m-1", title: "Inception", genre: "sci-fi" },
|
|
38
|
+
{ id: "m-2", title: "The Matrix", genre: "action" }
|
|
39
|
+
])
|
|
40
|
+
|
|
41
|
+
actor_insertMany(data: [
|
|
42
|
+
{ id: "a-1", name: "Leonardo DiCaprio" },
|
|
43
|
+
{ id: "a-2", name: "Keanu Reeves" }
|
|
44
|
+
])
|
|
45
|
+
|
|
46
|
+
# Step 2: Seed join table (depends on pre-existing parent IDs)
|
|
47
|
+
movieActor_insertMany(data: [
|
|
48
|
+
{ movie: { id: "m-1" }, actor: { id: "a-1" }, role: "main" },
|
|
49
|
+
{ movie: { id: "m-2" }, actor: { id: "a-2" }, role: "main" }
|
|
50
|
+
])
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Seeding Related Tables (Nested Relational Inserts)
|
|
55
|
+
|
|
56
|
+
**To seed parent-child relationships atomically, perform a nested relational
|
|
57
|
+
insert using literal payloads.** This avoids the need to manage foreign keys
|
|
58
|
+
manually.
|
|
59
|
+
|
|
60
|
+
- **Omit Parent Foreign Keys**: **Do not specify the parent foreign key** (e.g.
|
|
61
|
+
`movieId`) inside the nested child objects. The database engine automatically
|
|
62
|
+
maps and resolves them.
|
|
63
|
+
|
|
64
|
+
```graphql
|
|
65
|
+
# dataconnect/seed_data.gql
|
|
66
|
+
mutation SeedMoviesAndReviews @transaction {
|
|
67
|
+
movie_insert(data: {
|
|
68
|
+
id: "m-1",
|
|
69
|
+
title: "Inception",
|
|
70
|
+
genre: "sci-fi",
|
|
71
|
+
# Nested reviews are inserted atomically without manual movieId mapping
|
|
72
|
+
reviews_on_movie: [
|
|
73
|
+
{
|
|
74
|
+
id: "r-1",
|
|
75
|
+
rating: 5,
|
|
76
|
+
reviewText: "Mind-bending masterpiece!",
|
|
77
|
+
user: { id: "user-123" } # Links to pre-existing user
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: "r-2",
|
|
81
|
+
rating: 4,
|
|
82
|
+
reviewText: "Visually stunning but complex.",
|
|
83
|
+
user: { id: "user-456" }
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Resetting Seed Data
|
|
91
|
+
|
|
92
|
+
For continuous testing or CI/CD flows, return the database to a zero state using
|
|
93
|
+
one of the following strategies:
|
|
94
|
+
|
|
95
|
+
- **Strategy A: Upsert Many (Idempotent)**: Re-run seeds using `_upsertMany`
|
|
96
|
+
mutations. This overrides existing records or inserts missing ones in a single
|
|
97
|
+
step.
|
|
98
|
+
- **Strategy B: Delete and Re-Insert**: Call `_deleteMany(all: true)` on your
|
|
99
|
+
tables in **reverse foreign key order** (child/join tables first, then parent
|
|
100
|
+
tables) followed by your seed `_insertMany` operations.
|
|
101
|
+
|
|
102
|
+
```graphql
|
|
103
|
+
# dataconnect/seed_data.gql
|
|
104
|
+
mutation ResetDatabaseToOriginalState @transaction {
|
|
105
|
+
# Delete child tables first to prevent FK constraint violations
|
|
106
|
+
movieActor_deleteMany(all: true)
|
|
107
|
+
actor_deleteMany(all: true)
|
|
108
|
+
movie_deleteMany(all: true)
|
|
109
|
+
# (Optional) Follow up with new _insertMany steps
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
______________________________________________________________________
|
|
114
|
+
|
|
115
|
+
## 2. Production: Admin SDK Bulk Operations
|
|
116
|
+
|
|
117
|
+
**Use the Firebase Admin SDK for Node.js for bulk data loading and production
|
|
118
|
+
migrations.** Avoid running large mutations directly via raw GraphQL endpoints
|
|
119
|
+
in production.
|
|
120
|
+
|
|
121
|
+
The Admin SDK provides direct, type-safe methods: `dc.insert`, `dc.insertMany`,
|
|
122
|
+
`dc.upsert`, and `dc.upsertMany`.
|
|
123
|
+
|
|
124
|
+
### SDK Bulk APIs Features:
|
|
125
|
+
|
|
126
|
+
- **No Manual GraphQL Strings**: Do not write raw `mutation {...}` strings when
|
|
127
|
+
executing privileged batch operations. Pass Javascript objects directly.
|
|
128
|
+
- **Relational Support**: The bulk helper methods natively support nested 1:Many
|
|
129
|
+
relationships inside the input arrays.
|
|
130
|
+
|
|
131
|
+
### SDK Bulk Operations Example
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
import { initializeApp } from 'firebase-admin/app';
|
|
135
|
+
import { getDataConnect } from 'firebase-admin/data-connect';
|
|
136
|
+
|
|
137
|
+
const app = initializeApp();
|
|
138
|
+
const dc = getDataConnect({ location: "us-west2", serviceId: "my-service" });
|
|
139
|
+
|
|
140
|
+
const bulkMoviesData = [
|
|
141
|
+
{
|
|
142
|
+
id: "m-1",
|
|
143
|
+
title: "Inception",
|
|
144
|
+
genre: "sci-fi",
|
|
145
|
+
// Atomic nested relational inserts are fully supported
|
|
146
|
+
reviews_on_movie: [
|
|
147
|
+
{
|
|
148
|
+
rating: 5,
|
|
149
|
+
reviewText: "Incredible concept.",
|
|
150
|
+
user: { id: "user-123" }
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: "m-2",
|
|
156
|
+
title: "The Matrix",
|
|
157
|
+
genre: "action",
|
|
158
|
+
reviews_on_movie: [
|
|
159
|
+
{
|
|
160
|
+
rating: 5,
|
|
161
|
+
reviewText: "A classic.",
|
|
162
|
+
user: { id: "user-456" }
|
|
163
|
+
}
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
];
|
|
167
|
+
|
|
168
|
+
// Atomically load thousands of records (parent and child tables combined)
|
|
169
|
+
const response = await dc.insertMany("movie", bulkMoviesData);
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
______________________________________________________________________
|
|
173
|
+
|
|
174
|
+
## 3. Production: Bulk Operations via raw SQL
|
|
175
|
+
|
|
176
|
+
When working with a stable schema in production, you can use standard SQL tools
|
|
177
|
+
(like `psql` or Cloud SQL import pipelines) to execute bulk data updates
|
|
178
|
+
directly on the PostgreSQL instance.
|
|
179
|
+
|
|
180
|
+
### 🚨 Critical SQL Operations Constraint
|
|
181
|
+
|
|
182
|
+
**Never modify your database schema directly using SQL tools.** Direct schema
|
|
183
|
+
alterations (`ALTER TABLE`, `CREATE INDEX`, etc.) outside of your `schema.gql`
|
|
184
|
+
file will bypass SQL Connect's schema compiler, breaking connector mappings, and
|
|
185
|
+
causing active client SDK integrations to fail.
|