@codependix/cli 0.0.10 → 0.0.12

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/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ## 0.0.12 (2026-10-08)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **codependix:** ✨ print boundary findings in the markdown and json output ([#1415](https://github.com/organizzolini/codebase/pull/1415), [#1401](https://github.com/organizzolini/codebase/issues/1401))
6
+ - ⚠️ **codependix:** 💥 charge boundary findings to the projects they belong to ([#1409](https://github.com/organizzolini/codebase/pull/1409), [#1400](https://github.com/organizzolini/codebase/issues/1400))
7
+
8
+ ### ⚠️ Breaking Changes
9
+
10
+ - **codependix:** 💥 charge boundary findings to the projects they belong to ([#1409](https://github.com/organizzolini/codebase/pull/1409), [#1400](https://github.com/organizzolini/codebase/issues/1400))
11
+
12
+ ### 🧱 Updated Dependencies
13
+
14
+ - Updated codependix-configuration to 0.0.12
15
+ - Updated codependix-boundaries to 0.0.11
16
+ - Updated codependix-output to 0.0.11
17
+
18
+ ## 0.0.11 (2026-10-08)
19
+
20
+ ### 🩹 Fixes
21
+
22
+ - **ic-suite:** 🐛 exit non-zero when an ic-suite cli command throws ([#1486](https://github.com/organizzolini/codebase/pull/1486), [#1479](https://github.com/organizzolini/codebase/issues/1479))
23
+
1
24
  ## 0.0.10 (2026-10-08)
2
25
 
3
26
  ### 🧱 Updated Dependencies
package/README.md CHANGED
@@ -33,20 +33,22 @@ for this repository's own.
33
33
  | ---- | ------- |
34
34
  | `--check [check]` | Fail on a comma-separated set drawn from `boundaries` and `reports` |
35
35
  | `--config [config]` | Path to a `codependix.config.ts`. Searched for upward from `--directory` when omitted |
36
+ | `--dependencies` | Build `--check boundaries` over the dependencies of the projects `--projects` or `--tags` named, reporting their findings as notes (default). No effect without `--projects` or `--tags` |
37
+ | `--no-dependencies` | Build `--check boundaries` over only the projects `--projects` or `--tags` named, not their dependencies. No effect without `--projects` or `--tags` |
36
38
  | `-d, --directory [directory]` | Workspace root whose Nx project graph this run reads. Defaults to the working directory |
37
39
  | `--exclude [exclude]` | Comma-separated globs overriding the configured `exclude`. Refused when `exclude` was never configured |
38
40
  | `--file-imports` | Build, check, and write the `fileImports` graph type for this run |
39
41
  | `--no-file-imports` | Skip the `fileImports` graph type for this run |
40
- | `-f, --format [format]` | What to print to standard output, one of `json` and `markdown` (default: `markdown`). A graph type prints only when the run also configured a workspace destination for it, even if its own toggle flag enabled it |
42
+ | `-f, --format [format]` | What to print to standard output, one of `json` and `markdown` (default: `markdown`). A graph type prints only when the run also configured a workspace destination for it, even if its own toggle flag enabled it. A `--check boundaries` run adds its findings, under a `boundaries` key in `json` and a `Boundaries` section in `markdown` |
41
43
  | `--include [include]` | Comma-separated globs overriding the configured `include`. Refused when `include` was never configured |
42
- | `--json-output [jsonOutput]` | Write every active graph type's data, combined into one JSON file at this path, keyed by graph type name. A type appears only when the run also configured a workspace destination for it |
43
- | `--markdown-output [markdownOutput]` | Write every active graph type's rendered diagram, combined into one Markdown file at this path. A type appears only when the run also configured a workspace destination for it |
44
+ | `--json-output [jsonOutput]` | Write every active graph type's data, combined into one JSON file at this path, keyed by graph type name. A type appears only when the run also configured a workspace destination for it. A `--check boundaries` run adds its findings under a `boundaries` key |
45
+ | `--markdown-output [markdownOutput]` | Write every active graph type's rendered diagram, combined into one Markdown file at this path. A type appears only when the run also configured a workspace destination for it. A `--check boundaries` run adds its findings as a `Boundaries` section |
44
46
  | `--nestjs-modules` | Build, check, and write the `nestjsModules` graph type for this run |
45
47
  | `--no-nestjs-modules` | Skip the `nestjsModules` graph type for this run |
46
48
  | `--nx-projects` | Build, check, and write the `nxProjects` graph type for this run |
47
49
  | `--no-nx-projects` | Skip the `nxProjects` graph type for this run |
48
- | `--projects [projects]` | Comma-separated project names or roots to export for, as globs, beyond those `include` already selects. Also narrows the Workspace Graph and `--check boundaries` to the named set |
49
- | `--tags [tags]` | Comma-separated Nx tags to export for, beyond what `include` already selects. Also narrows the Workspace Graph and `--check boundaries` to the tagged projects |
50
+ | `--projects [projects]` | Comma-separated project names or roots to export for, as globs, beyond those `include` already selects. Also narrows the Workspace Graph to the named set, and `--check boundaries` to failing only on findings charged to it |
51
+ | `--tags [tags]` | Comma-separated Nx tags to export for, beyond what `include` already selects. Narrows the Workspace Graph and `--check boundaries` to the tagged projects, as `--projects` does |
50
52
  | `--write` | Writes every configured export |
51
53
 
52
54
  ### The two `--check` names
@@ -79,6 +81,26 @@ unreadable together.
79
81
  "gate nothing" it would be a gate that cannot fail, which is worse than no
80
82
  gate at all because it looks like protection.
81
83
 
84
+ ### Which project a boundary finding fails
85
+
86
+ Every finding is charged to the project or projects it belongs to: a cycle to
87
+ every project owning a node on it, a forbidden edge to the project owning its
88
+ source, a file- or NestJS-level finding to the project whose graph it was
89
+ found in, and a container that cannot boot to that container's project — its
90
+ message naming the project that owns the class it failed on, when the stack
91
+ shows another one.
92
+
93
+ `--projects` and `--tags` name the projects a run judges. Graphs are built
94
+ over those projects and everything they transitively depend on, and a finding
95
+ fails the run only when it is charged to a named project. One charged only to
96
+ a dependency is logged as a note, "in dependency", without failing:
97
+ the named project is built on it, but it is not that project's to fix.
98
+ `--no-dependencies` builds over the named projects alone. With neither flag
99
+ every project is judged. A `--projects`/`--tags` selection that matches no
100
+ project at all — a misspelled name, a tag nobody carries, or the workspace
101
+ root — is refused as a rejected command line rather than run as a gate that
102
+ judges nothing.
103
+
82
104
  ### When no mode is named
83
105
 
84
106
  Naming neither `--check` nor `--write` is asked about, as a three-item menu —
@@ -117,6 +139,32 @@ terminal and pastes into an issue. `--format json` is for a machine reading
117
139
  standard output, so every diagnostic goes to standard error — keeping standard
118
140
  output clean and parseable as data.
119
141
 
142
+ ### The boundary report
143
+
144
+ `--check boundaries` logs its findings to standard error and, given
145
+ `--format`, `--json-output`, or `--markdown-output`, also prints them as a
146
+ report: under a `boundaries` key in JSON, and as a `### Boundaries` section in
147
+ Markdown. A `--check boundaries`-only run, which exports nothing, prints just
148
+ that report; a run that also exports carries both in one document. Without one
149
+ of those flags a boundaries-only run prints nothing, and a run that also
150
+ exports prints its graphs exactly as it did before.
151
+
152
+ The JSON holds `judgedProjects` (the projects whose findings fail the run),
153
+ `violations` (`level`, `rule`, `message`, `source`, `target`, `cycle`, the
154
+ charged `projects`, and a `verdict` of `fail` or `note`) and `failures`
155
+ (`level`, `error`, the charged `projects`, an `ownerProject` when the failing
156
+ code belongs to another project, and a `verdict`). A `note` is a finding that
157
+ lives in a dependency of a judged project and does not fail the run. The
158
+ Markdown lists the same findings under each project they are charged to, a
159
+ note marked as not failing.
160
+
161
+ Who a finding is charged to is worked through, with the report each case
162
+ prints, in four examples:
163
+ [a cycle](../codependix-examples/examples/boundary-cycles/README.md),
164
+ [a forbidden edge](../codependix-examples/examples/boundary-forbidden-edges/README.md),
165
+ [a dependent of either](../codependix-examples/examples/boundary-dependency-notes/README.md),
166
+ and [a container that cannot boot](../codependix-examples/examples/boundary-boot-failures/README.md).
167
+
120
168
  ## Packages
121
169
 
122
170
  | Package | Role |
@@ -124,7 +172,7 @@ output clean and parseable as data.
124
172
  | [`@codependix/cli`](.) | Orchestrates the four graph builders and delivers their exports |
125
173
  | [`@codependix/boundaries`](../codependix-boundaries/README.md) | Builds each level's graph for a workspace, judges it against the declared rules, and reports what breaks them. `--check boundaries` delegates to it wholesale |
126
174
  | [`@codependix/configuration`](../codependix-configuration/README.md) | Reads `codependix.config.ts` and resolves per-project export destinations and boundary rules |
127
- | [`@codependix/examples`](../codependix-examples/README.md) | Sixteen subjects built to be graphed, each with the guide codependix renders from it |
175
+ | [`@codependix/examples`](../codependix-examples/README.md) | Twenty-one subjects built to be graphed, each with the guide codependix renders from it |
128
176
  | [`@codependix/nx-projects`](../codependix-nx-projects/README.md) | Builds a project's Nx Neighborhood and the whole-workspace Workspace Graph |
129
177
  | [`@codependix/nestjs-modules`](../codependix-nestjs-modules/README.md) | Explores a NestJS project's container and builds its module graph |
130
178
  | [`@codependix/file-imports`](../codependix-file-imports/README.md) | Builds a project's file-level import graph — a `typescript` module walking its own `ts.Program`, and a `python` module parsing `import`/`from ... import` statements |
@@ -236,11 +284,13 @@ flowchart LR
236
284
  WorkspaceGraphsModule
237
285
  BoundaryCheckModule --> BoundariesModule
238
286
  BoundaryCheckModule --> ModuleGraphModule
287
+ BoundaryCheckModule --> NeighborhoodModule
239
288
  BoundaryCheckModule --> NestjsProjectModule
240
289
  BoundaryCheckModule --> PythonModule
241
290
  BoundaryCheckModule --> TypescriptModule
242
291
  BoundaryCheckModule --> WorkspaceGraphModule
243
292
  CombinedOutputModule --> AnchorsModule
293
+ CombinedOutputModule --> BoundaryCheckModule
244
294
  ConfigurationModule --> InputModule
245
295
  ConfigurationModule --> OverrideResolutionModule
246
296
  DeliveryModule --> AnchorsModule
@@ -310,6 +360,7 @@ graph LR
310
360
  file_src_main_end_to_end_test_ts["src/main.end-to-end.test.ts"]
311
361
  file_src_main_module_ts["src/main.module.ts"]
312
362
  file_src_main_ts["src/main.ts"]
363
+ file_src_main_unit_test_ts["src/main.unit.test.ts"]
313
364
  file_src_modules_map_map_command_integration_test_ts["src/modules/map/map.command.integration.test.ts"]
314
365
  file_src_modules_map_map_command_ts["src/modules/map/map.command.ts"]
315
366
  file_src_modules_map_map_command_unit_test_ts["src/modules/map/map.command.unit.test.ts"]
@@ -364,9 +415,9 @@ Call stacks traced through `packages/ic-suite/codependix/codependix-cli`, deepes
364
415
 
365
416
  | Measure | Value |
366
417
  | --- | --- |
367
- | Callables | 42 |
418
+ | Callables | 47 |
368
419
  | Files | 19 |
369
- | Calls traced | 37 |
420
+ | Calls traced | 39 |
370
421
  | Call stacks | 19 |
371
422
  | Deepest stack | 15 |
372
423
  | Stacks through recursion | 0 |
@@ -386,11 +437,11 @@ What this project is judged against, as declared in its own `callidescope.config
386
437
  **1. `MapCommand.run`** — depth ≥ 15 · decorated-method
387
438
 
388
439
  ```text
389
- 🚀 MapCommand.run(_passedParameters: string[], options?: MapCommandOptions): Promise<void> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:377]
440
+ 🚀 MapCommand.run(_passedParameters: string[], options?: MapCommandOptions): Promise<void> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:445]
390
441
  ↳ Runs whatever the command line asked for: exports, boundaries, or both.
391
- └─> MapCommand.runMode(…): Promise<void> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:125]
442
+ └─> MapCommand.runMode(…): Promise<void> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:163]
392
443
  ↳ Runs the passes a resolved mode selected, and reports what they found.
393
- └─> MapCommand.runExports(context: GraphRunContext): Promise<MapRunResult> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:106]
444
+ └─> MapCommand.runExports(context: GraphRunContext): Promise<MapRunResult> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:144]
394
445
  ↳ Runs the export pass, warning when nothing was selected.
