superkit-mcp-server 1.2.3 → 1.2.4
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/ARCHITECTURE.md +102 -102
- package/README.md +71 -71
- package/SUPERKIT.md +168 -168
- package/agents/code-archaeologist.md +106 -106
- package/agents/coder.md +90 -90
- package/agents/data-engineer.md +28 -28
- package/agents/devops-engineer.md +242 -242
- package/agents/git-manager.md +203 -203
- package/agents/orchestrator.md +420 -420
- package/agents/penetration-tester.md +188 -188
- package/agents/performance-optimizer.md +187 -187
- package/agents/planner.md +270 -270
- package/agents/qa-automation-engineer.md +103 -103
- package/agents/quant-developer.md +32 -32
- package/agents/reviewer.md +100 -100
- package/agents/scout.md +222 -222
- package/agents/tester.md +274 -274
- package/agents/ui-designer.md +208 -208
- package/build/tools/sessionManager.js +79 -10
- package/build/tools/todoTools.js +39 -39
- package/build/tools/validators/__tests__/apiSchema.test.js +23 -23
- package/build/tools/validators/__tests__/convertRules.test.js +5 -5
- package/build/tools/validators/__tests__/frontendDesign.test.js +12 -12
- package/build/tools/validators/__tests__/geoChecker.test.js +19 -19
- package/build/tools/validators/__tests__/mobileAudit.test.js +12 -12
- package/build/tools/validators/__tests__/reactPerformanceChecker.test.js +17 -17
- package/build/tools/validators/__tests__/securityScan.test.js +6 -6
- package/build/tools/validators/__tests__/seoChecker.test.js +16 -16
- package/build/tools/validators/__tests__/typeCoverage.test.js +14 -14
- package/commands/README.md +122 -122
- package/commands/ask.toml +72 -72
- package/commands/brainstorm.toml +119 -119
- package/commands/chat.toml +77 -77
- package/commands/code-preview.toml +37 -37
- package/commands/code.toml +28 -28
- package/commands/content.toml +200 -200
- package/commands/cook.toml +77 -77
- package/commands/copywrite.toml +131 -131
- package/commands/db.toml +192 -192
- package/commands/debug.toml +166 -166
- package/commands/design.toml +158 -158
- package/commands/dev-rules.toml +14 -14
- package/commands/do.toml +117 -117
- package/commands/doc-rules.toml +14 -14
- package/commands/docs.toml +148 -148
- package/commands/fix.toml +440 -440
- package/commands/fullstack.toml +175 -175
- package/commands/git.toml +235 -235
- package/commands/help.toml +84 -84
- package/commands/integrate.toml +127 -127
- package/commands/journal.toml +136 -136
- package/commands/kit-setup.toml +40 -40
- package/commands/mcp.toml +183 -183
- package/commands/orchestration.toml +15 -15
- package/commands/plan.toml +171 -171
- package/commands/pm.toml +148 -148
- package/commands/pr.toml +50 -50
- package/commands/project.toml +32 -32
- package/commands/research.toml +117 -117
- package/commands/review-pr.toml +63 -63
- package/commands/review.toml +190 -190
- package/commands/scout-ext.toml +97 -97
- package/commands/scout.toml +79 -79
- package/commands/screenshot.toml +65 -65
- package/commands/session.toml +102 -102
- package/commands/skill.toml +384 -384
- package/commands/status.toml +22 -22
- package/commands/team.toml +56 -56
- package/commands/test.toml +164 -164
- package/commands/ticket.toml +70 -70
- package/commands/use.toml +106 -106
- package/commands/video.toml +83 -83
- package/commands/watzup.toml +71 -71
- package/commands/workflow.toml +14 -14
- package/package.json +35 -35
- package/skills/meta/README.md +30 -30
- package/skills/meta/api-design/SKILL.md +134 -134
- package/skills/meta/code-review/SKILL.md +44 -44
- package/skills/meta/code-review/checklists/pre-merge.md +25 -25
- package/skills/meta/code-review/workflows/architecture-pass.md +26 -26
- package/skills/meta/code-review/workflows/performance-pass.md +27 -27
- package/skills/meta/code-review/workflows/security-pass.md +29 -29
- package/skills/meta/compound-docs/SKILL.md +133 -133
- package/skills/meta/debug/SKILL.md +40 -40
- package/skills/meta/debug/templates/bug-report.template.md +31 -31
- package/skills/meta/debug/workflows/reproduce-issue.md +20 -20
- package/skills/meta/docker/SKILL.md +126 -126
- package/skills/meta/examples/supabase/SKILL.md +46 -46
- package/skills/meta/examples/supabase/references/best-practices.md +319 -319
- package/skills/meta/examples/supabase/references/common-patterns.md +373 -373
- package/skills/meta/examples/supabase/templates/migration-template.sql +49 -49
- package/skills/meta/examples/supabase/templates/rls-policy-template.sql +77 -77
- package/skills/meta/examples/supabase/workflows/debugging.md +260 -260
- package/skills/meta/examples/supabase/workflows/migration-workflow.md +211 -211
- package/skills/meta/examples/supabase/workflows/rls-policies.md +244 -244
- package/skills/meta/examples/supabase/workflows/schema-design.md +321 -321
- package/skills/meta/file-todos/SKILL.md +88 -88
- package/skills/meta/mobile/SKILL.md +140 -140
- package/skills/meta/nextjs/SKILL.md +101 -101
- package/skills/meta/performance/SKILL.md +130 -130
- package/skills/meta/react-patterns/SKILL.md +83 -83
- package/skills/meta/security/SKILL.md +114 -114
- package/skills/meta/session-resume/SKILL.md +96 -96
- package/skills/meta/tailwind/SKILL.md +139 -139
- package/skills/meta/testing/SKILL.md +43 -43
- package/skills/meta/testing/references/vitest-patterns.md +45 -45
- package/skills/meta/testing/templates/component-test.template.tsx +37 -37
- package/skills/tech/alpha-vantage/SKILL.md +142 -142
- package/skills/tech/alpha-vantage/references/commodities.md +153 -153
- package/skills/tech/alpha-vantage/references/economic-indicators.md +158 -158
- package/skills/tech/alpha-vantage/references/forex-crypto.md +154 -154
- package/skills/tech/alpha-vantage/references/fundamentals.md +223 -223
- package/skills/tech/alpha-vantage/references/intelligence.md +138 -138
- package/skills/tech/alpha-vantage/references/options.md +93 -93
- package/skills/tech/alpha-vantage/references/technical-indicators.md +374 -374
- package/skills/tech/alpha-vantage/references/time-series.md +157 -157
- package/skills/tech/financial-modeling/SKILL.md +18 -18
- package/skills/tech/financial-modeling/skills/3-statements/SKILL.md +368 -368
- package/skills/tech/financial-modeling/skills/3-statements/references/formatting.md +118 -118
- package/skills/tech/financial-modeling/skills/3-statements/references/formulas.md +292 -292
- package/skills/tech/financial-modeling/skills/3-statements/references/sec-filings.md +125 -125
- package/skills/tech/financial-modeling/skills/dcf-model/SKILL.md +1210 -1210
- package/skills/tech/financial-modeling/skills/dcf-model/TROUBLESHOOTING.md +40 -40
- package/skills/tech/financial-modeling/skills/dcf-model/requirements.txt +8 -8
- package/skills/tech/financial-modeling/skills/dcf-model/scripts/validate_dcf.py +292 -292
- package/skills/tech/financial-modeling/skills/lbo-model/SKILL.md +236 -236
- package/skills/tech/financial-modeling/skills/merger-model/SKILL.md +108 -108
- package/skills/workflows/README.md +203 -203
- package/skills/workflows/adr.md +174 -174
- package/skills/workflows/changelog.md +74 -74
- package/skills/workflows/compound.md +323 -323
- package/skills/workflows/compound_health.md +74 -74
- package/skills/workflows/create-agent-skill.md +138 -138
- package/skills/workflows/cycle.md +144 -144
- package/skills/workflows/deploy-docs.md +84 -84
- package/skills/workflows/development-rules.md +42 -42
- package/skills/workflows/doc.md +95 -95
- package/skills/workflows/documentation-management.md +34 -34
- package/skills/workflows/explore.md +146 -146
- package/skills/workflows/generate_command.md +106 -106
- package/skills/workflows/heal-skill.md +97 -97
- package/skills/workflows/housekeeping.md +229 -229
- package/skills/workflows/kit-setup.md +102 -102
- package/skills/workflows/map-codebase.md +78 -78
- package/skills/workflows/orchestration-protocol.md +43 -43
- package/skills/workflows/plan-compound.md +439 -439
- package/skills/workflows/plan_review.md +269 -269
- package/skills/workflows/primary-workflow.md +37 -37
- package/skills/workflows/promote_pattern.md +86 -86
- package/skills/workflows/release-docs.md +82 -82
- package/skills/workflows/report-bug.md +135 -135
- package/skills/workflows/reproduce-bug.md +118 -118
- package/skills/workflows/resolve_pr.md +133 -133
- package/skills/workflows/resolve_todo.md +128 -128
- package/skills/workflows/review-compound.md +376 -376
- package/skills/workflows/skill-review.md +127 -127
- package/skills/workflows/specs.md +257 -257
- package/skills/workflows/triage-sprint.md +102 -102
- package/skills/workflows/triage.md +152 -152
- package/skills/workflows/work.md +399 -399
- package/skills/workflows/xcode-test.md +93 -93
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
# Performance Optimization Skill
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
Performance profiling, optimization techniques, and caching strategies.
|
|
5
|
-
|
|
6
|
-
## Core Web Vitals
|
|
7
|
-
|
|
8
|
-
### LCP (Largest Contentful Paint) < 2.5s
|
|
9
|
-
```typescript
|
|
10
|
-
// Optimize images
|
|
11
|
-
<Image
|
|
12
|
-
src="/hero.jpg"
|
|
13
|
-
alt="Hero"
|
|
14
|
-
priority // Preload
|
|
15
|
-
sizes="100vw"
|
|
16
|
-
placeholder="blur"
|
|
17
|
-
/>
|
|
18
|
-
|
|
19
|
-
// Preload critical resources
|
|
20
|
-
<link rel="preload" href="/fonts/inter.woff2" as="font" crossOrigin="" />
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
### CLS (Cumulative Layout Shift) < 0.1
|
|
24
|
-
```css
|
|
25
|
-
/* Reserve space for images */
|
|
26
|
-
img {
|
|
27
|
-
aspect-ratio: 16 / 9;
|
|
28
|
-
width: 100%;
|
|
29
|
-
height: auto;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/* Skeleton loaders */
|
|
33
|
-
.skeleton {
|
|
34
|
-
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
|
35
|
-
animation: shimmer 1.5s infinite;
|
|
36
|
-
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### INP (Interaction to Next Paint) < 200ms
|
|
40
|
-
```typescript
|
|
41
|
-
// Defer non-critical work
|
|
42
|
-
import { startTransition } from 'react';
|
|
43
|
-
|
|
44
|
-
startTransition(() => {
|
|
45
|
-
setExpensiveState(newValue);
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// Use web workers for heavy computation
|
|
49
|
-
const worker = new Worker('/heavy-task.js');
|
|
50
|
-
worker.postMessage(data);
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## JavaScript Optimization
|
|
54
|
-
|
|
55
|
-
### Code Splitting
|
|
56
|
-
```typescript
|
|
57
|
-
// Dynamic imports
|
|
58
|
-
const HeavyComponent = lazy(() => import('./HeavyComponent'));
|
|
59
|
-
|
|
60
|
-
// Route-based splitting (Next.js does this automatically)
|
|
61
|
-
import dynamic from 'next/dynamic';
|
|
62
|
-
const Chart = dynamic(() => import('./Chart'), { ssr: false });
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Bundle Analysis
|
|
66
|
-
```bash
|
|
67
|
-
# Next.js
|
|
68
|
-
npx @next/bundle-analyzer
|
|
69
|
-
|
|
70
|
-
# Webpack
|
|
71
|
-
npx webpack-bundle-analyzer stats.json
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Tree Shaking
|
|
75
|
-
```typescript
|
|
76
|
-
// ❌ Import entire library
|
|
77
|
-
import _ from 'lodash';
|
|
78
|
-
_.debounce(fn, 300);
|
|
79
|
-
|
|
80
|
-
// ✅ Import specific function
|
|
81
|
-
import debounce from 'lodash/debounce';
|
|
82
|
-
debounce(fn, 300);
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## Caching Strategies
|
|
86
|
-
|
|
87
|
-
### HTTP Caching
|
|
88
|
-
```typescript
|
|
89
|
-
// Static assets (1 year)
|
|
90
|
-
Cache-Control: public, max-age=31536000, immutable
|
|
91
|
-
|
|
92
|
-
// API responses (5 minutes with revalidation)
|
|
93
|
-
Cache-Control: public, max-age=300, stale-while-revalidate=60
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### React Query / SWR
|
|
97
|
-
```typescript
|
|
98
|
-
const { data } = useQuery({
|
|
99
|
-
queryKey: ['users'],
|
|
100
|
-
queryFn: fetchUsers,
|
|
101
|
-
staleTime: 5 * 60 * 1000, // 5 minutes
|
|
102
|
-
cacheTime: 30 * 60 * 1000, // 30 minutes
|
|
103
|
-
});
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Service Worker
|
|
107
|
-
```typescript
|
|
108
|
-
// Cache-first strategy for static assets
|
|
109
|
-
self.addEventListener('fetch', (event) => {
|
|
110
|
-
event.respondWith(
|
|
111
|
-
caches.match(event.request).then((cached) => {
|
|
112
|
-
return cached || fetch(event.request);
|
|
113
|
-
})
|
|
114
|
-
);
|
|
115
|
-
});
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## Database Query Optimization
|
|
119
|
-
```sql
|
|
120
|
-
-- Add indexes
|
|
121
|
-
CREATE INDEX idx_posts_user_date ON posts(user_id, created_at DESC);
|
|
122
|
-
|
|
123
|
-
-- Avoid N+1
|
|
124
|
-
SELECT posts.*, users.name
|
|
125
|
-
FROM posts
|
|
126
|
-
JOIN users ON posts.user_id = users.id;
|
|
127
|
-
|
|
128
|
-
-- Use EXPLAIN ANALYZE
|
|
129
|
-
EXPLAIN ANALYZE SELECT * FROM posts WHERE user_id = 123;
|
|
130
|
-
```
|
|
1
|
+
# Performance Optimization Skill
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Performance profiling, optimization techniques, and caching strategies.
|
|
5
|
+
|
|
6
|
+
## Core Web Vitals
|
|
7
|
+
|
|
8
|
+
### LCP (Largest Contentful Paint) < 2.5s
|
|
9
|
+
```typescript
|
|
10
|
+
// Optimize images
|
|
11
|
+
<Image
|
|
12
|
+
src="/hero.jpg"
|
|
13
|
+
alt="Hero"
|
|
14
|
+
priority // Preload
|
|
15
|
+
sizes="100vw"
|
|
16
|
+
placeholder="blur"
|
|
17
|
+
/>
|
|
18
|
+
|
|
19
|
+
// Preload critical resources
|
|
20
|
+
<link rel="preload" href="/fonts/inter.woff2" as="font" crossOrigin="" />
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### CLS (Cumulative Layout Shift) < 0.1
|
|
24
|
+
```css
|
|
25
|
+
/* Reserve space for images */
|
|
26
|
+
img {
|
|
27
|
+
aspect-ratio: 16 / 9;
|
|
28
|
+
width: 100%;
|
|
29
|
+
height: auto;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Skeleton loaders */
|
|
33
|
+
.skeleton {
|
|
34
|
+
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
|
35
|
+
animation: shimmer 1.5s infinite;
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### INP (Interaction to Next Paint) < 200ms
|
|
40
|
+
```typescript
|
|
41
|
+
// Defer non-critical work
|
|
42
|
+
import { startTransition } from 'react';
|
|
43
|
+
|
|
44
|
+
startTransition(() => {
|
|
45
|
+
setExpensiveState(newValue);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Use web workers for heavy computation
|
|
49
|
+
const worker = new Worker('/heavy-task.js');
|
|
50
|
+
worker.postMessage(data);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## JavaScript Optimization
|
|
54
|
+
|
|
55
|
+
### Code Splitting
|
|
56
|
+
```typescript
|
|
57
|
+
// Dynamic imports
|
|
58
|
+
const HeavyComponent = lazy(() => import('./HeavyComponent'));
|
|
59
|
+
|
|
60
|
+
// Route-based splitting (Next.js does this automatically)
|
|
61
|
+
import dynamic from 'next/dynamic';
|
|
62
|
+
const Chart = dynamic(() => import('./Chart'), { ssr: false });
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Bundle Analysis
|
|
66
|
+
```bash
|
|
67
|
+
# Next.js
|
|
68
|
+
npx @next/bundle-analyzer
|
|
69
|
+
|
|
70
|
+
# Webpack
|
|
71
|
+
npx webpack-bundle-analyzer stats.json
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Tree Shaking
|
|
75
|
+
```typescript
|
|
76
|
+
// ❌ Import entire library
|
|
77
|
+
import _ from 'lodash';
|
|
78
|
+
_.debounce(fn, 300);
|
|
79
|
+
|
|
80
|
+
// ✅ Import specific function
|
|
81
|
+
import debounce from 'lodash/debounce';
|
|
82
|
+
debounce(fn, 300);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Caching Strategies
|
|
86
|
+
|
|
87
|
+
### HTTP Caching
|
|
88
|
+
```typescript
|
|
89
|
+
// Static assets (1 year)
|
|
90
|
+
Cache-Control: public, max-age=31536000, immutable
|
|
91
|
+
|
|
92
|
+
// API responses (5 minutes with revalidation)
|
|
93
|
+
Cache-Control: public, max-age=300, stale-while-revalidate=60
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### React Query / SWR
|
|
97
|
+
```typescript
|
|
98
|
+
const { data } = useQuery({
|
|
99
|
+
queryKey: ['users'],
|
|
100
|
+
queryFn: fetchUsers,
|
|
101
|
+
staleTime: 5 * 60 * 1000, // 5 minutes
|
|
102
|
+
cacheTime: 30 * 60 * 1000, // 30 minutes
|
|
103
|
+
});
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Service Worker
|
|
107
|
+
```typescript
|
|
108
|
+
// Cache-first strategy for static assets
|
|
109
|
+
self.addEventListener('fetch', (event) => {
|
|
110
|
+
event.respondWith(
|
|
111
|
+
caches.match(event.request).then((cached) => {
|
|
112
|
+
return cached || fetch(event.request);
|
|
113
|
+
})
|
|
114
|
+
);
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Database Query Optimization
|
|
119
|
+
```sql
|
|
120
|
+
-- Add indexes
|
|
121
|
+
CREATE INDEX idx_posts_user_date ON posts(user_id, created_at DESC);
|
|
122
|
+
|
|
123
|
+
-- Avoid N+1
|
|
124
|
+
SELECT posts.*, users.name
|
|
125
|
+
FROM posts
|
|
126
|
+
JOIN users ON posts.user_id = users.id;
|
|
127
|
+
|
|
128
|
+
-- Use EXPLAIN ANALYZE
|
|
129
|
+
EXPLAIN ANALYZE SELECT * FROM posts WHERE user_id = 123;
|
|
130
|
+
```
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
# React Patterns Skill
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
Modern React patterns, hooks, and state management principles.
|
|
5
|
-
|
|
6
|
-
## Core Principles
|
|
7
|
-
|
|
8
|
-
### 1. Component Composition
|
|
9
|
-
- Prefer composition over inheritance
|
|
10
|
-
- Use children prop for flexibility
|
|
11
|
-
- Create compound components for related UI
|
|
12
|
-
|
|
13
|
-
### 2. Hooks Best Practices
|
|
14
|
-
```tsx
|
|
15
|
-
// Custom hook pattern
|
|
16
|
-
function useUser(userId: string) {
|
|
17
|
-
const [user, setUser] = useState<User | null>(null);
|
|
18
|
-
const [loading, setLoading] = useState(true);
|
|
19
|
-
const [error, setError] = useState<Error | null>(null);
|
|
20
|
-
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
fetchUser(userId)
|
|
23
|
-
.then(setUser)
|
|
24
|
-
.catch(setError)
|
|
25
|
-
.finally(() => setLoading(false));
|
|
26
|
-
}, [userId]);
|
|
27
|
-
|
|
28
|
-
return { user, loading, error };
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### 3. State Management
|
|
33
|
-
- **Local state:** useState for component-level
|
|
34
|
-
- **Shared state:** Context + useReducer
|
|
35
|
-
- **Server state:** React Query, SWR
|
|
36
|
-
- **Global state:** Zustand, Jotai
|
|
37
|
-
|
|
38
|
-
### 4. Performance Patterns
|
|
39
|
-
```tsx
|
|
40
|
-
// Memoization
|
|
41
|
-
const MemoizedComponent = React.memo(({ data }) => {
|
|
42
|
-
return <div>{data.name}</div>;
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// useMemo for expensive computations
|
|
46
|
-
const sortedItems = useMemo(() => {
|
|
47
|
-
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
48
|
-
}, [items]);
|
|
49
|
-
|
|
50
|
-
// useCallback for stable references
|
|
51
|
-
const handleClick = useCallback(() => {
|
|
52
|
-
doSomething(id);
|
|
53
|
-
}, [id]);
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### 5. Error Boundaries
|
|
57
|
-
```tsx
|
|
58
|
-
class ErrorBoundary extends React.Component {
|
|
59
|
-
state = { hasError: false };
|
|
60
|
-
|
|
61
|
-
static getDerivedStateFromError(error) {
|
|
62
|
-
return { hasError: true };
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
componentDidCatch(error, errorInfo) {
|
|
66
|
-
logError(error, errorInfo);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
render() {
|
|
70
|
-
if (this.state.hasError) {
|
|
71
|
-
return <FallbackUI />;
|
|
72
|
-
}
|
|
73
|
-
return this.props.children;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## Anti-Patterns to Avoid
|
|
79
|
-
- ❌ Prop drilling (use Context instead)
|
|
80
|
-
- ❌ Mutating state directly
|
|
81
|
-
- ❌ Missing dependency arrays
|
|
82
|
-
- ❌ Over-using useEffect
|
|
83
|
-
- ❌ Inline function definitions in render
|
|
1
|
+
# React Patterns Skill
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Modern React patterns, hooks, and state management principles.
|
|
5
|
+
|
|
6
|
+
## Core Principles
|
|
7
|
+
|
|
8
|
+
### 1. Component Composition
|
|
9
|
+
- Prefer composition over inheritance
|
|
10
|
+
- Use children prop for flexibility
|
|
11
|
+
- Create compound components for related UI
|
|
12
|
+
|
|
13
|
+
### 2. Hooks Best Practices
|
|
14
|
+
```tsx
|
|
15
|
+
// Custom hook pattern
|
|
16
|
+
function useUser(userId: string) {
|
|
17
|
+
const [user, setUser] = useState<User | null>(null);
|
|
18
|
+
const [loading, setLoading] = useState(true);
|
|
19
|
+
const [error, setError] = useState<Error | null>(null);
|
|
20
|
+
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
fetchUser(userId)
|
|
23
|
+
.then(setUser)
|
|
24
|
+
.catch(setError)
|
|
25
|
+
.finally(() => setLoading(false));
|
|
26
|
+
}, [userId]);
|
|
27
|
+
|
|
28
|
+
return { user, loading, error };
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 3. State Management
|
|
33
|
+
- **Local state:** useState for component-level
|
|
34
|
+
- **Shared state:** Context + useReducer
|
|
35
|
+
- **Server state:** React Query, SWR
|
|
36
|
+
- **Global state:** Zustand, Jotai
|
|
37
|
+
|
|
38
|
+
### 4. Performance Patterns
|
|
39
|
+
```tsx
|
|
40
|
+
// Memoization
|
|
41
|
+
const MemoizedComponent = React.memo(({ data }) => {
|
|
42
|
+
return <div>{data.name}</div>;
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// useMemo for expensive computations
|
|
46
|
+
const sortedItems = useMemo(() => {
|
|
47
|
+
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
48
|
+
}, [items]);
|
|
49
|
+
|
|
50
|
+
// useCallback for stable references
|
|
51
|
+
const handleClick = useCallback(() => {
|
|
52
|
+
doSomething(id);
|
|
53
|
+
}, [id]);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 5. Error Boundaries
|
|
57
|
+
```tsx
|
|
58
|
+
class ErrorBoundary extends React.Component {
|
|
59
|
+
state = { hasError: false };
|
|
60
|
+
|
|
61
|
+
static getDerivedStateFromError(error) {
|
|
62
|
+
return { hasError: true };
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
componentDidCatch(error, errorInfo) {
|
|
66
|
+
logError(error, errorInfo);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
render() {
|
|
70
|
+
if (this.state.hasError) {
|
|
71
|
+
return <FallbackUI />;
|
|
72
|
+
}
|
|
73
|
+
return this.props.children;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Anti-Patterns to Avoid
|
|
79
|
+
- ❌ Prop drilling (use Context instead)
|
|
80
|
+
- ❌ Mutating state directly
|
|
81
|
+
- ❌ Missing dependency arrays
|
|
82
|
+
- ❌ Over-using useEffect
|
|
83
|
+
- ❌ Inline function definitions in render
|
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
# Security Skill
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
Security audit, vulnerability scanning, and secure coding practices.
|
|
5
|
-
|
|
6
|
-
## OWASP Top 10 Checks
|
|
7
|
-
|
|
8
|
-
### 1. Injection (SQL, NoSQL, Command)
|
|
9
|
-
```typescript
|
|
10
|
-
// ❌ Vulnerable
|
|
11
|
-
const query = `SELECT * FROM users WHERE id = ${userId}`;
|
|
12
|
-
|
|
13
|
-
// ✅ Safe - Parameterized query
|
|
14
|
-
const query = 'SELECT * FROM users WHERE id = $1';
|
|
15
|
-
await db.query(query, [userId]);
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
### 2. Authentication Flaws
|
|
19
|
-
```typescript
|
|
20
|
-
// Password hashing
|
|
21
|
-
import bcrypt from 'bcrypt';
|
|
22
|
-
|
|
23
|
-
async function hashPassword(password: string) {
|
|
24
|
-
return bcrypt.hash(password, 12);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async function verifyPassword(password: string, hash: string) {
|
|
28
|
-
return bcrypt.compare(password, hash);
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### 3. XSS Prevention
|
|
33
|
-
```typescript
|
|
34
|
-
// ❌ Dangerous
|
|
35
|
-
element.innerHTML = userInput;
|
|
36
|
-
|
|
37
|
-
// ✅ Safe - Escape output
|
|
38
|
-
element.textContent = userInput;
|
|
39
|
-
|
|
40
|
-
// React auto-escapes, but avoid dangerouslySetInnerHTML
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### 4. CSRF Protection
|
|
44
|
-
```typescript
|
|
45
|
-
// Use CSRF tokens
|
|
46
|
-
import csrf from 'csurf';
|
|
47
|
-
const csrfProtection = csrf({ cookie: true });
|
|
48
|
-
|
|
49
|
-
app.use(csrfProtection);
|
|
50
|
-
|
|
51
|
-
// In form
|
|
52
|
-
<input type="hidden" name="_csrf" value={csrfToken} />
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 5. Security Headers
|
|
56
|
-
```typescript
|
|
57
|
-
// helmet middleware
|
|
58
|
-
import helmet from 'helmet';
|
|
59
|
-
|
|
60
|
-
app.use(helmet({
|
|
61
|
-
contentSecurityPolicy: {
|
|
62
|
-
directives: {
|
|
63
|
-
defaultSrc: ["'self'"],
|
|
64
|
-
scriptSrc: ["'self'", "'unsafe-inline'"],
|
|
65
|
-
styleSrc: ["'self'", "'unsafe-inline'"],
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
}));
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## JWT Security
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
import jwt from 'jsonwebtoken';
|
|
75
|
-
|
|
76
|
-
// ✅ Best practices
|
|
77
|
-
const token = jwt.sign(
|
|
78
|
-
{ userId: user.id },
|
|
79
|
-
process.env.JWT_SECRET,
|
|
80
|
-
{
|
|
81
|
-
algorithm: 'HS256',
|
|
82
|
-
expiresIn: '15m', // Short expiry
|
|
83
|
-
issuer: 'my-app',
|
|
84
|
-
audience: 'my-app-users',
|
|
85
|
-
}
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
// Verify with options
|
|
89
|
-
jwt.verify(token, process.env.JWT_SECRET, {
|
|
90
|
-
algorithms: ['HS256'], // Prevent algorithm switching
|
|
91
|
-
issuer: 'my-app',
|
|
92
|
-
});
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## Secrets Management
|
|
96
|
-
```bash
|
|
97
|
-
# Never commit secrets
|
|
98
|
-
.env
|
|
99
|
-
.env.local
|
|
100
|
-
*.pem
|
|
101
|
-
*.key
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## Security Audit Commands
|
|
105
|
-
```bash
|
|
106
|
-
# NPM audit
|
|
107
|
-
npm audit --audit-level=high
|
|
108
|
-
|
|
109
|
-
# Check for leaked secrets
|
|
110
|
-
npx secretlint "**/*"
|
|
111
|
-
|
|
112
|
-
# Dependency vulnerabilities
|
|
113
|
-
npx snyk test
|
|
114
|
-
```
|
|
1
|
+
# Security Skill
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Security audit, vulnerability scanning, and secure coding practices.
|
|
5
|
+
|
|
6
|
+
## OWASP Top 10 Checks
|
|
7
|
+
|
|
8
|
+
### 1. Injection (SQL, NoSQL, Command)
|
|
9
|
+
```typescript
|
|
10
|
+
// ❌ Vulnerable
|
|
11
|
+
const query = `SELECT * FROM users WHERE id = ${userId}`;
|
|
12
|
+
|
|
13
|
+
// ✅ Safe - Parameterized query
|
|
14
|
+
const query = 'SELECT * FROM users WHERE id = $1';
|
|
15
|
+
await db.query(query, [userId]);
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 2. Authentication Flaws
|
|
19
|
+
```typescript
|
|
20
|
+
// Password hashing
|
|
21
|
+
import bcrypt from 'bcrypt';
|
|
22
|
+
|
|
23
|
+
async function hashPassword(password: string) {
|
|
24
|
+
return bcrypt.hash(password, 12);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async function verifyPassword(password: string, hash: string) {
|
|
28
|
+
return bcrypt.compare(password, hash);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 3. XSS Prevention
|
|
33
|
+
```typescript
|
|
34
|
+
// ❌ Dangerous
|
|
35
|
+
element.innerHTML = userInput;
|
|
36
|
+
|
|
37
|
+
// ✅ Safe - Escape output
|
|
38
|
+
element.textContent = userInput;
|
|
39
|
+
|
|
40
|
+
// React auto-escapes, but avoid dangerouslySetInnerHTML
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 4. CSRF Protection
|
|
44
|
+
```typescript
|
|
45
|
+
// Use CSRF tokens
|
|
46
|
+
import csrf from 'csurf';
|
|
47
|
+
const csrfProtection = csrf({ cookie: true });
|
|
48
|
+
|
|
49
|
+
app.use(csrfProtection);
|
|
50
|
+
|
|
51
|
+
// In form
|
|
52
|
+
<input type="hidden" name="_csrf" value={csrfToken} />
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 5. Security Headers
|
|
56
|
+
```typescript
|
|
57
|
+
// helmet middleware
|
|
58
|
+
import helmet from 'helmet';
|
|
59
|
+
|
|
60
|
+
app.use(helmet({
|
|
61
|
+
contentSecurityPolicy: {
|
|
62
|
+
directives: {
|
|
63
|
+
defaultSrc: ["'self'"],
|
|
64
|
+
scriptSrc: ["'self'", "'unsafe-inline'"],
|
|
65
|
+
styleSrc: ["'self'", "'unsafe-inline'"],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
}));
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## JWT Security
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import jwt from 'jsonwebtoken';
|
|
75
|
+
|
|
76
|
+
// ✅ Best practices
|
|
77
|
+
const token = jwt.sign(
|
|
78
|
+
{ userId: user.id },
|
|
79
|
+
process.env.JWT_SECRET,
|
|
80
|
+
{
|
|
81
|
+
algorithm: 'HS256',
|
|
82
|
+
expiresIn: '15m', // Short expiry
|
|
83
|
+
issuer: 'my-app',
|
|
84
|
+
audience: 'my-app-users',
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
// Verify with options
|
|
89
|
+
jwt.verify(token, process.env.JWT_SECRET, {
|
|
90
|
+
algorithms: ['HS256'], // Prevent algorithm switching
|
|
91
|
+
issuer: 'my-app',
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Secrets Management
|
|
96
|
+
```bash
|
|
97
|
+
# Never commit secrets
|
|
98
|
+
.env
|
|
99
|
+
.env.local
|
|
100
|
+
*.pem
|
|
101
|
+
*.key
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Security Audit Commands
|
|
105
|
+
```bash
|
|
106
|
+
# NPM audit
|
|
107
|
+
npm audit --audit-level=high
|
|
108
|
+
|
|
109
|
+
# Check for leaked secrets
|
|
110
|
+
npx secretlint "**/*"
|
|
111
|
+
|
|
112
|
+
# Dependency vulnerabilities
|
|
113
|
+
npx snyk test
|
|
114
|
+
```
|