@smartsoft001-mobilems/claude-plugins 2.67.0 → 2.69.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 +4 -0
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow-legacy/.claude-plugin/README.md +143 -0
- package/plugins/flow-legacy/.claude-plugin/merge-permissions.js +80 -0
- package/plugins/flow-legacy/.claude-plugin/plugin.json +5 -0
- package/plugins/flow-legacy/.claude-plugin/settings.template.json +75 -0
- package/plugins/flow-legacy/agents/angular-component-scaffolder.md +323 -0
- package/plugins/flow-legacy/agents/angular-directive-builder.md +258 -0
- package/plugins/flow-legacy/agents/angular-guard-builder.md +322 -0
- package/plugins/flow-legacy/agents/angular-pipe-builder.md +227 -0
- package/plugins/flow-legacy/agents/angular-resolver-builder.md +332 -0
- package/plugins/flow-legacy/agents/angular-service-builder.md +271 -0
- package/plugins/flow-legacy/agents/angular-state-builder.md +473 -0
- package/plugins/flow-legacy/agents/shared-impl-orchestrator.md +161 -0
- package/plugins/flow-legacy/agents/shared-impl-reporter.md +204 -0
- package/plugins/flow-legacy/agents/shared-linear-subtask-iterator.md +187 -0
- package/plugins/flow-legacy/agents/shared-tdd-developer.md +304 -0
- package/plugins/flow-legacy/agents/shared-test-runner.md +131 -0
- package/plugins/flow-legacy/agents/shared-ui-classifier.md +137 -0
- package/plugins/flow-legacy/commands/commit.md +162 -0
- package/plugins/flow-legacy/commands/impl.md +495 -0
- package/plugins/flow-legacy/commands/plan.md +488 -0
- package/plugins/flow-legacy/commands/push.md +470 -0
- package/plugins/flow-legacy/skills/a11y-audit/SKILL.md +214 -0
- package/plugins/flow-legacy/skills/angular-patterns/SKILL.md +361 -0
- package/plugins/flow-legacy/skills/browser-capture/SKILL.md +238 -0
- package/plugins/flow-legacy/skills/debug-helper/SKILL.md +387 -0
- package/plugins/flow-legacy/skills/linear-suggestion/SKILL.md +132 -0
- package/plugins/flow-legacy/skills/maia-files-delete/SKILL.md +59 -0
- package/plugins/flow-legacy/skills/maia-files-upload/SKILL.md +57 -0
- package/plugins/flow-legacy/skills/nx-conventions/SKILL.md +371 -0
- package/plugins/flow-legacy/skills/test-unit/SKILL.md +494 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nx-conventions
|
|
3
|
+
description: Nx 14 monorepo patterns with @nrwl/* packages, workspace organization, and build conventions
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Nx 14 Conventions (Legacy)
|
|
7
|
+
|
|
8
|
+
This skill provides guidance on Nx 14 monorepo patterns for legacy projects using `@nrwl/*` packages.
|
|
9
|
+
|
|
10
|
+
## CRITICAL: Nx 14 vs Modern Nx
|
|
11
|
+
|
|
12
|
+
| Feature | Nx 14 (Legacy) | Nx 21+ (Modern) |
|
|
13
|
+
|---------|---------------|-----------------|
|
|
14
|
+
| Packages | `@nrwl/*` | `@nx/*` |
|
|
15
|
+
| Node.js | 18.x | 20.x / 22.x |
|
|
16
|
+
| Angular | 14.x | 20.x |
|
|
17
|
+
| Config | `workspace.json` or `project.json` | `project.json` |
|
|
18
|
+
|
|
19
|
+
## 1. Workspace Structure
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
/
|
|
23
|
+
├── apps/
|
|
24
|
+
│ ├── web/ # Main Angular 14 application
|
|
25
|
+
│ └── web-e2e/ # Cypress E2E tests
|
|
26
|
+
├── libs/
|
|
27
|
+
│ └── shared/
|
|
28
|
+
│ └── angular/ # Shared Angular library
|
|
29
|
+
├── tools/
|
|
30
|
+
│ ├── specs/ # Project specifications
|
|
31
|
+
│ └── mockups/ # Design mockups
|
|
32
|
+
├── nx.json # Nx workspace configuration
|
|
33
|
+
├── tsconfig.base.json # Base TypeScript config
|
|
34
|
+
└── package.json
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 2. Project Naming
|
|
38
|
+
|
|
39
|
+
| Type | Pattern | Example |
|
|
40
|
+
| ------------------- | ------------------------ | ------------------------------ |
|
|
41
|
+
| Apps | `{name}` | `web`, `api` |
|
|
42
|
+
| E2E | `{app}-e2e` | `web-e2e` |
|
|
43
|
+
| Domain libs | `{domain}-domain` | `museum-objects-domain` |
|
|
44
|
+
| Angular libs | `{domain}-shell-angular` | `museum-objects-shell-angular` |
|
|
45
|
+
| Shared angular libs | `shared-angular` | `shared-angular` |
|
|
46
|
+
|
|
47
|
+
## 3. Common Nx 14 Commands
|
|
48
|
+
|
|
49
|
+
### Development
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Serve application
|
|
53
|
+
nx serve web
|
|
54
|
+
|
|
55
|
+
# Serve with specific configuration
|
|
56
|
+
nx serve web --configuration=development
|
|
57
|
+
|
|
58
|
+
# Build application
|
|
59
|
+
nx build web
|
|
60
|
+
|
|
61
|
+
# Build for production
|
|
62
|
+
nx build web --configuration=production
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Testing
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Run unit tests
|
|
69
|
+
nx test web
|
|
70
|
+
nx test shared-angular
|
|
71
|
+
|
|
72
|
+
# Run tests with coverage
|
|
73
|
+
nx test web --coverage
|
|
74
|
+
|
|
75
|
+
# Run tests in watch mode
|
|
76
|
+
nx test web --watch
|
|
77
|
+
|
|
78
|
+
# Run E2E tests
|
|
79
|
+
nx e2e web-e2e
|
|
80
|
+
|
|
81
|
+
# Open Cypress
|
|
82
|
+
nx open-cypress web-e2e
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Linting
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Lint project
|
|
89
|
+
nx lint web
|
|
90
|
+
nx lint shared-angular
|
|
91
|
+
|
|
92
|
+
# Lint all affected projects
|
|
93
|
+
nx affected --target=lint
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Building
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Build single project
|
|
100
|
+
nx build web
|
|
101
|
+
|
|
102
|
+
# Build affected projects
|
|
103
|
+
nx affected --target=build
|
|
104
|
+
|
|
105
|
+
# Show dependency graph
|
|
106
|
+
nx graph
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## 4. Affected Commands
|
|
110
|
+
|
|
111
|
+
Run tasks only on changed projects:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Test affected
|
|
115
|
+
nx affected --target=test
|
|
116
|
+
|
|
117
|
+
# Lint affected
|
|
118
|
+
nx affected --target=lint
|
|
119
|
+
|
|
120
|
+
# Build affected
|
|
121
|
+
nx affected --target=build
|
|
122
|
+
|
|
123
|
+
# Specify base branch
|
|
124
|
+
nx affected --target=test --base=main
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## 5. Project Configuration (Nx 14)
|
|
128
|
+
|
|
129
|
+
### project.json (Nx 14 format)
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"name": "web",
|
|
134
|
+
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
135
|
+
"projectType": "application",
|
|
136
|
+
"sourceRoot": "apps/web/src",
|
|
137
|
+
"prefix": "app",
|
|
138
|
+
"targets": {
|
|
139
|
+
"build": {
|
|
140
|
+
"executor": "@angular-devkit/build-angular:browser",
|
|
141
|
+
"options": {
|
|
142
|
+
"outputPath": "dist/apps/web",
|
|
143
|
+
"index": "apps/web/src/index.html",
|
|
144
|
+
"main": "apps/web/src/main.ts",
|
|
145
|
+
"polyfills": "apps/web/src/polyfills.ts",
|
|
146
|
+
"tsConfig": "apps/web/tsconfig.app.json",
|
|
147
|
+
"assets": ["apps/web/src/favicon.ico", "apps/web/src/assets"],
|
|
148
|
+
"styles": ["apps/web/src/styles.scss"],
|
|
149
|
+
"scripts": []
|
|
150
|
+
},
|
|
151
|
+
"configurations": {
|
|
152
|
+
"production": {
|
|
153
|
+
"budgets": [
|
|
154
|
+
{
|
|
155
|
+
"type": "initial",
|
|
156
|
+
"maximumWarning": "2MB",
|
|
157
|
+
"maximumError": "4MB"
|
|
158
|
+
}
|
|
159
|
+
],
|
|
160
|
+
"outputHashing": "all",
|
|
161
|
+
"optimization": true
|
|
162
|
+
},
|
|
163
|
+
"development": {
|
|
164
|
+
"buildOptimizer": false,
|
|
165
|
+
"optimization": false,
|
|
166
|
+
"vendorChunk": true,
|
|
167
|
+
"extractLicenses": false,
|
|
168
|
+
"sourceMap": true
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"defaultConfiguration": "development"
|
|
172
|
+
},
|
|
173
|
+
"serve": {
|
|
174
|
+
"executor": "@angular-devkit/build-angular:dev-server",
|
|
175
|
+
"options": {
|
|
176
|
+
"browserTarget": "web:build",
|
|
177
|
+
"port": 4200
|
|
178
|
+
},
|
|
179
|
+
"configurations": {
|
|
180
|
+
"production": {
|
|
181
|
+
"browserTarget": "web:build:production"
|
|
182
|
+
},
|
|
183
|
+
"development": {
|
|
184
|
+
"browserTarget": "web:build:development"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"defaultConfiguration": "development"
|
|
188
|
+
},
|
|
189
|
+
"test": {
|
|
190
|
+
"executor": "@nrwl/jest:jest",
|
|
191
|
+
"options": {
|
|
192
|
+
"jestConfig": "apps/web/jest.config.ts",
|
|
193
|
+
"passWithNoTests": true
|
|
194
|
+
},
|
|
195
|
+
"outputs": ["{workspaceRoot}/coverage/apps/web"]
|
|
196
|
+
},
|
|
197
|
+
"lint": {
|
|
198
|
+
"executor": "@nrwl/linter:eslint",
|
|
199
|
+
"options": {
|
|
200
|
+
"lintFilePatterns": [
|
|
201
|
+
"apps/web/src/**/*.ts",
|
|
202
|
+
"apps/web/src/**/*.html"
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## 6. Path Mappings
|
|
211
|
+
|
|
212
|
+
In `tsconfig.base.json`:
|
|
213
|
+
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"compilerOptions": {
|
|
217
|
+
"paths": {
|
|
218
|
+
"@shared/angular": ["libs/shared/angular/src/index.ts"],
|
|
219
|
+
"@shared/angular/*": ["libs/shared/angular/src/lib/*"]
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Usage:
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
import { SharedModule } from '@shared/angular';
|
|
229
|
+
import { MyService } from '@shared/angular/services';
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## 7. Library Types
|
|
233
|
+
|
|
234
|
+
### Feature Library
|
|
235
|
+
|
|
236
|
+
Contains smart components, routes, and business logic.
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
// libs/museum/feature-objects/src/index.ts
|
|
240
|
+
export * from './lib/objects.module';
|
|
241
|
+
export * from './lib/containers';
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### UI Library
|
|
245
|
+
|
|
246
|
+
Contains presentational (dumb) components only.
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
// libs/shared/ui/src/index.ts
|
|
250
|
+
export * from './lib/button/button.component';
|
|
251
|
+
export * from './lib/card/card.component';
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Data Access Library
|
|
255
|
+
|
|
256
|
+
Contains services, state management, and API calls.
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
// libs/museum/data-access/src/index.ts
|
|
260
|
+
export * from './lib/services/objects.service';
|
|
261
|
+
export * from './lib/+state/objects.facade';
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Utility Library
|
|
265
|
+
|
|
266
|
+
Contains pure functions, helpers, and utilities.
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
// libs/shared/util-forms/src/index.ts
|
|
270
|
+
export * from './lib/validators';
|
|
271
|
+
export * from './lib/form-helpers';
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## 8. Caching
|
|
275
|
+
|
|
276
|
+
Nx caches task results. Configure in `nx.json`:
|
|
277
|
+
|
|
278
|
+
```json
|
|
279
|
+
{
|
|
280
|
+
"targetDefaults": {
|
|
281
|
+
"build": {
|
|
282
|
+
"cache": true,
|
|
283
|
+
"dependsOn": ["^build"]
|
|
284
|
+
},
|
|
285
|
+
"test": {
|
|
286
|
+
"cache": true
|
|
287
|
+
},
|
|
288
|
+
"lint": {
|
|
289
|
+
"cache": true
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## 9. Task Dependencies
|
|
296
|
+
|
|
297
|
+
Define task execution order:
|
|
298
|
+
|
|
299
|
+
```json
|
|
300
|
+
{
|
|
301
|
+
"targetDefaults": {
|
|
302
|
+
"build": {
|
|
303
|
+
"dependsOn": ["^build"]
|
|
304
|
+
},
|
|
305
|
+
"test": {
|
|
306
|
+
"dependsOn": ["build"]
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
- `^build` means build dependencies first
|
|
313
|
+
- `build` means build this project first
|
|
314
|
+
|
|
315
|
+
## 10. Generators (Nx 14 / @nrwl)
|
|
316
|
+
|
|
317
|
+
Create new code with generators:
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
# Generate Angular component
|
|
321
|
+
nx g @nrwl/angular:component my-component --project=shared-angular
|
|
322
|
+
|
|
323
|
+
# Generate Angular service
|
|
324
|
+
nx g @nrwl/angular:service my-service --project=shared-angular
|
|
325
|
+
|
|
326
|
+
# Generate library
|
|
327
|
+
nx g @nrwl/angular:library my-lib --directory=shared
|
|
328
|
+
|
|
329
|
+
# Generate module
|
|
330
|
+
nx g @nrwl/angular:module my-module --project=shared-angular
|
|
331
|
+
|
|
332
|
+
# Dry run (preview changes)
|
|
333
|
+
nx g @nrwl/angular:component my-component --dry-run
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
## 11. CI/CD Integration
|
|
337
|
+
|
|
338
|
+
```yaml
|
|
339
|
+
# Example GitHub Actions
|
|
340
|
+
- name: Install dependencies
|
|
341
|
+
run: npm ci
|
|
342
|
+
|
|
343
|
+
- name: Run affected lint
|
|
344
|
+
run: npx nx affected --target=lint --base=origin/main
|
|
345
|
+
|
|
346
|
+
- name: Run affected test
|
|
347
|
+
run: npx nx affected --target=test --base=origin/main
|
|
348
|
+
|
|
349
|
+
- name: Run affected build
|
|
350
|
+
run: npx nx affected --target=build --base=origin/main --configuration=production
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## 12. Best Practices (Nx 14)
|
|
354
|
+
|
|
355
|
+
1. **Keep apps thin** - Business logic in libraries
|
|
356
|
+
2. **Use affected** - Only build/test what changed
|
|
357
|
+
3. **Leverage caching** - Let Nx cache task results
|
|
358
|
+
4. **Consistent naming** - Follow naming conventions
|
|
359
|
+
5. **Define boundaries** - Use tags and constraints
|
|
360
|
+
6. **Path aliases** - Use `@scope/lib` imports
|
|
361
|
+
7. **Use @nrwl packages** - NOT @nx packages in Nx 14
|
|
362
|
+
|
|
363
|
+
## 13. Package Differences
|
|
364
|
+
|
|
365
|
+
| Feature | @nrwl (Nx 14) | @nx (Modern) |
|
|
366
|
+
|---------|--------------|--------------|
|
|
367
|
+
| Jest | `@nrwl/jest:jest` | `@nx/jest:jest` |
|
|
368
|
+
| Linter | `@nrwl/linter:eslint` | `@nx/eslint:lint` |
|
|
369
|
+
| Angular | `@nrwl/angular:*` | `@nx/angular:*` |
|
|
370
|
+
| Node | `@nrwl/node:*` | `@nx/node:*` |
|
|
371
|
+
| Cypress | `@nrwl/cypress:*` | `@nx/cypress:*` |
|