@conformetry/languages 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,941 @@
1
+ # ๐Ÿ‘” Conformetry Languages
2
+
3
+ Every Language [Conformetry](../conformetry-cli/README.md) compares files with,
4
+ behind one import โ€” plus the resolution that decides which of them a run needs.
5
+
6
+ ```bash
7
+ npm install --save-dev @conformetry/languages
8
+ ```
9
+
10
+ ## The Languages
11
+
12
+ A **Language** is the comparison engine for one family of file types. Each is a
13
+ module of its own, exposing a NestJS module and a service, and each declares the
14
+ extensions it claims.
15
+
16
+ | Module | Claims | What it compares |
17
+ | ------ | ------ | ---------------- |
18
+ | `json` | `.json`, `.jsonc` | Every key and value the template declares, addressed by JSON path rather than line number |
19
+ | `jupyter` | `.ipynb` | A notebook's envelope, markdown cells, and code cells, by delegating to `json`, `markdown`, and `python` |
20
+ | `markdown` | `.md` | The document's syntax tree โ€” headings, lists, links โ€” rather than its rendered text |
21
+ | `python` | `.py` | Python's own abstract syntax tree, through the interpreter shipped in `src/python/` |
22
+ | `text` | `.txt` | Every template line, duplicate-aware and order-independent |
23
+ | `typescript` | `.ts`, `.tsx` | Declarations, signatures, and comments, through the TypeScript compiler |
24
+
25
+ Every one of them is a lower bound rather than an exact specification: an
26
+ instance may add what its template does not mention.
27
+
28
+ ## Resolution and the Fallback
29
+
30
+ `LanguagesService` takes the extensions a run's templates declare and returns
31
+ the Languages that claim them, so a repository of JSON never reports a
32
+ TypeScript result it had nothing to say about.
33
+
34
+ An extension **no** Language claims is not skipped. It is routed to the
35
+ **Fallback** โ€” the text Language, widened to also claim those extensions, and
36
+ compared line by line. That is what stops a `.toml` or a `.cfg` in a template
37
+ from going unchecked, and it is why the text Language is a floor under every
38
+ run rather than one option among six.
39
+
40
+ Registering a Language is a single step: add it to `claimingLanguages` in
41
+ `LanguagesService`. Its own descriptor says which extensions it claims, so
42
+ there is no second list to keep in step.
43
+
44
+ ## The Python bridge
45
+
46
+ `python/` holds a small Python package, and `PythonBridgeService` spawns
47
+ `python3` against it, because Python's syntax tree is only available from
48
+ Python. The path is resolved from the service's own module location rather than
49
+ from a working directory, so the bridge is found the same way whether
50
+ conformetry runs from a checkout or from `node_modules`.
51
+
52
+ The interpreter is spawned inside a method, never at module scope, so importing
53
+ this package on a machine without `python3` is harmless. A missing interpreter
54
+ surfaces as a reported Difference on the `.py` files โ€” visible, rather than
55
+ mistaken for conformance.
56
+
57
+ ## Exports
58
+
59
+ `LanguagesModule` and `LanguagesService`, each Language's module and service,
60
+ and the helper services the Languages are built from โ€”
61
+ `JsonComparisonService`, `JupyterNotebookService`, `MarkdownNodesService`,
62
+ `MarkdownTreeService`, `PythonBridgeService`, `TypescriptCommentsService`,
63
+ `TypescriptNodesService`, and `TypescriptTreeService`.
64
+
65
+ A host almost always wants `LanguagesModule`, which imports and re-exports all
66
+ six.
67
+
68
+ ## Why one package
69
+
70
+ These six Languages were six packages until the consolidation recorded in
71
+ [ADR 0006](../../../../docs/adr/0006-hold-every-conformetry-language-in-one-package.md).
72
+ That record is the place to read what installing this package costs a consumer
73
+ who needs only one Language, why paying it won, and which three alternatives
74
+ were weighed and rejected.
75
+
76
+ ## Test
77
+
78
+ ```bash
79
+ nx run conformetry-languages:vitest
80
+ ```
81
+
82
+ ## License
83
+
84
+ MIT โ€” see [LICENSE](../../../../LICENSE).
85
+
86
+ ## ๐Ÿ‘” Conformetry
87
+
88
+ This project was generated from the [nestjs-service-project](../../../../configuration/conformetry-templates/nestjs-service-project) conformetry template.
89
+
90
+ <!-- callidescope:start -->
91
+
92
+ ## ๐Ÿ”ญ Callidescope
93
+
94
+ Call stacks traced through `packages/ic-suite/conformetry/conformetry-languages`, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.
95
+
96
+ | Measure | Value |
97
+ | --- | --- |
98
+ | Callables | 159 |
99
+ | Files | 55 |
100
+ | Calls traced | 199 |
101
+ | Call stacks | 14 |
102
+ | Deepest stack | 13 |
103
+ | Stacks through recursion | 3 |
104
+ | Unfollowable calls | 0 |
105
+
106
+ ### Limits
107
+
108
+ What this project is judged against, as declared in its own `callidescope.config.ts`.
109
+
110
+ | Limit | Value |
111
+ | --- | --- |
112
+ | `maximumDepth` | 13 |
113
+ | `maximumBreadth` | 11 |
114
+
115
+ ### Call stacks (depth)
116
+
117
+ **1. `JupyterService.validateDocument`** โ€” depth 13 ยท orphan-root
118
+
119
+ ```text
120
+ ๐Ÿš€ JupyterService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:153]
121
+ โ†ณ Reports every notebook difference: envelope, missing cells, cell contents.
122
+ โ””โ”€> JupyterService.map(โ€ฆ)(โ€ฆ): { error: { differenceType: "code"; expected: string; fix: string; language: "python"; message: string; weight: number; }; weight: number; } [packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:173]
123
+ โ””โ”€> JupyterService.weighMissingCell(args: { cell: PairedCells; document: PreparedValidationDocument; }): number [packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:140]
124
+ โ†ณ Weighs a cell the notebook does not have.
125
+ โ””โ”€> JupyterService.validateCell(โ€ฆ): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:90]
126
+ โ†ณ Validates one paired cell with the validator matching its kind.
127
+ โ””โ”€> MarkdownService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown.service.ts:48]
128
+ โ†ณ Reports every markdown structure the template requires and the file lacks.
129
+ โ””โ”€> MarkdownTreeService.compareContainer(args: CompareNodeArguments): CompareNodeResult (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:65]
130
+ โ†ณ Matches a container node, then descends into it.
131
+ โ””โ”€> MarkdownTreeService.map(โ€ฆ)(โ€ฆ): { differences: MarkdownComparisonError[]; lastMatchedNode: MarkdownNode; totalWeight: number; } (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:91]
132
+ โ””โ”€> MarkdownTreeService.compareChildren(args: CompareChildrenArguments): CompareChildrenResult (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:147]
133
+ โ†ณ Compares one level of two trees, descending into containers.
134
+ โ””โ”€> MarkdownTreeService.compareLeaf(args: CompareNodeArguments): CompareNodeResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:115]
135
+ โ†ณ Matches a leaf node on its own identity, without descending.
136
+ โ””โ”€> MarkdownTreeService.findCandidates(args: CompareNodeArguments): MarkdownNode[] [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:135]
137
+ โ†ณ Finds every instance sibling satisfying the template node.
138
+ โ””โ”€> MarkdownTreeService.filter(โ€ฆ)(instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:136]
139
+ โ””โ”€> MarkdownNodesService.matches(args: { instanceNode: MarkdownNode; templateNode: MarkdownNode; }): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:140]
140
+ โ†ณ Returns whether an instance node satisfies a template node.
141
+ โ””โ”€> MarkdownNodesService.readText(node: MarkdownNode): string [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:163]
142
+ โ†ณ Reads a node's rendered plain text.
143
+ ```
144
+
145
+ **2. `JsonService.validateDocument`** โ€” depth 12 ยท orphan-root
146
+
147
+ ```text
148
+ ๐Ÿš€ JsonService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json.service.ts:39]
149
+ โ†ณ Reports every key or value the template requires and the instance lacks.
150
+ โ””โ”€> JsonComparisonService.compareArrayItem(โ€ฆ): JsonComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:80]
151
+ โ†ณ Matches one required array entry against the instance array.
152
+ โ””โ”€> JsonComparisonService.map(โ€ฆ)(instanceItem: JsonValue, index: number): JsonComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:123]
153
+ โ””โ”€> JsonComparisonService.compare(args: CompareJsonArguments): JsonComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:269]
154
+ โ†ณ Compares a template value against an instance value, returning every way the instance fails to contain what theโ€ฆ
155
+ โ””โ”€> JsonComparisonService.compareArrays(โ€ฆ): JsonComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:142]
156
+ โ†ณ Compares two arrays.
157
+ โ””โ”€> JsonComparisonService.map(โ€ฆ)(templateItem: JsonValue): JsonComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:149]
158
+ โ””โ”€> JsonComparisonService.compareObjects(โ€ฆ): JsonComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:156]
159
+ โ†ณ Compares two objects, requiring every template key to be present.
160
+ โ””โ”€> JsonComparisonService.map(โ€ฆ)([key, templateValue]: [string, JsonValue]): JsonComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:165]
161
+ โ””โ”€> JsonComparisonService.countNodes(value: JsonValue): number (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:208]
162
+ โ†ณ Counts a JSON value and every value nested inside it.
163
+ โ””โ”€> JsonComparisonService.reduce(โ€ฆ)(total: number, item: JsonValue): number (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:210]
164
+ โ””โ”€> JsonComparisonService.reduce(โ€ฆ)(total: number, nested: JsonValue): number (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:216]
165
+ โ””โ”€> JsonComparisonService.isJsonObject(value: JsonValue): value is Record<string, JsonValue> [packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:236]
166
+ โ†ณ Returns whether a value is a plain JSON object.
167
+ ```
168
+
169
+ **3. `TypescriptService.validateDocument`** โ€” depth 12 ยท orphan-root
170
+
171
+ ```text
172
+ ๐Ÿš€ TypescriptService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript.service.ts:164]
173
+ โ†ณ Reports every declaration and comment the template requires.
174
+ โ””โ”€> TypescriptService.validateStructure(โ€ฆ): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript.service.ts:107]
175
+ โ†ณ Compares the syntax trees and describes each missing declaration.
176
+ โ””โ”€> TypescriptTreeService.compareBestCandidate(args: { candidates: Node[]; templateChild: Node; }): TreeComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:68]
177
+ โ†ณ Descends into whichever candidate explains the template best.
178
+ โ””โ”€> TypescriptTreeService.map(โ€ฆ)(candidate: Node): TreeComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:73]
179
+ โ””โ”€> TypescriptTreeService.compareTree(args: CompareTreeArguments): TreeComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:127]
180
+ โ†ณ Compares one level of two trees, descending into every match.
181
+ โ””โ”€> TypescriptTreeService.map(โ€ฆ)(templateChild: Node): TreeComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:134]
182
+ โ””โ”€> TypescriptTreeService.compareChild(โ€ฆ): TreeComparison (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:88]
183
+ โ†ณ Matches one template child against the instance's children.
184
+ โ””โ”€> TypescriptTreeService.buildError(โ€ฆ): TypescriptComparisonError [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:43]
185
+ โ†ณ Describes a template node with no instance counterpart.
186
+ โ””โ”€> TypescriptNodesService.countSubtree(node: Node): number (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:176]
187
+ โ†ณ Counts a node and everything beneath it.
188
+ โ””โ”€> TypescriptNodesService.reduce(โ€ฆ)(total: number, child: Node): number (cycle) [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:177]
189
+ โ””โ”€> TypescriptNodesService.readChildren(node: Node): Node[] [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:183]
190
+ โ†ณ Reads a node's direct children, skipping the end-of-file token.
191
+ โ””โ”€> TypescriptNodesService.forEachChild(โ€ฆ)(childNode: Node): undefined [packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:186]
192
+ ```
193
+
194
+ <details>
195
+ <summary>11 more call stacks</summary>
196
+
197
+ **4. `PythonService.validateDocument`** โ€” depth 6 ยท orphan-root
198
+
199
+ ```text
200
+ ๐Ÿš€ PythonService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python.service.ts:38]
201
+ โ†ณ Reports every declaration and comment the template requires.
202
+ โ””โ”€> PythonBridgeService.validatePythonSource(args: RunPythonBridgeArguments): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:162]
203
+ โ†ณ Compares one Python source against its rendered template.
204
+ โ””โ”€> PythonBridgeService.map(โ€ฆ)(error: Readonly<Record<string, unknown>>): ConformetryDifference [packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:187]
205
+ โ””โ”€> PythonBridgeService.toConformetryDifference(error: PythonBridgeError): ConformetryDifference [packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:134]
206
+ โ†ณ Maps one snake_case bridge error onto the shared error shape.
207
+ โ””โ”€> PythonBridgeService.readValues(error: PythonBridgeError): Partial<ConformetryDifference> [packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:123]
208
+ โ†ณ Reads the optional expected and actual values.
209
+ โ””โ”€> PythonBridgeService.readString(error: PythonBridgeError, key: string): string | undefined [packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:113]
210
+ โ†ณ Narrows an untrusted string field from the bridge payload.
211
+ ```
212
+
213
+ **5. `LanguagesService.validateDocument`** โ€” depth 4 ยท orphan-root
214
+
215
+ ```text
216
+ ๐Ÿš€ LanguagesService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/languages/languages.service.ts:80]
217
+ โ””โ”€> TextService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/ic-suite/conformetry/conformetry-languages/src/modules/text/text.service.ts:76]
218
+ โ†ณ Reports every template line missing from the instance.
219
+ โ””โ”€> TextService.findMissingLines(document: PreparedValidationDocument): MissingLine[] [packages/ic-suite/conformetry/conformetry-languages/src/modules/text/text.service.ts:46]
220
+ โ†ณ Finds template lines the instance does not supply often enough.
221
+ โ””โ”€> TextService.countLines(text: string): Map<string, number> [packages/ic-suite/conformetry/conformetry-languages/src/modules/text/text.service.ts:35]
222
+ โ†ณ Counts how many times each line occurs, for duplicate-aware matching.
223
+ ```
224
+
225
+ **6. `MarkdownNodesService.table`** โ€” depth 3 ยท orphan-root
226
+
227
+ ```text
228
+ ๐Ÿš€ MarkdownNodesService.table(templateNode: MarkdownNode, instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:68]
229
+ โ””โ”€> MarkdownNodesService.readColumnCount(node: MarkdownNode): number [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:91]
230
+ โ†ณ Counts a table's columns from its first row.
231
+ โ””โ”€> MarkdownNodesService.readChildren(node: MarkdownNode): MarkdownNode[] [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:158]
232
+ โ†ณ Reads a node's children, or an empty list for a leaf.
233
+ ```
234
+
235
+ **7. `MarkdownNodesService.code`** โ€” depth 2 ยท orphan-root
236
+
237
+ ```text
238
+ ๐Ÿš€ MarkdownNodesService.code(templateNode: MarkdownNode, instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:35]
239
+ โ””โ”€> MarkdownNodesService.sameField(leftValue: string | undefined, rightValue: string | undefined): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:98]
240
+ โ†ณ Compares two optional string fields, treating absent as empty.
241
+ ```
242
+
243
+ **8. `MarkdownNodesService.heading`** โ€” depth 2 ยท orphan-root
244
+
245
+ ```text
246
+ ๐Ÿš€ MarkdownNodesService.heading(templateNode: MarkdownNode, instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:41]
247
+ โ””โ”€> MarkdownNodesService.readText(node: MarkdownNode): string [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:163]
248
+ โ†ณ Reads a node's rendered plain text.
249
+ ```
250
+
251
+ **9. `MarkdownNodesService.html`** โ€” depth 2 ยท orphan-root
252
+
253
+ ```text
254
+ ๐Ÿš€ MarkdownNodesService.html(templateNode: MarkdownNode, instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:47]
255
+ โ””โ”€> MarkdownNodesService.sameField(leftValue: string | undefined, rightValue: string | undefined): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:98]
256
+ โ†ณ Compares two optional string fields, treating absent as empty.
257
+ ```
258
+
259
+ **10. `MarkdownNodesService.image`** โ€” depth 2 ยท orphan-root
260
+
261
+ ```text
262
+ ๐Ÿš€ MarkdownNodesService.image(templateNode: MarkdownNode, instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:50]
263
+ โ””โ”€> MarkdownNodesService.sameField(leftValue: string | undefined, rightValue: string | undefined): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:98]
264
+ โ†ณ Compares two optional string fields, treating absent as empty.
265
+ ```
266
+
267
+ **11. `MarkdownNodesService.inlineCode`** โ€” depth 2 ยท orphan-root
268
+
269
+ ```text
270
+ ๐Ÿš€ MarkdownNodesService.inlineCode(templateNode: MarkdownNode, instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:56]
271
+ โ””โ”€> MarkdownNodesService.sameField(leftValue: string | undefined, rightValue: string | undefined): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:98]
272
+ โ†ณ Compares two optional string fields, treating absent as empty.
273
+ ```
274
+
275
+ **12. `MarkdownNodesService.link`** โ€” depth 2 ยท orphan-root
276
+
277
+ ```text
278
+ ๐Ÿš€ MarkdownNodesService.link(templateNode: MarkdownNode, instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:59]
279
+ โ””โ”€> MarkdownNodesService.sameField(leftValue: string | undefined, rightValue: string | undefined): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:98]
280
+ โ†ณ Compares two optional string fields, treating absent as empty.
281
+ ```
282
+
283
+ **13. `MarkdownNodesService.tableRow`** โ€” depth 2 ยท orphan-root
284
+
285
+ ```text
286
+ ๐Ÿš€ MarkdownNodesService.tableRow(templateNode: MarkdownNode, instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:74]
287
+ โ””โ”€> MarkdownNodesService.readChildren(node: MarkdownNode): MarkdownNode[] [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:158]
288
+ โ†ณ Reads a node's children, or an empty list for a leaf.
289
+ ```
290
+
291
+ **14. `MarkdownNodesService.text`** โ€” depth 2 ยท orphan-root
292
+
293
+ ```text
294
+ ๐Ÿš€ MarkdownNodesService.text(templateNode: MarkdownNode, instanceNode: MarkdownNode): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:80]
295
+ โ””โ”€> MarkdownNodesService.sameField(leftValue: string | undefined, rightValue: string | undefined): boolean [packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:98]
296
+ โ†ณ Compares two optional string fields, treating absent as empty.
297
+ ```
298
+
299
+ </details>
300
+
301
+ ### Breadth
302
+
303
+ | Callable | Breadth | Calls directly | Location |
304
+ | --- | --- | --- | --- |
305
+ | `JupyterService.validateDocument` | 11 | `JupyterNotebookService.parseNotebook`, `JupyterNotebookService.pairCells`, `JsonComparisonService.compare`, `JupyterService.readEnvelope`, `JupyterService.map(โ€ฆ)`, `JupyterService.map(โ€ฆ)`, `JupyterService.map(โ€ฆ)`, `JupyterService.flatMap(โ€ฆ)`, `JupyterService.reduce(โ€ฆ)`, `JupyterService.map(โ€ฆ)`, `JupyterService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:153` |
306
+ | `JsonComparisonService.compare` | 7 | `JsonComparisonService.countContainer`, `JsonComparisonService.compareArrays`, `JsonComparisonService.isJsonObject`, `JsonComparisonService.compareObjects`, `JsonComparisonService.countNodes`, `JsonComparisonService.formatPath`, `JsonComparisonService.buildError` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:269` |
307
+ | `JsonComparisonService.compareArrayItem` | 6 | `JsonComparisonService.formatPath`, `JsonComparisonService.countNodes`, `JsonComparisonService.isJsonPrimitive`, `JsonComparisonService.buildError`, `JsonComparisonService.pickClosestMatch`, `JsonComparisonService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:80` |
308
+
309
+ <details>
310
+ <summary>84 more callables</summary>
311
+
312
+ | Callable | Breadth | Calls directly | Location |
313
+ | --- | --- | --- | --- |
314
+ | `PythonBridgeService.toConformetryDifference` | 6 | `PythonBridgeService.readValues`, `PythonBridgeService.readLocations`, `DifferencesService.resolveDifferenceType`, `PythonBridgeService.readString`, `DifferencesService.resolveErrorLanguage`, `PythonBridgeService.readNumber` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:134` |
315
+ | `TypescriptNodesService.readKey` | 6 | `TypescriptNodesService.readImportKey`, `TypescriptNodesService.readExportKey`, `TypescriptNodesService.readDecoratorKey`, `TypescriptNodesService.readExpressionStatementKey`, `TypescriptNodesService.readLiteralKey`, `TypescriptNodesService.readNamedKey` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:201` |
316
+ | `MarkdownTreeService.compareContainer` | 5 | `MarkdownTreeService.findCandidates`, `MarkdownTreeService.buildError`, `MarkdownNodesService.readChildren`, `MarkdownTreeService.reduce(โ€ฆ)`, `MarkdownTreeService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:65` |
317
+ | `TypescriptTreeService.compareChild` | 5 | `TypescriptNodesService.readKey`, `TypescriptTreeService.filter(โ€ฆ)`, `TypescriptTreeService.filter(โ€ฆ)`, `TypescriptTreeService.buildError`, `TypescriptTreeService.compareBestCandidate` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:88` |
318
+ | `LanguagesService.resolveValidators` | 5 | `LanguagesService.filter(โ€ฆ)`, `LanguagesService.claimingLanguages`, `LanguagesService.flatMap(โ€ฆ)`, `LanguagesService.filter(โ€ฆ)`, `LanguagesService.widenFallback` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/languages/languages.service.ts:95` |
319
+ | `JsonComparisonService.map(โ€ฆ)` | 4 | `JsonComparisonService.formatPath`, `JsonComparisonService.countNodes`, `JsonComparisonService.buildError`, `JsonComparisonService.compare` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:165` |
320
+ | `FilesService.checkInstanceFiles` | 3 | `ConfigurationService.resolveInstanceFiles`, `FilesService.buildMissingDifference`, `FilesService.countExpectedFiles` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/files/files.service.ts:96` |
321
+ | `JsonComparisonService.countNodes` | 3 | `JsonComparisonService.reduce(โ€ฆ)`, `JsonComparisonService.isJsonObject`, `JsonComparisonService.reduce(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:208` |
322
+ | `JupyterNotebookService.pairCells` | 3 | `JupyterNotebookService.groupSourcesByKind`, `JupyterNotebookService.readCellKind`, `JupyterNotebookService.readCellSource` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter-notebook.service.ts:82` |
323
+ | `MarkdownTreeService.compareLeaf` | 3 | `MarkdownTreeService.findCandidates`, `MarkdownNodesService.countSubtree`, `MarkdownTreeService.buildError` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:115` |
324
+ | `MarkdownService.validateDocument` | 3 | `MarkdownTreeService.compareChildren`, `MarkdownNodesService.filterNodes`, `MarkdownService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown.service.ts:48` |
325
+ | `PythonBridgeService.validatePythonSource` | 3 | `PythonBridgeService.buildBridgeError`, `PythonBridgeService.map(โ€ฆ)`, `ScoringService.sumWeights` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:162` |
326
+ | `JupyterService.validateCell` | 3 | `MarkdownService.validateDocument`, `JupyterService.attributeToCell`, `PythonBridgeService.validatePythonSource` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:90` |
327
+ | `TypescriptTreeService.compareTree` | 3 | `TypescriptNodesService.readChildren`, `TypescriptTreeService.reduce(โ€ฆ)`, `TypescriptTreeService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:127` |
328
+ | `TypescriptService.validateDocument` | 3 | `TypescriptService.parseSourceFile`, `TypescriptService.validateStructure`, `TypescriptService.validateComments` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript.service.ts:164` |
329
+ | `FilesService.buildMissingDifference` | 2 | `DifferencesService.buildMissingFileDifference`, `DifferencesService.buildMissingDirectoryDifference` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/files/files.service.ts:52` |
330
+ | `JsonComparisonService.compareArrays` | 2 | `JsonComparisonService.combine`, `JsonComparisonService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:142` |
331
+ | `JsonComparisonService.compareObjects` | 2 | `JsonComparisonService.combine`, `JsonComparisonService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:156` |
332
+ | `JupyterNotebookService.groupSourcesByKind` | 2 | `JupyterNotebookService.readCellKind`, `JupyterNotebookService.readCellSource` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter-notebook.service.ts:31` |
333
+ | `MarkdownNodesService.link` | 2 | `MarkdownNodesService.sameField`, `MarkdownNodesService.readText` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:59` |
334
+ | `MarkdownNodesService.countSubtree` | 2 | `MarkdownNodesService.reduce(โ€ฆ)`, `MarkdownNodesService.readChildren` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:118` |
335
+ | `MarkdownTreeService.buildError` | 2 | `MarkdownNodesService.readText`, `MarkdownNodesService.countSubtree` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:45` |
336
+ | `MarkdownTreeService.map(โ€ฆ)` | 2 | `MarkdownTreeService.compareChildren`, `MarkdownNodesService.readChildren` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:91` |
337
+ | `MarkdownTreeService.compareChildren` | 2 | `MarkdownTreeService.compareContainer`, `MarkdownTreeService.compareLeaf` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:147` |
338
+ | `TextService.validateDocument` | 2 | `TextService.map(โ€ฆ)`, `TextService.findMissingLines` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/text/text.service.ts:76` |
339
+ | `TypescriptCommentsService.compareComments` | 2 | `TypescriptCommentsService.extractComments`, `TypescriptCommentsService.findIndex(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-comments.service.ts:46` |
340
+ | `TypescriptCommentsService.extractComments` | 2 | `TypescriptCommentsService.visit`, `TypescriptCommentsService.toSorted(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-comments.service.ts:87` |
341
+ | `TypescriptNodesService.readExpressionStatementKey` | 2 | `TypescriptNodesService.buildDottedName`, `TypescriptNodesService.readLiteralKey` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:98` |
342
+ | `TypescriptNodesService.countSubtree` | 2 | `TypescriptNodesService.reduce(โ€ฆ)`, `TypescriptNodesService.readChildren` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:176` |
343
+ | `TypescriptTreeService.buildError` | 2 | `TypescriptNodesService.readKindLabel`, `TypescriptNodesService.countSubtree` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:43` |
344
+ | `TypescriptTreeService.compareBestCandidate` | 2 | `TypescriptTreeService.reduce(โ€ฆ)`, `TypescriptTreeService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:68` |
345
+ | `TypescriptService.validateComments` | 2 | `TypescriptCommentsService.compareComments`, `TypescriptService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript.service.ts:75` |
346
+ | `TypescriptService.validateStructure` | 2 | `TypescriptTreeService.compareTree`, `TypescriptService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript.service.ts:107` |
347
+ | `DifferencesService.resolveDifferenceType` | 1 | `DifferencesService.find(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/differences/differences.service.ts:78` |
348
+ | `DifferencesService.resolveErrorLanguage` | 1 | `DifferencesService.find(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/differences/differences.service.ts:91` |
349
+ | `FilesService.countExpectedFiles` | 1 | `FilesService.filter(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/files/files.service.ts:78` |
350
+ | `ScoringService.sumWeights` | 1 | `ScoringService.reduce(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/scoring/scoring.service.ts:53` |
351
+ | `JsonComparisonService.combine` | 1 | `JsonComparisonService.reduce(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:67` |
352
+ | `JsonComparisonService.map(โ€ฆ)` | 1 | `JsonComparisonService.compare` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:123` |
353
+ | `JsonComparisonService.map(โ€ฆ)` | 1 | `JsonComparisonService.compareArrayItem` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:149` |
354
+ | `JsonComparisonService.reduce(โ€ฆ)` | 1 | `JsonComparisonService.countNodes` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:210` |
355
+ | `JsonComparisonService.reduce(โ€ฆ)` | 1 | `JsonComparisonService.countNodes` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:216` |
356
+ | `JsonComparisonService.formatPath` | 1 | `JsonComparisonService.reduce(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:225` |
357
+ | `JsonComparisonService.pickClosestMatch` | 1 | `JsonComparisonService.reduce(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:254` |
358
+ | `JsonComparisonService.reduce(โ€ฆ)` | 1 | `ScoringService.sumWeights` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json-comparison.service.ts:255` |
359
+ | `JsonService.validateDocument` | 1 | `JsonComparisonService.compare` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/json/json.service.ts:39` |
360
+ | `JupyterNotebookService.readCellSource` | 1 | `JupyterNotebookService.filter(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter-notebook.service.ts:57` |
361
+ | `JupyterNotebookService.parseNotebook` | 1 | `JupyterNotebookService.filter(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter-notebook.service.ts:122` |
362
+ | `MarkdownNodesService.code` | 1 | `MarkdownNodesService.sameField` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:35` |
363
+ | `MarkdownNodesService.heading` | 1 | `MarkdownNodesService.readText` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:41` |
364
+ | `MarkdownNodesService.html` | 1 | `MarkdownNodesService.sameField` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:47` |
365
+ | `MarkdownNodesService.image` | 1 | `MarkdownNodesService.sameField` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:50` |
366
+ | `MarkdownNodesService.inlineCode` | 1 | `MarkdownNodesService.sameField` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:56` |
367
+ | `MarkdownNodesService.table` | 1 | `MarkdownNodesService.readColumnCount` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:68` |
368
+ | `MarkdownNodesService.tableRow` | 1 | `MarkdownNodesService.readChildren` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:74` |
369
+ | `MarkdownNodesService.text` | 1 | `MarkdownNodesService.sameField` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:80` |
370
+ | `MarkdownNodesService.readColumnCount` | 1 | `MarkdownNodesService.readChildren` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:91` |
371
+ | `MarkdownNodesService.reduce(โ€ฆ)` | 1 | `MarkdownNodesService.countSubtree` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:123` |
372
+ | `MarkdownNodesService.filterNodes` | 1 | `MarkdownNodesService.filter(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:129` |
373
+ | `MarkdownNodesService.matches` | 1 | `MarkdownNodesService.readText` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:140` |
374
+ | `MarkdownTreeService.reduce(โ€ฆ)` | 1 | `ScoringService.sumWeights` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:104` |
375
+ | `MarkdownTreeService.findCandidates` | 1 | `MarkdownTreeService.filter(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:135` |
376
+ | `MarkdownTreeService.filter(โ€ฆ)` | 1 | `MarkdownNodesService.matches` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:136` |
377
+ | `PythonBridgeService.readLocations` | 1 | `PythonBridgeService.readNumber` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:86` |
378
+ | `PythonBridgeService.readValues` | 1 | `PythonBridgeService.readString` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:123` |
379
+ | `PythonBridgeService.map(โ€ฆ)` | 1 | `PythonBridgeService.toConformetryDifference` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python-bridge.service.ts:187` |
380
+ | `PythonService.validateDocument` | 1 | `PythonBridgeService.validatePythonSource` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/python/python.service.ts:38` |
381
+ | `JupyterService.attributeToCell` | 1 | `JupyterService.map(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:52` |
382
+ | `JupyterService.weighMissingCell` | 1 | `JupyterService.validateCell` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:140` |
383
+ | `JupyterService.map(โ€ฆ)` | 1 | `JupyterService.weighMissingCell` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:173` |
384
+ | `JupyterService.map(โ€ฆ)` | 1 | `JupyterService.validateCell` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/jupyter/jupyter.service.ts:188` |
385
+ | `TextService.findMissingLines` | 1 | `TextService.countLines` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/text/text.service.ts:46` |
386
+ | `TypescriptNodesService.readDecoratorKey` | 1 | `TypescriptNodesService.buildDottedName` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:75` |
387
+ | `TypescriptNodesService.readNamedKey` | 1 | `TypescriptNodesService.isNode` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:143` |
388
+ | `TypescriptNodesService.reduce(โ€ฆ)` | 1 | `TypescriptNodesService.countSubtree` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:177` |
389
+ | `TypescriptNodesService.readChildren` | 1 | `TypescriptNodesService.forEachChild(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:183` |
390
+ | `TypescriptTreeService.map(โ€ฆ)` | 1 | `TypescriptTreeService.compareTree` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:73` |
391
+ | `TypescriptTreeService.reduce(โ€ฆ)` | 1 | `ScoringService.sumWeights` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:79` |
392
+ | `TypescriptTreeService.filter(โ€ฆ)` | 1 | `TypescriptNodesService.readKey` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:99` |
393
+ | `TypescriptTreeService.map(โ€ฆ)` | 1 | `TypescriptTreeService.compareChild` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:134` |
394
+ | `TypescriptService.map(โ€ฆ)` | 1 | `TypescriptService.readLocation` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript.service.ts:81` |
395
+ | `TypescriptService.map(โ€ฆ)` | 1 | `TypescriptService.readLocation` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/typescript/typescript.service.ts:116` |
396
+ | `LanguagesService.validateDocument` | 1 | `TextService.validateDocument` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/languages/languages.service.ts:80` |
397
+ | `LanguagesService.filter(โ€ฆ)` | 1 | `LanguagesService.some(โ€ฆ)` | `packages/ic-suite/conformetry/conformetry-languages/src/modules/languages/languages.service.ts:98` |
398
+
399
+ </details>
400
+ <!-- callidescope:end -->
401
+
402
+ ## ๐Ÿ•ธ๏ธ Codependix
403
+
404
+ 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`.
405
+
406
+ ### Nx Neighborhood
407
+
408
+ <!-- codependix:start name="codependix-nx-projects" -->
409
+ ```mermaid
410
+ graph LR
411
+ conformetry_configuration["conformetry-configuration"]
412
+ conformetry_core["conformetry-core"]
413
+ conformetry_languages["conformetry-languages"]
414
+ conformetry_output["conformetry-output"]
415
+ conformetry_validation["conformetry-validation"]
416
+ conformetry_languages --> conformetry_configuration
417
+ conformetry_languages --> conformetry_core
418
+ conformetry_output --> conformetry_languages
419
+ conformetry_validation --> conformetry_languages
420
+ classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
421
+ class conformetry_languages subject
422
+ ```
423
+ <!-- codependix:end name="codependix-nx-projects" -->
424
+
425
+ ### NestJS Module Graph
426
+
427
+ <!-- codependix:start name="codependix-nestjs-modules" -->
428
+ ```mermaid
429
+ flowchart LR
430
+ ConfigurationModule
431
+ DifferencesModule
432
+ FilesModule
433
+ InputModule
434
+ InstanceDiscoveryModule
435
+ InstanceGroupModule
436
+ JsonModule
437
+ JupyterModule
438
+ LanguagesModule
439
+ MarkdownModule
440
+ PythonModule
441
+ RenderingModule
442
+ ScoringModule
443
+ TemplateDiscoveryModule
444
+ TextModule
445
+ TypescriptModule
446
+ ConfigurationModule --> InputModule
447
+ ConfigurationModule --> InstanceDiscoveryModule
448
+ ConfigurationModule --> InstanceGroupModule
449
+ ConfigurationModule --> RenderingModule
450
+ ConfigurationModule --> TemplateDiscoveryModule
451
+ FilesModule --> ConfigurationModule
452
+ FilesModule --> DifferencesModule
453
+ InstanceDiscoveryModule --> InstanceGroupModule
454
+ InstanceDiscoveryModule --> RenderingModule
455
+ InstanceDiscoveryModule --> TemplateDiscoveryModule
456
+ JsonModule --> ScoringModule
457
+ JupyterModule --> JsonModule
458
+ JupyterModule --> MarkdownModule
459
+ JupyterModule --> PythonModule
460
+ LanguagesModule --> JsonModule
461
+ LanguagesModule --> JupyterModule
462
+ LanguagesModule --> MarkdownModule
463
+ LanguagesModule --> PythonModule
464
+ LanguagesModule --> TextModule
465
+ LanguagesModule --> TypescriptModule
466
+ MarkdownModule --> ScoringModule
467
+ PythonModule --> DifferencesModule
468
+ PythonModule --> ScoringModule
469
+ TemplateDiscoveryModule --> RenderingModule
470
+ TypescriptModule --> ScoringModule
471
+ ```
472
+ <!-- codependix:end name="codependix-nestjs-modules" -->
473
+
474
+ ### File Imports
475
+
476
+ <!-- codependix:start name="codependix-file-imports" -->
477
+ ```mermaid
478
+ graph LR
479
+ file_callidescope_config_ts["callidescope.config.ts"]
480
+ file_codependix_config_ts["codependix.config.ts"]
481
+ file_codometer_config_ts["codometer.config.ts"]
482
+ file_eslint_config_ts["eslint.config.ts"]
483
+ file_src_index_ts["src/index.ts"]
484
+ file_src_modules_differences_differences_constants_ts["src/modules/differences/differences.constants.ts"]
485
+ file_src_modules_differences_differences_module_ts["src/modules/differences/differences.module.ts"]
486
+ file_src_modules_differences_differences_module_unit_test_ts["src/modules/differences/differences.module.unit.test.ts"]
487
+ file_src_modules_differences_differences_service_ts["src/modules/differences/differences.service.ts"]
488
+ file_src_modules_differences_differences_service_unit_test_ts["src/modules/differences/differences.service.unit.test.ts"]
489
+ file_src_modules_differences_differences_types_ts["src/modules/differences/differences.types.ts"]
490
+ file_src_modules_files_files_constants_ts["src/modules/files/files.constants.ts"]
491
+ file_src_modules_files_files_module_ts["src/modules/files/files.module.ts"]
492
+ file_src_modules_files_files_module_unit_test_ts["src/modules/files/files.module.unit.test.ts"]
493
+ file_src_modules_files_files_service_ts["src/modules/files/files.service.ts"]
494
+ file_src_modules_files_files_service_unit_test_ts["src/modules/files/files.service.unit.test.ts"]
495
+ file_src_modules_files_files_types_ts["src/modules/files/files.types.ts"]
496
+ file_src_modules_json_json_comparison_service_ts["src/modules/json/json-comparison.service.ts"]
497
+ file_src_modules_json_json_comparison_service_unit_test_ts["src/modules/json/json-comparison.service.unit.test.ts"]
498
+ file_src_modules_json_json_constants_ts["src/modules/json/json.constants.ts"]
499
+ file_src_modules_json_json_module_ts["src/modules/json/json.module.ts"]
500
+ file_src_modules_json_json_module_unit_test_ts["src/modules/json/json.module.unit.test.ts"]
501
+ file_src_modules_json_json_service_ts["src/modules/json/json.service.ts"]
502
+ file_src_modules_json_json_service_unit_test_ts["src/modules/json/json.service.unit.test.ts"]
503
+ file_src_modules_json_json_types_ts["src/modules/json/json.types.ts"]
504
+ file_src_modules_jupyter_jupyter_notebook_service_ts["src/modules/jupyter/jupyter-notebook.service.ts"]
505
+ file_src_modules_jupyter_jupyter_notebook_service_unit_test_ts["src/modules/jupyter/jupyter-notebook.service.unit.test.ts"]
506
+ file_src_modules_jupyter_jupyter_constants_ts["src/modules/jupyter/jupyter.constants.ts"]
507
+ file_src_modules_jupyter_jupyter_module_ts["src/modules/jupyter/jupyter.module.ts"]
508
+ file_src_modules_jupyter_jupyter_module_unit_test_ts["src/modules/jupyter/jupyter.module.unit.test.ts"]
509
+ file_src_modules_jupyter_jupyter_service_ts["src/modules/jupyter/jupyter.service.ts"]
510
+ file_src_modules_jupyter_jupyter_service_unit_test_ts["src/modules/jupyter/jupyter.service.unit.test.ts"]
511
+ file_src_modules_jupyter_jupyter_types_ts["src/modules/jupyter/jupyter.types.ts"]
512
+ file_src_modules_languages_languages_constants_ts["src/modules/languages/languages.constants.ts"]
513
+ file_src_modules_languages_languages_module_ts["src/modules/languages/languages.module.ts"]
514
+ file_src_modules_languages_languages_module_unit_test_ts["src/modules/languages/languages.module.unit.test.ts"]
515
+ file_src_modules_languages_languages_service_ts["src/modules/languages/languages.service.ts"]
516
+ file_src_modules_languages_languages_service_unit_test_ts["src/modules/languages/languages.service.unit.test.ts"]
517
+ file_src_modules_languages_languages_types_ts["src/modules/languages/languages.types.ts"]
518
+ file_src_modules_markdown_markdown_nodes_service_ts["src/modules/markdown/markdown-nodes.service.ts"]
519
+ file_src_modules_markdown_markdown_nodes_service_unit_test_ts["src/modules/markdown/markdown-nodes.service.unit.test.ts"]
520
+ file_src_modules_markdown_markdown_tree_service_ts["src/modules/markdown/markdown-tree.service.ts"]
521
+ file_src_modules_markdown_markdown_tree_service_unit_test_ts["src/modules/markdown/markdown-tree.service.unit.test.ts"]
522
+ file_src_modules_markdown_markdown_constants_ts["src/modules/markdown/markdown.constants.ts"]
523
+ file_src_modules_markdown_markdown_module_ts["src/modules/markdown/markdown.module.ts"]
524
+ file_src_modules_markdown_markdown_module_unit_test_ts["src/modules/markdown/markdown.module.unit.test.ts"]
525
+ file_src_modules_markdown_markdown_service_ts["src/modules/markdown/markdown.service.ts"]
526
+ file_src_modules_markdown_markdown_service_unit_test_ts["src/modules/markdown/markdown.service.unit.test.ts"]
527
+ file_src_modules_markdown_markdown_types_ts["src/modules/markdown/markdown.types.ts"]
528
+ file_src_modules_python_python_bridge_service_ts["src/modules/python/python-bridge.service.ts"]
529
+ file_src_modules_python_python_bridge_service_unit_test_ts["src/modules/python/python-bridge.service.unit.test.ts"]
530
+ file_src_modules_python_python_constants_ts["src/modules/python/python.constants.ts"]
531
+ file_src_modules_python_python_module_ts["src/modules/python/python.module.ts"]
532
+ file_src_modules_python_python_module_unit_test_ts["src/modules/python/python.module.unit.test.ts"]
533
+ file_src_modules_python_python_service_ts["src/modules/python/python.service.ts"]
534
+ file_src_modules_python_python_service_unit_test_ts["src/modules/python/python.service.unit.test.ts"]
535
+ file_src_modules_python_python_types_ts["src/modules/python/python.types.ts"]
536
+ file_src_modules_scoring_scoring_constants_ts["src/modules/scoring/scoring.constants.ts"]
537
+ file_src_modules_scoring_scoring_module_ts["src/modules/scoring/scoring.module.ts"]
538
+ file_src_modules_scoring_scoring_module_unit_test_ts["src/modules/scoring/scoring.module.unit.test.ts"]
539
+ file_src_modules_scoring_scoring_service_ts["src/modules/scoring/scoring.service.ts"]
540
+ file_src_modules_scoring_scoring_service_unit_test_ts["src/modules/scoring/scoring.service.unit.test.ts"]
541
+ file_src_modules_scoring_scoring_types_ts["src/modules/scoring/scoring.types.ts"]
542
+ file_src_modules_text_text_constants_ts["src/modules/text/text.constants.ts"]
543
+ file_src_modules_text_text_module_ts["src/modules/text/text.module.ts"]
544
+ file_src_modules_text_text_module_unit_test_ts["src/modules/text/text.module.unit.test.ts"]
545
+ file_src_modules_text_text_service_ts["src/modules/text/text.service.ts"]
546
+ file_src_modules_text_text_service_unit_test_ts["src/modules/text/text.service.unit.test.ts"]
547
+ file_src_modules_text_text_types_ts["src/modules/text/text.types.ts"]
548
+ file_src_modules_typescript_typescript_comments_service_ts["src/modules/typescript/typescript-comments.service.ts"]
549
+ file_src_modules_typescript_typescript_comments_service_unit_test_ts["src/modules/typescript/typescript-comments.service.unit.test.ts"]
550
+ file_src_modules_typescript_typescript_nodes_service_ts["src/modules/typescript/typescript-nodes.service.ts"]
551
+ file_src_modules_typescript_typescript_nodes_service_unit_test_ts["src/modules/typescript/typescript-nodes.service.unit.test.ts"]
552
+ file_src_modules_typescript_typescript_tree_service_ts["src/modules/typescript/typescript-tree.service.ts"]
553
+ file_src_modules_typescript_typescript_tree_service_unit_test_ts["src/modules/typescript/typescript-tree.service.unit.test.ts"]
554
+ file_src_modules_typescript_typescript_constants_ts["src/modules/typescript/typescript.constants.ts"]
555
+ file_src_modules_typescript_typescript_module_ts["src/modules/typescript/typescript.module.ts"]
556
+ file_src_modules_typescript_typescript_module_unit_test_ts["src/modules/typescript/typescript.module.unit.test.ts"]
557
+ file_src_modules_typescript_typescript_service_ts["src/modules/typescript/typescript.service.ts"]
558
+ file_src_modules_typescript_typescript_service_unit_test_ts["src/modules/typescript/typescript.service.unit.test.ts"]
559
+ file_src_modules_typescript_typescript_types_ts["src/modules/typescript/typescript.types.ts"]
560
+ file_testing_mocks_ts["testing/mocks.ts"]
561
+ file_testing_setup_ts["testing/setup.ts"]
562
+ file_vite_config_ts["vite.config.ts"]
563
+ file_vitest_config_ts["vitest.config.ts"]
564
+ file_src_modules_differences_differences_module_ts --> file_src_modules_differences_differences_service_ts
565
+ file_src_modules_differences_differences_module_unit_test_ts --> file_src_modules_differences_differences_module_ts
566
+ file_src_modules_differences_differences_module_unit_test_ts --> file_src_modules_differences_differences_service_ts
567
+ file_src_modules_differences_differences_service_ts --> file_src_modules_differences_differences_constants_ts
568
+ file_src_modules_differences_differences_service_ts --> file_src_modules_differences_differences_types_ts
569
+ file_src_modules_differences_differences_service_unit_test_ts --> file_src_modules_differences_differences_service_ts
570
+ file_src_modules_files_files_module_ts --> file_src_modules_differences_differences_module_ts
571
+ file_src_modules_files_files_module_ts --> file_src_modules_files_files_service_ts
572
+ file_src_modules_files_files_module_unit_test_ts --> file_src_modules_files_files_module_ts
573
+ file_src_modules_files_files_module_unit_test_ts --> file_src_modules_files_files_service_ts
574
+ file_src_modules_files_files_service_ts --> file_src_modules_differences_differences_service_ts
575
+ file_src_modules_files_files_service_ts --> file_src_modules_files_files_types_ts
576
+ file_src_modules_files_files_service_unit_test_ts --> file_src_modules_differences_differences_module_ts
577
+ file_src_modules_files_files_service_unit_test_ts --> file_src_modules_files_files_service_ts
578
+ file_src_modules_json_json_comparison_service_ts --> file_src_modules_json_json_types_ts
579
+ file_src_modules_json_json_comparison_service_ts --> file_src_modules_scoring_scoring_service_ts
580
+ file_src_modules_json_json_comparison_service_unit_test_ts --> file_src_modules_json_json_comparison_service_ts
581
+ file_src_modules_json_json_comparison_service_unit_test_ts --> file_src_modules_json_json_types_ts
582
+ file_src_modules_json_json_comparison_service_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
583
+ file_src_modules_json_json_module_ts --> file_src_modules_json_json_comparison_service_ts
584
+ file_src_modules_json_json_module_ts --> file_src_modules_json_json_service_ts
585
+ file_src_modules_json_json_module_ts --> file_src_modules_scoring_scoring_module_ts
586
+ file_src_modules_json_json_module_unit_test_ts --> file_src_modules_json_json_module_ts
587
+ file_src_modules_json_json_module_unit_test_ts --> file_src_modules_json_json_service_ts
588
+ file_src_modules_json_json_service_ts --> file_src_modules_json_json_comparison_service_ts
589
+ file_src_modules_json_json_service_ts --> file_src_modules_json_json_constants_ts
590
+ file_src_modules_json_json_service_ts --> file_src_modules_json_json_types_ts
591
+ file_src_modules_json_json_service_unit_test_ts --> file_src_modules_json_json_comparison_service_ts
592
+ file_src_modules_json_json_service_unit_test_ts --> file_src_modules_json_json_service_ts
593
+ file_src_modules_json_json_service_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
594
+ file_src_modules_jupyter_jupyter_notebook_service_ts --> file_src_modules_jupyter_jupyter_types_ts
595
+ file_src_modules_jupyter_jupyter_notebook_service_unit_test_ts --> file_src_modules_jupyter_jupyter_notebook_service_ts
596
+ file_src_modules_jupyter_jupyter_module_ts --> file_src_modules_json_json_module_ts
597
+ file_src_modules_jupyter_jupyter_module_ts --> file_src_modules_jupyter_jupyter_notebook_service_ts
598
+ file_src_modules_jupyter_jupyter_module_ts --> file_src_modules_jupyter_jupyter_service_ts
599
+ file_src_modules_jupyter_jupyter_module_ts --> file_src_modules_markdown_markdown_module_ts
600
+ file_src_modules_jupyter_jupyter_module_ts --> file_src_modules_python_python_module_ts
601
+ file_src_modules_jupyter_jupyter_module_unit_test_ts --> file_src_modules_jupyter_jupyter_module_ts
602
+ file_src_modules_jupyter_jupyter_module_unit_test_ts --> file_src_modules_jupyter_jupyter_service_ts
603
+ file_src_modules_jupyter_jupyter_service_ts --> file_src_modules_json_json_comparison_service_ts
604
+ file_src_modules_jupyter_jupyter_service_ts --> file_src_modules_json_json_types_ts
605
+ file_src_modules_jupyter_jupyter_service_ts --> file_src_modules_jupyter_jupyter_notebook_service_ts
606
+ file_src_modules_jupyter_jupyter_service_ts --> file_src_modules_jupyter_jupyter_constants_ts
607
+ file_src_modules_jupyter_jupyter_service_ts --> file_src_modules_jupyter_jupyter_types_ts
608
+ file_src_modules_jupyter_jupyter_service_ts --> file_src_modules_markdown_markdown_service_ts
609
+ file_src_modules_jupyter_jupyter_service_ts --> file_src_modules_python_python_bridge_service_ts
610
+ file_src_modules_jupyter_jupyter_service_unit_test_ts --> file_src_modules_differences_differences_service_ts
611
+ file_src_modules_jupyter_jupyter_service_unit_test_ts --> file_src_modules_json_json_comparison_service_ts
612
+ file_src_modules_jupyter_jupyter_service_unit_test_ts --> file_src_modules_jupyter_jupyter_notebook_service_ts
613
+ file_src_modules_jupyter_jupyter_service_unit_test_ts --> file_src_modules_jupyter_jupyter_service_ts
614
+ file_src_modules_jupyter_jupyter_service_unit_test_ts --> file_src_modules_markdown_markdown_nodes_service_ts
615
+ file_src_modules_jupyter_jupyter_service_unit_test_ts --> file_src_modules_markdown_markdown_tree_service_ts
616
+ file_src_modules_jupyter_jupyter_service_unit_test_ts --> file_src_modules_markdown_markdown_service_ts
617
+ file_src_modules_jupyter_jupyter_service_unit_test_ts --> file_src_modules_python_python_bridge_service_ts
618
+ file_src_modules_jupyter_jupyter_service_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
619
+ file_src_modules_languages_languages_module_ts --> file_src_modules_json_json_module_ts
620
+ file_src_modules_languages_languages_module_ts --> file_src_modules_jupyter_jupyter_module_ts
621
+ file_src_modules_languages_languages_module_ts --> file_src_modules_languages_languages_service_ts
622
+ file_src_modules_languages_languages_module_ts --> file_src_modules_markdown_markdown_module_ts
623
+ file_src_modules_languages_languages_module_ts --> file_src_modules_python_python_module_ts
624
+ file_src_modules_languages_languages_module_ts --> file_src_modules_text_text_module_ts
625
+ file_src_modules_languages_languages_module_ts --> file_src_modules_typescript_typescript_module_ts
626
+ file_src_modules_languages_languages_module_unit_test_ts --> file_src_modules_json_json_module_ts
627
+ file_src_modules_languages_languages_module_unit_test_ts --> file_src_modules_jupyter_jupyter_module_ts
628
+ file_src_modules_languages_languages_module_unit_test_ts --> file_src_modules_languages_languages_module_ts
629
+ file_src_modules_languages_languages_module_unit_test_ts --> file_src_modules_languages_languages_service_ts
630
+ file_src_modules_languages_languages_module_unit_test_ts --> file_src_modules_markdown_markdown_module_ts
631
+ file_src_modules_languages_languages_module_unit_test_ts --> file_src_modules_python_python_module_ts
632
+ file_src_modules_languages_languages_module_unit_test_ts --> file_src_modules_text_text_module_ts
633
+ file_src_modules_languages_languages_module_unit_test_ts --> file_src_modules_typescript_typescript_module_ts
634
+ file_src_modules_languages_languages_service_ts --> file_src_modules_json_json_service_ts
635
+ file_src_modules_languages_languages_service_ts --> file_src_modules_jupyter_jupyter_service_ts
636
+ file_src_modules_languages_languages_service_ts --> file_src_modules_languages_languages_types_ts
637
+ file_src_modules_languages_languages_service_ts --> file_src_modules_markdown_markdown_service_ts
638
+ file_src_modules_languages_languages_service_ts --> file_src_modules_python_python_service_ts
639
+ file_src_modules_languages_languages_service_ts --> file_src_modules_text_text_service_ts
640
+ file_src_modules_languages_languages_service_ts --> file_src_modules_typescript_typescript_service_ts
641
+ file_src_modules_languages_languages_service_unit_test_ts --> file_src_modules_languages_languages_module_ts
642
+ file_src_modules_languages_languages_service_unit_test_ts --> file_src_modules_languages_languages_service_ts
643
+ file_src_modules_markdown_markdown_nodes_service_ts --> file_src_modules_markdown_markdown_constants_ts
644
+ file_src_modules_markdown_markdown_nodes_service_ts --> file_src_modules_markdown_markdown_types_ts
645
+ file_src_modules_markdown_markdown_nodes_service_unit_test_ts --> file_src_modules_markdown_markdown_nodes_service_ts
646
+ file_src_modules_markdown_markdown_nodes_service_unit_test_ts --> file_src_modules_markdown_markdown_types_ts
647
+ file_src_modules_markdown_markdown_tree_service_ts --> file_src_modules_markdown_markdown_nodes_service_ts
648
+ file_src_modules_markdown_markdown_tree_service_ts --> file_src_modules_markdown_markdown_constants_ts
649
+ file_src_modules_markdown_markdown_tree_service_ts --> file_src_modules_markdown_markdown_types_ts
650
+ file_src_modules_markdown_markdown_tree_service_ts --> file_src_modules_scoring_scoring_service_ts
651
+ file_src_modules_markdown_markdown_tree_service_unit_test_ts --> file_src_modules_markdown_markdown_nodes_service_ts
652
+ file_src_modules_markdown_markdown_tree_service_unit_test_ts --> file_src_modules_markdown_markdown_tree_service_ts
653
+ file_src_modules_markdown_markdown_tree_service_unit_test_ts --> file_src_modules_markdown_markdown_types_ts
654
+ file_src_modules_markdown_markdown_tree_service_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
655
+ file_src_modules_markdown_markdown_module_ts --> file_src_modules_markdown_markdown_nodes_service_ts
656
+ file_src_modules_markdown_markdown_module_ts --> file_src_modules_markdown_markdown_tree_service_ts
657
+ file_src_modules_markdown_markdown_module_ts --> file_src_modules_markdown_markdown_service_ts
658
+ file_src_modules_markdown_markdown_module_ts --> file_src_modules_scoring_scoring_module_ts
659
+ file_src_modules_markdown_markdown_module_unit_test_ts --> file_src_modules_markdown_markdown_module_ts
660
+ file_src_modules_markdown_markdown_module_unit_test_ts --> file_src_modules_markdown_markdown_service_ts
661
+ file_src_modules_markdown_markdown_service_ts --> file_src_modules_markdown_markdown_nodes_service_ts
662
+ file_src_modules_markdown_markdown_service_ts --> file_src_modules_markdown_markdown_tree_service_ts
663
+ file_src_modules_markdown_markdown_service_ts --> file_src_modules_markdown_markdown_constants_ts
664
+ file_src_modules_markdown_markdown_service_unit_test_ts --> file_src_modules_markdown_markdown_nodes_service_ts
665
+ file_src_modules_markdown_markdown_service_unit_test_ts --> file_src_modules_markdown_markdown_tree_service_ts
666
+ file_src_modules_markdown_markdown_service_unit_test_ts --> file_src_modules_markdown_markdown_service_ts
667
+ file_src_modules_markdown_markdown_service_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
668
+ file_src_modules_python_python_bridge_service_ts --> file_src_modules_differences_differences_service_ts
669
+ file_src_modules_python_python_bridge_service_ts --> file_src_modules_python_python_constants_ts
670
+ file_src_modules_python_python_bridge_service_ts --> file_src_modules_python_python_types_ts
671
+ file_src_modules_python_python_bridge_service_ts --> file_src_modules_scoring_scoring_service_ts
672
+ file_src_modules_python_python_bridge_service_unit_test_ts --> file_src_modules_differences_differences_module_ts
673
+ file_src_modules_python_python_bridge_service_unit_test_ts --> file_src_modules_python_python_bridge_service_ts
674
+ file_src_modules_python_python_bridge_service_unit_test_ts --> file_src_modules_scoring_scoring_module_ts
675
+ file_src_modules_python_python_module_ts --> file_src_modules_differences_differences_module_ts
676
+ file_src_modules_python_python_module_ts --> file_src_modules_python_python_bridge_service_ts
677
+ file_src_modules_python_python_module_ts --> file_src_modules_python_python_service_ts
678
+ file_src_modules_python_python_module_ts --> file_src_modules_scoring_scoring_module_ts
679
+ file_src_modules_python_python_module_unit_test_ts --> file_src_modules_python_python_module_ts
680
+ file_src_modules_python_python_module_unit_test_ts --> file_src_modules_python_python_service_ts
681
+ file_src_modules_python_python_service_ts --> file_src_modules_python_python_bridge_service_ts
682
+ file_src_modules_python_python_service_ts --> file_src_modules_python_python_constants_ts
683
+ file_src_modules_python_python_service_unit_test_ts --> file_src_modules_differences_differences_service_ts
684
+ file_src_modules_python_python_service_unit_test_ts --> file_src_modules_python_python_bridge_service_ts
685
+ file_src_modules_python_python_service_unit_test_ts --> file_src_modules_python_python_service_ts
686
+ file_src_modules_python_python_service_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
687
+ file_src_modules_scoring_scoring_module_ts --> file_src_modules_scoring_scoring_service_ts
688
+ file_src_modules_scoring_scoring_module_unit_test_ts --> file_src_modules_scoring_scoring_module_ts
689
+ file_src_modules_scoring_scoring_module_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
690
+ file_src_modules_scoring_scoring_service_ts --> file_src_modules_scoring_scoring_constants_ts
691
+ file_src_modules_scoring_scoring_service_ts --> file_src_modules_scoring_scoring_types_ts
692
+ file_src_modules_scoring_scoring_service_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
693
+ file_src_modules_text_text_module_ts --> file_src_modules_text_text_service_ts
694
+ file_src_modules_text_text_module_unit_test_ts --> file_src_modules_text_text_module_ts
695
+ file_src_modules_text_text_module_unit_test_ts --> file_src_modules_text_text_service_ts
696
+ file_src_modules_text_text_service_ts --> file_src_modules_text_text_constants_ts
697
+ file_src_modules_text_text_service_ts --> file_src_modules_text_text_types_ts
698
+ file_src_modules_text_text_service_unit_test_ts --> file_src_modules_text_text_service_ts
699
+ file_src_modules_typescript_typescript_comments_service_ts --> file_src_modules_typescript_typescript_constants_ts
700
+ file_src_modules_typescript_typescript_comments_service_ts --> file_src_modules_typescript_typescript_types_ts
701
+ file_src_modules_typescript_typescript_comments_service_unit_test_ts --> file_src_modules_typescript_typescript_comments_service_ts
702
+ file_src_modules_typescript_typescript_nodes_service_unit_test_ts --> file_src_modules_typescript_typescript_nodes_service_ts
703
+ file_src_modules_typescript_typescript_tree_service_ts --> file_src_modules_scoring_scoring_service_ts
704
+ file_src_modules_typescript_typescript_tree_service_ts --> file_src_modules_typescript_typescript_nodes_service_ts
705
+ file_src_modules_typescript_typescript_tree_service_ts --> file_src_modules_typescript_typescript_types_ts
706
+ file_src_modules_typescript_typescript_tree_service_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
707
+ file_src_modules_typescript_typescript_tree_service_unit_test_ts --> file_src_modules_typescript_typescript_nodes_service_ts
708
+ file_src_modules_typescript_typescript_tree_service_unit_test_ts --> file_src_modules_typescript_typescript_tree_service_ts
709
+ file_src_modules_typescript_typescript_module_ts --> file_src_modules_scoring_scoring_module_ts
710
+ file_src_modules_typescript_typescript_module_ts --> file_src_modules_typescript_typescript_comments_service_ts
711
+ file_src_modules_typescript_typescript_module_ts --> file_src_modules_typescript_typescript_nodes_service_ts
712
+ file_src_modules_typescript_typescript_module_ts --> file_src_modules_typescript_typescript_tree_service_ts
713
+ file_src_modules_typescript_typescript_module_ts --> file_src_modules_typescript_typescript_service_ts
714
+ file_src_modules_typescript_typescript_module_unit_test_ts --> file_src_modules_typescript_typescript_module_ts
715
+ file_src_modules_typescript_typescript_module_unit_test_ts --> file_src_modules_typescript_typescript_service_ts
716
+ file_src_modules_typescript_typescript_service_ts --> file_src_modules_typescript_typescript_comments_service_ts
717
+ file_src_modules_typescript_typescript_service_ts --> file_src_modules_typescript_typescript_tree_service_ts
718
+ file_src_modules_typescript_typescript_service_ts --> file_src_modules_typescript_typescript_constants_ts
719
+ file_src_modules_typescript_typescript_service_unit_test_ts --> file_src_modules_scoring_scoring_service_ts
720
+ file_src_modules_typescript_typescript_service_unit_test_ts --> file_src_modules_typescript_typescript_comments_service_ts
721
+ file_src_modules_typescript_typescript_service_unit_test_ts --> file_src_modules_typescript_typescript_nodes_service_ts
722
+ file_src_modules_typescript_typescript_service_unit_test_ts --> file_src_modules_typescript_typescript_tree_service_ts
723
+ file_src_modules_typescript_typescript_service_unit_test_ts --> file_src_modules_typescript_typescript_service_ts
724
+ ```
725
+ <!-- codependix:end name="codependix-file-imports" -->
726
+
727
+ <!-- codometer:start -->
728
+
729
+ ## โฒ๏ธ Codometer
730
+
731
+ ### Project
732
+
733
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-7192-22c55e?style=flat-square)
734
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-234.74_kB-6b7280?style=flat-square)
735
+ ![Folders](https://img.shields.io/badge/Folders-14-4a4a4a?style=flat-square)
736
+ ![Source Files](https://img.shields.io/badge/Source_Files-93-3178c6?style=flat-square)
737
+
738
+ ### Measured Targets
739
+
740
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-8.39_kB_gzip-6b7280?style=flat-square)
741
+
742
+ ### TypeScript
743
+
744
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-85-3178c6?style=flat-square)
745
+ ![Interfaces](https://img.shields.io/badge/Interfaces-29-0ea5e9?style=flat-square)
746
+ ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
747
+ ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
748
+ ![Decorators](https://img.shields.io/badge/Decorators-28-db2777?style=flat-square)
749
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-181-6366f1?style=flat-square)
750
+ ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
751
+
752
+ ### JavaScript
753
+
754
+ ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-0-f7df1e?style=flat-square)
755
+ ![Test Files](https://img.shields.io/badge/Test_Files-28-10b981?style=flat-square)
756
+ ![External Packages](https://img.shields.io/badge/External_Packages-17-8b5cf6?style=flat-square)
757
+ ![Classes](https://img.shields.io/badge/Classes-28-7c3aed?style=flat-square)
758
+ ![Functions](https://img.shields.io/badge/Functions-358-16a34a?style=flat-square)
759
+ ![Methods](https://img.shields.io/badge/Methods-141-15803d?style=flat-square)
760
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-472-4ade80?style=flat-square)
761
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-27-059669?style=flat-square)
762
+ ![Constants](https://img.shields.io/badge/Constants-328-dc2626?style=flat-square)
763
+ ![Imports](https://img.shields.io/badge/Imports-318-0284c7?style=flat-square)
764
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-89-ea580c?style=flat-square)
765
+ ![Comments](https://img.shields.io/badge/Comments-352-64748b?style=flat-square)
766
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-766-475569?style=flat-square)
767
+ ![TODO Comments](https://img.shields.io/badge/TODO_Comments-5-ca8a04?style=flat-square)
768
+
769
+ ### Python
770
+
771
+ ![Python Files](https://img.shields.io/badge/Python_Files-8-3776ab?style=flat-square)
772
+ ![Python Lines](https://img.shields.io/badge/Python_Lines-405-4b8bbe?style=flat-square)
773
+ ![Python Classes](https://img.shields.io/badge/Python_Classes-3-7c3aed?style=flat-square)
774
+ ![Python Functions](https://img.shields.io/badge/Python_Functions-19-16a34a?style=flat-square)
775
+ ![Python Protocols](https://img.shields.io/badge/Python_Protocols-0-0ea5e9?style=flat-square)
776
+ ![Python Constants](https://img.shields.io/badge/Python_Constants-1-dc2626?style=flat-square)
777
+ ![Python Imports](https://img.shields.io/badge/Python_Imports-21-0284c7?style=flat-square)
778
+ ![Python Decorators](https://img.shields.io/badge/Python_Decorators-2-db2777?style=flat-square)
779
+ ![Docstrings](https://img.shields.io/badge/Docstrings-18-6366f1?style=flat-square)
780
+ ![Docstring Lines](https://img.shields.io/badge/Docstring_Lines-44-818cf8?style=flat-square)
781
+ ![Python Comments](https://img.shields.io/badge/Python_Comments-7-64748b?style=flat-square)
782
+ ![Python Comment Lines](https://img.shields.io/badge/Python_Comment_Lines-7-475569?style=flat-square)
783
+
784
+ ### JSON
785
+
786
+ ![JSON Files](https://img.shields.io/badge/JSON_Files-4-a16207?style=flat-square)
787
+ ![JSON Lines](https://img.shields.io/badge/JSON_Lines-170-ca8a04?style=flat-square)
788
+ ![JSON Objects](https://img.shields.io/badge/JSON_Objects-38-7c3aed?style=flat-square)
789
+ ![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-13-8b5cf6?style=flat-square)
790
+ ![JSON Properties](https://img.shields.io/badge/JSON_Properties-105-0284c7?style=flat-square)
791
+ ![JSON Strings](https://img.shields.io/badge/JSON_Strings-95-16a34a?style=flat-square)
792
+ ![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-1-059669?style=flat-square)
793
+ ![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-7-0ea5e9?style=flat-square)
794
+ ![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
795
+ ![JSON Items](https://img.shields.io/badge/JSON_Items-45-475569?style=flat-square)
796
+ ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-154-dc2626?style=flat-square)
797
+ ![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-5-ea580c?style=flat-square)
798
+
799
+ ### YAML
800
+
801
+ ![YAML Files](https://img.shields.io/badge/YAML_Files-0-cb171e?style=flat-square)
802
+ ![YAML Lines](https://img.shields.io/badge/YAML_Lines-0-e34c26?style=flat-square)
803
+ ![YAML Documents](https://img.shields.io/badge/YAML_Documents-0-f97316?style=flat-square)
804
+ ![YAML Mappings](https://img.shields.io/badge/YAML_Mappings-0-7c3aed?style=flat-square)
805
+ ![YAML Sequences](https://img.shields.io/badge/YAML_Sequences-0-8b5cf6?style=flat-square)
806
+ ![YAML Keys](https://img.shields.io/badge/YAML_Keys-0-0284c7?style=flat-square)
807
+ ![YAML Scalars](https://img.shields.io/badge/YAML_Scalars-0-16a34a?style=flat-square)
808
+ ![YAML Anchors](https://img.shields.io/badge/YAML_Anchors-0-059669?style=flat-square)
809
+ ![YAML Aliases](https://img.shields.io/badge/YAML_Aliases-0-10b981?style=flat-square)
810
+ ![YAML Comments](https://img.shields.io/badge/YAML_Comments-0-64748b?style=flat-square)
811
+ ![YAML Max Depth](https://img.shields.io/badge/YAML_Max_Depth-0-ea580c?style=flat-square)
812
+
813
+ ### TOML
814
+
815
+ ![TOML Files](https://img.shields.io/badge/TOML_Files-0-9c4221?style=flat-square)
816
+ ![TOML Lines](https://img.shields.io/badge/TOML_Lines-0-b45309?style=flat-square)
817
+ ![TOML Tables](https://img.shields.io/badge/TOML_Tables-0-7c3aed?style=flat-square)
818
+ ![TOML Array Tables](https://img.shields.io/badge/TOML_Array_Tables-0-8b5cf6?style=flat-square)
819
+ ![TOML Keys](https://img.shields.io/badge/TOML_Keys-0-0284c7?style=flat-square)
820
+ ![TOML Arrays](https://img.shields.io/badge/TOML_Arrays-0-16a34a?style=flat-square)
821
+ ![TOML Comments](https://img.shields.io/badge/TOML_Comments-0-64748b?style=flat-square)
822
+
823
+ ### Shell
824
+
825
+ ![Shell Files](https://img.shields.io/badge/Shell_Files-0-89e051?style=flat-square)
826
+ ![Shell Lines](https://img.shields.io/badge/Shell_Lines-0-4eaa25?style=flat-square)
827
+ ![Shell Functions](https://img.shields.io/badge/Shell_Functions-0-16a34a?style=flat-square)
828
+ ![Shell Variables](https://img.shields.io/badge/Shell_Variables-0-0284c7?style=flat-square)
829
+ ![Shell Exports](https://img.shields.io/badge/Shell_Exports-0-ea580c?style=flat-square)
830
+ ![Shell Conditionals](https://img.shields.io/badge/Shell_Conditionals-0-7c3aed?style=flat-square)
831
+ ![Shell Loops](https://img.shields.io/badge/Shell_Loops-0-8b5cf6?style=flat-square)
832
+ ![Shell Pipelines](https://img.shields.io/badge/Shell_Pipelines-0-059669?style=flat-square)
833
+ ![Shebangs](https://img.shields.io/badge/Shebangs-0-6b7280?style=flat-square)
834
+ ![Shell Comments](https://img.shields.io/badge/Shell_Comments-0-64748b?style=flat-square)
835
+ ![Shell Comment Lines](https://img.shields.io/badge/Shell_Comment_Lines-0-475569?style=flat-square)
836
+
837
+ ### SQL
838
+
839
+ ![SQL Files](https://img.shields.io/badge/SQL_Files-0-e38c00?style=flat-square)
840
+ ![SQL Lines](https://img.shields.io/badge/SQL_Lines-0-f29111?style=flat-square)
841
+ ![SQL Statements](https://img.shields.io/badge/SQL_Statements-0-7c3aed?style=flat-square)
842
+ ![SQL Selects](https://img.shields.io/badge/SQL_Selects-0-16a34a?style=flat-square)
843
+ ![SQL Inserts](https://img.shields.io/badge/SQL_Inserts-0-22c55e?style=flat-square)
844
+ ![SQL Updates](https://img.shields.io/badge/SQL_Updates-0-0ea5e9?style=flat-square)
845
+ ![SQL Deletes](https://img.shields.io/badge/SQL_Deletes-0-dc2626?style=flat-square)
846
+ ![SQL Creates](https://img.shields.io/badge/SQL_Creates-0-0284c7?style=flat-square)
847
+ ![SQL Joins](https://img.shields.io/badge/SQL_Joins-0-8b5cf6?style=flat-square)
848
+ ![SQL CTEs](https://img.shields.io/badge/SQL_CTEs-0-059669?style=flat-square)
849
+ ![SQL Comments](https://img.shields.io/badge/SQL_Comments-0-64748b?style=flat-square)
850
+
851
+ ### HCL
852
+
853
+ ![HCL Files](https://img.shields.io/badge/HCL_Files-0-844fba?style=flat-square)
854
+ ![HCL Lines](https://img.shields.io/badge/HCL_Lines-0-a78bfa?style=flat-square)
855
+ ![HCL Blocks](https://img.shields.io/badge/HCL_Blocks-0-7c3aed?style=flat-square)
856
+ ![HCL Resources](https://img.shields.io/badge/HCL_Resources-0-0284c7?style=flat-square)
857
+ ![HCL Variables](https://img.shields.io/badge/HCL_Variables-0-16a34a?style=flat-square)
858
+ ![HCL Outputs](https://img.shields.io/badge/HCL_Outputs-0-059669?style=flat-square)
859
+ ![HCL Attributes](https://img.shields.io/badge/HCL_Attributes-0-0ea5e9?style=flat-square)
860
+ ![HCL Interpolations](https://img.shields.io/badge/HCL_Interpolations-0-db2777?style=flat-square)
861
+ ![HCL Comments](https://img.shields.io/badge/HCL_Comments-0-64748b?style=flat-square)
862
+
863
+ ### CSS
864
+
865
+ ![CSS Files](https://img.shields.io/badge/CSS_Files-0-264de4?style=flat-square)
866
+ ![CSS Lines](https://img.shields.io/badge/CSS_Lines-0-2965f1?style=flat-square)
867
+ ![CSS Rules](https://img.shields.io/badge/CSS_Rules-0-7c3aed?style=flat-square)
868
+ ![CSS Selectors](https://img.shields.io/badge/CSS_Selectors-0-8b5cf6?style=flat-square)
869
+ ![CSS Declarations](https://img.shields.io/badge/CSS_Declarations-0-0284c7?style=flat-square)
870
+ ![CSS At Rules](https://img.shields.io/badge/CSS_At_Rules-0-f97316?style=flat-square)
871
+ ![CSS Media Queries](https://img.shields.io/badge/CSS_Media_Queries-0-ea580c?style=flat-square)
872
+ ![CSS Custom Properties](https://img.shields.io/badge/CSS_Custom_Properties-0-16a34a?style=flat-square)
873
+ ![CSS Comments](https://img.shields.io/badge/CSS_Comments-0-64748b?style=flat-square)
874
+
875
+ ### Conventions
876
+
877
+ ![Module Files](https://img.shields.io/badge/Module_Files-10-7c3aed?style=flat-square)
878
+ ![Service Files](https://img.shields.io/badge/Service_Files-18-0284c7?style=flat-square)
879
+ ![Command Files](https://img.shields.io/badge/Command_Files-0-16a34a?style=flat-square)
880
+ ![Constants Files](https://img.shields.io/badge/Constants_Files-10-ea580c?style=flat-square)
881
+ ![Types Files](https://img.shields.io/badge/Types_Files-10-db2777?style=flat-square)
882
+ ![Utilities Files](https://img.shields.io/badge/Utilities_Files-0-0ea5e9?style=flat-square)
883
+ ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
884
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-28-ca8a04?style=flat-square)
885
+ ![Integration Tests](https://img.shields.io/badge/Integration_Tests-0-7c3aed?style=flat-square)
886
+ ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-0-0284c7?style=flat-square)
887
+ ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
888
+ ![HCL Comment Budget](https://img.shields.io/badge/HCL_Comment_Budget-0-ea580c?style=flat-square)
889
+ ![Python Comment Budget](https://img.shields.io/badge/Python_Comment_Budget-0-db2777?style=flat-square)
890
+ ![SQL Comment Budget](https://img.shields.io/badge/SQL_Comment_Budget-0-0ea5e9?style=flat-square)
891
+ ![TOML Comment Budget](https://img.shields.io/badge/TOML_Comment_Budget-0-059669?style=flat-square)
892
+ ![TypeScript Comment Budget](https://img.shields.io/badge/TypeScript_Comment_Budget-0-ca8a04?style=flat-square)
893
+ ![YAML Comment Budget](https://img.shields.io/badge/YAML_Comment_Budget-0-7c3aed?style=flat-square)
894
+ ![Shell Comment Budget](https://img.shields.io/badge/Shell_Comment_Budget-0-0284c7?style=flat-square)
895
+
896
+ ### Jupyter
897
+
898
+ ![Notebooks](https://img.shields.io/badge/Notebooks-0-f37626?style=flat-square)
899
+ ![Notebook Cells](https://img.shields.io/badge/Notebook_Cells-0-e8a33d?style=flat-square)
900
+ ![Code Cells](https://img.shields.io/badge/Code_Cells-0-3776ab?style=flat-square)
901
+ ![Markdown Cells](https://img.shields.io/badge/Markdown_Cells-0-083fa1?style=flat-square)
902
+ ![Raw Cells](https://img.shields.io/badge/Raw_Cells-0-9ca3af?style=flat-square)
903
+ ![Executed Cells](https://img.shields.io/badge/Executed_Cells-0-16a34a?style=flat-square)
904
+ ![Cell Outputs](https://img.shields.io/badge/Cell_Outputs-0-059669?style=flat-square)
905
+ ![Notebook Code Lines](https://img.shields.io/badge/Notebook_Code_Lines-0-4b8bbe?style=flat-square)
906
+ ![Notebook Classes](https://img.shields.io/badge/Notebook_Classes-0-7c3aed?style=flat-square)
907
+ ![Notebook Functions](https://img.shields.io/badge/Notebook_Functions-0-22c55e?style=flat-square)
908
+ ![Notebook Imports](https://img.shields.io/badge/Notebook_Imports-0-0284c7?style=flat-square)
909
+ ![Notebook Decorators](https://img.shields.io/badge/Notebook_Decorators-0-db2777?style=flat-square)
910
+ ![Notebook Prose Lines](https://img.shields.io/badge/Notebook_Prose_Lines-0-1f6feb?style=flat-square)
911
+ ![Notebook Headings](https://img.shields.io/badge/Notebook_Headings-0-a78bfa?style=flat-square)
912
+ ![Notebook Links](https://img.shields.io/badge/Notebook_Links-0-10b981?style=flat-square)
913
+ ![Notebook Images](https://img.shields.io/badge/Notebook_Images-0-34d399?style=flat-square)
914
+ ![Notebook Code Blocks](https://img.shields.io/badge/Notebook_Code_Blocks-0-dc2626?style=flat-square)
915
+ ![Notebook Properties](https://img.shields.io/badge/Notebook_Properties-0-ca8a04?style=flat-square)
916
+ ![Notebook Nodes](https://img.shields.io/badge/Notebook_Nodes-0-a16207?style=flat-square)
917
+ ![Notebook Max Depth](https://img.shields.io/badge/Notebook_Max_Depth-0-ea580c?style=flat-square)
918
+
919
+ ### Markdown
920
+
921
+ ![Markdown Files](https://img.shields.io/badge/Markdown_Files-1-083fa1?style=flat-square)
922
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-222-1f6feb?style=flat-square)
923
+ ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
924
+ ![H2](https://img.shields.io/badge/H2-7-8b5cf6?style=flat-square)
925
+ ![H3](https://img.shields.io/badge/H3-12-a78bfa?style=flat-square)
926
+ ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
927
+ ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
928
+ ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
929
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-45-64748b?style=flat-square)
930
+ ![Lists](https://img.shields.io/badge/Lists-6-16a34a?style=flat-square)
931
+ ![List Items](https://img.shields.io/badge/List_Items-25-22c55e?style=flat-square)
932
+ ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
933
+ ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
934
+ ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
935
+ ![Links](https://img.shields.io/badge/Links-9-059669?style=flat-square)
936
+ ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
937
+ ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
938
+ ![Inline Code](https://img.shields.io/badge/Inline_Code-73-ef4444?style=flat-square)
939
+ ![Block Quotes](https://img.shields.io/badge/Block_Quotes-0-ca8a04?style=flat-square)
940
+ ![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-0-a16207?style=flat-square)
941
+ <!-- codometer:end -->