395
446
  └─> GraphRunService.run(context: GraphRunContext): Promise<MapRunResult> [packages/ic-suite/codependix/codependix-output/src/modules/graph-run/graph-run.service.ts:144]
396
447
  ↳ Runs every configured graph export against an already-resolved context.
@@ -445,9 +496,9 @@ What this project is judged against, as declared in its own `callidescope.config
445
496
  **3. `MapCommand.parseDirectory`** — depth 4 · decorated-method
446
497
 
447
498
  ```text
448
- 🚀 MapCommand.parseDirectory(value: string | undefined): string [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:191]
499
+ 🚀 MapCommand.parseDirectory(value: string | undefined): string [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:244]
449
500
  ↳ Parses the directory whose Nx workspace this run reads.
450
- └─> ConfigurationService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:294]
501
+ └─> ConfigurationService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:296]
451
502
  ↳ Parses a path option that falls back to the working directory.
452
503
  └─> InputService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:87]
453
504
  ↳ Parses a path option that falls back to the working directory.
@@ -461,9 +512,9 @@ What this project is judged against, as declared in its own `callidescope.config
461
512
  **4. `MapCommand.parseExclude`** — depth 4 · decorated-method
462
513
 
463
514
  ```text
464
- 🚀 MapCommand.parseExclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:207]
515
+ 🚀 MapCommand.parseExclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:260]
465
516
  ↳ Parses `--exclude`, a comma-separated list of globs overriding the configured `exclude`.
