@zimezone/z-command 1.1.0 → 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 (182) hide show
  1. package/package.json +4 -1
  2. package/templates/agents/api-documenter.agent.md +161 -0
  3. package/templates/agents/architect-review.agent.md +146 -0
  4. package/templates/agents/arm-cortex-expert.agent.md +288 -0
  5. package/templates/agents/backend-architect.agent.md +309 -0
  6. package/templates/agents/backend-security-coder.agent.md +152 -0
  7. package/templates/agents/bash-pro.agent.md +285 -0
  8. package/templates/agents/c-pro.agent.md +35 -0
  9. package/templates/agents/c4-code.agent.md +320 -0
  10. package/templates/agents/c4-component.agent.md +227 -0
  11. package/templates/agents/c4-container.agent.md +248 -0
  12. package/templates/agents/c4-context.agent.md +235 -0
  13. package/templates/agents/conductor-validator.agent.md +245 -0
  14. package/templates/agents/csharp-pro.agent.md +38 -0
  15. package/templates/agents/customer-support.agent.md +148 -0
  16. package/templates/agents/database-admin.agent.md +142 -0
  17. package/templates/agents/database-architect.agent.md +238 -0
  18. package/templates/agents/database-optimizer.agent.md +144 -0
  19. package/templates/agents/debugger.agent.md +30 -0
  20. package/templates/agents/deployment-engineer.agent.md +0 -0
  21. package/templates/agents/devops-troubleshooter.agent.md +138 -0
  22. package/templates/agents/django-pro.agent.md +159 -0
  23. package/templates/agents/docs-architect.agent.md +77 -0
  24. package/templates/agents/dotnet-architect.agent.md +175 -0
  25. package/templates/agents/dx-optimizer.agent.md +63 -0
  26. package/templates/agents/elixir-pro.agent.md +38 -0
  27. package/templates/agents/error-detective.agent.md +32 -0
  28. package/templates/agents/event-sourcing-architect.agent.md +42 -0
  29. package/templates/agents/fastapi-pro.agent.md +171 -0
  30. package/templates/agents/firmware-analyst.agent.md +330 -0
  31. package/templates/agents/frontend-security-coder.agent.md +149 -0
  32. package/templates/agents/haskell-pro.agent.md +37 -0
  33. package/templates/agents/hr-pro.agent.md +105 -0
  34. package/templates/agents/incident-responder.agent.md +190 -0
  35. package/templates/agents/ios-developer.agent.md +198 -0
  36. package/templates/agents/java-pro.agent.md +156 -0
  37. package/templates/agents/javascript-pro.agent.md +35 -0
  38. package/templates/agents/julia-pro.agent.md +187 -0
  39. package/templates/agents/legal-advisor.agent.md +49 -0
  40. package/templates/agents/malware-analyst.agent.md +272 -0
  41. package/templates/agents/mermaid-expert.agent.md +39 -0
  42. package/templates/agents/minecraft-bukkit-pro.agent.md +104 -0
  43. package/templates/agents/mobile-security-coder.agent.md +163 -0
  44. package/templates/agents/monorepo-architect.agent.md +44 -0
  45. package/templates/agents/observability-engineer.agent.md +228 -0
  46. package/templates/agents/performance-engineer.agent.md +167 -0
  47. package/templates/agents/php-pro.agent.md +43 -0
  48. package/templates/agents/posix-shell-pro.agent.md +284 -0
  49. package/templates/agents/quant-analyst.agent.md +32 -0
  50. package/templates/agents/reference-builder.agent.md +167 -0
  51. package/templates/agents/reverse-engineer.agent.md +202 -0
  52. package/templates/agents/risk-manager.agent.md +41 -0
  53. package/templates/agents/ruby-pro.agent.md +35 -0
  54. package/templates/agents/rust-pro.agent.md +156 -0
  55. package/templates/agents/sales-automator.agent.md +35 -0
  56. package/templates/agents/scala-pro.agent.md +60 -0
  57. package/templates/agents/search-specialist.agent.md +59 -0
  58. package/templates/agents/security-auditor.agent.md +138 -0
  59. package/templates/agents/seo-authority-builder.agent.md +116 -0
  60. package/templates/agents/seo-cannibalization-detector.agent.md +103 -0
  61. package/templates/agents/seo-content-auditor.agent.md +63 -0
  62. package/templates/agents/seo-content-planner.agent.md +88 -0
  63. package/templates/agents/seo-content-refresher.agent.md +98 -0
  64. package/templates/agents/seo-content-writer.agent.md +76 -0
  65. package/templates/agents/seo-keyword-strategist.agent.md +75 -0
  66. package/templates/agents/seo-meta-optimizer.agent.md +72 -0
  67. package/templates/agents/seo-snippet-hunter.agent.md +94 -0
  68. package/templates/agents/seo-structure-architect.agent.md +88 -0
  69. package/templates/agents/service-mesh-expert.agent.md +41 -0
  70. package/templates/agents/sql-pro.agent.md +146 -0
  71. package/templates/agents/tdd-orchestrator.agent.md +183 -0
  72. package/templates/agents/temporal-python-pro.agent.md +349 -0
  73. package/templates/agents/terraform-specialist.agent.md +137 -0
  74. package/templates/agents/test-automator.agent.md +203 -0
  75. package/templates/agents/threat-modeling-expert.agent.md +44 -0
  76. package/templates/agents/tutorial-engineer.agent.md +118 -0
  77. package/templates/agents/ui-ux-designer.agent.md +188 -0
  78. package/templates/agents/ui-visual-validator.agent.md +192 -0
  79. package/templates/agents/vector-database-engineer.agent.md +43 -0
  80. package/templates/skills/angular-migration/SKILL.md +410 -0
  81. package/templates/skills/api-design-principles/SKILL.md +528 -0
  82. package/templates/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  83. package/templates/skills/api-design-principles/assets/rest-api-template.py +182 -0
  84. package/templates/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  85. package/templates/skills/api-design-principles/references/rest-best-practices.md +408 -0
  86. package/templates/skills/architecture-decision-records/SKILL.md +428 -0
  87. package/templates/skills/architecture-patterns/SKILL.md +494 -0
  88. package/templates/skills/async-python-patterns/SKILL.md +694 -0
  89. package/templates/skills/auth-implementation-patterns/SKILL.md +634 -0
  90. package/templates/skills/changelog-automation/SKILL.md +552 -0
  91. package/templates/skills/code-review-excellence/SKILL.md +520 -0
  92. package/templates/skills/competitive-landscape/SKILL.md +479 -0
  93. package/templates/skills/context-driven-development/SKILL.md +385 -0
  94. package/templates/skills/cost-optimization/SKILL.md +274 -0
  95. package/templates/skills/cqrs-implementation/SKILL.md +554 -0
  96. package/templates/skills/data-quality-frameworks/SKILL.md +587 -0
  97. package/templates/skills/data-storytelling/SKILL.md +453 -0
  98. package/templates/skills/database-migration/SKILL.md +424 -0
  99. package/templates/skills/dbt-transformation-patterns/SKILL.md +561 -0
  100. package/templates/skills/debugging-strategies/SKILL.md +527 -0
  101. package/templates/skills/defi-protocol-templates/SKILL.md +454 -0
  102. package/templates/skills/dependency-upgrade/SKILL.md +409 -0
  103. package/templates/skills/deployment-pipeline-design/SKILL.md +359 -0
  104. package/templates/skills/distributed-tracing/SKILL.md +438 -0
  105. package/templates/skills/dotnet-backend-patterns/SKILL.md +815 -0
  106. package/templates/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
  107. package/templates/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
  108. package/templates/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
  109. package/templates/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
  110. package/templates/skills/e2e-testing-patterns/SKILL.md +547 -0
  111. package/templates/skills/employment-contract-templates/SKILL.md +507 -0
  112. package/templates/skills/error-handling-patterns/SKILL.md +636 -0
  113. package/templates/skills/event-store-design/SKILL.md +437 -0
  114. package/templates/skills/fastapi-templates/SKILL.md +567 -0
  115. package/templates/skills/git-advanced-workflows/SKILL.md +400 -0
  116. package/templates/skills/github-actions-templates/SKILL.md +333 -0
  117. package/templates/skills/go-concurrency-patterns/SKILL.md +655 -0
  118. package/templates/skills/grafana-dashboards/SKILL.md +369 -0
  119. package/templates/skills/helm-chart-scaffolding/SKILL.md +544 -0
  120. package/templates/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  121. package/templates/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  122. package/templates/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  123. package/templates/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  124. package/templates/skills/javascript-testing-patterns/SKILL.md +1025 -0
  125. package/templates/skills/langchain-architecture/SKILL.md +338 -0
  126. package/templates/skills/llm-evaluation/SKILL.md +471 -0
  127. package/templates/skills/microservices-patterns/SKILL.md +595 -0
  128. package/templates/skills/modern-javascript-patterns/SKILL.md +911 -0
  129. package/templates/skills/monorepo-management/SKILL.md +622 -0
  130. package/templates/skills/nextjs-app-router-patterns/SKILL.md +544 -0
  131. package/templates/skills/nodejs-backend-patterns/SKILL.md +1020 -0
  132. package/templates/skills/nx-workspace-patterns/SKILL.md +452 -0
  133. package/templates/skills/openapi-spec-generation/SKILL.md +1028 -0
  134. package/templates/skills/paypal-integration/SKILL.md +467 -0
  135. package/templates/skills/pci-compliance/SKILL.md +466 -0
  136. package/templates/skills/postgresql/SKILL.md +204 -0
  137. package/templates/skills/projection-patterns/SKILL.md +490 -0
  138. package/templates/skills/prometheus-configuration/SKILL.md +392 -0
  139. package/templates/skills/prompt-engineering-patterns/SKILL.md +201 -0
  140. package/templates/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  141. package/templates/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
  142. package/templates/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
  143. package/templates/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
  144. package/templates/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
  145. package/templates/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
  146. package/templates/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
  147. package/templates/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  148. package/templates/skills/python-packaging/SKILL.md +870 -0
  149. package/templates/skills/python-performance-optimization/SKILL.md +869 -0
  150. package/templates/skills/python-testing-patterns/SKILL.md +907 -0
  151. package/templates/skills/rag-implementation/SKILL.md +403 -0
  152. package/templates/skills/react-modernization/SKILL.md +513 -0
  153. package/templates/skills/react-native-architecture/SKILL.md +671 -0
  154. package/templates/skills/react-state-management/SKILL.md +429 -0
  155. package/templates/skills/risk-metrics-calculation/SKILL.md +555 -0
  156. package/templates/skills/rust-async-patterns/SKILL.md +517 -0
  157. package/templates/skills/secrets-management/SKILL.md +346 -0
  158. package/templates/skills/security-requirement-extraction/SKILL.md +677 -0
  159. package/templates/skills/shellcheck-configuration/SKILL.md +454 -0
  160. package/templates/skills/similarity-search-patterns/SKILL.md +558 -0
  161. package/templates/skills/slo-implementation/SKILL.md +329 -0
  162. package/templates/skills/sql-optimization-patterns/SKILL.md +493 -0
  163. package/templates/skills/stripe-integration/SKILL.md +442 -0
  164. package/templates/skills/tailwind-design-system/SKILL.md +666 -0
  165. package/templates/skills/temporal-python-testing/SKILL.md +158 -0
  166. package/templates/skills/temporal-python-testing/resources/integration-testing.md +455 -0
  167. package/templates/skills/temporal-python-testing/resources/local-setup.md +553 -0
  168. package/templates/skills/temporal-python-testing/resources/replay-testing.md +462 -0
  169. package/templates/skills/temporal-python-testing/resources/unit-testing.md +328 -0
  170. package/templates/skills/terraform-module-library/SKILL.md +249 -0
  171. package/templates/skills/terraform-module-library/references/aws-modules.md +63 -0
  172. package/templates/skills/threat-mitigation-mapping/SKILL.md +745 -0
  173. package/templates/skills/track-management/SKILL.md +593 -0
  174. package/templates/skills/typescript-advanced-types/SKILL.md +717 -0
  175. package/templates/skills/uv-package-manager/SKILL.md +831 -0
  176. package/templates/skills/vector-index-tuning/SKILL.md +521 -0
  177. package/templates/skills/wcag-audit-patterns/SKILL.md +555 -0
  178. package/templates/skills/workflow-orchestration-patterns/SKILL.md +316 -0
  179. package/templates/skills/workflow-patterns/SKILL.md +623 -0
  180. package/templates/agents/game-developer.agent.md +0 -57
  181. package/templates/agents/kubernetes-specialist.agent.md +0 -56
  182. package/templates/agents/market-researcher.agent.md +0 -47
