@mf-toolkit/shared-inspector 0.4.0 → 0.5.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/README.md CHANGED
@@ -6,81 +6,108 @@
6
6
 
7
7
  **Stop debugging Module Federation in production.**
8
8
 
9
- `shared` config breaks in silence — wrong versions ship, 10× React ends up in the bundle, singleton chains collapse, and teams get paged for "Invalid hook call" on Friday night. `shared-inspector` catches these mistakes at build time. Every finding comes with a risk score and a ready-to-paste fix.
9
+ `shared` config breaks in silence — wrong versions ship, duplicate React copies can end up in the bundle, singleton negotiation fails, and teams get paged for "Invalid hook call" on Friday night. `shared-inspector` catches these mistakes at build time. Every finding comes with a risk score and a ready-to-paste fix.
10
10
 
11
11
  ## The problem
12
12
 
13
13
  Module Federation teams manually manage `shared` config and make three kinds of mistakes:
14
14
 
15
15
  - **Over-sharing** — packages listed in `shared` that the microfrontend never imports. Creates artificial version coupling between independent teams.
16
- - **Under-sharing** — packages used by both host and remote but missing from `shared`. Each microfrontend bundles its own copy (10× React = 10× 130 KB).
16
+ - **Under-sharing** — packages used by both host and remote but missing from `shared`. Each microfrontend may bundle its own copy (e.g. multiple React instances, each ~130 KB).
17
17
  - **Version mismatch** — `requiredVersion` doesn't match the installed version. Module Federation silently falls back to a local bundle. For packages with global state (React, styled-components) this causes "Invalid hook call" in production.
18
18
 
19
19
  Existing tools (webpack-bundle-analyzer, source-map-explorer) show *what ended up in the bundle*, not *why shared config is suboptimal*. Different questions.
20
20
 
21
- ## Installation
21
+ ## Why not bundle analyzer?
22
22
 
23
- ```bash
24
- npm install --save-dev @mf-toolkit/shared-inspector
25
- ```
23
+ Bundle analyzers (webpack-bundle-analyzer, source-map-explorer, stats.json inspection) answer a different question: *what is in the output?* They are useful for auditing final bundle size, but they don't model Module Federation's shared dependency negotiation.
26
24
 
27
- ## CLI
25
+ | Question | Bundle analyzer | shared-inspector |
26
+ |----------|----------------|-----------------|
27
+ | Which packages are large? | ✅ | — |
28
+ | Is React duplicated across MFs? | Visible after the fact | ✅ Detected before build ships |
29
+ | Is `requiredVersion` out of sync with the installed version? | ✗ | ✅ |
30
+ | Is a package marked `singleton` in one MF but not another? | ✗ | ✅ |
31
+ | Which packages are declared `shared` but never imported? | ✗ | ✅ |
32
+ | Which used packages are missing from `shared` entirely? | ✗ | ✅ |
33
+ | Cross-MF version conflicts across teams? | ✗ | ✅ via federation manifests |
28
34
 
29
- The fastest way to get started no config file, no webpack required:
35
+ In short: bundle analyzers are useful for post-build inspection. `shared-inspector` is focused on the `shared` config itself catching misconfiguration at build time and explaining what the runtime consequences would be.
30
36
 
31
- ```bash
32
- # Analyse the current project (auto-reads name from package.json)
33
- npx @mf-toolkit/shared-inspector
37
+ ## Example
34
38
 
35
- # Step-by-step interactive wizard answers guide you through all options
36
- npx @mf-toolkit/shared-inspector --interactive
39
+ A `shell` host app (React 18) and a `checkout` remote have been developed by separate teams. Their `shared` configs have drifted:
37
40
 
38
- # Pass options directly
39
- npx @mf-toolkit/shared-inspector --source ./src --shared react,react-dom --fail-on mismatch
41
+ ```js
42
+ // shell webpack.config.js
43
+ shared: {
44
+ react: { singleton: true, requiredVersion: '^18.2.0' },
45
+ 'react-dom': { singleton: true, requiredVersion: '^18.2.0' },
46
+ zustand: { singleton: true },
47
+ }
40
48
 
41
- # Load shared config from a JSON file
42
- npx @mf-toolkit/shared-inspector --shared ./shared-config.json --write-manifest
49
+ // checkout webpack.config.js
50
+ shared: {
51
+ react: { singleton: true, requiredVersion: '^17.0.2' }, // ← stale version
52
+ 'react-dom': { singleton: true, requiredVersion: '^17.0.2' },
53
+ lodash: {}, // ← never imported
54
+ // zustand: missing — checkout imports it, but it's not in shared
55
+ }
56
+ ```
57
+
58
+ Running `npx @mf-toolkit/shared-inspector` in the `checkout` project:
43
59
 
44
- # Cross-MF federation analysis from saved manifests
45
- npx @mf-toolkit/shared-inspector federation checkout.json catalog.json cart.json
46
60
  ```
61
+ [MfSharedInspector] checkout (depth: local-graph, 34 files scanned)
62
+ ────────────────────────────────────────────────────────────
63
+
64
+ ⚠ Version Mismatch — react
65
+ configured: ^17.0.2 | installed: 17.0.2
66
+ → Risk: Invalid hook call, broken context across MFs
67
+ 💡 Fix:
68
+ shared: {
69
+ react: { singleton: true, requiredVersion: "^18.2.0" }
70
+ }
47
71
 
48
- ### Interactive wizard
72
+ → Not Shared — zustand (8 imports in 5 files)
73
+ → Risk: Each MF may get its own store instance — state changes may not propagate across MFs
74
+ 💡 Fix:
75
+ shared: {
76
+ zustand: { singleton: true }
77
+ }
49
78
 
