agent-skill-kit 3.9.135
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/.agent/global.d.ts +80 -0
- package/.agent/rules/GEMINI.md +210 -0
- package/.agent/rules/autopilot.md +287 -0
- package/.agent/rules/code-rules.md +227 -0
- package/.agent/scripts/audit_workflows.ts +23 -0
- package/.agent/scripts/auto_preview.ts +170 -0
- package/.agent/scripts/checklist.ts +180 -0
- package/.agent/scripts/compile-agents.ts +237 -0
- package/.agent/scripts/fix_skills.ts +49 -0
- package/.agent/scripts/session_manager.ts +222 -0
- package/.agent/scripts/skill-audit.ts +255 -0
- package/.agent/scripts/sync_workflows.ts +54 -0
- package/.agent/scripts/utils/colors.ts +58 -0
- package/.agent/scripts/utils/process-manager.ts +131 -0
- package/.agent/scripts/utils/reporter.ts +192 -0
- package/.agent/scripts/utils/runner.ts +128 -0
- package/.agent/scripts/verify_all.ts +243 -0
- package/.agent/scripts/version-sync.ts +256 -0
- package/.agent/skills/SKILL_INDEX.md +129 -0
- package/.agent/skills/agent-browser/AGENTS.md +728 -0
- package/.agent/skills/agent-browser/SKILL.md +193 -0
- package/.agent/skills/agent-browser/rules/_sections.md +15 -0
- package/.agent/skills/agent-browser/rules/_template.md +32 -0
- package/.agent/skills/agent-browser/rules/engineering-spec.md +528 -0
- package/.agent/skills/agent-browser/scripts/browser_cli.ts +52 -0
- package/.agent/skills/agent-browser/scripts/session_manager.ts +166 -0
- package/.agent/skills/ai-artist/AGENTS.md +1082 -0
- package/.agent/skills/ai-artist/SKILL.md +186 -0
- package/.agent/skills/ai-artist/rules/_sections.md +30 -0
- package/.agent/skills/ai-artist/rules/_template.md +32 -0
- package/.agent/skills/ai-artist/rules/domain-code.md +118 -0
- package/.agent/skills/ai-artist/rules/domain-marketing.md +105 -0
- package/.agent/skills/ai-artist/rules/engineering-spec.md +519 -0
- package/.agent/skills/ai-artist/rules/image-prompts.md +195 -0
- package/.agent/skills/ai-artist/rules/model-syntax.md +115 -0
- package/.agent/skills/ai-artist/scripts/prompt_compiler.ts +72 -0
- package/.agent/skills/ai-artist/templates/image-core.txt +1 -0
- package/.agent/skills/ai-artist/templates/llm-core.txt +6 -0
- package/.agent/skills/api-architect/AGENTS.md +1896 -0
- package/.agent/skills/api-architect/SKILL.md +173 -0
- package/.agent/skills/api-architect/rules/_sections.md +35 -0
- package/.agent/skills/api-architect/rules/_template.md +32 -0
- package/.agent/skills/api-architect/rules/api-style.md +115 -0
- package/.agent/skills/api-architect/rules/auth.md +134 -0
- package/.agent/skills/api-architect/rules/documentation.md +131 -0
- package/.agent/skills/api-architect/rules/engineering-spec.md +505 -0
- package/.agent/skills/api-architect/rules/graphql.md +154 -0
- package/.agent/skills/api-architect/rules/rate-limiting.md +76 -0
- package/.agent/skills/api-architect/rules/response.md +138 -0
- package/.agent/skills/api-architect/rules/rest.md +113 -0
- package/.agent/skills/api-architect/rules/security-testing.md +146 -0
- package/.agent/skills/api-architect/rules/trpc.md +129 -0
- package/.agent/skills/api-architect/rules/versioning.md +100 -0
- package/.agent/skills/api-architect/scripts/api_validator.ts +413 -0
- package/.agent/skills/auth-patterns/AGENTS.md +1830 -0
- package/.agent/skills/auth-patterns/SKILL.md +163 -0
- package/.agent/skills/auth-patterns/rules/_sections.md +30 -0
- package/.agent/skills/auth-patterns/rules/_template.md +32 -0
- package/.agent/skills/auth-patterns/rules/engineering-spec.md +515 -0
- package/.agent/skills/auth-patterns/rules/jwt-deep.md +196 -0
- package/.agent/skills/auth-patterns/rules/mfa.md +174 -0
- package/.agent/skills/auth-patterns/rules/oauth2.md +134 -0
- package/.agent/skills/auth-patterns/rules/passkey.md +243 -0
- package/.agent/skills/auth-patterns/rules/rbac-abac.md +206 -0
- package/.agent/skills/auth-patterns/rules/session.md +183 -0
- package/.agent/skills/auth-patterns/scripts/auth_validator.ts +121 -0
- package/.agent/skills/chrome-devtools/AGENTS.md +952 -0
- package/.agent/skills/chrome-devtools/SKILL.md +160 -0
- package/.agent/skills/chrome-devtools/rules/_sections.md +25 -0
- package/.agent/skills/chrome-devtools/rules/_template.md +32 -0
- package/.agent/skills/chrome-devtools/rules/aria-snapshot.md +95 -0
- package/.agent/skills/chrome-devtools/rules/engineering-spec.md +510 -0
- package/.agent/skills/chrome-devtools/rules/scripts-guide.md +174 -0
- package/.agent/skills/chrome-devtools/scripts/aria-snapshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/click.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/console.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/core_cli.ts +79 -0
- package/.agent/skills/chrome-devtools/scripts/evaluate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/fill.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/navigate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/network.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/performance.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/screenshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/select-ref.ts +3 -0
- package/.agent/skills/cicd-pipeline/AGENTS.md +809 -0
- package/.agent/skills/cicd-pipeline/SKILL.md +164 -0
- package/.agent/skills/cicd-pipeline/rules/_sections.md +15 -0
- package/.agent/skills/cicd-pipeline/rules/_template.md +32 -0
- package/.agent/skills/cicd-pipeline/rules/engineering-spec.md +477 -0
- package/.agent/skills/cicd-pipeline/scripts/flag-manager.ts +253 -0
- package/.agent/skills/cicd-pipeline/scripts/pipeline_validator.ts +133 -0
- package/.agent/skills/code-constitution/AGENTS.md +597 -0
- package/.agent/skills/code-constitution/CHANGELOG.md +216 -0
- package/.agent/skills/code-constitution/SKILL.md +191 -0
- package/.agent/skills/code-constitution/VERSION +3 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/after.tsx +59 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/before.tsx +42 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/explanation.md +91 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/after.tsx +99 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/before.tsx +57 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/explanation.md +120 -0
- package/.agent/skills/code-constitution/knowledge/lessons-learned.yaml +3 -0
- package/.agent/skills/code-constitution/metadata/precedence.yaml +117 -0
- package/.agent/skills/code-constitution/metadata/scope-map.yaml +156 -0
- package/.agent/skills/code-constitution/proposals/v1.1-change-proposal-template.md +201 -0
- package/.agent/skills/code-constitution/resources/AUTHORITY_MODEL.md +115 -0
- package/.agent/skills/code-constitution/resources/ENFORCEMENT_GUIDE.md +246 -0
- package/.agent/skills/code-constitution/resources/LOAD_ORDER.md +86 -0
- package/.agent/skills/code-constitution/rules/_sections.md +15 -0
- package/.agent/skills/code-constitution/rules/_template.md +32 -0
- package/.agent/skills/code-constitution/rules/constitution/master-constitution.md +210 -0
- package/.agent/skills/code-constitution/rules/doctrines/architecture/architecture-doctrine.md +188 -0
- package/.agent/skills/code-constitution/rules/doctrines/backend/backend-data-engine-doctrine.md +218 -0
- package/.agent/skills/code-constitution/rules/doctrines/commercial/commercial-guardrails-doctrine.md +196 -0
- package/.agent/skills/code-constitution/rules/doctrines/data/data-integrity-doctrine.md +202 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/frontend-mobile-doctrine.md +169 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/interaction-patterns-doctrine.md +176 -0
- package/.agent/skills/code-constitution/rules/doctrines/learning/learning-engine-doctrine.md +192 -0
- package/.agent/skills/code-constitution/rules/doctrines/performance/performance-doctrine.md +180 -0
- package/.agent/skills/code-constitution/rules/doctrines/review/code-review-doctrine.md +174 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-enforcement-protocol.md +218 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-system-prompt.md +196 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/backend-api-review-checklist.md +131 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/chart-component-review-checklist.md +147 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/frontend-review-checklist.md +194 -0
- package/.agent/skills/code-constitution/rules/enforcement/playbooks/doctrine-violation-playbook.md +236 -0
- package/.agent/skills/code-constitution/rules/engineering-spec.md +561 -0
- package/.agent/skills/code-constitution/scripts/audit_pr.ts +219 -0
- package/.agent/skills/code-constitution/scripts/check_boundaries.ts +134 -0
- package/.agent/skills/code-constitution/scripts/learn.ts +202 -0
- package/.agent/skills/code-constitution/scripts/validate_doctrine.ts +287 -0
- package/.agent/skills/code-craft/AGENTS.md +803 -0
- package/.agent/skills/code-craft/SKILL.md +170 -0
- package/.agent/skills/code-craft/rules/_sections.md +20 -0
- package/.agent/skills/code-craft/rules/_template.md +32 -0
- package/.agent/skills/code-craft/rules/engineering-spec.md +447 -0
- package/.agent/skills/code-craft/rules/verification-scripts.md +83 -0
- package/.agent/skills/code-craft/scripts/code_quality_checker.ts +193 -0
- package/.agent/skills/code-review/AGENTS.md +1664 -0
- package/.agent/skills/code-review/SKILL.md +152 -0
- package/.agent/skills/code-review/rules/_sections.md +15 -0
- package/.agent/skills/code-review/rules/_template.md +32 -0
- package/.agent/skills/code-review/rules/engineering-spec.md +466 -0
- package/.agent/skills/code-review/scripts/lint_runner.ts +213 -0
- package/.agent/skills/code-review/scripts/type_coverage.ts +118 -0
- package/.agent/skills/context-engineering/AGENTS.md +499 -0
- package/.agent/skills/context-engineering/SKILL.md +147 -0
- package/.agent/skills/context-engineering/rules/_sections.md +15 -0
- package/.agent/skills/context-engineering/rules/_template.md +32 -0
- package/.agent/skills/context-engineering/rules/engineering-spec.md +463 -0
- package/.agent/skills/context-engineering/scripts/context_analyzer.ts +127 -0
- package/.agent/skills/copywriting/AGENTS.md +501 -0
- package/.agent/skills/copywriting/SKILL.md +188 -0
- package/.agent/skills/copywriting/rules/_sections.md +15 -0
- package/.agent/skills/copywriting/rules/_template.md +32 -0
- package/.agent/skills/copywriting/rules/engineering-spec.md +465 -0
- package/.agent/skills/copywriting/scripts/copy_validator.ts +185 -0
- package/.agent/skills/data-modeler/AGENTS.md +814 -0
- package/.agent/skills/data-modeler/SKILL.md +195 -0
- package/.agent/skills/data-modeler/rules/_sections.md +15 -0
- package/.agent/skills/data-modeler/rules/_template.md +32 -0
- package/.agent/skills/data-modeler/rules/database-selection.md +124 -0
- package/.agent/skills/data-modeler/rules/engineering-spec.md +479 -0
- package/.agent/skills/data-modeler/rules/indexing.md +166 -0
- package/.agent/skills/data-modeler/rules/migrations.md +176 -0
- package/.agent/skills/data-modeler/rules/optimization.md +161 -0
- package/.agent/skills/data-modeler/rules/orm-selection.md +155 -0
- package/.agent/skills/data-modeler/rules/schema-design.md +162 -0
- package/.agent/skills/data-modeler/scripts/schema_validator.ts +357 -0
- package/.agent/skills/debug-pro/AGENTS.md +798 -0
- package/.agent/skills/debug-pro/SKILL.md +193 -0
- package/.agent/skills/debug-pro/defense-in-depth/SKILL.md +148 -0
- package/.agent/skills/debug-pro/root-cause-tracing/SKILL.md +196 -0
- package/.agent/skills/debug-pro/root-cause-tracing/find-polluter.sh +63 -0
- package/.agent/skills/debug-pro/rules/_sections.md +15 -0
- package/.agent/skills/debug-pro/rules/_template.md +32 -0
- package/.agent/skills/debug-pro/rules/engineering-spec.md +491 -0
- package/.agent/skills/debug-pro/scripts/debug_verifier.ts +148 -0
- package/.agent/skills/debug-pro/verification-before-completion/SKILL.md +160 -0
- package/.agent/skills/design-system/AGENTS.md +4216 -0
- package/.agent/skills/design-system/SKILL.md +186 -0
- package/.agent/skills/design-system/rules/_sections.md +65 -0
- package/.agent/skills/design-system/rules/_template.md +32 -0
- package/.agent/skills/design-system/rules/animation-guide.md +355 -0
- package/.agent/skills/design-system/rules/color-system.md +335 -0
- package/.agent/skills/design-system/rules/color-systems.md +133 -0
- package/.agent/skills/design-system/rules/decision-trees.md +442 -0
- package/.agent/skills/design-system/rules/design-extraction.md +152 -0
- package/.agent/skills/design-system/rules/engineering-spec.md +484 -0
- package/.agent/skills/design-system/rules/motion-design.md +161 -0
- package/.agent/skills/design-system/rules/motion-graphics.md +330 -0
- package/.agent/skills/design-system/rules/spatial-composition.md +184 -0
- package/.agent/skills/design-system/rules/typography-system.md +369 -0
- package/.agent/skills/design-system/rules/typography.md +124 -0
- package/.agent/skills/design-system/rules/ux-psychology.md +565 -0
- package/.agent/skills/design-system/rules/visual-effects.md +407 -0
- package/.agent/skills/design-system/scripts/accessibility_checker.ts +292 -0
- package/.agent/skills/design-system/scripts/ux_audit.ts +356 -0
- package/.agent/skills/doc-templates/AGENTS.md +820 -0
- package/.agent/skills/doc-templates/SKILL.md +260 -0
- package/.agent/skills/doc-templates/rules/_sections.md +20 -0
- package/.agent/skills/doc-templates/rules/_template.md +32 -0
- package/.agent/skills/doc-templates/rules/doc.md +355 -0
- package/.agent/skills/doc-templates/rules/engineering-spec.md +422 -0
- package/.agent/skills/doc-templates/scripts/editor-server.ts +162 -0
- package/.agent/skills/doc-templates/scripts/inject_otel.ts +22 -0
- package/.agent/skills/doc-templates/scripts/kanban-server.ts +171 -0
- package/.agent/skills/doc-templates/scripts/markdown-server.ts +185 -0
- package/.agent/skills/e2e-automation/AGENTS.md +882 -0
- package/.agent/skills/e2e-automation/SKILL.md +175 -0
- package/.agent/skills/e2e-automation/rules/_sections.md +20 -0
- package/.agent/skills/e2e-automation/rules/_template.md +32 -0
- package/.agent/skills/e2e-automation/rules/aria-snapshot.md +185 -0
- package/.agent/skills/e2e-automation/rules/engineering-spec.md +501 -0
- package/.agent/skills/e2e-automation/scripts/playwright_runner.ts +208 -0
- package/.agent/skills/execution-reporter/AGENTS.md +419 -0
- package/.agent/skills/execution-reporter/SKILL.md +152 -0
- package/.agent/skills/execution-reporter/rules/_sections.md +15 -0
- package/.agent/skills/execution-reporter/rules/_template.md +32 -0
- package/.agent/skills/execution-reporter/rules/engineering-spec.md +389 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +140 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +156 -0
- package/.agent/skills/game-development/AGENTS.md +783 -0
- package/.agent/skills/game-development/SKILL.md +178 -0
- package/.agent/skills/game-development/game-art/SKILL.md +207 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +211 -0
- package/.agent/skills/game-development/game-design/SKILL.md +151 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +130 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +154 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +167 -0
- package/.agent/skills/game-development/rules/_sections.md +15 -0
- package/.agent/skills/game-development/rules/_template.md +32 -0
- package/.agent/skills/game-development/rules/engineering-spec.md +480 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +144 -0
- package/.agent/skills/game-development/web-games/SKILL.md +173 -0
- package/.agent/skills/git-workflow/AGENTS.md +554 -0
- package/.agent/skills/git-workflow/SKILL.md +181 -0
- package/.agent/skills/git-workflow/rules/_sections.md +15 -0
- package/.agent/skills/git-workflow/rules/_template.md +32 -0
- package/.agent/skills/git-workflow/rules/engineering-spec.md +518 -0
- package/.agent/skills/gitops/AGENTS.md +921 -0
- package/.agent/skills/gitops/SKILL.md +163 -0
- package/.agent/skills/gitops/rules/_sections.md +25 -0
- package/.agent/skills/gitops/rules/_template.md +32 -0
- package/.agent/skills/gitops/rules/argocd-setup.md +148 -0
- package/.agent/skills/gitops/rules/engineering-spec.md +450 -0
- package/.agent/skills/gitops/rules/sync-policies.md +145 -0
- package/.agent/skills/google-adk-python/AGENTS.md +1054 -0
- package/.agent/skills/google-adk-python/SKILL.md +168 -0
- package/.agent/skills/google-adk-python/rules/_sections.md +25 -0
- package/.agent/skills/google-adk-python/rules/_template.md +32 -0
- package/.agent/skills/google-adk-python/rules/deployment.md +138 -0
- package/.agent/skills/google-adk-python/rules/engineering-spec.md +451 -0
- package/.agent/skills/google-adk-python/rules/multi-agent.md +146 -0
- package/.agent/skills/google-adk-python/rules/tools.md +131 -0
- package/.agent/skills/idea-storm/AGENTS.md +995 -0
- package/.agent/skills/idea-storm/SKILL.md +160 -0
- package/.agent/skills/idea-storm/rules/_sections.md +25 -0
- package/.agent/skills/idea-storm/rules/_template.md +32 -0
- package/.agent/skills/idea-storm/rules/architecture-debate.md +122 -0
- package/.agent/skills/idea-storm/rules/dynamic-questioning.md +374 -0
- package/.agent/skills/idea-storm/rules/engineering-spec.md +466 -0
- package/.agent/skills/knowledge-compiler/SKILL.md +320 -0
- package/.agent/skills/knowledge-graph/AGENTS.md +762 -0
- package/.agent/skills/knowledge-graph/SKILL.md +157 -0
- package/.agent/skills/knowledge-graph/rules/_sections.md +15 -0
- package/.agent/skills/knowledge-graph/rules/_template.md +32 -0
- package/.agent/skills/knowledge-graph/rules/engineering-spec.md +439 -0
- package/.agent/skills/knowledge-linter/SKILL.md +217 -0
- package/.agent/skills/lifecycle-orchestrator/AGENTS.md +989 -0
- package/.agent/skills/lifecycle-orchestrator/SKILL.md +169 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_sections.md +15 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_template.md +32 -0
- package/.agent/skills/lifecycle-orchestrator/rules/engineering-spec.md +525 -0
- package/.agent/skills/lifecycle-orchestrator/scripts/state_manager.ts +189 -0
- package/.agent/skills/mcp-builder/AGENTS.md +1653 -0
- package/.agent/skills/mcp-builder/SKILL.md +166 -0
- package/.agent/skills/mcp-builder/rules/_sections.md +40 -0
- package/.agent/skills/mcp-builder/rules/_template.md +32 -0
- package/.agent/skills/mcp-builder/rules/best-practices.md +157 -0
- package/.agent/skills/mcp-builder/rules/design-principles.md +105 -0
- package/.agent/skills/mcp-builder/rules/engineering-spec.md +473 -0
- package/.agent/skills/mcp-builder/rules/evaluation.md +103 -0
- package/.agent/skills/mcp-builder/rules/python-implementation.md +249 -0
- package/.agent/skills/mcp-builder/rules/quickstart.md +111 -0
- package/.agent/skills/mcp-builder/rules/typescript-implementation.md +280 -0
- package/.agent/skills/mcp-management/AGENTS.md +837 -0
- package/.agent/skills/mcp-management/SKILL.md +164 -0
- package/.agent/skills/mcp-management/rules/_sections.md +25 -0
- package/.agent/skills/mcp-management/rules/_template.md +32 -0
- package/.agent/skills/mcp-management/rules/cli-usage.md +146 -0
- package/.agent/skills/mcp-management/rules/engineering-spec.md +501 -0
- package/.agent/skills/mcp-management/rules/protocol.md +159 -0
- package/.agent/skills/media-processing/AGENTS.md +479 -0
- package/.agent/skills/media-processing/SKILL.md +176 -0
- package/.agent/skills/media-processing/rules/_sections.md +15 -0
- package/.agent/skills/media-processing/rules/_template.md +32 -0
- package/.agent/skills/media-processing/rules/engineering-spec.md +452 -0
- package/.agent/skills/media-processing/scripts/convert-video.ts +155 -0
- package/.agent/skills/media-processing/scripts/optimize-image.ts +127 -0
- package/.agent/skills/mobile-design/AGENTS.md +6531 -0
- package/.agent/skills/mobile-design/SKILL.md +165 -0
- package/.agent/skills/mobile-design/rules/_sections.md +45 -0
- package/.agent/skills/mobile-design/rules/_template.md +32 -0
- package/.agent/skills/mobile-design/rules/decision-trees.md +540 -0
- package/.agent/skills/mobile-design/rules/engineering-spec.md +467 -0
- package/.agent/skills/mobile-design/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-design/rules/mobile-color-system.md +436 -0
- package/.agent/skills/mobile-design/rules/mobile-debugging.md +146 -0
- package/.agent/skills/mobile-design/rules/mobile-design-thinking.md +381 -0
- package/.agent/skills/mobile-design/rules/mobile-navigation.md +474 -0
- package/.agent/skills/mobile-design/rules/mobile-performance.md +783 -0
- package/.agent/skills/mobile-design/rules/mobile-testing.md +380 -0
- package/.agent/skills/mobile-design/rules/mobile-typography.md +449 -0
- package/.agent/skills/mobile-design/rules/platform-android.md +682 -0
- package/.agent/skills/mobile-design/rules/platform-ios.md +577 -0
- package/.agent/skills/mobile-design/rules/touch-psychology.md +553 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.ts +309 -0
- package/.agent/skills/mobile-developer/AGENTS.md +904 -0
- package/.agent/skills/mobile-developer/SKILL.md +194 -0
- package/.agent/skills/mobile-developer/rules/_sections.md +75 -0
- package/.agent/skills/mobile-developer/rules/_template.md +32 -0
- package/.agent/skills/mobile-developer/rules/anti-patterns.md +70 -0
- package/.agent/skills/mobile-developer/rules/app-store-optimization.md +319 -0
- package/.agent/skills/mobile-developer/rules/decision-trees.md +545 -0
- package/.agent/skills/mobile-developer/rules/deep-linking.md +441 -0
- package/.agent/skills/mobile-developer/rules/engineering-spec.md +477 -0
- package/.agent/skills/mobile-developer/rules/flutter.md +475 -0
- package/.agent/skills/mobile-developer/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-developer/rules/mobile-color-system.md +444 -0
- package/.agent/skills/mobile-developer/rules/mobile-debugging.md +428 -0
- package/.agent/skills/mobile-developer/rules/mobile-design-thinking.md +367 -0
- package/.agent/skills/mobile-developer/rules/mobile-navigation.md +483 -0
- package/.agent/skills/mobile-developer/rules/mobile-performance.md +778 -0
- package/.agent/skills/mobile-developer/rules/mobile-testing.md +382 -0
- package/.agent/skills/mobile-developer/rules/mobile-typography.md +457 -0
- package/.agent/skills/mobile-developer/rules/native.md +572 -0
- package/.agent/skills/mobile-developer/rules/platform-android.md +676 -0
- package/.agent/skills/mobile-developer/rules/platform-ios.md +571 -0
- package/.agent/skills/mobile-developer/rules/push-notifications.md +599 -0
- package/.agent/skills/mobile-developer/rules/react-native.md +422 -0
- package/.agent/skills/mobile-developer/rules/touch-psychology.md +547 -0
- package/.agent/skills/mobile-developer/scripts/mobile_audit.ts +701 -0
- package/.agent/skills/nextjs-pro/AGENTS.md +3932 -0
- package/.agent/skills/nextjs-pro/SKILL.md +171 -0
- package/.agent/skills/nextjs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nextjs-pro/rules/_template.md +32 -0
- package/.agent/skills/nextjs-pro/rules/advanced-event-handler-refs.md +59 -0
- package/.agent/skills/nextjs-pro/rules/advanced-init-once.md +46 -0
- package/.agent/skills/nextjs-pro/rules/advanced-use-latest.md +43 -0
- package/.agent/skills/nextjs-pro/rules/async-api-routes.md +42 -0
- package/.agent/skills/nextjs-pro/rules/async-defer-await.md +84 -0
- package/.agent/skills/nextjs-pro/rules/async-dependencies.md +55 -0
- package/.agent/skills/nextjs-pro/rules/async-parallel.md +32 -0
- package/.agent/skills/nextjs-pro/rules/async-suspense-boundaries.md +103 -0
- package/.agent/skills/nextjs-pro/rules/bundle-barrel-imports.md +63 -0
- package/.agent/skills/nextjs-pro/rules/bundle-conditional.md +35 -0
- package/.agent/skills/nextjs-pro/rules/bundle-defer-third-party.md +53 -0
- package/.agent/skills/nextjs-pro/rules/bundle-dynamic-imports.md +39 -0
- package/.agent/skills/nextjs-pro/rules/bundle-preload.md +54 -0
- package/.agent/skills/nextjs-pro/rules/client-event-listeners.md +78 -0
- package/.agent/skills/nextjs-pro/rules/client-localstorage-schema.md +75 -0
- package/.agent/skills/nextjs-pro/rules/client-passive-event-listeners.md +52 -0
- package/.agent/skills/nextjs-pro/rules/client-swr-dedup.md +60 -0
- package/.agent/skills/nextjs-pro/rules/engineering-spec.md +440 -0
- package/.agent/skills/nextjs-pro/rules/js-batch-dom-css.md +111 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-function-results.md +84 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-property-access.md +32 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-storage.md +74 -0
- package/.agent/skills/nextjs-pro/rules/js-combine-iterations.md +36 -0
- package/.agent/skills/nextjs-pro/rules/js-early-exit.md +54 -0
- package/.agent/skills/nextjs-pro/rules/js-hoist-regexp.md +49 -0
- package/.agent/skills/nextjs-pro/rules/js-index-maps.md +41 -0
- package/.agent/skills/nextjs-pro/rules/js-length-check-first.md +53 -0
- package/.agent/skills/nextjs-pro/rules/js-min-max-loop.md +86 -0
- package/.agent/skills/nextjs-pro/rules/js-set-map-lookups.md +28 -0
- package/.agent/skills/nextjs-pro/rules/js-tosorted-immutable.md +61 -0
- package/.agent/skills/nextjs-pro/rules/rendering-activity.md +30 -0
- package/.agent/skills/nextjs-pro/rules/rendering-animate-svg-wrapper.md +51 -0
- package/.agent/skills/nextjs-pro/rules/rendering-conditional-render.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rendering-content-visibility.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hoist-jsx.md +50 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-no-flicker.md +86 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-suppress-warning.md +34 -0
- package/.agent/skills/nextjs-pro/rules/rendering-svg-precision.md +32 -0
- package/.agent/skills/nextjs-pro/rules/rendering-usetransition-loading.md +79 -0
- package/.agent/skills/nextjs-pro/rules/rerender-defer-reads.md +43 -0
- package/.agent/skills/nextjs-pro/rules/rerender-dependencies.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state-no-effect.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state.md +33 -0
- package/.agent/skills/nextjs-pro/rules/rerender-functional-setstate.md +78 -0
- package/.agent/skills/nextjs-pro/rules/rerender-lazy-state-init.md +62 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo-with-default-value.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo.md +48 -0
- package/.agent/skills/nextjs-pro/rules/rerender-move-effect-to-event.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-simple-expression-in-memo.md +39 -0
- package/.agent/skills/nextjs-pro/rules/rerender-transitions.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-use-ref-transient-values.md +77 -0
- package/.agent/skills/nextjs-pro/rules/schema.json +34 -0
- package/.agent/skills/nextjs-pro/rules/server-after-nonblocking.md +77 -0
- package/.agent/skills/nextjs-pro/rules/server-auth-actions.md +100 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-lru.md +45 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-react.md +80 -0
- package/.agent/skills/nextjs-pro/rules/server-dedup-props.md +69 -0
- package/.agent/skills/nextjs-pro/rules/server-parallel-fetching.md +87 -0
- package/.agent/skills/nextjs-pro/rules/server-serialization.md +42 -0
- package/.agent/skills/nodejs-pro/AGENTS.md +866 -0
- package/.agent/skills/nodejs-pro/SKILL.md +172 -0
- package/.agent/skills/nodejs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nodejs-pro/rules/_template.md +32 -0
- package/.agent/skills/nodejs-pro/rules/architecture-patterns.md +229 -0
- package/.agent/skills/nodejs-pro/rules/async-patterns.md +246 -0
- package/.agent/skills/nodejs-pro/rules/engineering-spec.md +438 -0
- package/.agent/skills/nodejs-pro/rules/error-handling.md +257 -0
- package/.agent/skills/nodejs-pro/rules/framework-selection.md +220 -0
- package/.agent/skills/nodejs-pro/rules/runtime-modules.md +176 -0
- package/.agent/skills/nodejs-pro/rules/testing-strategy.md +266 -0
- package/.agent/skills/nodejs-pro/rules/validation-security.md +205 -0
- package/.agent/skills/observability/AGENTS.md +607 -0
- package/.agent/skills/observability/SKILL.md +178 -0
- package/.agent/skills/observability/rules/_sections.md +15 -0
- package/.agent/skills/observability/rules/_template.md +32 -0
- package/.agent/skills/observability/rules/engineering-spec.md +440 -0
- package/.agent/skills/offensive-sec/AGENTS.md +849 -0
- package/.agent/skills/offensive-sec/SKILL.md +191 -0
- package/.agent/skills/offensive-sec/rules/_sections.md +15 -0
- package/.agent/skills/offensive-sec/rules/_template.md +32 -0
- package/.agent/skills/offensive-sec/rules/engineering-spec.md +470 -0
- package/.agent/skills/perf-optimizer/AGENTS.md +870 -0
- package/.agent/skills/perf-optimizer/SKILL.md +189 -0
- package/.agent/skills/perf-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/perf-optimizer/rules/_template.md +32 -0
- package/.agent/skills/perf-optimizer/rules/backend-patterns.md +312 -0
- package/.agent/skills/perf-optimizer/rules/engineering-spec.md +428 -0
- package/.agent/skills/perf-optimizer/scripts/lighthouse_audit.ts +201 -0
- package/.agent/skills/problem-checker/AGENTS.md +519 -0
- package/.agent/skills/problem-checker/SKILL.md +189 -0
- package/.agent/skills/problem-checker/rules/_sections.md +15 -0
- package/.agent/skills/problem-checker/rules/_template.md +32 -0
- package/.agent/skills/problem-checker/rules/engineering-spec.md +483 -0
- package/.agent/skills/problem-checker/scripts/check_problems.ts +396 -0
- package/.agent/skills/project-planner/AGENTS.md +2698 -0
- package/.agent/skills/project-planner/SKILL.md +166 -0
- package/.agent/skills/project-planner/rules/_sections.md +15 -0
- package/.agent/skills/project-planner/rules/_template.md +32 -0
- package/.agent/skills/project-planner/rules/engineering-spec.md +420 -0
- package/.agent/skills/python-pro/AGENTS.md +1871 -0
- package/.agent/skills/python-pro/SKILL.md +182 -0
- package/.agent/skills/python-pro/rules/_sections.md +50 -0
- package/.agent/skills/python-pro/rules/_template.md +32 -0
- package/.agent/skills/python-pro/rules/async-patterns.md +168 -0
- package/.agent/skills/python-pro/rules/django-patterns.md +194 -0
- package/.agent/skills/python-pro/rules/engineering-spec.md +442 -0
- package/.agent/skills/python-pro/rules/fastapi-patterns.md +179 -0
- package/.agent/skills/python-pro/rules/framework-selection.md +167 -0
- package/.agent/skills/python-pro/rules/project-structure.md +181 -0
- package/.agent/skills/python-pro/rules/testing-patterns.md +212 -0
- package/.agent/skills/python-pro/rules/type-hints.md +159 -0
- package/.agent/skills/react-pro/AGENTS.md +963 -0
- package/.agent/skills/react-pro/SKILL.md +232 -0
- package/.agent/skills/react-pro/rules/_sections.md +40 -0
- package/.agent/skills/react-pro/rules/_template.md +32 -0
- package/.agent/skills/react-pro/rules/component-patterns.md +145 -0
- package/.agent/skills/react-pro/rules/composition-compound.md +82 -0
- package/.agent/skills/react-pro/rules/data-fetching.md +133 -0
- package/.agent/skills/react-pro/rules/engineering-spec.md +453 -0
- package/.agent/skills/react-pro/rules/error-boundary.md +61 -0
- package/.agent/skills/react-pro/rules/file-organization.md +158 -0
- package/.agent/skills/react-pro/rules/hooks-custom.md +61 -0
- package/.agent/skills/react-pro/rules/mui-styling.md +138 -0
- package/.agent/skills/react-pro/rules/patterns.md +24 -0
- package/.agent/skills/react-pro/rules/performance-optimization.md +65 -0
- package/.agent/skills/react-pro/rules/performance.md +137 -0
- package/.agent/skills/react-pro/rules/react19-hooks.md +85 -0
- package/.agent/skills/react-pro/rules/state-management.md +90 -0
- package/.agent/skills/react-pro/rules/testing-patterns.md +52 -0
- package/.agent/skills/registry.json +1251 -0
- package/.agent/skills/security-scanner/AGENTS.md +851 -0
- package/.agent/skills/security-scanner/SKILL.md +182 -0
- package/.agent/skills/security-scanner/rules/_sections.md +15 -0
- package/.agent/skills/security-scanner/rules/_template.md +32 -0
- package/.agent/skills/security-scanner/rules/auth-patterns.md +281 -0
- package/.agent/skills/security-scanner/rules/checklists.md +186 -0
- package/.agent/skills/security-scanner/rules/engineering-spec.md +440 -0
- package/.agent/skills/security-scanner/scripts/security_scan.ts +513 -0
- package/.agent/skills/seo-optimizer/AGENTS.md +839 -0
- package/.agent/skills/seo-optimizer/SKILL.md +180 -0
- package/.agent/skills/seo-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/seo-optimizer/rules/_template.md +32 -0
- package/.agent/skills/seo-optimizer/rules/engineering-spec.md +433 -0
- package/.agent/skills/seo-optimizer/scripts/geo_checker.ts +109 -0
- package/.agent/skills/seo-optimizer/scripts/seo_checker.ts +308 -0
- package/.agent/skills/server-ops/AGENTS.md +643 -0
- package/.agent/skills/server-ops/SKILL.md +194 -0
- package/.agent/skills/server-ops/rules/_sections.md +15 -0
- package/.agent/skills/server-ops/rules/_template.md +32 -0
- package/.agent/skills/server-ops/rules/engineering-spec.md +450 -0
- package/.agent/skills/shell-script/AGENTS.md +499 -0
- package/.agent/skills/shell-script/SKILL.md +205 -0
- package/.agent/skills/shell-script/rules/_sections.md +15 -0
- package/.agent/skills/shell-script/rules/_template.md +32 -0
- package/.agent/skills/shell-script/rules/engineering-spec.md +463 -0
- package/.agent/skills/skill-generator/SKILL.md +147 -0
- package/.agent/skills/smart-router/SKILL.md +95 -0
- package/.agent/skills/studio/AGENTS.md +636 -0
- package/.agent/skills/studio/SKILL.md +178 -0
- package/.agent/skills/studio/data/charts.csv +26 -0
- package/.agent/skills/studio/data/colors.csv +97 -0
- package/.agent/skills/studio/data/icons.csv +101 -0
- package/.agent/skills/studio/data/landing.csv +31 -0
- package/.agent/skills/studio/data/products.csv +97 -0
- package/.agent/skills/studio/data/prompts.csv +24 -0
- package/.agent/skills/studio/data/react-performance.csv +45 -0
- package/.agent/skills/studio/data/stacks/flutter.csv +52 -0
- package/.agent/skills/studio/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/studio/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/skills/studio/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/studio/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/skills/studio/data/stacks/nuxtjs.csv +59 -0
- package/.agent/skills/studio/data/stacks/react-native.csv +52 -0
- package/.agent/skills/studio/data/stacks/react.csv +54 -0
- package/.agent/skills/studio/data/stacks/shadcn.csv +61 -0
- package/.agent/skills/studio/data/stacks/svelte.csv +54 -0
- package/.agent/skills/studio/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/studio/data/stacks/vue.csv +50 -0
- package/.agent/skills/studio/data/styles.csv +59 -0
- package/.agent/skills/studio/data/typography.csv +58 -0
- package/.agent/skills/studio/data/ui-reasoning.csv +101 -0
- package/.agent/skills/studio/data/ux-guidelines.csv +100 -0
- package/.agent/skills/studio/data/web-interface.csv +31 -0
- package/.agent/skills/studio/rules/_sections.md +15 -0
- package/.agent/skills/studio/rules/_template.md +32 -0
- package/.agent/skills/studio/rules/engineering-spec.md +455 -0
- package/.agent/skills/studio/scripts/core.ts +345 -0
- package/.agent/skills/studio/scripts/design_system.ts +953 -0
- package/.agent/skills/studio/scripts/search.ts +197 -0
- package/.agent/skills/studio/scripts/types.ts +147 -0
- package/.agent/skills/studio/scripts/utils/component-specs.ts +154 -0
- package/.agent/skills/studio/scripts/utils/config-loader.ts +165 -0
- package/.agent/skills/studio/scripts/utils/css-templates.ts +169 -0
- package/.agent/skills/studio/scripts/utils/css-validator.ts +95 -0
- package/.agent/skills/studio/scripts/utils/csv-loader.ts +52 -0
- package/.agent/skills/studio/scripts/utils/intelligent-overrides.ts +129 -0
- package/.agent/skills/studio/scripts/utils/page-override-formatter.ts +143 -0
- package/.agent/skills/studio/scripts/utils/page-type-detector.ts +124 -0
- package/.agent/skills/studio/scripts/utils/search-cache.ts +165 -0
- package/.agent/skills/studio/scripts/utils/text-utils.ts +44 -0
- package/.agent/skills/system-design/AGENTS.md +597 -0
- package/.agent/skills/system-design/SKILL.md +153 -0
- package/.agent/skills/system-design/rules/_sections.md +15 -0
- package/.agent/skills/system-design/rules/_template.md +32 -0
- package/.agent/skills/system-design/rules/context-discovery.md +117 -0
- package/.agent/skills/system-design/rules/engineering-spec.md +437 -0
- package/.agent/skills/system-design/rules/examples.md +180 -0
- package/.agent/skills/system-design/rules/pattern-selection.md +130 -0
- package/.agent/skills/system-design/rules/patterns-reference.md +110 -0
- package/.agent/skills/system-design/rules/trade-off-analysis.md +169 -0
- package/.agent/skills/tailwind-kit/AGENTS.md +1135 -0
- package/.agent/skills/tailwind-kit/SKILL.md +171 -0
- package/.agent/skills/tailwind-kit/rules/_sections.md +20 -0
- package/.agent/skills/tailwind-kit/rules/_template.md +32 -0
- package/.agent/skills/tailwind-kit/rules/components.md +232 -0
- package/.agent/skills/tailwind-kit/rules/engineering-spec.md +435 -0
- package/.agent/skills/tailwind-kit/rules/responsive.md +221 -0
- package/.agent/skills/tailwind-kit/rules/v4-config.md +72 -0
- package/.agent/skills/test-architect/AGENTS.md +851 -0
- package/.agent/skills/test-architect/SKILL.md +176 -0
- package/.agent/skills/test-architect/rules/_sections.md +15 -0
- package/.agent/skills/test-architect/rules/_template.md +32 -0
- package/.agent/skills/test-architect/rules/engineering-spec.md +434 -0
- package/.agent/skills/test-architect/scripts/test_runner.ts +265 -0
- package/.agent/skills/typescript-expert/AGENTS.md +1045 -0
- package/.agent/skills/typescript-expert/SKILL.md +200 -0
- package/.agent/skills/typescript-expert/rules/_sections.md +20 -0
- package/.agent/skills/typescript-expert/rules/_template.md +32 -0
- package/.agent/skills/typescript-expert/rules/engineering-spec.md +433 -0
- package/.agent/skills/typescript-expert/rules/tsconfig-strict.json +92 -0
- package/.agent/skills/typescript-expert/rules/typescript-cheatsheet.md +407 -0
- package/.agent/skills/typescript-expert/rules/utility-types.ts +264 -0
- package/.agent/skills/typescript-expert/scripts/ts_diagnostic.ts +321 -0
- package/.agent/skills/vercel-deploy/AGENTS.md +490 -0
- package/.agent/skills/vercel-deploy/SKILL.md +175 -0
- package/.agent/skills/vercel-deploy/rules/_sections.md +15 -0
- package/.agent/skills/vercel-deploy/rules/_template.md +32 -0
- package/.agent/skills/vercel-deploy/rules/engineering-spec.md +463 -0
- package/.agent/skills/vercel-deploy/scripts/deploy.sh +310 -0
- package/.agent/workflows/api.md +377 -0
- package/.agent/workflows/autopilot.md +344 -0
- package/.agent/workflows/build.md +338 -0
- package/.agent/workflows/chronicle.md +279 -0
- package/.agent/workflows/cook.md +217 -0
- package/.agent/workflows/diagnose.md +302 -0
- package/.agent/workflows/fix.md +253 -0
- package/.agent/workflows/game.md +329 -0
- package/.agent/workflows/inspect.md +276 -0
- package/.agent/workflows/knowledge.md +212 -0
- package/.agent/workflows/launch.md +345 -0
- package/.agent/workflows/mobile.md +354 -0
- package/.agent/workflows/monitor.md +239 -0
- package/.agent/workflows/optimize.md +269 -0
- package/.agent/workflows/plan.md +278 -0
- package/.agent/workflows/stage.md +286 -0
- package/.agent/workflows/studio.md +276 -0
- package/.agent/workflows/think.md +262 -0
- package/.agent/workflows/validate.md +289 -0
- package/.agentignore +161 -0
- package/.gitattributes +16 -0
- package/CHANGELOG.md +198 -0
- package/LICENSE +40 -0
- package/README.md +173 -0
- package/docs/SKILL_DESIGN_GUIDE.md +561 -0
- package/docs/The-Complete-Guide-to-Building-Skills-for-Claude.md +1207 -0
- package/docs/WORKFLOW_DESIGN_GUIDE.md +325 -0
- package/package.json +33 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: error-handling
|
|
3
|
+
description: Centralized error handling — custom error classes, framework middleware, async patterns, and structured logging
|
|
4
|
+
title: "Every error must be caught, classified, and communicated. No silent failures."
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: error, handling
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Error Handling
|
|
11
|
+
|
|
12
|
+
> Every error must be caught, classified, and communicated. **No silent failures.**
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Custom Error Classes
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
// errors/index.ts
|
|
20
|
+
export class AppError extends Error {
|
|
21
|
+
constructor(
|
|
22
|
+
message: string,
|
|
23
|
+
public statusCode: number,
|
|
24
|
+
public code: string,
|
|
25
|
+
public isOperational = true
|
|
26
|
+
) {
|
|
27
|
+
super(message)
|
|
28
|
+
this.name = this.constructor.name
|
|
29
|
+
Error.captureStackTrace(this, this.constructor)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export class NotFoundError extends AppError {
|
|
34
|
+
constructor(resource = 'Resource') {
|
|
35
|
+
super(`${resource} not found`, 404, 'NOT_FOUND')
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export class ValidationError extends AppError {
|
|
40
|
+
constructor(message: string, public details?: unknown) {
|
|
41
|
+
super(message, 422, 'VALIDATION_ERROR')
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class ConflictError extends AppError {
|
|
46
|
+
constructor(message: string) {
|
|
47
|
+
super(message, 409, 'CONFLICT')
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export class UnauthorizedError extends AppError {
|
|
52
|
+
constructor(message = 'Unauthorized') {
|
|
53
|
+
super(message, 401, 'UNAUTHORIZED')
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export class ForbiddenError extends AppError {
|
|
58
|
+
constructor(message = 'Forbidden') {
|
|
59
|
+
super(message, 403, 'FORBIDDEN')
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Framework Error Handlers
|
|
67
|
+
|
|
68
|
+
### Fastify
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
// Fastify handles async errors automatically — no try/catch needed!
|
|
72
|
+
app.setErrorHandler((error, request, reply) => {
|
|
73
|
+
if (error instanceof AppError) {
|
|
74
|
+
reply.code(error.statusCode).send({
|
|
75
|
+
error: error.code,
|
|
76
|
+
message: error.message,
|
|
77
|
+
...(error.details && { details: error.details })
|
|
78
|
+
})
|
|
79
|
+
return
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Unexpected error — log full details, send generic response
|
|
83
|
+
request.log.error(error)
|
|
84
|
+
reply.code(500).send({
|
|
85
|
+
error: 'INTERNAL_ERROR',
|
|
86
|
+
message: 'An unexpected error occurred'
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Hono
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import { HTTPException } from 'hono/http-exception'
|
|
95
|
+
|
|
96
|
+
// Global error handler
|
|
97
|
+
app.onError((err, c) => {
|
|
98
|
+
if (err instanceof AppError) {
|
|
99
|
+
return c.json({
|
|
100
|
+
error: err.code,
|
|
101
|
+
message: err.message,
|
|
102
|
+
}, err.statusCode as any)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
console.error('Unexpected error:', err)
|
|
106
|
+
return c.json({ error: 'INTERNAL_ERROR', message: 'Unexpected error' }, 500)
|
|
107
|
+
})
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Express (requires wrapper)
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
// Express does NOT handle async errors — you MUST wrap or use a library
|
|
114
|
+
|
|
115
|
+
// Option 1: express-async-errors (recommended)
|
|
116
|
+
import 'express-async-errors' // Import once at top
|
|
117
|
+
|
|
118
|
+
// Option 2: Manual wrapper
|
|
119
|
+
const asyncHandler = (fn: Function) => (req: Request, res: Response, next: NextFunction) =>
|
|
120
|
+
Promise.resolve(fn(req, res, next)).catch(next)
|
|
121
|
+
|
|
122
|
+
app.get('/users/:id', asyncHandler(async (req, res) => {
|
|
123
|
+
const user = await getUser(req.params.id) // Errors auto-forwarded
|
|
124
|
+
res.json(user)
|
|
125
|
+
}))
|
|
126
|
+
|
|
127
|
+
// Error middleware (must be last, must have 4 params)
|
|
128
|
+
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
|
|
129
|
+
if (err instanceof AppError) {
|
|
130
|
+
res.status(err.statusCode).json({
|
|
131
|
+
error: err.code,
|
|
132
|
+
message: err.message
|
|
133
|
+
})
|
|
134
|
+
return
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
console.error('Unexpected error:', err)
|
|
138
|
+
res.status(500).json({ error: 'INTERNAL_ERROR', message: 'Unexpected error' })
|
|
139
|
+
})
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Error Response Format (Fixed)
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
// Client gets:
|
|
148
|
+
{
|
|
149
|
+
"error": "NOT_FOUND", // Machine-readable code
|
|
150
|
+
"message": "User not found", // Human-readable message
|
|
151
|
+
"details": { ... } // Optional: validation details
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Client NEVER gets:
|
|
155
|
+
// - Stack traces
|
|
156
|
+
// - Internal file paths
|
|
157
|
+
// - Database query details
|
|
158
|
+
// - Environment variables
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Status Code Selection
|
|
164
|
+
|
|
165
|
+
| Situation | Status | Code | When |
|
|
166
|
+
|-----------|:------:|------|------|
|
|
167
|
+
| Bad input format | 400 | `BAD_REQUEST` | Malformed JSON, missing fields |
|
|
168
|
+
| No auth | 401 | `UNAUTHORIZED` | Missing or invalid token |
|
|
169
|
+
| No permission | 403 | `FORBIDDEN` | Valid auth, insufficient role |
|
|
170
|
+
| Not found | 404 | `NOT_FOUND` | Resource doesn't exist |
|
|
171
|
+
| Conflict | 409 | `CONFLICT` | Duplicate email, version conflict |
|
|
172
|
+
| Validation | 422 | `VALIDATION_ERROR` | Schema valid but business rules fail |
|
|
173
|
+
| Rate limited | 429 | `RATE_LIMITED` | Too many requests |
|
|
174
|
+
| Server error | 500 | `INTERNAL_ERROR` | Our fault — log everything |
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Operational vs Programming Errors
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
Operational (expected, handle gracefully):
|
|
182
|
+
├── User not found → 404
|
|
183
|
+
├── Invalid input → 422
|
|
184
|
+
├── Duplicate email → 409
|
|
185
|
+
├── Rate limited → 429
|
|
186
|
+
└── External API timeout → 503
|
|
187
|
+
|
|
188
|
+
Programming (bugs, crash + restart):
|
|
189
|
+
├── TypeError: Cannot read property of undefined
|
|
190
|
+
├── RangeError: Array index out of bounds
|
|
191
|
+
├── Unhandled promise rejection
|
|
192
|
+
└── → Log, crash, let process manager restart
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
// Crash on programming errors — don't try to recover
|
|
197
|
+
process.on('uncaughtException', (error) => {
|
|
198
|
+
console.error('UNCAUGHT EXCEPTION:', error)
|
|
199
|
+
process.exit(1) // Let PM2/Docker restart
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
process.on('unhandledRejection', (reason) => {
|
|
203
|
+
console.error('UNHANDLED REJECTION:', reason)
|
|
204
|
+
process.exit(1)
|
|
205
|
+
})
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Structured Logging
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
// Use structured JSON logging (Pino is default in Fastify)
|
|
214
|
+
import pino from 'pino'
|
|
215
|
+
|
|
216
|
+
const logger = pino({
|
|
217
|
+
level: process.env.LOG_LEVEL || 'info',
|
|
218
|
+
...(process.env.NODE_ENV === 'development' && {
|
|
219
|
+
transport: { target: 'pino-pretty' }
|
|
220
|
+
})
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
// Log context, not messages
|
|
224
|
+
logger.error({ err, userId, requestId, path: req.url }, 'User fetch failed')
|
|
225
|
+
// ✅ Structured, searchable in Datadog/CloudWatch
|
|
226
|
+
|
|
227
|
+
// NOT: logger.error(`Error fetching user ${userId}: ${err.message}`)
|
|
228
|
+
// ❌ String, unsearchable
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Anti-Patterns
|
|
234
|
+
|
|
235
|
+
| ❌ Don't | ✅ Do |
|
|
236
|
+
|---------|-------|
|
|
237
|
+
| `try/catch` in every Express route | Use `express-async-errors` or Fastify |
|
|
238
|
+
| Return stack traces to client | Return error code + message only |
|
|
239
|
+
| `console.log` for errors | Use structured logger (Pino) |
|
|
240
|
+
| Swallow errors (empty catch) | Always log or rethrow |
|
|
241
|
+
| Generic `throw new Error('fail')` | Throw specific `AppError` subclass |
|
|
242
|
+
| Recover from programming errors | Crash and restart (PM2/Docker) |
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 🔗 Related
|
|
247
|
+
|
|
248
|
+
| File | When to Read |
|
|
249
|
+
|------|-------------|
|
|
250
|
+
| [architecture-patterns.md](architecture-patterns.md) | Where errors flow through layers |
|
|
251
|
+
| [async-patterns.md](async-patterns.md) | Async error handling |
|
|
252
|
+
| [validation-security.md](validation-security.md) | Validation errors at boundary |
|
|
253
|
+
| [framework-selection.md](framework-selection.md) | Framework-specific error behavior |
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: framework-selection
|
|
3
|
+
description: Node.js framework decision criteria — Hono, Fastify, Express, NestJS with code examples, middleware, and migration paths
|
|
4
|
+
title: "Framework Selection (2025)"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: framework, selection
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Framework Selection (2025)
|
|
11
|
+
|
|
12
|
+
> Choose framework by deployment target and team context. **Never default to Express for new projects.**
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Decision Tree
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
What are you building?
|
|
20
|
+
│
|
|
21
|
+
├── Edge / Serverless (Cloudflare Workers, Vercel Edge, Deno Deploy)
|
|
22
|
+
│ └── Hono
|
|
23
|
+
│ ├── Zero dependencies, ~14KB
|
|
24
|
+
│ ├── Fastest cold starts (~1ms)
|
|
25
|
+
│ ├── Web Standards API (Request/Response)
|
|
26
|
+
│ └── Runs on: CF Workers, Deno, Bun, Node.js, Lambda@Edge
|
|
27
|
+
│
|
|
28
|
+
├── High-Performance API (containers, VMs)
|
|
29
|
+
│ └── Fastify
|
|
30
|
+
│ ├── 2-3x faster than Express
|
|
31
|
+
│ ├── JSON Schema validation built-in
|
|
32
|
+
│ ├── Plugin-based architecture
|
|
33
|
+
│ └── Best for: REST APIs, microservices
|
|
34
|
+
│
|
|
35
|
+
├── Enterprise / Large Team
|
|
36
|
+
│ └── NestJS
|
|
37
|
+
│ ├── Structured (modules, controllers, services)
|
|
38
|
+
│ ├── Dependency Injection built-in
|
|
39
|
+
│ ├── Decorators + TypeScript native
|
|
40
|
+
│ └── Best for: large teams, enterprise apps
|
|
41
|
+
│
|
|
42
|
+
├── Legacy / Maximum Ecosystem
|
|
43
|
+
│ └── Express
|
|
44
|
+
│ ├── Largest middleware ecosystem
|
|
45
|
+
│ ├── Most tutorials and examples
|
|
46
|
+
│ └── Best for: maintaining existing apps
|
|
47
|
+
│
|
|
48
|
+
└── Full-Stack with Frontend
|
|
49
|
+
└── Next.js API Routes or tRPC
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Comparison Matrix
|
|
55
|
+
|
|
56
|
+
| Factor | Hono | Fastify | Express | NestJS |
|
|
57
|
+
|--------|------|---------|---------|--------|
|
|
58
|
+
| **Best for** | Edge, serverless | Performance | Legacy | Enterprise |
|
|
59
|
+
| **Cold start** | ~1ms | ~50ms | ~100ms | ~200ms |
|
|
60
|
+
| **Throughput** | ~150k req/s | ~78k req/s | ~15k req/s | ~12k req/s |
|
|
61
|
+
| **TypeScript** | Native | Excellent | Good (DefinitelyTyped) | Native |
|
|
62
|
+
| **Bundle size** | ~14KB | ~2MB | ~1.5MB | ~15MB |
|
|
63
|
+
| **Learning curve** | Low | Medium | Low | High |
|
|
64
|
+
| **Ecosystem** | Growing fast | Good | Largest | Good |
|
|
65
|
+
| **DI built-in** | No | No | No | Yes |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Hello World — Each Framework
|
|
70
|
+
|
|
71
|
+
### Hono
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import { Hono } from 'hono'
|
|
75
|
+
|
|
76
|
+
const app = new Hono()
|
|
77
|
+
|
|
78
|
+
app.get('/api/users/:id', async (c) => {
|
|
79
|
+
const id = c.req.param('id')
|
|
80
|
+
const user = await getUser(id)
|
|
81
|
+
if (!user) return c.json({ error: 'Not found' }, 404)
|
|
82
|
+
return c.json(user)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
export default app // Works on CF Workers, Deno, Bun, Node.js
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Fastify
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import Fastify from 'fastify'
|
|
92
|
+
|
|
93
|
+
const app = Fastify({ logger: true })
|
|
94
|
+
|
|
95
|
+
app.get('/api/users/:id', {
|
|
96
|
+
schema: {
|
|
97
|
+
params: { type: 'object', properties: { id: { type: 'string' } } },
|
|
98
|
+
response: { 200: { type: 'object', properties: { name: { type: 'string' } } } }
|
|
99
|
+
}
|
|
100
|
+
}, async (request, reply) => {
|
|
101
|
+
const user = await getUser(request.params.id)
|
|
102
|
+
if (!user) return reply.code(404).send({ error: 'Not found' })
|
|
103
|
+
return user // Auto-serialized via schema
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
await app.listen({ port: 3000 })
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Express
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import express from 'express'
|
|
113
|
+
|
|
114
|
+
const app = express()
|
|
115
|
+
app.use(express.json())
|
|
116
|
+
|
|
117
|
+
app.get('/api/users/:id', async (req, res, next) => {
|
|
118
|
+
try {
|
|
119
|
+
const user = await getUser(req.params.id)
|
|
120
|
+
if (!user) return res.status(404).json({ error: 'Not found' })
|
|
121
|
+
res.json(user)
|
|
122
|
+
} catch (err) {
|
|
123
|
+
next(err) // Must manually forward errors
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
app.listen(3000)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### NestJS
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
@Controller('users')
|
|
134
|
+
export class UsersController {
|
|
135
|
+
constructor(private readonly usersService: UsersService) {}
|
|
136
|
+
|
|
137
|
+
@Get(':id')
|
|
138
|
+
async findOne(@Param('id') id: string) {
|
|
139
|
+
const user = await this.usersService.findOne(id)
|
|
140
|
+
if (!user) throw new NotFoundException()
|
|
141
|
+
return user
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Middleware Comparison
|
|
149
|
+
|
|
150
|
+
| Feature | Hono | Fastify | Express | NestJS |
|
|
151
|
+
|---------|------|---------|---------|--------|
|
|
152
|
+
| **Auth** | `hono/jwt` | `@fastify/jwt` | `passport` | `@nestjs/passport` |
|
|
153
|
+
| **CORS** | `hono/cors` | `@fastify/cors` | `cors` | Built-in `enableCors()` |
|
|
154
|
+
| **Rate limit** | `hono/rate-limiter` | `@fastify/rate-limit` | `express-rate-limit` | `@nestjs/throttler` |
|
|
155
|
+
| **Validation** | Zod middleware | JSON Schema (built-in) | Zod/express-validator | class-validator (built-in) |
|
|
156
|
+
| **Logging** | Built-in | Pino (built-in) | `morgan` | Built-in logger |
|
|
157
|
+
| **Helmet** | `hono/secure-headers` | `@fastify/helmet` | `helmet` | `helmet` via Express adapter |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Migration Paths
|
|
162
|
+
|
|
163
|
+
### Express → Fastify
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
1. Replace app creation: express() → Fastify()
|
|
167
|
+
2. Replace middleware: app.use() → app.register()
|
|
168
|
+
3. Replace (req, res) → (request, reply)
|
|
169
|
+
4. Replace res.json() → reply.send() (or just return)
|
|
170
|
+
5. Add JSON schema for validation (optional but recommended)
|
|
171
|
+
6. Remove try/catch in routes (Fastify handles async errors)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Express → Hono
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
1. Replace app creation: express() → new Hono()
|
|
178
|
+
2. Replace (req, res) → (c) context object
|
|
179
|
+
3. Replace req.params.id → c.req.param('id')
|
|
180
|
+
4. Replace res.json() → c.json()
|
|
181
|
+
5. Remove body-parser middleware (Hono parses automatically)
|
|
182
|
+
6. Test on target runtime (CF Workers, Bun, etc.)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Selection Questions (Ask Before Choosing)
|
|
188
|
+
|
|
189
|
+
1. **Deployment target?** Edge → Hono. Container → Fastify. VM → any.
|
|
190
|
+
2. **Cold start critical?** Yes → Hono or Fastify. No → any.
|
|
191
|
+
3. **Team experience?** NestJS team → NestJS. Express team → consider migration to Fastify.
|
|
192
|
+
4. **Project size?** Small → Hono. Medium → Fastify. Large → NestJS.
|
|
193
|
+
5. **Existing codebase?** Express → keep or migrate gradually.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Anti-Patterns
|
|
198
|
+
|
|
199
|
+
| ❌ Don't | ✅ Do |
|
|
200
|
+
|---------|-------|
|
|
201
|
+
| Default to Express for new projects | Choose by deployment target |
|
|
202
|
+
| Use Express without error wrapper | Use Fastify (auto async) or express-async-errors |
|
|
203
|
+
| Install 20 middleware packages | Choose framework with built-ins (Fastify, Hono) |
|
|
204
|
+
| Choose NestJS for small API | Use Hono or Fastify for simplicity |
|
|
205
|
+
| Ignore cold start for serverless | Benchmark cold start before choosing |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 🔗 Related
|
|
210
|
+
|
|
211
|
+
| File | When to Read |
|
|
212
|
+
|------|-------------|
|
|
213
|
+
| [architecture-patterns.md](architecture-patterns.md) | After framework chosen — structure the app |
|
|
214
|
+
| [error-handling.md](error-handling.md) | Framework-specific error patterns |
|
|
215
|
+
| [validation-security.md](validation-security.md) | Input validation per framework |
|
|
216
|
+
| [runtime-modules.md](runtime-modules.md) | ESM/CJS module decisions |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: runtime-modules
|
|
3
|
+
description: Node.js runtime selection, ESM vs CJS, native TypeScript, node prefix, and module interop
|
|
4
|
+
title: "Runtime & Module System"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: runtime, modules
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Runtime & Module System
|
|
11
|
+
|
|
12
|
+
> Use ESM for new projects. Use `node:` prefix. Run TypeScript natively on Node.js 22+.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Runtime Selection
|
|
17
|
+
|
|
18
|
+
| Runtime | Best For | TypeScript | Package Manager |
|
|
19
|
+
|---------|----------|-----------|----------------|
|
|
20
|
+
| **Node.js** | General purpose, largest ecosystem | Via `--experimental-strip-types` (22+) or tsx | npm/pnpm/yarn |
|
|
21
|
+
| **Bun** | Performance, scripts, built-in bundler | Native | bun |
|
|
22
|
+
| **Deno** | Security-first, built-in TypeScript | Native | deno/npm |
|
|
23
|
+
|
|
24
|
+
**Default recommendation:** Node.js 22+ (LTS) unless specific Bun/Deno features needed.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Module System Decision
|
|
29
|
+
|
|
30
|
+
| Factor | ESM (`import/export`) | CJS (`require/module.exports`) |
|
|
31
|
+
|--------|----------------------|-------------------------------|
|
|
32
|
+
| **Standard** | Modern (ECMAScript) | Legacy (Node.js original) |
|
|
33
|
+
| **Tree-shaking** | ✅ Yes | ❌ No |
|
|
34
|
+
| **Top-level await** | ✅ Yes | ❌ No |
|
|
35
|
+
| **New projects** | ✅ Use this | ❌ Avoid |
|
|
36
|
+
| **Existing codebases** | Migrate gradually | Keep if migration cost high |
|
|
37
|
+
|
|
38
|
+
### ESM Setup
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
// package.json
|
|
42
|
+
{
|
|
43
|
+
"type": "module"
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
// tsconfig.json
|
|
49
|
+
{
|
|
50
|
+
"compilerOptions": {
|
|
51
|
+
"module": "NodeNext",
|
|
52
|
+
"moduleResolution": "NodeNext",
|
|
53
|
+
"target": "ES2022",
|
|
54
|
+
"outDir": "dist",
|
|
55
|
+
"strict": true,
|
|
56
|
+
"esModuleInterop": true,
|
|
57
|
+
"skipLibCheck": true
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Native TypeScript (Node.js 22+)
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Run .ts directly — no build step
|
|
68
|
+
node --experimental-strip-types src/app.ts
|
|
69
|
+
|
|
70
|
+
# With type-checking (slower, for CI)
|
|
71
|
+
npx tsx src/app.ts
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**When to use native TS:**
|
|
75
|
+
- Scripts and CLIs
|
|
76
|
+
- Simple APIs
|
|
77
|
+
- Development
|
|
78
|
+
|
|
79
|
+
**When to use a build step:**
|
|
80
|
+
- Production (compiled JS is faster to start)
|
|
81
|
+
- Complex projects with path aliases
|
|
82
|
+
- When you need decorators (NestJS)
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## `node:` Prefix (Always Use)
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
// ❌ Ambiguous — is this npm package or built-in?
|
|
90
|
+
import { readFile } from 'fs/promises'
|
|
91
|
+
import { join } from 'path'
|
|
92
|
+
|
|
93
|
+
// ✅ Clear — this is a Node.js built-in
|
|
94
|
+
import { readFile } from 'node:fs/promises'
|
|
95
|
+
import { join } from 'node:path'
|
|
96
|
+
import { Worker } from 'node:worker_threads'
|
|
97
|
+
import { createServer } from 'node:http'
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Why?** Prevents name conflicts with npm packages. Makes imports instantly recognizable.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Interop Gotchas
|
|
105
|
+
|
|
106
|
+
### Importing CJS from ESM
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
// ✅ Default imports usually work
|
|
110
|
+
import express from 'express' // CJS library
|
|
111
|
+
|
|
112
|
+
// ⚠️ Named imports may fail
|
|
113
|
+
import { Router } from 'express' // May error in some setups
|
|
114
|
+
|
|
115
|
+
// ✅ Safe alternative
|
|
116
|
+
import express from 'express'
|
|
117
|
+
const { Router } = express
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### `__dirname` / `__filename` in ESM
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
// ❌ Not available in ESM
|
|
124
|
+
console.log(__dirname) // ReferenceError
|
|
125
|
+
|
|
126
|
+
// ✅ ESM equivalent
|
|
127
|
+
import { fileURLToPath } from 'node:url'
|
|
128
|
+
import { dirname, join } from 'node:path'
|
|
129
|
+
|
|
130
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
131
|
+
const __dirname = dirname(__filename)
|
|
132
|
+
|
|
133
|
+
// Or use import.meta directly (Node.js 21+)
|
|
134
|
+
const configPath = new URL('./config.json', import.meta.url)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### `require()` in ESM
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
// ❌ Not available in ESM
|
|
141
|
+
const pkg = require('./package.json')
|
|
142
|
+
|
|
143
|
+
// ✅ Use createRequire or import assertion
|
|
144
|
+
import { createRequire } from 'node:module'
|
|
145
|
+
const require = createRequire(import.meta.url)
|
|
146
|
+
const pkg = require('./package.json')
|
|
147
|
+
|
|
148
|
+
// ✅ Or import with assertion (Node.js 22+)
|
|
149
|
+
import pkg from './package.json' with { type: 'json' }
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Anti-Patterns
|
|
155
|
+
|
|
156
|
+
| ❌ Don't | ✅ Do |
|
|
157
|
+
|---------|-------|
|
|
158
|
+
| Start new projects with CJS | Use ESM (`"type": "module"`) |
|
|
159
|
+
| Import built-ins without `node:` | Always `import from 'node:fs'` |
|
|
160
|
+
| Mix ESM and CJS in same package | Pick one, migrate fully |
|
|
161
|
+
| Use `__dirname` in ESM | Use `import.meta.url` |
|
|
162
|
+
| Skip tsconfig `"strict": true` | Always enable strict mode |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 🔗 Related
|
|
167
|
+
|
|
168
|
+
| File | When to Read |
|
|
169
|
+
|------|-------------|
|
|
170
|
+
| [framework-selection.md](framework-selection.md) | Framework TypeScript support |
|
|
171
|
+
| [async-patterns.md](async-patterns.md) | node: built-in async APIs |
|
|
172
|
+
| [testing-strategy.md](testing-strategy.md) | node:test built-in runner |
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
⚡ PikaKit v3.9.134
|