@@ -0,0 +1,410 @@
1
+ ---
2
+ name: angular-migration
3
+ description: Migrate from AngularJS to Angular using hybrid mode, incremental component rewriting, and dependency injection updates. Use when upgrading AngularJS applications, planning framework migrations, or modernizing legacy Angular code.
4
+ ---
5
+
6
+ # Angular Migration
7
+
8
+ Master AngularJS to Angular migration, including hybrid apps, component conversion, dependency injection changes, and routing migration.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Migrating AngularJS (1.x) applications to Angular (2+)
13
+ - Running hybrid AngularJS/Angular applications
14
+ - Converting directives to components
15
+ - Modernizing dependency injection
16
+ - Migrating routing systems
17
+ - Updating to latest Angular versions
18
+ - Implementing Angular best practices
19
+
20
+ ## Migration Strategies
21
+
22
+ ### 1. Big Bang (Complete Rewrite)
23
+ - Rewrite entire app in Angular
24
+ - Parallel development
25
+ - Switch over at once
26
+ - **Best for:** Small apps, green field projects
27
+
28
+ ### 2. Incremental (Hybrid Approach)
29
+ - Run AngularJS and Angular side-by-side
30
+ - Migrate feature by feature
31
+ - ngUpgrade for interop
32
+ - **Best for:** Large apps, continuous delivery
33
+
34
+ ### 3. Vertical Slice
35
+ - Migrate one feature completely
36
+ - New features in Angular, maintain old in AngularJS
37
+ - Gradually replace
38
+ - **Best for:** Medium apps, distinct features
39
+
40
+ ## Hybrid App Setup
41
+
42
+ ```typescript
43
+ // main.ts - Bootstrap hybrid app
44
+ import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
45
+ import { UpgradeModule } from '@angular/upgrade/static';
46
+ import { AppModule } from './app/app.module';
47
+
48
+ platformBrowserDynamic()
49
+ .bootstrapModule(AppModule)
50
+ .then(platformRef => {
51
+ const upgrade = platformRef.injector.get(UpgradeModule);
52
+ // Bootstrap AngularJS
53
+ upgrade.bootstrap(document.body, ['myAngularJSApp'], { strictDi: true });
54
+ });
55
+ ```
56
+
57
+ ```typescript
58
+ // app.module.ts
59
+ import { NgModule } from '@angular/core';
60
+ import { BrowserModule } from '@angular/platform-browser';
61
+ import { UpgradeModule } from '@angular/upgrade/static';
62
+
63
+ @NgModule({
64
+ imports: [
65
+ BrowserModule,
66
+ UpgradeModule
67
+ ]
68
+ })
69
+ export class AppModule {
70
+ constructor(private upgrade: UpgradeModule) {}
71
+
72
+ ngDoBootstrap() {
73
+ // Bootstrapped manually in main.ts
74
+ }
75
+ }
76
+ ```
77
+
78
+ ## Component Migration
79
+
80
+ ### AngularJS Controller → Angular Component
81
+ ```javascript
82
+ // Before: AngularJS controller
83
+ angular.module('myApp').controller('UserController', function($scope, UserService) {
84
+ $scope.user = {};
85
+
86
+ $scope.loadUser = function(id) {
87
+ UserService.getUser(id).then(function(user) {
88
+ $scope.user = user;
89
+ });
90
+ };
91
+
92
+ $scope.saveUser = function() {
93
+ UserService.saveUser($scope.user);
94
+ };
95
+ });
96
+ ```
97
+
98
+ ```typescript
99
+ // After: Angular component
100
+ import { Component, OnInit } from '@angular/core';
101
+ import { UserService } from './user.service';
102
+
103
+ @Component({
104
+ selector: 'app-user',
105
+ template: `
106
+ <div>
107
+ <h2>{{ user.name }}</h2>
108
+ <button (click)="saveUser()">Save</button>
109
+ </div>
110
+ `
111
+ })
112
+ export class UserComponent implements OnInit {
113
+ user: any = {};
114
+
115
+ constructor(private userService: UserService) {}
116
+
117
+ ngOnInit() {
118
+ this.loadUser(1);
119
+ }
120
+
121
+ loadUser(id: number) {
122
+ this.userService.getUser(id).subscribe(user => {
123
+ this.user = user;
124
+ });
125
+ }
126
+
127
+ saveUser() {
128
+ this.userService.saveUser(this.user);
129
+ }
130
+ }
131
+ ```
132
+
133
+ ### AngularJS Directive → Angular Component
134
+ ```javascript
135
+ // Before: AngularJS directive
136
+ angular.module('myApp').directive('userCard', function() {
137
+ return {
138
+ restrict: 'E',
139
+ scope: {
140
+ user: '=',
141
+ onDelete: '&'
142
+ },
143
+ template: `
144
+ <div class="card">
145
+ <h3>{{ user.name }}</h3>
146
+ <button ng-click="onDelete()">Delete</button>
147
+ </div>
148
+ `
149
+ };
150
+ });
151
+ ```
152
+
153
+ ```typescript
154
+ // After: Angular component
155
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
156
+
157
+ @Component({
158
+ selector: 'app-user-card',
159
+ template: `
160
+ <div class="card">
161
+ <h3>{{ user.name }}</h3>
162
+ <button (click)="delete.emit()">Delete</button>
163
+ </div>
164
+ `
165
+ })
166
+ export class UserCardComponent {
167
+ @Input() user: any;
168
+ @Output() delete = new EventEmitter<void>();
169
+ }
170
+
171
+ // Usage: <app-user-card [user]="user" (delete)="handleDelete()"></app-user-card>
172
+ ```
173
+
174
+ ## Service Migration
175
+
176
+ ```javascript
177
+ // Before: AngularJS service
178
+ angular.module('myApp').factory('UserService', function($http) {
179
+ return {
180
+ getUser: function(id) {
181
+ return $http.get('/api/users/' + id);
182
+ },
183
+ saveUser: function(user) {
184
+ return $http.post('/api/users', user);
185
+ }
186
+ };
187
+ });
188
+ ```
189
+
190
+ ```typescript
191
+ // After: Angular service
192
+ import { Injectable } from '@angular/core';
193
+ import { HttpClient } from '@angular/common/http';
194
+ import { Observable } from 'rxjs';
195
+
196
+ @Injectable({
197
+ providedIn: 'root'
198
+ })
199
+ export class UserService {
200
+ constructor(private http: HttpClient) {}
201
+
202
+ getUser(id: number): Observable<any> {
203
+ return this.http.get(`/api/users/${id}`);
204
+ }
205
+
206
+ saveUser(user: any): Observable<any> {
207
+ return this.http.post('/api/users', user);
208
+ }
209
+ }
210
+ ```
211
+
212
+ ## Dependency Injection Changes
213
+
214
+ ### Downgrading Angular → AngularJS
215
+ ```typescript
216
+ // Angular service
217
+ import { Injectable } from '@angular/core';
218
+
219
+ @Injectable({ providedIn: 'root' })
220
+ export class NewService {
221
+ getData() {
222
+ return 'data from Angular';
223
+ }
224
+ }
225
+
226
+ // Make available to AngularJS
227
+ import { downgradeInjectable } from '@angular/upgrade/static';
228
+
229
+ angular.module('myApp')
230
+ .factory('newService', downgradeInjectable(NewService));
231
+
232
+ // Use in AngularJS
233
+ angular.module('myApp').controller('OldController', function(newService) {
234
+ console.log(newService.getData());
235
+ });
236
+ ```
237
+
238
+ ### Upgrading AngularJS → Angular
239
+ ```typescript
240
+ // AngularJS service
241
+ angular.module('myApp').factory('oldService', function() {
242
+ return {
243
+ getData: function() {
244
+ return 'data from AngularJS';
245
+ }
246
+ };
247
+ });
248
+
249
+ // Make available to Angular
250
+ import { InjectionToken } from '@angular/core';
251
+
252
+ export const OLD_SERVICE = new InjectionToken<any>('oldService');
253
+
254
+ @NgModule({
255
+ providers: [
256
+ {
257
+ provide: OLD_SERVICE,
258
+ useFactory: (i: any) => i.get('oldService'),
259
+ deps: ['$injector']
260
+ }
261
+ ]
262
+ })
263
+
264
+ // Use in Angular
265
+ @Component({...})
266
+ export class NewComponent {
267
+ constructor(@Inject(OLD_SERVICE) private oldService: any) {
268
+ console.log(this.oldService.getData());
269
+ }
270
+ }
271
+ ```
272
+
273
+ ## Routing Migration
274
+
275
+ ```javascript
276
+ // Before: AngularJS routing
277
+ angular.module('myApp').config(function($routeProvider) {
278
+ $routeProvider
279
+ .when('/users', {
280
+ template: '<user-list></user-list>'
281
+ })
282
+ .when('/users/:id', {
283
+ template: '<user-detail></user-detail>'
284
+ });
285
+ });
286
+ ```
287
+
288
+ ```typescript
289
+ // After: Angular routing
290
+ import { NgModule } from '@angular/core';
291
+ import { RouterModule, Routes } from '@angular/router';
292
+
293
+ const routes: Routes = [
294
+ { path: 'users', component: UserListComponent },
295
+ { path: 'users/:id', component: UserDetailComponent }
296
+ ];
297
+
298
+ @NgModule({
299
+ imports: [RouterModule.forRoot(routes)],
300
+ exports: [RouterModule]
301
+ })
302
+ export class AppRoutingModule {}
303
+ ```
304
+
305
+ ## Forms Migration
306
+
307
+ ```html
308
+ <!-- Before: AngularJS -->
309
+ <form name="userForm" ng-submit="saveUser()">
310
+ <input type="text" ng-model="user.name" required>
311
+ <input type="email" ng-model="user.email" required>
312
+ <button ng-disabled="userForm.$invalid">Save</button>
313
+ </form>
314
+ ```
315
+
316
+ ```typescript
317
+ // After: Angular (Template-driven)
318
+ @Component({
319
+ template: `
320
+ <form #userForm="ngForm" (ngSubmit)="saveUser()">
321
+ <input type="text" [(ngModel)]="user.name" name="name" required>
322
+ <input type="email" [(ngModel)]="user.email" name="email" required>
323
+ <button [disabled]="userForm.invalid">Save</button>
324
+ </form>
325
+ `
326
+ })
327
+
328
+ // Or Reactive Forms (preferred)
329
+ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
330
+
331
+ @Component({
332
+ template: `
333
+ <form [formGroup]="userForm" (ngSubmit)="saveUser()">
334
+ <input formControlName="name">
335
+ <input formControlName="email">
336
+ <button [disabled]="userForm.invalid">Save</button>
337
+ </form>
338
+ `
339
+ })
340
+ export class UserFormComponent {
341
+ userForm: FormGroup;
342
+
343
+ constructor(private fb: FormBuilder) {
344
+ this.userForm = this.fb.group({
345
+ name: ['', Validators.required],
346
+ email: ['', [Validators.required, Validators.email]]
347
+ });
348
+ }
349
+
350
+ saveUser() {
351
+ console.log(this.userForm.value);
352
+ }
353
+ }
354
+ ```
355
+
356
+ ## Migration Timeline
357
+
358
+ ```
359
+ Phase 1: Setup (1-2 weeks)
360
+ - Install Angular CLI
361
+ - Set up hybrid app
362
+ - Configure build tools
363
+ - Set up testing
364
+
365
+ Phase 2: Infrastructure (2-4 weeks)
366
+ - Migrate services
367
+ - Migrate utilities
368
+ - Set up routing
369
+ - Migrate shared components
370
+
371
+ Phase 3: Feature Migration (varies)
372
+ - Migrate feature by feature
373
+ - Test thoroughly
374
+ - Deploy incrementally
375
+
376
+ Phase 4: Cleanup (1-2 weeks)
377
+ - Remove AngularJS code
378
+ - Remove ngUpgrade
379
+ - Optimize bundle
380
+ - Final testing
381
+ ```
382
+
383
+ ## Resources
384
+
385
+ - **references/hybrid-mode.md**: Hybrid app patterns
386
+ - **references/component-migration.md**: Component conversion guide
387
+ - **references/dependency-injection.md**: DI migration strategies
388
+ - **references/routing.md**: Routing migration
389
+ - **assets/hybrid-bootstrap.ts**: Hybrid app template
390
+ - **assets/migration-timeline.md**: Project planning
391
+ - **scripts/analyze-angular-app.sh**: App analysis script
392
+
393
+ ## Best Practices
394
+
395
+ 1. **Start with Services**: Migrate services first (easier)
396
+ 2. **Incremental Approach**: Feature-by-feature migration
397
+ 3. **Test Continuously**: Test at every step
398
+ 4. **Use TypeScript**: Migrate to TypeScript early
399
+ 5. **Follow Style Guide**: Angular style guide from day 1
400
+ 6. **Optimize Later**: Get it working, then optimize
401
+ 7. **Document**: Keep migration notes
402
+
403
+ ## Common Pitfalls
404
+
405
+ - Not setting up hybrid app correctly
406
+ - Migrating UI before logic
407
+ - Ignoring change detection differences
408
+ - Not handling scope properly
409
+ - Mixing patterns (AngularJS + Angular)
410
+ - Inadequate testing