466
- └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:279]
517
+ └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:281]
467
518
  ↳ Parses a comma-separated list option, dropping blank entries.
468
519
  └─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:54]
469
520
  ↳ Parses a comma-separated list option, dropping blank entries.
@@ -473,9 +524,9 @@ What this project is judged against, as declared in its own `callidescope.config
473
524
  **5. `MapCommand.parseInclude`** — depth 4 · decorated-method
474
525
 
475
526
  ```text
476
- 🚀 MapCommand.parseInclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:246]
527
+ 🚀 MapCommand.parseInclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:299]
477
528
  ↳ Parses `--include`, a comma-separated list of globs overriding the configured `include`.
478
- └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:279]
529
+ └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:281]
479
530
  ↳ Parses a comma-separated list option, dropping blank entries.
480
531
  └─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:54]
481
532
  ↳ Parses a comma-separated list option, dropping blank entries.
@@ -487,7 +538,7 @@ What this project is judged against, as declared in its own `callidescope.config
487
538
  ```text
488
539
  🚀 PathCommand.parseDirectory(value: string | undefined): string [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:98]
489
540
  ↳ Parses the directory whose Nx workspace this run reads.
490
- └─> ConfigurationService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:294]
541
+ └─> ConfigurationService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:296]
491
542
  ↳ Parses a path option that falls back to the working directory.
492
543
  └─> InputService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:87]
493
544
  ↳ Parses a path option that falls back to the working directory.
@@ -500,7 +551,7 @@ What this project is judged against, as declared in its own `callidescope.config
500
551
  ```text
501
552
  🚀 PathCommand.parseExclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:107]
502
553
  ↳ Parses `--exclude`, a comma-separated list of globs overriding the configured `exclude`.
503
- └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:279]
554
+ └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:281]
504
555
  ↳ Parses a comma-separated list option, dropping blank entries.
505
556
  └─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:54]
506
557
  ↳ Parses a comma-separated list option, dropping blank entries.
@@ -512,7 +563,7 @@ What this project is judged against, as declared in its own `callidescope.config
512
563
  ```text
513
564
  🚀 PathCommand.parseInclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:139]
514
565
  ↳ Parses `--include`, a comma-separated list of globs overriding the configured `include`.
515
- └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:279]
566
+ └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:281]
516
567
  ↳ Parses a comma-separated list option, dropping blank entries.
517
568
  └─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:54]
518
569
  ↳ Parses a comma-separated list option, dropping blank entries.
@@ -522,9 +573,9 @@ What this project is judged against, as declared in its own `callidescope.config
522
573
  **9. `MapCommand.parseConfig`** — depth 3 · decorated-method
523
574
 
524
575
  ```text
525
- 🚀 MapCommand.parseConfig(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:182]
576
+ 🚀 MapCommand.parseConfig(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:221]
526
577
  ↳ Parses the optional configuration path from command-line input.
527
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
578
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
528
579
  ↳ Trims an optional string option, treating blank as absent.
529
580
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
530
581
  ↳ Trims an optional string option, treating blank as absent.
@@ -533,9 +584,9 @@ What this project is judged against, as declared in its own `callidescope.config
533
584
  **10. `MapCommand.parseFormat`** — depth 3 · decorated-method
534
585
 
535
586
  ```text
536
- 🚀 MapCommand.parseFormat(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:231]
587
+ 🚀 MapCommand.parseFormat(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:284]
537
588
  ↳ Parses what `--format` prints to standard output.
538
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
589
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
539
590
  ↳ Trims an optional string option, treating blank as absent.
540
591
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
541
592
  ↳ Trims an optional string option, treating blank as absent.
