@zimezone/z-command 1.0.1 → 1.1.1

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.
Files changed (217) hide show
  1. package/README.md +57 -38
  2. package/dist/cli.js +14 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts +1 -7
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +101 -23
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/update.d.ts +11 -0
  9. package/dist/commands/update.d.ts.map +1 -0
  10. package/dist/commands/update.js +88 -0
  11. package/dist/commands/update.js.map +1 -0
  12. package/dist/platforms.d.ts +21 -0
  13. package/dist/platforms.d.ts.map +1 -0
  14. package/dist/platforms.js +137 -0
  15. package/dist/platforms.js.map +1 -0
  16. package/dist/types.d.ts +44 -0
  17. package/dist/types.d.ts.map +1 -0
  18. package/dist/types.js +6 -0
  19. package/dist/types.js.map +1 -0
  20. package/package.json +13 -5
  21. package/templates/agents/api-documenter.agent.md +161 -0
  22. package/templates/agents/architect-review.agent.md +146 -0
  23. package/templates/agents/arm-cortex-expert.agent.md +288 -0
  24. package/templates/agents/backend-architect.agent.md +309 -0
  25. package/templates/agents/backend-security-coder.agent.md +152 -0
  26. package/templates/agents/bash-pro.agent.md +285 -0
  27. package/templates/agents/c-pro.agent.md +35 -0
  28. package/templates/agents/c4-code.agent.md +320 -0
  29. package/templates/agents/c4-component.agent.md +227 -0
  30. package/templates/agents/c4-container.agent.md +248 -0
  31. package/templates/agents/c4-context.agent.md +235 -0
  32. package/templates/agents/conductor-validator.agent.md +245 -0
  33. package/templates/agents/csharp-pro.agent.md +38 -0
  34. package/templates/agents/customer-support.agent.md +148 -0
  35. package/templates/agents/database-admin.agent.md +142 -0
  36. package/templates/agents/database-architect.agent.md +238 -0
  37. package/templates/agents/database-optimizer.agent.md +144 -0
  38. package/templates/agents/debugger.agent.md +30 -0
  39. package/templates/agents/deployment-engineer.agent.md +0 -0
  40. package/templates/agents/devops-troubleshooter.agent.md +138 -0
  41. package/templates/agents/django-pro.agent.md +159 -0
  42. package/templates/agents/docs-architect.agent.md +77 -0
  43. package/templates/agents/dotnet-architect.agent.md +175 -0
  44. package/templates/agents/dx-optimizer.agent.md +63 -0
  45. package/templates/agents/elixir-pro.agent.md +38 -0
  46. package/templates/agents/error-detective.agent.md +32 -0
  47. package/templates/agents/event-sourcing-architect.agent.md +42 -0
  48. package/templates/agents/fastapi-pro.agent.md +171 -0
  49. package/templates/agents/firmware-analyst.agent.md +330 -0
  50. package/templates/agents/frontend-security-coder.agent.md +149 -0
  51. package/templates/agents/haskell-pro.agent.md +37 -0
  52. package/templates/agents/hr-pro.agent.md +105 -0
  53. package/templates/agents/incident-responder.agent.md +190 -0
  54. package/templates/agents/ios-developer.agent.md +198 -0
  55. package/templates/agents/java-pro.agent.md +156 -0
  56. package/templates/agents/javascript-pro.agent.md +35 -0
  57. package/templates/agents/julia-pro.agent.md +187 -0
  58. package/templates/agents/legal-advisor.agent.md +49 -0
  59. package/templates/agents/malware-analyst.agent.md +272 -0
  60. package/templates/agents/mermaid-expert.agent.md +39 -0
  61. package/templates/agents/minecraft-bukkit-pro.agent.md +104 -0
  62. package/templates/agents/mobile-security-coder.agent.md +163 -0
  63. package/templates/agents/monorepo-architect.agent.md +44 -0
  64. package/templates/agents/observability-engineer.agent.md +228 -0
  65. package/templates/agents/performance-engineer.agent.md +167 -0
  66. package/templates/agents/php-pro.agent.md +43 -0
  67. package/templates/agents/posix-shell-pro.agent.md +284 -0
  68. package/templates/agents/quant-analyst.agent.md +32 -0
  69. package/templates/agents/reference-builder.agent.md +167 -0
  70. package/templates/agents/reverse-engineer.agent.md +202 -0
  71. package/templates/agents/risk-manager.agent.md +41 -0
  72. package/templates/agents/ruby-pro.agent.md +35 -0
  73. package/templates/agents/rust-pro.agent.md +156 -0
  74. package/templates/agents/sales-automator.agent.md +35 -0
  75. package/templates/agents/scala-pro.agent.md +60 -0
  76. package/templates/agents/search-specialist.agent.md +59 -0
  77. package/templates/agents/security-auditor.agent.md +138 -0
  78. package/templates/agents/seo-authority-builder.agent.md +116 -0
  79. package/templates/agents/seo-cannibalization-detector.agent.md +103 -0
  80. package/templates/agents/seo-content-auditor.agent.md +63 -0
  81. package/templates/agents/seo-content-planner.agent.md +88 -0
  82. package/templates/agents/seo-content-refresher.agent.md +98 -0
  83. package/templates/agents/seo-content-writer.agent.md +76 -0
  84. package/templates/agents/seo-keyword-strategist.agent.md +75 -0
  85. package/templates/agents/seo-meta-optimizer.agent.md +72 -0
  86. package/templates/agents/seo-snippet-hunter.agent.md +94 -0
  87. package/templates/agents/seo-structure-architect.agent.md +88 -0
  88. package/templates/agents/service-mesh-expert.agent.md +41 -0
  89. package/templates/agents/sql-pro.agent.md +146 -0
  90. package/templates/agents/tdd-orchestrator.agent.md +183 -0
  91. package/templates/agents/temporal-python-pro.agent.md +349 -0
  92. package/templates/agents/terraform-specialist.agent.md +137 -0
  93. package/templates/agents/test-automator.agent.md +203 -0
  94. package/templates/agents/threat-modeling-expert.agent.md +44 -0
  95. package/templates/agents/tutorial-engineer.agent.md +118 -0
  96. package/templates/agents/ui-ux-designer.agent.md +188 -0
  97. package/templates/agents/ui-visual-validator.agent.md +192 -0
  98. package/templates/agents/vector-database-engineer.agent.md +43 -0
  99. package/templates/skills/angular-migration/SKILL.md +410 -0
  100. package/templates/skills/api-design-principles/SKILL.md +528 -0
  101. package/templates/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  102. package/templates/skills/api-design-principles/assets/rest-api-template.py +182 -0
  103. package/templates/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  104. package/templates/skills/api-design-principles/references/rest-best-practices.md +408 -0
  105. package/templates/skills/architecture-decision-records/SKILL.md +428 -0
  106. package/templates/skills/architecture-patterns/SKILL.md +494 -0
  107. package/templates/skills/async-python-patterns/SKILL.md +694 -0
  108. package/templates/skills/auth-implementation-patterns/SKILL.md +634 -0
  109. package/templates/skills/changelog-automation/SKILL.md +552 -0
  110. package/templates/skills/code-review-excellence/SKILL.md +520 -0
  111. package/templates/skills/competitive-landscape/SKILL.md +479 -0
  112. package/templates/skills/context-driven-development/SKILL.md +385 -0
  113. package/templates/skills/cost-optimization/SKILL.md +274 -0
  114. package/templates/skills/cqrs-implementation/SKILL.md +554 -0
  115. package/templates/skills/data-quality-frameworks/SKILL.md +587 -0
  116. package/templates/skills/data-storytelling/SKILL.md +453 -0
  117. package/templates/skills/database-migration/SKILL.md +424 -0
  118. package/templates/skills/dbt-transformation-patterns/SKILL.md +561 -0
  119. package/templates/skills/debugging-strategies/SKILL.md +527 -0
  120. package/templates/skills/defi-protocol-templates/SKILL.md +454 -0
  121. package/templates/skills/dependency-upgrade/SKILL.md +409 -0
  122. package/templates/skills/deployment-pipeline-design/SKILL.md +359 -0
  123. package/templates/skills/distributed-tracing/SKILL.md +438 -0
  124. package/templates/skills/dotnet-backend-patterns/SKILL.md +815 -0
  125. package/templates/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
  126. package/templates/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
  127. package/templates/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
  128. package/templates/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
  129. package/templates/skills/e2e-testing-patterns/SKILL.md +547 -0
  130. package/templates/skills/employment-contract-templates/SKILL.md +507 -0
  131. package/templates/skills/error-handling-patterns/SKILL.md +636 -0
  132. package/templates/skills/event-store-design/SKILL.md +437 -0
  133. package/templates/skills/fastapi-templates/SKILL.md +567 -0
  134. package/templates/skills/git-advanced-workflows/SKILL.md +400 -0
  135. package/templates/skills/github-actions-templates/SKILL.md +333 -0
  136. package/templates/skills/go-concurrency-patterns/SKILL.md +655 -0
  137. package/templates/skills/grafana-dashboards/SKILL.md +369 -0
  138. package/templates/skills/helm-chart-scaffolding/SKILL.md +544 -0
  139. package/templates/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  140. package/templates/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  141. package/templates/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  142. package/templates/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  143. package/templates/skills/javascript-testing-patterns/SKILL.md +1025 -0
  144. package/templates/skills/langchain-architecture/SKILL.md +338 -0
  145. package/templates/skills/llm-evaluation/SKILL.md +471 -0
  146. package/templates/skills/microservices-patterns/SKILL.md +595 -0
  147. package/templates/skills/modern-javascript-patterns/SKILL.md +911 -0
  148. package/templates/skills/monorepo-management/SKILL.md +622 -0
  149. package/templates/skills/nextjs-app-router-patterns/SKILL.md +544 -0
  150. package/templates/skills/nodejs-backend-patterns/SKILL.md +1020 -0
  151. package/templates/skills/nx-workspace-patterns/SKILL.md +452 -0
  152. package/templates/skills/openapi-spec-generation/SKILL.md +1028 -0
  153. package/templates/skills/paypal-integration/SKILL.md +467 -0
  154. package/templates/skills/pci-compliance/SKILL.md +466 -0
  155. package/templates/skills/postgresql/SKILL.md +204 -0
  156. package/templates/skills/projection-patterns/SKILL.md +490 -0
  157. package/templates/skills/prometheus-configuration/SKILL.md +392 -0
  158. package/templates/skills/prompt-engineering-patterns/SKILL.md +201 -0
  159. package/templates/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  160. package/templates/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
  161. package/templates/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
  162. package/templates/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
  163. package/templates/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
  164. package/templates/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
  165. package/templates/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
  166. package/templates/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  167. package/templates/skills/python-packaging/SKILL.md +870 -0
  168. package/templates/skills/python-performance-optimization/SKILL.md +869 -0
  169. package/templates/skills/python-testing-patterns/SKILL.md +907 -0
  170. package/templates/skills/rag-implementation/SKILL.md +403 -0
  171. package/templates/skills/react-modernization/SKILL.md +513 -0
  172. package/templates/skills/react-native-architecture/SKILL.md +671 -0
  173. package/templates/skills/react-state-management/SKILL.md +429 -0
  174. package/templates/skills/risk-metrics-calculation/SKILL.md +555 -0
  175. package/templates/skills/rust-async-patterns/SKILL.md +517 -0
  176. package/templates/skills/secrets-management/SKILL.md +346 -0
  177. package/templates/skills/security-requirement-extraction/SKILL.md +677 -0
  178. package/templates/skills/shellcheck-configuration/SKILL.md +454 -0
  179. package/templates/skills/similarity-search-patterns/SKILL.md +558 -0
  180. package/templates/skills/slo-implementation/SKILL.md +329 -0
  181. package/templates/skills/sql-optimization-patterns/SKILL.md +493 -0
  182. package/templates/skills/stripe-integration/SKILL.md +442 -0
  183. package/templates/skills/tailwind-design-system/SKILL.md +666 -0
  184. package/templates/skills/temporal-python-testing/SKILL.md +158 -0
  185. package/templates/skills/temporal-python-testing/resources/integration-testing.md +455 -0
  186. package/templates/skills/temporal-python-testing/resources/local-setup.md +553 -0
  187. package/templates/skills/temporal-python-testing/resources/replay-testing.md +462 -0
  188. package/templates/skills/temporal-python-testing/resources/unit-testing.md +328 -0
  189. package/templates/skills/terraform-module-library/SKILL.md +249 -0
  190. package/templates/skills/terraform-module-library/references/aws-modules.md +63 -0
  191. package/templates/skills/threat-mitigation-mapping/SKILL.md +745 -0
  192. package/templates/skills/track-management/SKILL.md +593 -0
  193. package/templates/skills/typescript-advanced-types/SKILL.md +717 -0
  194. package/templates/skills/ui-ux-pro-max/SKILL.md +352 -0
  195. package/templates/skills/ui-ux-pro-max/data/charts.csv +26 -0
  196. package/templates/skills/ui-ux-pro-max/data/colors.csv +97 -0
  197. package/templates/skills/ui-ux-pro-max/data/icons.csv +101 -0
  198. package/templates/skills/ui-ux-pro-max/data/landing.csv +31 -0
  199. package/templates/skills/ui-ux-pro-max/data/products.csv +97 -0
  200. package/templates/skills/ui-ux-pro-max/data/prompts.csv +24 -0
  201. package/templates/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  202. package/templates/skills/ui-ux-pro-max/data/styles.csv +59 -0
  203. package/templates/skills/ui-ux-pro-max/data/typography.csv +58 -0
  204. package/templates/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  205. package/templates/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  206. package/templates/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  207. package/templates/skills/ui-ux-pro-max/scripts/core.py +258 -0
  208. package/templates/skills/ui-ux-pro-max/scripts/design_system.py +547 -0
  209. package/templates/skills/ui-ux-pro-max/scripts/search.py +76 -0
  210. package/templates/skills/uv-package-manager/SKILL.md +831 -0
  211. package/templates/skills/vector-index-tuning/SKILL.md +521 -0
  212. package/templates/skills/wcag-audit-patterns/SKILL.md +555 -0
  213. package/templates/skills/workflow-orchestration-patterns/SKILL.md +316 -0
  214. package/templates/skills/workflow-patterns/SKILL.md +623 -0
  215. package/templates/agents/game-developer.agent.md +0 -57
  216. package/templates/agents/kubernetes-specialist.agent.md +0 -56
  217. package/templates/agents/market-researcher.agent.md +0 -47