79
+ ✗ Unused Shared — lodash
80
+ 0 imports, shared without singleton
81
+ → Wastes bundle negotiation overhead with no benefit
82
+ 💡 Fix: Remove "lodash" from shared config
83
+
84
+ ────────────────────────────────────────────────────────────
85
+ Score: 69/100 🟠 RISKY
50
86
  ```
51
- $ npx @mf-toolkit/shared-inspector --interactive
52
87
 
53
- [MfSharedInspector] Interactive setup
88
+ **After manually updating the config based on the suggestions above** — `react` version aligned, `zustand` added to `shared`, `lodash` removed:
54
89
 
55
- Source directories to scan (default: ./src):
56
- Scan depth — direct or local-graph (default: local-graph):
57
- Shared packages — comma-separated names or path to .json (empty to skip): react,react-dom,mobx
58
- Path to tsconfig.json for alias resolution (empty to skip):
59
- Workspace packages to exclude, comma-separated (empty to skip):
60
- Fail build on findings — mismatch / unused / any / none (default: none): mismatch
61
- Write project-manifest.json? (y/N): n
90
+ ```
91
+ Score: 100/100 ✅ HEALTHY
62
92
  ```
63
93
 
64
- ### CLI reference
94
+ The cross-team federation report also clears: `shell` and `checkout` now negotiate a single React instance and a single Zustand store at runtime.
65
95
 
66
- | Flag | Default | Description |
67
- |------|---------|-------------|
68
- | `--source, -s <dirs>` | `./src` | Source dirs to scan, comma-separated |
69
- | `--depth <depth>` | `local-graph` | Scan depth: `direct` \| `local-graph` |
70
- | `--shared <packages\|file>` | — | Comma-separated package names or path to `.json` config |
71
- | `--tsconfig <path>` | — | tsconfig.json for path alias resolution |
72
- | `--workspace-packages <pkgs>` | — | Comma-separated workspace packages to exclude |
73
- | `--name <name>` | auto from `package.json` | Project name |
74
- | `--fail-on <rule>` || Exit 1 when findings match: `mismatch` \| `unused` \| `any` |
75
- | `--write-manifest` | `false` | Write `project-manifest.json` to output dir |
76
- | `--output-dir <dir>` | `.` | Output directory for manifest |
77
- | `--interactive, -i` | — | Launch step-by-step wizard |
78
- | `--version, -v` | — | Print version and exit |
79
- | `--help, -h` | — | Show help |
96
+ ## Installation
97
+
98
+ ```bash
99
+ npm install --save-dev @mf-toolkit/shared-inspector
100
+ ```
101
+
102
+ ## Quick start
103
+
104
+ Run against any MF project no config file needed:
80
105
 
81
- ## Terminal output
106
+ ```bash
107
+ npx @mf-toolkit/shared-inspector
108
+ ```
82
109
 
83
- Each finding is rendered as a diagnostic card: what's wrong, what breaks at runtime, and a ready-to-paste fix.
110
+ The tool scans `./src`, reads installed versions from `package.json`, and prints a diagnostic report. Each finding includes what's wrong, what breaks at runtime, and a ready-to-paste fix:
84
111
 
85
112
  ```
86
113
  mf-inspector v0.4.0
@@ -104,7 +131,7 @@ Each finding is rendered as a diagnostic card: what's wrong, what breaks at runt
104
131
  💡 Fix: Remove "lodash" from shared config
105
132
 
106
133
  → Not Shared — mobx (12 imports in 8 files via re-export in src/shared/index.ts)
107
- → Risk: Each MF gets its own MobX — observables and reactions won't sync between MFs
134
+ → Risk: Each MF may get its own MobX instance — observables and reactions can fail to sync between MFs
108
135
  💡 Fix:
