@codyswann/lisa 1.48.0 → 1.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +48 -0
- package/all/deletions.json +5 -1
- package/all/merge/.claude/settings.json +28 -0
- package/cdk/copy-overwrite/eslint.config.ts +11 -21
- package/cdk/copy-overwrite/eslint.slow.config.ts +4 -73
- package/cdk/copy-overwrite/jest.config.ts +14 -12
- package/cdk/copy-overwrite/tsconfig.json +1 -1
- package/cdk/merge/.claude/settings.json +29 -0
- package/cdk/package-lisa/package.lisa.json +1 -0
- package/dist/configs/eslint/base.d.ts +1491 -0
- package/dist/configs/eslint/base.d.ts.map +1 -0
- package/dist/configs/eslint/base.js +386 -0
- package/dist/configs/eslint/base.js.map +1 -0
- package/dist/configs/eslint/cdk.d.ts +32 -0
- package/dist/configs/eslint/cdk.d.ts.map +1 -0
- package/dist/configs/eslint/cdk.js +127 -0
- package/dist/configs/eslint/cdk.js.map +1 -0
- package/dist/configs/eslint/expo.d.ts +16 -0
- package/dist/configs/eslint/expo.d.ts.map +1 -0
- package/dist/configs/eslint/expo.js +264 -0
- package/dist/configs/eslint/expo.js.map +1 -0
- package/dist/configs/eslint/index.d.ts +18 -0
- package/dist/configs/eslint/index.d.ts.map +1 -0
- package/dist/configs/eslint/index.js +18 -0
- package/dist/configs/eslint/index.js.map +1 -0
- package/dist/configs/eslint/nestjs.d.ts +32 -0
- package/dist/configs/eslint/nestjs.d.ts.map +1 -0
- package/dist/configs/eslint/nestjs.js +128 -0
- package/dist/configs/eslint/nestjs.js.map +1 -0
- package/dist/configs/eslint/slow.d.ts +80 -0
- package/dist/configs/eslint/slow.d.ts.map +1 -0
- package/dist/configs/eslint/slow.js +83 -0
- package/dist/configs/eslint/slow.js.map +1 -0
- package/dist/configs/eslint/typescript.d.ts +19 -0
- package/dist/configs/eslint/typescript.d.ts.map +1 -0
- package/dist/configs/eslint/typescript.js +81 -0
- package/dist/configs/eslint/typescript.js.map +1 -0
- package/{typescript/copy-overwrite/jest.base.ts → dist/configs/jest/base.d.ts} +9 -69
- package/dist/configs/jest/base.d.ts.map +1 -0
- package/dist/configs/jest/base.js +83 -0
- package/dist/configs/jest/base.js.map +1 -0
- package/dist/configs/jest/cdk.d.ts +35 -0
- package/dist/configs/jest/cdk.d.ts.map +1 -0
- package/dist/configs/jest/cdk.js +30 -0
- package/dist/configs/jest/cdk.js.map +1 -0
- package/dist/configs/jest/expo.d.ts +56 -0
- package/dist/configs/jest/expo.d.ts.map +1 -0
- package/dist/configs/jest/expo.js +60 -0
- package/dist/configs/jest/expo.js.map +1 -0
- package/dist/configs/jest/index.d.ts +14 -0
- package/dist/configs/jest/index.d.ts.map +1 -0
- package/dist/configs/jest/index.js +14 -0
- package/dist/configs/jest/index.js.map +1 -0
- package/dist/configs/jest/nestjs.d.ts +35 -0
- package/dist/configs/jest/nestjs.d.ts.map +1 -0
- package/dist/configs/jest/nestjs.js +47 -0
- package/dist/configs/jest/nestjs.js.map +1 -0
- package/dist/configs/jest/typescript.d.ts +31 -0
- package/dist/configs/jest/typescript.d.ts.map +1 -0
- package/dist/configs/jest/typescript.js +34 -0
- package/dist/configs/jest/typescript.js.map +1 -0
- package/expo/copy-overwrite/eslint.config.ts +5 -20
- package/expo/copy-overwrite/eslint.slow.config.ts +4 -90
- package/expo/copy-overwrite/jest.config.ts +14 -12
- package/expo/copy-overwrite/tsconfig.json +1 -1
- package/expo/merge/.claude/settings.json +29 -0
- package/expo/package-lisa/package.lisa.json +1 -10
- package/nestjs/copy-overwrite/eslint.config.ts +5 -20
- package/nestjs/copy-overwrite/eslint.slow.config.ts +4 -89
- package/nestjs/copy-overwrite/jest.config.ts +14 -12
- package/nestjs/copy-overwrite/tsconfig.json +1 -1
- package/nestjs/merge/.claude/settings.json +29 -0
- package/nestjs/package-lisa/package.lisa.json +1 -0
- package/package.json +82 -43
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +86 -0
- package/plugins/lisa-cdk/agents/agent-architect.md +310 -0
- package/plugins/lisa-cdk/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-cdk/agents/debug-specialist.md +204 -0
- package/plugins/lisa-cdk/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-cdk/agents/hooks-expert.md +74 -0
- package/plugins/lisa-cdk/agents/implementer.md +54 -0
- package/plugins/lisa-cdk/agents/learner.md +44 -0
- package/plugins/lisa-cdk/agents/performance-specialist.md +95 -0
- package/plugins/lisa-cdk/agents/product-specialist.md +72 -0
- package/plugins/lisa-cdk/agents/quality-specialist.md +55 -0
- package/plugins/lisa-cdk/agents/security-specialist.md +58 -0
- package/plugins/lisa-cdk/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-cdk/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-cdk/agents/test-specialist.md +64 -0
- package/plugins/lisa-cdk/agents/verification-specialist.md +189 -0
- package/plugins/lisa-cdk/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-cdk/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-cdk/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-cdk/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-cdk/commands/git-commit.md +7 -0
- package/plugins/lisa-cdk/commands/git-prune.md +6 -0
- package/plugins/lisa-cdk/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-cdk/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-cdk/commands/jira-create.md +7 -0
- package/plugins/lisa-cdk/commands/jira-evidence.md +7 -0
- package/plugins/lisa-cdk/commands/jira-fix.md +7 -0
- package/plugins/lisa-cdk/commands/jira-implement.md +7 -0
- package/plugins/lisa-cdk/commands/jira-journey.md +7 -0
- package/plugins/lisa-cdk/commands/jira-sync.md +7 -0
- package/plugins/lisa-cdk/commands/jira-verify.md +7 -0
- package/plugins/lisa-cdk/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-cdk/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-cdk/commands/plan-create.md +6 -0
- package/plugins/lisa-cdk/commands/plan-execute.md +7 -0
- package/plugins/lisa-cdk/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-cdk/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-cdk/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-cdk/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-cdk/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-cdk/commands/pull-request-review.md +7 -0
- package/plugins/lisa-cdk/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-cdk/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-cdk/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-cdk/commands/tasks-load.md +7 -0
- package/plugins/lisa-cdk/commands/tasks-sync.md +7 -0
- package/plugins/lisa-cdk/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-cdk/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-cdk/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-cdk/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-cdk/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-cdk/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-cdk/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-cdk/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-cdk/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-cdk/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-cdk/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-cdk/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-cdk/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-cdk/rules/lisa.md +37 -0
- package/plugins/lisa-cdk/rules/verfication.md +596 -0
- package/plugins/lisa-cdk/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-cdk/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-cdk/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-cdk/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-cdk/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-cdk/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-cdk/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-cdk/skills/jira-add-journey/SKILL.md +120 -0
- package/plugins/lisa-cdk/skills/jira-create/SKILL.md +95 -0
- package/plugins/lisa-cdk/skills/jira-evidence/SKILL.md +73 -0
- package/plugins/lisa-cdk/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-cdk/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-cdk/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-cdk/skills/jira-journey/SKILL.md +125 -0
- package/plugins/lisa-cdk/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-cdk/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-cdk/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-cdk/skills/jira-verify/SKILL.md +48 -0
- package/plugins/lisa-cdk/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-cdk/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-cdk/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-cdk/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-cdk/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-cdk/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-cdk/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-cdk/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/lisa-cdk/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-cdk/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-cdk/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-cdk/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-cdk/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-cdk/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-cdk/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-cdk/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-cdk/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-cdk/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-cdk/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-cdk/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/lisa-expo/.claude-plugin/plugin.json +86 -0
- package/plugins/lisa-expo/agents/agent-architect.md +310 -0
- package/plugins/lisa-expo/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-expo/agents/debug-specialist.md +204 -0
- package/plugins/lisa-expo/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-expo/agents/hooks-expert.md +74 -0
- package/plugins/lisa-expo/agents/implementer.md +54 -0
- package/plugins/lisa-expo/agents/learner.md +44 -0
- package/plugins/lisa-expo/agents/ops-specialist.md +124 -0
- package/plugins/lisa-expo/agents/performance-specialist.md +95 -0
- package/plugins/lisa-expo/agents/product-specialist.md +72 -0
- package/plugins/lisa-expo/agents/quality-specialist.md +55 -0
- package/plugins/lisa-expo/agents/security-specialist.md +58 -0
- package/plugins/lisa-expo/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-expo/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-expo/agents/test-specialist.md +64 -0
- package/plugins/lisa-expo/agents/verification-specialist.md +189 -0
- package/plugins/lisa-expo/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-expo/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-expo/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-expo/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-expo/commands/git-commit.md +7 -0
- package/plugins/lisa-expo/commands/git-prune.md +6 -0
- package/plugins/lisa-expo/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-expo/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-expo/commands/jira-create.md +7 -0
- package/plugins/lisa-expo/commands/jira-evidence.md +7 -0
- package/plugins/lisa-expo/commands/jira-fix.md +7 -0
- package/plugins/lisa-expo/commands/jira-implement.md +7 -0
- package/plugins/lisa-expo/commands/jira-journey.md +7 -0
- package/plugins/lisa-expo/commands/jira-sync.md +7 -0
- package/plugins/lisa-expo/commands/jira-verify.md +7 -0
- package/plugins/lisa-expo/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-expo/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-expo/commands/plan-create.md +6 -0
- package/plugins/lisa-expo/commands/plan-execute.md +7 -0
- package/plugins/lisa-expo/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-expo/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-expo/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-expo/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-expo/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-expo/commands/pull-request-review.md +7 -0
- package/plugins/lisa-expo/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-expo/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-expo/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-expo/commands/tasks-load.md +7 -0
- package/plugins/lisa-expo/commands/tasks-sync.md +7 -0
- package/plugins/lisa-expo/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-expo/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-expo/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-expo/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-expo/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-expo/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-expo/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-expo/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-expo/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-expo/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-expo/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-expo/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-expo/rules/README.md +240 -0
- package/plugins/lisa-expo/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-expo/rules/expo-verification.md +261 -0
- package/plugins/lisa-expo/rules/lisa.md +37 -0
- package/plugins/lisa-expo/rules/verfication.md +596 -0
- package/plugins/lisa-expo/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-expo/skills/apollo-client/SKILL.md +238 -0
- package/plugins/lisa-expo/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/SKILL.md +360 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +329 -0
- package/plugins/lisa-expo/skills/container-view-pattern/SKILL.md +299 -0
- package/plugins/lisa-expo/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/lisa-expo/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/lisa-expo/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/lisa-expo/skills/container-view-pattern/scripts/validate_component.py +209 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/lisa-expo/skills/directory-structure/SKILL.md +202 -0
- package/plugins/lisa-expo/skills/directory-structure/scripts/validate_structure.py +445 -0
- package/plugins/lisa-expo/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/lisa-expo/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/lisa-expo/skills/expo-router-best-practices/SKILL.md +431 -0
- package/plugins/lisa-expo/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/lisa-expo/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/lisa-expo/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-expo/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-expo/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-expo/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-expo/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-expo/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/SKILL.md +411 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/scripts/validate_styling.py +315 -0
- package/plugins/lisa-expo/skills/jira-add-journey/SKILL.md +126 -0
- package/plugins/lisa-expo/skills/jira-create/SKILL.md +101 -0
- package/plugins/lisa-expo/skills/jira-evidence/SKILL.md +78 -0
- package/plugins/lisa-expo/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-expo/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-expo/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-expo/skills/jira-journey/SKILL.md +190 -0
- package/plugins/lisa-expo/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/lisa-expo/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-expo/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-expo/skills/jira-verify/SKILL.md +47 -0
- package/plugins/lisa-expo/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-expo/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-expo/skills/local-state/SKILL.md +362 -0
- package/plugins/lisa-expo/skills/local-state/references/async-storage.md +505 -0
- package/plugins/lisa-expo/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/lisa-expo/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/lisa-expo/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/lisa-expo/skills/ops-check-logs/SKILL.md +211 -0
- package/plugins/lisa-expo/skills/ops-db-ops/SKILL.md +119 -0
- package/plugins/lisa-expo/skills/ops-deploy/SKILL.md +119 -0
- package/plugins/lisa-expo/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/lisa-expo/skills/ops-performance/SKILL.md +165 -0
- package/plugins/lisa-expo/skills/ops-run-local/SKILL.md +166 -0
- package/plugins/lisa-expo/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/lisa-expo/skills/owasp-zap/SKILL.md +56 -0
- package/plugins/lisa-expo/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-expo/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-expo/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-expo/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-expo/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-expo/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/lisa-expo/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-expo/skills/playwright-selectors/SKILL.md +223 -0
- package/plugins/lisa-expo/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-expo/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-expo/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-expo/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-expo/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-expo/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-expo/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-expo/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-expo/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-expo/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-expo/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/lisa-expo/skills/testing-library/SKILL.md +314 -0
- package/plugins/lisa-expo/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/lisa-expo/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/lisa-expo/skills/testing-library/references/mocking-patterns.md +590 -0
- package/plugins/lisa-expo/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +86 -0
- package/plugins/lisa-nestjs/agents/agent-architect.md +310 -0
- package/plugins/lisa-nestjs/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-nestjs/agents/debug-specialist.md +204 -0
- package/plugins/lisa-nestjs/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-nestjs/agents/hooks-expert.md +74 -0
- package/plugins/lisa-nestjs/agents/implementer.md +54 -0
- package/plugins/lisa-nestjs/agents/learner.md +44 -0
- package/plugins/lisa-nestjs/agents/performance-specialist.md +95 -0
- package/plugins/lisa-nestjs/agents/product-specialist.md +72 -0
- package/plugins/lisa-nestjs/agents/quality-specialist.md +55 -0
- package/plugins/lisa-nestjs/agents/security-specialist.md +58 -0
- package/plugins/lisa-nestjs/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-nestjs/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-nestjs/agents/test-specialist.md +64 -0
- package/plugins/lisa-nestjs/agents/verification-specialist.md +189 -0
- package/plugins/lisa-nestjs/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-nestjs/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-nestjs/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-nestjs/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-nestjs/commands/git-commit.md +7 -0
- package/plugins/lisa-nestjs/commands/git-prune.md +6 -0
- package/plugins/lisa-nestjs/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-create.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-evidence.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-fix.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-implement.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-journey.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-sync.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-verify.md +7 -0
- package/plugins/lisa-nestjs/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-create.md +6 -0
- package/plugins/lisa-nestjs/commands/plan-execute.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-nestjs/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-nestjs/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-nestjs/commands/pull-request-review.md +7 -0
- package/plugins/lisa-nestjs/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-nestjs/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-nestjs/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-nestjs/commands/tasks-load.md +7 -0
- package/plugins/lisa-nestjs/commands/tasks-sync.md +7 -0
- package/plugins/lisa-nestjs/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-nestjs/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-nestjs/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-nestjs/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-nestjs/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-nestjs/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-nestjs/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-nestjs/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-nestjs/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-nestjs/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-nestjs/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-nestjs/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-nestjs/rules/README.md +240 -0
- package/plugins/lisa-nestjs/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-nestjs/rules/lisa.md +37 -0
- package/plugins/lisa-nestjs/rules/verfication.md +596 -0
- package/plugins/lisa-nestjs/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-nestjs/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-nestjs/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-nestjs/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-nestjs/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-nestjs/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-nestjs/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-nestjs/skills/jira-add-journey/SKILL.md +120 -0
- package/plugins/lisa-nestjs/skills/jira-create/SKILL.md +95 -0
- package/plugins/lisa-nestjs/skills/jira-evidence/SKILL.md +73 -0
- package/plugins/lisa-nestjs/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-nestjs/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-nestjs/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-nestjs/skills/jira-journey/SKILL.md +125 -0
- package/plugins/lisa-nestjs/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-nestjs/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-nestjs/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-nestjs/skills/jira-verify/SKILL.md +48 -0
- package/plugins/lisa-nestjs/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-nestjs/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/project-patterns.md +483 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/lisa-nestjs/skills/nestjs-rules/SKILL.md +536 -0
- package/plugins/lisa-nestjs/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-nestjs/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-nestjs/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-nestjs/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-nestjs/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-nestjs/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/lisa-nestjs/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-nestjs/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-nestjs/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-nestjs/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-nestjs/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-nestjs/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-nestjs/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-nestjs/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-nestjs/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-nestjs/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-nestjs/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-nestjs/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/plugins/lisa-rails/.claude-plugin/plugin.json +77 -0
- package/plugins/lisa-rails/agents/agent-architect.md +310 -0
- package/plugins/lisa-rails/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-rails/agents/debug-specialist.md +204 -0
- package/plugins/lisa-rails/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-rails/agents/hooks-expert.md +74 -0
- package/plugins/lisa-rails/agents/implementer.md +54 -0
- package/plugins/lisa-rails/agents/learner.md +44 -0
- package/plugins/lisa-rails/agents/performance-specialist.md +95 -0
- package/plugins/lisa-rails/agents/product-specialist.md +72 -0
- package/plugins/lisa-rails/agents/quality-specialist.md +55 -0
- package/plugins/lisa-rails/agents/security-specialist.md +58 -0
- package/plugins/lisa-rails/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-rails/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-rails/agents/test-specialist.md +64 -0
- package/plugins/lisa-rails/agents/verification-specialist.md +189 -0
- package/plugins/lisa-rails/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-rails/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-rails/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-rails/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-rails/commands/git-commit.md +7 -0
- package/plugins/lisa-rails/commands/git-prune.md +6 -0
- package/plugins/lisa-rails/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-rails/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-rails/commands/jira-create.md +7 -0
- package/plugins/lisa-rails/commands/jira-evidence.md +7 -0
- package/plugins/lisa-rails/commands/jira-fix.md +7 -0
- package/plugins/lisa-rails/commands/jira-implement.md +7 -0
- package/plugins/lisa-rails/commands/jira-journey.md +7 -0
- package/plugins/lisa-rails/commands/jira-sync.md +7 -0
- package/plugins/lisa-rails/commands/jira-verify.md +7 -0
- package/plugins/lisa-rails/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-rails/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-rails/commands/plan-create.md +6 -0
- package/plugins/lisa-rails/commands/plan-execute.md +7 -0
- package/plugins/lisa-rails/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-rails/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-rails/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-rails/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-rails/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-rails/commands/pull-request-review.md +7 -0
- package/plugins/lisa-rails/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-rails/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-rails/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-rails/commands/tasks-load.md +7 -0
- package/plugins/lisa-rails/commands/tasks-sync.md +7 -0
- package/plugins/lisa-rails/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-rails/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-rails/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-rails/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-rails/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-rails/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-rails/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-rails/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-rails/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-rails/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-rails/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-rails/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-rails/rules/README.md +240 -0
- package/plugins/lisa-rails/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-rails/rules/lisa.md +37 -0
- package/plugins/lisa-rails/rules/rails-conventions.md +176 -0
- package/plugins/lisa-rails/rules/verfication.md +596 -0
- package/plugins/lisa-rails/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/lisa-rails/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/lisa-rails/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/lisa-rails/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-rails/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-rails/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-rails/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-rails/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-rails/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-rails/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-rails/skills/jira-add-journey/SKILL.md +65 -0
- package/plugins/lisa-rails/skills/jira-create/SKILL.md +41 -0
- package/plugins/lisa-rails/skills/jira-evidence/SKILL.md +70 -0
- package/plugins/lisa-rails/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-rails/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-rails/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-rails/skills/jira-journey/SKILL.md +64 -0
- package/plugins/lisa-rails/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-rails/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-rails/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-rails/skills/jira-verify/SKILL.md +29 -0
- package/plugins/lisa-rails/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-rails/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-rails/skills/plan-add-test-coverage/SKILL.md +45 -0
- package/plugins/lisa-rails/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-rails/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-rails/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-rails/skills/plan-lower-code-complexity/SKILL.md +48 -0
- package/plugins/lisa-rails/skills/plan-reduce-max-lines/SKILL.md +46 -0
- package/plugins/lisa-rails/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-rails/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-rails/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-rails/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-rails/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-rails/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-rails/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-rails/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-rails/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-rails/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-rails/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-rails/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +86 -0
- package/plugins/lisa-typescript/agents/agent-architect.md +310 -0
- package/plugins/lisa-typescript/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-typescript/agents/debug-specialist.md +204 -0
- package/plugins/lisa-typescript/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-typescript/agents/hooks-expert.md +74 -0
- package/plugins/lisa-typescript/agents/implementer.md +54 -0
- package/plugins/lisa-typescript/agents/learner.md +44 -0
- package/plugins/lisa-typescript/agents/performance-specialist.md +95 -0
- package/plugins/lisa-typescript/agents/product-specialist.md +72 -0
- package/plugins/lisa-typescript/agents/quality-specialist.md +55 -0
- package/plugins/lisa-typescript/agents/security-specialist.md +58 -0
- package/plugins/lisa-typescript/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-typescript/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-typescript/agents/test-specialist.md +64 -0
- package/plugins/lisa-typescript/agents/verification-specialist.md +189 -0
- package/plugins/lisa-typescript/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-typescript/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-typescript/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-typescript/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-typescript/commands/git-commit.md +7 -0
- package/plugins/lisa-typescript/commands/git-prune.md +6 -0
- package/plugins/lisa-typescript/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-typescript/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-typescript/commands/jira-create.md +7 -0
- package/plugins/lisa-typescript/commands/jira-evidence.md +7 -0
- package/plugins/lisa-typescript/commands/jira-fix.md +7 -0
- package/plugins/lisa-typescript/commands/jira-implement.md +7 -0
- package/plugins/lisa-typescript/commands/jira-journey.md +7 -0
- package/plugins/lisa-typescript/commands/jira-sync.md +7 -0
- package/plugins/lisa-typescript/commands/jira-verify.md +7 -0
- package/plugins/lisa-typescript/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-typescript/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-typescript/commands/plan-create.md +6 -0
- package/plugins/lisa-typescript/commands/plan-execute.md +7 -0
- package/plugins/lisa-typescript/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-typescript/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-typescript/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-typescript/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-typescript/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-typescript/commands/pull-request-review.md +7 -0
- package/plugins/lisa-typescript/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-typescript/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-typescript/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-typescript/commands/tasks-load.md +7 -0
- package/plugins/lisa-typescript/commands/tasks-sync.md +7 -0
- package/plugins/lisa-typescript/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-typescript/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-typescript/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-typescript/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-typescript/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-typescript/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-typescript/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-typescript/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-typescript/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-typescript/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-typescript/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-typescript/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-typescript/rules/README.md +240 -0
- package/plugins/lisa-typescript/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-typescript/rules/lisa.md +37 -0
- package/plugins/lisa-typescript/rules/verfication.md +596 -0
- package/plugins/lisa-typescript/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-typescript/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-typescript/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-typescript/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-typescript/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-typescript/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-typescript/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-typescript/skills/jira-add-journey/SKILL.md +120 -0
- package/plugins/lisa-typescript/skills/jira-create/SKILL.md +95 -0
- package/plugins/lisa-typescript/skills/jira-evidence/SKILL.md +73 -0
- package/plugins/lisa-typescript/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-typescript/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-typescript/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-typescript/skills/jira-journey/SKILL.md +125 -0
- package/plugins/lisa-typescript/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-typescript/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-typescript/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-typescript/skills/jira-verify/SKILL.md +48 -0
- package/plugins/lisa-typescript/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-typescript/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-typescript/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-typescript/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-typescript/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-typescript/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-typescript/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-typescript/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/lisa-typescript/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-typescript/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-typescript/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-typescript/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-typescript/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-typescript/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-typescript/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-typescript/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-typescript/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-typescript/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-typescript/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-typescript/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/src/base/agents/agent-architect.md +310 -0
- package/plugins/src/base/agents/architecture-specialist.md +53 -0
- package/plugins/src/base/agents/debug-specialist.md +204 -0
- package/plugins/src/base/agents/git-history-analyzer.md +183 -0
- package/plugins/src/base/agents/hooks-expert.md +74 -0
- package/plugins/src/base/agents/implementer.md +54 -0
- package/plugins/src/base/agents/learner.md +44 -0
- package/plugins/src/base/agents/performance-specialist.md +95 -0
- package/plugins/src/base/agents/product-specialist.md +72 -0
- package/plugins/src/base/agents/quality-specialist.md +55 -0
- package/plugins/src/base/agents/security-specialist.md +58 -0
- package/plugins/src/base/agents/skill-evaluator.md +246 -0
- package/plugins/src/base/agents/slash-command-architect.md +87 -0
- package/plugins/src/base/agents/test-specialist.md +64 -0
- package/plugins/src/base/agents/verification-specialist.md +189 -0
- package/plugins/src/base/agents/web-search-researcher.md +112 -0
- package/plugins/src/base/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/src/base/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/src/base/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/src/base/commands/git-commit.md +7 -0
- package/plugins/src/base/commands/git-prune.md +6 -0
- package/plugins/src/base/commands/git-submit-pr.md +7 -0
- package/plugins/src/base/commands/jira-add-journey.md +7 -0
- package/plugins/src/base/commands/jira-create.md +7 -0
- package/plugins/src/base/commands/jira-evidence.md +7 -0
- package/plugins/src/base/commands/jira-fix.md +7 -0
- package/plugins/src/base/commands/jira-implement.md +7 -0
- package/plugins/src/base/commands/jira-journey.md +7 -0
- package/plugins/src/base/commands/jira-sync.md +7 -0
- package/plugins/src/base/commands/jira-verify.md +7 -0
- package/plugins/src/base/commands/lisa-review-implementation.md +7 -0
- package/plugins/src/base/commands/plan-add-test-coverage.md +7 -0
- package/plugins/src/base/commands/plan-create.md +6 -0
- package/plugins/src/base/commands/plan-execute.md +7 -0
- package/plugins/src/base/commands/plan-fix-linter-error.md +7 -0
- package/plugins/src/base/commands/plan-local-code-review.md +6 -0
- package/plugins/src/base/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/src/base/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/src/base/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/src/base/commands/pull-request-review.md +7 -0
- package/plugins/src/base/commands/security-zap-scan.md +6 -0
- package/plugins/src/base/commands/sonarqube-check.md +6 -0
- package/plugins/src/base/commands/sonarqube-fix.md +6 -0
- package/plugins/src/base/commands/tasks-load.md +7 -0
- package/plugins/src/base/commands/tasks-sync.md +7 -0
- package/plugins/src/base/hooks/debug-hook.sh +47 -0
- package/plugins/src/base/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/src/base/hooks/format-on-edit.sh +76 -0
- package/plugins/src/base/hooks/install-pkgs.sh +64 -0
- package/plugins/src/base/hooks/lint-on-edit.sh +81 -0
- package/plugins/src/base/hooks/notify-ntfy.sh +183 -0
- package/plugins/src/base/hooks/setup-jira-cli.sh +52 -0
- package/plugins/src/base/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/src/base/hooks/sync-tasks.sh +107 -0
- package/plugins/src/base/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/src/base/hooks/track-plan-sessions.sh +164 -0
- package/plugins/src/base/hooks/verify-completion.sh +77 -0
- package/plugins/src/base/rules/README.md +240 -0
- package/plugins/src/base/rules/coding-philosophy.md +428 -0
- package/plugins/src/base/rules/lisa.md +37 -0
- package/plugins/src/base/rules/verfication.md +596 -0
- package/plugins/src/base/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/src/base/skills/git-commit/SKILL.md +48 -0
- package/plugins/src/base/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/src/base/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/src/base/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/src/base/skills/git-prune/SKILL.md +35 -0
- package/plugins/src/base/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/src/base/skills/jira-add-journey/SKILL.md +120 -0
- package/plugins/src/base/skills/jira-create/SKILL.md +95 -0
- package/plugins/src/base/skills/jira-evidence/SKILL.md +73 -0
- package/plugins/src/base/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/src/base/skills/jira-fix/SKILL.md +16 -0
- package/plugins/src/base/skills/jira-implement/SKILL.md +18 -0
- package/plugins/src/base/skills/jira-journey/SKILL.md +125 -0
- package/plugins/src/base/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/src/base/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/src/base/skills/jira-sync/SKILL.md +63 -0
- package/plugins/src/base/skills/jira-verify/SKILL.md +48 -0
- package/plugins/src/base/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/src/base/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/src/base/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/src/base/skills/plan-execute/SKILL.md +89 -0
- package/plugins/src/base/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/src/base/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/src/base/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/src/base/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/src/base/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/src/base/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/src/base/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/src/base/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/src/base/skills/skill-creator/SKILL.md +210 -0
- package/plugins/src/base/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/src/base/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/src/base/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/src/base/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/src/base/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/src/base/skills/tasks-load/SKILL.md +88 -0
- package/plugins/src/base/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/src/cdk/.claude-plugin/plugin.json +86 -0
- package/plugins/src/expo/.claude-plugin/plugin.json +86 -0
- package/plugins/src/expo/agents/ops-specialist.md +124 -0
- package/plugins/src/expo/rules/expo-verification.md +261 -0
- package/plugins/src/expo/skills/apollo-client/SKILL.md +238 -0
- package/plugins/src/expo/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/SKILL.md +360 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +329 -0
- package/plugins/src/expo/skills/container-view-pattern/SKILL.md +299 -0
- package/plugins/src/expo/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/src/expo/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/src/expo/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/src/expo/skills/container-view-pattern/scripts/validate_component.py +209 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/src/expo/skills/directory-structure/SKILL.md +202 -0
- package/plugins/src/expo/skills/directory-structure/scripts/validate_structure.py +445 -0
- package/plugins/src/expo/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/src/expo/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/src/expo/skills/expo-router-best-practices/SKILL.md +431 -0
- package/plugins/src/expo/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/src/expo/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/src/expo/skills/gluestack-nativewind/SKILL.md +411 -0
- package/plugins/src/expo/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/src/expo/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/src/expo/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/src/expo/skills/gluestack-nativewind/scripts/validate_styling.py +315 -0
- package/plugins/src/expo/skills/jira-add-journey/SKILL.md +126 -0
- package/plugins/src/expo/skills/jira-create/SKILL.md +101 -0
- package/plugins/src/expo/skills/jira-evidence/SKILL.md +78 -0
- package/plugins/src/expo/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/src/expo/skills/jira-journey/SKILL.md +190 -0
- package/plugins/src/expo/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/src/expo/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/src/expo/skills/jira-verify/SKILL.md +47 -0
- package/plugins/src/expo/skills/local-state/SKILL.md +362 -0
- package/plugins/src/expo/skills/local-state/references/async-storage.md +505 -0
- package/plugins/src/expo/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/src/expo/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/src/expo/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/src/expo/skills/ops-check-logs/SKILL.md +211 -0
- package/plugins/src/expo/skills/ops-db-ops/SKILL.md +119 -0
- package/plugins/src/expo/skills/ops-deploy/SKILL.md +119 -0
- package/plugins/src/expo/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/src/expo/skills/ops-performance/SKILL.md +165 -0
- package/plugins/src/expo/skills/ops-run-local/SKILL.md +166 -0
- package/plugins/src/expo/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/src/expo/skills/owasp-zap/SKILL.md +56 -0
- package/plugins/src/expo/skills/playwright-selectors/SKILL.md +223 -0
- package/plugins/src/expo/skills/testing-library/SKILL.md +314 -0
- package/plugins/src/expo/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/src/expo/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/src/expo/skills/testing-library/references/mocking-patterns.md +590 -0
- package/plugins/src/expo/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/src/nestjs/.claude-plugin/plugin.json +86 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/project-patterns.md +483 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/src/nestjs/skills/nestjs-rules/SKILL.md +536 -0
- package/plugins/src/nestjs/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/src/nestjs/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/src/nestjs/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/src/nestjs/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/plugins/src/rails/.claude-plugin/plugin.json +77 -0
- package/plugins/src/rails/rules/rails-conventions.md +176 -0
- package/plugins/src/rails/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/src/rails/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/src/rails/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/src/rails/skills/jira-add-journey/SKILL.md +65 -0
- package/plugins/src/rails/skills/jira-create/SKILL.md +41 -0
- package/plugins/src/rails/skills/jira-evidence/SKILL.md +70 -0
- package/plugins/src/rails/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/src/rails/skills/jira-journey/SKILL.md +64 -0
- package/plugins/src/rails/skills/jira-verify/SKILL.md +29 -0
- package/plugins/src/rails/skills/plan-add-test-coverage/SKILL.md +45 -0
- package/plugins/src/rails/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/src/rails/skills/plan-lower-code-complexity/SKILL.md +48 -0
- package/plugins/src/rails/skills/plan-reduce-max-lines/SKILL.md +46 -0
- package/plugins/src/rails/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/src/typescript/.claude-plugin/plugin.json +86 -0
- package/scripts/build-plugins.sh +22 -0
- package/scripts/cleanup-amplify-branches.sh +150 -0
- package/scripts/cleanup-github-branches.sh +202 -0
- package/scripts/github-status-check.sh +301 -0
- package/scripts/install-claude-plugins.sh +70 -0
- package/scripts/lisa-commit-and-pr-local.sh +204 -0
- package/scripts/lisa-update-local.sh +158 -0
- package/scripts/update-node-version.ts +197 -0
- package/tsconfig/build.json +8 -0
- package/tsconfig/cdk.json +16 -0
- package/tsconfig/eslint.json +12 -0
- package/tsconfig/expo.json +18 -0
- package/tsconfig/nestjs.json +18 -0
- package/tsconfig/spec.json +7 -0
- package/{typescript/copy-overwrite/tsconfig.typescript.json → tsconfig/typescript.json} +1 -1
- package/typescript/copy-overwrite/eslint.config.ts +6 -20
- package/typescript/copy-overwrite/eslint.slow.config.ts +4 -73
- package/typescript/copy-overwrite/jest.config.ts +8 -12
- package/typescript/copy-overwrite/tsconfig.json +1 -1
- package/typescript/deletions.json +7 -1
- package/typescript/merge/.claude/settings.json +29 -0
- package/typescript/package-lisa/package.lisa.json +2 -36
- package/all/copy-overwrite/.claude/rules/lisa.md +0 -66
- package/all/copy-overwrite/.claude/settings.json +0 -79
- package/all/copy-overwrite/CLAUDE.md +0 -59
- package/all/copy-overwrite/HUMAN.md +0 -309
- package/cdk/copy-overwrite/.claude/settings.json +0 -80
- package/expo/copy-overwrite/.claude/settings.json +0 -80
- package/nestjs/copy-overwrite/.claude/settings.json +0 -80
- package/rails/copy-overwrite/CLAUDE.md +0 -56
- package/typescript/copy-overwrite/.claude/settings.json +0 -80
- package/typescript/copy-overwrite/eslint.base.ts +0 -429
- package/typescript/copy-overwrite/eslint.typescript.ts +0 -142
- package/typescript/copy-overwrite/jest.typescript.ts +0 -72
- /package/{all/copy-overwrite/.claude → plugins/lisa-cdk/rules}/README.md +0 -0
- /package/{all/create-only/scripts → scripts}/setup-deploy-key.sh +0 -0
- /package/{typescript/copy-overwrite/tsconfig.base.json → tsconfig/base.json} +0 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: expo-router-best-practices
|
|
3
|
+
description: This skill should be used when creating new routes, configuring navigation layouts, implementing deep linking, or organizing the app/ directory structure in Expo Router projects. It provides best practices for file-based routing patterns.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Expo Router Best Practices
|
|
7
|
+
|
|
8
|
+
This skill provides guidance for implementing file-based routing with Expo Router following established best practices and official documentation patterns.
|
|
9
|
+
|
|
10
|
+
## Core Principles
|
|
11
|
+
|
|
12
|
+
### 1. Routes Are Thin Wrappers
|
|
13
|
+
|
|
14
|
+
Route files in the `app/` directory should be minimal pass-throughs to feature screen components. Business logic and complex UI components belong in feature directories, not route files.
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// app/players/[playerId]/compare.tsx - CORRECT
|
|
18
|
+
import { Main } from "@/features/compare-players/screens/Main";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Compare players route.
|
|
22
|
+
* URL: /players/[playerId]/compare
|
|
23
|
+
*/
|
|
24
|
+
export default function CompareScreen() {
|
|
25
|
+
return <Main />;
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
// app/players/[playerId]/compare.tsx - INCORRECT
|
|
31
|
+
export default function CompareScreen() {
|
|
32
|
+
const { playerId } = useLocalSearchParams();
|
|
33
|
+
const [data, setData] = useState(null);
|
|
34
|
+
// ... 200 lines of business logic
|
|
35
|
+
return <ComplexUI />;
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 2. Descriptive Component Names
|
|
40
|
+
|
|
41
|
+
Use descriptive names for route components, not generic names.
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
// CORRECT
|
|
45
|
+
export default function CompareScreen() { ... }
|
|
46
|
+
export default function PlayerDetailScreen() { ... }
|
|
47
|
+
export default function SettingsScreen() { ... }
|
|
48
|
+
|
|
49
|
+
// INCORRECT
|
|
50
|
+
export default function Screen() { ... }
|
|
51
|
+
export default function Page() { ... }
|
|
52
|
+
export default function Index() { ... } // only acceptable for index.tsx files
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. Document Route URLs in JSDoc
|
|
56
|
+
|
|
57
|
+
Include the URL pattern in route file documentation.
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
/**
|
|
61
|
+
* Player detail route.
|
|
62
|
+
* URL: /players/[playerId]
|
|
63
|
+
*/
|
|
64
|
+
export default function PlayerDetailScreen() {
|
|
65
|
+
return <Main />;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## File Structure Patterns
|
|
70
|
+
|
|
71
|
+
### Directory Organization
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
app/
|
|
75
|
+
├── _layout.tsx # Root layout (initialization, providers)
|
|
76
|
+
├── index.tsx # Default route (/)
|
|
77
|
+
├── +not-found.tsx # 404 handling
|
|
78
|
+
├── +html.tsx # Web HTML customization (optional)
|
|
79
|
+
├── (tabs)/ # Tab navigator group
|
|
80
|
+
│ ├── _layout.tsx # Tab configuration
|
|
81
|
+
│ ├── index.tsx # Default tab
|
|
82
|
+
│ ├── feed/ # Stack within tab
|
|
83
|
+
│ │ ├── _layout.tsx
|
|
84
|
+
│ │ ├── index.tsx
|
|
85
|
+
│ │ └── [postId].tsx
|
|
86
|
+
│ └── settings.tsx
|
|
87
|
+
├── (auth)/ # Auth screens group
|
|
88
|
+
│ ├── sign-in.tsx
|
|
89
|
+
│ └── create-account.tsx
|
|
90
|
+
└── modal.tsx # Modal route
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Route Notation Reference
|
|
94
|
+
|
|
95
|
+
| Notation | Purpose | Example | URL |
|
|
96
|
+
| ---------------- | --------------------------- | -------------------- | -------- |
|
|
97
|
+
| `file.tsx` | Static route | `about.tsx` | `/about` |
|
|
98
|
+
| `[param].tsx` | Dynamic route | `[userId].tsx` | `/123` |
|
|
99
|
+
| `[...slug].tsx` | Catch-all route | `[...path].tsx` | `/a/b/c` |
|
|
100
|
+
| `(group)/` | Route group (no URL impact) | `(tabs)/` | `/` |
|
|
101
|
+
| `index.tsx` | Default route | `feed/index.tsx` | `/feed` |
|
|
102
|
+
| `_layout.tsx` | Layout definition | `(tabs)/_layout.tsx` | - |
|
|
103
|
+
| `+not-found.tsx` | 404 handler | `+not-found.tsx` | - |
|
|
104
|
+
|
|
105
|
+
## Layout Patterns
|
|
106
|
+
|
|
107
|
+
### Root Layout
|
|
108
|
+
|
|
109
|
+
The root `_layout.tsx` replaces `App.jsx/tsx`. Place initialization code here.
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// app/_layout.tsx
|
|
113
|
+
import { useFonts } from "expo-font";
|
|
114
|
+
import { Stack } from "expo-router";
|
|
115
|
+
import * as SplashScreen from "expo-splash-screen";
|
|
116
|
+
import { useEffect } from "react";
|
|
117
|
+
|
|
118
|
+
SplashScreen.preventAutoHideAsync();
|
|
119
|
+
|
|
120
|
+
export default function RootLayout() {
|
|
121
|
+
const [loaded] = useFonts({
|
|
122
|
+
SpaceMono: require("../assets/fonts/SpaceMono-Regular.ttf"),
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
useEffect(() => {
|
|
126
|
+
if (loaded) {
|
|
127
|
+
SplashScreen.hide();
|
|
128
|
+
}
|
|
129
|
+
}, [loaded]);
|
|
130
|
+
|
|
131
|
+
if (!loaded) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return <Stack />;
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Stack Layout
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// app/products/_layout.tsx
|
|
143
|
+
import { Stack } from "expo-router";
|
|
144
|
+
|
|
145
|
+
export const unstable_settings = {
|
|
146
|
+
initialRouteName: "index",
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export default function ProductsLayout() {
|
|
150
|
+
return (
|
|
151
|
+
<Stack>
|
|
152
|
+
<Stack.Screen name="index" options={{ title: "Products" }} />
|
|
153
|
+
<Stack.Screen name="[productId]" options={{ headerShown: false }} />
|
|
154
|
+
</Stack>
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Tab Layout
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
// app/(tabs)/_layout.tsx
|
|
163
|
+
import { Tabs } from "expo-router";
|
|
164
|
+
import MaterialIcons from "@expo/vector-icons/MaterialIcons";
|
|
165
|
+
|
|
166
|
+
export default function TabLayout() {
|
|
167
|
+
return (
|
|
168
|
+
<Tabs screenOptions={{ headerShown: false }}>
|
|
169
|
+
<Tabs.Screen
|
|
170
|
+
name="index"
|
|
171
|
+
options={{
|
|
172
|
+
title: "Home",
|
|
173
|
+
tabBarIcon: ({ color }) => (
|
|
174
|
+
<MaterialIcons size={28} name="home" color={color} />
|
|
175
|
+
),
|
|
176
|
+
}}
|
|
177
|
+
/>
|
|
178
|
+
<Tabs.Screen name="feed" options={{ title: "Feed" }} />
|
|
179
|
+
<Tabs.Screen name="settings" options={{ title: "Settings" }} />
|
|
180
|
+
</Tabs>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Protected Routes (SDK 53+)
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
// app/_layout.tsx
|
|
189
|
+
import { Stack } from "expo-router";
|
|
190
|
+
import { useAuthState } from "@/hooks/useAuthState";
|
|
191
|
+
|
|
192
|
+
export default function RootLayout() {
|
|
193
|
+
const { isLoggedIn } = useAuthState();
|
|
194
|
+
|
|
195
|
+
return (
|
|
196
|
+
<Stack>
|
|
197
|
+
<Stack.Protected guard={isLoggedIn}>
|
|
198
|
+
<Stack.Screen name="(tabs)" />
|
|
199
|
+
<Stack.Screen name="modal" options={{ presentation: "modal" }} />
|
|
200
|
+
</Stack.Protected>
|
|
201
|
+
|
|
202
|
+
<Stack.Protected guard={!isLoggedIn}>
|
|
203
|
+
<Stack.Screen name="sign-in" />
|
|
204
|
+
<Stack.Screen name="create-account" />
|
|
205
|
+
</Stack.Protected>
|
|
206
|
+
</Stack>
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Navigation Patterns
|
|
212
|
+
|
|
213
|
+
### Declarative Navigation (Preferred)
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
import { Link } from "expo-router";
|
|
217
|
+
|
|
218
|
+
// Basic link
|
|
219
|
+
<Link href="/about">About</Link>
|
|
220
|
+
|
|
221
|
+
// With custom component
|
|
222
|
+
<Link href="/profile" asChild>
|
|
223
|
+
<Pressable>
|
|
224
|
+
<Text>Profile</Text>
|
|
225
|
+
</Pressable>
|
|
226
|
+
</Link>
|
|
227
|
+
|
|
228
|
+
// Dynamic route
|
|
229
|
+
<Link href={{ pathname: "/user/[id]", params: { id: "123" } }}>
|
|
230
|
+
View User
|
|
231
|
+
</Link>
|
|
232
|
+
|
|
233
|
+
// With prefetching
|
|
234
|
+
<Link href="/heavy-page" prefetch>Heavy Page</Link>
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Imperative Navigation
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
import { useRouter } from "expo-router";
|
|
241
|
+
|
|
242
|
+
export default function Component() {
|
|
243
|
+
const router = useRouter();
|
|
244
|
+
|
|
245
|
+
const handleNavigate = () => {
|
|
246
|
+
// Navigate (adds to history)
|
|
247
|
+
router.navigate("/about");
|
|
248
|
+
|
|
249
|
+
// Push (always adds to stack)
|
|
250
|
+
router.push("/details");
|
|
251
|
+
|
|
252
|
+
// Replace (no back navigation)
|
|
253
|
+
router.replace("/home");
|
|
254
|
+
|
|
255
|
+
// Back
|
|
256
|
+
router.back();
|
|
257
|
+
|
|
258
|
+
// Dynamic route
|
|
259
|
+
router.navigate({
|
|
260
|
+
pathname: "/user/[id]",
|
|
261
|
+
params: { id: "123" },
|
|
262
|
+
});
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
return <Button onPress={handleNavigate} title="Navigate" />;
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Defensive Navigation Guards
|
|
270
|
+
|
|
271
|
+
Always validate parameters before navigation to prevent broken URLs.
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
const handleNavigation = useCallback(() => {
|
|
275
|
+
if (!entityId) {
|
|
276
|
+
console.error("Cannot navigate: entity ID is missing");
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
router.push(`/players/${entityId}`);
|
|
280
|
+
}, [entityId, router]);
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Reading Route Parameters
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
import { useLocalSearchParams, useGlobalSearchParams } from "expo-router";
|
|
287
|
+
|
|
288
|
+
export default function UserPage() {
|
|
289
|
+
// Local params (current route only)
|
|
290
|
+
const { id, tab } = useLocalSearchParams<{ id: string; tab?: string }>();
|
|
291
|
+
|
|
292
|
+
// Global params (entire URL)
|
|
293
|
+
const globalParams = useGlobalSearchParams();
|
|
294
|
+
|
|
295
|
+
return <Text>User ID: {id}</Text>;
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## Deep Linking
|
|
300
|
+
|
|
301
|
+
### Configure URL Scheme
|
|
302
|
+
|
|
303
|
+
In `app.json` or `app.config.js`:
|
|
304
|
+
|
|
305
|
+
```json
|
|
306
|
+
{
|
|
307
|
+
"expo": {
|
|
308
|
+
"scheme": "myapp"
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### Initial Route for Deep Links
|
|
314
|
+
|
|
315
|
+
Ensure proper back navigation when deep linking.
|
|
316
|
+
|
|
317
|
+
```typescript
|
|
318
|
+
// app/feed/_layout.tsx
|
|
319
|
+
export const unstable_settings = {
|
|
320
|
+
initialRouteName: "index",
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
export default function FeedLayout() {
|
|
324
|
+
return <Stack />;
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Deep Link with Anchor
|
|
329
|
+
|
|
330
|
+
```typescript
|
|
331
|
+
// Forces initial route to load first
|
|
332
|
+
<Link href="/feed/post/123" withAnchor>
|
|
333
|
+
View Post
|
|
334
|
+
</Link>
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## Common Patterns
|
|
338
|
+
|
|
339
|
+
### Stacks Inside Tabs
|
|
340
|
+
|
|
341
|
+
```
|
|
342
|
+
app/
|
|
343
|
+
├── (tabs)/
|
|
344
|
+
│ ├── _layout.tsx # Tab navigator
|
|
345
|
+
│ ├── index.tsx # Home tab
|
|
346
|
+
│ ├── feed/ # Feed tab with stack
|
|
347
|
+
│ │ ├── _layout.tsx # Stack navigator
|
|
348
|
+
│ │ ├── index.tsx # Feed list
|
|
349
|
+
│ │ └── [postId].tsx # Post detail
|
|
350
|
+
│ └── settings.tsx # Settings tab
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Shared Routes Between Tabs
|
|
354
|
+
|
|
355
|
+
```
|
|
356
|
+
app/
|
|
357
|
+
├── (tabs)/
|
|
358
|
+
│ ├── _layout.tsx
|
|
359
|
+
│ ├── (feed)/ # Feed tab group
|
|
360
|
+
│ │ └── index.tsx
|
|
361
|
+
│ ├── (search)/ # Search tab group
|
|
362
|
+
│ │ └── index.tsx
|
|
363
|
+
│ └── (feed,search)/ # Shared between both
|
|
364
|
+
│ └── users/
|
|
365
|
+
│ └── [userId].tsx
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Modal Routes
|
|
369
|
+
|
|
370
|
+
```typescript
|
|
371
|
+
// app/_layout.tsx
|
|
372
|
+
<Stack>
|
|
373
|
+
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
|
|
374
|
+
<Stack.Screen
|
|
375
|
+
name="modal"
|
|
376
|
+
options={{
|
|
377
|
+
presentation: "modal",
|
|
378
|
+
animation: "slide_from_bottom",
|
|
379
|
+
}}
|
|
380
|
+
/>
|
|
381
|
+
</Stack>
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
## Anti-Patterns to Avoid
|
|
385
|
+
|
|
386
|
+
### 1. Business Logic in Route Files
|
|
387
|
+
|
|
388
|
+
Route files should only import and render feature components.
|
|
389
|
+
|
|
390
|
+
### 2. Deeply Nested Navigators
|
|
391
|
+
|
|
392
|
+
Avoid nesting stacks within stacks unnecessarily. Use route groups instead.
|
|
393
|
+
|
|
394
|
+
### 3. Missing initialRouteName
|
|
395
|
+
|
|
396
|
+
Always set `initialRouteName` in stack layouts for proper deep link behavior.
|
|
397
|
+
|
|
398
|
+
### 4. Hardcoded Navigation Paths
|
|
399
|
+
|
|
400
|
+
Use typed routes or constants instead of string literals.
|
|
401
|
+
|
|
402
|
+
```typescript
|
|
403
|
+
// AVOID
|
|
404
|
+
router.push("/players/123/compare");
|
|
405
|
+
|
|
406
|
+
// PREFER
|
|
407
|
+
router.push({
|
|
408
|
+
pathname: "/players/[playerId]/compare",
|
|
409
|
+
params: { playerId: "123" },
|
|
410
|
+
});
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### 5. Using window APIs Without Platform Checks
|
|
414
|
+
|
|
415
|
+
```typescript
|
|
416
|
+
// AVOID
|
|
417
|
+
const width = window.innerWidth;
|
|
418
|
+
|
|
419
|
+
// PREFER
|
|
420
|
+
import { useWindowDimensions } from "react-native";
|
|
421
|
+
const { width } = useWindowDimensions();
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
## Resources
|
|
425
|
+
|
|
426
|
+
For detailed documentation on specific topics, refer to:
|
|
427
|
+
|
|
428
|
+
- `references/official-docs.md` - Condensed official Expo Router documentation
|
|
429
|
+
- `scripts/generate-route.py` - Route scaffolding script
|
|
430
|
+
|
|
431
|
+
Official Documentation: https://docs.expo.dev/router/introduction/
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# Expo Router Official Documentation Reference
|
|
2
|
+
|
|
3
|
+
This reference contains condensed official documentation from Expo Router.
|
|
4
|
+
|
|
5
|
+
## Core Concepts
|
|
6
|
+
|
|
7
|
+
### The Six Rules of Expo Router
|
|
8
|
+
|
|
9
|
+
1. **All screens/pages are files inside the app directory** - Every file inside `app/` has a default export that defines a distinct page (except `_layout` files).
|
|
10
|
+
|
|
11
|
+
2. **All pages have a URL** - All pages have a URL path matching the file's location, enabling universal deep-linking across platforms.
|
|
12
|
+
|
|
13
|
+
3. **First index.tsx is the initial route** - Expo Router looks for the first `index.tsx` file matching the `/` URL. Use route groups `(groupName)` to organize without affecting URLs.
|
|
14
|
+
|
|
15
|
+
4. **Root \_layout.tsx replaces App.jsx/tsx** - The root layout is rendered before any other route and contains initialization code (fonts, splash screen, providers).
|
|
16
|
+
|
|
17
|
+
5. **Non-navigation components live outside app directory** - Components, hooks, utilities belong in other top-level directories. Alternatively, use `src/app/` with `src/components/`, `src/utils/`, etc.
|
|
18
|
+
|
|
19
|
+
6. **It's still React Navigation under the hood** - Expo Router translates file structure into React Navigation components. Same options apply for styling/configuration.
|
|
20
|
+
|
|
21
|
+
## Navigation Methods
|
|
22
|
+
|
|
23
|
+
### Link Component (Declarative)
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { Link } from "expo-router";
|
|
27
|
+
|
|
28
|
+
// Basic
|
|
29
|
+
<Link href="/about">About</Link>
|
|
30
|
+
|
|
31
|
+
// With custom component
|
|
32
|
+
<Link href="/profile" asChild>
|
|
33
|
+
<Pressable><Text>Profile</Text></Pressable>
|
|
34
|
+
</Link>
|
|
35
|
+
|
|
36
|
+
// Dynamic route with params object
|
|
37
|
+
<Link href={{ pathname: "/user/[id]", params: { id: "bacon" } }}>
|
|
38
|
+
View User
|
|
39
|
+
</Link>
|
|
40
|
+
|
|
41
|
+
// Prefetching
|
|
42
|
+
<Link href="/about" prefetch />
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### useRouter Hook (Imperative)
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { useRouter } from "expo-router";
|
|
49
|
+
|
|
50
|
+
const router = useRouter();
|
|
51
|
+
|
|
52
|
+
// Navigate (adds to history, won't duplicate)
|
|
53
|
+
router.navigate("/about");
|
|
54
|
+
|
|
55
|
+
// Push (always adds to stack)
|
|
56
|
+
router.push("/details");
|
|
57
|
+
|
|
58
|
+
// Replace (no back navigation)
|
|
59
|
+
router.replace("/home");
|
|
60
|
+
|
|
61
|
+
// Back
|
|
62
|
+
router.back();
|
|
63
|
+
|
|
64
|
+
// Dismiss modal
|
|
65
|
+
router.dismiss();
|
|
66
|
+
|
|
67
|
+
// Dismiss all modals
|
|
68
|
+
router.dismissAll();
|
|
69
|
+
|
|
70
|
+
// Can go back check
|
|
71
|
+
router.canGoBack();
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Redirect Component
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import { Redirect } from "expo-router";
|
|
78
|
+
|
|
79
|
+
export default function Page() {
|
|
80
|
+
if (!isAuthenticated) {
|
|
81
|
+
return <Redirect href="/sign-in" />;
|
|
82
|
+
}
|
|
83
|
+
return <Content />;
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Route Parameters
|
|
88
|
+
|
|
89
|
+
### Reading Parameters
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import { useLocalSearchParams, useGlobalSearchParams } from "expo-router";
|
|
93
|
+
|
|
94
|
+
// Local params (current route only)
|
|
95
|
+
const { id, tab } = useLocalSearchParams<{ id: string; tab?: string }>();
|
|
96
|
+
|
|
97
|
+
// Global params (entire URL tree)
|
|
98
|
+
const params = useGlobalSearchParams();
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Updating Parameters Without Navigation
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
// Via Link
|
|
105
|
+
<Link href={{ pathname: "/current", params: { filter: "new" } }}>
|
|
106
|
+
Update Filter
|
|
107
|
+
</Link>
|
|
108
|
+
|
|
109
|
+
// Via router
|
|
110
|
+
router.setParams({ filter: "new" });
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Layout Components
|
|
114
|
+
|
|
115
|
+
### Stack Navigator
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
import { Stack } from "expo-router";
|
|
119
|
+
|
|
120
|
+
export default function Layout() {
|
|
121
|
+
return (
|
|
122
|
+
<Stack
|
|
123
|
+
screenOptions={{
|
|
124
|
+
headerStyle: { backgroundColor: "#f4511e" },
|
|
125
|
+
headerTintColor: "#fff",
|
|
126
|
+
}}
|
|
127
|
+
>
|
|
128
|
+
<Stack.Screen name="index" options={{ title: "Home" }} />
|
|
129
|
+
<Stack.Screen name="[id]" options={{ headerShown: false }} />
|
|
130
|
+
</Stack>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Tab Navigator
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
import { Tabs } from "expo-router";
|
|
139
|
+
|
|
140
|
+
export default function Layout() {
|
|
141
|
+
return (
|
|
142
|
+
<Tabs screenOptions={{ tabBarActiveTintColor: "blue" }}>
|
|
143
|
+
<Tabs.Screen
|
|
144
|
+
name="index"
|
|
145
|
+
options={{
|
|
146
|
+
title: "Home",
|
|
147
|
+
tabBarIcon: ({ color }) => <Icon name="home" color={color} />,
|
|
148
|
+
}}
|
|
149
|
+
/>
|
|
150
|
+
</Tabs>
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Drawer Navigator
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import { Drawer } from "expo-router/drawer";
|
|
159
|
+
|
|
160
|
+
export default function Layout() {
|
|
161
|
+
return (
|
|
162
|
+
<Drawer>
|
|
163
|
+
<Drawer.Screen name="index" options={{ title: "Home" }} />
|
|
164
|
+
<Drawer.Screen name="settings" options={{ title: "Settings" }} />
|
|
165
|
+
</Drawer>
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Slot (No Navigator)
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
import { Slot } from "expo-router";
|
|
174
|
+
|
|
175
|
+
export default function Layout() {
|
|
176
|
+
return (
|
|
177
|
+
<>
|
|
178
|
+
<Header />
|
|
179
|
+
<Slot />
|
|
180
|
+
<Footer />
|
|
181
|
+
</>
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Protected Routes (SDK 53+)
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
import { Stack } from "expo-router";
|
|
190
|
+
|
|
191
|
+
export default function RootLayout() {
|
|
192
|
+
const { isLoggedIn } = useAuth();
|
|
193
|
+
|
|
194
|
+
return (
|
|
195
|
+
<Stack>
|
|
196
|
+
<Stack.Protected guard={isLoggedIn}>
|
|
197
|
+
<Stack.Screen name="(app)" />
|
|
198
|
+
</Stack.Protected>
|
|
199
|
+
<Stack.Protected guard={!isLoggedIn}>
|
|
200
|
+
<Stack.Screen name="sign-in" />
|
|
201
|
+
</Stack.Protected>
|
|
202
|
+
</Stack>
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Special Files
|
|
208
|
+
|
|
209
|
+
| File | Purpose |
|
|
210
|
+
| -------------------- | ------------------------------ |
|
|
211
|
+
| `_layout.tsx` | Define navigator for directory |
|
|
212
|
+
| `index.tsx` | Default route for directory |
|
|
213
|
+
| `+not-found.tsx` | 404 error page |
|
|
214
|
+
| `+html.tsx` | Custom HTML wrapper (web) |
|
|
215
|
+
| `+native-intent.tsx` | Handle unmatched deep links |
|
|
216
|
+
|
|
217
|
+
## unstable_settings
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
export const unstable_settings = {
|
|
221
|
+
// Initial route for deep links
|
|
222
|
+
initialRouteName: "index",
|
|
223
|
+
|
|
224
|
+
// Anchor for route groups
|
|
225
|
+
anchor: "(root)",
|
|
226
|
+
};
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Testing
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
import { renderRouter, screen } from "expo-router/testing-library";
|
|
233
|
+
|
|
234
|
+
it("navigates correctly", async () => {
|
|
235
|
+
renderRouter(
|
|
236
|
+
{
|
|
237
|
+
index: () => <Home />,
|
|
238
|
+
"user/[id]": () => <User />,
|
|
239
|
+
},
|
|
240
|
+
{ initialUrl: "/" }
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
expect(screen).toHavePathname("/");
|
|
244
|
+
});
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Test Matchers
|
|
248
|
+
|
|
249
|
+
- `expect(screen).toHavePathname("/path")`
|
|
250
|
+
- `expect(screen).toHavePathnameWithParams("/path?q=test")`
|
|
251
|
+
- `expect(screen).toHaveSegments(["[id]"])`
|
|
252
|
+
- `expect(screen).useLocalSearchParams({ id: "123" })`
|
|
253
|
+
|
|
254
|
+
## Hooks Reference
|
|
255
|
+
|
|
256
|
+
| Hook | Purpose |
|
|
257
|
+
| ----------------------------- | ----------------------- |
|
|
258
|
+
| `useRouter()` | Imperative navigation |
|
|
259
|
+
| `useLocalSearchParams()` | Current route params |
|
|
260
|
+
| `useGlobalSearchParams()` | All URL params |
|
|
261
|
+
| `useSegments()` | Current route segments |
|
|
262
|
+
| `usePathname()` | Current pathname |
|
|
263
|
+
| `useNavigation()` | React Navigation object |
|
|
264
|
+
| `useFocusEffect()` | Run effect on focus |
|
|
265
|
+
| `useNavigationContainerRef()` | Navigation ref |
|
|
266
|
+
|
|
267
|
+
## URL Scheme Configuration
|
|
268
|
+
|
|
269
|
+
```json
|
|
270
|
+
// app.json
|
|
271
|
+
{
|
|
272
|
+
"expo": {
|
|
273
|
+
"scheme": "myapp",
|
|
274
|
+
"web": {
|
|
275
|
+
"bundler": "metro"
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Sources
|
|
282
|
+
|
|
283
|
+
- [Introduction to Expo Router](https://docs.expo.dev/router/introduction/)
|
|
284
|
+
- [Core Concepts](https://docs.expo.dev/router/basics/core-concepts/)
|
|
285
|
+
- [Router Notation](https://docs.expo.dev/router/basics/notation/)
|
|
286
|
+
- [Navigation Layouts](https://docs.expo.dev/router/basics/layout/)
|
|
287
|
+
- [Navigation](https://docs.expo.dev/router/basics/navigation/)
|
|
288
|
+
- [Common Patterns](https://docs.expo.dev/router/basics/common-navigation-patterns/)
|
|
289
|
+
- [Authentication](https://docs.expo.dev/router/advanced/authentication/)
|
|
290
|
+
- [Testing](https://docs.expo.dev/router/reference/testing/)
|