@@ -0,0 +1,513 @@
1
+ ---
2
+ name: react-modernization
3
+ description: Upgrade React applications to latest versions, migrate from class components to hooks, and adopt concurrent features. Use when modernizing React codebases, migrating to React Hooks, or upgrading to latest React versions.
4
+ ---
5
+
6
+ # React Modernization
7
+
8
+ Master React version upgrades, class to hooks migration, concurrent features adoption, and codemods for automated transformation.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Upgrading React applications to latest versions
13
+ - Migrating class components to functional components with hooks
14
+ - Adopting concurrent React features (Suspense, transitions)
15
+ - Applying codemods for automated refactoring
16
+ - Modernizing state management patterns
17
+ - Updating to TypeScript
18
+ - Improving performance with React 18+ features
19
+
20
+ ## Version Upgrade Path
21
+
22
+ ### React 16 → 17 → 18
23
+
24
+ **Breaking Changes by Version:**
25
+
26
+ **React 17:**
27
+ - Event delegation changes
28
+ - No event pooling
29
+ - Effect cleanup timing
30
+ - JSX transform (no React import needed)
31
+
32
+ **React 18:**
33
+ - Automatic batching
34
+ - Concurrent rendering
35
+ - Strict Mode changes (double invocation)
36
+ - New root API
37
+ - Suspense on server
38
+
39
+ ## Class to Hooks Migration
40
+
41
+ ### State Management
42
+ ```javascript
43
+ // Before: Class component
44
+ class Counter extends React.Component {
45
+ constructor(props) {
46
+ super(props);
47
+ this.state = {
48
+ count: 0,
49
+ name: ''
50
+ };
51
+ }
52
+
53
+ increment = () => {
54
+ this.setState({ count: this.state.count + 1 });
55
+ }
56
+
57
+ render() {
58
+ return (
59
+ <div>
60
+ <p>Count: {this.state.count}</p>
61
+ <button onClick={this.increment}>Increment</button>
62
+ </div>
63
+ );
64
+ }
65
+ }
66
+
67
+ // After: Functional component with hooks
68
+ function Counter() {
69
+ const [count, setCount] = useState(0);
70
+ const [name, setName] = useState('');
71
+
72
+ const increment = () => {
73
+ setCount(count + 1);
74
+ };
75
+
76
+ return (
77
+ <div>
78
+ <p>Count: {count}</p>
79
+ <button onClick={increment}>Increment</button>
80
+ </div>
81
+ );
82
+ }
83
+ ```
84
+
85
+ ### Lifecycle Methods to Hooks
86
+ ```javascript
87
+ // Before: Lifecycle methods
88
+ class DataFetcher extends React.Component {
89
+ state = { data: null, loading: true };
90
+
91
+ componentDidMount() {
92
+ this.fetchData();
93
+ }
94
+
95
+ componentDidUpdate(prevProps) {
96
+ if (prevProps.id !== this.props.id) {
97
+ this.fetchData();
98
+ }
99
+ }
100
+
101
+ componentWillUnmount() {
102
+ this.cancelRequest();
103
+ }
104
+
105
+ fetchData = async () => {
106
+ const data = await fetch(`/api/${this.props.id}`);
107
+ this.setState({ data, loading: false });
108
+ };
109
+
110
+ cancelRequest = () => {
111
+ // Cleanup
112
+ };
113
+
114
+ render() {
115
+ if (this.state.loading) return <div>Loading...</div>;
116
+ return <div>{this.state.data}</div>;
117
+ }
118
+ }
119
+
120
+ // After: useEffect hook
121
+ function DataFetcher({ id }) {
122
+ const [data, setData] = useState(null);
123
+ const [loading, setLoading] = useState(true);
124
+
125
+ useEffect(() => {
126
+ let cancelled = false;
127
+
128
+ const fetchData = async () => {
129
+ try {
130
+ const response = await fetch(`/api/${id}`);
131
+ const result = await response.json();
132
+
133
+ if (!cancelled) {
134
+ setData(result);
135
+ setLoading(false);
136
+ }
137
+ } catch (error) {
138
+ if (!cancelled) {
139
+ console.error(error);
140
+ }
141
+ }
142
+ };
143
+
144
+ fetchData();
145
+
146
+ // Cleanup function
147
+ return () => {
148
+ cancelled = true;
149
+ };
150
+ }, [id]); // Re-run when id changes
151
+
152
+ if (loading) return <div>Loading...</div>;
153
+ return <div>{data}</div>;
154
+ }
155
+ ```
156
+
157
+ ### Context and HOCs to Hooks
158
+ ```javascript
159
+ // Before: Context consumer and HOC
160
+ const ThemeContext = React.createContext();
161
+
162
+ class ThemedButton extends React.Component {
163
+ static contextType = ThemeContext;
164
+
165
+ render() {
166
+ return (
167
+ <button style={{ background: this.context.theme }}>
168
+ {this.props.children}
169
+ </button>
170
+ );
171
+ }
172
+ }
173
+
174
+ // After: useContext hook
175
+ function ThemedButton({ children }) {
176
+ const { theme } = useContext(ThemeContext);
177
+
178
+ return (
179
+ <button style={{ background: theme }}>
180
+ {children}
181
+ </button>
182
+ );
183
+ }
184
+
185
+ // Before: HOC for data fetching
186
+ function withUser(Component) {
187
+ return class extends React.Component {
188
+ state = { user: null };
189
+
190
+ componentDidMount() {
191
+ fetchUser().then(user => this.setState({ user }));
192
+ }
193
+
194
+ render() {
195
+ return <Component {...this.props} user={this.state.user} />;
196
+ }
197
+ };
198
+ }
199
+
200
+ // After: Custom hook
201
+ function useUser() {
202
+ const [user, setUser] = useState(null);
203
+
204
+ useEffect(() => {
205
+ fetchUser().then(setUser);
206
+ }, []);
207
+
208
+ return user;
209
+ }
210
+
211
+ function UserProfile() {
212
+ const user = useUser();
213
+ if (!user) return <div>Loading...</div>;
214
+ return <div>{user.name}</div>;
215
+ }
216
+ ```
217
+
218
+ ## React 18 Concurrent Features
219
+
220
+ ### New Root API
221
+ ```javascript
222
+ // Before: React 17
223
+ import ReactDOM from 'react-dom';
224
+
225
+ ReactDOM.render(<App />, document.getElementById('root'));
226
+
227
+ // After: React 18
228
+ import { createRoot } from 'react-dom/client';
229
+
230
+ const root = createRoot(document.getElementById('root'));
231
+ root.render(<App />);
232
+ ```
233
+
234
+ ### Automatic Batching
235
+ ```javascript
236
+ // React 18: All updates are batched
237
+ function handleClick() {
238
+ setCount(c => c + 1);
239
+ setFlag(f => !f);
240
+ // Only one re-render (batched)
241
+ }
242
+
243
+ // Even in async:
244
+ setTimeout(() => {
245
+ setCount(c => c + 1);
246
+ setFlag(f => !f);
247
+ // Still batched in React 18!
248
+ }, 1000);
249
+
250
+ // Opt out if needed
251
+ import { flushSync } from 'react-dom';
252
+
253
+ flushSync(() => {
254
+ setCount(c => c + 1);
255
+ });
256
+ // Re-render happens here
257
+ setFlag(f => !f);
258
+ // Another re-render
259
+ ```
260
+
261
+ ### Transitions
262
+ ```javascript
263
+ import { useState, useTransition } from 'react';
264
+
265
+ function SearchResults() {
266
+ const [query, setQuery] = useState('');
267
+ const [results, setResults] = useState([]);
268
+ const [isPending, startTransition] = useTransition();
269
+
270
+ const handleChange = (e) => {
271
+ // Urgent: Update input immediately
272
+ setQuery(e.target.value);
273
+
274
+ // Non-urgent: Update results (can be interrupted)
275
+ startTransition(() => {
276
+ setResults(searchResults(e.target.value));
277
+ });
278
+ };
279
+
280
+ return (
281
+ <>
282
+ <input value={query} onChange={handleChange} />
283
+ {isPending && <Spinner />}
284
+ <Results data={results} />
285
+ </>
286
+ );
287
+ }
288
+ ```
289
+
290
+ ### Suspense for Data Fetching
291
+ ```javascript
292
+ import { Suspense } from 'react';
293
+
294
+ // Resource-based data fetching (with React 18)
295
+ const resource = fetchProfileData();
296
+
297
+ function ProfilePage() {
298
+ return (
299
+ <Suspense fallback={<Loading />}>
300
+ <ProfileDetails />
301
+ <Suspense fallback={<Loading />}>
302
+ <ProfileTimeline />
303
+ </Suspense>
304
+ </Suspense>
305
+ );
306
+ }
307
+
308
+ function ProfileDetails() {
309
+ // This will suspend if data not ready
310
+ const user = resource.user.read();
311
+ return <h1>{user.name}</h1>;
312
+ }
313
+
314
+ function ProfileTimeline() {
315
+ const posts = resource.posts.read();
316
+ return <Timeline posts={posts} />;
317
+ }
318
+ ```
319
+
320
+ ## Codemods for Automation
321
+
322
+ ### Run React Codemods
323
+ ```bash
324
+ # Install jscodeshift
325
+ npm install -g jscodeshift
326
+
327
+ # React 16.9 codemod (rename unsafe lifecycle methods)
328
+ npx react-codeshift <transform> <path>
329
+
330
+ # Example: Rename UNSAFE_ methods
331
+ npx react-codeshift --parser=tsx \
332
+ --transform=react-codeshift/transforms/rename-unsafe-lifecycles.js \
333
+ src/
334
+
335
+ # Update to new JSX Transform (React 17+)
336
+ npx react-codeshift --parser=tsx \
337
+ --transform=react-codeshift/transforms/new-jsx-transform.js \
338
+ src/
339
+
340
+ # Class to Hooks (third-party)
341
+ npx codemod react/hooks/convert-class-to-function src/
342
+ ```
343
+
344
+ ### Custom Codemod Example
345
+ ```javascript
346
+ // custom-codemod.js
347
+ module.exports = function(file, api) {
348
+ const j = api.jscodeshift;
349
+ const root = j(file.source);
350
+
351
+ // Find setState calls
352
+ root.find(j.CallExpression, {
353
+ callee: {
354
+ type: 'MemberExpression',
355
+ property: { name: 'setState' }
356
+ }
357
+ }).forEach(path => {
358
+ // Transform to useState
359
+ // ... transformation logic
360
+ });
361
+
362
+ return root.toSource();
363
+ };
364
+
365
+ // Run: jscodeshift -t custom-codemod.js src/
366
+ ```
367
+
368
+ ## Performance Optimization
369
+
370
+ ### useMemo and useCallback
371
+ ```javascript
372
+ function ExpensiveComponent({ items, filter }) {
373
+ // Memoize expensive calculation
374
+ const filteredItems = useMemo(() => {
375
+ return items.filter(item => item.category === filter);
376
+ }, [items, filter]);
377
+
378
+ // Memoize callback to prevent child re-renders
379
+ const handleClick = useCallback((id) => {
380
+ console.log('Clicked:', id);
381
+ }, []); // No dependencies, never changes
382
+
383
+ return (
384
+ <List items={filteredItems} onClick={handleClick} />
385
+ );
386
+ }
387
+
388
+ // Child component with memo
389
+ const List = React.memo(({ items, onClick }) => {
390
+ return items.map(item => (
391
+ <Item key={item.id} item={item} onClick={onClick} />
392
+ ));
393
+ });
394
+ ```
395
+
396
+ ### Code Splitting
397
+ ```javascript
398
+ import { lazy, Suspense } from 'react';
399
+
400
+ // Lazy load components
401
+ const Dashboard = lazy(() => import('./Dashboard'));
402
+ const Settings = lazy(() => import('./Settings'));
403
+
404
+ function App() {
405
+ return (
406
+ <Suspense fallback={<Loading />}>
407
+ <Routes>
408
+ <Route path="/dashboard" element={<Dashboard />} />
409
+ <Route path="/settings" element={<Settings />} />
410
+ </Routes>
411
+ </Suspense>
412
+ );
413
+ }
414
+ ```
415
+
416
+ ## TypeScript Migration
417
+
418
+ ```typescript
419
+ // Before: JavaScript
420
+ function Button({ onClick, children }) {
421
+ return <button onClick={onClick}>{children}</button>;
422
+ }
423
+
424
+ // After: TypeScript
425
+ interface ButtonProps {
426
+ onClick: () => void;
427
+ children: React.ReactNode;
428
+ }
429
+
430
+ function Button({ onClick, children }: ButtonProps) {
431
+ return <button onClick={onClick}>{children}</button>;
432
+ }
433
+
434
+ // Generic components
435
+ interface ListProps<T> {
436
+ items: T[];
437
+ renderItem: (item: T) => React.ReactNode;
438
+ }
439
+
440
+ function List<T>({ items, renderItem }: ListProps<T>) {
441
+ return <>{items.map(renderItem)}</>;
442
+ }
443
+ ```
444
+
445
+ ## Migration Checklist
446
+
447
+ ```markdown
448
+ ### Pre-Migration
449
+ - [ ] Update dependencies incrementally (not all at once)
450
+ - [ ] Review breaking changes in release notes
451
+ - [ ] Set up testing suite
452
+ - [ ] Create feature branch
453
+
454
+ ### Class → Hooks Migration
455
+ - [ ] Identify class components to migrate
456
+ - [ ] Start with leaf components (no children)
457
+ - [ ] Convert state to useState
458
+ - [ ] Convert lifecycle to useEffect
459
+ - [ ] Convert context to useContext
460
+ - [ ] Extract custom hooks
461
+ - [ ] Test thoroughly
462
+
463
+ ### React 18 Upgrade
464
+ - [ ] Update to React 17 first (if needed)
465
+ - [ ] Update react and react-dom to 18
466
+ - [ ] Update @types/react if using TypeScript
467
+ - [ ] Change to createRoot API
468
+ - [ ] Test with StrictMode (double invocation)
469
+ - [ ] Address concurrent rendering issues
470
+ - [ ] Adopt Suspense/Transitions where beneficial
471
+
472
+ ### Performance
473
+ - [ ] Identify performance bottlenecks
474
+ - [ ] Add React.memo where appropriate
475
+ - [ ] Use useMemo/useCallback for expensive operations
476
+ - [ ] Implement code splitting
477
+ - [ ] Optimize re-renders
478
+
479
+ ### Testing
480
+ - [ ] Update test utilities (React Testing Library)
481
+ - [ ] Test with React 18 features
482
+ - [ ] Check for warnings in console
483
+ - [ ] Performance testing
484
+ ```
485
+
486
+ ## Resources
487
+
488
+ - **references/breaking-changes.md**: Version-specific breaking changes
489
+ - **references/codemods.md**: Codemod usage guide
490
+ - **references/hooks-migration.md**: Comprehensive hooks patterns
491
+ - **references/concurrent-features.md**: React 18 concurrent features
492
+ - **assets/codemod-config.json**: Codemod configurations
493
+ - **assets/migration-checklist.md**: Step-by-step checklist
494
+ - **scripts/apply-codemods.sh**: Automated codemod script
495
+
496
+ ## Best Practices
497
+
498
+ 1. **Incremental Migration**: Don't migrate everything at once
499
+ 2. **Test Thoroughly**: Comprehensive testing at each step
500
+ 3. **Use Codemods**: Automate repetitive transformations
501
+ 4. **Start Simple**: Begin with leaf components
502
+ 5. **Leverage StrictMode**: Catch issues early
503
+ 6. **Monitor Performance**: Measure before and after
504
+ 7. **Document Changes**: Keep migration log
505
+
506
+ ## Common Pitfalls
507
+
508
+ - Forgetting useEffect dependencies
509
+ - Over-using useMemo/useCallback
510
+ - Not handling cleanup in useEffect
511
+ - Mixing class and functional patterns
512
+ - Ignoring StrictMode warnings
513
+ - Breaking change assumptions