109
136
  shared: {
110
137
  mobx: { singleton: true }
@@ -123,7 +150,7 @@ Total: 12 shared, 10 used, 1 unused, 1 candidates, 1 mismatch, 0 eager risks
123
150
 
124
151
  Colors are auto-applied in TTY terminals and disabled in CI / piped output (`NO_COLOR` / `TERM=dumb` respected).
125
152
 
126
- ## Risk scoring
153
+ ### Risk scoring
127
154
 
128
155
  Every report ends with a score out of 100:
129
156
 
@@ -140,7 +167,43 @@ Every report ends with a score out of 100:
140
167
  | 40–69 | 🟠 RISKY |
141
168
  | 0–39 | 🔴 CRITICAL |
142
169
 
143
- Use `scoreProjectReport` / `scoreFederationReport` programmatically to integrate with dashboards or custom CI gates:
170
+ ## CI mode
171
+
172
+ Integrate into build pipelines to fail on findings, gate on score, or emit manifests for later federation analysis.
173
+
174
+ ### Failing the build
175
+
176
+ Use `--fail-on` to exit with code 1 when specific findings are detected:
177
+
178
+ ```bash
179
+ npx @mf-toolkit/shared-inspector --source ./src --shared react,react-dom --fail-on mismatch
180
+ ```
181
+
182
+ With the webpack plugin:
183
+
184
+ ```typescript
185
+ import { MfSharedInspectorPlugin } from '@mf-toolkit/shared-inspector/webpack';
186
+
187
+ module.exports = {
188
+ plugins: [
189
+ new ModuleFederationPlugin({
190
+ name: 'checkout',
191
+ shared: { react: { singleton: true }, mobx: { singleton: true } },
192
+ }),
193
+
194
+ // sharedConfig not needed — auto-extracted from ModuleFederationPlugin above
195
+ new MfSharedInspectorPlugin({
196
+ sourceDirs: ['./src'],
197
+ failOn: 'mismatch', // 'mismatch' | 'unused' | 'any'
198
+ warn: true,
199
+ }),
200
+ ],
201
+ };
202
+ ```
203
+
204
+ ### Gating on score
205
+
206
+ Use `scoreProjectReport` programmatically to set custom thresholds:
144
207
 
145
208
  ```typescript
146
209
  import { analyzeProject, scoreProjectReport } from '@mf-toolkit/shared-inspector';
@@ -154,9 +217,121 @@ if (score < 70) {
154
217
  }
155
218
  ```
156
219
 
157
- ## Quick start
220
+ ### Writing manifests for federation analysis
221
+
222
+ Each MF can emit a `project-manifest.json` as a build artifact to enable cross-team analysis in a later step:
223
+
224
+ ```bash
225
+ npx @mf-toolkit/shared-inspector --shared ./shared-config.json --write-manifest
226
+ ```
227
+
228
+ With the webpack plugin:
229
+
230
+ ```typescript
231
+ new MfSharedInspectorPlugin({
232
+ sourceDirs: ['./src'],
233
+ writeManifest: true, // writes project-manifest.json for CI aggregation
234
+ warn: true,
235
+ })
236
+ ```
237
+
238
+ Upload the manifest as a CI artifact:
239
+
240
+ ```yaml
241
+ # .github/workflows/build.yml
242
+ jobs:
243
+ build-checkout:
244
+ steps:
245
+ - run: npm run build # MfSharedInspectorPlugin writes project-manifest.json
246
+ - uses: actions/upload-artifact@v4
247
+ with: { name: manifest-checkout, path: project-manifest.json }
248
+ ```
249
+
250
+ ## Federation mode
251
+
252
+ Once each MF has emitted its manifest, aggregate them to detect cross-team conflicts: version mismatches, singleton inconsistencies, and shared-config gaps across host and remotes.
253
+
254
+ Manifests can be local files or HTTP/HTTPS URLs — making federation analysis work across separate repositories without manual file passing.
158
255
 
159
- ### Programmatic API (two-phase)
256
+ ### CLI
257
+
258
+ ```bash
259
+ # Local files (monorepo or pre-downloaded)
260
+ npx @mf-toolkit/shared-inspector federation checkout.json catalog.json cart.json
261
+
262
+ # URLs — fetch manifests directly from remote storage
263
+ npx @mf-toolkit/shared-inspector federation \
264
+ https://storage.example.com/manifests/checkout.json \
265
+ https://storage.example.com/manifests/cart.json \
266
+ https://storage.example.com/manifests/catalog.json
267
+
268
+ # Mix of local files and URLs
269
+ npx @mf-toolkit/shared-inspector federation checkout.json https://storage.example.com/cart.json
270
+ ```
271
+
272
+ ### Polyrepo setup
273
+
274
+ In a polyrepo, each team owns a separate repository. The recommended workflow:
275
+
276
+ **Step 1 — each MF repo publishes its manifest on every build:**
277
+
278
+ ```yaml
279
+ # .github/workflows/build.yml (in each MF repo)
280
+ jobs:
281
+ build:
282
+ steps:
283
+ - run: npm run build # MfSharedInspectorPlugin writes project-manifest.json
284
+ - uses: actions/upload-artifact@v4
285
+ with: { name: manifest-${{ github.event.repository.name }}, path: project-manifest.json }
286
+ ```
287
+
288
+ **Step 2 — a dedicated federation-check job downloads all manifests and runs analysis:**
289
+
290
+ ```yaml
291
+ # .github/workflows/federation-check.yml (in a shared/platform repo)
292
+ jobs:
293
+ federation-check:
294
+ steps:
295
+ - uses: actions/download-artifact@v4
296
+ with: { name: manifest-checkout, github-token: ${{ secrets.GITHUB_TOKEN }}, repository: org/checkout, run-id: ... }
297
+ - uses: actions/download-artifact@v4
298
+ with: { name: manifest-cart, github-token: ${{ secrets.GITHUB_TOKEN }}, repository: org/cart, run-id: ... }
299
+ - run: |
300
+ npx @mf-toolkit/shared-inspector federation \
301
+ manifest-checkout/project-manifest.json \
302
+ manifest-cart/project-manifest.json
303
+ ```
304
+
305
+ Alternatively, upload manifests to a shared HTTP storage (S3, CDN, object store) and use URL inputs directly — no artifact coordination required:
306
+
307
+ ```yaml
308
+ - run: |
309
+ npx @mf-toolkit/shared-inspector federation \
310
+ https://manifests.internal/checkout/latest.json \
311
+ https://manifests.internal/cart/latest.json
312
+ ```
313
+
314
+ ### Programmatic
315
+
316
+ ```typescript
317
+ import { analyzeFederation, formatFederationReport, scoreFederationReport } from '@mf-toolkit/shared-inspector';
318
+
319
+ const report = analyzeFederation([checkoutManifest, catalogManifest, cartManifest]);
320
+ const { score, label } = scoreFederationReport(report);
321
+
322
+ console.log(formatFederationReport(report));
323
+ // ⚠ Version Conflict — react
324
+ // checkout: ^17.0.0
325
+ // catalog: ^18.0.0
326
+ // → Risk: MF singleton negotiation may silently load the wrong version → Invalid hook call
327
+ // 💡 Fix: shared: { react: { singleton: true, requiredVersion: "^18.0.0" } }
328
+ //
329
+ // Score: 60/100 🟠 RISKY
330
+ ```
331
+
332
+ ## Programmatic API
333
+
334
+ ### Two-phase API
160
335
 
161
336
  ```typescript
162
337
  import { buildProjectManifest, analyzeProject, formatReport } from '@mf-toolkit/shared-inspector';
@@ -203,30 +378,6 @@ const report = await inspect({
203
378
  });
204
379
  ```
205
380
 
206
- ### Webpack plugin
207
-
208
- `sharedConfig` is optional — the plugin auto-extracts it from `ModuleFederationPlugin` when not provided:
209
-
210
- ```typescript
211
- import { MfSharedInspectorPlugin } from '@mf-toolkit/shared-inspector/webpack';
212
-
213
- module.exports = {
214
- plugins: [
215
- new ModuleFederationPlugin({
216
- name: 'checkout',
217
- shared: { react: { singleton: true }, mobx: { singleton: true } },
218
- }),
219
-
220
- // sharedConfig not needed — auto-extracted from ModuleFederationPlugin above
221
- new MfSharedInspectorPlugin({
222
- sourceDirs: ['./src'],
223
- warn: true,
224
- writeManifest: true, // writes project-manifest.json for CI aggregation
225
- }),
226
- ],
227
- };
228
- ```
229
-
230
381
  ## Analysis depth
231
382
 
232
383
  | Depth | What it finds | Speed |
@@ -262,42 +413,58 @@ await buildProjectManifest({
262
413
 
263
414
  Without `tsconfigPath`, `@components/Button` is treated as an external package and packages imported inside it are invisible in `local-graph` mode.
264
415
 
265
- ## CI pipeline: project → federation
416
+ ## Interactive wizard
266
417
 
267
- Each microfrontend generates a manifest as a build artifact, then they're aggregated for cross-team analysis:
418
+ Not sure which flags to pass? Run the step-by-step wizard:
268
419
 
269
- ```yaml
270
- # .github/workflows/build.yml
271
- jobs:
272
- build-checkout:
273
- steps:
274
- - run: npm run build # MfSharedInspectorPlugin writes project-manifest.json
275
- - uses: actions/upload-artifact@v4
276
- with: { name: manifest-checkout, path: project-manifest.json }
277
420
  ```
421
+ $ npx @mf-toolkit/shared-inspector --interactive
278
422
 
279
- ```typescript
280
- import { analyzeFederation, formatFederationReport, scoreFederationReport } from '@mf-toolkit/shared-inspector';
281
-
282
- const report = analyzeFederation([checkoutManifest, catalogManifest, cartManifest]);
283
- const { score, label } = scoreFederationReport(report);
423
+ [MfSharedInspector] Interactive setup
284
424
 
285
- console.log(formatFederationReport(report));
286
- // ⚠ Version Conflict react
287
- // checkout: ^17.0.0
288
- // catalog: ^18.0.0
289
- // → Risk: MF singleton negotiation will silently load wrong version → Invalid hook call
290
- // 💡 Fix: shared: { react: { singleton: true, requiredVersion: "^18.0.0" } }
291
- //
292
- // Score: 60/100 🟠 RISKY
425
+ Source directories to scan (default: ./src):
426
+ Scan depthdirect or local-graph (default: local-graph):
427
+ Shared packages — comma-separated names or path to .json (empty to skip): react,react-dom,mobx
428
+ Path to tsconfig.json for alias resolution (empty to skip):
429
+ Workspace packages to exclude, comma-separated (empty to skip):
430
+ Fail build on findings mismatch / unused / any / none (default: none): mismatch
431
+ Write project-manifest.json? (y/N): n
293
432
  ```
294
433
 
295
- Or use the CLI directly:
434
+ ## CLI reference
435
+
436
+ | Flag | Default | Description |
437
+ |------|---------|-------------|
438
+ | `--source, -s <dirs>` | `./src` | Source dirs to scan, comma-separated |
439
+ | `--depth <depth>` | `local-graph` | Scan depth: `direct` \| `local-graph` |
440
+ | `--shared <packages\|file>` | — | Comma-separated package names or path to `.json` config |
441
+ | `--tsconfig <path>` | — | tsconfig.json for path alias resolution |
442
+ | `--workspace-packages <pkgs>` | — | Comma-separated workspace packages to exclude |
443
+ | `--name <name>` | auto from `package.json` | Project name |
444
+ | `--kind <kind>` | `unknown` | Project role: `host` \| `remote` \| `unknown` |
445
+ | `--fail-on <rule>` | — | Exit 1 when findings match: `mismatch` \| `unused` \| `any` |
446
+ | `--min-score <n>` | — | Exit 1 when score is below n (0–100) |
447
+ | `--json` | `false` | Output findings as JSON (suppresses spinner and banner) |
448
+ | `--write-manifest` | `false` | Write `project-manifest.json` to output dir |
449
+ | `--output-dir <dir>` | `.` | Output directory for manifest |
450
+ | `--interactive, -i` | — | Launch step-by-step wizard |
451
+ | `--version, -v` | — | Print version and exit |
452
+ | `--help, -h` | — | Show help |
453
+
454
+ **Federation subcommand:**
296
455
 
297
456
  ```bash
298
- npx @mf-toolkit/shared-inspector federation checkout.json catalog.json cart.json
457
+ mf-inspector federation <manifest1> [manifest2...] [--fail-on <rule>] [--min-score <n>] [--json]
299
458
  ```
300
459
 
460
+ Each manifest can be a local file path or an `http(s)://` URL. Local paths are resolved relative to the current working directory.
461
+
462
+ | Flag | Description |
463
+ |------|-------------|
464
+ | `--fail-on <rule>` | Exit 1 when findings match: `mismatch` (version conflicts) \| `unused` (ghost shares) \| `any` |
465
+ | `--min-score <n>` | Exit 1 when federation score is below n |
466
+ | `--json` | Output findings as JSON |
467
+
301
468
  ## API reference
302
469
 
303
470
  ### `buildProjectManifest(options)`
@@ -345,6 +512,17 @@ Accepts N `ProjectManifest` objects (one per microfrontend) and returns a `Feder
345
512
  |--------|------|---------|-------------|
346
513
  | `alwaysShared` | `string[]` | `['react','react-dom']` | Exclude from ghost/gap detection |
347
514
 
515
+ ### `writeReport(report, outputPath)` / `writeManifest(manifest, outputPath)`
516
+
517
+ Write a `ProjectReport` or `ProjectManifest` to a JSON file. Parent directories are created automatically.
518
+
519
+ ```typescript
520
+ import { writeReport, writeManifest } from '@mf-toolkit/shared-inspector';
521
+
522
+ await writeReport(report, './dist/shared-report.json');
523
+ await writeManifest(manifest, './dist/project-manifest.json');
524
+ ```
525
+
348
526
  ### `MfSharedInspectorPlugin` options
349
527
 
350
528
  Extends all `buildProjectManifest` options (except `name`, auto-resolved from compiler) plus:
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAKnD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAuFjD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAS/E"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAMnD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CA0HjD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAS/E"}
package/dist/cli/args.js CHANGED
@@ -2,6 +2,7 @@ import { readFileSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
3
  const VALID_DEPTHS = new Set(['direct', 'local-graph']);
4
4
  const VALID_FAIL_ON = new Set(['mismatch', 'unused', 'any']);
5
+ const VALID_KINDS = new Set(['host', 'remote', 'unknown']);
5
6
  export function parseArgs(argv) {
6
7
  const args = {
7
8
  command: 'project',
@@ -12,16 +13,35 @@ export function parseArgs(argv) {
12
13
  writeManifest: false,
13
14
  outputDir: '.',
14
15
  manifestFiles: [],
16
+ json: false,
15
17
  };
16
18
  if (argv[0] === 'federation') {
17
19
  args.command = 'federation';
18
20
  for (let i = 1; i < argv.length; i++) {
19
- if (argv[i] === '--help' || argv[i] === '-h') {
21
+ const arg = argv[i];
22
+ if (arg === '--help' || arg === '-h') {
20
23
  args.command = 'help';
21
24
  break;
22
25
  }
23
- if (!argv[i].startsWith('-')) {
24
- args.manifestFiles.push(argv[i]);
26
+ if (arg === '--fail-on') {
27
+ const val = argv[++i] ?? '';
28
+ if (!VALID_FAIL_ON.has(val)) {
29
+ throw new Error(`Invalid --fail-on value "${val}". Expected: mismatch | unused | any`);
30
+ }
31
+ args.failOn = val;
32
+ }
33
+ else if (arg === '--min-score') {
34
+ const val = Number(argv[++i]);
35
+ if (isNaN(val) || val < 0 || val > 100) {
36
+ throw new Error(`Invalid --min-score value. Expected a number between 0 and 100`);
37
+ }
38
+ args.minScore = val;
39
+ }
40
+ else if (arg === '--json') {
41
+ args.json = true;
42
+ }
43
+ else if (!arg.startsWith('-')) {
44
+ args.manifestFiles.push(arg);
25
45
  }
26
46
  }
27
47
  return args;
@@ -70,6 +90,22 @@ export function parseArgs(argv) {
70
90
  args.failOn = val;
71
91
  break;
72
92
  }
93
+ case '--min-score': {
94
+ const val = Number(argv[++i]);
95
+ if (isNaN(val) || val < 0 || val > 100) {
96
+ throw new Error(`Invalid --min-score value. Expected a number between 0 and 100`);
97
+ }
98
+ args.minScore = val;
99
+ break;
100
+ }
101
+ case '--kind': {
102
+ const val = argv[++i] ?? '';
103
+ if (!VALID_KINDS.has(val)) {
104
+ throw new Error(`Invalid --kind value "${val}". Expected: host | remote | unknown`);
105
+ }
106
+ args.kind = val;
107
+ break;
108
+ }
73
109
  case '--write-manifest':
74
110
  args.writeManifest = true;
75
111
  break;
@@ -79,6 +115,9 @@ export function parseArgs(argv) {
79
115
  case '--name':
80
116
  args.name = argv[++i];
81
117
  break;
118
+ case '--json':
119
+ args.json = true;
120
+ break;
82
121
  }
83
122
  }
84
123
  if (!args.interactive && args.sourceDirs.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const HELP = "Usage:\n mf-inspector [options] Analyse project shared config\n mf-inspector --interactive Step-by-step interactive wizard\n mf-inspector federation <manifest> ... Cross-MF federation analysis\n\nProject options:\n --source, -s <dirs> Source dirs to scan, comma-separated (default: ./src)\n --depth <depth> Scan depth: direct | local-graph (default: local-graph)\n --shared <packages|file> Comma-separated package names or path to .json config\n --tsconfig <path> tsconfig.json for path alias resolution\n --workspace-packages <pkgs> Comma-separated workspace packages to exclude\n --name <name> Project name (default: auto from package.json)\n --fail-on <rule> Exit 1 when findings match: mismatch | unused | any\n --write-manifest Write project-manifest.json to output dir\n --output-dir <dir> Output directory for manifest (default: .)\n --interactive, -i Launch step-by-step wizard instead of flags\n --version, -v Print version and exit\n --help, -h Show this help\n\nFederation:\n mf-inspector federation checkout.json catalog.json cart.json\n\nExamples:\n mf-inspector\n mf-inspector --interactive\n mf-inspector --source ./src --shared react,react-dom --fail-on mismatch\n mf-inspector --shared ./shared-config.json --write-manifest\n mf-inspector federation ./manifests/checkout.json ./manifests/catalog.json\n";
1
+ export declare const HELP = "Usage:\n mf-inspector [options] Analyse project shared config\n mf-inspector --interactive Step-by-step interactive wizard\n mf-inspector federation <manifest> ... Cross-MF federation analysis\n\nProject options:\n --source, -s <dirs> Source dirs to scan, comma-separated (default: ./src)\n --depth <depth> Scan depth: direct | local-graph (default: local-graph)\n --shared <packages|file> Comma-separated package names or path to .json config\n --tsconfig <path> tsconfig.json for path alias resolution\n --workspace-packages <pkgs> Comma-separated workspace packages to exclude\n --name <name> Project name (default: auto from package.json)\n --kind <kind> Project role: host | remote | unknown (default: unknown)\n --fail-on <rule> Exit 1 when findings match: mismatch | unused | any\n --min-score <n> Exit 1 when score is below n (0\u2013100)\n --json Output findings as JSON (suppresses spinner and banner)\n --write-manifest Write project-manifest.json to output dir\n --output-dir <dir> Output directory for manifest (default: .)\n --interactive, -i Launch step-by-step wizard instead of flags\n --version, -v Print version and exit\n --help, -h Show this help\n\nFederation options:\n --fail-on <rule> Exit 1 when findings match: mismatch | unused | any\n --min-score <n> Exit 1 when federation score is below n (0\u2013100)\n --json Output findings as JSON\n\nFederation:\n mf-inspector federation checkout.json catalog.json cart.json\n mf-inspector federation https://cdn.example.com/checkout.json https://cdn.example.com/cart.json\n mf-inspector federation checkout.json https://cdn.example.com/cart.json --fail-on mismatch\n\nExamples:\n mf-inspector\n mf-inspector --interactive\n mf-inspector --source ./src --shared react,react-dom --fail-on mismatch\n mf-inspector --source ./src --kind host --min-score 80\n mf-inspector --shared ./shared-config.json --write-manifest\n mf-inspector federation ./manifests/checkout.json ./manifests/catalog.json --fail-on any\n";
2
2
  //# sourceMappingURL=help.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,4+CA4BhB,CAAC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,wuEAuChB,CAAC"}
package/dist/cli/help.js CHANGED
@@ -10,21 +10,32 @@ Project options:
10
10
  --tsconfig <path> tsconfig.json for path alias resolution
11
11
  --workspace-packages <pkgs> Comma-separated workspace packages to exclude
12
12
  --name <name> Project name (default: auto from package.json)
13
+ --kind <kind> Project role: host | remote | unknown (default: unknown)
13
14
  --fail-on <rule> Exit 1 when findings match: mismatch | unused | any
15
+ --min-score <n> Exit 1 when score is below n (0–100)
16
+ --json Output findings as JSON (suppresses spinner and banner)
14
17
  --write-manifest Write project-manifest.json to output dir
15
18
  --output-dir <dir> Output directory for manifest (default: .)
16
19
  --interactive, -i Launch step-by-step wizard instead of flags
17
20
  --version, -v Print version and exit
18
21
  --help, -h Show this help
19
22
 
23
+ Federation options:
24
+ --fail-on <rule> Exit 1 when findings match: mismatch | unused | any
25
+ --min-score <n> Exit 1 when federation score is below n (0–100)
26
+ --json Output findings as JSON
27
+
20
28
  Federation:
21
29
  mf-inspector federation checkout.json catalog.json cart.json
30
+ mf-inspector federation https://cdn.example.com/checkout.json https://cdn.example.com/cart.json
31
+ mf-inspector federation checkout.json https://cdn.example.com/cart.json --fail-on mismatch
22
32
 
23
33
  Examples:
24
34
  mf-inspector
25
35
  mf-inspector --interactive
26
36
  mf-inspector --source ./src --shared react,react-dom --fail-on mismatch
37
+ mf-inspector --source ./src --kind host --min-score 80
27
38
  mf-inspector --shared ./shared-config.json --write-manifest
28
- mf-inspector federation ./manifests/checkout.json ./manifests/catalog.json
39
+ mf-inspector federation ./manifests/checkout.json ./manifests/catalog.json --fail-on any
29
40
  `;
30
41
  //# sourceMappingURL=help.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BnB,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCnB,CAAC"}
package/dist/cli/index.js CHANGED
@@ -43,7 +43,8 @@ export async function main(argv, write = (s) => process.stdout.write(s), prompt)
43
43
  write(`@mf-toolkit/shared-inspector ${version}\n`);
44
44
  return 0;
45
45
  }
46
- printBanner(write, version);
46
+ if (!args.json)
47
+ printBanner(write, version);
47
48
  if (args.command === 'federation') {
48
49
  return runFederation(args, write);
49
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-federation.d.ts","sourceRoot":"","sources":["../../src/cli/run-federation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,wBAAsB,aAAa,CACjC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACzB,OAAO,CAAC,MAAM,CAAC,CAmCjB"}
1
+ {"version":3,"file":"run-federation.d.ts","sourceRoot":"","sources":["../../src/cli/run-federation.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAiB1C,wBAAsB,aAAa,CACjC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACzB,OAAO,CAAC,MAAM,CAAC,CAkDjB"}
@@ -2,26 +2,45 @@ import { readFileSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
3
  import { analyzeFederation } from '../analyzer/analyze-federation.js';
4
4
  import { formatFederationReport } from '../reporter/format-federation-report.js';
5
- import { createSpinner } from './spinner.js';
5
+ import { scoreFederationReport } from '../reporter/scoring.js';
6
+ import { createSpinner, createNullSpinner } from './spinner.js';
6
7
  import { colorizeReport } from './colorize-report.js';
8
+ function isUrl(source) {
9
+ return source.startsWith('http://') || source.startsWith('https://');
10
+ }
11
+ async function loadManifestContent(source) {
12
+ if (isUrl(source)) {
13
+ const res = await fetch(source);
14
+ if (!res.ok) {
15
+ throw new Error(`HTTP ${res.status} ${res.statusText}`);
16
+ }
17
+ return res.text();
18
+ }
19
+ return readFileSync(resolve(process.cwd(), source), 'utf-8');
20
+ }
7
21
  export async function runFederation(args, write) {
8
22
  if (args.manifestFiles.length === 0) {
9
23
  write('Error: federation command requires at least one manifest file\n');
10
- write('Usage: mf-inspector federation <manifest1.json> [manifest2.json...]\n');
24
+ write('Usage: mf-inspector federation <manifest1.json|url> [manifest2.json|url...]\n');
11
25
  return 1;
12
26
  }
13
- const spinner = createSpinner();
27
+ const spinner = args.json ? createNullSpinner() : createSpinner();
14
28
  spinner.start(`Loading ${args.manifestFiles.length} manifest${args.manifestFiles.length > 1 ? 's' : ''}`);
15
29
  const manifests = [];
16
- for (const file of args.manifestFiles) {
17
- const filePath = resolve(process.cwd(), file);
30
+ for (const source of args.manifestFiles) {
18
31
  let content;
19
32
  try {
20
- content = readFileSync(filePath, 'utf-8');
33
+ content = await loadManifestContent(source);
21
34
  }
22
- catch {
35
+ catch (err) {
23
36
  spinner.stop();
24
- write(`Error: cannot read file "${file}"\n`);
37
+ const reason = err instanceof Error ? err.message : String(err);
38
+ if (isUrl(source)) {
39
+ write(`Error: cannot fetch "${source}": ${reason}\n`);
40
+ }
41
+ else {
42
+ write(`Error: cannot read file "${source}"\n`);
43
+ }
25
44
  return 1;
26
45
  }
27
46
  try {
@@ -29,13 +48,33 @@ export async function runFederation(args, write) {
29
48
  }
30
49
  catch {
31
50
  spinner.stop();
32
- write(`Error: "${file}" is not valid JSON\n`);
51
+ write(`Error: "${source}" is not valid JSON\n`);
33
52
  return 1;
34
53
  }
35
54
  }
36
55
  spinner.succeed(`Loaded ${manifests.length} manifest${manifests.length > 1 ? 's' : ''}`);
37
56
  const report = analyzeFederation(manifests);
38
- write(colorizeReport(formatFederationReport(report)));
57
+ const score = scoreFederationReport(report);
58
+ if (args.json) {
59
+ write(JSON.stringify({ ...report, score }, null, 2) + '\n');
60
+ }
61
+ else {
62
+ write(colorizeReport(formatFederationReport(report)));
63
+ }
64
+ if (args.failOn && shouldFailFederation(report, args.failOn))
65
+ return 1;
66
+ if (args.minScore !== undefined && score.score < args.minScore)
67
+ return 1;
39
68
  return 0;
40
69
  }
70
+ function shouldFailFederation(report, failOn) {
71
+ switch (failOn) {
72
+ case 'mismatch': return report.versionConflicts.length > 0;
73
+ case 'unused': return report.ghostShares.length > 0;
74
+ case 'any': return (report.versionConflicts.length > 0 ||
75
+ report.singletonMismatches.length > 0 ||
76
+ report.hostGaps.length > 0 ||
77
+ report.ghostShares.length > 0);
78
+ }
79
+ }
41
80
  //# sourceMappingURL=run-federation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-federation.js","sourceRoot":"","sources":["../../src/cli/run-federation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAa,EACb,KAA0B;IAE1B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACzE,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC/E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC,MAAM,YAAY,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1G,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,CAAC,4BAA4B,IAAI,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,CAAC,WAAW,IAAI,uBAAuB,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,UAAU,SAAS,CAAC,MAAM,YAAY,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzF,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC5C,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"run-federation.js","sourceRoot":"","sources":["../../src/cli/run-federation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-project.d.ts","sourceRoot":"","sources":["../../src/cli/run-project.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAUhG;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACzB,OAAO,CAAC,MAAM,CAAC,CA0CjB"}
1
+ {"version":3,"file":"run-project.d.ts","sourceRoot":"","sources":["../../src/cli/run-project.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAUhG;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACzB,OAAO,CAAC,MAAM,CAAC,CAkDjB"}
@@ -4,7 +4,8 @@ import { buildProjectManifest } from '../collector/build-project-manifest.js';
4
4
  import { analyzeProject } from '../analyzer/analyze-project.js';
5
5
  import { formatReport } from '../reporter/format-report.js';
6
6
  import { writeManifest } from '../reporter/write-report.js';
7
- import { createSpinner } from './spinner.js';
7
+ import { scoreProjectReport } from '../reporter/scoring.js';
8
+ import { createSpinner, createNullSpinner } from './spinner.js';
8
9
  import { colorizeReport } from './colorize-report.js';
9
10
  export function shouldFail(report, failOn) {
10
11
  if (failOn === 'mismatch')
@@ -28,7 +29,7 @@ export async function runProject(args, write) {
28
29
  name = 'project';
29
30
  }
30
31
  }
31
- const spinner = createSpinner();
32
+ const spinner = args.json ? createNullSpinner() : createSpinner();
32
33
  spinner.start(`Scanning ${args.sourceDirs.join(', ')}`);
33
34
  const manifest = await buildProjectManifest({
34
35
  name,
@@ -37,21 +38,31 @@ export async function runProject(args, write) {
37
38
  sharedConfig: args.sharedConfig,
38
39
  tsconfigPath: args.tsconfigPath,
39
40
  workspacePackages: args.workspacePackages,
41
+ kind: args.kind,
40
42
  });
41
43
  spinner.succeed(`Scanned ${manifest.source.filesScanned} files`);
42
44
  const report = analyzeProject(manifest);
43
- write(colorizeReport(formatReport(report, {
44
- name: manifest.project.name,
45
- depth: manifest.source.depth,
46
- filesScanned: manifest.source.filesScanned,
47
- })));
45
+ const score = scoreProjectReport(report);
46
+ if (args.json) {
47
+ write(JSON.stringify({ ...report, score }, null, 2) + '\n');
48
+ }
49
+ else {
50
+ write(colorizeReport(formatReport(report, {
51
+ name: manifest.project.name,
52
+ depth: manifest.source.depth,
53
+ filesScanned: manifest.source.filesScanned,
54
+ })));
55
+ }
48
56
  if (args.writeManifest) {
49
57
  const outPath = resolve(args.outputDir, 'project-manifest.json');
50
58
  await writeManifest(manifest, outPath);
51
- write(`\n Manifest written to ${outPath}\n`);
59
+ if (!args.json)
60
+ write(`\n Manifest written to ${outPath}\n`);
52
61
  }
53
62
  if (args.failOn && shouldFail(report, args.failOn))
54
63
  return 1;
64
+ if (args.minScore !== undefined && score.score < args.minScore)
65
+ return 1;
55
66
  return 0;
56
67
  }
57
68
  //# sourceMappingURL=run-project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-project.js","sourceRoot":"","sources":["../../src/cli/run-project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-project.js","sourceRoot":"","sources":["../../src/cli/run-project.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,6 @@ export interface Spinner {
6
6
  /** Stop animation silently (clears the line). */
7
7
  stop(): void;
8
8
  }
9
+ export declare function createNullSpinner(): Spinner;
9
10
  export declare function createSpinner(): Spinner;
10
11
  //# sourceMappingURL=spinner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/cli/spinner.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,OAAO;IACtB,oCAAoC;IACpC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+CAA+C;IAC/C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iDAAiD;IACjD,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,aAAa,IAAI,OAAO,CAsCvC"}
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/cli/spinner.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,OAAO;IACtB,oCAAoC;IACpC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+CAA+C;IAC/C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iDAAiD;IACjD,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,aAAa,IAAI,OAAO,CAsCvC"}
@@ -6,6 +6,9 @@
6
6
  import { isTTY, green, gray } from './colors.js';
7
7
  const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
8
8
  const INTERVAL_MS = 80;
9
+ export function createNullSpinner() {
10
+ return { start() { }, succeed() { }, stop() { } };
11
+ }
9
12
  export function createSpinner() {
10
13
  if (!isTTY) {
11
14
  // Non-TTY (CI, piped): emit plain text lines via stdout
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/cli/spinner.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,iFAAiF;AAEjF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,EAAE,CAAC;AAWvB,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,wDAAwD;QACxD,OAAO;YACL,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,KAAI,CAAC;SACV,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAiD,CAAC;IAEtD,SAAS,SAAS;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,yCAAyC;IAC7E,CAAC;IAED,OAAO;QACL,KAAK,CAAC,IAAI;YACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;YACjD,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBACvB,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxE,KAAK,EAAE,CAAC;YACV,CAAC,EAAE,WAAW,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,IAAI;YACV,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;QACnD,CAAC;QACD,IAAI;YACF,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/cli/spinner.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,iFAAiF;AAEjF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,EAAE,CAAC;AAWvB,MAAM,UAAU,iBAAiB;IAC/B,OAAO,EAAE,KAAK,KAAI,CAAC,EAAE,OAAO,KAAI,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,wDAAwD;QACxD,OAAO;YACL,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,KAAI,CAAC;SACV,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAiD,CAAC;IAEtD,SAAS,SAAS;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,yCAAyC;IAC7E,CAAC;IAED,OAAO;QACL,KAAK,CAAC,IAAI;YACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;YACjD,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBACvB,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxE,KAAK,EAAE,CAAC;YACV,CAAC,EAAE,WAAW,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,IAAI;YACV,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;QACnD,CAAC;QACD,IAAI;YACF,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -8,6 +8,9 @@ export interface CliArgs {
8
8
  tsconfigPath?: string;
9
9
  workspacePackages: string[];
10
10
  failOn?: 'mismatch' | 'unused' | 'any';
11
+ minScore?: number;
12
+ kind?: 'host' | 'remote' | 'unknown';
13
+ json?: boolean;
11
14
  writeManifest: boolean;
12
15
  outputDir: string;
13
16
  name?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,WAAW,EAAE,OAAO,CAAC;IAErB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,QAAQ,GAAG,aAAa,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,WAAW,EAAE,OAAO,CAAC;IAErB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,QAAQ,GAAG,aAAa,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -47,7 +47,11 @@ export interface CollectorOptions {
47
47
  * @example ['@my-org/design-system', '@my-org/*']
48
48
  */
49
49
  workspacePackages?: string[];
50
- /** Parser strategy. @default 'regex' */
50
+ /**
51
+ * Parser strategy for import extraction.
52
+ * @default 'regex'
53
+ * @planned 'typescript' (AST-based) — not yet implemented; value is accepted but has no effect.
54
+ */
51
55
  parser?: ParserStrategy;
52
56
  }
53
57
  export interface ProjectManifest {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mf-toolkit/shared-inspector",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Stop debugging Module Federation in production. Audit shared config at build time.",
5
5
  "author": "Vitaly Zheltko",
6
6
  "license": "MIT",
@@ -48,7 +48,9 @@
48
48
  "typescript": ">=4.7"
49
49
  },
50
50
  "peerDependenciesMeta": {
51
- "typescript": { "optional": true }
51
+ "typescript": {
52
+ "optional": true
53
+ }
52
54
  },
53
55
  "devDependencies": {
54
56
  "@types/semver": "^7.5.8",