zilmate 1.7.8 → 1.8.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/.agents/skills/agent-browser/SKILL.md +55 -0
- package/.agents/skills/agentmail/SKILL.md +282 -0
- package/.agents/skills/agentmail/references/webhooks.md +220 -0
- package/.agents/skills/agentmail/references/websockets.md +263 -0
- package/.agents/skills/ai-elements/SKILL.md +160 -0
- package/.agents/skills/ai-elements/references/agent.md +134 -0
- package/.agents/skills/ai-elements/references/artifact.md +84 -0
- package/.agents/skills/ai-elements/references/attachments.md +190 -0
- package/.agents/skills/ai-elements/references/audio-player.md +134 -0
- package/.agents/skills/ai-elements/references/canvas.md +34 -0
- package/.agents/skills/ai-elements/references/chain-of-thought.md +81 -0
- package/.agents/skills/ai-elements/references/checkpoint.md +183 -0
- package/.agents/skills/ai-elements/references/code-block.md +170 -0
- package/.agents/skills/ai-elements/references/commit.md +177 -0
- package/.agents/skills/ai-elements/references/confirmation.md +262 -0
- package/.agents/skills/ai-elements/references/connection.md +34 -0
- package/.agents/skills/ai-elements/references/context.md +126 -0
- package/.agents/skills/ai-elements/references/controls.md +32 -0
- package/.agents/skills/ai-elements/references/conversation.md +224 -0
- package/.agents/skills/ai-elements/references/edge.md +52 -0
- package/.agents/skills/ai-elements/references/environment-variables.md +102 -0
- package/.agents/skills/ai-elements/references/file-tree.md +72 -0
- package/.agents/skills/ai-elements/references/image.md +146 -0
- package/.agents/skills/ai-elements/references/inline-citation.md +299 -0
- package/.agents/skills/ai-elements/references/jsx-preview.md +104 -0
- package/.agents/skills/ai-elements/references/message.md +237 -0
- package/.agents/skills/ai-elements/references/mic-selector.md +189 -0
- package/.agents/skills/ai-elements/references/model-selector.md +112 -0
- package/.agents/skills/ai-elements/references/node.md +73 -0
- package/.agents/skills/ai-elements/references/open-in-chat.md +67 -0
- package/.agents/skills/ai-elements/references/package-info.md +95 -0
- package/.agents/skills/ai-elements/references/panel.md +33 -0
- package/.agents/skills/ai-elements/references/persona.md +166 -0
- package/.agents/skills/ai-elements/references/plan.md +79 -0
- package/.agents/skills/ai-elements/references/prompt-input.md +579 -0
- package/.agents/skills/ai-elements/references/queue.md +172 -0
- package/.agents/skills/ai-elements/references/reasoning.md +238 -0
- package/.agents/skills/ai-elements/references/sandbox.md +129 -0
- package/.agents/skills/ai-elements/references/schema-display.md +102 -0
- package/.agents/skills/ai-elements/references/shimmer.md +48 -0
- package/.agents/skills/ai-elements/references/snippet.md +64 -0
- package/.agents/skills/ai-elements/references/sources.md +209 -0
- package/.agents/skills/ai-elements/references/speech-input.md +163 -0
- package/.agents/skills/ai-elements/references/stack-trace.md +224 -0
- package/.agents/skills/ai-elements/references/suggestion.md +124 -0
- package/.agents/skills/ai-elements/references/task.md +222 -0
- package/.agents/skills/ai-elements/references/terminal.md +103 -0
- package/.agents/skills/ai-elements/references/test-results.md +157 -0
- package/.agents/skills/ai-elements/references/tool.md +285 -0
- package/.agents/skills/ai-elements/references/toolbar.md +32 -0
- package/.agents/skills/ai-elements/references/transcription.md +120 -0
- package/.agents/skills/ai-elements/references/voice-selector.md +241 -0
- package/.agents/skills/ai-elements/references/web-preview.md +200 -0
- package/.agents/skills/ai-elements/scripts/agent.tsx +61 -0
- package/.agents/skills/ai-elements/scripts/artifact.tsx +127 -0
- package/.agents/skills/ai-elements/scripts/attachments-inline.tsx +128 -0
- package/.agents/skills/ai-elements/scripts/attachments-list.tsx +95 -0
- package/.agents/skills/ai-elements/scripts/attachments.tsx +85 -0
- package/.agents/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
- package/.agents/skills/ai-elements/scripts/audio-player.tsx +68 -0
- package/.agents/skills/ai-elements/scripts/chain-of-thought.tsx +82 -0
- package/.agents/skills/ai-elements/scripts/checkpoint.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
- package/.agents/skills/ai-elements/scripts/code-block.tsx +120 -0
- package/.agents/skills/ai-elements/scripts/commit.tsx +94 -0
- package/.agents/skills/ai-elements/scripts/confirmation-accepted.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/confirmation-rejected.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
- package/.agents/skills/ai-elements/scripts/confirmation.tsx +55 -0
- package/.agents/skills/ai-elements/scripts/context.tsx +45 -0
- package/.agents/skills/ai-elements/scripts/conversation.tsx +177 -0
- package/.agents/skills/ai-elements/scripts/environment-variables.tsx +62 -0
- package/.agents/skills/ai-elements/scripts/file-tree-basic.tsx +18 -0
- package/.agents/skills/ai-elements/scripts/file-tree-expanded.tsx +21 -0
- package/.agents/skills/ai-elements/scripts/file-tree-selection.tsx +24 -0
- package/.agents/skills/ai-elements/scripts/file-tree.tsx +42 -0
- package/.agents/skills/ai-elements/scripts/image.tsx +20 -0
- package/.agents/skills/ai-elements/scripts/inline-citation.tsx +97 -0
- package/.agents/skills/ai-elements/scripts/jsx-preview.tsx +104 -0
- package/.agents/skills/ai-elements/scripts/message.tsx +365 -0
- package/.agents/skills/ai-elements/scripts/mic-selector.tsx +49 -0
- package/.agents/skills/ai-elements/scripts/model-selector.tsx +365 -0
- package/.agents/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
- package/.agents/skills/ai-elements/scripts/package-info.tsx +51 -0
- package/.agents/skills/ai-elements/scripts/persona-command.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-glint.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-halo.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-mana.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-obsidian.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-opal.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/plan.tsx +65 -0
- package/.agents/skills/ai-elements/scripts/prompt-input-cursor.tsx +502 -0
- package/.agents/skills/ai-elements/scripts/prompt-input-tooltip.tsx +44 -0
- package/.agents/skills/ai-elements/scripts/prompt-input.tsx +267 -0
- package/.agents/skills/ai-elements/scripts/queue-prompt-input.tsx +394 -0
- package/.agents/skills/ai-elements/scripts/queue.tsx +295 -0
- package/.agents/skills/ai-elements/scripts/reasoning.tsx +71 -0
- package/.agents/skills/ai-elements/scripts/sandbox.tsx +178 -0
- package/.agents/skills/ai-elements/scripts/schema-display-basic.tsx +9 -0
- package/.agents/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
- package/.agents/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
- package/.agents/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
- package/.agents/skills/ai-elements/scripts/schema-display.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/shimmer-duration.tsx +31 -0
- package/.agents/skills/ai-elements/scripts/shimmer-elements.tsx +43 -0
- package/.agents/skills/ai-elements/scripts/shimmer.tsx +17 -0
- package/.agents/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
- package/.agents/skills/ai-elements/scripts/snippet.tsx +25 -0
- package/.agents/skills/ai-elements/scripts/sources-custom.tsx +39 -0
- package/.agents/skills/ai-elements/scripts/sources.tsx +32 -0
- package/.agents/skills/ai-elements/scripts/speech-input.tsx +84 -0
- package/.agents/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
- package/.agents/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
- package/.agents/skills/ai-elements/scripts/stack-trace.tsx +58 -0
- package/.agents/skills/ai-elements/scripts/suggestion-input.tsx +144 -0
- package/.agents/skills/ai-elements/scripts/suggestion.tsx +32 -0
- package/.agents/skills/ai-elements/scripts/task.tsx +59 -0
- package/.agents/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
- package/.agents/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
- package/.agents/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
- package/.agents/skills/ai-elements/scripts/terminal.tsx +82 -0
- package/.agents/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
- package/.agents/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
- package/.agents/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/test-results.tsx +102 -0
- package/.agents/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
- package/.agents/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
- package/.agents/skills/ai-elements/scripts/tool-output-available.tsx +80 -0
- package/.agents/skills/ai-elements/scripts/tool-output-error.tsx +44 -0
- package/.agents/skills/ai-elements/scripts/tool.tsx +222 -0
- package/.agents/skills/ai-elements/scripts/transcription.tsx +290 -0
- package/.agents/skills/ai-elements/scripts/voice-selector.tsx +245 -0
- package/.agents/skills/ai-elements/scripts/web-preview.tsx +115 -0
- package/.agents/skills/ai-sdk/SKILL.md +78 -0
- package/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
- package/.agents/skills/ai-sdk/references/common-errors.md +443 -0
- package/.agents/skills/ai-sdk/references/devtools.md +52 -0
- package/.agents/skills/ai-sdk/references/type-safe-agents.md +204 -0
- package/.agents/skills/chat-sdk/SKILL.md +240 -0
- package/.agents/skills/composio/AGENTS.md +404 -0
- package/.agents/skills/composio/SKILL.md +55 -0
- package/.agents/skills/composio/rules/_template.md +38 -0
- package/.agents/skills/composio/rules/app-auth-configs.md +224 -0
- package/.agents/skills/composio/rules/app-auth-popup-ui.md +143 -0
- package/.agents/skills/composio/rules/app-connected-accounts.md +240 -0
- package/.agents/skills/composio/rules/app-custom-tools.md +220 -0
- package/.agents/skills/composio/rules/app-execute-tools.md +202 -0
- package/.agents/skills/composio/rules/app-fetch-tools.md +292 -0
- package/.agents/skills/composio/rules/app-modifiers.md +148 -0
- package/.agents/skills/composio/rules/app-tool-versions.md +343 -0
- package/.agents/skills/composio/rules/app-toolkits.md +184 -0
- package/.agents/skills/composio/rules/app-user-context.md +222 -0
- package/.agents/skills/composio/rules/building-with-composio.md +134 -0
- package/.agents/skills/composio/rules/composio-cli.md +223 -0
- package/.agents/skills/composio/rules/setup-api-keys.md +230 -0
- package/.agents/skills/composio/rules/tr-auth-auto.md +110 -0
- package/.agents/skills/composio/rules/tr-auth-connections.md +167 -0
- package/.agents/skills/composio/rules/tr-auth-manual.md +161 -0
- package/.agents/skills/composio/rules/tr-building-chat-ui.md +348 -0
- package/.agents/skills/composio/rules/tr-framework-ai-sdk.md +240 -0
- package/.agents/skills/composio/rules/tr-framework-integration.md +818 -0
- package/.agents/skills/composio/rules/tr-framework-mastra.md +185 -0
- package/.agents/skills/composio/rules/tr-mcp-vs-native.md +248 -0
- package/.agents/skills/composio/rules/tr-session-basic.md +82 -0
- package/.agents/skills/composio/rules/tr-session-config.md +172 -0
- package/.agents/skills/composio/rules/tr-session-lifecycle.md +385 -0
- package/.agents/skills/composio/rules/tr-toolkit-query.md +135 -0
- package/.agents/skills/composio/rules/tr-userid-best-practices.md +476 -0
- package/.agents/skills/composio/rules/triggers-create.md +246 -0
- package/.agents/skills/composio/rules/triggers-manage.md +275 -0
- package/.agents/skills/composio/rules/triggers-subscribe.md +173 -0
- package/.agents/skills/composio/rules/triggers-webhook.md +227 -0
- package/.agents/skills/create-auth-skill/SKILL.md +321 -0
- package/.agents/skills/design-md/README.md +34 -0
- package/.agents/skills/design-md/SKILL.md +172 -0
- package/.agents/skills/design-md/examples/DESIGN.md +154 -0
- package/.agents/skills/expo-tailwind-setup/SKILL.md +480 -0
- package/.agents/skills/expo-tailwind-setup/agents/openai.yaml +4 -0
- package/.agents/skills/find-skills/SKILL.md +142 -0
- package/.agents/skills/firecrawl/SKILL.md +321 -0
- package/.agents/skills/firecrawl/rules/install.md +85 -0
- package/.agents/skills/firecrawl/rules/security.md +26 -0
- package/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/.agents/skills/frontend-design/SKILL.md +55 -0
- package/.agents/skills/linkup-search/SKILL.md +298 -0
- package/.agents/skills/mcp-builder/LICENSE.txt +202 -0
- package/.agents/skills/mcp-builder/SKILL.md +236 -0
- package/.agents/skills/mcp-builder/reference/evaluation.md +602 -0
- package/.agents/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/.agents/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/.agents/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/.agents/skills/mcp-builder/scripts/connections.py +151 -0
- package/.agents/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/.agents/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.agents/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/.agents/skills/mobile-android-design/SKILL.md +101 -0
- package/.agents/skills/mobile-android-design/references/android-navigation.md +698 -0
- package/.agents/skills/mobile-android-design/references/compose-components.md +796 -0
- package/.agents/skills/mobile-android-design/references/details.md +337 -0
- package/.agents/skills/mobile-android-design/references/material3-theming.md +604 -0
- package/.agents/skills/mobile-ios-design/SKILL.md +259 -0
- package/.agents/skills/mobile-ios-design/references/hig-patterns.md +529 -0
- package/.agents/skills/mobile-ios-design/references/ios-navigation.md +556 -0
- package/.agents/skills/mobile-ios-design/references/swiftui-components.md +575 -0
- package/.agents/skills/neon-drizzle/SKILL.md +81 -0
- package/.agents/skills/neon-drizzle/guides/existing-project.md +398 -0
- package/.agents/skills/neon-drizzle/guides/new-project.md +312 -0
- package/.agents/skills/neon-drizzle/guides/schema-only.md +415 -0
- package/.agents/skills/neon-drizzle/guides/troubleshooting.md +539 -0
- package/.agents/skills/neon-drizzle/references/adapters.md +478 -0
- package/.agents/skills/neon-drizzle/references/migrations.md +652 -0
- package/.agents/skills/neon-drizzle/references/query-patterns.md +761 -0
- package/.agents/skills/neon-drizzle/scripts/generate-schema.ts +77 -0
- package/.agents/skills/neon-drizzle/scripts/run-migration.ts +133 -0
- package/.agents/skills/neon-drizzle/templates/db-http.ts +6 -0
- package/.agents/skills/neon-drizzle/templates/db-websocket.ts +24 -0
- package/.agents/skills/neon-drizzle/templates/drizzle-config.ts +96 -0
- package/.agents/skills/neon-drizzle/templates/schema-example.ts +231 -0
- package/.agents/skills/neon-postgres/SKILL.md +376 -0
- package/.agents/skills/next-best-practices/SKILL.md +152 -0
- package/.agents/skills/next-best-practices/async-patterns.md +87 -0
- package/.agents/skills/next-best-practices/bundling.md +180 -0
- package/.agents/skills/next-best-practices/data-patterns.md +297 -0
- package/.agents/skills/next-best-practices/debug-tricks.md +105 -0
- package/.agents/skills/next-best-practices/directives.md +73 -0
- package/.agents/skills/next-best-practices/error-handling.md +227 -0
- package/.agents/skills/next-best-practices/file-conventions.md +140 -0
- package/.agents/skills/next-best-practices/font.md +245 -0
- package/.agents/skills/next-best-practices/functions.md +108 -0
- package/.agents/skills/next-best-practices/hydration-error.md +91 -0
- package/.agents/skills/next-best-practices/image.md +173 -0
- package/.agents/skills/next-best-practices/metadata.md +301 -0
- package/.agents/skills/next-best-practices/parallel-routes.md +287 -0
- package/.agents/skills/next-best-practices/route-handlers.md +146 -0
- package/.agents/skills/next-best-practices/rsc-boundaries.md +159 -0
- package/.agents/skills/next-best-practices/runtime-selection.md +39 -0
- package/.agents/skills/next-best-practices/scripts.md +141 -0
- package/.agents/skills/next-best-practices/self-hosting.md +371 -0
- package/.agents/skills/next-best-practices/suspense-boundaries.md +67 -0
- package/.agents/skills/playwright-best-practices/SKILL.md +303 -0
- package/.agents/skills/playwright-cli/SKILL.md +404 -0
- package/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
- package/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
- package/.agents/skills/playwright-cli/references/running-code.md +241 -0
- package/.agents/skills/playwright-cli/references/session-management.md +225 -0
- package/.agents/skills/playwright-cli/references/spec-driven-testing.md +305 -0
- package/.agents/skills/playwright-cli/references/storage-state.md +275 -0
- package/.agents/skills/playwright-cli/references/test-generation.md +134 -0
- package/.agents/skills/playwright-cli/references/tracing.md +139 -0
- package/.agents/skills/playwright-cli/references/video-recording.md +143 -0
- package/.agents/skills/prisma-client-api/SKILL.md +216 -0
- package/.agents/skills/prisma-client-api/references/client-methods.md +223 -0
- package/.agents/skills/prisma-client-api/references/constructor.md +208 -0
- package/.agents/skills/prisma-client-api/references/filters.md +256 -0
- package/.agents/skills/prisma-client-api/references/model-queries.md +281 -0
- package/.agents/skills/prisma-client-api/references/query-options.md +276 -0
- package/.agents/skills/prisma-client-api/references/raw-queries.md +194 -0
- package/.agents/skills/prisma-client-api/references/relations.md +308 -0
- package/.agents/skills/prisma-client-api/references/transactions.md +184 -0
- package/.agents/skills/prisma-database-setup/SKILL.md +192 -0
- package/.agents/skills/prisma-database-setup/references/cockroachdb.md +89 -0
- package/.agents/skills/prisma-database-setup/references/mongodb.md +90 -0
- package/.agents/skills/prisma-database-setup/references/mysql.md +126 -0
- package/.agents/skills/prisma-database-setup/references/postgresql.md +92 -0
- package/.agents/skills/prisma-database-setup/references/prisma-client-setup.md +47 -0
- package/.agents/skills/prisma-database-setup/references/prisma-postgres.md +130 -0
- package/.agents/skills/prisma-database-setup/references/sqlite.md +106 -0
- package/.agents/skills/prisma-database-setup/references/sqlserver.md +94 -0
- package/.agents/skills/prisma-postgres/SKILL.md +127 -0
- package/.agents/skills/prisma-postgres/references/console-and-connections.md +67 -0
- package/.agents/skills/prisma-postgres/references/create-db-cli.md +136 -0
- package/.agents/skills/prisma-postgres/references/management-api-sdk.md +56 -0
- package/.agents/skills/prisma-postgres/references/management-api.md +61 -0
- package/.agents/skills/remotion-best-practices/SKILL.md +340 -0
- package/.agents/skills/remotion-best-practices/rules/3d.md +86 -0
- package/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/.agents/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/.agents/skills/remotion-best-practices/rules/audio.md +169 -0
- package/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/.agents/skills/remotion-best-practices/rules/compositions.md +133 -0
- package/.agents/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/.agents/skills/remotion-best-practices/rules/ffmpeg.md +34 -0
- package/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/.agents/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/.agents/skills/remotion-best-practices/rules/google-fonts.md +72 -0
- package/.agents/skills/remotion-best-practices/rules/html-in-canvas.md +122 -0
- package/.agents/skills/remotion-best-practices/rules/images.md +71 -0
- package/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/.agents/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/.agents/skills/remotion-best-practices/rules/local-fonts.md +65 -0
- package/.agents/skills/remotion-best-practices/rules/lottie.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/maplibre.md +458 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/.agents/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/.agents/skills/remotion-best-practices/rules/sequencing.md +144 -0
- package/.agents/skills/remotion-best-practices/rules/sfx.md +30 -0
- package/.agents/skills/remotion-best-practices/rules/silence-detection.md +71 -0
- package/.agents/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/.agents/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agents/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agents/skills/remotion-best-practices/rules/timing.md +136 -0
- package/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/.agents/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/.agents/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/.agents/skills/remotion-best-practices/rules/videos.md +171 -0
- package/.agents/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/.agents/skills/remotion-render/SKILL.md +212 -0
- package/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/.agents/skills/skill-creator/SKILL.md +485 -0
- package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/.agents/skills/skill-creator/references/schemas.md +430 -0
- package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/.agents/skills/stripe-best-practices/SKILL.md +54 -0
- package/.agents/skills/stripe-best-practices/references/billing.md +58 -0
- package/.agents/skills/stripe-best-practices/references/connect.md +173 -0
- package/.agents/skills/stripe-best-practices/references/payments.md +79 -0
- package/.agents/skills/stripe-best-practices/references/security.md +109 -0
- package/.agents/skills/stripe-best-practices/references/tax.md +37 -0
- package/.agents/skills/stripe-best-practices/references/treasury.md +16 -0
- package/.agents/skills/stripe-projects/SKILL.md +132 -0
- package/.agents/skills/supabase/CHANGELOG.md +35 -0
- package/.agents/skills/supabase/SKILL.md +135 -0
- package/.agents/skills/supabase/assets/feedback-issue-template.md +17 -0
- package/.agents/skills/supabase/references/skill-feedback.md +17 -0
- package/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +29 -0
- package/.agents/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/.agents/skills/supermemory/LICENSE +201 -0
- package/.agents/skills/supermemory/README.md +221 -0
- package/.agents/skills/supermemory/SKILL.md +172 -0
- package/.agents/skills/supermemory/references/api-reference.md +591 -0
- package/.agents/skills/supermemory/references/architecture.md +557 -0
- package/.agents/skills/supermemory/references/quickstart.md +293 -0
- package/.agents/skills/supermemory/references/sdk-guide.md +655 -0
- package/.agents/skills/supermemory/references/use-cases.md +1033 -0
- package/.agents/skills/supermemory-cli/SKILL.md +490 -0
- package/.agents/skills/tdd/SKILL.md +108 -0
- package/.agents/skills/tdd/mocking.md +59 -0
- package/.agents/skills/tdd/refactoring.md +10 -0
- package/.agents/skills/tdd/tests.md +61 -0
- package/.agents/skills/ui-ux-pro-max/SKILL.md +661 -0
- package/.agents/skills/ui-ux-pro-max/data +1 -0
- package/.agents/skills/ui-ux-pro-max/scripts +1 -0
- package/.agents/skills/vercel-react-native-skills/AGENTS.md +2897 -0
- package/.agents/skills/vercel-react-native-skills/README.md +165 -0
- package/.agents/skills/vercel-react-native-skills/SKILL.md +121 -0
- package/.agents/skills/vercel-react-native-skills/metadata.json +16 -0
- package/.agents/skills/vercel-react-native-skills/rules/_sections.md +86 -0
- package/.agents/skills/vercel-react-native-skills/rules/_template.md +28 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-derived-value.md +53 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md +95 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-gpu-properties.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/design-system-compound-components.md +66 -0
- package/.agents/skills/vercel-react-native-skills/rules/fonts-config-plugin.md +71 -0
- package/.agents/skills/vercel-react-native-skills/rules/imports-design-system-folder.md +68 -0
- package/.agents/skills/vercel-react-native-skills/rules/js-hoist-intl.md +61 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-callbacks.md +44 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-function-references.md +132 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-images.md +53 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-inline-objects.md +97 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-expensive.md +94 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-memo.md +82 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-types.md +104 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-virtualize.md +67 -0
- package/.agents/skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
- package/.agents/skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
- package/.agents/skills/vercel-react-native-skills/rules/navigation-native-navigators.md +188 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-dispatcher.md +91 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-fallback.md +56 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-minimize.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md +74 -0
- package/.agents/skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md +36 -0
- package/.agents/skills/vercel-react-native-skills/rules/scroll-position-no-state.md +82 -0
- package/.agents/skills/vercel-react-native-skills/rules/state-ground-truth.md +80 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-expo-image.md +66 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-image-gallery.md +104 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-measure-views.md +78 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-menus.md +174 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-native-modals.md +77 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-pressable.md +61 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-styling.md +87 -0
- package/.agents/skills/web-design-guidelines/SKILL.md +39 -0
- package/dist/index.js +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,652 @@
|
|
|
1
|
+
# Migration Reference Guide
|
|
2
|
+
|
|
3
|
+
Complete guide for database migrations with Drizzle and Neon.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Migration Lifecycle](#migration-lifecycle)
|
|
8
|
+
- [Environment Loading Deep-Dive](#environment-loading-deep-dive)
|
|
9
|
+
- [Migration Patterns](#migration-patterns)
|
|
10
|
+
- [Advanced Patterns](#advanced-patterns)
|
|
11
|
+
- [Migration in CI/CD](#migration-in-cicd)
|
|
12
|
+
- [Common Migration Errors](#common-migration-errors)
|
|
13
|
+
- [Best Practices](#best-practices)
|
|
14
|
+
- [Related Resources](#related-resources)
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Migration Lifecycle
|
|
19
|
+
|
|
20
|
+
### 1. Schema Change
|
|
21
|
+
|
|
22
|
+
Update your schema file:
|
|
23
|
+
```typescript
|
|
24
|
+
// src/db/schema.ts
|
|
25
|
+
export const users = pgTable('users', {
|
|
26
|
+
id: serial('id').primaryKey(),
|
|
27
|
+
email: varchar('email', { length: 255 }).notNull(),
|
|
28
|
+
phoneNumber: varchar('phone_number', { length: 20 }), // NEW
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Generate Migration
|
|
33
|
+
|
|
34
|
+
Run drizzle-kit to generate SQL:
|
|
35
|
+
```bash
|
|
36
|
+
npm run drizzle-kit generate
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**What this does:**
|
|
40
|
+
- Compares schema.ts with database
|
|
41
|
+
- Generates SQL in migrations folder
|
|
42
|
+
- Creates migration metadata
|
|
43
|
+
|
|
44
|
+
**Output:**
|
|
45
|
+
```
|
|
46
|
+
src/db/migrations/
|
|
47
|
+
├── 0000_initial.sql
|
|
48
|
+
├── 0001_add_phone_number.sql
|
|
49
|
+
└── meta/
|
|
50
|
+
├── _journal.json
|
|
51
|
+
└── 0001_snapshot.json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 3. Review Migration
|
|
55
|
+
|
|
56
|
+
**Always review** generated SQL before applying:
|
|
57
|
+
```sql
|
|
58
|
+
-- 0001_add_phone_number.sql
|
|
59
|
+
ALTER TABLE users ADD COLUMN phone_number VARCHAR(20);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 4. Apply Migration
|
|
63
|
+
|
|
64
|
+
Execute migration against database:
|
|
65
|
+
```bash
|
|
66
|
+
npm run drizzle-kit migrate
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Or with explicit env loading:**
|
|
70
|
+
```bash
|
|
71
|
+
export DATABASE_URL="$(grep DATABASE_URL .env.local | cut -d '=' -f2)" && \
|
|
72
|
+
npm run drizzle-kit migrate
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Environment Loading Deep-Dive
|
|
76
|
+
|
|
77
|
+
### Why Environment Loading Matters
|
|
78
|
+
|
|
79
|
+
**Problem:** drizzle-kit runs as separate process, may not inherit env vars.
|
|
80
|
+
|
|
81
|
+
**Symptom:**
|
|
82
|
+
```
|
|
83
|
+
Error: url is undefined in dbCredentials
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Solution 1: Config File Loading (Recommended)
|
|
87
|
+
|
|
88
|
+
**drizzle.config.ts:**
|
|
89
|
+
```typescript
|
|
90
|
+
import { defineConfig } from 'drizzle-kit';
|
|
91
|
+
import { config } from 'dotenv';
|
|
92
|
+
|
|
93
|
+
config({ path: '.env.local' });
|
|
94
|
+
|
|
95
|
+
export default defineConfig({
|
|
96
|
+
schema: './src/db/schema.ts',
|
|
97
|
+
out: './src/db/migrations',
|
|
98
|
+
dialect: 'postgresql',
|
|
99
|
+
dbCredentials: {
|
|
100
|
+
url: process.env.DATABASE_URL!,
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Key:** `config({ path: '.env.local' })` loads before exporting config.
|
|
106
|
+
|
|
107
|
+
### Solution 2: Shell Export
|
|
108
|
+
|
|
109
|
+
**Bash/Zsh:**
|
|
110
|
+
```bash
|
|
111
|
+
export DATABASE_URL="$(grep DATABASE_URL .env.local | cut -d '=' -f2)" && \
|
|
112
|
+
npm run drizzle-kit migrate
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Fish:**
|
|
116
|
+
```fish
|
|
117
|
+
set -x DATABASE_URL (grep DATABASE_URL .env.local | cut -d '=' -f2)
|
|
118
|
+
npm run drizzle-kit migrate
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**PowerShell:**
|
|
122
|
+
```powershell
|
|
123
|
+
$env:DATABASE_URL = (Select-String -Path .env.local -Pattern "DATABASE_URL").Line.Split("=")[1]
|
|
124
|
+
npm run drizzle-kit migrate
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Solution 3: NPM Scripts
|
|
128
|
+
|
|
129
|
+
**package.json:**
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"scripts": {
|
|
133
|
+
"db:generate": "drizzle-kit generate",
|
|
134
|
+
"db:migrate": "dotenv -e .env.local -- drizzle-kit migrate",
|
|
135
|
+
"db:push": "dotenv -e .env.local -- drizzle-kit push"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Install dotenv-cli:**
|
|
141
|
+
```bash
|
|
142
|
+
npm add -D dotenv-cli
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Solution 4: Programmatic Migration
|
|
146
|
+
|
|
147
|
+
**scripts/migrate.ts:**
|
|
148
|
+
```typescript
|
|
149
|
+
import { drizzle } from 'drizzle-orm/neon-http';
|
|
150
|
+
import { neon } from '@neondatabase/serverless';
|
|
151
|
+
import { migrate } from 'drizzle-orm/neon-http/migrator';
|
|
152
|
+
import { config } from 'dotenv';
|
|
153
|
+
|
|
154
|
+
config({ path: '.env.local' });
|
|
155
|
+
|
|
156
|
+
const sql = neon(process.env.DATABASE_URL!);
|
|
157
|
+
const db = drizzle(sql);
|
|
158
|
+
|
|
159
|
+
await migrate(db, { migrationsFolder: './src/db/migrations' });
|
|
160
|
+
console.log('Migrations complete');
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Run:**
|
|
164
|
+
```bash
|
|
165
|
+
tsx scripts/migrate.ts
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Migration Patterns
|
|
169
|
+
|
|
170
|
+
### Initial Setup
|
|
171
|
+
|
|
172
|
+
**First migration creates all tables:**
|
|
173
|
+
```sql
|
|
174
|
+
-- 0000_initial.sql
|
|
175
|
+
CREATE TABLE users (
|
|
176
|
+
id SERIAL PRIMARY KEY,
|
|
177
|
+
email VARCHAR(255) NOT NULL UNIQUE,
|
|
178
|
+
name VARCHAR(255) NOT NULL,
|
|
179
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
CREATE TABLE posts (
|
|
183
|
+
id SERIAL PRIMARY KEY,
|
|
184
|
+
user_id INTEGER NOT NULL REFERENCES users(id),
|
|
185
|
+
title TEXT NOT NULL,
|
|
186
|
+
content TEXT NOT NULL,
|
|
187
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
CREATE INDEX posts_user_id_idx ON posts(user_id);
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Adding Columns
|
|
194
|
+
|
|
195
|
+
**Schema:**
|
|
196
|
+
```typescript
|
|
197
|
+
export const users = pgTable('users', {
|
|
198
|
+
id: serial('id').primaryKey(),
|
|
199
|
+
email: varchar('email', { length: 255 }).notNull(),
|
|
200
|
+
phoneNumber: varchar('phone_number', { length: 20 }), // NEW
|
|
201
|
+
});
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Generated:**
|
|
205
|
+
```sql
|
|
206
|
+
ALTER TABLE users ADD COLUMN phone_number VARCHAR(20);
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Dropping Columns
|
|
210
|
+
|
|
211
|
+
**Schema:**
|
|
212
|
+
```typescript
|
|
213
|
+
export const users = pgTable('users', {
|
|
214
|
+
id: serial('id').primaryKey(),
|
|
215
|
+
email: varchar('email', { length: 255 }).notNull(),
|
|
216
|
+
// removed: phoneNumber
|
|
217
|
+
});
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Generated:**
|
|
221
|
+
```sql
|
|
222
|
+
ALTER TABLE users DROP COLUMN phone_number;
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Warning:** Data loss! Back up first.
|
|
226
|
+
|
|
227
|
+
### Renaming Columns
|
|
228
|
+
|
|
229
|
+
**Problem:** Drizzle sees rename as drop + add (data loss).
|
|
230
|
+
|
|
231
|
+
**Schema:**
|
|
232
|
+
```typescript
|
|
233
|
+
export const users = pgTable('users', {
|
|
234
|
+
id: serial('id').primaryKey(),
|
|
235
|
+
fullName: varchar('full_name', { length: 255 }), // was 'name'
|
|
236
|
+
});
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Generated (WRONG):**
|
|
240
|
+
```sql
|
|
241
|
+
ALTER TABLE users DROP COLUMN name;
|
|
242
|
+
ALTER TABLE users ADD COLUMN full_name VARCHAR(255);
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Solution:** Manually edit migration:
|
|
246
|
+
```sql
|
|
247
|
+
-- Change to:
|
|
248
|
+
ALTER TABLE users RENAME COLUMN name TO full_name;
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Changing Column Types
|
|
252
|
+
|
|
253
|
+
**Schema:**
|
|
254
|
+
```typescript
|
|
255
|
+
export const posts = pgTable('posts', {
|
|
256
|
+
id: serial('id').primaryKey(),
|
|
257
|
+
views: bigint('views', { mode: 'number' }), // was integer
|
|
258
|
+
});
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**Generated:**
|
|
262
|
+
```sql
|
|
263
|
+
ALTER TABLE posts ALTER COLUMN views TYPE BIGINT;
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**Caution:** May require data migration if types incompatible.
|
|
267
|
+
|
|
268
|
+
### Adding Indexes
|
|
269
|
+
|
|
270
|
+
**Schema:**
|
|
271
|
+
```typescript
|
|
272
|
+
export const posts = pgTable('posts', {
|
|
273
|
+
id: serial('id').primaryKey(),
|
|
274
|
+
title: text('title').notNull(),
|
|
275
|
+
}, (table) => ({
|
|
276
|
+
titleIdx: index('posts_title_idx').on(table.title), // NEW
|
|
277
|
+
}));
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**Generated:**
|
|
281
|
+
```sql
|
|
282
|
+
CREATE INDEX posts_title_idx ON posts(title);
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Adding Foreign Keys
|
|
286
|
+
|
|
287
|
+
**Schema:**
|
|
288
|
+
```typescript
|
|
289
|
+
export const comments = pgTable('comments', {
|
|
290
|
+
id: serial('id').primaryKey(),
|
|
291
|
+
postId: serial('post_id')
|
|
292
|
+
.notNull()
|
|
293
|
+
.references(() => posts.id), // NEW
|
|
294
|
+
content: text('content').notNull(),
|
|
295
|
+
});
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**Generated:**
|
|
299
|
+
```sql
|
|
300
|
+
ALTER TABLE comments
|
|
301
|
+
ADD CONSTRAINT comments_post_id_fkey
|
|
302
|
+
FOREIGN KEY (post_id) REFERENCES posts(id);
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Adding Constraints
|
|
306
|
+
|
|
307
|
+
**Unique:**
|
|
308
|
+
```typescript
|
|
309
|
+
export const users = pgTable('users', {
|
|
310
|
+
id: serial('id').primaryKey(),
|
|
311
|
+
email: varchar('email', { length: 255 }).notNull().unique(),
|
|
312
|
+
});
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**Generated:**
|
|
316
|
+
```sql
|
|
317
|
+
ALTER TABLE users ADD CONSTRAINT users_email_unique UNIQUE (email);
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Check:**
|
|
321
|
+
```typescript
|
|
322
|
+
export const products = pgTable('products', {
|
|
323
|
+
id: serial('id').primaryKey(),
|
|
324
|
+
price: integer('price').notNull(),
|
|
325
|
+
}, (table) => ({
|
|
326
|
+
priceCheck: check('price_check', 'price >= 0'),
|
|
327
|
+
}));
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**Generated:**
|
|
331
|
+
```sql
|
|
332
|
+
ALTER TABLE products ADD CONSTRAINT price_check CHECK (price >= 0);
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## Advanced Patterns
|
|
336
|
+
|
|
337
|
+
### Data Migrations
|
|
338
|
+
|
|
339
|
+
**Scenario:** Add column with computed value from existing data.
|
|
340
|
+
|
|
341
|
+
**Step 1:** Generate migration:
|
|
342
|
+
```bash
|
|
343
|
+
npm run drizzle-kit generate
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**Step 2:** Edit migration to add data transformation:
|
|
347
|
+
```sql
|
|
348
|
+
-- Add column
|
|
349
|
+
ALTER TABLE users ADD COLUMN full_name VARCHAR(255);
|
|
350
|
+
|
|
351
|
+
-- Populate with data
|
|
352
|
+
UPDATE users SET full_name = first_name || ' ' || last_name;
|
|
353
|
+
|
|
354
|
+
-- Make not null after population
|
|
355
|
+
ALTER TABLE users ALTER COLUMN full_name SET NOT NULL;
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Conditional Migrations
|
|
359
|
+
|
|
360
|
+
**Add IF NOT EXISTS for idempotency:**
|
|
361
|
+
```sql
|
|
362
|
+
ALTER TABLE users
|
|
363
|
+
ADD COLUMN IF NOT EXISTS phone_number VARCHAR(20);
|
|
364
|
+
|
|
365
|
+
CREATE INDEX IF NOT EXISTS posts_title_idx ON posts(title);
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
**Useful for:**
|
|
369
|
+
- Re-running migrations
|
|
370
|
+
- Partial deployments
|
|
371
|
+
- Development environments
|
|
372
|
+
|
|
373
|
+
### Multi-Step Migrations
|
|
374
|
+
|
|
375
|
+
**Scenario:** Rename with zero downtime.
|
|
376
|
+
|
|
377
|
+
**Migration 1 (Deploy this first):**
|
|
378
|
+
```sql
|
|
379
|
+
-- Add new column
|
|
380
|
+
ALTER TABLE users ADD COLUMN full_name VARCHAR(255);
|
|
381
|
+
|
|
382
|
+
-- Copy data
|
|
383
|
+
UPDATE users SET full_name = name;
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
**Application update:** Write to both `name` and `full_name`.
|
|
387
|
+
|
|
388
|
+
**Migration 2 (Deploy after apps updated):**
|
|
389
|
+
```sql
|
|
390
|
+
-- Make new column not null
|
|
391
|
+
ALTER TABLE users ALTER COLUMN full_name SET NOT NULL;
|
|
392
|
+
|
|
393
|
+
-- Drop old column
|
|
394
|
+
ALTER TABLE users DROP COLUMN name;
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Rollback Strategies
|
|
398
|
+
|
|
399
|
+
**Option 1: Down migrations (manual)**
|
|
400
|
+
|
|
401
|
+
Create reverse migration:
|
|
402
|
+
```sql
|
|
403
|
+
-- up.sql
|
|
404
|
+
ALTER TABLE users ADD COLUMN phone_number VARCHAR(20);
|
|
405
|
+
|
|
406
|
+
-- down.sql (create manually)
|
|
407
|
+
ALTER TABLE users DROP COLUMN phone_number;
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
**Option 2: Snapshot and restore**
|
|
411
|
+
|
|
412
|
+
**Before migration:**
|
|
413
|
+
```bash
|
|
414
|
+
pg_dump $DATABASE_URL > backup.sql
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
**If problems:**
|
|
418
|
+
```bash
|
|
419
|
+
psql $DATABASE_URL < backup.sql
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
**Option 3: Drizzle push (dev only)**
|
|
423
|
+
|
|
424
|
+
Reset to schema state:
|
|
425
|
+
```bash
|
|
426
|
+
npm run drizzle-kit push --force
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
**Warning:** Data loss in dev!
|
|
430
|
+
|
|
431
|
+
## Migration in CI/CD
|
|
432
|
+
|
|
433
|
+
### GitHub Actions Example
|
|
434
|
+
|
|
435
|
+
```yaml
|
|
436
|
+
name: Deploy
|
|
437
|
+
|
|
438
|
+
on:
|
|
439
|
+
push:
|
|
440
|
+
branches: [main]
|
|
441
|
+
|
|
442
|
+
jobs:
|
|
443
|
+
deploy:
|
|
444
|
+
runs-on: ubuntu-latest
|
|
445
|
+
steps:
|
|
446
|
+
- uses: actions/checkout@v3
|
|
447
|
+
|
|
448
|
+
- name: Install dependencies
|
|
449
|
+
run: npm ci
|
|
450
|
+
|
|
451
|
+
- name: Run migrations
|
|
452
|
+
env:
|
|
453
|
+
DATABASE_URL: ${{ secrets.DATABASE_URL }}
|
|
454
|
+
run: npm run db:migrate
|
|
455
|
+
|
|
456
|
+
- name: Deploy application
|
|
457
|
+
run: npm run deploy
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### Vercel Example
|
|
461
|
+
|
|
462
|
+
**vercel.json:**
|
|
463
|
+
```json
|
|
464
|
+
{
|
|
465
|
+
"buildCommand": "npm run build && npm run db:migrate",
|
|
466
|
+
"env": {
|
|
467
|
+
"DATABASE_URL": "@database_url"
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
**package.json:**
|
|
473
|
+
```json
|
|
474
|
+
{
|
|
475
|
+
"scripts": {
|
|
476
|
+
"build": "next build",
|
|
477
|
+
"db:migrate": "drizzle-kit migrate"
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
### Safety Checks
|
|
483
|
+
|
|
484
|
+
**Pre-migration script:**
|
|
485
|
+
```typescript
|
|
486
|
+
// scripts/pre-migrate.ts
|
|
487
|
+
import { drizzle } from 'drizzle-orm/neon-http';
|
|
488
|
+
import { neon } from '@neondatabase/serverless';
|
|
489
|
+
|
|
490
|
+
const sql = neon(process.env.DATABASE_URL!);
|
|
491
|
+
const db = drizzle(sql);
|
|
492
|
+
|
|
493
|
+
async function preMigrationChecks() {
|
|
494
|
+
try {
|
|
495
|
+
await sql`SELECT 1`;
|
|
496
|
+
console.log('✅ Database connection successful');
|
|
497
|
+
|
|
498
|
+
const tables = await sql`
|
|
499
|
+
SELECT tablename FROM pg_tables
|
|
500
|
+
WHERE schemaname = 'public'
|
|
501
|
+
`;
|
|
502
|
+
console.log(`✅ Found ${tables.length} tables`);
|
|
503
|
+
|
|
504
|
+
return true;
|
|
505
|
+
} catch (err) {
|
|
506
|
+
console.error('❌ Pre-migration check failed:', err);
|
|
507
|
+
process.exit(1);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
preMigrationChecks();
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
## Common Migration Errors
|
|
515
|
+
|
|
516
|
+
### Error: "migration already applied"
|
|
517
|
+
|
|
518
|
+
**Cause:** Journal shows migration as applied.
|
|
519
|
+
|
|
520
|
+
**Solution:**
|
|
521
|
+
```bash
|
|
522
|
+
# Check journal
|
|
523
|
+
cat src/db/migrations/meta/_journal.json
|
|
524
|
+
|
|
525
|
+
# Remove entry if needed (dev only!)
|
|
526
|
+
# Or regenerate migrations
|
|
527
|
+
rm -rf src/db/migrations/*
|
|
528
|
+
npm run drizzle-kit generate
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
### Error: "column already exists"
|
|
532
|
+
|
|
533
|
+
**Cause:** Schema out of sync with database.
|
|
534
|
+
|
|
535
|
+
**Solutions:**
|
|
536
|
+
|
|
537
|
+
**Option 1:** Edit migration to use IF NOT EXISTS:
|
|
538
|
+
```sql
|
|
539
|
+
ALTER TABLE users
|
|
540
|
+
ADD COLUMN IF NOT EXISTS phone_number VARCHAR(20);
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
**Option 2:** Reset migrations (dev only):
|
|
544
|
+
```bash
|
|
545
|
+
npm run drizzle-kit drop # Drops all tables!
|
|
546
|
+
npm run drizzle-kit migrate
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
### Error: "violates foreign key constraint"
|
|
550
|
+
|
|
551
|
+
**Cause:** Trying to drop table referenced by foreign keys.
|
|
552
|
+
|
|
553
|
+
**Solution:** Drop in reverse dependency order:
|
|
554
|
+
```sql
|
|
555
|
+
DROP TABLE comments; -- First (depends on posts)
|
|
556
|
+
DROP TABLE posts; -- Then (depends on users)
|
|
557
|
+
DROP TABLE users; -- Finally
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
Or use CASCADE (data loss!):
|
|
561
|
+
```sql
|
|
562
|
+
DROP TABLE users CASCADE;
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
### Error: "cannot drop column"
|
|
566
|
+
|
|
567
|
+
**Cause:** Column referenced by views, functions, or constraints.
|
|
568
|
+
|
|
569
|
+
**Solution:**
|
|
570
|
+
```sql
|
|
571
|
+
-- Find dependencies
|
|
572
|
+
SELECT * FROM information_schema.view_column_usage
|
|
573
|
+
WHERE column_name = 'your_column';
|
|
574
|
+
|
|
575
|
+
-- Drop views first
|
|
576
|
+
DROP VIEW view_name;
|
|
577
|
+
|
|
578
|
+
-- Then drop column
|
|
579
|
+
ALTER TABLE users DROP COLUMN your_column;
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
## Best Practices
|
|
583
|
+
|
|
584
|
+
### 1. Always Review Generated SQL
|
|
585
|
+
|
|
586
|
+
Don't blindly apply migrations:
|
|
587
|
+
```bash
|
|
588
|
+
# Generate
|
|
589
|
+
npm run drizzle-kit generate
|
|
590
|
+
|
|
591
|
+
# Review
|
|
592
|
+
cat src/db/migrations/0001_*.sql
|
|
593
|
+
|
|
594
|
+
# Apply only after review
|
|
595
|
+
npm run drizzle-kit migrate
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
### 2. Test Migrations in Development
|
|
599
|
+
|
|
600
|
+
**Before production:**
|
|
601
|
+
```bash
|
|
602
|
+
# On dev database
|
|
603
|
+
export DATABASE_URL=$DEV_DATABASE_URL
|
|
604
|
+
npm run db:migrate
|
|
605
|
+
|
|
606
|
+
# Test application
|
|
607
|
+
npm run test
|
|
608
|
+
|
|
609
|
+
# Only then deploy to production
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
### 3. Back Up Before Major Migrations
|
|
613
|
+
|
|
614
|
+
```bash
|
|
615
|
+
pg_dump $DATABASE_URL > backup_$(date +%Y%m%d).sql
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
### 4. Use Transactions (when possible)
|
|
619
|
+
|
|
620
|
+
Wrap multiple operations:
|
|
621
|
+
```sql
|
|
622
|
+
BEGIN;
|
|
623
|
+
|
|
624
|
+
ALTER TABLE users ADD COLUMN phone_number VARCHAR(20);
|
|
625
|
+
UPDATE users SET phone_number = '000-000-0000' WHERE phone_number IS NULL;
|
|
626
|
+
ALTER TABLE users ALTER COLUMN phone_number SET NOT NULL;
|
|
627
|
+
|
|
628
|
+
COMMIT;
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
### 5. Document Breaking Changes
|
|
632
|
+
|
|
633
|
+
Add comments in migration files:
|
|
634
|
+
```sql
|
|
635
|
+
-- Breaking change: Removing deprecated 'username' column
|
|
636
|
+
-- Applications must use 'email' instead
|
|
637
|
+
-- Migration date: 2024-01-15
|
|
638
|
+
ALTER TABLE users DROP COLUMN username;
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
### 6. Keep Migrations Small
|
|
642
|
+
|
|
643
|
+
One logical change per migration:
|
|
644
|
+
- ✅ Good: "Add phone number column"
|
|
645
|
+
- ❌ Bad: "Add phone number, refactor users table, update indexes"
|
|
646
|
+
|
|
647
|
+
## Related Resources
|
|
648
|
+
|
|
649
|
+
- `guides/troubleshooting.md` - Migration error solutions
|
|
650
|
+
- `guides/schema-only.md` - Schema change patterns
|
|
651
|
+
- `references/adapters.md` - Connection configuration
|
|
652
|
+
- Scripts: `scripts/run-migration.ts`
|