moai-adk 0.35.1__py3-none-any.whl
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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +10 -0
- moai_adk/__main__.py +199 -0
- moai_adk/cli/__init__.py +6 -0
- moai_adk/cli/commands/__init__.py +17 -0
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +272 -0
- moai_adk/cli/commands/init.py +372 -0
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +104 -0
- moai_adk/cli/commands/update.py +2686 -0
- moai_adk/cli/main.py +13 -0
- moai_adk/cli/prompts/__init__.py +5 -0
- moai_adk/cli/prompts/init_prompts.py +219 -0
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/__init__.py +1 -0
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +400 -0
- moai_adk/core/claude_integration.py +393 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/__init__.py +19 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +244 -0
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/__init__.py +19 -0
- moai_adk/core/diagnostics/slash_commands.py +159 -0
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +1902 -0
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +31 -0
- moai_adk/core/git/branch.py +25 -0
- moai_adk/core/git/branch_manager.py +129 -0
- moai_adk/core/git/checkpoint.py +134 -0
- moai_adk/core/git/commit.py +67 -0
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +79 -0
- moai_adk/core/git/manager.py +216 -0
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +305 -0
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +572 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +605 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +277 -0
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +209 -0
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +139 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +316 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/__init__.py +1 -0
- moai_adk/core/project/backup_utils.py +70 -0
- moai_adk/core/project/checker.py +300 -0
- moai_adk/core/project/detector.py +293 -0
- moai_adk/core/project/initializer.py +387 -0
- moai_adk/core/project/phase_executor.py +716 -0
- moai_adk/core/project/validator.py +139 -0
- moai_adk/core/quality/__init__.py +6 -0
- moai_adk/core/quality/trust_checker.py +377 -0
- moai_adk/core/quality/validators/__init__.py +6 -0
- moai_adk/core/quality/validators/base_validator.py +19 -0
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +918 -0
- moai_adk/core/session_manager.py +651 -0
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +680 -0
- moai_adk/core/spec/ears_template_engine.py +1247 -0
- moai_adk/core/spec/quality_validator.py +687 -0
- moai_adk/core/spec_status_manager.py +478 -0
- moai_adk/core/template/__init__.py +7 -0
- moai_adk/core/template/backup.py +174 -0
- moai_adk/core/template/config.py +191 -0
- moai_adk/core/template/languages.py +43 -0
- moai_adk/core/template/merger.py +233 -0
- moai_adk/core/template/processor.py +1200 -0
- moai_adk/core/template_engine.py +310 -0
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +557 -0
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +128 -0
- moai_adk/templates/.git-hooks/pre-push +365 -0
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
- moai_adk/templates/.gitignore +222 -0
- moai_adk/templates/.mcp.json +13 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
- moai_adk/templates/.moai/config/sections/system.yaml +24 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +642 -0
- moai_adk/utils/__init__.py +30 -0
- moai_adk/utils/banner.py +38 -0
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +147 -0
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.35.1.dist-info/METADATA +3018 -0
- moai_adk-0.35.1.dist-info/RECORD +502 -0
- moai_adk-0.35.1.dist-info/WHEEL +4 -0
- moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
- moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,731 @@
|
|
|
1
|
+
# TypeScript Development Reference
|
|
2
|
+
|
|
3
|
+
## TypeScript 5.9 Complete Reference
|
|
4
|
+
|
|
5
|
+
### New Features Overview
|
|
6
|
+
|
|
7
|
+
| Feature | Description | Use Case |
|
|
8
|
+
|---------|-------------|----------|
|
|
9
|
+
| Deferred Module Evaluation | Lazy-load modules on first access | Performance optimization |
|
|
10
|
+
| Decorators (Stage 3) | Native decorator support | Logging, validation, DI |
|
|
11
|
+
| Satisfies Operator | Type check without widening | Precise type inference |
|
|
12
|
+
| Const Type Parameters | Infer literal types in generics | Configuration objects |
|
|
13
|
+
| NoInfer Utility Type | Control inference in generic positions | API design |
|
|
14
|
+
|
|
15
|
+
### Advanced Type Patterns
|
|
16
|
+
|
|
17
|
+
#### Conditional Types
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// Extract return type from async function
|
|
21
|
+
type Awaited<T> = T extends Promise<infer U> ? U : T;
|
|
22
|
+
|
|
23
|
+
// Create type based on condition
|
|
24
|
+
type NonNullable<T> = T extends null | undefined ? never : T;
|
|
25
|
+
|
|
26
|
+
// Distributive conditional types
|
|
27
|
+
type ToArray<T> = T extends any ? T[] : never;
|
|
28
|
+
type Result = ToArray<string | number>; // string[] | number[]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
#### Mapped Types
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
// Make all properties optional
|
|
35
|
+
type Partial<T> = { [P in keyof T]?: T[P] };
|
|
36
|
+
|
|
37
|
+
// Make all properties readonly
|
|
38
|
+
type Readonly<T> = { readonly [P in keyof T]: T[P] };
|
|
39
|
+
|
|
40
|
+
// Pick specific properties
|
|
41
|
+
type Pick<T, K extends keyof T> = { [P in K]: T[P] };
|
|
42
|
+
|
|
43
|
+
// Custom mapped type with key transformation
|
|
44
|
+
type Getters<T> = {
|
|
45
|
+
[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K];
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
interface User {
|
|
49
|
+
name: string;
|
|
50
|
+
age: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
type UserGetters = Getters<User>;
|
|
54
|
+
// { getName: () => string; getAge: () => number; }
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
#### Template Literal Types
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
// Event handler types
|
|
61
|
+
type EventName = "click" | "focus" | "blur";
|
|
62
|
+
type EventHandler = `on${Capitalize<EventName>}`;
|
|
63
|
+
// "onClick" | "onFocus" | "onBlur"
|
|
64
|
+
|
|
65
|
+
// API route types
|
|
66
|
+
type HTTPMethod = "GET" | "POST" | "PUT" | "DELETE";
|
|
67
|
+
type APIRoute<M extends HTTPMethod, P extends string> = `${M} ${P}`;
|
|
68
|
+
type UserRoutes = APIRoute<"GET" | "POST", "/users">;
|
|
69
|
+
|
|
70
|
+
// CSS utility types
|
|
71
|
+
type CSSProperty = "margin" | "padding";
|
|
72
|
+
type CSSDirection = "top" | "right" | "bottom" | "left";
|
|
73
|
+
type CSSUtility = `${CSSProperty}-${CSSDirection}`;
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### Variadic Tuple Types
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// Concat tuple types
|
|
80
|
+
type Concat<T extends unknown[], U extends unknown[]> = [...T, ...U];
|
|
81
|
+
|
|
82
|
+
// First and rest
|
|
83
|
+
type First<T extends unknown[]> = T extends [infer F, ...unknown[]] ? F : never;
|
|
84
|
+
type Rest<T extends unknown[]> = T extends [unknown, ...infer R] ? R : never;
|
|
85
|
+
|
|
86
|
+
// Typed pipe function
|
|
87
|
+
type PipeFunction<I, O> = (input: I) => O;
|
|
88
|
+
|
|
89
|
+
declare function pipe<A, B>(fn1: PipeFunction<A, B>): PipeFunction<A, B>;
|
|
90
|
+
declare function pipe<A, B, C>(
|
|
91
|
+
fn1: PipeFunction<A, B>,
|
|
92
|
+
fn2: PipeFunction<B, C>
|
|
93
|
+
): PipeFunction<A, C>;
|
|
94
|
+
declare function pipe<A, B, C, D>(
|
|
95
|
+
fn1: PipeFunction<A, B>,
|
|
96
|
+
fn2: PipeFunction<B, C>,
|
|
97
|
+
fn3: PipeFunction<C, D>
|
|
98
|
+
): PipeFunction<A, D>;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Utility Types Deep Dive
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
// Record - Create object type with specific keys and values
|
|
105
|
+
type PageInfo = { title: string };
|
|
106
|
+
type PageRecord = Record<"home" | "about" | "contact", PageInfo>;
|
|
107
|
+
|
|
108
|
+
// Exclude/Extract - Filter union types
|
|
109
|
+
type T1 = Exclude<"a" | "b" | "c", "a">; // "b" | "c"
|
|
110
|
+
type T2 = Extract<"a" | "b" | "c", "a" | "f">; // "a"
|
|
111
|
+
|
|
112
|
+
// Parameters/ReturnType - Function type utilities
|
|
113
|
+
function greet(name: string, age: number): string {
|
|
114
|
+
return `Hello ${name}, you are ${age}`;
|
|
115
|
+
}
|
|
116
|
+
type Params = Parameters<typeof greet>; // [string, number]
|
|
117
|
+
type Return = ReturnType<typeof greet>; // string
|
|
118
|
+
|
|
119
|
+
// Awaited - Unwrap Promise types
|
|
120
|
+
type A = Awaited<Promise<string>>; // string
|
|
121
|
+
type B = Awaited<Promise<Promise<number>>>; // number
|
|
122
|
+
|
|
123
|
+
// NoInfer - Prevent type inference
|
|
124
|
+
function createState<T>(initial: NoInfer<T>): [T, (value: T) => void] {
|
|
125
|
+
// Implementation
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## React 19 Complete Reference
|
|
132
|
+
|
|
133
|
+
### Server Components Architecture
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
┌─────────────────────────────────────┐
|
|
137
|
+
│ Server │
|
|
138
|
+
│ ┌───────────────────────────────┐ │
|
|
139
|
+
│ │ Server Component Tree │ │
|
|
140
|
+
│ │ - Data fetching │ │
|
|
141
|
+
│ │ - Database access │ │
|
|
142
|
+
│ │ - Server-only logic │ │
|
|
143
|
+
│ └───────────────────────────────┘ │
|
|
144
|
+
│ │ │
|
|
145
|
+
│ ▼ RSC Payload │
|
|
146
|
+
└───────────────┼─────────────────────┘
|
|
147
|
+
│
|
|
148
|
+
┌───────────────┼─────────────────────┐
|
|
149
|
+
│ Client │
|
|
150
|
+
│ ▼ │
|
|
151
|
+
│ ┌───────────────────────────────┐ │
|
|
152
|
+
│ │ Client Component Tree │ │
|
|
153
|
+
│ │ - Interactivity │ │
|
|
154
|
+
│ │ - State management │ │
|
|
155
|
+
│ │ - Event handlers │ │
|
|
156
|
+
│ └───────────────────────────────┘ │
|
|
157
|
+
└─────────────────────────────────────┘
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Component Patterns
|
|
161
|
+
|
|
162
|
+
#### Server Component with Streaming
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
// app/dashboard/page.tsx
|
|
166
|
+
import { Suspense } from "react";
|
|
167
|
+
import { DashboardSkeleton, ChartSkeleton } from "./skeletons";
|
|
168
|
+
|
|
169
|
+
export default function DashboardPage() {
|
|
170
|
+
return (
|
|
171
|
+
<main>
|
|
172
|
+
<h1>Dashboard</h1>
|
|
173
|
+
<Suspense fallback={<DashboardSkeleton />}>
|
|
174
|
+
<DashboardMetrics />
|
|
175
|
+
</Suspense>
|
|
176
|
+
<Suspense fallback={<ChartSkeleton />}>
|
|
177
|
+
<AnalyticsChart />
|
|
178
|
+
</Suspense>
|
|
179
|
+
</main>
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async function DashboardMetrics() {
|
|
184
|
+
const metrics = await fetchMetrics(); // Streamed independently
|
|
185
|
+
return <MetricsGrid data={metrics} />;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
async function AnalyticsChart() {
|
|
189
|
+
const data = await fetchAnalytics(); // Streamed independently
|
|
190
|
+
return <Chart data={data} />;
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
#### Client Component Patterns
|
|
195
|
+
|
|
196
|
+
```typescript
|
|
197
|
+
"use client";
|
|
198
|
+
|
|
199
|
+
import { useState, useTransition, useOptimistic } from "react";
|
|
200
|
+
|
|
201
|
+
interface Message {
|
|
202
|
+
id: string;
|
|
203
|
+
text: string;
|
|
204
|
+
sending?: boolean;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export function MessageList({ messages }: { messages: Message[] }) {
|
|
208
|
+
const [isPending, startTransition] = useTransition();
|
|
209
|
+
const [optimisticMessages, addOptimistic] = useOptimistic(
|
|
210
|
+
messages,
|
|
211
|
+
(state, newMessage: Message) => [...state, { ...newMessage, sending: true }]
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
async function sendMessage(formData: FormData) {
|
|
215
|
+
const text = formData.get("text") as string;
|
|
216
|
+
const tempId = crypto.randomUUID();
|
|
217
|
+
|
|
218
|
+
addOptimistic({ id: tempId, text });
|
|
219
|
+
|
|
220
|
+
startTransition(async () => {
|
|
221
|
+
await submitMessage(text);
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return (
|
|
226
|
+
<div>
|
|
227
|
+
<ul>
|
|
228
|
+
{optimisticMessages.map((msg) => (
|
|
229
|
+
<li key={msg.id} style={{ opacity: msg.sending ? 0.5 : 1 }}>
|
|
230
|
+
{msg.text}
|
|
231
|
+
</li>
|
|
232
|
+
))}
|
|
233
|
+
</ul>
|
|
234
|
+
<form action={sendMessage}>
|
|
235
|
+
<input name="text" required />
|
|
236
|
+
<button type="submit" disabled={isPending}>Send</button>
|
|
237
|
+
</form>
|
|
238
|
+
</div>
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Hooks Reference
|
|
244
|
+
|
|
245
|
+
| Hook | Purpose | Server/Client |
|
|
246
|
+
|------|---------|---------------|
|
|
247
|
+
| use() | Unwrap Promise/Context | Both |
|
|
248
|
+
| useState | Component state | Client |
|
|
249
|
+
| useEffect | Side effects | Client |
|
|
250
|
+
| useContext | Access context | Client |
|
|
251
|
+
| useRef | Mutable reference | Client |
|
|
252
|
+
| useMemo | Memoize computation | Client |
|
|
253
|
+
| useCallback | Memoize callback | Client |
|
|
254
|
+
| useTransition | Non-blocking updates | Client |
|
|
255
|
+
| useOptimistic | Optimistic UI | Client |
|
|
256
|
+
| useActionState | Form action state | Client |
|
|
257
|
+
| useFormStatus | Form submission status | Client |
|
|
258
|
+
| useDeferredValue | Defer expensive updates | Client |
|
|
259
|
+
| useId | Generate unique IDs | Both |
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Next.js 16 Complete Reference
|
|
264
|
+
|
|
265
|
+
### Rendering Strategies
|
|
266
|
+
|
|
267
|
+
| Strategy | Description | Use Case |
|
|
268
|
+
|----------|-------------|----------|
|
|
269
|
+
| SSR | Server-Side Rendering | Dynamic, personalized content |
|
|
270
|
+
| SSG | Static Site Generation | Blog posts, documentation |
|
|
271
|
+
| ISR | Incremental Static Regeneration | E-commerce, frequently updated |
|
|
272
|
+
| CSR | Client-Side Rendering | Interactive dashboards |
|
|
273
|
+
| PPR | Partial Prerendering | Mixed static/dynamic |
|
|
274
|
+
|
|
275
|
+
### Route Configuration
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
// Static generation
|
|
279
|
+
export const dynamic = "force-static";
|
|
280
|
+
|
|
281
|
+
// Dynamic on every request
|
|
282
|
+
export const dynamic = "force-dynamic";
|
|
283
|
+
|
|
284
|
+
// Revalidate every 60 seconds
|
|
285
|
+
export const revalidate = 60;
|
|
286
|
+
|
|
287
|
+
// Disable revalidation
|
|
288
|
+
export const revalidate = false;
|
|
289
|
+
|
|
290
|
+
// Runtime selection
|
|
291
|
+
export const runtime = "edge"; // or "nodejs"
|
|
292
|
+
|
|
293
|
+
// Preferred region for edge functions
|
|
294
|
+
export const preferredRegion = ["iad1", "sfo1"];
|
|
295
|
+
|
|
296
|
+
// Maximum duration for serverless functions
|
|
297
|
+
export const maxDuration = 30;
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Data Fetching Patterns
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
// Parallel data fetching
|
|
304
|
+
async function Dashboard() {
|
|
305
|
+
const [users, posts, comments] = await Promise.all([
|
|
306
|
+
getUsers(),
|
|
307
|
+
getPosts(),
|
|
308
|
+
getComments(),
|
|
309
|
+
]);
|
|
310
|
+
|
|
311
|
+
return <DashboardView users={users} posts={posts} comments={comments} />;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Sequential data fetching (when dependent)
|
|
315
|
+
async function UserPosts({ userId }: { userId: string }) {
|
|
316
|
+
const user = await getUser(userId);
|
|
317
|
+
const posts = await getPosts(user.id); // Depends on user
|
|
318
|
+
|
|
319
|
+
return <PostList posts={posts} />;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// With caching
|
|
323
|
+
import { unstable_cache } from "next/cache";
|
|
324
|
+
|
|
325
|
+
const getCachedUser = unstable_cache(
|
|
326
|
+
async (id: string) => db.user.findUnique({ where: { id } }),
|
|
327
|
+
["user"],
|
|
328
|
+
{ revalidate: 3600, tags: ["user"] }
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
// Revalidation
|
|
332
|
+
import { revalidatePath, revalidateTag } from "next/cache";
|
|
333
|
+
|
|
334
|
+
export async function updateUser(id: string, data: UserData) {
|
|
335
|
+
await db.user.update({ where: { id }, data });
|
|
336
|
+
revalidatePath(`/users/${id}`);
|
|
337
|
+
revalidateTag("user");
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Middleware Patterns
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
// middleware.ts
|
|
345
|
+
import { NextResponse } from "next/server";
|
|
346
|
+
import type { NextRequest } from "next/server";
|
|
347
|
+
|
|
348
|
+
export function middleware(request: NextRequest) {
|
|
349
|
+
// Authentication check
|
|
350
|
+
const token = request.cookies.get("auth-token");
|
|
351
|
+
if (!token && request.nextUrl.pathname.startsWith("/dashboard")) {
|
|
352
|
+
return NextResponse.redirect(new URL("/login", request.url));
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Rate limiting headers
|
|
356
|
+
const response = NextResponse.next();
|
|
357
|
+
response.headers.set("X-RateLimit-Limit", "100");
|
|
358
|
+
response.headers.set("X-RateLimit-Remaining", "99");
|
|
359
|
+
|
|
360
|
+
// Geolocation-based routing
|
|
361
|
+
const country = request.geo?.country || "US";
|
|
362
|
+
if (request.nextUrl.pathname === "/" && country === "DE") {
|
|
363
|
+
return NextResponse.rewrite(new URL("/de", request.url));
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
return response;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
export const config = {
|
|
370
|
+
matcher: [
|
|
371
|
+
"/((?!api|_next/static|_next/image|favicon.ico).*)",
|
|
372
|
+
],
|
|
373
|
+
};
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## tRPC 11 Complete Reference
|
|
379
|
+
|
|
380
|
+
### Router Architecture
|
|
381
|
+
|
|
382
|
+
```
|
|
383
|
+
┌─────────────────────────────────────────────────────────┐
|
|
384
|
+
│ tRPC Architecture │
|
|
385
|
+
├─────────────────────────────────────────────────────────┤
|
|
386
|
+
│ Client │
|
|
387
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
388
|
+
│ │ trpc.user.getById.useQuery({ id: "123" }) │ │
|
|
389
|
+
│ │ │ │ │
|
|
390
|
+
│ │ ▼ Type-safe call │ │
|
|
391
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
392
|
+
│ │ │
|
|
393
|
+
│ │ HTTP/WebSocket │
|
|
394
|
+
│ ▼ │
|
|
395
|
+
│ Server │
|
|
396
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
397
|
+
│ │ userRouter.getById │ │
|
|
398
|
+
│ │ .input(z.object({ id: z.string() })) │ │
|
|
399
|
+
│ │ .query(({ input }) => db.user.find(input.id)) │ │
|
|
400
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
401
|
+
└─────────────────────────────────────────────────────────┘
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### Complete Setup
|
|
405
|
+
|
|
406
|
+
```typescript
|
|
407
|
+
// server/context.ts
|
|
408
|
+
import { getServerSession } from "next-auth";
|
|
409
|
+
import { db } from "@/lib/db";
|
|
410
|
+
|
|
411
|
+
export async function createContext({ req, res }: { req: Request; res: Response }) {
|
|
412
|
+
const session = await getServerSession();
|
|
413
|
+
return { db, session, req, res };
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
export type Context = Awaited<ReturnType<typeof createContext>>;
|
|
417
|
+
|
|
418
|
+
// server/trpc.ts
|
|
419
|
+
import { initTRPC, TRPCError } from "@trpc/server";
|
|
420
|
+
import { Context } from "./context";
|
|
421
|
+
import superjson from "superjson";
|
|
422
|
+
|
|
423
|
+
const t = initTRPC.context<Context>().create({
|
|
424
|
+
transformer: superjson,
|
|
425
|
+
errorFormatter({ shape, error }) {
|
|
426
|
+
return {
|
|
427
|
+
...shape,
|
|
428
|
+
data: {
|
|
429
|
+
...shape.data,
|
|
430
|
+
zodError: error.cause instanceof ZodError ? error.cause.flatten() : null,
|
|
431
|
+
},
|
|
432
|
+
};
|
|
433
|
+
},
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
export const router = t.router;
|
|
437
|
+
export const publicProcedure = t.procedure;
|
|
438
|
+
export const protectedProcedure = t.procedure.use(async ({ ctx, next }) => {
|
|
439
|
+
if (!ctx.session?.user) {
|
|
440
|
+
throw new TRPCError({ code: "UNAUTHORIZED" });
|
|
441
|
+
}
|
|
442
|
+
return next({ ctx: { ...ctx, user: ctx.session.user } });
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
// Middleware for logging
|
|
446
|
+
const loggerMiddleware = t.middleware(async ({ path, type, next }) => {
|
|
447
|
+
const start = Date.now();
|
|
448
|
+
const result = await next();
|
|
449
|
+
console.log(`${type} ${path} - ${Date.now() - start}ms`);
|
|
450
|
+
return result;
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
export const loggedProcedure = publicProcedure.use(loggerMiddleware);
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
### Subscriptions (WebSocket)
|
|
457
|
+
|
|
458
|
+
```typescript
|
|
459
|
+
// server/routers/notifications.ts
|
|
460
|
+
import { observable } from "@trpc/server/observable";
|
|
461
|
+
import { EventEmitter } from "events";
|
|
462
|
+
|
|
463
|
+
const ee = new EventEmitter();
|
|
464
|
+
|
|
465
|
+
export const notificationRouter = router({
|
|
466
|
+
onNewMessage: protectedProcedure.subscription(({ ctx }) => {
|
|
467
|
+
return observable<Message>((emit) => {
|
|
468
|
+
const handler = (message: Message) => {
|
|
469
|
+
if (message.userId === ctx.user.id) {
|
|
470
|
+
emit.next(message);
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
ee.on("message", handler);
|
|
475
|
+
return () => ee.off("message", handler);
|
|
476
|
+
});
|
|
477
|
+
}),
|
|
478
|
+
|
|
479
|
+
sendMessage: protectedProcedure
|
|
480
|
+
.input(z.object({ text: z.string() }))
|
|
481
|
+
.mutation(async ({ input, ctx }) => {
|
|
482
|
+
const message = await db.message.create({
|
|
483
|
+
data: { text: input.text, userId: ctx.user.id },
|
|
484
|
+
});
|
|
485
|
+
ee.emit("message", message);
|
|
486
|
+
return message;
|
|
487
|
+
}),
|
|
488
|
+
});
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
---
|
|
492
|
+
|
|
493
|
+
## Zod 3.23 Complete Reference
|
|
494
|
+
|
|
495
|
+
### Schema Types
|
|
496
|
+
|
|
497
|
+
| Type | Example | Description |
|
|
498
|
+
|------|---------|-------------|
|
|
499
|
+
| string | z.string() | String validation |
|
|
500
|
+
| number | z.number() | Number validation |
|
|
501
|
+
| boolean | z.boolean() | Boolean validation |
|
|
502
|
+
| date | z.date() | Date object validation |
|
|
503
|
+
| enum | z.enum(["a", "b"]) | Literal union |
|
|
504
|
+
| nativeEnum | z.nativeEnum(MyEnum) | TS enum validation |
|
|
505
|
+
| array | z.array(z.string()) | Array validation |
|
|
506
|
+
| object | z.object({...}) | Object validation |
|
|
507
|
+
| union | z.union([...]) | Type union |
|
|
508
|
+
| discriminatedUnion | z.discriminatedUnion(...) | Tagged union |
|
|
509
|
+
| tuple | z.tuple([...]) | Fixed-length array |
|
|
510
|
+
| record | z.record(z.string()) | Record type |
|
|
511
|
+
| map | z.map(z.string(), z.number()) | Map validation |
|
|
512
|
+
| set | z.set(z.string()) | Set validation |
|
|
513
|
+
| literal | z.literal("hello") | Exact value |
|
|
514
|
+
| null | z.null() | Null type |
|
|
515
|
+
| undefined | z.undefined() | Undefined type |
|
|
516
|
+
| any | z.any() | Any type |
|
|
517
|
+
| unknown | z.unknown() | Unknown type |
|
|
518
|
+
| never | z.never() | Never type |
|
|
519
|
+
|
|
520
|
+
### Advanced Patterns
|
|
521
|
+
|
|
522
|
+
```typescript
|
|
523
|
+
// Discriminated unions for type-safe variants
|
|
524
|
+
const EventSchema = z.discriminatedUnion("type", [
|
|
525
|
+
z.object({ type: z.literal("click"), x: z.number(), y: z.number() }),
|
|
526
|
+
z.object({ type: z.literal("keypress"), key: z.string() }),
|
|
527
|
+
z.object({ type: z.literal("scroll"), delta: z.number() }),
|
|
528
|
+
]);
|
|
529
|
+
|
|
530
|
+
// Recursive types
|
|
531
|
+
interface Category {
|
|
532
|
+
name: string;
|
|
533
|
+
subcategories: Category[];
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
const CategorySchema: z.ZodType<Category> = z.lazy(() =>
|
|
537
|
+
z.object({
|
|
538
|
+
name: z.string(),
|
|
539
|
+
subcategories: z.array(CategorySchema),
|
|
540
|
+
})
|
|
541
|
+
);
|
|
542
|
+
|
|
543
|
+
// Branded types for type safety
|
|
544
|
+
const UserId = z.string().uuid().brand<"UserId">();
|
|
545
|
+
type UserId = z.infer<typeof UserId>;
|
|
546
|
+
|
|
547
|
+
// Error customization
|
|
548
|
+
const EmailSchema = z.string().email({
|
|
549
|
+
message: "Please enter a valid email address",
|
|
550
|
+
}).refine((email) => !email.includes("+"), {
|
|
551
|
+
message: "Email aliases are not allowed",
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
// Preprocessing
|
|
555
|
+
const DateSchema = z.preprocess(
|
|
556
|
+
(val) => (typeof val === "string" ? new Date(val) : val),
|
|
557
|
+
z.date()
|
|
558
|
+
);
|
|
559
|
+
|
|
560
|
+
// Coercion
|
|
561
|
+
const CoercedNumber = z.coerce.number(); // "42" -> 42
|
|
562
|
+
const CoercedDate = z.coerce.date(); // "2024-01-01" -> Date
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
|
|
567
|
+
## Context7 Library Mappings
|
|
568
|
+
|
|
569
|
+
### Primary Libraries
|
|
570
|
+
|
|
571
|
+
```
|
|
572
|
+
/microsoft/TypeScript - TypeScript language and compiler
|
|
573
|
+
/facebook/react - React library
|
|
574
|
+
/vercel/next.js - Next.js framework
|
|
575
|
+
/trpc/trpc - tRPC type-safe APIs
|
|
576
|
+
/colinhacks/zod - Zod schema validation
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
### State Management
|
|
580
|
+
|
|
581
|
+
```
|
|
582
|
+
/pmndrs/zustand - Zustand state management
|
|
583
|
+
/pmndrs/jotai - Jotai atomic state
|
|
584
|
+
/reduxjs/redux-toolkit - Redux Toolkit
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
### UI Libraries
|
|
588
|
+
|
|
589
|
+
```
|
|
590
|
+
/shadcn-ui/ui - shadcn/ui components
|
|
591
|
+
/tailwindlabs/tailwindcss - Tailwind CSS
|
|
592
|
+
/radix-ui/primitives - Radix UI primitives
|
|
593
|
+
/chakra-ui/chakra-ui - Chakra UI
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
### Testing
|
|
597
|
+
|
|
598
|
+
```
|
|
599
|
+
/vitest-dev/vitest - Vitest testing framework
|
|
600
|
+
/testing-library/react-testing-library - React Testing Library
|
|
601
|
+
/microsoft/playwright - Playwright E2E testing
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
### Build Tools
|
|
605
|
+
|
|
606
|
+
```
|
|
607
|
+
/vercel/turbo - Turborepo monorepo
|
|
608
|
+
/evanw/esbuild - esbuild bundler
|
|
609
|
+
/privatenumber/tsup - tsup bundler
|
|
610
|
+
/biomejs/biome - Biome linter/formatter
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
---
|
|
614
|
+
|
|
615
|
+
## Performance Optimization
|
|
616
|
+
|
|
617
|
+
### Bundle Optimization
|
|
618
|
+
|
|
619
|
+
```typescript
|
|
620
|
+
// Dynamic imports for code splitting
|
|
621
|
+
const HeavyComponent = dynamic(() => import("./HeavyComponent"), {
|
|
622
|
+
loading: () => <Skeleton />,
|
|
623
|
+
ssr: false,
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
// Tree-shaking friendly exports
|
|
627
|
+
// utils/index.ts - BAD
|
|
628
|
+
export * from "./math";
|
|
629
|
+
export * from "./string";
|
|
630
|
+
|
|
631
|
+
// utils/index.ts - GOOD
|
|
632
|
+
export { add, subtract } from "./math";
|
|
633
|
+
export { capitalize } from "./string";
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
### React Optimization
|
|
637
|
+
|
|
638
|
+
```typescript
|
|
639
|
+
// Memo for expensive components
|
|
640
|
+
const ExpensiveList = memo(function ExpensiveList({ items }: Props) {
|
|
641
|
+
return items.map((item) => <ExpensiveItem key={item.id} item={item} />);
|
|
642
|
+
}, (prev, next) => prev.items.length === next.items.length);
|
|
643
|
+
|
|
644
|
+
// useMemo for expensive calculations
|
|
645
|
+
const sortedItems = useMemo(
|
|
646
|
+
() => items.sort((a, b) => a.name.localeCompare(b.name)),
|
|
647
|
+
[items]
|
|
648
|
+
);
|
|
649
|
+
|
|
650
|
+
// useCallback for stable references
|
|
651
|
+
const handleClick = useCallback((id: string) => {
|
|
652
|
+
setSelectedId(id);
|
|
653
|
+
}, []);
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
### TypeScript Compilation
|
|
657
|
+
|
|
658
|
+
```json
|
|
659
|
+
// tsconfig.json optimizations
|
|
660
|
+
{
|
|
661
|
+
"compilerOptions": {
|
|
662
|
+
"incremental": true,
|
|
663
|
+
"tsBuildInfoFile": ".tsbuildinfo",
|
|
664
|
+
"skipLibCheck": true,
|
|
665
|
+
"moduleResolution": "bundler",
|
|
666
|
+
"isolatedModules": true
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
---
|
|
672
|
+
|
|
673
|
+
## Security Best Practices
|
|
674
|
+
|
|
675
|
+
### Input Validation
|
|
676
|
+
|
|
677
|
+
```typescript
|
|
678
|
+
// Always validate on server
|
|
679
|
+
export async function createUser(formData: FormData) {
|
|
680
|
+
const result = UserSchema.safeParse({
|
|
681
|
+
name: formData.get("name"),
|
|
682
|
+
email: formData.get("email"),
|
|
683
|
+
});
|
|
684
|
+
|
|
685
|
+
if (!result.success) {
|
|
686
|
+
return { error: "Invalid input" }; // Don't expose details
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
// Proceed with validated data
|
|
690
|
+
}
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
### Environment Variables
|
|
694
|
+
|
|
695
|
+
```typescript
|
|
696
|
+
// env.ts
|
|
697
|
+
import { z } from "zod";
|
|
698
|
+
|
|
699
|
+
const envSchema = z.object({
|
|
700
|
+
DATABASE_URL: z.string().url(),
|
|
701
|
+
NEXTAUTH_SECRET: z.string().min(32),
|
|
702
|
+
NEXTAUTH_URL: z.string().url(),
|
|
703
|
+
NODE_ENV: z.enum(["development", "production", "test"]),
|
|
704
|
+
});
|
|
705
|
+
|
|
706
|
+
export const env = envSchema.parse(process.env);
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
### Authentication
|
|
710
|
+
|
|
711
|
+
```typescript
|
|
712
|
+
// Protect server actions
|
|
713
|
+
"use server";
|
|
714
|
+
|
|
715
|
+
import { getServerSession } from "next-auth";
|
|
716
|
+
import { redirect } from "next/navigation";
|
|
717
|
+
|
|
718
|
+
export async function protectedAction() {
|
|
719
|
+
const session = await getServerSession();
|
|
720
|
+
if (!session) {
|
|
721
|
+
redirect("/login");
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
// Proceed with authenticated action
|
|
725
|
+
}
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
---
|
|
729
|
+
|
|
730
|
+
Version: 1.0.0
|
|
731
|
+
Last Updated: 2025-12-07
|