@@ -544,9 +595,9 @@ What this project is judged against, as declared in its own `callidescope.config
544
595
  **11. `MapCommand.parseJsonOutput`** — depth 3 · decorated-method
545
596
 
546
597
  ```text
547
- 🚀 MapCommand.parseJsonOutput(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:259]
598
+ 🚀 MapCommand.parseJsonOutput(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:312]
548
599
  ↳ Parses `--json-output`, the path to write every active graph type's combined JSON data to, keyed by graph type name.
549
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
600
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
550
601
  ↳ Trims an optional string option, treating blank as absent.
551
602
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
552
603
  ↳ Trims an optional string option, treating blank as absent.
@@ -555,9 +606,9 @@ What this project is judged against, as declared in its own `callidescope.config
555
606
  **12. `MapCommand.parseMarkdownOutput`** — depth 3 · decorated-method
556
607
 
557
608
  ```text
558
- 🚀 MapCommand.parseMarkdownOutput(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:272]
609
+ 🚀 MapCommand.parseMarkdownOutput(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:325]
559
610
  ↳ Parses `--markdown-output`, the path to write every active graph type's combined, anchor-spliced Markdown diagram to.
560
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
611
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
561
612
  ↳ Trims an optional string option, treating blank as absent.
562
613
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
563
614
  ↳ Trims an optional string option, treating blank as absent.
@@ -566,9 +617,9 @@ What this project is judged against, as declared in its own `callidescope.config
566
617
  **13. `MapCommand.parseProjects`** — depth 3 · decorated-method
567
618
 
568
619
  ```text
569
- 🚀 MapCommand.parseProjects(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:336]
620
+ 🚀 MapCommand.parseProjects(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:404]
570
621
  ↳ Parses the projects a run exports for beyond `include`. **Widening, and narrowing.** A named project is added to…
571
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
622
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
572
623
  ↳ Trims an optional string option, treating blank as absent.
573
624
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
574
625
  ↳ Trims an optional string option, treating blank as absent.
@@ -577,9 +628,9 @@ What this project is judged against, as declared in its own `callidescope.config
577
628
  **14. `MapCommand.parseTags`** — depth 3 · decorated-method
578
629
 
579
630
  ```text
580
- 🚀 MapCommand.parseTags(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:349]
631
+ 🚀 MapCommand.parseTags(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:417]
581
632
  ↳ Parses the Nx tags a run exports for, matched exactly against a project's own tags.
582
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
633
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
583
634
  ↳ Trims an optional string option, treating blank as absent.
584
635
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
585
636
  ↳ Trims an optional string option, treating blank as absent.
@@ -588,9 +639,9 @@ What this project is judged against, as declared in its own `callidescope.config
588
639
  **15. `MapCommand.parseWrite`** — depth 3 · decorated-method
589
640
 
590
641
  ```text
591
- 🚀 MapCommand.parseWrite(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:359]
642
+ 🚀 MapCommand.parseWrite(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:427]
592
643
  ↳ Parses the `--write` flag from command-line input.
593
- └─> ConfigurationService.parseFlagOption(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:284]
644
+ └─> ConfigurationService.parseFlagOption(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:286]
594
645
  ↳ Parses a valueless boolean flag, which is present or it is not.
595
646
  └─> InputService.parseFlagOption(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:70]
596
647
  ↳ Parses a valueless boolean flag, which is present or it is not.
@@ -601,7 +652,7 @@ What this project is judged against, as declared in its own `callidescope.config
601
652
  ```text
602
653
  🚀 PathCommand.parseConfig(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:89]
603
654
  ↳ Parses the optional configuration path from command-line input.
604
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
655
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
605
656
  ↳ Trims an optional string option, treating blank as absent.
606
657
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
607
658
  ↳ Trims an optional string option, treating blank as absent.
@@ -612,7 +663,7 @@ What this project is judged against, as declared in its own `callidescope.config
612
663
  ```text
613
664
  🚀 PathCommand.parseFormat(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:130]
614
665
  ↳ Parses what `--format` prints to standard output. Defaults to Markdown when the flag was left off entirely.
615
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
666
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
616
667
  ↳ Trims an optional string option, treating blank as absent.
617
668
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
618
669
  ↳ Trims an optional string option, treating blank as absent.
@@ -623,7 +674,7 @@ What this project is judged against, as declared in its own `callidescope.config
623
674
  ```text
624
675
  🚀 PathCommand.parseProjects(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:194]
625
676
  ↳ Parses the projects a query searches across beyond `include`.
626
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
677
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
627
678
  ↳ Trims an optional string option, treating blank as absent.
628
679
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
629
680
  ↳ Trims an optional string option, treating blank as absent.
@@ -634,7 +685,7 @@ What this project is judged against, as declared in its own `callidescope.config
634
685
  ```text
635
686
  🚀 PathCommand.parseTags(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:204]
636
687
  ↳ Parses the Nx tags a query searches across, matched exactly against project tags.
637
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
688
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
638
689
  ↳ Trims an optional string option, treating blank as absent.
639
690
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
640
691
  ↳ Trims an optional string option, treating blank as absent.
