@callidescope/nx 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,1041 @@
1
+ # 🔭🧬 Callidescope Nx
2
+
3
+ **An Nx plugin that traces call stacks per project, following the Nx dependency graph.**
4
+
5
+ Canonical documentation for call-stack tracing, configuration, depth and breadth analysis, and report formats is in the
6
+ [`@callidescope/cli` README](https://github.com/Organizzolini/codebase/tree/main/packages/ic-suite/callidescope/callidescope-cli#readme).
7
+ `@callidescope/cli` is Nx-free on purpose: it takes `--directories`, each one a path holding its own `tsconfig.json`, so it
8
+ works in any TypeScript workspace whether or not Nx is anywhere near it. This
9
+ package is the one place in the toolchain that knows Nx exists, and the only
10
+ one that depends on `@nx/devkit`.
11
+
12
+ It adds two things the core CLI cannot know about:
13
+
14
+ - **A target on every project**, so the workspace's task runner does the
15
+ selecting — `nx affected`, `--projects=tag:…`, caching, and all.
16
+ - **Dependency-aware scope**, so a run over one project is scoped to everything
17
+ that project depends on rather than to the project alone.
18
+
19
+ ## Install
20
+
21
+ ```bash
22
+ npm install --save-dev @callidescope/nx
23
+ ```
24
+
25
+ Register it in `nx.json`:
26
+
27
+ ```json
28
+ {
29
+ "plugins": [
30
+ {
31
+ "plugin": "@callidescope/nx",
32
+ "options": {
33
+ "configurationPath": "configuration/callidescope.config.ts"
34
+ }
35
+ }
36
+ ]
37
+ }
38
+ ```
39
+
40
+ | Option | Meaning |
41
+ | ------ | ------- |
42
+ | `configurationPath` | Where the callidescope configuration lives. The conventional root filenames are searched when omitted |
43
+ | `traceTargetName` | Name of the inferred trace target. `trace` when omitted |
44
+ | `depthTargetName` | Name of the inferred depth target. `depth` when omitted |
45
+ | `breadthTargetName` | Name of the inferred breadth target. `breadth` when omitted |
46
+ | `gateTargetName` | Name of the inferred gate target. `gate` when omitted |
47
+
48
+ The target names are short because they read better on the command line than
49
+ repeating the tool's name on both sides of the colon. Rename any of them from
50
+ the registration if a workspace already uses one.
51
+
52
+ ## Usage
53
+
54
+ Four targets are inferred onto every project holding a `tsconfig.json`, so
55
+ selection is Nx's job rather than a flag of this package's own:
56
+
57
+ ```bash
58
+ nx run callidescope-nx:trace # one project, with its dependencies
59
+ nx run-many -t trace # the workspace
60
+ nx run-many -t trace --projects=tag:type:package # a category
61
+ nx affected -t trace # only what changed
62
+ ```
63
+
64
+ ```bash
65
+ nx run callidescope-nx:depth --addresses="packages/ic-suite/callidescope/callidescope-nx/src/modules/projects/projects.service.ts#ProjectsService.resolveDependencyClosure"
66
+ nx run callidescope-nx:breadth --addresses="src/foo.service.ts#FooService.bar"
67
+
68
+ # Several at once, which is what a rename spanning a handful of them needs
69
+ nx run callidescope-nx:depth --addresses="src/a.service.ts#A.b,src/c.service.ts#C.d"
70
+ ```
71
+
72
+ | Target | Answers |
73
+ | ------ | ------- |
74
+ | `gate` | Whether anything in the project broke the limits it is held to |
75
+ | `trace` | Every call stack in the project, and which ones broke a limit |
76
+ | `depth` | Every stack above and below each callable — callers up to a root, callees down to a leaf |
77
+ | `breadth` | Each callable's direct callers and callees, side by side |
78
+
79
+ `depth` and `breadth` take the same `<file>#<qualified-name>` addresses the
80
+ `callidescope` command does — the form every printed stack already uses — and
81
+ the same comma-separated `--addresses` flag it takes them through. Through the
82
+ plugin they resolve against the project and its dependencies rather than the
83
+ whole workspace, which is both faster and the set the addresses belong to.
84
+
85
+ **Every address must resolve, or the task prints nothing.** A report covering
86
+ only the addresses that were understood, under a task Nx recorded as
87
+ successful, is worse than a failed one; each unmatched address is named and
88
+ the task fails. Under `--format=json` the report is always an array, whatever
89
+ the address count, matching what the command line prints.
90
+
91
+ Unlike the command line, a missing `--addresses` is **refused rather than
92
+ prompted for**: a task runner has nobody to ask.
93
+
94
+ ### The gate
95
+
96
+ `gate` is the one of the four a pipeline is meant to read an exit code from,
97
+ and the only one that prints nothing but its findings — the stacks and callables that
98
+ decided the verdict, rather than every stack in the project. `nx affected -t gate`
99
+ therefore gates a branch by the projects it changed, and the task that fails is
100
+ named after the project that regressed, which one workspace-wide task never
101
+ could.
102
+
103
+ **A dependency's breach is that dependency's gate's business.** The trace
104
+ reaches into the projects a gate's project depends on, because a stack that
105
+ stops at a package boundary measures the wrong thing — but the verdict covers
106
+ only the projects the task was scoped to. This is the line the publishing side
107
+ already draws, one step further along: measurement reaches into dependencies,
108
+ publishing does not, and judging does not either. Nothing escapes a verdict,
109
+ because `nx affected` selects a changed dependency too and its own gate names
110
+ it. `trace` narrows its verdict the same way, so the two targets on one project
111
+ can never disagree about whose regression it was; its report still shows the
112
+ whole closure, since only the verdict narrows.
113
+
114
+ **Depth is gated always, breadth wherever a limit exists.** Not two modes to be
115
+ selected between: `maximumDepth` has a default, so every project has a number
116
+ and is judged by it, while `maximumBreadth` has none at any level — so a project
117
+ that declared no breadth limit is judged against `Infinity` and can produce no
118
+ breadth finding at all.
119
+
120
+ **A gate that opened none of the judged project's own files fails.** A project
121
+ reporting zero files of its own is not a clean project — it is a project
122
+ nothing looked at, and a green task there would say the opposite with nothing
123
+ in the output to correct it. The `callidescope` command fails the same case for
124
+ the same reason.
125
+
126
+ **`trace` prints that same block and passes on it** — the one rule the two
127
+ targets act on differently, and the only place their verdicts part. A project
128
+ the configuration excludes reads nothing of its own by definition and is given
129
+ no `gate` for exactly that reason, so failing its `trace` as well would leave
130
+ the one target it has permanently red for being configured as it was asked to
131
+ be, and a red task that is always red is one a reader learns to ignore. It
132
+ still prints, because whether a project's own code was read is a fact about the
133
+ run either way and a reader has to be able to see it. Everything else — a stack
134
+ over a depth limit, a callable over a breadth limit, a run that read nothing at
135
+ all — fails both.
136
+
137
+ **Asked per judged project, not of the whole run**, because narrowing the
138
+ verdict made those two different questions. A project with dependencies has a
139
+ non-empty run whatever became of its own sources, so an `exclude` that
140
+ over-matches — which a project's own `callidescope.config.*` may write — leaves
141
+ it owning no report content, owning no finding, and passing green over code
142
+ nothing read. Demonstrated: `packages/ic-suite/codometer/codometer-output` given
143
+ `{"exclude": ["**"]}` of its own traces its dependency's 102 callables and
144
+ contributes none, which is a green gate on the run-wide question and a red one
145
+ on this. The projects that went unread are named back, since `--projects` may
146
+ judge several.
147
+
148
+ **Files rather than callables**, which is the weaker question and the right
149
+ one. A project can hold files that declare no callable at all — one whose
150
+ `tsconfig.json` names only its own configuration files and its tests is the
151
+ shape, and this repository has five — and those files were read, so a verdict
152
+ on them is a verdict on something. Asking for a callable fails all five for
153
+ holding no functions, which is a finding about nothing. The cost, stated
154
+ plainly: a project whose sources are excluded while a configuration file of its
155
+ own survives counts as read.
156
+
157
+ Two adjacent cases fail alongside it, each saying what happened rather than
158
+ failing mutely: a run that read **nothing at all**, which is what an unread
159
+ leaf project looks like, and an Nx selection that resolved to **no directory**.
160
+
161
+ Its cache key names the project's own `callidescope.config.*` alongside the
162
+ workspace configuration, so editing one project's limits re-runs that project's
163
+ gate and no other project's. A dependency's sources are covered by `^default`,
164
+ because a run measures its dependencies even though it does not judge them.
165
+
166
+ Two projects are deliberately skipped by all four targets: the **workspace-root
167
+ project**, whose targets would trace everything under one uncacheable task, and
168
+ any project with **no `tsconfig.json`**, whose targets would be permanently
169
+ empty. A project the configuration **excludes** — `exclude` or `excludeFrom` in
170
+ the workspace file — additionally gets no `gate`: its own code is never traced,
171
+ so a gate there would own no finding at all and report green for code it never
172
+ read. It keeps the three that print something, `trace` included, which is what
173
+ the unread exemption above is there to preserve: `packages/ic-suite/callidescope/callidescope-examples`
174
+ is the case, and its stacks are still a report a reader can open.
175
+
176
+ ### Why the trace follows dependencies
177
+
178
+ `nx run callidescope-cli:trace` traces `callidescope-cli` **and
179
+ everything it depends on**, resolved transitively from the Nx project graph.
180
+
181
+ A call stack runs downward — a command calls into the service it was injected
182
+ with, which lives in a package it depends on — so a trace that stopped at a
183
+ project's own boundary would measure the wrong thing.
184
+
185
+ **A trace does not stop there without this plugin.**
186
+ [`@callidescope/cli`](../callidescope-cli/README.md) builds a TypeScript
187
+ program for every project the directories it was given transitively import, so
188
+ a call into a dependency resolves to a real frame whether or not Nx is
189
+ involved. Measured on this package,
190
+ `callidescope --directories packages/ic-suite/callidescope/callidescope-nx` and
191
+ `nx run callidescope-nx:trace` report the same 575 callables across 185 files
192
+ in 7 projects.
193
+
194
+ What the Nx graph decides is which projects the run is **scoped to** rather
195
+ than merely reaches. This executor writes nothing anywhere — it renders one
196
+ report and prints it — so the distinction costs nothing here, and widening the
197
+ selection changes only which projects seed the closure. It is the command-line
198
+ host that acts on it: a `--write` run there publishes a `## 🔭 Callidescope`
199
+ section into a scoped project's `README.md` and leaves a reached one's to the
200
+ run that is scoped to it. The graph also names dependencies no import closure
201
+ can find — an implicit dependency, or an edge that exists only at run time.
202
+
203
+ The two sets are not the same. The Nx graph gives `callidescope-nx` six
204
+ projects; the import closure reaches seven, adding `codometer-configuration`,
205
+ which this project's `tsconfig.json` pulls in through its own
206
+ `codometer.config.ts` — a file the manifest has no reason to mention.
207
+
208
+ Dependencies, never dependents: a project's dependents call _into_ it and add
209
+ no frames below it.
210
+
211
+ Pass `--withDependencies=false` to scope the run to the selected projects
212
+ alone. The closure below them is built either way, so what changes is which
213
+ projects the run calls its own — not how far a stack runs.
214
+
215
+ ### Executor options
216
+
217
+ ```bash
218
+ nx run logger:trace --tags=type:package
219
+ nx run logger:depth --addresses="a.ts#A.b" --projects=callidescope-cli
220
+ ```
221
+
222
+ All three executors take the same scoping options.
223
+
224
+ | Option | Meaning |
225
+ | ------ | ------- |
226
+ | `addresses` | `depth` and `breadth` only, and required: the callables to look up, comma-separated |
227
+ | `projects` | Nx project names to resolve against, replacing the target's own project |
228
+ | `tags` | Nx project tags, selecting every project carrying **any** of them |
229
+ | `withDependencies` | Widen along the Nx dependency graph. `true` by default |
230
+ | `format` | `markdown`, `mermaid`, or `json` |
231
+ | `configurationPath` | Overrides the registered configuration path |
232
+
233
+ `--projects` and `--tags` union rather than intersect, and a project reached
234
+ both ways is still traced once. `--tags` matches **any** of the tags given,
235
+ because Nx tag families are mutually exclusive on a single project — nothing is
236
+ both `type:application` and `type:package`, so requiring all of them would
237
+ select nothing.
238
+
239
+ Prefer Nx's own `--projects=tag:…` on `run-many` for ordinary selection; these
240
+ options exist for a target that wants to declare a fixed scope in its
241
+ `project.json`.
242
+
243
+ ### Nothing resolves silently to less
244
+
245
+ A project name the workspace does not have, or a tag no project carries, fails
246
+ the task and names the workspace's actual vocabulary. Narrowing the run instead
247
+ would let it pass while measuring less than it was asked to — and a report of
248
+ what a run did cover cannot show you what it did not.
249
+
250
+ ## As a library
251
+
252
+ The Nx-graph reading is a NestJS provider, for a host that would rather import
253
+ it than run a task:
254
+
255
+ ```ts
256
+ import { resolveProjectsService } from "@callidescope/nx";
257
+
258
+ const projectsService = await resolveProjectsService();
259
+ const graph = await projectsService.readProjectGraph();
260
+ const names = projectsService.resolveDependencyClosure({
261
+ graph,
262
+ projectNames: ["callidescope-cli"],
263
+ });
264
+ const directories = projectsService.toDirectories({ graph, projectNames: names });
265
+ ```
266
+
267
+ `readProjectGraph` is the only method that touches Nx at run time; every
268
+ resolution rule takes the graph as an argument, so it can be exercised without
269
+ a workspace to build one from.
270
+
271
+ ## Packages
272
+
273
+ | Package | Role |
274
+ | ------- | ---- |
275
+ | [`@callidescope/nx`](.) | Nx plugin: per-project trace targets, resolved through the Nx graph |
276
+ | [`@callidescope/cli`](../callidescope-cli/README.md) | Orchestrates a run: traces the workspace, plans what to check, and reports |
277
+ | [`@callidescope/configuration`](../callidescope-configuration/README.md) | Reads `callidescope.config.ts` and resolves the limits |
278
+ | [`@callidescope/graph`](../callidescope-graph/README.md) | Builds the call graph from traced source and measures depth and breadth |
279
+ | [`@callidescope/output`](../callidescope-output/README.md) | Renders findings into markdown, mermaid, and JSON |
280
+
281
+ ## Test
282
+
283
+ ```bash
284
+ nx run callidescope-nx:vitest
285
+ ```
286
+
287
+ ## Contributing
288
+
289
+ ```bash
290
+ nx run callidescope-nx:lint-code --configuration=check
291
+ ```
292
+
293
+ ## License
294
+
295
+ MIT — see [LICENSE](../../../../LICENSE).
296
+
297
+ ## 👔 Conformetry
298
+
299
+ This project was generated from the [nestjs-service-project](../../../../configuration/conformetry-templates/nestjs-service-project) conformetry template.
300
+
301
+ ## 🕸️ Codependix
302
+
303
+ Dependency graphs exported by [codependix](https://github.com/Organizzolini/codebase/tree/main/packages/ic-suite/codependix/codependix-cli), regenerated by `nx run codebase:codependix:write`.
304
+
305
+ ### Nx Neighborhood
306
+
307
+ <!-- codependix:start name="codependix-nx-projects" -->
308
+ ```mermaid
309
+ graph LR
310
+ callidescope_cli["callidescope-cli"]
311
+ callidescope_configuration["callidescope-configuration"]
312
+ callidescope_core["callidescope-core"]
313
+ callidescope_graph["callidescope-graph"]
314
+ callidescope_nx["callidescope-nx"]
315
+ callidescope_output["callidescope-output"]
316
+ logger["logger"]
317
+ callidescope_nx --> callidescope_cli
318
+ callidescope_nx --> callidescope_configuration
319
+ callidescope_nx --> callidescope_core
320
+ callidescope_nx --> callidescope_graph
321
+ callidescope_nx --> callidescope_output
322
+ callidescope_nx --> logger
323
+ classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
324
+ class callidescope_nx subject
325
+ ```
326
+ <!-- codependix:end name="codependix-nx-projects" -->
327
+
328
+ ### NestJS Module Graph
329
+
330
+ <!-- codependix:start name="codependix-nestjs-modules" -->
331
+ ```mermaid
332
+ flowchart LR
333
+ AddressLookupModule
334
+ AddressModule
335
+ AddressReportModule
336
+ CallablesModule
337
+ CallidescopeModule
338
+ ClassesModule
339
+ ConfigurationFileModule
340
+ ConfigurationModule
341
+ DocumentationModule
342
+ EdgesModule
343
+ EntriesModule
344
+ FlagResolutionModule
345
+ GraphModule
346
+ InputModule
347
+ LoggerModule([LoggerModule])
348
+ MainModule
349
+ OptionsModule
350
+ OutputJsonModule
351
+ OutputMarkdownModule
352
+ PluginModule
353
+ ProgramModule
354
+ ProjectReportsModule
355
+ ProjectsModule
356
+ ReportFindingsModule
357
+ ReportModule
358
+ RunConfigurationModule
359
+ RunPlanModule
360
+ SignaturesModule
361
+ WorkspaceModule
362
+ WriteDestinationsModule
363
+ AddressLookupModule --> CallablesModule
364
+ AddressLookupModule --> CallidescopeModule
365
+ AddressLookupModule --> ConfigurationModule
366
+ AddressModule --> AddressLookupModule
367
+ AddressModule --> AddressReportModule
368
+ AddressModule --> GraphModule
369
+ AddressReportModule --> ReportModule
370
+ CallablesModule --> ProgramModule
371
+ CallablesModule --> WorkspaceModule
372
+ CallidescopeModule --> CallablesModule
373
+ CallidescopeModule --> ClassesModule
374
+ CallidescopeModule --> ConfigurationModule
375
+ CallidescopeModule --> EdgesModule
376
+ CallidescopeModule --> EntriesModule
377
+ CallidescopeModule --> GraphModule
378
+ CallidescopeModule --> OutputJsonModule
379
+ CallidescopeModule --> OutputMarkdownModule
380
+ CallidescopeModule --> ProgramModule
381
+ CallidescopeModule --> ProjectReportsModule
382
+ CallidescopeModule --> ReportFindingsModule
383
+ CallidescopeModule --> ReportModule
384
+ CallidescopeModule --> WorkspaceModule
385
+ CallidescopeModule --> WriteDestinationsModule
386
+ ConfigurationModule --> ConfigurationFileModule
387
+ ConfigurationModule --> InputModule
388
+ ConfigurationModule --> RunPlanModule
389
+ EdgesModule --> CallablesModule
390
+ EdgesModule --> ClassesModule
391
+ EdgesModule --> ProgramModule
392
+ EdgesModule --> WorkspaceModule
393
+ EntriesModule --> CallablesModule
394
+ GraphModule --> DocumentationModule
395
+ GraphModule --> EdgesModule
396
+ GraphModule --> SignaturesModule
397
+ MainModule --> AddressModule
398
+ MainModule --> PluginModule
399
+ PluginModule --> CallidescopeModule
400
+ PluginModule --> ConfigurationModule
401
+ PluginModule --> OptionsModule
402
+ PluginModule --> ProjectReportsModule
403
+ PluginModule --> ProjectsModule
404
+ PluginModule --> ReportModule
405
+ PluginModule --> RunConfigurationModule
406
+ PluginModule --> WorkspaceModule
407
+ ProgramModule --> WorkspaceModule
408
+ ProjectReportsModule --> GraphModule
409
+ ProjectReportsModule --> SignaturesModule
410
+ RunConfigurationModule --> ConfigurationModule
411
+ RunConfigurationModule --> OptionsModule
412
+ RunPlanModule --> FlagResolutionModule
413
+ WriteDestinationsModule --> OutputJsonModule
414
+ WriteDestinationsModule --> OutputMarkdownModule
415
+ WriteDestinationsModule --> ReportModule
416
+ ```
417
+
418
+ _Rounded modules are global: every module can inject them, so their edges are left out._
419
+ <!-- codependix:end name="codependix-nestjs-modules" -->
420
+
421
+ ### File Imports
422
+
423
+ <!-- codependix:start name="codependix-file-imports" -->
424
+ ```mermaid
425
+ graph LR
426
+ file_callidescope_config_ts["callidescope.config.ts"]
427
+ file_codependix_config_ts["codependix.config.ts"]
428
+ file_codometer_config_ts["codometer.config.ts"]
429
+ file_eslint_config_ts["eslint.config.ts"]
430
+ file_src_executors_address_types_ts["src/executors/address.types.ts"]
431
+ file_src_executors_breadth_executor_ts["src/executors/breadth/executor.ts"]
432
+ file_src_executors_breadth_executor_unit_test_ts["src/executors/breadth/executor.unit.test.ts"]
433
+ file_src_executors_depth_executor_ts["src/executors/depth/executor.ts"]
434
+ file_src_executors_depth_executor_unit_test_ts["src/executors/depth/executor.unit.test.ts"]
435
+ file_src_executors_gate_executor_integration_test_ts["src/executors/gate/executor.integration.test.ts"]
436
+ file_src_executors_gate_executor_ts["src/executors/gate/executor.ts"]
437
+ file_src_executors_gate_executor_types_ts["src/executors/gate/executor.types.ts"]
438
+ file_src_executors_gate_executor_unit_test_ts["src/executors/gate/executor.unit.test.ts"]
439
+ file_src_executors_trace_executor_ts["src/executors/trace/executor.ts"]
440
+ file_src_executors_trace_executor_types_ts["src/executors/trace/executor.types.ts"]
441
+ file_src_executors_trace_executor_unit_test_ts["src/executors/trace/executor.unit.test.ts"]
442
+ file_src_index_ts["src/index.ts"]
443
+ file_src_index_unit_test_ts["src/index.unit.test.ts"]
444
+ file_src_main_module_ts["src/main.module.ts"]
445
+ file_src_modules_address_address_constants_ts["src/modules/address/address.constants.ts"]
446
+ file_src_modules_address_address_module_ts["src/modules/address/address.module.ts"]
447
+ file_src_modules_address_address_service_ts["src/modules/address/address.service.ts"]
448
+ file_src_modules_address_address_service_unit_test_ts["src/modules/address/address.service.unit.test.ts"]
449
+ file_src_modules_address_address_types_ts["src/modules/address/address.types.ts"]
450
+ file_src_modules_address_address_utilities_ts["src/modules/address/address.utilities.ts"]
451
+ file_src_modules_address_address_utilities_unit_test_ts["src/modules/address/address.utilities.unit.test.ts"]
452
+ file_src_modules_options_options_constants_ts["src/modules/options/options.constants.ts"]
453
+ file_src_modules_options_options_module_ts["src/modules/options/options.module.ts"]
454
+ file_src_modules_options_options_service_ts["src/modules/options/options.service.ts"]
455
+ file_src_modules_options_options_service_unit_test_ts["src/modules/options/options.service.unit.test.ts"]
456
+ file_src_modules_options_options_types_ts["src/modules/options/options.types.ts"]
457
+ file_src_modules_plugin_plugin_context_utilities_ts["src/modules/plugin/plugin-context.utilities.ts"]
458
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts["src/modules/plugin/plugin-context.utilities.unit.test.ts"]
459
+ file_src_modules_plugin_plugin_constants_ts["src/modules/plugin/plugin.constants.ts"]
460
+ file_src_modules_plugin_plugin_module_ts["src/modules/plugin/plugin.module.ts"]
461
+ file_src_modules_plugin_plugin_service_ts["src/modules/plugin/plugin.service.ts"]
462
+ file_src_modules_plugin_plugin_service_unit_test_ts["src/modules/plugin/plugin.service.unit.test.ts"]
463
+ file_src_modules_plugin_plugin_types_ts["src/modules/plugin/plugin.types.ts"]
464
+ file_src_modules_plugin_plugin_utilities_ts["src/modules/plugin/plugin.utilities.ts"]
465
+ file_src_modules_projects_projects_constants_ts["src/modules/projects/projects.constants.ts"]
466
+ file_src_modules_projects_projects_module_ts["src/modules/projects/projects.module.ts"]
467
+ file_src_modules_projects_projects_service_ts["src/modules/projects/projects.service.ts"]
468
+ file_src_modules_projects_projects_service_unit_test_ts["src/modules/projects/projects.service.unit.test.ts"]
469
+ file_src_modules_projects_projects_types_ts["src/modules/projects/projects.types.ts"]
470
+ file_src_modules_run_configuration_run_configuration_constants_ts["src/modules/run-configuration/run-configuration.constants.ts"]
471
+ file_src_modules_run_configuration_run_configuration_module_ts["src/modules/run-configuration/run-configuration.module.ts"]
472
+ file_src_modules_run_configuration_run_configuration_service_ts["src/modules/run-configuration/run-configuration.service.ts"]
473
+ file_src_modules_run_configuration_run_configuration_service_unit_test_ts["src/modules/run-configuration/run-configuration.service.unit.test.ts"]
474
+ file_src_modules_run_configuration_run_configuration_types_ts["src/modules/run-configuration/run-configuration.types.ts"]
475
+ file_testing_mocks_ts["testing/mocks.ts"]
476
+ file_testing_setup_ts["testing/setup.ts"]
477
+ file_vite_config_ts["vite.config.ts"]
478
+ file_vitest_config_ts["vitest.config.ts"]
479
+ file_src_executors_breadth_executor_ts --> file_src_executors_address_types_ts
480
+ file_src_executors_breadth_executor_ts --> file_src_modules_address_address_utilities_ts
481
+ file_src_executors_breadth_executor_unit_test_ts --> file_src_executors_breadth_executor_ts
482
+ file_src_executors_breadth_executor_unit_test_ts --> file_src_modules_address_address_utilities_ts
483
+ file_src_executors_depth_executor_ts --> file_src_executors_address_types_ts
484
+ file_src_executors_depth_executor_ts --> file_src_modules_address_address_utilities_ts
485
+ file_src_executors_depth_executor_unit_test_ts --> file_src_executors_depth_executor_ts
486
+ file_src_executors_depth_executor_unit_test_ts --> file_src_modules_address_address_utilities_ts
487
+ file_src_executors_gate_executor_integration_test_ts --> file_src_executors_gate_executor_ts
488
+ file_src_executors_gate_executor_integration_test_ts --> file_src_executors_gate_executor_types_ts
489
+ file_src_executors_gate_executor_integration_test_ts --> file_src_modules_plugin_plugin_constants_ts
490
+ file_src_executors_gate_executor_integration_test_ts --> file_src_modules_projects_projects_service_ts
491
+ file_src_executors_gate_executor_ts --> file_src_executors_gate_executor_types_ts
492
+ file_src_executors_gate_executor_ts --> file_src_modules_plugin_plugin_context_utilities_ts
493
+ file_src_executors_gate_executor_ts --> file_src_modules_plugin_plugin_constants_ts
494
+ file_src_executors_gate_executor_ts --> file_src_modules_plugin_plugin_utilities_ts
495
+ file_src_executors_gate_executor_unit_test_ts --> file_src_executors_gate_executor_ts
496
+ file_src_executors_gate_executor_unit_test_ts --> file_src_modules_options_options_service_ts
497
+ file_src_executors_gate_executor_unit_test_ts --> file_src_modules_plugin_plugin_constants_ts
498
+ file_src_executors_gate_executor_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
499
+ file_src_executors_gate_executor_unit_test_ts --> file_src_modules_plugin_plugin_types_ts
500
+ file_src_executors_trace_executor_ts --> file_src_executors_trace_executor_types_ts
501
+ file_src_executors_trace_executor_ts --> file_src_modules_plugin_plugin_context_utilities_ts
502
+ file_src_executors_trace_executor_ts --> file_src_modules_plugin_plugin_utilities_ts
503
+ file_src_executors_trace_executor_unit_test_ts --> file_src_executors_trace_executor_ts
504
+ file_src_executors_trace_executor_unit_test_ts --> file_src_modules_options_options_service_ts
505
+ file_src_executors_trace_executor_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
506
+ file_src_executors_trace_executor_unit_test_ts --> file_src_modules_plugin_plugin_types_ts
507
+ file_src_index_ts --> file_src_modules_plugin_plugin_context_utilities_ts
508
+ file_src_index_ts --> file_src_modules_plugin_plugin_constants_ts
509
+ file_src_index_unit_test_ts --> file_src_index_ts
510
+ file_src_index_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
511
+ file_src_index_unit_test_ts --> file_src_modules_plugin_plugin_types_ts
512
+ file_src_main_module_ts --> file_src_modules_address_address_module_ts
513
+ file_src_main_module_ts --> file_src_modules_plugin_plugin_module_ts
514
+ file_src_modules_address_address_module_ts --> file_src_modules_address_address_service_ts
515
+ file_src_modules_address_address_service_ts --> file_src_modules_address_address_types_ts
516
+ file_src_modules_address_address_service_unit_test_ts --> file_src_modules_address_address_service_ts
517
+ file_src_modules_address_address_utilities_ts --> file_src_executors_address_types_ts
518
+ file_src_modules_address_address_utilities_ts --> file_src_modules_plugin_plugin_context_utilities_ts
519
+ file_src_modules_address_address_utilities_ts --> file_src_modules_plugin_plugin_utilities_ts
520
+ file_src_modules_address_address_utilities_unit_test_ts --> file_src_modules_address_address_service_ts
521
+ file_src_modules_address_address_utilities_unit_test_ts --> file_src_modules_address_address_utilities_ts
522
+ file_src_modules_address_address_utilities_unit_test_ts --> file_src_modules_options_options_service_ts
523
+ file_src_modules_address_address_utilities_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
524
+ file_src_modules_address_address_utilities_unit_test_ts --> file_src_modules_plugin_plugin_types_ts
525
+ file_src_modules_options_options_module_ts --> file_src_modules_options_options_service_ts
526
+ file_src_modules_options_options_service_ts --> file_src_modules_options_options_constants_ts
527
+ file_src_modules_options_options_service_ts --> file_src_modules_options_options_types_ts
528
+ file_src_modules_options_options_service_unit_test_ts --> file_src_modules_options_options_service_ts
529
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_main_module_ts
530
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_address_address_service_ts
531
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_options_options_service_ts
532
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_constants_ts
533
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_service_ts
534
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_types_ts
535
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_projects_projects_service_ts
536
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_address_address_service_ts
537
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_options_options_service_ts
538
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_context_utilities_ts
539
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
540
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_projects_projects_service_ts
541
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_options_options_module_ts
542
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_plugin_plugin_service_ts
543
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_projects_projects_module_ts
544
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_run_configuration_run_configuration_module_ts
545
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_constants_ts
546
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_service_ts
547
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_types_ts
548
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_constants_ts
549
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_types_ts
550
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_projects_projects_service_ts
551
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_run_configuration_run_configuration_service_ts
552
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_options_options_service_ts
553
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_plugin_plugin_constants_ts
554
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
555
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_plugin_plugin_types_ts
556
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_projects_projects_service_ts
557
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_run_configuration_run_configuration_service_ts
558
+ file_src_modules_plugin_plugin_types_ts --> file_src_modules_plugin_plugin_constants_ts
559
+ file_src_modules_plugin_plugin_utilities_ts --> file_src_modules_plugin_plugin_context_utilities_ts
560
+ file_src_modules_plugin_plugin_utilities_ts --> file_src_modules_plugin_plugin_types_ts
561
+ file_src_modules_projects_projects_module_ts --> file_src_modules_projects_projects_service_ts
562
+ file_src_modules_projects_projects_service_ts --> file_src_modules_projects_projects_types_ts
563
+ file_src_modules_projects_projects_service_unit_test_ts --> file_src_modules_projects_projects_service_ts
564
+ file_src_modules_run_configuration_run_configuration_module_ts --> file_src_modules_options_options_module_ts
565
+ file_src_modules_run_configuration_run_configuration_module_ts --> file_src_modules_run_configuration_run_configuration_service_ts
566
+ file_src_modules_run_configuration_run_configuration_service_ts --> file_src_modules_options_options_service_ts
567
+ file_src_modules_run_configuration_run_configuration_service_ts --> file_src_modules_run_configuration_run_configuration_constants_ts
568
+ file_src_modules_run_configuration_run_configuration_service_ts --> file_src_modules_run_configuration_run_configuration_types_ts
569
+ file_src_modules_run_configuration_run_configuration_service_unit_test_ts --> file_src_modules_options_options_service_ts
570
+ file_src_modules_run_configuration_run_configuration_service_unit_test_ts --> file_src_modules_run_configuration_run_configuration_service_ts
571
+ ```
572
+ <!-- codependix:end name="codependix-file-imports" -->
573
+
574
+ <!-- codometer:start -->
575
+
576
+ ## ⏲️ Codometer
577
+
578
+ ### Project
579
+
580
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-5826-22c55e?style=flat-square)
581
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-215.51_kB-6b7280?style=flat-square)
582
+ ![Folders](https://img.shields.io/badge/Folders-13-4a4a4a?style=flat-square)
583
+ ![Source Files](https://img.shields.io/badge/Source_Files-53-3178c6?style=flat-square)
584
+
585
+ ### Measured Targets
586
+
587
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-9.81_kB_gzip-6b7280?style=flat-square)
588
+
589
+ ### TypeScript
590
+
591
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-53-3178c6?style=flat-square)
592
+ ![Interfaces](https://img.shields.io/badge/Interfaces-19-0ea5e9?style=flat-square)
593
+ ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
594
+ ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
595
+ ![Decorators](https://img.shields.io/badge/Decorators-11-db2777?style=flat-square)
596
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-167-6366f1?style=flat-square)
597
+ ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
598
+
599
+ ### JavaScript
600
+
601
+ ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-0-f7df1e?style=flat-square)
602
+ ![Test Files](https://img.shields.io/badge/Test_Files-13-10b981?style=flat-square)
603
+ ![External Packages](https://img.shields.io/badge/External_Packages-17-8b5cf6?style=flat-square)
604
+ ![Classes](https://img.shields.io/badge/Classes-11-7c3aed?style=flat-square)
605
+ ![Functions](https://img.shields.io/badge/Functions-274-16a34a?style=flat-square)
606
+ ![Methods](https://img.shields.io/badge/Methods-56-15803d?style=flat-square)
607
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-199-4ade80?style=flat-square)
608
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-131-059669?style=flat-square)
609
+ ![Constants](https://img.shields.io/badge/Constants-168-dc2626?style=flat-square)
610
+ ![Imports](https://img.shields.io/badge/Imports-221-0284c7?style=flat-square)
611
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-61-ea580c?style=flat-square)
612
+ ![Comments](https://img.shields.io/badge/Comments-319-64748b?style=flat-square)
613
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-802-475569?style=flat-square)
614
+ ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
615
+
616
+ ### Python
617
+
618
+ ![Python Files](https://img.shields.io/badge/Python_Files-0-3776ab?style=flat-square)
619
+ ![Python Lines](https://img.shields.io/badge/Python_Lines-0-4b8bbe?style=flat-square)
620
+ ![Python Classes](https://img.shields.io/badge/Python_Classes-0-7c3aed?style=flat-square)
621
+ ![Python Functions](https://img.shields.io/badge/Python_Functions-0-16a34a?style=flat-square)
622
+ ![Python Protocols](https://img.shields.io/badge/Python_Protocols-0-0ea5e9?style=flat-square)
623
+ ![Python Constants](https://img.shields.io/badge/Python_Constants-0-dc2626?style=flat-square)
624
+ ![Python Imports](https://img.shields.io/badge/Python_Imports-0-0284c7?style=flat-square)
625
+ ![Python Decorators](https://img.shields.io/badge/Python_Decorators-0-db2777?style=flat-square)
626
+ ![Docstrings](https://img.shields.io/badge/Docstrings-0-6366f1?style=flat-square)
627
+ ![Docstring Lines](https://img.shields.io/badge/Docstring_Lines-0-818cf8?style=flat-square)
628
+ ![Python Comments](https://img.shields.io/badge/Python_Comments-0-64748b?style=flat-square)
629
+ ![Python Comment Lines](https://img.shields.io/badge/Python_Comment_Lines-0-475569?style=flat-square)
630
+
631
+ ### JSON
632
+
633
+ ![JSON Files](https://img.shields.io/badge/JSON_Files-9-a16207?style=flat-square)
634
+ ![JSON Lines](https://img.shields.io/badge/JSON_Lines-346-ca8a04?style=flat-square)
635
+ ![JSON Objects](https://img.shields.io/badge/JSON_Objects-85-7c3aed?style=flat-square)
636
+ ![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-20-8b5cf6?style=flat-square)
637
+ ![JSON Properties](https://img.shields.io/badge/JSON_Properties-250-0284c7?style=flat-square)
638
+ ![JSON Strings](https://img.shields.io/badge/JSON_Strings-197-16a34a?style=flat-square)
639
+ ![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-1-059669?style=flat-square)
640
+ ![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-11-0ea5e9?style=flat-square)
641
+ ![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
642
+ ![JSON Items](https://img.shields.io/badge/JSON_Items-55-475569?style=flat-square)
643
+ ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-314-dc2626?style=flat-square)
644
+ ![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-5-ea580c?style=flat-square)
645
+
646
+ ### YAML
647
+
648
+ ![YAML Files](https://img.shields.io/badge/YAML_Files-0-cb171e?style=flat-square)
649
+ ![YAML Lines](https://img.shields.io/badge/YAML_Lines-0-e34c26?style=flat-square)
650
+ ![YAML Documents](https://img.shields.io/badge/YAML_Documents-0-f97316?style=flat-square)
651
+ ![YAML Mappings](https://img.shields.io/badge/YAML_Mappings-0-7c3aed?style=flat-square)
652
+ ![YAML Sequences](https://img.shields.io/badge/YAML_Sequences-0-8b5cf6?style=flat-square)
653
+ ![YAML Keys](https://img.shields.io/badge/YAML_Keys-0-0284c7?style=flat-square)
654
+ ![YAML Scalars](https://img.shields.io/badge/YAML_Scalars-0-16a34a?style=flat-square)
655
+ ![YAML Anchors](https://img.shields.io/badge/YAML_Anchors-0-059669?style=flat-square)
656
+ ![YAML Aliases](https://img.shields.io/badge/YAML_Aliases-0-10b981?style=flat-square)
657
+ ![YAML Comments](https://img.shields.io/badge/YAML_Comments-0-64748b?style=flat-square)
658
+ ![YAML Max Depth](https://img.shields.io/badge/YAML_Max_Depth-0-ea580c?style=flat-square)
659
+
660
+ ### TOML
661
+
662
+ ![TOML Files](https://img.shields.io/badge/TOML_Files-0-9c4221?style=flat-square)
663
+ ![TOML Lines](https://img.shields.io/badge/TOML_Lines-0-b45309?style=flat-square)
664
+ ![TOML Tables](https://img.shields.io/badge/TOML_Tables-0-7c3aed?style=flat-square)
665
+ ![TOML Array Tables](https://img.shields.io/badge/TOML_Array_Tables-0-8b5cf6?style=flat-square)
666
+ ![TOML Keys](https://img.shields.io/badge/TOML_Keys-0-0284c7?style=flat-square)
667
+ ![TOML Arrays](https://img.shields.io/badge/TOML_Arrays-0-16a34a?style=flat-square)
668
+ ![TOML Comments](https://img.shields.io/badge/TOML_Comments-0-64748b?style=flat-square)
669
+
670
+ ### Shell
671
+
672
+ ![Shell Files](https://img.shields.io/badge/Shell_Files-0-89e051?style=flat-square)
673
+ ![Shell Lines](https://img.shields.io/badge/Shell_Lines-0-4eaa25?style=flat-square)
674
+ ![Shell Functions](https://img.shields.io/badge/Shell_Functions-0-16a34a?style=flat-square)
675
+ ![Shell Variables](https://img.shields.io/badge/Shell_Variables-0-0284c7?style=flat-square)
676
+ ![Shell Exports](https://img.shields.io/badge/Shell_Exports-0-ea580c?style=flat-square)
677
+ ![Shell Conditionals](https://img.shields.io/badge/Shell_Conditionals-0-7c3aed?style=flat-square)
678
+ ![Shell Loops](https://img.shields.io/badge/Shell_Loops-0-8b5cf6?style=flat-square)
679
+ ![Shell Pipelines](https://img.shields.io/badge/Shell_Pipelines-0-059669?style=flat-square)
680
+ ![Shebangs](https://img.shields.io/badge/Shebangs-0-6b7280?style=flat-square)
681
+ ![Shell Comments](https://img.shields.io/badge/Shell_Comments-0-64748b?style=flat-square)
682
+ ![Shell Comment Lines](https://img.shields.io/badge/Shell_Comment_Lines-0-475569?style=flat-square)
683
+
684
+ ### SQL
685
+
686
+ ![SQL Files](https://img.shields.io/badge/SQL_Files-0-e38c00?style=flat-square)
687
+ ![SQL Lines](https://img.shields.io/badge/SQL_Lines-0-f29111?style=flat-square)
688
+ ![SQL Statements](https://img.shields.io/badge/SQL_Statements-0-7c3aed?style=flat-square)
689
+ ![SQL Selects](https://img.shields.io/badge/SQL_Selects-0-16a34a?style=flat-square)
690
+ ![SQL Inserts](https://img.shields.io/badge/SQL_Inserts-0-22c55e?style=flat-square)
691
+ ![SQL Updates](https://img.shields.io/badge/SQL_Updates-0-0ea5e9?style=flat-square)
692
+ ![SQL Deletes](https://img.shields.io/badge/SQL_Deletes-0-dc2626?style=flat-square)
693
+ ![SQL Creates](https://img.shields.io/badge/SQL_Creates-0-0284c7?style=flat-square)
694
+ ![SQL Joins](https://img.shields.io/badge/SQL_Joins-0-8b5cf6?style=flat-square)
695
+ ![SQL CTEs](https://img.shields.io/badge/SQL_CTEs-0-059669?style=flat-square)
696
+ ![SQL Comments](https://img.shields.io/badge/SQL_Comments-0-64748b?style=flat-square)
697
+
698
+ ### HCL
699
+
700
+ ![HCL Files](https://img.shields.io/badge/HCL_Files-0-844fba?style=flat-square)
701
+ ![HCL Lines](https://img.shields.io/badge/HCL_Lines-0-a78bfa?style=flat-square)
702
+ ![HCL Blocks](https://img.shields.io/badge/HCL_Blocks-0-7c3aed?style=flat-square)
703
+ ![HCL Resources](https://img.shields.io/badge/HCL_Resources-0-0284c7?style=flat-square)
704
+ ![HCL Variables](https://img.shields.io/badge/HCL_Variables-0-16a34a?style=flat-square)
705
+ ![HCL Outputs](https://img.shields.io/badge/HCL_Outputs-0-059669?style=flat-square)
706
+ ![HCL Attributes](https://img.shields.io/badge/HCL_Attributes-0-0ea5e9?style=flat-square)
707
+ ![HCL Interpolations](https://img.shields.io/badge/HCL_Interpolations-0-db2777?style=flat-square)
708
+ ![HCL Comments](https://img.shields.io/badge/HCL_Comments-0-64748b?style=flat-square)
709
+
710
+ ### CSS
711
+
712
+ ![CSS Files](https://img.shields.io/badge/CSS_Files-0-264de4?style=flat-square)
713
+ ![CSS Lines](https://img.shields.io/badge/CSS_Lines-0-2965f1?style=flat-square)
714
+ ![CSS Rules](https://img.shields.io/badge/CSS_Rules-0-7c3aed?style=flat-square)
715
+ ![CSS Selectors](https://img.shields.io/badge/CSS_Selectors-0-8b5cf6?style=flat-square)
716
+ ![CSS Declarations](https://img.shields.io/badge/CSS_Declarations-0-0284c7?style=flat-square)
717
+ ![CSS At Rules](https://img.shields.io/badge/CSS_At_Rules-0-f97316?style=flat-square)
718
+ ![CSS Media Queries](https://img.shields.io/badge/CSS_Media_Queries-0-ea580c?style=flat-square)
719
+ ![CSS Custom Properties](https://img.shields.io/badge/CSS_Custom_Properties-0-16a34a?style=flat-square)
720
+ ![CSS Comments](https://img.shields.io/badge/CSS_Comments-0-64748b?style=flat-square)
721
+
722
+ ### Conventions
723
+
724
+ ![Module Files](https://img.shields.io/badge/Module_Files-6-7c3aed?style=flat-square)
725
+ ![Service Files](https://img.shields.io/badge/Service_Files-5-0284c7?style=flat-square)
726
+ ![Command Files](https://img.shields.io/badge/Command_Files-0-16a34a?style=flat-square)
727
+ ![Constants Files](https://img.shields.io/badge/Constants_Files-5-ea580c?style=flat-square)
728
+ ![Types Files](https://img.shields.io/badge/Types_Files-8-db2777?style=flat-square)
729
+ ![Utilities Files](https://img.shields.io/badge/Utilities_Files-3-0ea5e9?style=flat-square)
730
+ ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
731
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-12-ca8a04?style=flat-square)
732
+ ![Integration Tests](https://img.shields.io/badge/Integration_Tests-1-7c3aed?style=flat-square)
733
+ ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-0-0284c7?style=flat-square)
734
+ ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
735
+ ![HCL Comment Budget](https://img.shields.io/badge/HCL_Comment_Budget-0-ea580c?style=flat-square)
736
+ ![Python Comment Budget](https://img.shields.io/badge/Python_Comment_Budget-0-db2777?style=flat-square)
737
+ ![SQL Comment Budget](https://img.shields.io/badge/SQL_Comment_Budget-0-0ea5e9?style=flat-square)
738
+ ![TOML Comment Budget](https://img.shields.io/badge/TOML_Comment_Budget-0-059669?style=flat-square)
739
+ ![TypeScript Comment Budget](https://img.shields.io/badge/TypeScript_Comment_Budget-0-ca8a04?style=flat-square)
740
+ ![YAML Comment Budget](https://img.shields.io/badge/YAML_Comment_Budget-0-7c3aed?style=flat-square)
741
+ ![Shell Comment Budget](https://img.shields.io/badge/Shell_Comment_Budget-0-0284c7?style=flat-square)
742
+
743
+ ### Jupyter
744
+
745
+ ![Notebooks](https://img.shields.io/badge/Notebooks-0-f37626?style=flat-square)
746
+ ![Notebook Cells](https://img.shields.io/badge/Notebook_Cells-0-e8a33d?style=flat-square)
747
+ ![Code Cells](https://img.shields.io/badge/Code_Cells-0-3776ab?style=flat-square)
748
+ ![Markdown Cells](https://img.shields.io/badge/Markdown_Cells-0-083fa1?style=flat-square)
749
+ ![Raw Cells](https://img.shields.io/badge/Raw_Cells-0-9ca3af?style=flat-square)
750
+ ![Executed Cells](https://img.shields.io/badge/Executed_Cells-0-16a34a?style=flat-square)
751
+ ![Cell Outputs](https://img.shields.io/badge/Cell_Outputs-0-059669?style=flat-square)
752
+ ![Notebook Code Lines](https://img.shields.io/badge/Notebook_Code_Lines-0-4b8bbe?style=flat-square)
753
+ ![Notebook Classes](https://img.shields.io/badge/Notebook_Classes-0-7c3aed?style=flat-square)
754
+ ![Notebook Functions](https://img.shields.io/badge/Notebook_Functions-0-22c55e?style=flat-square)
755
+ ![Notebook Imports](https://img.shields.io/badge/Notebook_Imports-0-0284c7?style=flat-square)
756
+ ![Notebook Decorators](https://img.shields.io/badge/Notebook_Decorators-0-db2777?style=flat-square)
757
+ ![Notebook Prose Lines](https://img.shields.io/badge/Notebook_Prose_Lines-0-1f6feb?style=flat-square)
758
+ ![Notebook Headings](https://img.shields.io/badge/Notebook_Headings-0-a78bfa?style=flat-square)
759
+ ![Notebook Links](https://img.shields.io/badge/Notebook_Links-0-10b981?style=flat-square)
760
+ ![Notebook Images](https://img.shields.io/badge/Notebook_Images-0-34d399?style=flat-square)
761
+ ![Notebook Code Blocks](https://img.shields.io/badge/Notebook_Code_Blocks-0-dc2626?style=flat-square)
762
+ ![Notebook Properties](https://img.shields.io/badge/Notebook_Properties-0-ca8a04?style=flat-square)
763
+ ![Notebook Nodes](https://img.shields.io/badge/Notebook_Nodes-0-a16207?style=flat-square)
764
+ ![Notebook Max Depth](https://img.shields.io/badge/Notebook_Max_Depth-0-ea580c?style=flat-square)
765
+
766
+ ### Markdown
767
+
768
+ ![Markdown Files](https://img.shields.io/badge/Markdown_Files-1-083fa1?style=flat-square)
769
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-256-1f6feb?style=flat-square)
770
+ ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
771
+ ![H2](https://img.shields.io/badge/H2-7-8b5cf6?style=flat-square)
772
+ ![H3](https://img.shields.io/badge/H3-12-a78bfa?style=flat-square)
773
+ ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
774
+ ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
775
+ ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
776
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-48-64748b?style=flat-square)
777
+ ![Lists](https://img.shields.io/badge/Lists-6-16a34a?style=flat-square)
778
+ ![List Items](https://img.shields.io/badge/List_Items-25-22c55e?style=flat-square)
779
+ ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
780
+ ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
781
+ ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
782
+ ![Links](https://img.shields.io/badge/Links-9-059669?style=flat-square)
783
+ ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
784
+ ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
785
+ ![Inline Code](https://img.shields.io/badge/Inline_Code-101-ef4444?style=flat-square)
786
+ ![Block Quotes](https://img.shields.io/badge/Block_Quotes-0-ca8a04?style=flat-square)
787
+ ![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-0-a16207?style=flat-square)
788
+ <!-- codometer:end -->
789
+
790
+ <!-- callidescope:start -->
791
+
792
+ ## 🔭 Callidescope
793
+
794
+ Call stacks traced through `packages/ic-suite/callidescope/callidescope-nx`, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.
795
+
796
+ | Measure | Value |
797
+ | --- | --- |
798
+ | Callables | 78 |
799
+ | Files | 38 |
800
+ | Calls traced | 109 |
801
+ | Call stacks | 6 |
802
+ | Deepest stack | 17 |
803
+ | Stacks through recursion | 0 |
804
+ | Unfollowable calls | 2 |
805
+
806
+ ### Limits
807
+
808
+ What this project is judged against, as declared in its own `callidescope.config.ts`.
809
+
810
+ | Limit | Value |
811
+ | --- | --- |
812
+ | `maximumDepth` | 17 |
813
+ | `maximumBreadth` | 7 |
814
+
815
+ ### Call stacks (depth)
816
+
817
+ **1. `breadthExecutor`** — depth ≥ 17 · orphan-root
818
+
819
+ ```text
820
+ 🚀 breadthExecutor(…): Promise<{ success: boolean; }> [packages/ic-suite/callidescope/callidescope-nx/src/executors/breadth/executor.ts:15]
821
+ ↳ Prints each named callable's direct callers and callees side by side — the two questions a rename or a refactor needs…
822
+ └─> runAddressExecutor(…): Promise<{ success: boolean; }> [packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.utilities.ts:19]
823
+ ↳ Runs the address lookups on behalf of the `depth` or `breadth` executor.
824
+ └─> AddressService.runDepth(args: LookupArguments): Promise<LookupResult> [packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.service.ts:154]
825
+ ↳ Prints every call stack above and below each callable.
826
+ └─> AddressService.locate(…): Promise<string | { identified: { address: string; id: string; }[]; workspace: LocatedWorkspace; }> [packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.service.ts:74]
827
+ ↳ Traces the selection, then matches every address against it.
828
+ └─> AddressLookupService.locate(options: AddressCommandOptions): Promise<LocatedWorkspace> [packages/ic-suite/callidescope/callidescope-cli/src/modules/address-lookup/address-lookup.service.ts:87]
829
+ ↳ Loads the configuration and traces the workspace, matching nothing yet.
830
+ └─> CallidescopeService.locate(args: TraceArguments): Promise<LocateOutcome> [packages/ic-suite/callidescope/callidescope-cli/src/modules/callidescope/callidescope.service.ts:394]
831
+ ↳ Collects every callable and assembles the graph over them, without running the analysis a full trace does.
832
+ └─> GraphAssemblyService.assemble(args: AssembleGraphArguments): AssembledGraph [packages/ic-suite/callidescope/callidescope-graph/src/modules/graph/graph-assembly.service.ts:43]
833
+ ↳ Builds the call graph and everything derived from it.
834
+ └─> EdgesService.build(args: BuildEdgesArguments): EdgeCollection [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:251]
835
+ ↳ Builds every edge in the graph, and records the calls it could not.
836
+ └─> EdgesService.buildSiteEdges(…): { edges: CallEdge[]; unresolved: UnresolvedCall[]; } [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:59]
837
+ ↳ Turns one call site into the edges and non-resolutions it produced.
838
+ └─> EdgesService.resolveSite(…): ResolvedCallSite | undefined [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:226]
839
+ ↳ Resolves one call site, choosing the right strategy for its shape.
840
+ └─> SymbolResolutionService.resolve(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:267]
841
+ ↳ Resolves a call expression to every declaration it can reach.
842
+ └─> SymbolResolutionService.resolveSymbol(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:165]
843
+ ↳ Resolves an already-identified callee symbol to its declarations.
844
+ └─> SymbolResolutionService.resolveThroughHierarchy(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:217]
845
+ ↳ Expands an interface or abstract member to its implementations.
846
+ └─> ClassesService.resolveImplementations(…): ImplementationLookup [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:204]
847
+ ↳ Finds the concrete declarations one interface member resolves to.
848
+ └─> ClassesService.flatMap(…)(this: undefined, candidate: ts.ClassDeclaration): ts.Declaration[] [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:232]
849
+ └─> ClassesService.readMemberDeclarations(…): Declaration[] [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:148]
850
+ ↳ Reads one member's concrete declarations off a candidate class.
851
+ └─> ClassesService.filter(…)(member: ts.PropertyDeclaration | ts.MethodDeclaration): boolean [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:162]
852
+ ```
853
+
854
+ **2. `depthExecutor`** — depth ≥ 17 · orphan-root
855
+
856
+ ```text
857
+ 🚀 depthExecutor(…): Promise<{ success: boolean; }> [packages/ic-suite/callidescope/callidescope-nx/src/executors/depth/executor.ts:15]
858
+ ↳ Prints every call stack above and below each named callable — every caller chain up to a root, every callee chain down…
859
+ └─> runAddressExecutor(…): Promise<{ success: boolean; }> [packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.utilities.ts:19]
860
+ ↳ Runs the address lookups on behalf of the `depth` or `breadth` executor.
861
+ └─> AddressService.runDepth(args: LookupArguments): Promise<LookupResult> [packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.service.ts:154]
862
+ ↳ Prints every call stack above and below each callable.
863
+ └─> AddressService.locate(…): Promise<string | { identified: { address: string; id: string; }[]; workspace: LocatedWorkspace; }> [packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.service.ts:74]
864
+ ↳ Traces the selection, then matches every address against it.
865
+ └─> AddressLookupService.locate(options: AddressCommandOptions): Promise<LocatedWorkspace> [packages/ic-suite/callidescope/callidescope-cli/src/modules/address-lookup/address-lookup.service.ts:87]
866
+ ↳ Loads the configuration and traces the workspace, matching nothing yet.
867
+ └─> CallidescopeService.locate(args: TraceArguments): Promise<LocateOutcome> [packages/ic-suite/callidescope/callidescope-cli/src/modules/callidescope/callidescope.service.ts:394]
868
+ ↳ Collects every callable and assembles the graph over them, without running the analysis a full trace does.
869
+ └─> GraphAssemblyService.assemble(args: AssembleGraphArguments): AssembledGraph [packages/ic-suite/callidescope/callidescope-graph/src/modules/graph/graph-assembly.service.ts:43]
870
+ ↳ Builds the call graph and everything derived from it.
871
+ └─> EdgesService.build(args: BuildEdgesArguments): EdgeCollection [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:251]
872
+ ↳ Builds every edge in the graph, and records the calls it could not.
873
+ └─> EdgesService.buildSiteEdges(…): { edges: CallEdge[]; unresolved: UnresolvedCall[]; } [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:59]
874
+ ↳ Turns one call site into the edges and non-resolutions it produced.
875
+ └─> EdgesService.resolveSite(…): ResolvedCallSite | undefined [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:226]
876
+ ↳ Resolves one call site, choosing the right strategy for its shape.
877
+ └─> SymbolResolutionService.resolve(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:267]
878
+ ↳ Resolves a call expression to every declaration it can reach.
879
+ └─> SymbolResolutionService.resolveSymbol(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:165]
880
+ ↳ Resolves an already-identified callee symbol to its declarations.
881
+ └─> SymbolResolutionService.resolveThroughHierarchy(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:217]
882
+ ↳ Expands an interface or abstract member to its implementations.
883
+ └─> ClassesService.resolveImplementations(…): ImplementationLookup [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:204]
884
+ ↳ Finds the concrete declarations one interface member resolves to.
885
+ └─> ClassesService.flatMap(…)(this: undefined, candidate: ts.ClassDeclaration): ts.Declaration[] [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:232]
886
+ └─> ClassesService.readMemberDeclarations(…): Declaration[] [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:148]
887
+ ↳ Reads one member's concrete declarations off a candidate class.
888
+ └─> ClassesService.filter(…)(member: ts.PropertyDeclaration | ts.MethodDeclaration): boolean [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:162]
889
+ ```
890
+
891
+ **3. `gateExecutor`** — depth ≥ 15 · orphan-root
892
+
893
+ ```text
894
+ 🚀 gateExecutor(…): Promise<{ success: boolean; }> [packages/ic-suite/callidescope/callidescope-nx/src/executors/gate/executor.ts:28]
895
+ ↳ Fails one project's task when its call stacks broke the limits it is held to.
896
+ └─> PluginService.runGate(args: RunGateArguments): Promise<RunTraceResult> [packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:427]
897
+ ↳ Traces the resolved directories and judges what it found against the limits every project in scope declared.
898
+ └─> CallidescopeService.trace(args: TraceArguments): Promise<TraceOutcome> [packages/ic-suite/callidescope/callidescope-cli/src/modules/callidescope/callidescope.service.ts:408]
899
+ ↳ Traces a workspace and returns everything the run found.
900
+ └─> CallidescopeService.analyze(…): AnalyzeOutcome [packages/ic-suite/callidescope/callidescope-cli/src/modules/callidescope/callidescope.service.ts:295]
901
+ ↳ Derives every finding from the collected callables.
902
+ └─> GraphAssemblyService.assemble(args: AssembleGraphArguments): AssembledGraph [packages/ic-suite/callidescope/callidescope-graph/src/modules/graph/graph-assembly.service.ts:43]
903
+ ↳ Builds the call graph and everything derived from it.
904
+ └─> EdgesService.build(args: BuildEdgesArguments): EdgeCollection [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:251]
905
+ ↳ Builds every edge in the graph, and records the calls it could not.
906
+ └─> EdgesService.buildSiteEdges(…): { edges: CallEdge[]; unresolved: UnresolvedCall[]; } [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:59]
907
+ ↳ Turns one call site into the edges and non-resolutions it produced.
908
+ └─> EdgesService.resolveSite(…): ResolvedCallSite | undefined [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:226]
909
+ ↳ Resolves one call site, choosing the right strategy for its shape.
910
+ └─> SymbolResolutionService.resolve(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:267]
911
+ ↳ Resolves a call expression to every declaration it can reach.
912
+ └─> SymbolResolutionService.resolveSymbol(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:165]
913
+ ↳ Resolves an already-identified callee symbol to its declarations.
914
+ └─> SymbolResolutionService.resolveThroughHierarchy(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:217]
915
+ ↳ Expands an interface or abstract member to its implementations.
916
+ └─> ClassesService.resolveImplementations(…): ImplementationLookup [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:204]
917
+ ↳ Finds the concrete declarations one interface member resolves to.
918
+ └─> ClassesService.flatMap(…)(this: undefined, candidate: ts.ClassDeclaration): ts.Declaration[] [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:232]
919
+ └─> ClassesService.readMemberDeclarations(…): Declaration[] [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:148]
920
+ ↳ Reads one member's concrete declarations off a candidate class.
921
+ └─> ClassesService.filter(…)(member: ts.PropertyDeclaration | ts.MethodDeclaration): boolean [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:162]
922
+ ```
923
+
924
+ <details>
925
+ <summary>3 more call stacks</summary>
926
+
927
+ **4. `traceExecutor`** — depth ≥ 15 · orphan-root
928
+
929
+ ```text
930
+ 🚀 traceExecutor(…): Promise<{ success: boolean; }> [packages/ic-suite/callidescope/callidescope-nx/src/executors/trace/executor.ts:25]
931
+ ↳ Traces one selection of Nx projects with callidescope.
932
+ └─> PluginService.runTrace(args: RunTraceArguments): Promise<RunTraceResult> [packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:472]
933
+ ↳ Traces the resolved directories and renders the report.
934
+ └─> CallidescopeService.trace(args: TraceArguments): Promise<TraceOutcome> [packages/ic-suite/callidescope/callidescope-cli/src/modules/callidescope/callidescope.service.ts:408]
935
+ ↳ Traces a workspace and returns everything the run found.
936
+ └─> CallidescopeService.analyze(…): AnalyzeOutcome [packages/ic-suite/callidescope/callidescope-cli/src/modules/callidescope/callidescope.service.ts:295]
937
+ ↳ Derives every finding from the collected callables.
938
+ └─> GraphAssemblyService.assemble(args: AssembleGraphArguments): AssembledGraph [packages/ic-suite/callidescope/callidescope-graph/src/modules/graph/graph-assembly.service.ts:43]
939
+ ↳ Builds the call graph and everything derived from it.
940
+ └─> EdgesService.build(args: BuildEdgesArguments): EdgeCollection [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:251]
941
+ ↳ Builds every edge in the graph, and records the calls it could not.
942
+ └─> EdgesService.buildSiteEdges(…): { edges: CallEdge[]; unresolved: UnresolvedCall[]; } [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:59]
943
+ ↳ Turns one call site into the edges and non-resolutions it produced.
944
+ └─> EdgesService.resolveSite(…): ResolvedCallSite | undefined [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/edges.service.ts:226]
945
+ ↳ Resolves one call site, choosing the right strategy for its shape.
946
+ └─> SymbolResolutionService.resolve(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:267]
947
+ ↳ Resolves a call expression to every declaration it can reach.
948
+ └─> SymbolResolutionService.resolveSymbol(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:165]
949
+ ↳ Resolves an already-identified callee symbol to its declarations.
950
+ └─> SymbolResolutionService.resolveThroughHierarchy(…): ResolvedCallSite [packages/ic-suite/callidescope/callidescope-graph/src/modules/edges/symbol-resolution.service.ts:217]
951
+ ↳ Expands an interface or abstract member to its implementations.
952
+ └─> ClassesService.resolveImplementations(…): ImplementationLookup [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:204]
953
+ ↳ Finds the concrete declarations one interface member resolves to.
954
+ └─> ClassesService.flatMap(…)(this: undefined, candidate: ts.ClassDeclaration): ts.Declaration[] [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:232]
955
+ └─> ClassesService.readMemberDeclarations(…): Declaration[] [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:148]
956
+ ↳ Reads one member's concrete declarations off a candidate class.
957
+ └─> ClassesService.filter(…)(member: ts.PropertyDeclaration | ts.MethodDeclaration): boolean [packages/ic-suite/callidescope/callidescope-graph/src/modules/classes/classes.service.ts:162]
958
+ ```
959
+
960
+ **5. `anonymous`** — depth ≥ 8 · orphan-root
961
+
962
+ ```text
963
+ 🚀 anonymous(…): Promise<CreateNodesResultArray> [packages/ic-suite/callidescope/callidescope-nx/src/index.ts:59]
964
+ └─> PluginService.inferTargets(args: InferTargetsArguments): Promise<Map<string, InferredTargets>> [packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:333]
965
+ ↳ Infers this plugin's targets onto every project holding a `tsconfig.json`.
966
+ └─> PluginService.buildExclusionFilter(…): Promise<FileFilter> [packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:92]
967
+ ↳ Builds the predicate deciding which projects the workspace configuration keeps out of every trace.
968
+ └─> ConfigurationService.loadConfigurationFile(args?: LoadConfigurationArguments): Promise<LoadedCallidescopeConfiguration> [packages/ic-suite/callidescope/callidescope-configuration/src/modules/configuration/configuration.service.ts:87]
969
+ ↳ Loads a configuration, and says what the file itself declared and which file answered.
970
+ └─> ConfigurationFileService.loadConfigurationFile(args?: LoadConfigurationArguments): Promise<LoadedCallidescopeConfiguration> [packages/ic-suite/callidescope/callidescope-configuration/src/modules/configuration/configuration-file.service.ts:326]
971
+ ↳ Loads a configuration, and says what the file itself declared and which file answered.
972
+ └─> ConfigurationFileService.resolveConfigurationPath(configurationPath: string): string [packages/ic-suite/callidescope/callidescope-configuration/src/modules/configuration/configuration-file.service.ts:158]
973
+ ↳ Resolves a configuration path against the cwd, then the repository root.
974
+ └─> ConfigurationFileService.findRepositoryRoot(): string | undefined [packages/ic-suite/callidescope/callidescope-configuration/src/modules/configuration/configuration-file.service.ts:97]
975
+ ↳ Walks upward from the process cwd looking for the repository root.
976
+ └─> ConfigurationFileService.some(…)(marker: ".git" | "pnpm-workspace.yaml"): boolean [packages/ic-suite/callidescope/callidescope-configuration/src/modules/configuration/configuration-file.service.ts:102]
977
+ ```
978
+
979
+ **6. `resolveProjectsService`** — depth 2 · orphan-root
980
+
981
+ ```text
982
+ 🚀 resolveProjectsService(): Promise<ProjectsService> [packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin-context.utilities.ts:39]
983
+ ↳ Resolves the service that reads the workspace's Nx project graph.
984
+ └─> resolvePluginContext(): Promise<INestApplicationContext> [packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin-context.utilities.ts:59]
985
+ ↳ Builds, or returns, this process's application context.
986
+ ```
987
+
988
+ </details>
989
+
990
+ ### Breadth
991
+
992
+ | Callable | Breadth | Calls directly | Location |
993
+ | --- | --- | --- | --- |
994
+ | `runAddressExecutor` | 7 | `filter(…)`, `resolveExecutorScope`, `resolveOptionsService`, `resolveAddressService`, `OptionsService.readFormat`, `AddressService.runDepth`, `AddressService.runBreadth` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.utilities.ts:19` |
995
+ | `ProjectsService.resolveProjectNames` | 6 | `ProjectsService.readProjects`, `ProjectsService.map(…)`, `ProjectsService.resolveTaggedNames`, `ProjectsService.map(…)`, `ProjectsService.readTags`, `ProjectsService.toSorted(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/projects/projects.service.ts:195` |
996
+ | `OptionsService.readStringList` | 5 | `OptionsService.isUnknownArray`, `OptionsService.filter(…)`, `OptionsService.map(…)`, `OptionsService.flatMap(…)`, `OptionsService.filter(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/options/options.service.ts:124` |
997
+
998
+ <details>
999
+ <summary>36 more callables</summary>
1000
+
1001
+ | Callable | Breadth | Calls directly | Location |
1002
+ | --- | --- | --- | --- |
1003
+ | `PluginService.inferTargets` | 5 | `OptionsService.resolvePluginOptions`, `PluginService.buildExclusionFilter`, `PluginService.holdsProgram`, `PluginService.buildInferredTargets`, `PluginService.isExcludedProject` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:333` |
1004
+ | `PluginService.runGate` | 5 | `RunConfigurationService.load`, `CallidescopeService.trace`, `PluginService.judge`, `PluginService.explainVerdict`, `MarkdownReportService.renderFindings` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:427` |
1005
+ | `PluginService.runTrace` | 5 | `RunConfigurationService.load`, `CallidescopeService.trace`, `PluginService.judge`, `MarkdownReportService.renderRun`, `PluginService.explainVerdict` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:472` |
1006
+ | `resolveExecutorScope` | 5 | `resolveOptionsService`, `OptionsService.readStringList`, `resolvePluginService`, `PluginService.resolveTraceScope`, `PluginService.describeRefusedScope` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.utilities.ts:24` |
1007
+ | `traceExecutor` | 5 | `resolveExecutorScope`, `resolveOptionsService`, `resolvePluginService`, `PluginService.runTrace`, `OptionsService.readFormat` | `packages/ic-suite/callidescope/callidescope-nx/src/executors/trace/executor.ts:25` |
1008
+ | `PluginService.resolveTraceScope` | 4 | `ProjectsService.readProjectGraph`, `ProjectsService.resolveProjectNames`, `ProjectsService.resolveDependencyClosure`, `ProjectsService.resolveDirectories` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:383` |
1009
+ | `anonymous` | 4 | `resolvePluginService`, `PluginService.inferTargets`, `filter(…)`, `map(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/index.ts:59` |
1010
+ | `AddressService.runBreadth` | 3 | `AddressService.locate`, `BreadthService.describeDirectCalls`, `AddressReportService.renderBreadthReports` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.service.ts:110` |
1011
+ | `AddressService.runDepth` | 3 | `AddressService.locate`, `AddressReportService.renderDepthReports`, `AddressService.map(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.service.ts:154` |
1012
+ | `ProjectsService.toDirectories` | 3 | `ProjectsService.map(…)`, `ProjectsService.readProjects`, `ProjectsService.toSorted(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/projects/projects.service.ts:233` |
1013
+ | `RunConfigurationService.load` | 3 | `OptionsService.resolveConfigurationPath`, `RunConfigurationService.readNxConfiguration`, `ConfigurationService.loadConfigurationFile` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/run-configuration/run-configuration.service.ts:69` |
1014
+ | `gateExecutor` | 3 | `resolveExecutorScope`, `resolvePluginService`, `PluginService.runGate` | `packages/ic-suite/callidescope/callidescope-nx/src/executors/gate/executor.ts:28` |
1015
+ | `AddressService.identify` | 2 | `AddressLookupService.resolve`, `AddressLookupService.describeProblem` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.service.ts:47` |
1016
+ | `AddressService.locate` | 2 | `AddressLookupService.locate`, `AddressService.identify` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.service.ts:74` |
1017
+ | `AddressService.map(…)` | 2 | `AddressDepthService.buildDownwardStacks`, `AddressDepthService.buildUpwardStacks` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/address/address.service.ts:167` |
1018
+ | `OptionsService.readRegisteredConfigurationPath` | 2 | `OptionsService.isUnknownArray`, `OptionsService.readEntryConfigurationPath` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/options/options.service.ts:66` |
1019
+ | `OptionsService.resolveConfigurationPath` | 2 | `OptionsService.readRegisteredConfigurationPath`, `OptionsService.find(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/options/options.service.ts:145` |
1020
+ | `ProjectsService.readTags` | 2 | `ProjectsService.toSorted(…)`, `ProjectsService.flatMap(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/projects/projects.service.ts:37` |
1021
+ | `ProjectsService.resolveTaggedNames` | 2 | `ProjectsService.filter(…)`, `ProjectsService.map(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/projects/projects.service.ts:53` |
1022
+ | `ProjectsService.readProjects` | 2 | `ProjectsService.toSorted(…)`, `ProjectsService.map(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/projects/projects.service.ts:92` |
1023
+ | `ProjectsService.resolveDependencyClosure` | 2 | `ProjectsService.filter(…)`, `ProjectsService.toSorted(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/projects/projects.service.ts:122` |
1024
+ | `ProjectsService.resolveDirectories` | 2 | `ProjectsService.resolveProjectNames`, `ProjectsService.toDirectories` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/projects/projects.service.ts:171` |
1025
+ | `PluginService.buildExclusionFilter` | 2 | `ConfigurationService.loadConfigurationFile`, `FileFilterService.buildFileFilter` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:92` |
1026
+ | `PluginService.judge` | 2 | `ProjectReportsService.findOwnedFindings`, `ProjectReportsService.findUnreadProjects` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:263` |
1027
+ | `OptionsService.readEntryConfigurationPath` | 1 | `OptionsService.readString` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/options/options.service.ts:42` |
1028
+ | `OptionsService.readFormat` | 1 | `OptionsService.find(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/options/options.service.ts:109` |
1029
+ | `OptionsService.resolvePluginOptions` | 1 | `OptionsService.readString` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/options/options.service.ts:159` |
1030
+ | `reportUnreadProjects` | 1 | `map(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.constants.ts:72` |
1031
+ | `PluginService.explainVerdict` | 1 | `reportUnreadProjects` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:185` |
1032
+ | `PluginService.describeRefusedScope` | 1 | `PluginService.filter(…)` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin.service.ts:305` |
1033
+ | `resolveAddressService` | 1 | `resolvePluginContext` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin-context.utilities.ts:18` |
1034
+ | `resolveOptionsService` | 1 | `resolvePluginContext` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin-context.utilities.ts:25` |
1035
+ | `resolvePluginService` | 1 | `resolvePluginContext` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin-context.utilities.ts:32` |
1036
+ | `resolveProjectsService` | 1 | `resolvePluginContext` | `packages/ic-suite/callidescope/callidescope-nx/src/modules/plugin/plugin-context.utilities.ts:39` |
1037
+ | `breadthExecutor` | 1 | `runAddressExecutor` | `packages/ic-suite/callidescope/callidescope-nx/src/executors/breadth/executor.ts:15` |
1038
+ | `depthExecutor` | 1 | `runAddressExecutor` | `packages/ic-suite/callidescope/callidescope-nx/src/executors/depth/executor.ts:15` |
1039
+
1040
+ </details>
1041
+ <!-- callidescope:end -->