@conformetry/configuration 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,919 @@
1
+ # 👔 Conformetry Configuration
2
+
3
+ **The configuration reference for [Conformetry](../conformetry-cli/README.md).**
4
+
5
+ `@conformetry/configuration` reads a repository's `conformetry.config.*`, checks
6
+ it, and turns it into the three things the rest of the toolchain works from:
7
+ the generator registry, the instances validation walks, and the
8
+ resolved inputs a generator renders with.
9
+
10
+ ```bash
11
+ npm install --save-dev @conformetry/configuration
12
+ ```
13
+
14
+ Most consumers never install this directly — `@conformetry/cli` and
15
+ `@conformetry/nx` both depend on it. Install it when you are typing a
16
+ configuration file, or embedding conformetry in a host of your own.
17
+
18
+ ## The configuration file
19
+
20
+ Any of `conformetry.config.{ts,mts,cts,js,mjs,cjs,json,jsonc}`. TypeScript and
21
+ JavaScript files are loaded through [jiti](https://github.com/unjs/jiti), so a
22
+ `.ts` config needs no build step and may import from your workspace.
23
+
24
+ The path is resolved against the current directory first, then against the
25
+ workspace root — located by walking upward for `pnpm-workspace.yaml` — so a
26
+ config path written relative to the root still resolves from a nested
27
+ directory.
28
+
29
+ The file default-exports an **array of generator definitions**. It is an array
30
+ rather than a keyed record because a generator's name is already a field, and a
31
+ record made the name true in two places at once.
32
+
33
+ ```ts
34
+ import { type ConformetryConfiguration } from "@conformetry/configuration";
35
+
36
+ const conformetryConfiguration: ConformetryConfiguration = [
37
+ {
38
+ description: "Generate a NestJS service module",
39
+ inputs: {
40
+ name: { description: "Module name in kebab-case", type: "string" },
41
+ },
42
+ instances: [{ patterns: ["packages/*/src/modules/*"] }],
43
+ name: "nestjs-service-module",
44
+ templatePath: "templates/nestjs-service-module",
45
+ },
46
+ ];
47
+
48
+ export default conformetryConfiguration;
49
+ ```
50
+
51
+ ### Generator fields
52
+
53
+ | Field | Required | Purpose |
54
+ | ----- | -------- | ------- |
55
+ | `name` | ✅ | How the generator is addressed, and the filename it is emitted under |
56
+ | `templatePath` | ✅ | The template folder, relative to the workspace root |
57
+ | `inputs` | | The values it substitutes, as JSON Schema fragments |
58
+ | `instances` | | Where this generator's output already lives |
59
+ | `description` | | Shown when a host lists or prompts for generators |
60
+
61
+ Both `inputs` and `instances` may be omitted. A generator with neither renders
62
+ a fixed template nobody validates, which is legal.
63
+
64
+ ### What is rejected
65
+
66
+ The schema fails loudly rather than validating nothing, and reports every
67
+ problem in one pass:
68
+
69
+ - **Two generators answering to the same name.** A host resolves the first
70
+ match, so a collision does not error where it is used — it silently shadows,
71
+ and the losing generator becomes unreachable while still appearing in the
72
+ configuration.
73
+ - **Two generators sharing a `templatePath`.** Validation then finds instances
74
+ that fit both equally and reports them as matching nothing.
75
+ - **A name containing a path separator.** A generator is addressed by its name
76
+ and emitted to a file named after it.
77
+ - **A key the schema does not declare.** The generator object is strict, so a
78
+ misspelled field — or `aliases`, which was removed outright — is rejected
79
+ rather than stripped and left reading as though it took effect.
80
+
81
+ ## Instances
82
+
83
+ `instances` is what makes validation possible. It says where a generator's
84
+ output already lives, so validation knows what to check without being told a
85
+ second time.
86
+
87
+ ```ts
88
+ instances: [
89
+ { patterns: ["packages/*/src/modules/*"] },
90
+ {
91
+ patterns: ["applications/*/src/modules/*"],
92
+ substitutions: { type: "applications" },
93
+ },
94
+ ];
95
+ ```
96
+
97
+ | Field | Purpose |
98
+ | ----- | ------- |
99
+ | `patterns` | Globs locating this group's instances, workspace-relative |
100
+ | `substitutions` | Values the template's placeholders are rendered with for this group |
101
+ | `tags` | Labels selecting which hosts the group applies to, carried uninterpreted |
102
+ | `threshold` | Lowest conformance score these instances may have, overriding the generator's |
103
+
104
+ Groups exist so substitutions can differ per glob. `type` is `packages` for one
105
+ set of paths and `applications` for another, and no generic rule can tell them
106
+ apart.
107
+
108
+ > **Every placeholder a template uses must be supplied here.** A missing entry
109
+ > fails the run with `MissingSubstitutionError` rather than rendering as an
110
+ > empty string — see
111
+ > [`@conformetry/generation`](../conformetry-generation/README.md) for why that
112
+ > is an error and not a finding, and for the section syntax a template uses to
113
+ > make a placeholder genuinely optional.
114
+
115
+ `tags` is carried through untouched by this package, which has no notion of a
116
+ host to match labels against. [`@conformetry/nx`](../conformetry-nx/README.md)
117
+ reads them as Nx project tags and resolves each group's globs _inside_ every
118
+ matching project; another host is free to read them as something else. A group
119
+ naming only `tags` is legal — it selects without locating, which is what a
120
+ template with no instances yet wants.
121
+
122
+ ### Directory globs versus file globs
123
+
124
+ The two behave differently on purpose, and the difference is what lets a
125
+ small template win against a large one.
126
+
127
+ - A **directory glob** leaves the match scope open, and the largest fitting
128
+ template wins.
129
+ - A **file glob** narrows the scope to the matched files, so a template
130
+ describing exactly those files fits better than one describing the whole
131
+ directory.
132
+
133
+ That is how a two-file template such as `nestjs-service-file` is matchable at
134
+ all inside a directory a five-file module template also claims:
135
+
136
+ ```ts
137
+ instances: [
138
+ { patterns: ["src/modules/*/*.service.ts", "src/modules/*/*.service.unit.test.ts"] },
139
+ ];
140
+ ```
141
+
142
+ ### Where a template is laid down
143
+
144
+ A template that produces a _folder_ contains that folder, so its instance path
145
+ is the folder's **parent**: `nestjs-service-module` holds `{{nameKebabCase}}/…`,
146
+ and its instances are `…/src/modules`. A template that produces loose files
147
+ holds them at its root, and its instance path is the directory those files sit
148
+ in.
149
+
150
+ ## Thresholds
151
+
152
+ An instance passes when its conformance score reaches the threshold that
153
+ applies to it. Three levels set it, and the narrowest wins:
154
+
155
+ ```ts
156
+ instances[].threshold ?? generator.threshold ?? runThreshold ?? 1
157
+ ```
158
+
159
+ A level left unset stays unset rather than being filled with the default — that
160
+ is what lets a host's own `--threshold` reach an instance whose generator has
161
+ no opinion. The default of `1` is applied only at the end of the chain, so
162
+ nothing configured is quietly overridden, and a level nobody set is not
163
+ quietly treated as if they had.
164
+
165
+ ```ts
166
+ {
167
+ name: "nestjs-service-module",
168
+ templatePath: "templates/nestjs-service-module",
169
+ threshold: 1, // strict everywhere by default
170
+ instances: [
171
+ { patterns: ["packages/*/src/modules/*"] },
172
+ {
173
+ patterns: ["applications/legacy/src/modules/*"],
174
+ threshold: 0.75, // …except while migrating this one
175
+ },
176
+ ],
177
+ }
178
+ ```
179
+
180
+ When two groups locate the same instance with different thresholds the
181
+ strictest wins: nothing makes one group more specific than another, and letting
182
+ order decide would mean a lenient group could silently relax a bar someone else
183
+ set.
184
+
185
+ ## Inputs
186
+
187
+ Each entry in `inputs` is a JSON Schema fragment. Only `properties` and
188
+ `required` are read — enough to know an input's name, whether it must be
189
+ supplied, and what to say when prompting for it.
190
+
191
+ Authoring them by hand is verbose, so deriving them from a schema library is
192
+ the usual approach:
193
+
194
+ ```ts
195
+ import { z } from "zod";
196
+
197
+ function defineInputs(shape: z.ZodRawShape) {
198
+ return z.toJSONSchema(z.object(shape)).properties ?? {};
199
+ }
200
+
201
+ inputs: defineInputs({
202
+ name: z.string().describe("Module name in kebab-case"),
203
+ project: z.string().describe("Parent project name in kebab-case"),
204
+ });
205
+ ```
206
+
207
+ Values are resolved in order: flags passed on the command line first, then
208
+ interactive prompts for anything still missing. Prompting is skipped entirely
209
+ when stdin is not a TTY or `CI` is `true`, so a missing input fails the command
210
+ rather than hanging it.
211
+
212
+ ## Matching
213
+
214
+ Validation does not record which template produced a file. It works it out:
215
+ every instance is weighed against every template by the share of the template's
216
+ files the instance already has, and the best fit wins.
217
+
218
+ Two outcomes are reported rather than skipped, because a glob is the author
219
+ asserting that these paths _are_ instances:
220
+
221
+ | Reason | Meaning |
222
+ | ------ | ------- |
223
+ | `no-match` | No template explains this instance well enough |
224
+ | `ambiguous` | Two or more templates tied, so they are indistinguishable here |
225
+
226
+ ## Exports
227
+
228
+ | Export | Purpose |
229
+ | ------ | ------- |
230
+ | `ConfigurationService` | Everything this layer answers: loading a configuration file, reading templates, expanding globs into instances, matching the two, rendering placeholders, and resolving generator inputs |
231
+ | `ConfigurationModule` | The NestJS module that provides it |
232
+ | `ConformetryConfiguration` | The loaded configuration type — author your config as this |
233
+ | `ConformetryInstanceGroup`, `ConformetryGeneratorDefinition` | Field-level types for the above |
234
+
235
+ **One service and one module, and no other collaborator** — the same pair
236
+ `@callidescope/configuration`, `@codependix/configuration` and
237
+ `@codometer/configuration` publish, so learning one of the four teaches you all
238
+ of them.
239
+
240
+ Behind the facade, template discovery, instance discovery, rendering, instance
241
+ groups, and input resolution stay six separate classes in six separate files,
242
+ because they are six different jobs. What they are not is six entry points a
243
+ host has to know the names of: a consumer imports `ConfigurationModule` and
244
+ injects `ConfigurationService`.
245
+
246
+ Loading a configuration file is the one job `ConfigurationService` holds
247
+ itself; everything that touches paths is a one-line hand-off to the
248
+ collaborator that owns it.
249
+
250
+ ## Test
251
+
252
+ ```bash
253
+ nx run conformetry-configuration:vitest
254
+ ```
255
+
256
+ ## License
257
+
258
+ MIT — see [LICENSE](../../../../LICENSE).
259
+
260
+ ## 👔 Conformetry
261
+
262
+ This project was generated from the [nestjs-service-project](../../../../configuration/conformetry-templates/nestjs-service-project) conformetry template.
263
+
264
+ <!-- callidescope:start -->
265
+
266
+ ## 🔭 Callidescope
267
+
268
+ Call stacks traced through `packages/ic-suite/conformetry/conformetry-configuration`, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.
269
+
270
+ | Measure | Value |
271
+ | --- | --- |
272
+ | Callables | 167 |
273
+ | Files | 37 |
274
+ | Calls traced | 151 |
275
+ | Call stacks | 5 |
276
+ | Deepest stack | 10 |
277
+ | Stacks through recursion | 0 |
278
+ | Unfollowable calls | 7 |
279
+
280
+ ### Limits
281
+
282
+ What this project is judged against, as declared in its own `callidescope.config.ts`.
283
+
284
+ | Limit | Value |
285
+ | --- | --- |
286
+ | `maximumDepth` | 14 |
287
+ | `maximumBreadth` | 5 |
288
+
289
+ ### Call stacks (depth)
290
+
291
+ **1. `InstanceDiscoveryService.matchTemplates`** — depth ≥ 10 · orphan-root
292
+
293
+ ```text
294
+ 🚀 InstanceDiscoveryService.matchTemplates(…): TemplateMatch[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:103]
295
+ ↳ Ranks every template that shares a file with one instance, best first.
296
+ └─> InstanceDiscoveryMatchingService.matchTemplates(…): TemplateMatch[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:154]
297
+ ↳ Weighs every template that shares at least one file with the instance, best-first.
298
+ └─> InstanceDiscoveryMatchingService.map(…)(…): { matchedFileCount: number; matchRatio: number; template: TemplateDefinition; } [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:160]
299
+ └─> TemplateDiscoveryService.countMatchingFiles(…): number [packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:121]
300
+ ↳ Counts how many of a template's files the instance path already has.
301
+ └─> TemplateDiscoveryService.filter(…)(templateFilePath: string): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:130]
302
+ └─> TemplateDiscoveryService.resolveInstanceFilePath(…): string [packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:179]
303
+ ↳ Maps a template file path to the instance file path it governs.
304
+ └─> RenderingService.renderPath(…): string [packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:142]
305
+ ↳ Renders a template path with mustache, the same way contents are rendered.
306
+ └─> RenderingService.assertEverySubstitutionSupplied(…): void [packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:35]
307
+ ↳ Refuses to render a template asking for a value nobody supplied.
308
+ └─> RenderingService.collectInterpolatedNames(template: string): string[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:61]
309
+ ↳ Every placeholder a template interpolates, deduplicated.
310
+ └─> RenderingService.walk(spans: TemplateSpans): void [packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:63]
311
+ ```
312
+
313
+ **2. `InputService.resolveInputsFromValues`** — depth ≥ 8 · orphan-root
314
+
315
+ ```text
316
+ 🚀 InputService.resolveInputsFromValues(args: ResolveInputsFromValuesArguments): Promise<Record<string, string>> [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:195]
317
+ ↳ Resolves inputs from values the caller already parsed.
318
+ └─> InputService.resolveInputs(…): Promise<Record<string, string>> [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:53]
319
+ ↳ Walks a schema, taking each value from the resolver or a prompt.
320
+ └─> InputService.acceptProvidedValue(args: { input: SchemaInput; value: string; }): string [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:39]
321
+ ↳ Validates a value the caller already had, throwing if it is invalid.
322
+ └─> InputSchemaService.validateValue(args: { input: SchemaInput; value: unknown; }): string | true [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:158]
323
+ ↳ Validates a value, returning `true` or the reason it failed.
324
+ └─> InputSchemaService.validateEnum(args: { input: SchemaInput; value: string; }): string | true [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:39]
325
+ ↳ Validates a value against a schema `enum`, when one is declared.
326
+ └─> InputSchemaService.readEnumValues(propertySchema: unknown): string[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:123]
327
+ ↳ Reads the string members of a schema `enum`.
328
+ └─> InputSchemaService.readSchemaProperty(propertySchema: unknown, key: string): unknown [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:26]
329
+ ↳ Reads one property off a schema fragment when it is an object.
330
+ └─> InputSchemaService.find(…)([entryKey]: [string, any]): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:31]
331
+ ```
332
+
333
+ **3. `InputPromptingService.validate`** — depth 6 · orphan-root
334
+
335
+ ```text
336
+ 🚀 InputPromptingService.validate(value: unknown): string | true [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-prompting.service.ts:105]
337
+ └─> InputSchemaService.validateValue(args: { input: SchemaInput; value: unknown; }): string | true [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:158]
338
+ ↳ Validates a value, returning `true` or the reason it failed.
339
+ └─> InputSchemaService.validateEnum(args: { input: SchemaInput; value: string; }): string | true [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:39]
340
+ ↳ Validates a value against a schema `enum`, when one is declared.
341
+ └─> InputSchemaService.readEnumValues(propertySchema: unknown): string[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:123]
342
+ ↳ Reads the string members of a schema `enum`.
343
+ └─> InputSchemaService.readSchemaProperty(propertySchema: unknown, key: string): unknown [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:26]
344
+ ↳ Reads one property off a schema fragment when it is an object.
345
+ └─> InputSchemaService.find(…)([entryKey]: [string, any]): boolean [packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:31]
346
+ ```
347
+
348
+ <details>
349
+ <summary>2 more call stacks</summary>
350
+
351
+ **4. `assertNoCollisions`** — depth ≥ 3 · orphan-root
352
+
353
+ ```text
354
+ 🚀 assertNoCollisions(…): void [packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:28]
355
+ ↳ Fails when two generators would answer to the same thing.
356
+ └─> findDuplicates(…): { message: string; path: (string | number)[]; }[] [packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:62]
357
+ ↳ Reports every key more than one generator claims.
358
+ └─> map(…)(…): { message: string; path: number[]; } [packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:84]
359
+ ```
360
+
361
+ **5. `InstanceDiscoveryService.buildSubstitutions`** — depth 3 · orphan-root
362
+
363
+ ```text
364
+ 🚀 InstanceDiscoveryService.buildSubstitutions(…): Substitutions [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:83]
365
+ ↳ Builds the substitutions an instance's template is rendered with.
366
+ └─> InstanceDiscoveryMatchingService.buildSubstitutions(instance: Instance): Substitutions [packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:72]
367
+ ↳ Builds the substitutions an instance's template is rendered with.
368
+ └─> RenderingService.buildNameSubstitutions(name: string): Substitutions [packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:94]
369
+ ↳ Derives the case variants every template can reference from one name.
370
+ ```
371
+
372
+ </details>
373
+
374
+ ### Breadth
375
+
376
+ | Callable | Breadth | Calls directly | Location |
377
+ | --- | --- | --- | --- |
378
+ | `InstanceDiscoveryMatchingService.matchInstances` | 5 | `InstanceDiscoveryMatchingService.buildSubstitutions`, `InstanceDiscoveryMatchingService.matchTemplates`, `InstanceDiscoveryMatchingService.filter(…)`, `InstanceDiscoveryMatchingService.map(…)`, `InstanceDiscoveryMatchingService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:93` |
379
+ | `InputPromptingService.promptForInput` | 4 | `InputPromptingService.assertCanPrompt`, `InputSchemaService.readEnumValues`, `InputPromptingService.map(…)`, `InputSchemaService.readPromptMessage` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-prompting.service.ts:90` |
380
+ | `InputService.resolveInputs` | 4 | `InputSchemaService.readPropertyNames`, `InputSchemaService.describeInput`, `InputService.acceptProvidedValue`, `InputService.resolveMissingValue` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:53` |
381
+
382
+ <details>
383
+ <summary>91 more callables</summary>
384
+
385
+ | Callable | Breadth | Calls directly | Location |
386
+ | --- | --- | --- | --- |
387
+ | `InputService.resolveMissingValue` | 4 | `InputPromptingService.isAtTerminal`, `missingInputError`, `InputPromptingService.promptForInput`, `InputSchemaService.validateValue` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:94` |
388
+ | `InstanceDiscoveryLocatingService.findInstances` | 4 | `InstanceDiscoveryLocatingService.resolveGlobSuffix`, `InstanceDiscoveryLocatingService.resolveNameStem`, `InstanceDiscoveryLocatingService.map(…)`, `InstanceDiscoveryLocatingService.toSorted(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:121` |
389
+ | `InstanceDiscoveryService.resolveInventoriedInstances` | 4 | `InstanceDiscoveryService.takeInventory`, `InstanceDiscoveryService.map(…)`, `InstanceDiscoveryService.filter(…)`, `InstanceDiscoveryService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:191` |
390
+ | `InstanceDiscoveryService.resolveInventoriedTemplates` | 4 | `InstanceDiscoveryService.takeInventory`, `InstanceDiscoveryService.filter(…)`, `InstanceDiscoveryService.map(…)`, `InstanceDiscoveryService.filter(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:216` |
391
+ | `InstanceDiscoveryService.takeInventory` | 4 | `TemplateDiscoveryService.collectTemplates`, `InstanceDiscoveryService.flatMap(…)`, `InstanceDiscoveryService.findInstances`, `InstanceDiscoveryService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:255` |
392
+ | `ConfigurationService.loadConformetryConfiguration` | 4 | `ConfigurationService.resolveConfigurationPath`, `UnknownConfigurationFileTypeError.constructor`, `ConfigurationService.loadConfigurationModule`, `ConfigurationService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:243` |
393
+ | `assertNoCollisions` | 3 | `findDuplicates`, `findUnusableNames`, `findReservedNames` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:28` |
394
+ | `findReservedNames` | 3 | `map(…)`, `filter(…)`, `map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:97` |
395
+ | `findUnusableNames` | 3 | `map(…)`, `filter(…)`, `map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:112` |
396
+ | `InputOptionsService.collectOneInput` | 3 | `InputOptionsService.readOptionName`, `InputOptionsService.resolvePropertyName`, `InputOptionsService.readOptionValue` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-options.service.ts:38` |
397
+ | `InputSchemaService.validateValue` | 3 | `InputSchemaService.validateEnum`, `InputSchemaService.validateLength`, `InputSchemaService.validatePattern` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:158` |
398
+ | `RenderingService.assertEverySubstitutionSupplied` | 3 | `RenderingService.filter(…)`, `RenderingService.collectInterpolatedNames`, `MissingSubstitutionError.constructor` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:35` |
399
+ | `InstanceDiscoveryMatchingService.matchTemplates` | 3 | `InstanceDiscoveryMatchingService.toSorted(…)`, `InstanceDiscoveryMatchingService.filter(…)`, `InstanceDiscoveryMatchingService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:154` |
400
+ | `InstanceDiscoveryService.weighInstance` | 3 | `InstanceDiscoveryService.map(…)`, `InstanceDiscoveryMatchingService.matchTemplates`, `InstanceDiscoveryMatchingService.buildSubstitutions` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:56` |
401
+ | `InstanceDiscoveryService.map(…)` | 3 | `InstanceDiscoveryService.filter(…)`, `InstanceDiscoveryService.map(…)`, `InstanceDiscoveryService.filter(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:118` |
402
+ | `findDuplicates` | 2 | `map(…)`, `filter(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.utilities.ts:62` |
403
+ | `InputSchemaService.readEnumValues` | 2 | `InputSchemaService.readSchemaProperty`, `InputSchemaService.filter(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:123` |
404
+ | `InputPromptingService.assertCanPrompt` | 2 | `InputPromptingService.isAtTerminal`, `missingInputError` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-prompting.service.ts:50` |
405
+ | `InputPromptingService.promptForTemplates` | 2 | `InputPromptingService.map(…)`, `InputPromptingService.filter(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-prompting.service.ts:144` |
406
+ | `InputService.parseCommaDelimitedOption` | 2 | `InputService.filter(…)`, `InputService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:118` |
407
+ | `InputService.resolveGeneratorInputs` | 2 | `InputOptionsService.collectGeneratorInputs`, `InputService.resolveInputs` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:180` |
408
+ | `TemplateDiscoveryService.prepareDocument` | 2 | `TemplateDiscoveryService.resolveInstanceFilePath`, `RenderingService.renderContent` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:153` |
409
+ | `InstanceDiscoveryService.flatMap(…)` | 2 | `InstanceDiscoveryService.flatMap(…)`, `InstanceDiscoveryService.readWorkspaceGroups` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:265` |
410
+ | `missingInputError` | 1 | `InputError.constructor` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.constants.ts:65` |
411
+ | `InputOptionsService.resolvePropertyName` | 1 | `InputOptionsService.find(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-options.service.ts:104` |
412
+ | `InputOptionsService.collectGeneratorInputs` | 1 | `InputOptionsService.collectOneInput` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-options.service.ts:124` |
413
+ | `InputSchemaService.readSchemaProperty` | 1 | `InputSchemaService.find(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:26` |
414
+ | `InputSchemaService.validateEnum` | 1 | `InputSchemaService.readEnumValues` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:39` |
415
+ | `InputSchemaService.validateLength` | 1 | `InputSchemaService.readSchemaProperty` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:53` |
416
+ | `InputSchemaService.validatePattern` | 1 | `InputSchemaService.readSchemaProperty` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:85` |
417
+ | `InputSchemaService.readPromptMessage` | 1 | `InputSchemaService.readSchemaProperty` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-schema.service.ts:136` |
418
+ | `InputPromptingService.validate` | 1 | `InputSchemaService.validateValue` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-prompting.service.ts:105` |
419
+ | `InputPromptingService.promptForTemplate` | 1 | `InputPromptingService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-prompting.service.ts:122` |
420
+ | `InputPromptingService.map(…)` | 1 | `InputPromptingService.describeChoice` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-prompting.service.ts:126` |
421
+ | `InputPromptingService.map(…)` | 1 | `InputPromptingService.describeChoice` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input-prompting.service.ts:154` |
422
+ | `InputService.acceptProvidedValue` | 1 | `InputSchemaService.validateValue` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:39` |
423
+ | `InputService.parseThresholdOption` | 1 | `InputService.parseOptionalOption` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:161` |
424
+ | `InputService.resolveInputsFromValues` | 1 | `InputService.resolveInputs` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/input/input.service.ts:195` |
425
+ | `MissingSubstitutionError.constructor` | 1 | `MissingSubstitutionError.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.constants.ts:31` |
426
+ | `RenderingService.collectInterpolatedNames` | 1 | `RenderingService.walk` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:61` |
427
+ | `RenderingService.renderContent` | 1 | `RenderingService.assertEverySubstitutionSupplied` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:115` |
428
+ | `RenderingService.renderPath` | 1 | `RenderingService.assertEverySubstitutionSupplied` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/rendering/rendering.service.ts:142` |
429
+ | `TemplateDiscoveryService.collectTemplate` | 1 | `TemplateDiscoveryService.collectFilePaths` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:78` |
430
+ | `TemplateDiscoveryService.collectTemplates` | 1 | `TemplateDiscoveryService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:98` |
431
+ | `TemplateDiscoveryService.map(…)` | 1 | `TemplateDiscoveryService.collectTemplate` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:102` |
432
+ | `TemplateDiscoveryService.countMatchingFiles` | 1 | `TemplateDiscoveryService.filter(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:121` |
433
+ | `TemplateDiscoveryService.filter(…)` | 1 | `TemplateDiscoveryService.resolveInstanceFilePath` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:130` |
434
+ | `TemplateDiscoveryService.resolveInstanceFilePath` | 1 | `RenderingService.renderPath` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/template-discovery/template-discovery.service.ts:179` |
435
+ | `InstanceDiscoveryLocatingService.resolveGlobSuffix` | 1 | `InstanceDiscoveryLocatingService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:73` |
436
+ | `InstanceDiscoveryLocatingService.map(…)` | 1 | `InstanceDiscoveryLocatingService.deriveLocationSubstitutions` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-locating.service.ts:162` |
437
+ | `InstanceDiscoveryMatchingService.buildSubstitutions` | 1 | `RenderingService.buildNameSubstitutions` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:72` |
438
+ | `InstanceDiscoveryMatchingService.map(…)` | 1 | `TemplateDiscoveryService.countMatchingFiles` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:160` |
439
+ | `InstanceDiscoveryMatchingService.toSorted(…)` | 1 | `InstanceDiscoveryMatchingService.compareMatches` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery-matching.service.ts:180` |
440
+ | `InstanceDiscoveryService.buildSubstitutions` | 1 | `InstanceDiscoveryMatchingService.buildSubstitutions` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:83` |
441
+ | `InstanceDiscoveryService.findInstances` | 1 | `InstanceDiscoveryLocatingService.findInstances` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:90` |
442
+ | `InstanceDiscoveryService.matchInstances` | 1 | `InstanceDiscoveryMatchingService.matchInstances` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:95` |
443
+ | `InstanceDiscoveryService.matchTemplates` | 1 | `InstanceDiscoveryMatchingService.matchTemplates` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:103` |
444
+ | `InstanceDiscoveryService.prepareDocuments` | 1 | `InstanceDiscoveryService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:113` |
445
+ | `InstanceDiscoveryService.map(…)` | 1 | `TemplateDiscoveryService.prepareDocument` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:124` |
446
+ | `InstanceDiscoveryService.readWorkspaceGroups` | 1 | `InstanceDiscoveryService.filter(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:158` |
447
+ | `InstanceDiscoveryService.filter(…)` | 1 | `InstanceGroupService.isProjectScoped` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:161` |
448
+ | `InstanceDiscoveryService.resolveInstanceFiles` | 1 | `InstanceDiscoveryService.flatMap(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:167` |
449
+ | `InstanceDiscoveryService.flatMap(…)` | 1 | `InstanceDiscoveryService.map(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:168` |
450
+ | `InstanceDiscoveryService.map(…)` | 1 | `TemplateDiscoveryService.resolveInstanceFilePath` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:169` |
451
+ | `InstanceDiscoveryService.map(…)` | 1 | `InstanceDiscoveryService.filter(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:200` |
452
+ | `InstanceDiscoveryService.map(…)` | 1 | `InstanceDiscoveryService.flatMap(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:228` |
453
+ | `InstanceDiscoveryService.flatMap(…)` | 1 | `InstanceDiscoveryService.find(…)` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:229` |
454
+ | `InstanceDiscoveryService.map(…)` | 1 | `InstanceDiscoveryService.weighInstance` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/instance-discovery/instance-discovery.service.ts:277` |
455
+ | `ConfigurationService.loadConfigurationModule` | 1 | `ConfigurationService.loadJsonConfiguration` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:135` |
456
+ | `ConfigurationService.resolveConfigurationPath` | 1 | `ConfigurationService.findWorkspaceRoot` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:174` |
457
+ | `ConfigurationService.buildNameSubstitutions` | 1 | `RenderingService.buildNameSubstitutions` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:202` |
458
+ | `ConfigurationService.collectTemplate` | 1 | `TemplateDiscoveryService.collectTemplate` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:207` |
459
+ | `ConfigurationService.collectTemplates` | 1 | `TemplateDiscoveryService.collectTemplates` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:214` |
460
+ | `ConfigurationService.findInstances` | 1 | `InstanceDiscoveryService.findInstances` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:222` |
461
+ | `ConfigurationService.isAtTerminal` | 1 | `InputPromptingService.isAtTerminal` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:227` |
462
+ | `ConfigurationService.isProjectScoped` | 1 | `InstanceGroupService.isProjectScoped` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:232` |
463
+ | `ConfigurationService.map(…)` | 1 | `ConfigurationService.applyGeneratorDefaults` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:259` |
464
+ | `ConfigurationService.matchInstances` | 1 | `InstanceDiscoveryService.matchInstances` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:263` |
465
+ | `ConfigurationService.parseCommaDelimitedOption` | 1 | `InputService.parseCommaDelimitedOption` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:271` |
466
+ | `ConfigurationService.parseOptionalOption` | 1 | `InputService.parseOptionalOption` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:278` |
467
+ | `ConfigurationService.parseThresholdOption` | 1 | `InputService.parseThresholdOption` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:283` |
468
+ | `ConfigurationService.prepareDocuments` | 1 | `InstanceDiscoveryService.prepareDocuments` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:291` |
469
+ | `ConfigurationService.promptForTemplate` | 1 | `InputPromptingService.promptForTemplate` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:298` |
470
+ | `ConfigurationService.promptForTemplates` | 1 | `InputPromptingService.promptForTemplates` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:305` |
471
+ | `ConfigurationService.readWorkspaceGroups` | 1 | `InstanceDiscoveryService.readWorkspaceGroups` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:312` |
472
+ | `ConfigurationService.renderContent` | 1 | `RenderingService.renderContent` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:319` |
473
+ | `ConfigurationService.renderPath` | 1 | `RenderingService.renderPath` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:326` |
474
+ | `ConfigurationService.resolveGeneratorInputs` | 1 | `InputService.resolveGeneratorInputs` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:333` |
475
+ | `ConfigurationService.resolveInstanceFiles` | 1 | `InstanceDiscoveryService.resolveInstanceFiles` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:340` |
476
+ | `ConfigurationService.resolveInventoriedInstances` | 1 | `InstanceDiscoveryService.resolveInventoriedInstances` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:345` |
477
+ | `ConfigurationService.resolveInventoriedTemplates` | 1 | `InstanceDiscoveryService.resolveInventoriedTemplates` | `packages/ic-suite/conformetry/conformetry-configuration/src/modules/configuration/configuration.service.ts:352` |
478
+
479
+ </details>
480
+ <!-- callidescope:end -->
481
+
482
+ ## 🕸️ Codependix
483
+
484
+ 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`.
485
+
486
+ ### Nx Neighborhood
487
+
488
+ <!-- codependix:start name="codependix-nx-projects" -->
489
+ ```mermaid
490
+ graph LR
491
+ conformetry_cli["conformetry-cli"]
492
+ conformetry_configuration["conformetry-configuration"]
493
+ conformetry_core["conformetry-core"]
494
+ conformetry_examples["conformetry-examples"]
495
+ conformetry_generation["conformetry-generation"]
496
+ conformetry_languages["conformetry-languages"]
497
+ conformetry_nx["conformetry-nx"]
498
+ conformetry_validation["conformetry-validation"]
499
+ synchronization["synchronization"]
500
+ conformetry_cli --> conformetry_configuration
501
+ conformetry_configuration --> conformetry_core
502
+ conformetry_examples --> conformetry_configuration
503
+ conformetry_generation --> conformetry_configuration
504
+ conformetry_languages --> conformetry_configuration
505
+ conformetry_nx --> conformetry_configuration
506
+ conformetry_validation --> conformetry_configuration
507
+ synchronization --> conformetry_configuration
508
+ classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
509
+ class conformetry_configuration subject
510
+ ```
511
+ <!-- codependix:end name="codependix-nx-projects" -->
512
+
513
+ ### NestJS Module Graph
514
+
515
+ <!-- codependix:start name="codependix-nestjs-modules" -->
516
+ ```mermaid
517
+ flowchart LR
518
+ ConfigurationModule
519
+ InputModule
520
+ InstanceDiscoveryModule
521
+ InstanceGroupModule
522
+ RenderingModule
523
+ TemplateDiscoveryModule
524
+ ConfigurationModule --> InputModule
525
+ ConfigurationModule --> InstanceDiscoveryModule
526
+ ConfigurationModule --> InstanceGroupModule
527
+ ConfigurationModule --> RenderingModule
528
+ ConfigurationModule --> TemplateDiscoveryModule
529
+ InstanceDiscoveryModule --> InstanceGroupModule
530
+ InstanceDiscoveryModule --> RenderingModule
531
+ InstanceDiscoveryModule --> TemplateDiscoveryModule
532
+ TemplateDiscoveryModule --> RenderingModule
533
+ ```
534
+ <!-- codependix:end name="codependix-nestjs-modules" -->
535
+
536
+ ### File Imports
537
+
538
+ <!-- codependix:start name="codependix-file-imports" -->
539
+ ```mermaid
540
+ graph LR
541
+ file_callidescope_config_ts["callidescope.config.ts"]
542
+ file_codependix_config_ts["codependix.config.ts"]
543
+ file_codometer_config_ts["codometer.config.ts"]
544
+ file_eslint_config_ts["eslint.config.ts"]
545
+ file_src_index_ts["src/index.ts"]
546
+ file_src_index_unit_test_ts["src/index.unit.test.ts"]
547
+ file_src_modules_configuration_configuration_constants_ts["src/modules/configuration/configuration.constants.ts"]
548
+ file_src_modules_configuration_configuration_module_ts["src/modules/configuration/configuration.module.ts"]
549
+ file_src_modules_configuration_configuration_module_unit_test_ts["src/modules/configuration/configuration.module.unit.test.ts"]
550
+ file_src_modules_configuration_configuration_service_ts["src/modules/configuration/configuration.service.ts"]
551
+ file_src_modules_configuration_configuration_service_unit_test_ts["src/modules/configuration/configuration.service.unit.test.ts"]
552
+ file_src_modules_configuration_configuration_types_ts["src/modules/configuration/configuration.types.ts"]
553
+ file_src_modules_configuration_configuration_utilities_ts["src/modules/configuration/configuration.utilities.ts"]
554
+ file_src_modules_input_input_options_service_ts["src/modules/input/input-options.service.ts"]
555
+ file_src_modules_input_input_options_service_unit_test_ts["src/modules/input/input-options.service.unit.test.ts"]
556
+ file_src_modules_input_input_prompting_service_ts["src/modules/input/input-prompting.service.ts"]
557
+ file_src_modules_input_input_prompting_service_unit_test_ts["src/modules/input/input-prompting.service.unit.test.ts"]
558
+ file_src_modules_input_input_schema_service_ts["src/modules/input/input-schema.service.ts"]
559
+ file_src_modules_input_input_schema_service_unit_test_ts["src/modules/input/input-schema.service.unit.test.ts"]
560
+ file_src_modules_input_input_constants_ts["src/modules/input/input.constants.ts"]
561
+ file_src_modules_input_input_module_ts["src/modules/input/input.module.ts"]
562
+ file_src_modules_input_input_service_ts["src/modules/input/input.service.ts"]
563
+ file_src_modules_input_input_service_unit_test_ts["src/modules/input/input.service.unit.test.ts"]
564
+ file_src_modules_input_input_types_ts["src/modules/input/input.types.ts"]
565
+ file_src_modules_instance_discovery_instance_discovery_locating_service_ts["src/modules/instance-discovery/instance-discovery-locating.service.ts"]
566
+ file_src_modules_instance_discovery_instance_discovery_locating_service_unit_test_ts["src/modules/instance-discovery/instance-discovery-locating.service.unit.test.ts"]
567
+ file_src_modules_instance_discovery_instance_discovery_matching_service_ts["src/modules/instance-discovery/instance-discovery-matching.service.ts"]
568
+ file_src_modules_instance_discovery_instance_discovery_matching_service_unit_test_ts["src/modules/instance-discovery/instance-discovery-matching.service.unit.test.ts"]
569
+ file_src_modules_instance_discovery_instance_discovery_constants_ts["src/modules/instance-discovery/instance-discovery.constants.ts"]
570
+ file_src_modules_instance_discovery_instance_discovery_module_ts["src/modules/instance-discovery/instance-discovery.module.ts"]
571
+ file_src_modules_instance_discovery_instance_discovery_service_ts["src/modules/instance-discovery/instance-discovery.service.ts"]
572
+ file_src_modules_instance_discovery_instance_discovery_service_unit_test_ts["src/modules/instance-discovery/instance-discovery.service.unit.test.ts"]
573
+ file_src_modules_instance_discovery_instance_discovery_types_ts["src/modules/instance-discovery/instance-discovery.types.ts"]
574
+ file_src_modules_instance_group_instance_group_constants_ts["src/modules/instance-group/instance-group.constants.ts"]
575
+ file_src_modules_instance_group_instance_group_module_ts["src/modules/instance-group/instance-group.module.ts"]
576
+ file_src_modules_instance_group_instance_group_service_ts["src/modules/instance-group/instance-group.service.ts"]
577
+ file_src_modules_instance_group_instance_group_service_unit_test_ts["src/modules/instance-group/instance-group.service.unit.test.ts"]
578
+ file_src_modules_instance_group_instance_group_types_ts["src/modules/instance-group/instance-group.types.ts"]
579
+ file_src_modules_rendering_rendering_constants_ts["src/modules/rendering/rendering.constants.ts"]
580
+ file_src_modules_rendering_rendering_module_ts["src/modules/rendering/rendering.module.ts"]
581
+ file_src_modules_rendering_rendering_service_ts["src/modules/rendering/rendering.service.ts"]
582
+ file_src_modules_rendering_rendering_service_unit_test_ts["src/modules/rendering/rendering.service.unit.test.ts"]
583
+ file_src_modules_rendering_rendering_types_ts["src/modules/rendering/rendering.types.ts"]
584
+ file_src_modules_template_discovery_template_discovery_constants_ts["src/modules/template-discovery/template-discovery.constants.ts"]
585
+ file_src_modules_template_discovery_template_discovery_module_ts["src/modules/template-discovery/template-discovery.module.ts"]
586
+ file_src_modules_template_discovery_template_discovery_service_ts["src/modules/template-discovery/template-discovery.service.ts"]
587
+ file_src_modules_template_discovery_template_discovery_service_unit_test_ts["src/modules/template-discovery/template-discovery.service.unit.test.ts"]
588
+ file_src_modules_template_discovery_template_discovery_types_ts["src/modules/template-discovery/template-discovery.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_index_unit_test_ts --> file_src_index_ts
594
+ file_src_modules_configuration_configuration_constants_ts --> file_src_modules_configuration_configuration_utilities_ts
595
+ file_src_modules_configuration_configuration_module_ts --> file_src_modules_configuration_configuration_service_ts
596
+ file_src_modules_configuration_configuration_module_ts --> file_src_modules_input_input_module_ts
597
+ file_src_modules_configuration_configuration_module_ts --> file_src_modules_instance_discovery_instance_discovery_module_ts
598
+ file_src_modules_configuration_configuration_module_ts --> file_src_modules_instance_group_instance_group_module_ts
599
+ file_src_modules_configuration_configuration_module_ts --> file_src_modules_rendering_rendering_module_ts
600
+ file_src_modules_configuration_configuration_module_ts --> file_src_modules_template_discovery_template_discovery_module_ts
601
+ file_src_modules_configuration_configuration_module_unit_test_ts --> file_src_modules_configuration_configuration_module_ts
602
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_configuration_configuration_constants_ts
603
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_configuration_configuration_types_ts
604
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_input_input_prompting_service_ts
605
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_input_input_service_ts
606
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_input_input_types_ts
607
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_instance_discovery_instance_discovery_service_ts
608
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_instance_discovery_instance_discovery_types_ts
609
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_instance_group_instance_group_service_ts
610
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_instance_group_instance_group_types_ts
611
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_rendering_rendering_service_ts
612
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_rendering_rendering_types_ts
613
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_template_discovery_template_discovery_service_ts
614
+ file_src_modules_configuration_configuration_service_ts --> file_src_modules_template_discovery_template_discovery_types_ts
615
+ file_src_modules_configuration_configuration_service_unit_test_ts --> file_src_modules_configuration_configuration_constants_ts
616
+ file_src_modules_configuration_configuration_service_unit_test_ts --> file_src_modules_configuration_configuration_service_ts
617
+ file_src_modules_configuration_configuration_service_unit_test_ts --> file_src_modules_configuration_configuration_types_ts
618
+ file_src_modules_configuration_configuration_service_unit_test_ts --> file_src_modules_input_input_prompting_service_ts
619
+ file_src_modules_configuration_configuration_service_unit_test_ts --> file_src_modules_input_input_service_ts
620
+ file_src_modules_configuration_configuration_service_unit_test_ts --> file_src_modules_instance_discovery_instance_discovery_service_ts
621
+ file_src_modules_configuration_configuration_service_unit_test_ts --> file_src_modules_instance_group_instance_group_service_ts
622
+ file_src_modules_configuration_configuration_service_unit_test_ts --> file_src_modules_rendering_rendering_service_ts
623
+ file_src_modules_configuration_configuration_service_unit_test_ts --> file_src_modules_template_discovery_template_discovery_service_ts
624
+ file_src_modules_configuration_configuration_types_ts --> file_src_modules_configuration_configuration_constants_ts
625
+ file_src_modules_configuration_configuration_types_ts --> file_src_modules_instance_group_instance_group_types_ts
626
+ file_src_modules_configuration_configuration_utilities_ts --> file_src_modules_input_input_constants_ts
627
+ file_src_modules_input_input_options_service_ts --> file_src_modules_configuration_configuration_types_ts
628
+ file_src_modules_input_input_options_service_ts --> file_src_modules_input_input_constants_ts
629
+ file_src_modules_input_input_options_service_unit_test_ts --> file_src_modules_input_input_options_service_ts
630
+ file_src_modules_input_input_prompting_service_ts --> file_src_modules_input_input_schema_service_ts
631
+ file_src_modules_input_input_prompting_service_ts --> file_src_modules_input_input_constants_ts
632
+ file_src_modules_input_input_prompting_service_ts --> file_src_modules_input_input_types_ts
633
+ file_src_modules_input_input_prompting_service_unit_test_ts --> file_src_modules_input_input_prompting_service_ts
634
+ file_src_modules_input_input_prompting_service_unit_test_ts --> file_src_modules_input_input_schema_service_ts
635
+ file_src_modules_input_input_schema_service_ts --> file_src_modules_configuration_configuration_types_ts
636
+ file_src_modules_input_input_schema_service_ts --> file_src_modules_input_input_types_ts
637
+ file_src_modules_input_input_schema_service_unit_test_ts --> file_src_modules_input_input_schema_service_ts
638
+ file_src_modules_input_input_module_ts --> file_src_modules_input_input_options_service_ts
639
+ file_src_modules_input_input_module_ts --> file_src_modules_input_input_prompting_service_ts
640
+ file_src_modules_input_input_module_ts --> file_src_modules_input_input_schema_service_ts
641
+ file_src_modules_input_input_module_ts --> file_src_modules_input_input_service_ts
642
+ file_src_modules_input_input_service_ts --> file_src_modules_input_input_options_service_ts
643
+ file_src_modules_input_input_service_ts --> file_src_modules_input_input_prompting_service_ts
644
+ file_src_modules_input_input_service_ts --> file_src_modules_input_input_schema_service_ts
645
+ file_src_modules_input_input_service_ts --> file_src_modules_input_input_constants_ts
646
+ file_src_modules_input_input_service_ts --> file_src_modules_input_input_types_ts
647
+ file_src_modules_input_input_service_unit_test_ts --> file_src_modules_input_input_options_service_ts
648
+ file_src_modules_input_input_service_unit_test_ts --> file_src_modules_input_input_prompting_service_ts
649
+ file_src_modules_input_input_service_unit_test_ts --> file_src_modules_input_input_schema_service_ts
650
+ file_src_modules_input_input_service_unit_test_ts --> file_src_modules_input_input_service_ts
651
+ file_src_modules_input_input_types_ts --> file_src_modules_configuration_configuration_types_ts
652
+ file_src_modules_instance_discovery_instance_discovery_locating_service_ts --> file_src_modules_instance_discovery_instance_discovery_constants_ts
653
+ file_src_modules_instance_discovery_instance_discovery_locating_service_ts --> file_src_modules_instance_discovery_instance_discovery_types_ts
654
+ file_src_modules_instance_discovery_instance_discovery_locating_service_unit_test_ts --> file_src_modules_instance_discovery_instance_discovery_locating_service_ts
655
+ file_src_modules_instance_discovery_instance_discovery_matching_service_ts --> file_src_modules_instance_discovery_instance_discovery_constants_ts
656
+ file_src_modules_instance_discovery_instance_discovery_matching_service_ts --> file_src_modules_instance_discovery_instance_discovery_types_ts
657
+ file_src_modules_instance_discovery_instance_discovery_matching_service_ts --> file_src_modules_rendering_rendering_service_ts
658
+ file_src_modules_instance_discovery_instance_discovery_matching_service_ts --> file_src_modules_rendering_rendering_types_ts
659
+ file_src_modules_instance_discovery_instance_discovery_matching_service_ts --> file_src_modules_template_discovery_template_discovery_service_ts
660
+ file_src_modules_instance_discovery_instance_discovery_matching_service_ts --> file_src_modules_template_discovery_template_discovery_types_ts
661
+ file_src_modules_instance_discovery_instance_discovery_matching_service_unit_test_ts --> file_src_modules_instance_discovery_instance_discovery_matching_service_ts
662
+ file_src_modules_instance_discovery_instance_discovery_matching_service_unit_test_ts --> file_src_modules_rendering_rendering_service_ts
663
+ file_src_modules_instance_discovery_instance_discovery_matching_service_unit_test_ts --> file_src_modules_template_discovery_template_discovery_service_ts
664
+ file_src_modules_instance_discovery_instance_discovery_matching_service_unit_test_ts --> file_src_modules_template_discovery_template_discovery_types_ts
665
+ file_src_modules_instance_discovery_instance_discovery_module_ts --> file_src_modules_instance_discovery_instance_discovery_locating_service_ts
666
+ file_src_modules_instance_discovery_instance_discovery_module_ts --> file_src_modules_instance_discovery_instance_discovery_matching_service_ts
667
+ file_src_modules_instance_discovery_instance_discovery_module_ts --> file_src_modules_instance_discovery_instance_discovery_service_ts
668
+ file_src_modules_instance_discovery_instance_discovery_module_ts --> file_src_modules_instance_group_instance_group_module_ts
669
+ file_src_modules_instance_discovery_instance_discovery_module_ts --> file_src_modules_rendering_rendering_module_ts
670
+ file_src_modules_instance_discovery_instance_discovery_module_ts --> file_src_modules_template_discovery_template_discovery_module_ts
671
+ file_src_modules_instance_discovery_instance_discovery_service_ts --> file_src_modules_instance_discovery_instance_discovery_locating_service_ts
672
+ file_src_modules_instance_discovery_instance_discovery_service_ts --> file_src_modules_instance_discovery_instance_discovery_matching_service_ts
673
+ file_src_modules_instance_discovery_instance_discovery_service_ts --> file_src_modules_instance_discovery_instance_discovery_types_ts
674
+ file_src_modules_instance_discovery_instance_discovery_service_ts --> file_src_modules_instance_group_instance_group_service_ts
675
+ file_src_modules_instance_discovery_instance_discovery_service_ts --> file_src_modules_instance_group_instance_group_types_ts
676
+ file_src_modules_instance_discovery_instance_discovery_service_ts --> file_src_modules_template_discovery_template_discovery_service_ts
677
+ file_src_modules_instance_discovery_instance_discovery_service_ts --> file_src_modules_template_discovery_template_discovery_types_ts
678
+ file_src_modules_instance_discovery_instance_discovery_service_unit_test_ts --> file_src_modules_configuration_configuration_types_ts
679
+ file_src_modules_instance_discovery_instance_discovery_service_unit_test_ts --> file_src_modules_instance_discovery_instance_discovery_module_ts
680
+ file_src_modules_instance_discovery_instance_discovery_service_unit_test_ts --> file_src_modules_instance_discovery_instance_discovery_service_ts
681
+ file_src_modules_instance_discovery_instance_discovery_service_unit_test_ts --> file_src_modules_instance_group_instance_group_service_ts
682
+ file_src_modules_instance_discovery_instance_discovery_types_ts --> file_src_modules_configuration_configuration_types_ts
683
+ file_src_modules_instance_discovery_instance_discovery_types_ts --> file_src_modules_rendering_rendering_types_ts
684
+ file_src_modules_instance_discovery_instance_discovery_types_ts --> file_src_modules_template_discovery_template_discovery_types_ts
685
+ file_src_modules_instance_group_instance_group_module_ts --> file_src_modules_instance_group_instance_group_service_ts
686
+ file_src_modules_instance_group_instance_group_service_ts --> file_src_modules_instance_group_instance_group_types_ts
687
+ file_src_modules_instance_group_instance_group_service_unit_test_ts --> file_src_modules_instance_group_instance_group_service_ts
688
+ file_src_modules_rendering_rendering_module_ts --> file_src_modules_rendering_rendering_service_ts
689
+ file_src_modules_rendering_rendering_service_ts --> file_src_modules_rendering_rendering_constants_ts
690
+ file_src_modules_rendering_rendering_service_ts --> file_src_modules_rendering_rendering_types_ts
691
+ file_src_modules_rendering_rendering_service_unit_test_ts --> file_src_modules_rendering_rendering_constants_ts
692
+ file_src_modules_rendering_rendering_service_unit_test_ts --> file_src_modules_rendering_rendering_service_ts
693
+ file_src_modules_template_discovery_template_discovery_module_ts --> file_src_modules_rendering_rendering_module_ts
694
+ file_src_modules_template_discovery_template_discovery_module_ts --> file_src_modules_template_discovery_template_discovery_service_ts
695
+ file_src_modules_template_discovery_template_discovery_service_ts --> file_src_modules_configuration_configuration_types_ts
696
+ file_src_modules_template_discovery_template_discovery_service_ts --> file_src_modules_rendering_rendering_service_ts
697
+ file_src_modules_template_discovery_template_discovery_service_ts --> file_src_modules_rendering_rendering_types_ts
698
+ file_src_modules_template_discovery_template_discovery_service_ts --> file_src_modules_template_discovery_template_discovery_types_ts
699
+ file_src_modules_template_discovery_template_discovery_service_unit_test_ts --> file_src_modules_rendering_rendering_service_ts
700
+ file_src_modules_template_discovery_template_discovery_service_unit_test_ts --> file_src_modules_template_discovery_template_discovery_service_ts
701
+ file_src_modules_template_discovery_template_discovery_service_unit_test_ts --> file_src_modules_template_discovery_template_discovery_types_ts
702
+ ```
703
+ <!-- codependix:end name="codependix-file-imports" -->
704
+
705
+ <!-- codometer:start -->
706
+
707
+ ## ⏲️ Codometer
708
+
709
+ ### Project
710
+
711
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-6347-22c55e?style=flat-square)
712
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-216.32_kB-6b7280?style=flat-square)
713
+ ![Folders](https://img.shields.io/badge/Folders-9-4a4a4a?style=flat-square)
714
+ ![Source Files](https://img.shields.io/badge/Source_Files-52-3178c6?style=flat-square)
715
+
716
+ ### Measured Targets
717
+
718
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-7.47_kB_gzip-6b7280?style=flat-square)
719
+
720
+ ### TypeScript
721
+
722
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-52-3178c6?style=flat-square)
723
+ ![Interfaces](https://img.shields.io/badge/Interfaces-18-0ea5e9?style=flat-square)
724
+ ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-2-0369a1?style=flat-square)
725
+ ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
726
+ ![Decorators](https://img.shields.io/badge/Decorators-17-db2777?style=flat-square)
727
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-173-6366f1?style=flat-square)
728
+ ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
729
+
730
+ ### JavaScript
731
+
732
+ ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-0-f7df1e?style=flat-square)
733
+ ![Test Files](https://img.shields.io/badge/Test_Files-13-10b981?style=flat-square)
734
+ ![External Packages](https://img.shields.io/badge/External_Packages-16-8b5cf6?style=flat-square)
735
+ ![Classes](https://img.shields.io/badge/Classes-20-7c3aed?style=flat-square)
736
+ ![Functions](https://img.shields.io/badge/Functions-339-16a34a?style=flat-square)
737
+ ![Methods](https://img.shields.io/badge/Methods-135-15803d?style=flat-square)
738
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-377-4ade80?style=flat-square)
739
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-97-059669?style=flat-square)
740
+ ![Constants](https://img.shields.io/badge/Constants-310-dc2626?style=flat-square)
741
+ ![Imports](https://img.shields.io/badge/Imports-210-0284c7?style=flat-square)
742
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-62-ea580c?style=flat-square)
743
+ ![Comments](https://img.shields.io/badge/Comments-322-64748b?style=flat-square)
744
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-872-475569?style=flat-square)
745
+ ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
746
+
747
+ ### Python
748
+
749
+ ![Python Files](https://img.shields.io/badge/Python_Files-0-3776ab?style=flat-square)
750
+ ![Python Lines](https://img.shields.io/badge/Python_Lines-0-4b8bbe?style=flat-square)
751
+ ![Python Classes](https://img.shields.io/badge/Python_Classes-0-7c3aed?style=flat-square)
752
+ ![Python Functions](https://img.shields.io/badge/Python_Functions-0-16a34a?style=flat-square)
753
+ ![Python Protocols](https://img.shields.io/badge/Python_Protocols-0-0ea5e9?style=flat-square)
754
+ ![Python Constants](https://img.shields.io/badge/Python_Constants-0-dc2626?style=flat-square)
755
+ ![Python Imports](https://img.shields.io/badge/Python_Imports-0-0284c7?style=flat-square)
756
+ ![Python Decorators](https://img.shields.io/badge/Python_Decorators-0-db2777?style=flat-square)
757
+ ![Docstrings](https://img.shields.io/badge/Docstrings-0-6366f1?style=flat-square)
758
+ ![Docstring Lines](https://img.shields.io/badge/Docstring_Lines-0-818cf8?style=flat-square)
759
+ ![Python Comments](https://img.shields.io/badge/Python_Comments-0-64748b?style=flat-square)
760
+ ![Python Comment Lines](https://img.shields.io/badge/Python_Comment_Lines-0-475569?style=flat-square)
761
+
762
+ ### JSON
763
+
764
+ ![JSON Files](https://img.shields.io/badge/JSON_Files-4-a16207?style=flat-square)
765
+ ![JSON Lines](https://img.shields.io/badge/JSON_Lines-171-ca8a04?style=flat-square)
766
+ ![JSON Objects](https://img.shields.io/badge/JSON_Objects-38-7c3aed?style=flat-square)
767
+ ![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-13-8b5cf6?style=flat-square)
768
+ ![JSON Properties](https://img.shields.io/badge/JSON_Properties-108-0284c7?style=flat-square)
769
+ ![JSON Strings](https://img.shields.io/badge/JSON_Strings-96-16a34a?style=flat-square)
770
+ ![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-1-059669?style=flat-square)
771
+ ![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-7-0ea5e9?style=flat-square)
772
+ ![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
773
+ ![JSON Items](https://img.shields.io/badge/JSON_Items-43-475569?style=flat-square)
774
+ ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-155-dc2626?style=flat-square)
775
+ ![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-5-ea580c?style=flat-square)
776
+
777
+ ### YAML
778
+
779
+ ![YAML Files](https://img.shields.io/badge/YAML_Files-0-cb171e?style=flat-square)
780
+ ![YAML Lines](https://img.shields.io/badge/YAML_Lines-0-e34c26?style=flat-square)
781
+ ![YAML Documents](https://img.shields.io/badge/YAML_Documents-0-f97316?style=flat-square)
782
+ ![YAML Mappings](https://img.shields.io/badge/YAML_Mappings-0-7c3aed?style=flat-square)
783
+ ![YAML Sequences](https://img.shields.io/badge/YAML_Sequences-0-8b5cf6?style=flat-square)
784
+ ![YAML Keys](https://img.shields.io/badge/YAML_Keys-0-0284c7?style=flat-square)
785
+ ![YAML Scalars](https://img.shields.io/badge/YAML_Scalars-0-16a34a?style=flat-square)
786
+ ![YAML Anchors](https://img.shields.io/badge/YAML_Anchors-0-059669?style=flat-square)
787
+ ![YAML Aliases](https://img.shields.io/badge/YAML_Aliases-0-10b981?style=flat-square)
788
+ ![YAML Comments](https://img.shields.io/badge/YAML_Comments-0-64748b?style=flat-square)
789
+ ![YAML Max Depth](https://img.shields.io/badge/YAML_Max_Depth-0-ea580c?style=flat-square)
790
+
791
+ ### TOML
792
+
793
+ ![TOML Files](https://img.shields.io/badge/TOML_Files-0-9c4221?style=flat-square)
794
+ ![TOML Lines](https://img.shields.io/badge/TOML_Lines-0-b45309?style=flat-square)
795
+ ![TOML Tables](https://img.shields.io/badge/TOML_Tables-0-7c3aed?style=flat-square)
796
+ ![TOML Array Tables](https://img.shields.io/badge/TOML_Array_Tables-0-8b5cf6?style=flat-square)
797
+ ![TOML Keys](https://img.shields.io/badge/TOML_Keys-0-0284c7?style=flat-square)
798
+ ![TOML Arrays](https://img.shields.io/badge/TOML_Arrays-0-16a34a?style=flat-square)
799
+ ![TOML Comments](https://img.shields.io/badge/TOML_Comments-0-64748b?style=flat-square)
800
+
801
+ ### Shell
802
+
803
+ ![Shell Files](https://img.shields.io/badge/Shell_Files-0-89e051?style=flat-square)
804
+ ![Shell Lines](https://img.shields.io/badge/Shell_Lines-0-4eaa25?style=flat-square)
805
+ ![Shell Functions](https://img.shields.io/badge/Shell_Functions-0-16a34a?style=flat-square)
806
+ ![Shell Variables](https://img.shields.io/badge/Shell_Variables-0-0284c7?style=flat-square)
807
+ ![Shell Exports](https://img.shields.io/badge/Shell_Exports-0-ea580c?style=flat-square)
808
+ ![Shell Conditionals](https://img.shields.io/badge/Shell_Conditionals-0-7c3aed?style=flat-square)
809
+ ![Shell Loops](https://img.shields.io/badge/Shell_Loops-0-8b5cf6?style=flat-square)
810
+ ![Shell Pipelines](https://img.shields.io/badge/Shell_Pipelines-0-059669?style=flat-square)
811
+ ![Shebangs](https://img.shields.io/badge/Shebangs-0-6b7280?style=flat-square)
812
+ ![Shell Comments](https://img.shields.io/badge/Shell_Comments-0-64748b?style=flat-square)
813
+ ![Shell Comment Lines](https://img.shields.io/badge/Shell_Comment_Lines-0-475569?style=flat-square)
814
+
815
+ ### SQL
816
+
817
+ ![SQL Files](https://img.shields.io/badge/SQL_Files-0-e38c00?style=flat-square)
818
+ ![SQL Lines](https://img.shields.io/badge/SQL_Lines-0-f29111?style=flat-square)
819
+ ![SQL Statements](https://img.shields.io/badge/SQL_Statements-0-7c3aed?style=flat-square)
820
+ ![SQL Selects](https://img.shields.io/badge/SQL_Selects-0-16a34a?style=flat-square)
821
+ ![SQL Inserts](https://img.shields.io/badge/SQL_Inserts-0-22c55e?style=flat-square)
822
+ ![SQL Updates](https://img.shields.io/badge/SQL_Updates-0-0ea5e9?style=flat-square)
823
+ ![SQL Deletes](https://img.shields.io/badge/SQL_Deletes-0-dc2626?style=flat-square)
824
+ ![SQL Creates](https://img.shields.io/badge/SQL_Creates-0-0284c7?style=flat-square)
825
+ ![SQL Joins](https://img.shields.io/badge/SQL_Joins-0-8b5cf6?style=flat-square)
826
+ ![SQL CTEs](https://img.shields.io/badge/SQL_CTEs-0-059669?style=flat-square)
827
+ ![SQL Comments](https://img.shields.io/badge/SQL_Comments-0-64748b?style=flat-square)
828
+
829
+ ### HCL
830
+
831
+ ![HCL Files](https://img.shields.io/badge/HCL_Files-0-844fba?style=flat-square)
832
+ ![HCL Lines](https://img.shields.io/badge/HCL_Lines-0-a78bfa?style=flat-square)
833
+ ![HCL Blocks](https://img.shields.io/badge/HCL_Blocks-0-7c3aed?style=flat-square)
834
+ ![HCL Resources](https://img.shields.io/badge/HCL_Resources-0-0284c7?style=flat-square)
835
+ ![HCL Variables](https://img.shields.io/badge/HCL_Variables-0-16a34a?style=flat-square)
836
+ ![HCL Outputs](https://img.shields.io/badge/HCL_Outputs-0-059669?style=flat-square)
837
+ ![HCL Attributes](https://img.shields.io/badge/HCL_Attributes-0-0ea5e9?style=flat-square)
838
+ ![HCL Interpolations](https://img.shields.io/badge/HCL_Interpolations-0-db2777?style=flat-square)
839
+ ![HCL Comments](https://img.shields.io/badge/HCL_Comments-0-64748b?style=flat-square)
840
+
841
+ ### CSS
842
+
843
+ ![CSS Files](https://img.shields.io/badge/CSS_Files-0-264de4?style=flat-square)
844
+ ![CSS Lines](https://img.shields.io/badge/CSS_Lines-0-2965f1?style=flat-square)
845
+ ![CSS Rules](https://img.shields.io/badge/CSS_Rules-0-7c3aed?style=flat-square)
846
+ ![CSS Selectors](https://img.shields.io/badge/CSS_Selectors-0-8b5cf6?style=flat-square)
847
+ ![CSS Declarations](https://img.shields.io/badge/CSS_Declarations-0-0284c7?style=flat-square)
848
+ ![CSS At Rules](https://img.shields.io/badge/CSS_At_Rules-0-f97316?style=flat-square)
849
+ ![CSS Media Queries](https://img.shields.io/badge/CSS_Media_Queries-0-ea580c?style=flat-square)
850
+ ![CSS Custom Properties](https://img.shields.io/badge/CSS_Custom_Properties-0-16a34a?style=flat-square)
851
+ ![CSS Comments](https://img.shields.io/badge/CSS_Comments-0-64748b?style=flat-square)
852
+
853
+ ### Conventions
854
+
855
+ ![Module Files](https://img.shields.io/badge/Module_Files-6-7c3aed?style=flat-square)
856
+ ![Service Files](https://img.shields.io/badge/Service_Files-11-0284c7?style=flat-square)
857
+ ![Command Files](https://img.shields.io/badge/Command_Files-0-16a34a?style=flat-square)
858
+ ![Constants Files](https://img.shields.io/badge/Constants_Files-6-ea580c?style=flat-square)
859
+ ![Types Files](https://img.shields.io/badge/Types_Files-6-db2777?style=flat-square)
860
+ ![Utilities Files](https://img.shields.io/badge/Utilities_Files-1-0ea5e9?style=flat-square)
861
+ ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
862
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-13-ca8a04?style=flat-square)
863
+ ![Integration Tests](https://img.shields.io/badge/Integration_Tests-0-7c3aed?style=flat-square)
864
+ ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-0-0284c7?style=flat-square)
865
+ ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
866
+ ![HCL Comment Budget](https://img.shields.io/badge/HCL_Comment_Budget-0-ea580c?style=flat-square)
867
+ ![Python Comment Budget](https://img.shields.io/badge/Python_Comment_Budget-0-db2777?style=flat-square)
868
+ ![SQL Comment Budget](https://img.shields.io/badge/SQL_Comment_Budget-0-0ea5e9?style=flat-square)
869
+ ![TOML Comment Budget](https://img.shields.io/badge/TOML_Comment_Budget-0-059669?style=flat-square)
870
+ ![TypeScript Comment Budget](https://img.shields.io/badge/TypeScript_Comment_Budget-0-ca8a04?style=flat-square)
871
+ ![YAML Comment Budget](https://img.shields.io/badge/YAML_Comment_Budget-0-7c3aed?style=flat-square)
872
+ ![Shell Comment Budget](https://img.shields.io/badge/Shell_Comment_Budget-0-0284c7?style=flat-square)
873
+
874
+ ### Jupyter
875
+
876
+ ![Notebooks](https://img.shields.io/badge/Notebooks-0-f37626?style=flat-square)
877
+ ![Notebook Cells](https://img.shields.io/badge/Notebook_Cells-0-e8a33d?style=flat-square)
878
+ ![Code Cells](https://img.shields.io/badge/Code_Cells-0-3776ab?style=flat-square)
879
+ ![Markdown Cells](https://img.shields.io/badge/Markdown_Cells-0-083fa1?style=flat-square)
880
+ ![Raw Cells](https://img.shields.io/badge/Raw_Cells-0-9ca3af?style=flat-square)
881
+ ![Executed Cells](https://img.shields.io/badge/Executed_Cells-0-16a34a?style=flat-square)
882
+ ![Cell Outputs](https://img.shields.io/badge/Cell_Outputs-0-059669?style=flat-square)
883
+ ![Notebook Code Lines](https://img.shields.io/badge/Notebook_Code_Lines-0-4b8bbe?style=flat-square)
884
+ ![Notebook Classes](https://img.shields.io/badge/Notebook_Classes-0-7c3aed?style=flat-square)
885
+ ![Notebook Functions](https://img.shields.io/badge/Notebook_Functions-0-22c55e?style=flat-square)
886
+ ![Notebook Imports](https://img.shields.io/badge/Notebook_Imports-0-0284c7?style=flat-square)
887
+ ![Notebook Decorators](https://img.shields.io/badge/Notebook_Decorators-0-db2777?style=flat-square)
888
+ ![Notebook Prose Lines](https://img.shields.io/badge/Notebook_Prose_Lines-0-1f6feb?style=flat-square)
889
+ ![Notebook Headings](https://img.shields.io/badge/Notebook_Headings-0-a78bfa?style=flat-square)
890
+ ![Notebook Links](https://img.shields.io/badge/Notebook_Links-0-10b981?style=flat-square)
891
+ ![Notebook Images](https://img.shields.io/badge/Notebook_Images-0-34d399?style=flat-square)
892
+ ![Notebook Code Blocks](https://img.shields.io/badge/Notebook_Code_Blocks-0-dc2626?style=flat-square)
893
+ ![Notebook Properties](https://img.shields.io/badge/Notebook_Properties-0-ca8a04?style=flat-square)
894
+ ![Notebook Nodes](https://img.shields.io/badge/Notebook_Nodes-0-a16207?style=flat-square)
895
+ ![Notebook Max Depth](https://img.shields.io/badge/Notebook_Max_Depth-0-ea580c?style=flat-square)
896
+
897
+ ### Markdown
898
+
899
+ ![Markdown Files](https://img.shields.io/badge/Markdown_Files-1-083fa1?style=flat-square)
900
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-222-1f6feb?style=flat-square)
901
+ ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
902
+ ![H2](https://img.shields.io/badge/H2-7-8b5cf6?style=flat-square)
903
+ ![H3](https://img.shields.io/badge/H3-12-a78bfa?style=flat-square)
904
+ ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
905
+ ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
906
+ ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
907
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-45-64748b?style=flat-square)
908
+ ![Lists](https://img.shields.io/badge/Lists-6-16a34a?style=flat-square)
909
+ ![List Items](https://img.shields.io/badge/List_Items-25-22c55e?style=flat-square)
910
+ ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
911
+ ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
912
+ ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
913
+ ![Links](https://img.shields.io/badge/Links-9-059669?style=flat-square)
914
+ ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
915
+ ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
916
+ ![Inline Code](https://img.shields.io/badge/Inline_Code-73-ef4444?style=flat-square)
917
+ ![Block Quotes](https://img.shields.io/badge/Block_Quotes-0-ca8a04?style=flat-square)
918
+ ![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-0-a16207?style=flat-square)
919
+ <!-- codometer:end -->