@@ -646,27 +697,28 @@ What this project is judged against, as declared in its own `callidescope.config
646
697
 
647
698
  | Callable | Breadth | Calls directly | Location |
648
699
  | --- | --- | --- | --- |
649
- | `MapCommand.runMode` | 7 | `RunContextService.build`, `ConfigurationService.touchesFiles`, `MapCommand.runExports`, `BoundaryCheckService.run`, `MapCommand.runCombinedOutput`, `ReportingService.reportPassOutcomes`, `ReportingService.reportSuccess` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:125` |
700
+ | `MapCommand.runMode` | 7 | `RunContextService.build`, `ConfigurationService.touchesFiles`, `MapCommand.runExports`, `BoundaryCheckService.run`, `MapCommand.runCombinedOutput`, `ReportingService.reportPassOutcomes`, `ReportingService.reportSuccess` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:163` |
650
701
  | `PathCommand.run` | 5 | `PathCommand.validateInputs`, `RunContextService.build`, `PathQueryService.query`, `PathQueryService.render`, `ReportingService.reportFailure` | `packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:214` |
651
- | `MapCommand.run` | 4 | `ConfigurationService.selectMode`, `CombinedOutputService.resolveFormat`, `MapCommand.runMode`, `ReportingService.reportFailure` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:377` |
702
+ | `MapCommand.run` | 4 | `ConfigurationService.selectMode`, `CombinedOutputService.resolveFormat`, `MapCommand.runMode`, `ReportingService.reportFailure` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:445` |
652
703
 
653
704
  <details>
654
- <summary>20 more callables</summary>
705
+ <summary>21 more callables</summary>
655
706
 
656
707
  | Callable | Breadth | Calls directly | Location |
657
708
  | --- | --- | --- | --- |
658
- | `MapCommand.runExports` | 2 | `GraphRunService.run`, `ReportingService.reportEmptySelection` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:106` |
659
- | `MapCommand.runCombinedOutput` | 1 | `CombinedOutputService.run` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:82` |
660
- | `MapCommand.parseConfig` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:182` |
661
- | `MapCommand.parseDirectory` | 1 | `ConfigurationService.parsePathOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:191` |
662
- | `MapCommand.parseExclude` | 1 | `ConfigurationService.parseCommaDelimitedOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:207` |
663
- | `MapCommand.parseFormat` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:231` |
664
- | `MapCommand.parseInclude` | 1 | `ConfigurationService.parseCommaDelimitedOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:246` |
665
- | `MapCommand.parseJsonOutput` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:259` |
666
- | `MapCommand.parseMarkdownOutput` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:272` |
667
- | `MapCommand.parseProjects` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:336` |
668
- | `MapCommand.parseTags` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:349` |
669
- | `MapCommand.parseWrite` | 1 | `ConfigurationService.parseFlagOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:359` |
709
+ | `MapCommand.runCombinedOutput` | 2 | `MapCommand.buildBoundaryReport`, `CombinedOutputService.run` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:111` |
710
+ | `MapCommand.runExports` | 2 | `GraphRunService.run`, `ReportingService.reportEmptySelection` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:144` |
711
+ | `MapCommand.buildBoundaryReport` | 1 | `MapCommand.map(…)` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:87` |
712
+ | `MapCommand.parseConfig` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:221` |
713
+ | `MapCommand.parseDirectory` | 1 | `ConfigurationService.parsePathOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:244` |
714
+ | `MapCommand.parseExclude` | 1 | `ConfigurationService.parseCommaDelimitedOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:260` |
715
+ | `MapCommand.parseFormat` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:284` |
716
+ | `MapCommand.parseInclude` | 1 | `ConfigurationService.parseCommaDelimitedOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:299` |
717
+ | `MapCommand.parseJsonOutput` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:312` |
718
+ | `MapCommand.parseMarkdownOutput` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:325` |
719
+ | `MapCommand.parseProjects` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:404` |
720
+ | `MapCommand.parseTags` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:417` |
721
+ | `MapCommand.parseWrite` | 1 | `ConfigurationService.parseFlagOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:427` |
670
722
  | `PathCommand.validateInputs` | 1 | `PathQueryService.resolveFormat` | `packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:53` |
671
723
  | `PathCommand.parseConfig` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:89` |
672
724
  | `PathCommand.parseDirectory` | 1 | `ConfigurationService.parsePathOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:98` |
@@ -685,40 +737,40 @@ What this project is judged against, as declared in its own `callidescope.config
685
737
 
686
738
  ### Project
687
739
 
