claudeinone-cli 1.0.1 → 1.0.3
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/index.js +16 -1
- package/kit/.claude/.ck.json +9 -0
- package/kit/.claude/.ckignore +12 -0
- package/kit/.claude/agents/accessibility-auditor.md +46 -0
- package/kit/.claude/agents/api-designer.md +43 -0
- package/kit/.claude/agents/backend-developer.md +54 -0
- package/kit/.claude/agents/brainstormer.md +33 -0
- package/kit/.claude/agents/campaign-manager.md +36 -0
- package/kit/.claude/agents/code-reviewer.md +39 -0
- package/kit/.claude/agents/content-creator.md +38 -0
- package/kit/.claude/agents/copywriter.md +42 -0
- package/kit/.claude/agents/database-admin.md +37 -0
- package/kit/.claude/agents/debugger.md +46 -0
- package/kit/.claude/agents/devops-engineer.md +41 -0
- package/kit/.claude/agents/docs-manager.md +33 -0
- package/kit/.claude/agents/email-wizard.md +40 -0
- package/kit/.claude/agents/frontend-developer.md +52 -0
- package/kit/.claude/agents/fullstack-developer.md +55 -0
- package/kit/.claude/agents/git-manager.md +40 -0
- package/kit/.claude/agents/i18n-specialist.md +46 -0
- package/kit/.claude/agents/integration-specialist.md +48 -0
- package/kit/.claude/agents/journal-writer.md +39 -0
- package/kit/.claude/agents/mcp-manager.md +57 -0
- package/kit/.claude/agents/mobile-developer.md +38 -0
- package/kit/.claude/agents/performance-optimizer.md +38 -0
- package/kit/.claude/agents/planner.md +56 -0
- package/kit/.claude/agents/project-manager.md +34 -0
- package/kit/.claude/agents/refactorer.md +43 -0
- package/kit/.claude/agents/researcher.md +45 -0
- package/kit/.claude/agents/risk-analyst.md +33 -0
- package/kit/.claude/agents/scalability-consultant.md +39 -0
- package/kit/.claude/agents/scout.md +25 -0
- package/kit/.claude/agents/security-auditor.md +42 -0
- package/kit/.claude/agents/seo-specialist.md +44 -0
- package/kit/.claude/agents/skill-creator.md +64 -0
- package/kit/.claude/agents/social-media-manager.md +35 -0
- package/kit/.claude/agents/systems-designer.md +35 -0
- package/kit/.claude/agents/technology-strategist.md +43 -0
- package/kit/.claude/agents/tester.md +40 -0
- package/kit/.claude/agents/ui-ux-designer.md +40 -0
- package/kit/.claude/commands/co/ask.md +29 -0
- package/kit/.claude/commands/co/bootstrap-auto-fast.md +28 -0
- package/kit/.claude/commands/co/bootstrap-auto-parallel.md +29 -0
- package/kit/.claude/commands/co/bootstrap-auto.md +30 -0
- package/kit/.claude/commands/co/bootstrap.md +31 -0
- package/kit/.claude/commands/co/brainstorm.md +27 -0
- package/kit/.claude/commands/co/campaign.md +28 -0
- package/kit/.claude/commands/co/changelog.md +25 -0
- package/kit/.claude/commands/co/checkpoint.md +25 -0
- package/kit/.claude/commands/co/ci.md +26 -0
- package/kit/.claude/commands/co/ck-help.md +24 -0
- package/kit/.claude/commands/co/coding-level.md +24 -0
- package/kit/.claude/commands/co/content-cro.md +26 -0
- package/kit/.claude/commands/co/content-enhance.md +26 -0
- package/kit/.claude/commands/co/content-fast.md +24 -0
- package/kit/.claude/commands/co/content-good.md +26 -0
- package/kit/.claude/commands/co/cook.md +33 -0
- package/kit/.claude/commands/co/debug.md +26 -0
- package/kit/.claude/commands/co/deploy.md +25 -0
- package/kit/.claude/commands/co/design-3d.md +27 -0
- package/kit/.claude/commands/co/design-describe.md +25 -0
- package/kit/.claude/commands/co/design-fast.md +25 -0
- package/kit/.claude/commands/co/design-good.md +28 -0
- package/kit/.claude/commands/co/design-screenshot.md +26 -0
- package/kit/.claude/commands/co/design-video.md +26 -0
- package/kit/.claude/commands/co/docker.md +24 -0
- package/kit/.claude/commands/co/docs-api.md +25 -0
- package/kit/.claude/commands/co/docs-init.md +26 -0
- package/kit/.claude/commands/co/docs-readme.md +24 -0
- package/kit/.claude/commands/co/docs-summarize.md +25 -0
- package/kit/.claude/commands/co/docs-update.md +25 -0
- package/kit/.claude/commands/co/env-check.md +25 -0
- package/kit/.claude/commands/co/fix-ci.md +29 -0
- package/kit/.claude/commands/co/fix-fast.md +28 -0
- package/kit/.claude/commands/co/fix-hard.md +33 -0
- package/kit/.claude/commands/co/fix-logs.md +28 -0
- package/kit/.claude/commands/co/fix-types.md +28 -0
- package/kit/.claude/commands/co/fix-ui.md +28 -0
- package/kit/.claude/commands/co/fix.md +27 -0
- package/kit/.claude/commands/co/git-cm.md +26 -0
- package/kit/.claude/commands/co/git-cp.md +26 -0
- package/kit/.claude/commands/co/git-pr.md +26 -0
- package/kit/.claude/commands/co/index.md +24 -0
- package/kit/.claude/commands/co/integrate-polar.md +29 -0
- package/kit/.claude/commands/co/integrate-sepay.md +29 -0
- package/kit/.claude/commands/co/journal.md +27 -0
- package/kit/.claude/commands/co/k8s.md +24 -0
- package/kit/.claude/commands/co/kanban.md +25 -0
- package/kit/.claude/commands/co/lint-fix.md +24 -0
- package/kit/.claude/commands/co/load.md +25 -0
- package/kit/.claude/commands/co/migrate.md +28 -0
- package/kit/.claude/commands/co/mock.md +26 -0
- package/kit/.claude/commands/co/mode.md +24 -0
- package/kit/.claude/commands/co/monitor.md +25 -0
- package/kit/.claude/commands/co/new-feature.md +27 -0
- package/kit/.claude/commands/co/optimize.md +26 -0
- package/kit/.claude/commands/co/plan-archive.md +24 -0
- package/kit/.claude/commands/co/plan-ci.md +28 -0
- package/kit/.claude/commands/co/plan-cro.md +27 -0
- package/kit/.claude/commands/co/plan-fast.md +24 -0
- package/kit/.claude/commands/co/plan-hard.md +27 -0
- package/kit/.claude/commands/co/plan-parallel.md +25 -0
- package/kit/.claude/commands/co/plan-two.md +29 -0
- package/kit/.claude/commands/co/plan-validate.md +27 -0
- package/kit/.claude/commands/co/plan.md +27 -0
- package/kit/.claude/commands/co/pr.md +25 -0
- package/kit/.claude/commands/co/preview.md +26 -0
- package/kit/.claude/commands/co/refactor.md +25 -0
- package/kit/.claude/commands/co/release.md +25 -0
- package/kit/.claude/commands/co/review-a11y.md +24 -0
- package/kit/.claude/commands/co/review-codebase-parallel.md +27 -0
- package/kit/.claude/commands/co/review-codebase.md +27 -0
- package/kit/.claude/commands/co/review-perf.md +24 -0
- package/kit/.claude/commands/co/review-security.md +25 -0
- package/kit/.claude/commands/co/scaffold.md +25 -0
- package/kit/.claude/commands/co/scout.md +26 -0
- package/kit/.claude/commands/co/secure.md +26 -0
- package/kit/.claude/commands/co/seed.md +25 -0
- package/kit/.claude/commands/co/seo-audit.md +24 -0
- package/kit/.claude/commands/co/seo-keywords.md +25 -0
- package/kit/.claude/commands/co/skill-create.md +29 -0
- package/kit/.claude/commands/co/skill-fix-logs.md +28 -0
- package/kit/.claude/commands/co/slide-create.md +24 -0
- package/kit/.claude/commands/co/spawn.md +24 -0
- package/kit/.claude/commands/co/terraform.md +24 -0
- package/kit/.claude/commands/co/test-gen.md +24 -0
- package/kit/.claude/commands/co/test-ui.md +27 -0
- package/kit/.claude/commands/co/test.md +26 -0
- package/kit/.claude/commands/co/use-mcp.md +25 -0
- package/kit/.claude/commands/co/video-script.md +25 -0
- package/kit/.claude/commands/co/watzup.md +25 -0
- package/kit/.claude/commands/co/worktree.md +25 -0
- package/kit/.claude/commands/co/write-blog.md +25 -0
- package/kit/.claude/commands/co/write-copy.md +24 -0
- package/kit/.claude/commands/co/write-email.md +25 -0
- package/kit/.claude/commands/content/content-cro.md +26 -0
- package/kit/.claude/commands/content/content-enhance.md +26 -0
- package/kit/.claude/commands/content/content-fast.md +24 -0
- package/kit/.claude/commands/content/content-good.md +26 -0
- package/kit/.claude/commands/content/enhance.md +26 -0
- package/kit/.claude/commands/content/good.md +26 -0
- package/kit/.claude/commands/core/ask.md +29 -0
- package/kit/.claude/commands/core/bootstrap-auto-fast.md +28 -0
- package/kit/.claude/commands/core/bootstrap-auto-parallel.md +29 -0
- package/kit/.claude/commands/core/bootstrap-auto.md +30 -0
- package/kit/.claude/commands/core/bootstrap.md +31 -0
- package/kit/.claude/commands/core/ck-help.md +24 -0
- package/kit/.claude/commands/core/coding-level.md +24 -0
- package/kit/.claude/commands/core/cook.md +33 -0
- package/kit/.claude/commands/core/debug.md +26 -0
- package/kit/.claude/commands/core/journal.md +27 -0
- package/kit/.claude/commands/core/kanban.md +25 -0
- package/kit/.claude/commands/core/preview.md +26 -0
- package/kit/.claude/commands/core/scout.md +26 -0
- package/kit/.claude/commands/core/test-ui.md +27 -0
- package/kit/.claude/commands/core/test.md +26 -0
- package/kit/.claude/commands/core/use-mcp.md +25 -0
- package/kit/.claude/commands/core/watzup.md +25 -0
- package/kit/.claude/commands/core/worktree.md +25 -0
- package/kit/.claude/commands/design/3d.md +27 -0
- package/kit/.claude/commands/design/design-3d.md +27 -0
- package/kit/.claude/commands/design/design-describe.md +25 -0
- package/kit/.claude/commands/design/design-fast.md +25 -0
- package/kit/.claude/commands/design/design-good.md +28 -0
- package/kit/.claude/commands/design/design-screenshot.md +26 -0
- package/kit/.claude/commands/design/design-video.md +26 -0
- package/kit/.claude/commands/design/good.md +28 -0
- package/kit/.claude/commands/design/video.md +26 -0
- package/kit/.claude/commands/docs/docs-init.md +26 -0
- package/kit/.claude/commands/docs/docs-summarize.md +25 -0
- package/kit/.claude/commands/docs/docs-update.md +25 -0
- package/kit/.claude/commands/docs/init.md +26 -0
- package/kit/.claude/commands/docs/summarize.md +25 -0
- package/kit/.claude/commands/fix/ci.md +29 -0
- package/kit/.claude/commands/fix/fast.md +28 -0
- package/kit/.claude/commands/fix/fix-ci.md +29 -0
- package/kit/.claude/commands/fix/fix-fast.md +28 -0
- package/kit/.claude/commands/fix/fix-hard.md +33 -0
- package/kit/.claude/commands/fix/fix-logs.md +28 -0
- package/kit/.claude/commands/fix/fix-types.md +28 -0
- package/kit/.claude/commands/fix/fix-ui.md +28 -0
- package/kit/.claude/commands/fix/hard.md +33 -0
- package/kit/.claude/commands/fix/logs.md +28 -0
- package/kit/.claude/commands/fix/types.md +28 -0
- package/kit/.claude/commands/fix/ui.md +28 -0
- package/kit/.claude/commands/git/cp.md +26 -0
- package/kit/.claude/commands/git/git-cm.md +26 -0
- package/kit/.claude/commands/git/git-cp.md +26 -0
- package/kit/.claude/commands/git/git-pr.md +26 -0
- package/kit/.claude/commands/integrate/integrate-polar.md +29 -0
- package/kit/.claude/commands/integrate/integrate-sepay.md +29 -0
- package/kit/.claude/commands/integrate/sepay.md +29 -0
- package/kit/.claude/commands/plan/ci.md +28 -0
- package/kit/.claude/commands/plan/cro.md +27 -0
- package/kit/.claude/commands/plan/hard.md +27 -0
- package/kit/.claude/commands/plan/plan-archive.md +24 -0
- package/kit/.claude/commands/plan/plan-ci.md +28 -0
- package/kit/.claude/commands/plan/plan-cro.md +27 -0
- package/kit/.claude/commands/plan/plan-fast.md +24 -0
- package/kit/.claude/commands/plan/plan-hard.md +27 -0
- package/kit/.claude/commands/plan/plan-parallel.md +25 -0
- package/kit/.claude/commands/plan/plan-two.md +29 -0
- package/kit/.claude/commands/plan/plan-validate.md +27 -0
- package/kit/.claude/commands/plan/plan.md +27 -0
- package/kit/.claude/commands/plan/validate.md +27 -0
- package/kit/.claude/commands/skill/fix-logs.md +28 -0
- package/kit/.claude/commands/skill/skill-create.md +29 -0
- package/kit/.claude/commands/skill/skill-fix-logs.md +28 -0
- package/kit/.claude/settings.json +16 -0
- package/kit/.claude/skills/ai-anthropic.md +100 -0
- package/kit/.claude/skills/ai-context-engineering.md +113 -0
- package/kit/.claude/skills/ai-gemini.md +152 -0
- package/kit/.claude/skills/ai-langchain.md +93 -0
- package/kit/.claude/skills/ai-llamaindex.md +179 -0
- package/kit/.claude/skills/ai-mcp-builder.md +101 -0
- package/kit/.claude/skills/ai-openai.md +250 -0
- package/kit/.claude/skills/ai-prompt-engineering.md +173 -0
- package/kit/.claude/skills/ai-rag.md +91 -0
- package/kit/.claude/skills/ai-vectordb.md +215 -0
- package/kit/.claude/skills/analytics-segment.md +161 -0
- package/kit/.claude/skills/api-caching.md +103 -0
- package/kit/.claude/skills/api-documentation.md +50 -0
- package/kit/.claude/skills/api-graphql.md +234 -0
- package/kit/.claude/skills/api-openapi.md +116 -0
- package/kit/.claude/skills/api-pagination-filtering.md +239 -0
- package/kit/.claude/skills/api-rate-limiting.md +179 -0
- package/kit/.claude/skills/api-rest-advanced.md +50 -0
- package/kit/.claude/skills/api-rest.md +217 -0
- package/kit/.claude/skills/api-trpc.md +173 -0
- package/kit/.claude/skills/api-versioning.md +70 -0
- package/kit/.claude/skills/api-webhooks.md +226 -0
- package/kit/.claude/skills/arch-clean-code.md +226 -0
- package/kit/.claude/skills/arch-clean.md +91 -0
- package/kit/.claude/skills/arch-cqrs.md +229 -0
- package/kit/.claude/skills/arch-ddd.md +85 -0
- package/kit/.claude/skills/arch-event-driven.md +189 -0
- package/kit/.claude/skills/arch-microservices.md +80 -0
- package/kit/.claude/skills/arch-monorepo.md +87 -0
- package/kit/.claude/skills/arch-multi-tenant.md +81 -0
- package/kit/.claude/skills/arch-serverless.md +86 -0
- package/kit/.claude/skills/auth-clerk.md +97 -0
- package/kit/.claude/skills/auth-jwt.md +143 -0
- package/kit/.claude/skills/auth-lucia.md +93 -0
- package/kit/.claude/skills/auth-nextauth.md +446 -0
- package/kit/.claude/skills/auth-oauth.md +208 -0
- package/kit/.claude/skills/auth-oauth2.md +110 -0
- package/kit/.claude/skills/auth-passkeys.md +109 -0
- package/kit/.claude/skills/auth-session.md +88 -0
- package/kit/.claude/skills/backend-dotnet.md +414 -0
- package/kit/.claude/skills/backend-express.md +129 -0
- package/kit/.claude/skills/backend-fastify.md +104 -0
- package/kit/.claude/skills/backend-go.md +205 -0
- package/kit/.claude/skills/backend-graphql.md +149 -0
- package/kit/.claude/skills/backend-grpc.md +382 -0
- package/kit/.claude/skills/backend-hono.md +95 -0
- package/kit/.claude/skills/backend-java-spring.md +198 -0
- package/kit/.claude/skills/backend-nodejs-express.md +165 -0
- package/kit/.claude/skills/backend-nodejs.md +143 -0
- package/kit/.claude/skills/backend-php-laravel.md +156 -0
- package/kit/.claude/skills/backend-python-django.md +200 -0
- package/kit/.claude/skills/backend-python-fastapi.md +169 -0
- package/kit/.claude/skills/backend-ruby-rails.md +190 -0
- package/kit/.claude/skills/backend-rust.md +182 -0
- package/kit/.claude/skills/backend-websockets.md +392 -0
- package/kit/.claude/skills/cache-redis.md +195 -0
- package/kit/.claude/skills/caching-strategies.md +100 -0
- package/kit/.claude/skills/cloud-aws.md +165 -0
- package/kit/.claude/skills/cloud-azure.md +187 -0
- package/kit/.claude/skills/cloud-cloudflare.md +74 -0
- package/kit/.claude/skills/cloud-fly.md +94 -0
- package/kit/.claude/skills/cloud-gcp.md +160 -0
- package/kit/.claude/skills/cloud-railway.md +92 -0
- package/kit/.claude/skills/cloud-render.md +70 -0
- package/kit/.claude/skills/cloud-serverless.md +68 -0
- package/kit/.claude/skills/cloud-vercel.md +76 -0
- package/kit/.claude/skills/component-patterns.md +50 -0
- package/kit/.claude/skills/content-management.md +197 -0
- package/kit/.claude/skills/cors-security.md +50 -0
- package/kit/.claude/skills/data-csv-excel.md +210 -0
- package/kit/.claude/skills/database-optimization.md +196 -0
- package/kit/.claude/skills/databases-transactions.md +68 -0
- package/kit/.claude/skills/db-cassandra.md +89 -0
- package/kit/.claude/skills/db-drizzle.md +363 -0
- package/kit/.claude/skills/db-dynamodb.md +83 -0
- package/kit/.claude/skills/db-elasticsearch.md +105 -0
- package/kit/.claude/skills/db-firebase-firestore.md +191 -0
- package/kit/.claude/skills/db-mongodb.md +198 -0
- package/kit/.claude/skills/db-mysql.md +50 -0
- package/kit/.claude/skills/db-neon.md +72 -0
- package/kit/.claude/skills/db-planetscale.md +76 -0
- package/kit/.claude/skills/db-postgresql.md +50 -0
- package/kit/.claude/skills/db-prisma.md +414 -0
- package/kit/.claude/skills/db-redis.md +50 -0
- package/kit/.claude/skills/db-sqlite.md +149 -0
- package/kit/.claude/skills/db-supabase.md +445 -0
- package/kit/.claude/skills/devops-ci-cd.md +271 -0
- package/kit/.claude/skills/devops-database-backup.md +77 -0
- package/kit/.claude/skills/devops-docker.md +93 -0
- package/kit/.claude/skills/devops-github-actions.md +82 -0
- package/kit/.claude/skills/devops-health-checks.md +50 -0
- package/kit/.claude/skills/devops-kubernetes.md +109 -0
- package/kit/.claude/skills/devops-logging.md +163 -0
- package/kit/.claude/skills/devops-monitoring.md +203 -0
- package/kit/.claude/skills/devops-pulumi.md +94 -0
- package/kit/.claude/skills/devops-secrets.md +166 -0
- package/kit/.claude/skills/devops-terraform.md +226 -0
- package/kit/.claude/skills/error-boundaries.md +84 -0
- package/kit/.claude/skills/file-storage.md +50 -0
- package/kit/.claude/skills/frontend-angular.md +104 -0
- package/kit/.claude/skills/frontend-astro.md +94 -0
- package/kit/.claude/skills/frontend-bundle-analysis.md +147 -0
- package/kit/.claude/skills/frontend-forms.md +134 -0
- package/kit/.claude/skills/frontend-htmx.md +86 -0
- package/kit/.claude/skills/frontend-nextjs.md +188 -0
- package/kit/.claude/skills/frontend-pwa.md +105 -0
- package/kit/.claude/skills/frontend-react-hooks.md +238 -0
- package/kit/.claude/skills/frontend-react.md +129 -0
- package/kit/.claude/skills/frontend-remix-advanced.md +106 -0
- package/kit/.claude/skills/frontend-remix.md +101 -0
- package/kit/.claude/skills/frontend-solid.md +99 -0
- package/kit/.claude/skills/frontend-state-management.md +134 -0
- package/kit/.claude/skills/frontend-state.md +106 -0
- package/kit/.claude/skills/frontend-svelte.md +121 -0
- package/kit/.claude/skills/frontend-testing.md +100 -0
- package/kit/.claude/skills/frontend-vite.md +94 -0
- package/kit/.claude/skills/frontend-vue.md +133 -0
- package/kit/.claude/skills/frontend-webpack.md +93 -0
- package/kit/.claude/skills/functional-programming.md +50 -0
- package/kit/.claude/skills/hooks-custom.md +50 -0
- package/kit/.claude/skills/http-server.md +50 -0
- package/kit/.claude/skills/i18n-general.md +89 -0
- package/kit/.claude/skills/i18n-localization.md +191 -0
- package/kit/.claude/skills/i18n-nextjs.md +127 -0
- package/kit/.claude/skills/infrastructure-docker-compose.md +77 -0
- package/kit/.claude/skills/infrastructure-serverless.md +177 -0
- package/kit/.claude/skills/jwt-tokens.md +50 -0
- package/kit/.claude/skills/logging-winston.md +106 -0
- package/kit/.claude/skills/messaging-kafka.md +102 -0
- package/kit/.claude/skills/messaging-rabbitmq.md +50 -0
- package/kit/.claude/skills/mobile-capacitor.md +109 -0
- package/kit/.claude/skills/mobile-expo.md +101 -0
- package/kit/.claude/skills/mobile-flutter.md +259 -0
- package/kit/.claude/skills/mobile-react-native.md +238 -0
- package/kit/.claude/skills/monitoring-apm.md +50 -0
- package/kit/.claude/skills/monitoring-error-tracking.md +217 -0
- package/kit/.claude/skills/nodejs-streams.md +168 -0
- package/kit/.claude/skills/oauth-integration.md +50 -0
- package/kit/.claude/skills/patterns-dependency-injection.md +218 -0
- package/kit/.claude/skills/patterns-factory-singleton.md +209 -0
- package/kit/.claude/skills/patterns-observer-pubsub.md +210 -0
- package/kit/.claude/skills/payment-lemonsqueezy.md +101 -0
- package/kit/.claude/skills/payment-square.md +178 -0
- package/kit/.claude/skills/payment-stripe.md +206 -0
- package/kit/.claude/skills/perf-bundle.md +100 -0
- package/kit/.claude/skills/perf-web-vitals.md +102 -0
- package/kit/.claude/skills/performance-database-connection-pooling.md +67 -0
- package/kit/.claude/skills/performance-metrics.md +73 -0
- package/kit/.claude/skills/performance-optimization.md +208 -0
- package/kit/.claude/skills/performance-web-vitals.md +169 -0
- package/kit/.claude/skills/rate-limiting.md +77 -0
- package/kit/.claude/skills/reactive-programming.md +50 -0
- package/kit/.claude/skills/realtime-database.md +50 -0
- package/kit/.claude/skills/realtime-subscriptions.md +218 -0
- package/kit/.claude/skills/saas-ab-testing.md +90 -0
- package/kit/.claude/skills/saas-analytics.md +113 -0
- package/kit/.claude/skills/saas-billing.md +106 -0
- package/kit/.claude/skills/saas-email.md +88 -0
- package/kit/.claude/skills/saas-feature-flags.md +83 -0
- package/kit/.claude/skills/saas-onboarding.md +96 -0
- package/kit/.claude/skills/saas-user-onboarding.md +207 -0
- package/kit/.claude/skills/security-encryption.md +216 -0
- package/kit/.claude/skills/security-owasp.md +212 -0
- package/kit/.claude/skills/security-secrets-rotation.md +64 -0
- package/kit/.claude/skills/seo-content.md +94 -0
- package/kit/.claude/skills/seo-technical.md +101 -0
- package/kit/.claude/skills/serverless-framework.md +151 -0
- package/kit/.claude/skills/sharding-scaling.md +50 -0
- package/kit/.claude/skills/styling-css-modules.md +219 -0
- package/kit/.claude/skills/styling-styled-components.md +206 -0
- package/kit/.claude/skills/styling-tailwind.md +206 -0
- package/kit/.claude/skills/test-e2e.md +86 -0
- package/kit/.claude/skills/test-integration.md +216 -0
- package/kit/.claude/skills/test-performance.md +162 -0
- package/kit/.claude/skills/test-tdd.md +170 -0
- package/kit/.claude/skills/test-unit.md +301 -0
- package/kit/.claude/skills/testing-accessibility.md +117 -0
- package/kit/.claude/skills/testing-contract.md +75 -0
- package/kit/.claude/skills/testing-e2e-advanced.md +50 -0
- package/kit/.claude/skills/testing-load-stress.md +79 -0
- package/kit/.claude/skills/testing-mutation.md +92 -0
- package/kit/.claude/skills/testing-snapshot.md +50 -0
- package/kit/.claude/skills/testing-vitest.md +172 -0
- package/kit/.claude/skills/tooling-biome.md +91 -0
- package/kit/.claude/skills/tooling-build-tools.md +166 -0
- package/kit/.claude/skills/tooling-bun.md +94 -0
- package/kit/.claude/skills/tooling-eslint.md +103 -0
- package/kit/.claude/skills/tooling-git.md +79 -0
- package/kit/.claude/skills/tooling-monorepo.md +162 -0
- package/kit/.claude/skills/tooling-testing-frameworks.md +207 -0
- package/kit/.claude/skills/tooling-typescript.md +156 -0
- package/kit/.claude/skills/ui-a11y.md +106 -0
- package/kit/.claude/skills/ui-framer.md +106 -0
- package/kit/.claude/skills/ui-gsap.md +102 -0
- package/kit/.claude/skills/ui-radix.md +82 -0
- package/kit/.claude/skills/ui-shadcn.md +463 -0
- package/kit/.claude/skills/ui-tailwind.md +98 -0
- package/kit/.claude/skills/ui-threejs.md +110 -0
- package/kit/.claude/skills/ui-tokens.md +97 -0
- package/kit/.claude/skills/utilities-date-time.md +170 -0
- package/kit/.claude/skills/validation-schemas.md +110 -0
- package/kit/.claude/skills/version-control-git.md +144 -0
- package/kit/.claude/skills/web-accessibility-wcag.md +102 -0
- package/kit/.claude/skills/web-astro.md +197 -0
- package/kit/.claude/skills/web-html-css.md +224 -0
- package/kit/.claude/skills/web-htmx.md +99 -0
- package/kit/.claude/skills/web-nextjs-advanced.md +202 -0
- package/kit/.claude/skills/web-remix.md +194 -0
- package/kit/.claude/skills/web-seo.md +99 -0
- package/kit/.claude/skills/web-svelte.md +234 -0
- package/kit/.claude/skills/websocket-server.md +50 -0
- package/kit/.claude/skills/writing-marketing.md +89 -0
- package/kit/.claude/skills/writing-technical.md +119 -0
- package/kit/CLAUDE.md +206 -0
- package/kit/README.md +150 -0
- package/kit/SKILLS_INDEX.md +188 -0
- package/kit/docs/README.md +3 -0
- package/kit/journals/README.md +3 -0
- package/kit/plans/README.md +3 -0
- package/package.json +3 -1
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
# Prisma ORM
|
|
2
|
+
|
|
3
|
+
Type-safe database ORM for Node.js and TypeScript with excellent DX.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @prisma/client
|
|
9
|
+
npm install -D prisma typescript ts-node
|
|
10
|
+
|
|
11
|
+
npx prisma init
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Schema Definition (prisma/schema.prisma)
|
|
15
|
+
|
|
16
|
+
```prisma
|
|
17
|
+
generator client {
|
|
18
|
+
provider = "prisma-client-js"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
datasource db {
|
|
22
|
+
provider = "postgresql"
|
|
23
|
+
url = env("DATABASE_URL")
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
model User {
|
|
27
|
+
id Int @id @default(autoincrement())
|
|
28
|
+
email String @unique
|
|
29
|
+
name String
|
|
30
|
+
password String
|
|
31
|
+
createdAt DateTime @default(now())
|
|
32
|
+
updatedAt DateTime @updatedAt
|
|
33
|
+
|
|
34
|
+
posts Post[]
|
|
35
|
+
comments Comment[]
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
model Post {
|
|
39
|
+
id Int @id @default(autoincrement())
|
|
40
|
+
title String
|
|
41
|
+
content String
|
|
42
|
+
published Boolean @default(false)
|
|
43
|
+
createdAt DateTime @default(now())
|
|
44
|
+
updatedAt DateTime @updatedAt
|
|
45
|
+
|
|
46
|
+
authorId Int
|
|
47
|
+
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
|
|
48
|
+
|
|
49
|
+
comments Comment[]
|
|
50
|
+
|
|
51
|
+
@@index([authorId])
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
model Comment {
|
|
55
|
+
id Int @id @default(autoincrement())
|
|
56
|
+
content String
|
|
57
|
+
createdAt DateTime @default(now())
|
|
58
|
+
|
|
59
|
+
postId Int
|
|
60
|
+
post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
|
|
61
|
+
|
|
62
|
+
userId Int
|
|
63
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
64
|
+
|
|
65
|
+
@@unique([postId, userId])
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Migrations
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Create migration
|
|
73
|
+
npx prisma migrate dev --name add_user_table
|
|
74
|
+
|
|
75
|
+
# Create migration (empty)
|
|
76
|
+
npx prisma migrate dev --create-only
|
|
77
|
+
|
|
78
|
+
# Apply pending migrations
|
|
79
|
+
npx prisma migrate deploy
|
|
80
|
+
|
|
81
|
+
# View migration status
|
|
82
|
+
npx prisma migrate status
|
|
83
|
+
|
|
84
|
+
# Reset database (WARNING: destructive)
|
|
85
|
+
npx prisma migrate reset
|
|
86
|
+
|
|
87
|
+
# Generate Prisma Client
|
|
88
|
+
npx prisma generate
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Basic Queries
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import { PrismaClient } from '@prisma/client';
|
|
95
|
+
|
|
96
|
+
const prisma = new PrismaClient();
|
|
97
|
+
|
|
98
|
+
// Create
|
|
99
|
+
const user = await prisma.user.create({
|
|
100
|
+
data: {
|
|
101
|
+
email: 'john@example.com',
|
|
102
|
+
name: 'John Doe',
|
|
103
|
+
password: 'hashed_password'
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Read
|
|
108
|
+
const userById = await prisma.user.findUnique({
|
|
109
|
+
where: { id: 1 }
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const userByEmail = await prisma.user.findFirst({
|
|
113
|
+
where: { email: 'john@example.com' }
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
const allUsers = await prisma.user.findMany();
|
|
117
|
+
|
|
118
|
+
// Update
|
|
119
|
+
const updated = await prisma.user.update({
|
|
120
|
+
where: { id: 1 },
|
|
121
|
+
data: { name: 'Jane Doe' }
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// Delete
|
|
125
|
+
await prisma.user.delete({
|
|
126
|
+
where: { id: 1 }
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Upsert (create if not exists, else update)
|
|
130
|
+
const upserted = await prisma.user.upsert({
|
|
131
|
+
where: { email: 'john@example.com' },
|
|
132
|
+
update: { name: 'John Updated' },
|
|
133
|
+
create: { email: 'john@example.com', name: 'John', password: 'hash' }
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Relationships and Eager Loading
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
// Include related data
|
|
141
|
+
const userWithPosts = await prisma.user.findUnique({
|
|
142
|
+
where: { id: 1 },
|
|
143
|
+
include: {
|
|
144
|
+
posts: true,
|
|
145
|
+
comments: true
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// Nested include
|
|
150
|
+
const userWithPostComments = await prisma.user.findUnique({
|
|
151
|
+
where: { id: 1 },
|
|
152
|
+
include: {
|
|
153
|
+
posts: {
|
|
154
|
+
include: {
|
|
155
|
+
comments: true
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
// Select specific fields
|
|
162
|
+
const userNameOnly = await prisma.user.findUnique({
|
|
163
|
+
where: { id: 1 },
|
|
164
|
+
select: {
|
|
165
|
+
name: true,
|
|
166
|
+
email: true,
|
|
167
|
+
posts: {
|
|
168
|
+
select: {
|
|
169
|
+
title: true
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
// Create with nested relations
|
|
176
|
+
const userWithPost = await prisma.user.create({
|
|
177
|
+
data: {
|
|
178
|
+
email: 'john@example.com',
|
|
179
|
+
name: 'John',
|
|
180
|
+
password: 'hash',
|
|
181
|
+
posts: {
|
|
182
|
+
create: [
|
|
183
|
+
{ title: 'First Post', content: 'Content...' },
|
|
184
|
+
{ title: 'Second Post', content: 'More content...' }
|
|
185
|
+
]
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
include: { posts: true }
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Filtering and Searching
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
// Where conditions
|
|
196
|
+
const posts = await prisma.post.findMany({
|
|
197
|
+
where: {
|
|
198
|
+
published: true,
|
|
199
|
+
author: {
|
|
200
|
+
email: { contains: '@example.com' }
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
// OR condition
|
|
206
|
+
const results = await prisma.user.findMany({
|
|
207
|
+
where: {
|
|
208
|
+
OR: [
|
|
209
|
+
{ email: 'john@example.com' },
|
|
210
|
+
{ name: 'Jane' }
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Complex filtering
|
|
216
|
+
const active = await prisma.user.findMany({
|
|
217
|
+
where: {
|
|
218
|
+
AND: [
|
|
219
|
+
{ createdAt: { gte: new Date('2023-01-01') } },
|
|
220
|
+
{ posts: { some: { published: true } } }
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
// Text search (PostgreSQL)
|
|
226
|
+
const search = await prisma.post.findMany({
|
|
227
|
+
where: {
|
|
228
|
+
content: {
|
|
229
|
+
search: 'typescript prisma'
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Pagination
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
const pageSize = 10;
|
|
239
|
+
const page = 1;
|
|
240
|
+
|
|
241
|
+
const posts = await prisma.post.findMany({
|
|
242
|
+
skip: (page - 1) * pageSize,
|
|
243
|
+
take: pageSize,
|
|
244
|
+
orderBy: { createdAt: 'desc' }
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
// With count
|
|
248
|
+
const [posts, total] = await Promise.all([
|
|
249
|
+
prisma.post.findMany({
|
|
250
|
+
skip: (page - 1) * pageSize,
|
|
251
|
+
take: pageSize
|
|
252
|
+
}),
|
|
253
|
+
prisma.post.count()
|
|
254
|
+
]);
|
|
255
|
+
|
|
256
|
+
const totalPages = Math.ceil(total / pageSize);
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Aggregations
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
// Count
|
|
263
|
+
const userCount = await prisma.user.count();
|
|
264
|
+
|
|
265
|
+
// Count with where
|
|
266
|
+
const publishedPosts = await prisma.post.count({
|
|
267
|
+
where: { published: true }
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// Aggregations (sum, avg, min, max, count)
|
|
271
|
+
const stats = await prisma.post.aggregate({
|
|
272
|
+
where: { published: true },
|
|
273
|
+
_count: true,
|
|
274
|
+
_avg: { views: true },
|
|
275
|
+
_sum: { likes: true }
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
// Group by
|
|
279
|
+
const postsByAuthor = await prisma.post.groupBy({
|
|
280
|
+
by: ['authorId'],
|
|
281
|
+
_count: true,
|
|
282
|
+
orderBy: { _count: { id: 'desc' } }
|
|
283
|
+
});
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Transactions
|
|
287
|
+
|
|
288
|
+
```typescript
|
|
289
|
+
// Prisma interactive transactions
|
|
290
|
+
const [user, post] = await prisma.$transaction([
|
|
291
|
+
prisma.user.create({
|
|
292
|
+
data: { email: 'john@example.com', name: 'John', password: 'hash' }
|
|
293
|
+
}),
|
|
294
|
+
prisma.post.create({
|
|
295
|
+
data: { title: 'First Post', content: 'Content...', authorId: 1 }
|
|
296
|
+
})
|
|
297
|
+
]);
|
|
298
|
+
|
|
299
|
+
// With dependent queries
|
|
300
|
+
const result = await prisma.$transaction(async (tx) => {
|
|
301
|
+
const user = await tx.user.create({
|
|
302
|
+
data: { email: 'john@example.com', name: 'John', password: 'hash' }
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
const post = await tx.post.create({
|
|
306
|
+
data: {
|
|
307
|
+
title: 'First Post',
|
|
308
|
+
content: 'Content...',
|
|
309
|
+
authorId: user.id
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
return { user, post };
|
|
314
|
+
});
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
## Raw Queries
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
// Raw SQL
|
|
321
|
+
const users = await prisma.$queryRaw`
|
|
322
|
+
SELECT * FROM "User" WHERE email LIKE ${'%@example.com'}
|
|
323
|
+
`;
|
|
324
|
+
|
|
325
|
+
// Raw execute
|
|
326
|
+
await prisma.$executeRaw`
|
|
327
|
+
DELETE FROM "Post" WHERE "authorId" = ${1}
|
|
328
|
+
`;
|
|
329
|
+
|
|
330
|
+
// Unsafe (parameterized)
|
|
331
|
+
const email = 'john@example.com';
|
|
332
|
+
const user = await prisma.$queryRawUnsafe(
|
|
333
|
+
'SELECT * FROM User WHERE email = ?',
|
|
334
|
+
email
|
|
335
|
+
);
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Prisma Client Middleware
|
|
339
|
+
|
|
340
|
+
```typescript
|
|
341
|
+
prisma.$use(async (params, next) => {
|
|
342
|
+
// Log queries
|
|
343
|
+
console.log(`Query ${params.action} on ${params.model}`);
|
|
344
|
+
|
|
345
|
+
const result = await next(params);
|
|
346
|
+
return result;
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
// Soft deletes
|
|
350
|
+
prisma.$use(async (params, next) => {
|
|
351
|
+
if (params.model === 'Post' && params.action === 'delete') {
|
|
352
|
+
params.action = 'update';
|
|
353
|
+
params.args.data = { deleted: true };
|
|
354
|
+
}
|
|
355
|
+
return next(params);
|
|
356
|
+
});
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
## Connection Pooling
|
|
360
|
+
|
|
361
|
+
```prisma
|
|
362
|
+
datasource db {
|
|
363
|
+
provider = "postgresql"
|
|
364
|
+
url = env("DATABASE_URL")
|
|
365
|
+
// For connection pooling with PgBouncer
|
|
366
|
+
// url = env("DATABASE_POOL_URL")
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## Best Practices
|
|
371
|
+
|
|
372
|
+
✅ **Type safety** - Prisma generates types from schema
|
|
373
|
+
✅ **Migrations** - Always use `prisma migrate` for schema changes
|
|
374
|
+
✅ **Connection reuse** - Create single PrismaClient instance
|
|
375
|
+
✅ **Lazy init** - Use module-level client initialization
|
|
376
|
+
✅ **Error handling** - Catch Prisma-specific errors
|
|
377
|
+
✅ **N+1 prevention** - Use `include` or `select` to prevent N+1 queries
|
|
378
|
+
✅ **Indexes** - Add indexes for frequently filtered columns
|
|
379
|
+
|
|
380
|
+
## Common Patterns
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
// Singleton pattern
|
|
384
|
+
const prisma = new PrismaClient();
|
|
385
|
+
|
|
386
|
+
export default prisma;
|
|
387
|
+
|
|
388
|
+
// Usage in different modules
|
|
389
|
+
import prisma from './prisma';
|
|
390
|
+
|
|
391
|
+
// Disconnect on app shutdown
|
|
392
|
+
process.on('SIGINT', async () => {
|
|
393
|
+
await prisma.$disconnect();
|
|
394
|
+
process.exit(0);
|
|
395
|
+
});
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
## When to Use Prisma
|
|
399
|
+
|
|
400
|
+
✅ Type-safe ORM needed
|
|
401
|
+
✅ Node.js/TypeScript projects
|
|
402
|
+
✅ Migration management important
|
|
403
|
+
✅ Working with PostgreSQL, MySQL, SQLite
|
|
404
|
+
✅ Rapid prototyping with schema-first approach
|
|
405
|
+
|
|
406
|
+
❌ Complex stored procedures
|
|
407
|
+
❌ Need for raw SQL control
|
|
408
|
+
❌ NoSQL databases (use native drivers)
|
|
409
|
+
|
|
410
|
+
## Resources
|
|
411
|
+
|
|
412
|
+
- [Prisma Documentation](https://www.prisma.io/docs/)
|
|
413
|
+
- [Prisma Schema Reference](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference)
|
|
414
|
+
- [Prisma Client API](https://www.prisma.io/docs/reference/api-reference/prisma-client-reference)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Production-Ready Skill Implementation
|
|
2
|
+
|
|
3
|
+
## Setup & Installation
|
|
4
|
+
|
|
5
|
+
Detailed installation and configuration steps for the technology.
|
|
6
|
+
|
|
7
|
+
## Core Concepts
|
|
8
|
+
|
|
9
|
+
Fundamental patterns and approaches.
|
|
10
|
+
|
|
11
|
+
## Implementation Examples
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
// Real production code examples
|
|
15
|
+
// with error handling and best practices
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Advanced Patterns
|
|
19
|
+
|
|
20
|
+
Complex scenarios and optimization techniques.
|
|
21
|
+
|
|
22
|
+
## Performance Optimization
|
|
23
|
+
|
|
24
|
+
Tips for maximizing efficiency and speed.
|
|
25
|
+
|
|
26
|
+
## Security Considerations
|
|
27
|
+
|
|
28
|
+
Security best practices specific to this technology.
|
|
29
|
+
|
|
30
|
+
## Testing
|
|
31
|
+
|
|
32
|
+
How to properly test this feature.
|
|
33
|
+
|
|
34
|
+
## Monitoring & Debugging
|
|
35
|
+
|
|
36
|
+
Tools and techniques for production support.
|
|
37
|
+
|
|
38
|
+
## Best Practices
|
|
39
|
+
|
|
40
|
+
✅ Key recommendations
|
|
41
|
+
✅ Common pitfalls to avoid
|
|
42
|
+
✅ Performance considerations
|
|
43
|
+
✅ Security measures
|
|
44
|
+
✅ Production readiness
|
|
45
|
+
|
|
46
|
+
## Resources
|
|
47
|
+
|
|
48
|
+
- Official documentation
|
|
49
|
+
- Community guides
|
|
50
|
+
- Performance benchmarks
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# SQLite
|
|
2
|
+
|
|
3
|
+
Lightweight embedded database perfect for development and edge deployment.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```javascript
|
|
8
|
+
const sqlite3 = require('sqlite3').verbose();
|
|
9
|
+
|
|
10
|
+
const db = new sqlite3.Database(':memory:'); // Or file path
|
|
11
|
+
// const db = new sqlite3.Database('./app.db');
|
|
12
|
+
|
|
13
|
+
db.serialize(() => {
|
|
14
|
+
// Create tables
|
|
15
|
+
db.run(`CREATE TABLE users (
|
|
16
|
+
id INTEGER PRIMARY KEY,
|
|
17
|
+
name TEXT NOT NULL,
|
|
18
|
+
email TEXT UNIQUE
|
|
19
|
+
)`);
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Basic Operations
|
|
24
|
+
|
|
25
|
+
```javascript
|
|
26
|
+
// Insert
|
|
27
|
+
db.run(
|
|
28
|
+
'INSERT INTO users (name, email) VALUES (?, ?)',
|
|
29
|
+
['John', 'john@example.com'],
|
|
30
|
+
function(err) {
|
|
31
|
+
if (err) console.error(err);
|
|
32
|
+
else console.log(`Row inserted with ID ${this.lastID}`);
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
// Select one
|
|
37
|
+
db.get('SELECT * FROM users WHERE id = ?', [1], (err, row) => {
|
|
38
|
+
if (err) console.error(err);
|
|
39
|
+
else console.log(row);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Select all
|
|
43
|
+
db.all('SELECT * FROM users', (err, rows) => {
|
|
44
|
+
if (err) console.error(err);
|
|
45
|
+
else console.log(rows);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Update
|
|
49
|
+
db.run(
|
|
50
|
+
'UPDATE users SET name = ? WHERE id = ?',
|
|
51
|
+
['Jane', 1],
|
|
52
|
+
(err) => { if (err) console.error(err); }
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
// Delete
|
|
56
|
+
db.run('DELETE FROM users WHERE id = ?', [1], (err) => {
|
|
57
|
+
if (err) console.error(err);
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Promises/Async
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
const sqlite3 = require('sqlite3').verbose();
|
|
65
|
+
const db = new sqlite3.Database('./app.db');
|
|
66
|
+
|
|
67
|
+
// Promisify
|
|
68
|
+
const run = (sql, params) => new Promise((resolve, reject) => {
|
|
69
|
+
db.run(sql, params, function(err) {
|
|
70
|
+
if (err) reject(err);
|
|
71
|
+
else resolve(this);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const get = (sql, params) => new Promise((resolve, reject) => {
|
|
76
|
+
db.get(sql, params, (err, row) => {
|
|
77
|
+
if (err) reject(err);
|
|
78
|
+
else resolve(row);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const all = (sql, params) => new Promise((resolve, reject) => {
|
|
83
|
+
db.all(sql, params, (err, rows) => {
|
|
84
|
+
if (err) reject(err);
|
|
85
|
+
else resolve(rows);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
// Usage
|
|
90
|
+
async function getUser(id) {
|
|
91
|
+
return await get('SELECT * FROM users WHERE id = ?', [id]);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async function createUser(name, email) {
|
|
95
|
+
const result = await run(
|
|
96
|
+
'INSERT INTO users (name, email) VALUES (?, ?)',
|
|
97
|
+
[name, email]
|
|
98
|
+
);
|
|
99
|
+
return result.lastID;
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Transactions
|
|
104
|
+
|
|
105
|
+
```javascript
|
|
106
|
+
db.serialize(() => {
|
|
107
|
+
db.run('BEGIN TRANSACTION');
|
|
108
|
+
|
|
109
|
+
db.run('INSERT INTO accounts (name, balance) VALUES (?, ?)', ['Alice', 1000]);
|
|
110
|
+
db.run('INSERT INTO accounts (name, balance) VALUES (?, ?)', ['Bob', 500]);
|
|
111
|
+
|
|
112
|
+
db.run('COMMIT', (err) => {
|
|
113
|
+
if (err) {
|
|
114
|
+
db.run('ROLLBACK');
|
|
115
|
+
console.error('Transaction failed');
|
|
116
|
+
} else {
|
|
117
|
+
console.log('Transaction committed');
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Best For
|
|
124
|
+
|
|
125
|
+
✅ Development and testing
|
|
126
|
+
✅ Small-to-medium apps (<10GB)
|
|
127
|
+
✅ Edge computing (Cloudflare Workers, Vercel)
|
|
128
|
+
✅ Single-user desktop apps
|
|
129
|
+
✅ Mobile apps
|
|
130
|
+
✅ Embedded systems
|
|
131
|
+
|
|
132
|
+
❌ Not for: High-concurrency apps (>100 concurrent writers)
|
|
133
|
+
❌ Not for: Distributed systems
|
|
134
|
+
❌ Not for: Real-time collaboration
|
|
135
|
+
|
|
136
|
+
## Advantages
|
|
137
|
+
|
|
138
|
+
- **Zero setup** - No server installation
|
|
139
|
+
- **Portable** - Single file database
|
|
140
|
+
- **Full SQL** - Complete SQL support
|
|
141
|
+
- **ACID compliant** - Reliable transactions
|
|
142
|
+
- **Fast** - Excellent read performance
|
|
143
|
+
- **Serverless friendly** - Works on edge
|
|
144
|
+
|
|
145
|
+
## Resources
|
|
146
|
+
|
|
147
|
+
- [SQLite Docs](https://www.sqlite.org/docs.html)
|
|
148
|
+
- [SQL.js](https://sql.js.org/) - SQLite in browser
|
|
149
|
+
- [Better SQLite3](https://github.com/WiseLibs/better-sqlite3) - Node.js wrapper
|