@conformetry/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,922 @@
1
+ # 👔 Conformetry Nx
2
+
3
+ The Nx host for [Conformetry](https://github.com/Organizzolini/codebase/tree/main/packages/ic-suite/conformetry/conformetry-cli#readme).
4
+ Canonical documentation for command behavior, configuration, template syntax, scoring, and validators is in the
5
+ [@conformetry/cli README](https://github.com/Organizzolini/codebase/tree/main/packages/ic-suite/conformetry/conformetry-cli#readme).
6
+ This package adds two things the standalone CLI cannot offer: generators addressed by name through `nx g`,
7
+ and a cached validation target inferred onto every project that holds
8
+ instances.
9
+
10
+ ```bash
11
+ npm install --save-dev @conformetry/nx
12
+ ```
13
+
14
+ ## Setup
15
+
16
+ Register the plugin in `nx.json` and wire the bootstrap into `postinstall`:
17
+
18
+ ```json
19
+ {
20
+ "plugins": [
21
+ {
22
+ "plugin": "@conformetry/nx",
23
+ "options": {
24
+ "configurationPath": "configuration/conformetry.config.ts",
25
+ "validateTargetName": "conformetry-validate"
26
+ }
27
+ }
28
+ ],
29
+ "sync": { "globalGenerators": ["@conformetry/nx:sync"] }
30
+ }
31
+ ```
32
+
33
+ ```json
34
+ { "scripts": { "postinstall": "conformetry-nx-bootstrap-generators" } }
35
+ ```
36
+
37
+ Then type your configuration as `ConformetryNxConfiguration` rather than
38
+ `ConformetryConfiguration`, so instance groups are checked against what Nx can
39
+ actually resolve:
40
+
41
+ ```ts
42
+ import { type ConformetryNxConfiguration } from "@conformetry/nx";
43
+ ```
44
+
45
+ ## The emitted plugin
46
+
47
+ Which generators a workspace has is a property of its conformetry
48
+ configuration, so the plugin exposing them is **emitted rather than written**.
49
+ `conformetry-nx-bootstrap-generators` derives it from your configuration,
50
+ writes it to `.conformetry/nx-generators` (gitignore that directory — it is a
51
+ build artifact), and links it into the root `node_modules` so
52
+ `nx g conformetry:<generator>` resolves. The link is what makes the plugin
53
+ addressable, since Nx resolves a generator's package prefix by requiring it by
54
+ name rather than by matching an Nx project.
55
+
56
+ | Default | Value |
57
+ | ------- | ----- |
58
+ | Output path | `.conformetry/nx-generators` |
59
+ | Package name | `conformetry` — so generators are `nx g conformetry:<name>` |
60
+
61
+ The bootstrap warns rather than exiting non-zero when the configuration cannot
62
+ be read, so a configuration mid-edit never blocks an unrelated install. Drift
63
+ is caught where it matters instead: every conformetry command compares the
64
+ emitted plugin against the configuration and refuses to run against a stale
65
+ one.
66
+
67
+ `@conformetry/nx` deliberately declares no generators of its own beyond `sync`.
68
+ `nx g @conformetry/nx:anything` resolves nothing by design — which generators
69
+ exist is a property of your configuration, not of this package.
70
+
71
+ ## Generating
72
+
73
+ ```bash
74
+ nx g conformetry:nestjs-service-module --name=billing --project=lexico
75
+ ```
76
+
77
+ Nx prompts for missing inputs from the generator's own schema and writes
78
+ through its virtual `Tree`, so `--dry-run` works and the workspace formatter
79
+ runs over the result.
80
+
81
+ ## Validating
82
+
83
+ The plugin infers a `conformetry-validate` target onto every project holding
84
+ instances, so validation is cached and participates in `nx affected`:
85
+
86
+ ```bash
87
+ nx run <project>:conformetry-validate
88
+ nx run-many --target=conformetry-validate --all
89
+ nx affected --target=conformetry-validate --base=main
90
+ ```
91
+
92
+ | Executor option | Purpose |
93
+ | --------------- | ------- |
94
+ | `configurationPath` | Configuration file, workspace-root relative |
95
+ | `languages` | Restrict the run to named validators; all run when omitted |
96
+
97
+ ## Tag-scoped instances
98
+
99
+ The Nx host reads an instance group's `tags` as project tags, and resolves that
100
+ group's globs _inside_ each matching project — so where a generator belongs is
101
+ stated exactly once:
102
+
103
+ ```ts
104
+ instances: [{ patterns: ["src/modules/*"], tags: ["framework:nestjs"] }];
105
+ ```
106
+
107
+ A project must carry **every** tag a group names, so a second tag narrows the
108
+ group further — `tags: ["framework:nestjs", "language:graphql"]` reaches only
109
+ NestJS projects that are also GraphQL.
110
+
111
+ The two group forms are told apart by `tags` alone. There is no second field
112
+ that could disagree with it: a separate scope that excluded a project the globs
113
+ reached narrowed validation silently, and validation cannot notice instances
114
+ it was never offered.
115
+
116
+ Omitting `patterns` selects the projects without locating anything in them,
117
+ which is what a template with no instances yet wants — `nx g` is still confined
118
+ to the projects the template suits.
119
+
120
+ ## Exports
121
+
122
+ `runConformetryGenerator` for generator wrappers, `bootstrapPlugin` and
123
+ `runBootstrapCli` for the bootstrap, the `ConformetryNxConfiguration` and
124
+ instance-group types, and the NestJS services behind them (`PluginService`,
125
+ `AdapterService`, `InstancesService`, `ScopeService`, `OptionsService`).
126
+
127
+ ## Test
128
+
129
+ ```bash
130
+ nx run conformetry-nx:vitest
131
+ ```
132
+
133
+ ## License
134
+
135
+ MIT — see [LICENSE](../../../../LICENSE).
136
+
137
+ ## 👔 Conformetry
138
+
139
+ This project was generated from the [nestjs-service-project](../../../../configuration/conformetry-templates/nestjs-service-project) conformetry template.
140
+
141
+ <!-- callidescope:start -->
142
+
143
+ ## 🔭 Callidescope
144
+
145
+ Call stacks traced through `packages/ic-suite/conformetry/conformetry-nx`, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.
146
+
147
+ | Measure | Value |
148
+ | --- | --- |
149
+ | Callables | 114 |
150
+ | Files | 46 |
151
+ | Calls traced | 137 |
152
+ | Call stacks | 8 |
153
+ | Deepest stack | 15 |
154
+ | Stacks through recursion | 0 |
155
+ | Unfollowable calls | 1 |
156
+
157
+ ### Limits
158
+
159
+ What this project is judged against, as declared in its own `callidescope.config.ts`.
160
+
161
+ | Limit | Value |
162
+ | --- | --- |
163
+ | `maximumDepth` | 15 |
164
+ | `maximumBreadth` | 9 |
165
+
166
+ ### Call stacks (depth)
167
+
168
+ **1. `validateExecutor`** — depth ≥ 15 · orphan-root
169
+
170
+ ```text
171
+ 🚀 validateExecutor(…): Promise<{ success: boolean; }> [packages/ic-suite/conformetry/conformetry-nx/src/executors/validate/executor.ts:16]
172
+ ↳ Validates one project's instances against their conformetry templates.
173
+ └─> PluginService.runValidation(args: RunValidationArguments): Promise<RunValidationResult> [packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:391]
174
+ ↳ Validates one project's instances and renders the report.
175
+ └─> ValidationService.validate(args: RunValidationArguments): RunValidationResult [packages/ic-suite/conformetry/conformetry-validation/src/modules/validation/validation.service.ts:136]
176
+ ↳ Validates every instance and returns the differences found.
177
+ └─> ConfigurationService.matchInstances(…): ResolvedInstances [packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:263]
178
+ ↳ Resolves every instance to the template, or templates, that explain it.
179
+ └─> InstanceDiscoveryService.matchInstances(…): ResolvedInstances [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:95]
180
+ ↳ Resolves every instance to the template, or templates, that explain it.
181
+ └─> InstanceDiscoveryMatchingService.matchInstances(…): ResolvedInstances [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:93]
182
+ ↳ Resolves every instance to the template — or templates — that explain it.
183
+ └─> InstanceDiscoveryMatchingService.matchTemplates(…): TemplateMatch[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:154]
184
+ ↳ Weighs every template that shares at least one file with the instance, best-first.
185
+ └─> InstanceDiscoveryMatchingService.map(…)(…): { matchedFileCount: number; matchRatio: number; template: TemplateDefinition; } [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:160]
186
+ └─> TemplateDiscoveryService.countMatchingFiles(…): number [packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:121]
187
+ ↳ Counts how many of a template's files the instance path already has.
188
+ └─> TemplateDiscoveryService.filter(…)(templateFilePath: string): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:130]
189
+ └─> TemplateDiscoveryService.resolveInstanceFilePath(…): string [packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:179]
190
+ ↳ Maps a template file path to the instance file path it governs.
191
+ └─> RenderingService.renderPath(…): string [packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:142]
192
+ ↳ Renders a template path with mustache, the same way contents are rendered.
193
+ └─> RenderingService.assertEverySubstitutionSupplied(…): void [packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:35]
194
+ ↳ Refuses to render a template asking for a value nobody supplied.
195
+ └─> RenderingService.collectInterpolatedNames(template: string): string[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:61]
196
+ ↳ Every placeholder a template interpolates, deduplicated.
197
+ └─> RenderingService.walk(spans: TemplateSpans): void [packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:63]
198
+ ```
199
+
200
+ **2. `runConformetryGenerator`** — depth ≥ 14 · exported-function
201
+
202
+ ```text
203
+ 🚀 runConformetryGenerator(…): Promise<string[]> [packages/ic-suite/conformetry/conformetry-nx/src/index.ts:93]
204
+ ↳ Runs one configured generator against an Nx tree.
205
+ └─> PluginService.runGenerator(args: RunGeneratorArguments): Promise<string[]> [packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:330]
206
+ ↳ Runs one configured generator against an Nx tree.
207
+ └─> PluginService.assertPluginInSync(args: { configurationPath: string; workspaceRoot: string; }): Promise<void> [packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:118]
208
+ ↳ Fails fast when the plugin would run against a stale or broken setup.
209
+ └─> PluginService.assertEmittedPluginCurrent(args: { configurationPath: string; workspaceRoot: string; }): Promise<void> [packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:84]
210
+ ↳ Fails when the emitted Nx plugin no longer matches the configuration. `generators.json` and its schemas are derived…
211
+ └─> GeneratorService.emitPlugin(args: EmitPluginArguments): Promise<EmittedFile[]> [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:212]
212
+ ↳ Returns every file the consumer's generator plugin consists of.
213
+ └─> GeneratorService.map(…)(…): { content: string; filePath: string; } [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:238]
214
+ └─> GeneratorService.resolveScopedProjectNames(…): string[] | undefined [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:180]
215
+ ↳ The projects a generator's tagged groups admit, or nothing when it has none.
216
+ └─> ScopeService.resolveScopedProjectNames(…): string[] [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:134]
217
+ ↳ The projects a generator's groups admit, by name and sorted.
218
+ └─> ScopeService.filter(…)(project: ProjectScope): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:147]
219
+ └─> ScopeService.some(…)(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:148]
220
+ └─> ScopeService.matchesProject(args: { group: ConformetryInstanceGroup; project: ProjectScope; }): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:52]
221
+ ↳ Returns whether a group applies to a project.
222
+ └─> ScopeService.isProjectGroup(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:39]
223
+ ↳ Whether a group locates its instances by project tag.
224
+ └─> ConfigurationService.isProjectScoped(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:232]
225
+ ↳ Whether a group locates its instances inside the hosts its tags select.
226
+ └─> InstanceGroupService.isProjectScoped(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-group/instance-group.service.ts:42]
227
+ ↳ Whether a group locates its instances inside the hosts its tags select.
228
+ ```
229
+
230
+ **3. `runBootstrapCli`** — depth ≥ 12 · orphan-root
231
+
232
+ ```text
233
+ 🚀 runBootstrapCli(workspaceRoot: string): Promise<void> [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/bootstrap.utilities.ts:74]
234
+ ↳ Bootstraps the plugin, warning rather than failing the install.
235
+ └─> bootstrapPlugin(workspaceRoot: string): Promise<EmittedFile[]> [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/bootstrap.utilities.ts:39]
236
+ ↳ Emits the generator plugin and puts it where Nx will find it.
237
+ └─> GeneratorService.emitPlugin(args: EmitPluginArguments): Promise<EmittedFile[]> [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:212]
238
+ ↳ Returns every file the consumer's generator plugin consists of.
239
+ └─> GeneratorService.map(…)(…): { content: string; filePath: string; } [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:238]
240
+ └─> GeneratorService.resolveScopedProjectNames(…): string[] | undefined [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:180]
241
+ ↳ The projects a generator's tagged groups admit, or nothing when it has none.
242
+ └─> ScopeService.resolveScopedProjectNames(…): string[] [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:134]
243
+ ↳ The projects a generator's groups admit, by name and sorted.
244
+ └─> ScopeService.filter(…)(project: ProjectScope): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:147]
245
+ └─> ScopeService.some(…)(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:148]
246
+ └─> ScopeService.matchesProject(args: { group: ConformetryInstanceGroup; project: ProjectScope; }): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:52]
247
+ ↳ Returns whether a group applies to a project.
248
+ └─> ScopeService.isProjectGroup(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:39]
249
+ ↳ Whether a group locates its instances by project tag.
250
+ └─> ConfigurationService.isProjectScoped(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:232]
251
+ ↳ Whether a group locates its instances inside the hosts its tags select.
252
+ └─> InstanceGroupService.isProjectScoped(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-group/instance-group.service.ts:42]
253
+ ↳ Whether a group locates its instances inside the hosts its tags select.
254
+ ```
255
+
256
+ <details>
257
+ <summary>5 more call stacks</summary>
258
+
259
+ **4. `syncGenerator`** — depth ≥ 11 · orphan-root
260
+
261
+ ```text
262
+ 🚀 syncGenerator(…): Promise<{ outOfSyncMessage: string; }> [packages/ic-suite/conformetry/conformetry-nx/src/generators/sync/generator.ts:26]
263
+ ↳ Regenerates the workspace's conformetry generator plugin.
264
+ └─> GeneratorService.emitPlugin(args: EmitPluginArguments): Promise<EmittedFile[]> [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:212]
265
+ ↳ Returns every file the consumer's generator plugin consists of.
266
+ └─> GeneratorService.map(…)(…): { content: string; filePath: string; } [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:238]
267
+ └─> GeneratorService.resolveScopedProjectNames(…): string[] | undefined [packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:180]
268
+ ↳ The projects a generator's tagged groups admit, or nothing when it has none.
269
+ └─> ScopeService.resolveScopedProjectNames(…): string[] [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:134]
270
+ ↳ The projects a generator's groups admit, by name and sorted.
271
+ └─> ScopeService.filter(…)(project: ProjectScope): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:147]
272
+ └─> ScopeService.some(…)(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:148]
273
+ └─> ScopeService.matchesProject(args: { group: ConformetryInstanceGroup; project: ProjectScope; }): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:52]
274
+ ↳ Returns whether a group applies to a project.
275
+ └─> ScopeService.isProjectGroup(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:39]
276
+ ↳ Whether a group locates its instances by project tag.
277
+ └─> ConfigurationService.isProjectScoped(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:232]
278
+ ↳ Whether a group locates its instances inside the hosts its tags select.
279
+ └─> InstanceGroupService.isProjectScoped(group: ConformetryInstanceGroup): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-group/instance-group.service.ts:42]
280
+ ↳ Whether a group locates its instances inside the hosts its tags select.
281
+ ```
282
+
283
+ **5. `anonymous`** — depth ≥ 9 · orphan-root
284
+
285
+ ```text
286
+ 🚀 anonymous(…): Promise<CreateNodesResultArray> [packages/ic-suite/conformetry/conformetry-nx/src/index.ts:49]
287
+ └─> PluginService.inferTargets(args: InferTargetsArguments): Promise<Map<string, InferredTargets>> [packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:265]
288
+ ↳ Infers a validation target onto every project that holds at least one instance.
289
+ └─> InstancesService.findProjectInstances(args: FindProjectInstancesArguments): Promise<Instance[]> [packages/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:68]
290
+ ↳ Expands every instance group that applies to a project, keeping only the instances that live inside it.
291
+ └─> InstancesService.flatMap(…)(this: undefined, group: ConformetryInstanceGroup): Instance[] [packages/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:84]
292
+ └─> ConfigurationService.findInstances(args: FindInstancesArguments): Instance[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:222]
293
+ ↳ Expands instance globs into the instances that exist.
294
+ └─> InstanceDiscoveryService.findInstances(args: FindInstancesArguments): Instance[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:90]
295
+ ↳ Expands instance globs into the instances that exist.
296
+ └─> InstanceDiscoveryLocatingService.findInstances(args: FindInstancesArguments): Instance[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:121]
297
+ ↳ Expands every pattern and returns one instance per distinct path, name, and scope kind.
298
+ └─> InstanceDiscoveryLocatingService.resolveGlobSuffix(pattern: string): string [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:73]
299
+ ↳ Returns the literal filename suffix a pattern ends with, such as `.service.ts` for `**\/*.service.ts`, or `""` when the…
300
+ └─> InstanceDiscoveryLocatingService.map(…)(character: string): number [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:76]
301
+ ```
302
+
303
+ **6. `AdapterService.listDirectory`** — depth 3 · orphan-root
304
+
305
+ ```text
306
+ 🚀 AdapterService.listDirectory(directoryPath: string): Promise<DirectoryEntry[]> [packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:114]
307
+ └─> AdapterService.listDirectory(…): Promise<DirectoryEntry[]> [packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:42]
308
+ ↳ Lists a directory through the tree when it is inside the workspace, and through the filesystem otherwise.
309
+ └─> AdapterService.resolveTreePath(args: { directoryPath: string; workspaceRoot: string; }): string | undefined [packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:89]
310
+ ↳ Converts an absolute path to the workspace-relative form a `Tree` uses, or returns `undefined` when the path lies…
311
+ ```
312
+
313
+ **7. `AdapterService.readFile`** — depth 3 · orphan-root
314
+
315
+ ```text
316
+ 🚀 AdapterService.readFile(filePath: string): Promise<string> [packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:124]
317
+ └─> AdapterService.readFile(…): Promise<string> [packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:68]
318
+ ↳ Reads a file through the tree when possible, the filesystem otherwise.
319
+ └─> AdapterService.resolveTreePath(args: { directoryPath: string; workspaceRoot: string; }): string | undefined [packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:89]
320
+ ↳ Converts an absolute path to the workspace-relative form a `Tree` uses, or returns `undefined` when the path lies…
321
+ ```
322
+
323
+ **8. `AdapterService.writeFile`** — depth 2 · orphan-root
324
+
325
+ ```text
326
+ 🚀 AdapterService.writeFile(filePath: string, content: string): Promise<void> [packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:131]
327
+ └─> AdapterService.resolveTreePath(args: { directoryPath: string; workspaceRoot: string; }): string | undefined [packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:89]
328
+ ↳ Converts an absolute path to the workspace-relative form a `Tree` uses, or returns `undefined` when the path lies…
329
+ ```
330
+
331
+ </details>
332
+
333
+ ### Breadth
334
+
335
+ | Callable | Breadth | Calls directly | Location |
336
+ | --- | --- | --- | --- |
337
+ | `PluginService.runGenerator` | 9 | `PluginService.resolveOptions`, `PluginService.assertPluginInSync`, `ConfigurationService.loadConformetryConfiguration`, `PluginService.find(…)`, `PluginService.map(…)`, `AdapterService.createAdapters`, `OptionsService.resolveGeneratorInputs`, `GenerationService.runGenerator`, `PathsService.resolveGenerationPath` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:330` |
338
+ | `bootstrapPlugin` | 9 | `resolveGeneratorService`, `resolveOptionsService`, `resolveProjectsService`, `GeneratorService.emitPlugin`, `OptionsService.resolveConfigurationPath`, `readNxConfiguration`, `ProjectsService.listWorkspaceProjects`, `writePlugin`, `linkPlugin` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/bootstrap.utilities.ts:39` |
339
+ | `syncGenerator` | 7 | `resolveGeneratorService`, `resolveOptionsService`, `resolveProjectsService`, `GeneratorService.emitPlugin`, `OptionsService.resolveConfigurationPath`, `readNxConfiguration`, `ProjectsService.listWorkspaceProjects` | `packages/ic-suite/conformetry/conformetry-nx/src/generators/sync/generator.ts:26` |
340
+
341
+ <details>
342
+ <summary>55 more callables</summary>
343
+
344
+ | Callable | Breadth | Calls directly | Location |
345
+ | --- | --- | --- | --- |
346
+ | `GeneratorService.emitPlugin` | 6 | `ConfigurationService.loadConformetryConfiguration`, `GeneratorService.toSorted(…)`, `GeneratorService.buildGeneratorsManifest`, `GeneratorService.map(…)`, `GeneratorService.map(…)`, `GeneratorService.stringify` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:212` |
347
+ | `InstancesService.findProjectInstances` | 6 | `ConfigurationService.loadConformetryConfiguration`, `InstancesService.filter(…)`, `InstancesService.flatMap(…)`, `InstancesService.flatMap(…)`, `InstancesService.flatMap(…)`, `InstancesService.filter(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:68` |
348
+ | `PluginService.runValidation` | 6 | `PluginService.resolveOptions`, `PluginService.assertPluginInSync`, `ValidationService.validate`, `InstancesService.findProjectInstances`, `PluginService.resolveTemplates`, `ReportingService.formatReport` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:391` |
349
+ | `PathsService.resolveGenerationPath` | 5 | `PathsService.resolveNewProjectPath`, `InstancesService.findProjectInstances`, `PathsService.requireModulePath`, `PathsService.resolveScopedDirectory`, `PathsService.resolveModuleParentPath` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:213` |
350
+ | `PluginService.inferTargets` | 5 | `PluginService.resolveOptions`, `PluginService.resolveTemplateInputs`, `PluginService.filter(…)`, `ProjectsService.readProjectScope`, `InstancesService.findProjectInstances` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:265` |
351
+ | `ScopeService.resolveScopedProjectNames` | 4 | `ScopeService.filter(…)`, `ScopeService.toSorted(…)`, `ScopeService.map(…)`, `ScopeService.filter(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:134` |
352
+ | `ProjectsService.listWorkspaceProjects` | 4 | `ProjectsService.toSorted(…)`, `ProjectsService.map(…)`, `ProjectsService.listProjectConfigurationFiles`, `ProjectsService.readIgnoredPaths` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:118` |
353
+ | `anonymous` | 4 | `resolvePluginService`, `PluginService.inferTargets`, `filter(…)`, `map(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/index.ts:49` |
354
+ | `ScopeService.resolveGroup` | 3 | `ScopeService.matchesProject`, `ScopeService.isProjectGroup`, `ScopeService.map(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:74` |
355
+ | `AdapterService.listDirectory` | 3 | `AdapterService.resolveTreePath`, `AdapterService.map(…)`, `AdapterService.map(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:42` |
356
+ | `PathsService.resolveScopedDirectory` | 3 | `ConfigurationService.loadConformetryConfiguration`, `PathsService.find(…)`, `ScopeService.resolveScopedDirectory` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:160` |
357
+ | `PluginService.resolveOptions` | 3 | `OptionsService.resolveConfigurationPath`, `PluginService.readNxConfiguration`, `OptionsService.resolvePluginOptions` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:189` |
358
+ | `PluginService.resolveTemplateInputs` | 3 | `ConfigurationService.loadConformetryConfiguration`, `PluginService.map(…)`, `PluginService.map(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:219` |
359
+ | `ScopeService.matchesProject` | 2 | `ScopeService.isProjectGroup`, `ScopeService.some(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:52` |
360
+ | `ScopeService.resolveScopedDirectory` | 2 | `ScopeService.find(…)`, `ScopeService.findIndex(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:108` |
361
+ | `GeneratorService.buildSchema` | 2 | `GeneratorService.stringify`, `GeneratorService.buildSchemaProperties` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:122` |
362
+ | `GeneratorService.map(…)` | 2 | `GeneratorService.buildSchema`, `GeneratorService.resolveScopedProjectNames` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:238` |
363
+ | `OptionsService.readRegisteredConfigurationPath` | 2 | `OptionsService.isUnknownArray`, `OptionsService.readString` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/options/options.service.ts:38` |
364
+ | `OptionsService.resolveConfigurationPath` | 2 | `OptionsService.readRegisteredConfigurationPath`, `OptionsService.find(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/options/options.service.ts:98` |
365
+ | `ProjectsService.readIgnoredPaths` | 2 | `ProjectsService.filter(…)`, `ProjectsService.map(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:97` |
366
+ | `ProjectsService.readProjectScope` | 2 | `ProjectsService.isUnknownArray`, `ProjectsService.filter(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:134` |
367
+ | `PluginService.assertEmittedPluginCurrent` | 2 | `GeneratorService.emitPlugin`, `ProjectsService.listWorkspaceProjects` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:84` |
368
+ | `PluginService.assertPluginInSync` | 2 | `PluginService.assertTemplatesExist`, `PluginService.assertEmittedPluginCurrent` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:118` |
369
+ | `PluginService.resolveTemplates` | 2 | `ConfigurationService.loadConformetryConfiguration`, `PluginService.map(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:236` |
370
+ | `runConformetryGenerator` | 2 | `resolvePluginService`, `PluginService.runGenerator` | `packages/ic-suite/conformetry/conformetry-nx/src/index.ts:93` |
371
+ | `validateExecutor` | 2 | `resolvePluginService`, `PluginService.runValidation` | `packages/ic-suite/conformetry/conformetry-nx/src/executors/validate/executor.ts:16` |
372
+ | `ScopeService.isProjectGroup` | 1 | `ConfigurationService.isProjectScoped` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:39` |
373
+ | `ScopeService.find(…)` | 1 | `ScopeService.isProjectGroup` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:111` |
374
+ | `ScopeService.filter(…)` | 1 | `ScopeService.isProjectGroup` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:138` |
375
+ | `ScopeService.filter(…)` | 1 | `ScopeService.some(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:147` |
376
+ | `ScopeService.some(…)` | 1 | `ScopeService.matchesProject` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/scope/scope.service.ts:148` |
377
+ | `GeneratorService.buildGeneratorsManifest` | 1 | `GeneratorService.stringify` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:86` |
378
+ | `GeneratorService.resolveScopedProjectNames` | 1 | `ScopeService.resolveScopedProjectNames` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:180` |
379
+ | `GeneratorService.map(…)` | 1 | `GeneratorService.buildGeneratorModule` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/generator.service.ts:229` |
380
+ | `AdapterService.readFile` | 1 | `AdapterService.resolveTreePath` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:68` |
381
+ | `AdapterService.listDirectory` | 1 | `AdapterService.listDirectory` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:114` |
382
+ | `AdapterService.readFile` | 1 | `AdapterService.readFile` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:124` |
383
+ | `AdapterService.writeFile` | 1 | `AdapterService.resolveTreePath` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/adapter/adapter.service.ts:131` |
384
+ | `InstancesService.flatMap(…)` | 1 | `ScopeService.resolveGroup` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:79` |
385
+ | `InstancesService.flatMap(…)` | 1 | `ConfigurationService.findInstances` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:84` |
386
+ | `InstancesService.filter(…)` | 1 | `InstancesService.isInsideProject` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/instances/instances.service.ts:96` |
387
+ | `OptionsService.resolvePluginOptions` | 1 | `OptionsService.readString` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/options/options.service.ts:147` |
388
+ | `PathsService.requireModulePath` | 1 | `PathsService.resolveModulePath` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:54` |
389
+ | `PathsService.resolveModuleParentPath` | 1 | `PathsService.toSorted(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:83` |
390
+ | `PathsService.resolveModulePath` | 1 | `PathsService.find(…)` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:119` |
391
+ | `PathsService.resolveNewProjectPath` | 1 | `PathsService.resolveTypeDirectoryPath` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/paths/paths.service.ts:137` |
392
+ | `ProjectsService.map(…)` | 1 | `ProjectsService.readProjectScope` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/projects/projects.service.ts:124` |
393
+ | `PluginService.assertTemplatesExist` | 1 | `ConfigurationService.loadConformetryConfiguration` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:134` |
394
+ | `PluginService.map(…)` | 1 | `ConfigurationService.collectTemplate` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin.service.ts:245` |
395
+ | `resolveGeneratorService` | 1 | `resolvePluginContext` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin-context.utilities.ts:18` |
396
+ | `resolveOptionsService` | 1 | `resolvePluginContext` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin-context.utilities.ts:25` |
397
+ | `resolvePluginService` | 1 | `resolvePluginContext` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin-context.utilities.ts:32` |
398
+ | `resolveProjectsService` | 1 | `resolvePluginContext` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/plugin/plugin-context.utilities.ts:39` |
399
+ | `runBootstrapCli` | 1 | `bootstrapPlugin` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/bootstrap.utilities.ts:74` |
400
+ | `linkPlugin` | 1 | `leadsTo` | `packages/ic-suite/conformetry/conformetry-nx/src/modules/generator/bootstrap.utilities.ts:116` |
401
+
402
+ </details>
403
+ <!-- callidescope:end -->
404
+
405
+ ## 🕸️ Codependix
406
+
407
+ 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`.
408
+
409
+ ### Nx Neighborhood
410
+
411
+ <!-- codependix:start name="codependix-nx-projects" -->
412
+ ```mermaid
413
+ graph LR
414
+ conformetry_configuration["conformetry-configuration"]
415
+ conformetry_examples["conformetry-examples"]
416
+ conformetry_generation["conformetry-generation"]
417
+ conformetry_nx["conformetry-nx"]
418
+ conformetry_output["conformetry-output"]
419
+ conformetry_validation["conformetry-validation"]
420
+ logger["logger"]
421
+ conformetry_examples --> conformetry_nx
422
+ conformetry_nx --> conformetry_configuration
423
+ conformetry_nx --> conformetry_generation
424
+ conformetry_nx --> conformetry_output
425
+ conformetry_nx --> conformetry_validation
426
+ conformetry_nx --> logger
427
+ classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
428
+ class conformetry_nx subject
429
+ ```
430
+ <!-- codependix:end name="codependix-nx-projects" -->
431
+
432
+ ### NestJS Module Graph
433
+
434
+ <!-- codependix:start name="codependix-nestjs-modules" -->
435
+ ```mermaid
436
+ flowchart LR
437
+ AdapterModule
438
+ ConfigurationModule
439
+ DifferencesModule
440
+ FilesModule
441
+ GenerationModule
442
+ GeneratorModule
443
+ InputModule
444
+ InstanceDiscoveryModule
445
+ InstanceGroupModule
446
+ InstancesModule
447
+ JsonModule
448
+ JupyterModule
449
+ LanguagesModule
450
+ LoggerModule([LoggerModule])
451
+ MainModule
452
+ MarkdownModule
453
+ OptionsModule
454
+ PathsModule
455
+ PluginModule
456
+ ProjectsModule
457
+ PythonModule
458
+ RenderingModule
459
+ ReportingModule
460
+ RunnerModule
461
+ ScopeModule
462
+ ScoringModule
463
+ TemplateDiscoveryModule
464
+ TextModule
465
+ TypescriptModule
466
+ ValidationModule
467
+ ConfigurationModule --> InputModule
468
+ ConfigurationModule --> InstanceDiscoveryModule
469
+ ConfigurationModule --> InstanceGroupModule
470
+ ConfigurationModule --> RenderingModule
471
+ ConfigurationModule --> TemplateDiscoveryModule
472
+ FilesModule --> ConfigurationModule
473
+ FilesModule --> DifferencesModule
474
+ GenerationModule --> ConfigurationModule
475
+ GeneratorModule --> ConfigurationModule
476
+ GeneratorModule --> ScopeModule
477
+ InstanceDiscoveryModule --> InstanceGroupModule
478
+ InstanceDiscoveryModule --> RenderingModule
479
+ InstanceDiscoveryModule --> TemplateDiscoveryModule
480
+ InstancesModule --> ConfigurationModule
481
+ InstancesModule --> ScopeModule
482
+ JsonModule --> ScoringModule
483
+ JupyterModule --> JsonModule
484
+ JupyterModule --> MarkdownModule
485
+ JupyterModule --> PythonModule
486
+ LanguagesModule --> JsonModule
487
+ LanguagesModule --> JupyterModule
488
+ LanguagesModule --> MarkdownModule
489
+ LanguagesModule --> PythonModule
490
+ LanguagesModule --> TextModule
491
+ LanguagesModule --> TypescriptModule
492
+ MainModule --> GeneratorModule
493
+ MainModule --> PluginModule
494
+ MarkdownModule --> ScoringModule
495
+ PathsModule --> ConfigurationModule
496
+ PathsModule --> InstancesModule
497
+ PathsModule --> ScopeModule
498
+ PluginModule --> AdapterModule
499
+ PluginModule --> ConfigurationModule
500
+ PluginModule --> GenerationModule
501
+ PluginModule --> GeneratorModule
502
+ PluginModule --> InstancesModule
503
+ PluginModule --> OptionsModule
504
+ PluginModule --> PathsModule
505
+ PluginModule --> ProjectsModule
506
+ PluginModule --> ReportingModule
507
+ PluginModule --> ScopeModule
508
+ PluginModule --> ValidationModule
509
+ PythonModule --> DifferencesModule
510
+ PythonModule --> ScoringModule
511
+ ReportingModule --> ScoringModule
512
+ ScopeModule --> ConfigurationModule
513
+ TemplateDiscoveryModule --> RenderingModule
514
+ TypescriptModule --> ScoringModule
515
+ ValidationModule --> ConfigurationModule
516
+ ValidationModule --> FilesModule
517
+ ValidationModule --> LanguagesModule
518
+ ValidationModule --> RunnerModule
519
+ ValidationModule --> ScoringModule
520
+ ```
521
+
522
+ _Rounded modules are global: every module can inject them, so their edges are left out._
523
+ <!-- codependix:end name="codependix-nestjs-modules" -->
524
+
525
+ ### File Imports
526
+
527
+ <!-- codependix:start name="codependix-file-imports" -->
528
+ ```mermaid
529
+ graph LR
530
+ file_callidescope_config_ts["callidescope.config.ts"]
531
+ file_codependix_config_ts["codependix.config.ts"]
532
+ file_codometer_config_ts["codometer.config.ts"]
533
+ file_eslint_config_ts["eslint.config.ts"]
534
+ file_src_executors_validate_executor_ts["src/executors/validate/executor.ts"]
535
+ file_src_executors_validate_executor_types_ts["src/executors/validate/executor.types.ts"]
536
+ file_src_executors_validate_executor_unit_test_ts["src/executors/validate/executor.unit.test.ts"]
537
+ file_src_generators_sync_generator_ts["src/generators/sync/generator.ts"]
538
+ file_src_generators_sync_generator_types_ts["src/generators/sync/generator.types.ts"]
539
+ file_src_generators_sync_generator_unit_test_ts["src/generators/sync/generator.unit.test.ts"]
540
+ file_src_index_ts["src/index.ts"]
541
+ file_src_index_unit_test_ts["src/index.unit.test.ts"]
542
+ file_src_main_module_ts["src/main.module.ts"]
543
+ file_src_main_ts["src/main.ts"]
544
+ file_src_main_unit_test_ts["src/main.unit.test.ts"]
545
+ file_src_modules_adapter_adapter_constants_ts["src/modules/adapter/adapter.constants.ts"]
546
+ file_src_modules_adapter_adapter_module_ts["src/modules/adapter/adapter.module.ts"]
547
+ file_src_modules_adapter_adapter_service_ts["src/modules/adapter/adapter.service.ts"]
548
+ file_src_modules_adapter_adapter_service_unit_test_ts["src/modules/adapter/adapter.service.unit.test.ts"]
549
+ file_src_modules_adapter_adapter_types_ts["src/modules/adapter/adapter.types.ts"]
550
+ file_src_modules_generator_bootstrap_utilities_ts["src/modules/generator/bootstrap.utilities.ts"]
551
+ file_src_modules_generator_bootstrap_utilities_unit_test_ts["src/modules/generator/bootstrap.utilities.unit.test.ts"]
552
+ file_src_modules_generator_generator_constants_ts["src/modules/generator/generator.constants.ts"]
553
+ file_src_modules_generator_generator_module_ts["src/modules/generator/generator.module.ts"]
554
+ file_src_modules_generator_generator_service_ts["src/modules/generator/generator.service.ts"]
555
+ file_src_modules_generator_generator_service_unit_test_ts["src/modules/generator/generator.service.unit.test.ts"]
556
+ file_src_modules_generator_generator_types_ts["src/modules/generator/generator.types.ts"]
557
+ file_src_modules_instances_instances_constants_ts["src/modules/instances/instances.constants.ts"]
558
+ file_src_modules_instances_instances_module_ts["src/modules/instances/instances.module.ts"]
559
+ file_src_modules_instances_instances_service_ts["src/modules/instances/instances.service.ts"]
560
+ file_src_modules_instances_instances_service_unit_test_ts["src/modules/instances/instances.service.unit.test.ts"]
561
+ file_src_modules_instances_instances_types_ts["src/modules/instances/instances.types.ts"]
562
+ file_src_modules_options_options_constants_ts["src/modules/options/options.constants.ts"]
563
+ file_src_modules_options_options_module_ts["src/modules/options/options.module.ts"]
564
+ file_src_modules_options_options_service_ts["src/modules/options/options.service.ts"]
565
+ file_src_modules_options_options_service_unit_test_ts["src/modules/options/options.service.unit.test.ts"]
566
+ file_src_modules_options_options_types_ts["src/modules/options/options.types.ts"]
567
+ file_src_modules_paths_paths_constants_ts["src/modules/paths/paths.constants.ts"]
568
+ file_src_modules_paths_paths_module_ts["src/modules/paths/paths.module.ts"]
569
+ file_src_modules_paths_paths_service_ts["src/modules/paths/paths.service.ts"]
570
+ file_src_modules_paths_paths_service_unit_test_ts["src/modules/paths/paths.service.unit.test.ts"]
571
+ file_src_modules_paths_paths_types_ts["src/modules/paths/paths.types.ts"]
572
+ file_src_modules_plugin_plugin_context_utilities_ts["src/modules/plugin/plugin-context.utilities.ts"]
573
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts["src/modules/plugin/plugin-context.utilities.unit.test.ts"]
574
+ file_src_modules_plugin_plugin_constants_ts["src/modules/plugin/plugin.constants.ts"]
575
+ file_src_modules_plugin_plugin_module_ts["src/modules/plugin/plugin.module.ts"]
576
+ file_src_modules_plugin_plugin_service_ts["src/modules/plugin/plugin.service.ts"]
577
+ file_src_modules_plugin_plugin_service_unit_test_ts["src/modules/plugin/plugin.service.unit.test.ts"]
578
+ file_src_modules_plugin_plugin_types_ts["src/modules/plugin/plugin.types.ts"]
579
+ file_src_modules_projects_projects_constants_ts["src/modules/projects/projects.constants.ts"]
580
+ file_src_modules_projects_projects_module_ts["src/modules/projects/projects.module.ts"]
581
+ file_src_modules_projects_projects_service_ts["src/modules/projects/projects.service.ts"]
582
+ file_src_modules_projects_projects_service_unit_test_ts["src/modules/projects/projects.service.unit.test.ts"]
583
+ file_src_modules_projects_projects_types_ts["src/modules/projects/projects.types.ts"]
584
+ file_src_modules_scope_scope_constants_ts["src/modules/scope/scope.constants.ts"]
585
+ file_src_modules_scope_scope_module_ts["src/modules/scope/scope.module.ts"]
586
+ file_src_modules_scope_scope_service_ts["src/modules/scope/scope.service.ts"]
587
+ file_src_modules_scope_scope_service_unit_test_ts["src/modules/scope/scope.service.unit.test.ts"]
588
+ file_src_modules_scope_scope_types_ts["src/modules/scope/scope.types.ts"]
589
+ file_testing_mocks_ts["testing/mocks.ts"]
590
+ file_testing_setup_ts["testing/setup.ts"]
591
+ file_vite_config_ts["vite.config.ts"]
592
+ file_vitest_config_ts["vitest.config.ts"]
593
+ file_src_executors_validate_executor_ts --> file_src_executors_validate_executor_types_ts
594
+ file_src_executors_validate_executor_ts --> file_src_modules_plugin_plugin_context_utilities_ts
595
+ file_src_executors_validate_executor_unit_test_ts --> file_src_executors_validate_executor_ts
596
+ file_src_executors_validate_executor_unit_test_ts --> file_src_modules_plugin_plugin_context_utilities_ts
597
+ file_src_generators_sync_generator_ts --> file_src_generators_sync_generator_types_ts
598
+ file_src_generators_sync_generator_ts --> file_src_modules_generator_generator_constants_ts
599
+ file_src_generators_sync_generator_ts --> file_src_modules_options_options_constants_ts
600
+ file_src_generators_sync_generator_ts --> file_src_modules_plugin_plugin_context_utilities_ts
601
+ file_src_generators_sync_generator_unit_test_ts --> file_src_generators_sync_generator_ts
602
+ file_src_generators_sync_generator_unit_test_ts --> file_src_modules_plugin_plugin_context_utilities_ts
603
+ file_src_index_ts --> file_src_modules_plugin_plugin_context_utilities_ts
604
+ file_src_index_ts --> file_src_modules_plugin_plugin_constants_ts
605
+ file_src_index_unit_test_ts --> file_src_index_ts
606
+ file_src_index_unit_test_ts --> file_src_modules_plugin_plugin_context_utilities_ts
607
+ file_src_main_module_ts --> file_src_modules_generator_generator_module_ts
608
+ file_src_main_module_ts --> file_src_modules_plugin_plugin_module_ts
609
+ file_src_main_ts --> file_src_modules_generator_bootstrap_utilities_ts
610
+ file_src_main_unit_test_ts --> file_src_modules_generator_bootstrap_utilities_ts
611
+ file_src_modules_adapter_adapter_module_ts --> file_src_modules_adapter_adapter_service_ts
612
+ file_src_modules_adapter_adapter_service_ts --> file_src_modules_adapter_adapter_constants_ts
613
+ file_src_modules_adapter_adapter_service_ts --> file_src_modules_adapter_adapter_types_ts
614
+ file_src_modules_adapter_adapter_service_unit_test_ts --> file_src_modules_adapter_adapter_service_ts
615
+ file_src_modules_generator_bootstrap_utilities_ts --> file_src_modules_generator_generator_constants_ts
616
+ file_src_modules_generator_bootstrap_utilities_ts --> file_src_modules_generator_generator_types_ts
617
+ file_src_modules_generator_bootstrap_utilities_ts --> file_src_modules_options_options_constants_ts
618
+ file_src_modules_generator_bootstrap_utilities_ts --> file_src_modules_plugin_plugin_context_utilities_ts
619
+ file_src_modules_generator_bootstrap_utilities_unit_test_ts --> file_src_modules_generator_bootstrap_utilities_ts
620
+ file_src_modules_generator_bootstrap_utilities_unit_test_ts --> file_src_modules_generator_generator_constants_ts
621
+ file_src_modules_generator_bootstrap_utilities_unit_test_ts --> file_src_modules_plugin_plugin_context_utilities_ts
622
+ file_src_modules_generator_generator_module_ts --> file_src_modules_generator_generator_service_ts
623
+ file_src_modules_generator_generator_module_ts --> file_src_modules_scope_scope_module_ts
624
+ file_src_modules_generator_generator_service_ts --> file_src_modules_generator_generator_constants_ts
625
+ file_src_modules_generator_generator_service_ts --> file_src_modules_generator_generator_types_ts
626
+ file_src_modules_generator_generator_service_ts --> file_src_modules_instances_instances_types_ts
627
+ file_src_modules_generator_generator_service_ts --> file_src_modules_paths_paths_constants_ts
628
+ file_src_modules_generator_generator_service_ts --> file_src_modules_scope_scope_service_ts
629
+ file_src_modules_generator_generator_service_unit_test_ts --> file_src_modules_generator_generator_module_ts
630
+ file_src_modules_generator_generator_service_unit_test_ts --> file_src_modules_generator_generator_service_ts
631
+ file_src_modules_generator_generator_service_unit_test_ts --> file_src_modules_generator_generator_types_ts
632
+ file_src_modules_generator_generator_types_ts --> file_src_modules_instances_instances_types_ts
633
+ file_src_modules_instances_instances_module_ts --> file_src_modules_instances_instances_service_ts
634
+ file_src_modules_instances_instances_module_ts --> file_src_modules_scope_scope_module_ts
635
+ file_src_modules_instances_instances_service_ts --> file_src_modules_instances_instances_types_ts
636
+ file_src_modules_instances_instances_service_ts --> file_src_modules_scope_scope_service_ts
637
+ file_src_modules_instances_instances_service_unit_test_ts --> file_src_modules_instances_instances_service_ts
638
+ file_src_modules_instances_instances_service_unit_test_ts --> file_src_modules_instances_instances_types_ts
639
+ file_src_modules_instances_instances_service_unit_test_ts --> file_src_modules_scope_scope_module_ts
640
+ file_src_modules_options_options_module_ts --> file_src_modules_options_options_service_ts
641
+ file_src_modules_options_options_service_ts --> file_src_modules_options_options_constants_ts
642
+ file_src_modules_options_options_service_ts --> file_src_modules_options_options_types_ts
643
+ file_src_modules_options_options_service_unit_test_ts --> file_src_modules_options_options_constants_ts
644
+ file_src_modules_options_options_service_unit_test_ts --> file_src_modules_options_options_service_ts
645
+ file_src_modules_paths_paths_module_ts --> file_src_modules_instances_instances_module_ts
646
+ file_src_modules_paths_paths_module_ts --> file_src_modules_paths_paths_service_ts
647
+ file_src_modules_paths_paths_module_ts --> file_src_modules_scope_scope_module_ts
648
+ file_src_modules_paths_paths_service_ts --> file_src_modules_instances_instances_service_ts
649
+ file_src_modules_paths_paths_service_ts --> file_src_modules_paths_paths_constants_ts
650
+ file_src_modules_paths_paths_service_ts --> file_src_modules_paths_paths_types_ts
651
+ file_src_modules_paths_paths_service_ts --> file_src_modules_scope_scope_service_ts
652
+ file_src_modules_paths_paths_service_unit_test_ts --> file_src_modules_instances_instances_service_ts
653
+ file_src_modules_paths_paths_service_unit_test_ts --> file_src_modules_paths_paths_module_ts
654
+ file_src_modules_paths_paths_service_unit_test_ts --> file_src_modules_paths_paths_service_ts
655
+ file_src_modules_paths_paths_service_unit_test_ts --> file_src_modules_scope_scope_service_ts
656
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_main_module_ts
657
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_generator_generator_service_ts
658
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_options_options_service_ts
659
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_constants_ts
660
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_service_ts
661
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_types_ts
662
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_projects_projects_service_ts
663
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_generator_generator_service_ts
664
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_options_options_service_ts
665
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_context_utilities_ts
666
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_constants_ts
667
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
668
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_projects_projects_service_ts
669
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_adapter_adapter_module_ts
670
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_generator_generator_module_ts
671
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_instances_instances_module_ts
672
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_options_options_module_ts
673
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_paths_paths_module_ts
674
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_plugin_plugin_service_ts
675
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_projects_projects_module_ts
676
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_scope_scope_module_ts
677
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_adapter_adapter_service_ts
678
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_generator_generator_constants_ts
679
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_generator_generator_service_ts
680
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_instances_instances_service_ts
681
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_constants_ts
682
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_service_ts
683
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_types_ts
684
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_paths_paths_service_ts
685
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_constants_ts
686
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_types_ts
687
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_projects_projects_service_ts
688
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_generator_generator_constants_ts
689
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_generator_generator_service_ts
690
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_instances_instances_types_ts
691
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_plugin_plugin_module_ts
692
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
693
+ file_src_modules_plugin_plugin_types_ts --> file_src_modules_instances_instances_types_ts
694
+ file_src_modules_plugin_plugin_types_ts --> file_src_modules_plugin_plugin_constants_ts
695
+ file_src_modules_projects_projects_module_ts --> file_src_modules_projects_projects_service_ts
696
+ file_src_modules_projects_projects_service_ts --> file_src_modules_instances_instances_types_ts
697
+ file_src_modules_projects_projects_service_ts --> file_src_modules_projects_projects_constants_ts
698
+ file_src_modules_projects_projects_service_ts --> file_src_modules_projects_projects_types_ts
699
+ file_src_modules_projects_projects_service_unit_test_ts --> file_src_modules_projects_projects_service_ts
700
+ file_src_modules_scope_scope_module_ts --> file_src_modules_scope_scope_service_ts
701
+ file_src_modules_scope_scope_service_ts --> file_src_modules_instances_instances_types_ts
702
+ file_src_modules_scope_scope_service_ts --> file_src_modules_scope_scope_constants_ts
703
+ file_src_modules_scope_scope_service_unit_test_ts --> file_src_modules_instances_instances_types_ts
704
+ file_src_modules_scope_scope_service_unit_test_ts --> file_src_modules_scope_scope_service_ts
705
+ ```
706
+ <!-- codependix:end name="codependix-file-imports" -->
707
+
708
+ <!-- codometer:start -->
709
+
710
+ ## ⏲️ Codometer
711
+
712
+ ### Project
713
+
714
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-5887-22c55e?style=flat-square)
715
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-205.31_kB-6b7280?style=flat-square)
716
+ ![Folders](https://img.shields.io/badge/Folders-15-4a4a4a?style=flat-square)
717
+ ![Source Files](https://img.shields.io/badge/Source_Files-64-3178c6?style=flat-square)
718
+
719
+ ### Measured Targets
720
+
721
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-10.58_kB_gzip-6b7280?style=flat-square)
722
+
723
+ ### TypeScript
724
+
725
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-63-3178c6?style=flat-square)
726
+ ![Interfaces](https://img.shields.io/badge/Interfaces-20-0ea5e9?style=flat-square)
727
+ ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
728
+ ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
729
+ ![Decorators](https://img.shields.io/badge/Decorators-17-db2777?style=flat-square)
730
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-142-6366f1?style=flat-square)
731
+ ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
732
+
733
+ ### JavaScript
734
+
735
+ ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-1-f7df1e?style=flat-square)
736
+ ![Test Files](https://img.shields.io/badge/Test_Files-14-10b981?style=flat-square)
737
+ ![External Packages](https://img.shields.io/badge/External_Packages-18-8b5cf6?style=flat-square)
738
+ ![Classes](https://img.shields.io/badge/Classes-17-7c3aed?style=flat-square)
739
+ ![Functions](https://img.shields.io/badge/Functions-261-16a34a?style=flat-square)
740
+ ![Methods](https://img.shields.io/badge/Methods-86-15803d?style=flat-square)
741
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-210-4ade80?style=flat-square)
742
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-137-059669?style=flat-square)
743
+ ![Constants](https://img.shields.io/badge/Constants-264-dc2626?style=flat-square)
744
+ ![Imports](https://img.shields.io/badge/Imports-262-0284c7?style=flat-square)
745
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-76-ea580c?style=flat-square)
746
+ ![Comments](https://img.shields.io/badge/Comments-337-64748b?style=flat-square)
747
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-732-475569?style=flat-square)
748
+ ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
749
+
750
+ ### Python
751
+
752
+ ![Python Files](https://img.shields.io/badge/Python_Files-0-3776ab?style=flat-square)
753
+ ![Python Lines](https://img.shields.io/badge/Python_Lines-0-4b8bbe?style=flat-square)
754
+ ![Python Classes](https://img.shields.io/badge/Python_Classes-0-7c3aed?style=flat-square)
755
+ ![Python Functions](https://img.shields.io/badge/Python_Functions-0-16a34a?style=flat-square)
756
+ ![Python Protocols](https://img.shields.io/badge/Python_Protocols-0-0ea5e9?style=flat-square)
757
+ ![Python Constants](https://img.shields.io/badge/Python_Constants-0-dc2626?style=flat-square)
758
+ ![Python Imports](https://img.shields.io/badge/Python_Imports-0-0284c7?style=flat-square)
759
+ ![Python Decorators](https://img.shields.io/badge/Python_Decorators-0-db2777?style=flat-square)
760
+ ![Docstrings](https://img.shields.io/badge/Docstrings-0-6366f1?style=flat-square)
761
+ ![Docstring Lines](https://img.shields.io/badge/Docstring_Lines-0-818cf8?style=flat-square)
762
+ ![Python Comments](https://img.shields.io/badge/Python_Comments-0-64748b?style=flat-square)
763
+ ![Python Comment Lines](https://img.shields.io/badge/Python_Comment_Lines-0-475569?style=flat-square)
764
+
765
+ ### JSON
766
+
767
+ ![JSON Files](https://img.shields.io/badge/JSON_Files-8-a16207?style=flat-square)
768
+ ![JSON Lines](https://img.shields.io/badge/JSON_Lines-261-ca8a04?style=flat-square)
769
+ ![JSON Objects](https://img.shields.io/badge/JSON_Objects-59-7c3aed?style=flat-square)
770
+ ![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-15-8b5cf6?style=flat-square)
771
+ ![JSON Properties](https://img.shields.io/badge/JSON_Properties-173-0284c7?style=flat-square)
772
+ ![JSON Strings](https://img.shields.io/badge/JSON_Strings-142-16a34a?style=flat-square)
773
+ ![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-3-059669?style=flat-square)
774
+ ![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-7-0ea5e9?style=flat-square)
775
+ ![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
776
+ ![JSON Items](https://img.shields.io/badge/JSON_Items-45-475569?style=flat-square)
777
+ ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-226-dc2626?style=flat-square)
778
+ ![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-5-ea580c?style=flat-square)
779
+
780
+ ### YAML
781
+
782
+ ![YAML Files](https://img.shields.io/badge/YAML_Files-0-cb171e?style=flat-square)
783
+ ![YAML Lines](https://img.shields.io/badge/YAML_Lines-0-e34c26?style=flat-square)
784
+ ![YAML Documents](https://img.shields.io/badge/YAML_Documents-0-f97316?style=flat-square)
785
+ ![YAML Mappings](https://img.shields.io/badge/YAML_Mappings-0-7c3aed?style=flat-square)
786
+ ![YAML Sequences](https://img.shields.io/badge/YAML_Sequences-0-8b5cf6?style=flat-square)
787
+ ![YAML Keys](https://img.shields.io/badge/YAML_Keys-0-0284c7?style=flat-square)
788
+ ![YAML Scalars](https://img.shields.io/badge/YAML_Scalars-0-16a34a?style=flat-square)
789
+ ![YAML Anchors](https://img.shields.io/badge/YAML_Anchors-0-059669?style=flat-square)
790
+ ![YAML Aliases](https://img.shields.io/badge/YAML_Aliases-0-10b981?style=flat-square)
791
+ ![YAML Comments](https://img.shields.io/badge/YAML_Comments-0-64748b?style=flat-square)
792
+ ![YAML Max Depth](https://img.shields.io/badge/YAML_Max_Depth-0-ea580c?style=flat-square)
793
+
794
+ ### TOML
795
+
796
+ ![TOML Files](https://img.shields.io/badge/TOML_Files-0-9c4221?style=flat-square)
797
+ ![TOML Lines](https://img.shields.io/badge/TOML_Lines-0-b45309?style=flat-square)
798
+ ![TOML Tables](https://img.shields.io/badge/TOML_Tables-0-7c3aed?style=flat-square)
799
+ ![TOML Array Tables](https://img.shields.io/badge/TOML_Array_Tables-0-8b5cf6?style=flat-square)
800
+ ![TOML Keys](https://img.shields.io/badge/TOML_Keys-0-0284c7?style=flat-square)
801
+ ![TOML Arrays](https://img.shields.io/badge/TOML_Arrays-0-16a34a?style=flat-square)
802
+ ![TOML Comments](https://img.shields.io/badge/TOML_Comments-0-64748b?style=flat-square)
803
+
804
+ ### Shell
805
+
806
+ ![Shell Files](https://img.shields.io/badge/Shell_Files-0-89e051?style=flat-square)
807
+ ![Shell Lines](https://img.shields.io/badge/Shell_Lines-0-4eaa25?style=flat-square)
808
+ ![Shell Functions](https://img.shields.io/badge/Shell_Functions-0-16a34a?style=flat-square)
809
+ ![Shell Variables](https://img.shields.io/badge/Shell_Variables-0-0284c7?style=flat-square)
810
+ ![Shell Exports](https://img.shields.io/badge/Shell_Exports-0-ea580c?style=flat-square)
811
+ ![Shell Conditionals](https://img.shields.io/badge/Shell_Conditionals-0-7c3aed?style=flat-square)
812
+ ![Shell Loops](https://img.shields.io/badge/Shell_Loops-0-8b5cf6?style=flat-square)
813
+ ![Shell Pipelines](https://img.shields.io/badge/Shell_Pipelines-0-059669?style=flat-square)
814
+ ![Shebangs](https://img.shields.io/badge/Shebangs-0-6b7280?style=flat-square)
815
+ ![Shell Comments](https://img.shields.io/badge/Shell_Comments-0-64748b?style=flat-square)
816
+ ![Shell Comment Lines](https://img.shields.io/badge/Shell_Comment_Lines-0-475569?style=flat-square)
817
+
818
+ ### SQL
819
+
820
+ ![SQL Files](https://img.shields.io/badge/SQL_Files-0-e38c00?style=flat-square)
821
+ ![SQL Lines](https://img.shields.io/badge/SQL_Lines-0-f29111?style=flat-square)
822
+ ![SQL Statements](https://img.shields.io/badge/SQL_Statements-0-7c3aed?style=flat-square)
823
+ ![SQL Selects](https://img.shields.io/badge/SQL_Selects-0-16a34a?style=flat-square)
824
+ ![SQL Inserts](https://img.shields.io/badge/SQL_Inserts-0-22c55e?style=flat-square)
825
+ ![SQL Updates](https://img.shields.io/badge/SQL_Updates-0-0ea5e9?style=flat-square)
826
+ ![SQL Deletes](https://img.shields.io/badge/SQL_Deletes-0-dc2626?style=flat-square)
827
+ ![SQL Creates](https://img.shields.io/badge/SQL_Creates-0-0284c7?style=flat-square)
828
+ ![SQL Joins](https://img.shields.io/badge/SQL_Joins-0-8b5cf6?style=flat-square)
829
+ ![SQL CTEs](https://img.shields.io/badge/SQL_CTEs-0-059669?style=flat-square)
830
+ ![SQL Comments](https://img.shields.io/badge/SQL_Comments-0-64748b?style=flat-square)
831
+
832
+ ### HCL
833
+
834
+ ![HCL Files](https://img.shields.io/badge/HCL_Files-0-844fba?style=flat-square)
835
+ ![HCL Lines](https://img.shields.io/badge/HCL_Lines-0-a78bfa?style=flat-square)
836
+ ![HCL Blocks](https://img.shields.io/badge/HCL_Blocks-0-7c3aed?style=flat-square)
837
+ ![HCL Resources](https://img.shields.io/badge/HCL_Resources-0-0284c7?style=flat-square)
838
+ ![HCL Variables](https://img.shields.io/badge/HCL_Variables-0-16a34a?style=flat-square)
839
+ ![HCL Outputs](https://img.shields.io/badge/HCL_Outputs-0-059669?style=flat-square)
840
+ ![HCL Attributes](https://img.shields.io/badge/HCL_Attributes-0-0ea5e9?style=flat-square)
841
+ ![HCL Interpolations](https://img.shields.io/badge/HCL_Interpolations-0-db2777?style=flat-square)
842
+ ![HCL Comments](https://img.shields.io/badge/HCL_Comments-0-64748b?style=flat-square)
843
+
844
+ ### CSS
845
+
846
+ ![CSS Files](https://img.shields.io/badge/CSS_Files-0-264de4?style=flat-square)
847
+ ![CSS Lines](https://img.shields.io/badge/CSS_Lines-0-2965f1?style=flat-square)
848
+ ![CSS Rules](https://img.shields.io/badge/CSS_Rules-0-7c3aed?style=flat-square)
849
+ ![CSS Selectors](https://img.shields.io/badge/CSS_Selectors-0-8b5cf6?style=flat-square)
850
+ ![CSS Declarations](https://img.shields.io/badge/CSS_Declarations-0-0284c7?style=flat-square)
851
+ ![CSS At Rules](https://img.shields.io/badge/CSS_At_Rules-0-f97316?style=flat-square)
852
+ ![CSS Media Queries](https://img.shields.io/badge/CSS_Media_Queries-0-ea580c?style=flat-square)
853
+ ![CSS Custom Properties](https://img.shields.io/badge/CSS_Custom_Properties-0-16a34a?style=flat-square)
854
+ ![CSS Comments](https://img.shields.io/badge/CSS_Comments-0-64748b?style=flat-square)
855
+
856
+ ### Conventions
857
+
858
+ ![Module Files](https://img.shields.io/badge/Module_Files-9-7c3aed?style=flat-square)
859
+ ![Service Files](https://img.shields.io/badge/Service_Files-8-0284c7?style=flat-square)
860
+ ![Command Files](https://img.shields.io/badge/Command_Files-0-16a34a?style=flat-square)
861
+ ![Constants Files](https://img.shields.io/badge/Constants_Files-8-ea580c?style=flat-square)
862
+ ![Types Files](https://img.shields.io/badge/Types_Files-10-db2777?style=flat-square)
863
+ ![Utilities Files](https://img.shields.io/badge/Utilities_Files-2-0ea5e9?style=flat-square)
864
+ ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
865
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-14-ca8a04?style=flat-square)
866
+ ![Integration Tests](https://img.shields.io/badge/Integration_Tests-0-7c3aed?style=flat-square)
867
+ ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-0-0284c7?style=flat-square)
868
+ ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
869
+ ![HCL Comment Budget](https://img.shields.io/badge/HCL_Comment_Budget-0-ea580c?style=flat-square)
870
+ ![Python Comment Budget](https://img.shields.io/badge/Python_Comment_Budget-0-db2777?style=flat-square)
871
+ ![SQL Comment Budget](https://img.shields.io/badge/SQL_Comment_Budget-0-0ea5e9?style=flat-square)
872
+ ![TOML Comment Budget](https://img.shields.io/badge/TOML_Comment_Budget-0-059669?style=flat-square)
873
+ ![TypeScript Comment Budget](https://img.shields.io/badge/TypeScript_Comment_Budget-0-ca8a04?style=flat-square)
874
+ ![YAML Comment Budget](https://img.shields.io/badge/YAML_Comment_Budget-0-7c3aed?style=flat-square)
875
+ ![Shell Comment Budget](https://img.shields.io/badge/Shell_Comment_Budget-0-0284c7?style=flat-square)
876
+
877
+ ### Jupyter
878
+
879
+ ![Notebooks](https://img.shields.io/badge/Notebooks-0-f37626?style=flat-square)
880
+ ![Notebook Cells](https://img.shields.io/badge/Notebook_Cells-0-e8a33d?style=flat-square)
881
+ ![Code Cells](https://img.shields.io/badge/Code_Cells-0-3776ab?style=flat-square)
882
+ ![Markdown Cells](https://img.shields.io/badge/Markdown_Cells-0-083fa1?style=flat-square)
883
+ ![Raw Cells](https://img.shields.io/badge/Raw_Cells-0-9ca3af?style=flat-square)
884
+ ![Executed Cells](https://img.shields.io/badge/Executed_Cells-0-16a34a?style=flat-square)
885
+ ![Cell Outputs](https://img.shields.io/badge/Cell_Outputs-0-059669?style=flat-square)
886
+ ![Notebook Code Lines](https://img.shields.io/badge/Notebook_Code_Lines-0-4b8bbe?style=flat-square)
887
+ ![Notebook Classes](https://img.shields.io/badge/Notebook_Classes-0-7c3aed?style=flat-square)
888
+ ![Notebook Functions](https://img.shields.io/badge/Notebook_Functions-0-22c55e?style=flat-square)
889
+ ![Notebook Imports](https://img.shields.io/badge/Notebook_Imports-0-0284c7?style=flat-square)
890
+ ![Notebook Decorators](https://img.shields.io/badge/Notebook_Decorators-0-db2777?style=flat-square)
891
+ ![Notebook Prose Lines](https://img.shields.io/badge/Notebook_Prose_Lines-0-1f6feb?style=flat-square)
892
+ ![Notebook Headings](https://img.shields.io/badge/Notebook_Headings-0-a78bfa?style=flat-square)
893
+ ![Notebook Links](https://img.shields.io/badge/Notebook_Links-0-10b981?style=flat-square)
894
+ ![Notebook Images](https://img.shields.io/badge/Notebook_Images-0-34d399?style=flat-square)
895
+ ![Notebook Code Blocks](https://img.shields.io/badge/Notebook_Code_Blocks-0-dc2626?style=flat-square)
896
+ ![Notebook Properties](https://img.shields.io/badge/Notebook_Properties-0-ca8a04?style=flat-square)
897
+ ![Notebook Nodes](https://img.shields.io/badge/Notebook_Nodes-0-a16207?style=flat-square)
898
+ ![Notebook Max Depth](https://img.shields.io/badge/Notebook_Max_Depth-0-ea580c?style=flat-square)
899
+
900
+ ### Markdown
901
+
902
+ ![Markdown Files](https://img.shields.io/badge/Markdown_Files-1-083fa1?style=flat-square)
903
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-222-1f6feb?style=flat-square)
904
+ ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
905
+ ![H2](https://img.shields.io/badge/H2-7-8b5cf6?style=flat-square)
906
+ ![H3](https://img.shields.io/badge/H3-12-a78bfa?style=flat-square)
907
+ ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
908
+ ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
909
+ ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
910
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-45-64748b?style=flat-square)
911
+ ![Lists](https://img.shields.io/badge/Lists-6-16a34a?style=flat-square)
912
+ ![List Items](https://img.shields.io/badge/List_Items-25-22c55e?style=flat-square)
913
+ ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
914
+ ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
915
+ ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
916
+ ![Links](https://img.shields.io/badge/Links-9-059669?style=flat-square)
917
+ ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
918
+ ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
919
+ ![Inline Code](https://img.shields.io/badge/Inline_Code-73-ef4444?style=flat-square)
920
+ ![Block Quotes](https://img.shields.io/badge/Block_Quotes-0-ca8a04?style=flat-square)
921
+ ![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-0-a16207?style=flat-square)
922
+ <!-- codometer:end -->