688
- ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-3247-22c55e?style=flat-square)
689
- ![Repository Size](https://img.shields.io/badge/Repository_Size-114.00_kB-6b7280?style=flat-square)
740
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-4058-22c55e?style=flat-square)
741
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-140.45_kB-6b7280?style=flat-square)
690
742
  ![Folders](https://img.shields.io/badge/Folders-5-4a4a4a?style=flat-square)
691
- ![Source Files](https://img.shields.io/badge/Source_Files-30-3178c6?style=flat-square)
743
+ ![Source Files](https://img.shields.io/badge/Source_Files-31-3178c6?style=flat-square)
692
744
 
693
745
  ### Measured Targets
694
746
 
695
- ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-5.44_kB_gzip-6b7280?style=flat-square)
747
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-5.82_kB_gzip-6b7280?style=flat-square)
696
748
 
697
749
  ### TypeScript
698
750
 
699
- ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-30-3178c6?style=flat-square)
700
- ![Interfaces](https://img.shields.io/badge/Interfaces-1-0ea5e9?style=flat-square)
751
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-31-3178c6?style=flat-square)
752
+ ![Interfaces](https://img.shields.io/badge/Interfaces-2-0ea5e9?style=flat-square)
701
753
  ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
702
754
  ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
703
- ![Decorators](https://img.shields.io/badge/Decorators-37-db2777?style=flat-square)
704
- ![Doc Comments](https://img.shields.io/badge/Doc_Comments-37-6366f1?style=flat-square)
705
- ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
755
+ ![Decorators](https://img.shields.io/badge/Decorators-39-db2777?style=flat-square)
756
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-42-6366f1?style=flat-square)
757
+ ![Static Methods](https://img.shields.io/badge/Static_Methods-1-166534?style=flat-square)
706
758
 
707
759
  ### JavaScript
708
760
 
709
761
  ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-0-f7df1e?style=flat-square)
710
- ![Test Files](https://img.shields.io/badge/Test_Files-9-10b981?style=flat-square)
762
+ ![Test Files](https://img.shields.io/badge/Test_Files-10-10b981?style=flat-square)
711
763
  ![External Packages](https://img.shields.io/badge/External_Packages-19-8b5cf6?style=flat-square)
712
- ![Classes](https://img.shields.io/badge/Classes-5-7c3aed?style=flat-square)
713
- ![Functions](https://img.shields.io/badge/Functions-160-16a34a?style=flat-square)
714
- ![Methods](https://img.shields.io/badge/Methods-38-15803d?style=flat-square)
715
- ![Sync Functions](https://img.shields.io/badge/Sync_Functions-131-4ade80?style=flat-square)
716
- ![Async Functions](https://img.shields.io/badge/Async_Functions-67-059669?style=flat-square)
717
- ![Constants](https://img.shields.io/badge/Constants-99-dc2626?style=flat-square)
718
- ![Imports](https://img.shields.io/badge/Imports-113-0284c7?style=flat-square)
764
+ ![Classes](https://img.shields.io/badge/Classes-6-7c3aed?style=flat-square)
765
+ ![Functions](https://img.shields.io/badge/Functions-218-16a34a?style=flat-square)
766
+ ![Methods](https://img.shields.io/badge/Methods-45-15803d?style=flat-square)
767
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-171-4ade80?style=flat-square)
768
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-92-059669?style=flat-square)
769
+ ![Constants](https://img.shields.io/badge/Constants-148-dc2626?style=flat-square)
770
+ ![Imports](https://img.shields.io/badge/Imports-114-0284c7?style=flat-square)
719
771
  ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-10-ea580c?style=flat-square)
720
- ![Comments](https://img.shields.io/badge/Comments-124-64748b?style=flat-square)
721
- ![Comment Lines](https://img.shields.io/badge/Comment_Lines-226-475569?style=flat-square)
772
+ ![Comments](https://img.shields.io/badge/Comments-137-64748b?style=flat-square)
773
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-248-475569?style=flat-square)
722
774
  ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
723
775
 
724
776
  ### Python
@@ -836,7 +888,7 @@ What this project is judged against, as declared in its own `callidescope.config
836
888
  ![Types Files](https://img.shields.io/badge/Types_Files-2-db2777?style=flat-square)
837
889
  ![Utilities Files](https://img.shields.io/badge/Utilities_Files-0-0ea5e9?style=flat-square)
838
890
  ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
839
- ![Unit Tests](https://img.shields.io/badge/Unit_Tests-6-ca8a04?style=flat-square)
891
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-7-ca8a04?style=flat-square)
840
892
  ![Integration Tests](https://img.shields.io/badge/Integration_Tests-2-7c3aed?style=flat-square)
841
893
  ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-1-0284c7?style=flat-square)
842
894
  ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
@@ -874,20 +926,20 @@ What this project is judged against, as declared in its own `callidescope.config
874
926
  ### Markdown
875
927
 
876
928
  ![Markdown Files](https://img.shields.io/badge/Markdown_Files-2-083fa1?style=flat-square)
877
- ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-313-1f6feb?style=flat-square)
929
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-336-1f6feb?style=flat-square)
878
930
  ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
879
- ![H2](https://img.shields.io/badge/H2-14-8b5cf6?style=flat-square)
880
- ![H3](https://img.shields.io/badge/H3-22-a78bfa?style=flat-square)
931
+ ![H2](https://img.shields.io/badge/H2-16-8b5cf6?style=flat-square)
932
+ ![H3](https://img.shields.io/badge/H3-26-a78bfa?style=flat-square)
881
933
  ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
882
934
  ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
883
935
  ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
884
- ![Paragraphs](https://img.shields.io/badge/Paragraphs-78-64748b?style=flat-square)
885
- ![Lists](https://img.shields.io/badge/Lists-14-16a34a?style=flat-square)
886
- ![List Items](https://img.shields.io/badge/List_Items-57-22c55e?style=flat-square)
936
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-85-64748b?style=flat-square)
937
+ ![Lists](https://img.shields.io/badge/Lists-18-16a34a?style=flat-square)
938
+ ![List Items](https://img.shields.io/badge/List_Items-64-22c55e?style=flat-square)
887
939
  ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
888
940
  ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
889
941
  ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
890
- ![Links](https://img.shields.io/badge/Links-10-059669?style=flat-square)
942
+ ![Links](https://img.shields.io/badge/Links-18-059669?style=flat-square)
891
943
  ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
892
944
  ![Code Blocks](https://img.shields.io/badge/Code_Blocks-13-dc2626?style=flat-square)
893
945
  ![Inline Code](https://img.shields.io/badge/Inline_Code-78-ef4444?style=flat-square)
@@ -216,13 +216,26 @@ var V = d.object({}), H, U = H = class MapCommand extends j {
216
216
  constructor(e, t, n, r, i, a, o) {
217
217
  super(), this.graphRunService = e, this.boundaryCheckService = t, this.combinedOutputService = n, this.configurationService = r, this.logger = i, this.reportingService = a, this.runContextService = o, this.logger.setContext(H.name);
218
218
  }
219
+ buildBoundaryReport(e) {
220
+ let { boundaryOutcome: t, context: n, options: r } = e, i = r.format !== void 0 || r.jsonOutput !== void 0 || r.markdownOutput !== void 0;
221
+ if (t !== void 0 && i) return {
222
+ judgedProjects: n.selectedProjects.map((e) => e.name),
223
+ outcome: t
224
+ };
225
+ }
219
226
  runCombinedOutput(e) {
220
- e.combinedGraphs !== void 0 && this.combinedOutputService.run({
227
+ let { combinedGraphs: t, context: n, options: r } = e, i = this.buildBoundaryReport({
228
+ boundaryOutcome: e.boundaryOutcome,
229
+ context: n,
230
+ options: r
231
+ });
232
+ (t !== void 0 || i !== void 0) && this.combinedOutputService.run({
233
+ boundaries: i,
221
234
  format: e.format,
222
- graphs: e.combinedGraphs,
223
- jsonOutputPath: e.options.jsonOutput,
224
- markdownOutputPath: e.options.markdownOutput,
225
- workingDirectory: e.workingDirectory
235
+ graphs: t ?? {},
236
+ jsonOutputPath: r.jsonOutput,
237
+ markdownOutputPath: r.markdownOutput,
238
+ workingDirectory: n.workingDirectory
226
239
  });
227
240
  }
228
241
  async runExports(e) {
@@ -236,10 +249,11 @@ var V = d.object({}), H, U = H = class MapCommand extends j {
236
249
  workingDirectory: l.resolve(r.directory ?? process.cwd())
237
250
  }), a = this.configurationService.touchesFiles(n) ? await this.runExports(i) : void 0, o = n.checksBoundaries ? await this.boundaryCheckService.run(i) : void 0;
238
251
  if (this.runCombinedOutput({
252
+ boundaryOutcome: o,
239
253
  combinedGraphs: a?.combinedGraphs,
254
+ context: i,
240
255
  format: t,
241
- options: r,
242
- workingDirectory: i.workingDirectory
256
+ options: r
243
257
  }), !this.reportingService.reportPassOutcomes({
244
258
  boundaryOutcome: o,
245
259
  exportRun: a
@@ -258,6 +272,9 @@ var V = d.object({}), H, U = H = class MapCommand extends j {
258
272
  parseConfig(e) {
259
273
  return this.configurationService.parseOptionalOption(e);
260
274
  }
275
+ parseDependencies() {
276
+ return !0;
277
+ }
261
278
  parseDirectory(e) {
262
279
  return this.configurationService.parsePathOption(e);
263
280
  }
@@ -282,6 +299,9 @@ var V = d.object({}), H, U = H = class MapCommand extends j {
282
299
  parseNestjsModules() {
283
300
  return !0;
284
301
  }
302
+ parseNoDependencies() {
303
+ return !1;
304
+ }
285
305
  parseNoFileImports() {
286
306
  return !1;
287
307
  }
@@ -337,6 +357,14 @@ __decorate([
337
357
  __decorateMetadata("design:paramtypes", [Object]),
338
358
  __decorateMetadata("design:returntype", Object)
339
359
  ], U.prototype, "parseConfig", null), __decorate([
360
+ M({
361
+ description: "Build --check boundaries over the dependencies of the projects --projects or --tags named, reporting their findings as notes (default). No effect without --projects or --tags",
362
+ flags: "--dependencies"
363
+ }),
364
+ __decorateMetadata("design:type", Function),
365
+ __decorateMetadata("design:paramtypes", []),
366
+ __decorateMetadata("design:returntype", Boolean)
367
+ ], U.prototype, "parseDependencies", null), __decorate([
340
368
  M({
341
369
  description: "Directory whose Nx workspace this run reads",
342
370
  flags: "-d, --directory [directory]"
@@ -362,7 +390,7 @@ __decorate([
362
390
  __decorateMetadata("design:returntype", Boolean)
363
391
  ], U.prototype, "parseFileImports", null), __decorate([
364
392
  M({
365
- description: `What to print to standard output, one of ${S.join(" and ")} (default: ${x}). A graph type prints only when this run also configured a workspace destination for it, even if its own toggle flag enabled it`,
393
+ description: `What to print to standard output, one of ${S.join(" and ")} (default: ${x}). A graph type prints only when this run also configured a workspace destination for it, even if its own toggle flag enabled it. A --check boundaries run adds its findings, under a boundaries key in json and a Boundaries section in markdown`,
366
394
  flags: "-f, --format [format]"
367
395
  }),
368
396
  __decorateMetadata("design:type", Function),
@@ -378,7 +406,7 @@ __decorate([
378
406
  __decorateMetadata("design:returntype", Array)
379
407
  ], U.prototype, "parseInclude", null), __decorate([
380
408
  M({
381
- description: "Write every active graph type's data, combined into one JSON file at this path, keyed by graph type name. A type appears only when this run also configured a workspace destination for it",
409
+ description: "Write every active graph type's data, combined into one JSON file at this path, keyed by graph type name. A type appears only when this run also configured a workspace destination for it. A --check boundaries run adds its findings under a boundaries key",
382
410
  flags: "--json-output [jsonOutput]"
383
411
  }),
384
412
  __decorateMetadata("design:type", Function),
@@ -386,7 +414,7 @@ __decorate([
386
414
  __decorateMetadata("design:returntype", Object)
387
415
  ], U.prototype, "parseJsonOutput", null), __decorate([
388
416
  M({
389
- description: "Write every active graph type's rendered diagram, combined into one Markdown file at this path. A type appears only when this run also configured a workspace destination for it",
417
+ description: "Write every active graph type's rendered diagram, combined into one Markdown file at this path. A type appears only when this run also configured a workspace destination for it. A --check boundaries run adds its findings as a Boundaries section",
390
418
  flags: "--markdown-output [markdownOutput]"
391
419
  }),
392
420
  __decorateMetadata("design:type", Function),
@@ -401,6 +429,14 @@ __decorate([
401
429
  __decorateMetadata("design:paramtypes", []),
402
430
  __decorateMetadata("design:returntype", Boolean)
403
431
  ], U.prototype, "parseNestjsModules", null), __decorate([
432
+ M({
433
+ description: "Build --check boundaries over only the projects --projects or --tags named, not their dependencies. No effect without --projects or --tags",
434
+ flags: "--no-dependencies"
435
+ }),
436
+ __decorateMetadata("design:type", Function),
437
+ __decorateMetadata("design:paramtypes", []),
438
+ __decorateMetadata("design:returntype", Boolean)
439
+ ], U.prototype, "parseNoDependencies", null), __decorate([
404
440
  M({
405
441
  description: "Skip the fileImports graph type for this run",
406
442
  flags: "--no-file-imports"
@@ -434,7 +470,7 @@ __decorate([
434
470
  __decorateMetadata("design:returntype", Boolean)
435
471
  ], U.prototype, "parseNxProjects", null), __decorate([
436
472
  M({
437
- description: "Comma-separated project names or roots to export for, as globs, beyond those include already selects. Also narrows the Workspace Graph and --check boundaries to the named set",
473
+ description: "Comma-separated project names or roots to export for, as globs, beyond those include already selects. Also narrows the Workspace Graph to the named set, and --check boundaries to failing only on findings charged to it",
438
474
  flags: "--projects [projects]"
439
475
  }),
440
476
  __decorateMetadata("design:type", Function),
@@ -442,7 +478,7 @@ __decorate([
442
478
  __decorateMetadata("design:returntype", Object)
443
479
  ], U.prototype, "parseProjects", null), __decorate([
444
480
  M({
445
- description: "Comma-separated Nx tags to export for, beyond what include already selects. Also narrows the Workspace Graph and --check boundaries to the tagged projects",
481
+ description: "Comma-separated Nx tags to export for, beyond what include already selects. Narrows the Workspace Graph and --check boundaries to the tagged projects, as --projects does",
446
482
  flags: "--tags [tags]"
447
483
  }),
448
484
  __decorateMetadata("design:type", Function),
@@ -381,13 +381,20 @@ export declare class MapCommand extends CommandRunner {
381
381
  private readonly runContextService;
382
382
  constructor(graphRunService: GraphRunService, boundaryCheckService: BoundaryCheckService, combinedOutputService: CombinedOutputService, configurationService: ConfigurationService, logger: LoggerService, reportingService: ReportingService, runContextService: RunContextService);
383
383
  /**
384
- * Prints and writes every active graph type's combined output, when the
385
- * export pass ran at all.
384
+ * What a `--check boundaries` pass found, as the combined output carries it
385
+ * — but only when the command line asked for an output.
386
386
  *
387
- * A `--check boundaries`-only run never reaches this: nothing was built to
388
- * combine, so `--format`/`--json-output`/`--markdown-output` are silently
389
- * inert on a run that touched no export at all — the same way `--write`
390
- * and `--check reports` are inert on one that never named a destination.
387
+ * Left out unless `--format`, `--json-output`, or `--markdown-output` was
388
+ * given: an export run prints its graphs to standard output by default, and
389
+ * a `--write --check boundaries` run that named no output keeps printing
390
+ * exactly those graphs. A `--check boundaries`-only run that named none
391
+ * prints nothing at all and logs to standard error alone.
392
+ */
393
+ private buildBoundaryReport;
394
+ /**
395
+ * Prints and writes the combined output: every active graph type's data
396
+ * when the export pass ran, and the boundary pass's findings beside it when
397
+ * `buildBoundaryReport` carries them.
391
398
  */
392
399
  private runCombinedOutput;
393
400
  /**
@@ -419,6 +426,12 @@ export declare class MapCommand extends CommandRunner {
419
426
  parseCheck(value: string): string;
420
427
  /** Parses the optional configuration path from command-line input. */
421
428
  parseConfig(value: string | undefined): string | undefined;
429
+ /**
430
+ * Builds `--projects`/`--tags` graphs over the named projects' dependency
431
+ * closure — the default, so this exists only for symmetry with
432
+ * `--no-dependencies`.
433
+ */
434
+ parseDependencies(): true;
422
435
  /** Parses the directory whose Nx workspace this run reads. */
423
436
  parseDirectory(value: string | undefined): string;
424
437
  /**
@@ -459,6 +472,13 @@ export declare class MapCommand extends CommandRunner {
459
472
  parseMarkdownOutput(value: string | undefined): string | undefined;
460
473
  /** Enables the `nestjsModules` graph type for this run. */
461
474
  parseNestjsModules(): true;
475
+ /**
476
+ * Builds `--projects`/`--tags` graphs over the named projects alone,
477
+ * without their dependencies — faster, but an Nx edge leaving the named
478
+ * set is no longer drawn, and a finding the named projects inherit from a
479
+ * dependency is no longer noted.
480
+ */
481
+ parseNoDependencies(): false;
462
482
  /** Disables the `fileImports` graph type for this run. */
463
483
  parseNoFileImports(): false;
464
484
  /** Disables the `nestjsModules` graph type for this run. */
@@ -472,10 +492,10 @@ export declare class MapCommand extends CommandRunner {
472
492
  *
473
493
  * **Widening, and narrowing.** A named project is added to whatever
474
494
  * `include` already selected, and `exclude` still wins over it. It also
475
- * narrows what a run draws and judges: the Workspace Graph's node set and
476
- * every level `--check boundaries` judges become the named set. A narrowed
477
- * gate sees fewer edges than a whole-workspace one — fine for a local run,
478
- * and worth thinking twice about in CI.
495
+ * narrows the Workspace Graph to the named set, and `--check boundaries`
496
+ * to judging it: graphs are built over the named set's dependency closure,
497
+ * and only a finding charged to a named project fails the run — one in a
498
+ * dependency is reported as a note.
479
499
  */
480
500
  parseProjects(value: string | undefined): string | undefined;
481
501
  /**
package/dist/src/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "../main.module-DhSimp4F.js";
1
+ import { n as e, r as t, t as n } from "../main.module-DJFfw_zD.js";
2
2
  export { n as MainModule, t as MapCommand, e as MapModule };
package/dist/src/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { i as e, t } from "../main.module-DhSimp4F.js";
2
+ import { i as e, t } from "../main.module-DJFfw_zD.js";
3
3
  import { CommandFactory as n } from "nest-commander";
4
4
  import "reflect-metadata";
5
5
  //#region packages/ic-suite/codependix/codependix-cli/src/main.ts
@@ -8,7 +8,10 @@ async function main() {
8
8
  let r = new e();
9
9
  r.setContext("CommandFactory"), await n.run(t, {
10
10
  bufferLogs: !0,
11
- logger: r
11
+ logger: r,
12
+ serviceErrorHandler: (e) => {
13
+ r.error(e.message, e.stack), process.exitCode = 1;
14
+ }
12
15
  });
13
16
  }
14
17
  main();
package/package.json CHANGED
@@ -7,10 +7,10 @@
7
7
  "url": "https://github.com/organizzolini/codebase/issues"
8
8
  },
9
9
  "dependencies": {
10
- "@codependix/boundaries": "0.0.10",
11
- "@codependix/configuration": "0.0.11",
10
+ "@codependix/boundaries": "0.0.11",
11
+ "@codependix/configuration": "0.0.12",
12
12
  "@codependix/core": "0.0.10",
13
- "@codependix/output": "0.0.10",
13
+ "@codependix/output": "0.0.11",
14
14
  "@nestjs/common": "^11.1.21 || ^12.0.1",
15
15
  "@nestjs/config": "^12.0.0",
16
16
  "@nestjs/core": "^11.1.21 || ^12.0.1",
@@ -74,5 +74,5 @@
74
74
  "strict": true
75
75
  },
76
76
  "types": "./dist/src/index.d.ts",
77
- "version": "0.0.10"
77
+ "version": "0.0.12"
78
78
  }