@codometer/measurement 0.0.0-stage β†’ 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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jimmy Paolini
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,554 @@
1
- # Temporary Holding Version
1
+ # @codometer/measurement
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ What codometer actually measures. It finds the files a run covers, counts their
4
+ compressed and uncompressed size, evaluates whatever counters a configuration
5
+ declares of its own, and holds every measured metric to the limits written
6
+ against it.
7
+
8
+ One package rather than four. Discovery, size, customization, and limits are
9
+ each a handful of files that only ever run together, and none of them imports
10
+ another β€” so the join that a measurement is had to live somewhere, and it lives
11
+ here rather than in the command-line host that used to hold it.
12
+
13
+ ## Test
14
+
15
+ ```bash
16
+ nx run codometer-measurement:vitest
17
+ ```
18
+
19
+ ## πŸ‘” Conformetry
20
+
21
+ This project was generated from the [nestjs-service-project](../../configuration/conformetry-templates/nestjs-service-project) conformetry template.
22
+
23
+ ## πŸ•ΈοΈ Codependix
24
+
25
+ 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`.
26
+
27
+ ### Nx Neighborhood
28
+
29
+ <!-- codependix:start name="codependix-nx-projects" -->
30
+ ```mermaid
31
+ graph LR
32
+ codometer_cli["codometer-cli"]
33
+ codometer_configuration["codometer-configuration"]
34
+ codometer_core["codometer-core"]
35
+ codometer_languages["codometer-languages"]
36
+ codometer_measurement["codometer-measurement"]
37
+ codometer_output["codometer-output"]
38
+ logger["logger"]
39
+ codometer_cli --> codometer_measurement
40
+ codometer_measurement --> codometer_configuration
41
+ codometer_measurement --> codometer_core
42
+ codometer_measurement --> codometer_languages
43
+ codometer_measurement --> logger
44
+ codometer_output --> codometer_measurement
45
+ classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
46
+ class codometer_measurement subject
47
+ ```
48
+ <!-- codependix:end name="codependix-nx-projects" -->
49
+
50
+ ### NestJS Module Graph
51
+
52
+ <!-- codependix:start name="codependix-nestjs-modules" -->
53
+ ```mermaid
54
+ flowchart LR
55
+ CommentsModule
56
+ ConfigurationModule
57
+ CssModule
58
+ CustomizationModule
59
+ DiscoveryModule
60
+ HclModule
61
+ InputsModule
62
+ JsonModule
63
+ JupyterModule
64
+ LanguagesModule
65
+ LimitsModule
66
+ LoggerModule([LoggerModule])
67
+ MarkdownModule
68
+ MeasureModule
69
+ PythonModule
70
+ ShellModule
71
+ SizeModule
72
+ SqlModule
73
+ TomlModule
74
+ TypescriptModule
75
+ YamlModule
76
+ JupyterModule --> JsonModule
77
+ JupyterModule --> MarkdownModule
78
+ JupyterModule --> PythonModule
79
+ LanguagesModule --> CommentsModule
80
+ LanguagesModule --> CssModule
81
+ LanguagesModule --> HclModule
82
+ LanguagesModule --> JsonModule
83
+ LanguagesModule --> JupyterModule
84
+ LanguagesModule --> MarkdownModule
85
+ LanguagesModule --> PythonModule
86
+ LanguagesModule --> ShellModule
87
+ LanguagesModule --> SqlModule
88
+ LanguagesModule --> TomlModule
89
+ LanguagesModule --> TypescriptModule
90
+ LanguagesModule --> YamlModule
91
+ MeasureModule --> ConfigurationModule
92
+ MeasureModule --> CustomizationModule
93
+ MeasureModule --> DiscoveryModule
94
+ MeasureModule --> InputsModule
95
+ MeasureModule --> LanguagesModule
96
+ MeasureModule --> LimitsModule
97
+ MeasureModule --> SizeModule
98
+ TypescriptModule --> CommentsModule
99
+ ```
100
+
101
+ _Rounded modules are global: every module can inject them, so their edges are left out._
102
+ <!-- codependix:end name="codependix-nestjs-modules" -->
103
+
104
+ ### File Imports
105
+
106
+ <!-- codependix:start name="codependix-file-imports" -->
107
+ ```mermaid
108
+ graph LR
109
+ file_callidescope_config_ts["callidescope.config.ts"]
110
+ file_codependix_config_ts["codependix.config.ts"]
111
+ file_codometer_config_ts["codometer.config.ts"]
112
+ file_eslint_config_ts["eslint.config.ts"]
113
+ file_src_index_ts["src/index.ts"]
114
+ file_src_modules_customization_customization_constants_ts["src/modules/customization/customization.constants.ts"]
115
+ file_src_modules_customization_customization_module_ts["src/modules/customization/customization.module.ts"]
116
+ file_src_modules_customization_customization_module_unit_test_ts["src/modules/customization/customization.module.unit.test.ts"]
117
+ file_src_modules_customization_customization_service_ts["src/modules/customization/customization.service.ts"]
118
+ file_src_modules_customization_customization_service_unit_test_ts["src/modules/customization/customization.service.unit.test.ts"]
119
+ file_src_modules_customization_customization_types_ts["src/modules/customization/customization.types.ts"]
120
+ file_src_modules_discovery_discovery_constants_ts["src/modules/discovery/discovery.constants.ts"]
121
+ file_src_modules_discovery_discovery_module_ts["src/modules/discovery/discovery.module.ts"]
122
+ file_src_modules_discovery_discovery_service_integration_test_ts["src/modules/discovery/discovery.service.integration.test.ts"]
123
+ file_src_modules_discovery_discovery_service_ts["src/modules/discovery/discovery.service.ts"]
124
+ file_src_modules_discovery_discovery_service_unit_test_ts["src/modules/discovery/discovery.service.unit.test.ts"]
125
+ file_src_modules_discovery_discovery_types_ts["src/modules/discovery/discovery.types.ts"]
126
+ file_src_modules_discovery_ignore_rules_service_ts["src/modules/discovery/ignore-rules.service.ts"]
127
+ file_src_modules_discovery_ignore_rules_service_unit_test_ts["src/modules/discovery/ignore-rules.service.unit.test.ts"]
128
+ file_src_modules_discovery_ignore_rules_types_ts["src/modules/discovery/ignore-rules.types.ts"]
129
+ file_src_modules_inputs_inputs_constants_ts["src/modules/inputs/inputs.constants.ts"]
130
+ file_src_modules_inputs_inputs_module_ts["src/modules/inputs/inputs.module.ts"]
131
+ file_src_modules_inputs_inputs_service_integration_test_ts["src/modules/inputs/inputs.service.integration.test.ts"]
132
+ file_src_modules_inputs_inputs_service_ts["src/modules/inputs/inputs.service.ts"]
133
+ file_src_modules_inputs_inputs_service_unit_test_ts["src/modules/inputs/inputs.service.unit.test.ts"]
134
+ file_src_modules_inputs_inputs_types_ts["src/modules/inputs/inputs.types.ts"]
135
+ file_src_modules_limits_limits_constants_ts["src/modules/limits/limits.constants.ts"]
136
+ file_src_modules_limits_limits_module_ts["src/modules/limits/limits.module.ts"]
137
+ file_src_modules_limits_limits_service_integration_test_ts["src/modules/limits/limits.service.integration.test.ts"]
138
+ file_src_modules_limits_limits_service_ts["src/modules/limits/limits.service.ts"]
139
+ file_src_modules_limits_limits_service_unit_test_ts["src/modules/limits/limits.service.unit.test.ts"]
140
+ file_src_modules_limits_limits_types_ts["src/modules/limits/limits.types.ts"]
141
+ file_src_modules_limits_metric_index_service_ts["src/modules/limits/metric-index.service.ts"]
142
+ file_src_modules_limits_metric_index_service_unit_test_ts["src/modules/limits/metric-index.service.unit.test.ts"]
143
+ file_src_modules_measure_measure_constants_ts["src/modules/measure/measure.constants.ts"]
144
+ file_src_modules_measure_measure_module_ts["src/modules/measure/measure.module.ts"]
145
+ file_src_modules_measure_measure_service_ts["src/modules/measure/measure.service.ts"]
146
+ file_src_modules_measure_measure_service_unit_test_ts["src/modules/measure/measure.service.unit.test.ts"]
147
+ file_src_modules_measure_measure_types_ts["src/modules/measure/measure.types.ts"]
148
+ file_src_modules_size_size_constants_ts["src/modules/size/size.constants.ts"]
149
+ file_src_modules_size_size_module_ts["src/modules/size/size.module.ts"]
150
+ file_src_modules_size_size_module_unit_test_ts["src/modules/size/size.module.unit.test.ts"]
151
+ file_src_modules_size_size_service_integration_test_ts["src/modules/size/size.service.integration.test.ts"]
152
+ file_src_modules_size_size_service_ts["src/modules/size/size.service.ts"]
153
+ file_src_modules_size_size_service_unit_test_ts["src/modules/size/size.service.unit.test.ts"]
154
+ file_src_modules_size_size_types_ts["src/modules/size/size.types.ts"]
155
+ file_testing_fixture_tree_ts["testing/fixture-tree.ts"]
156
+ file_testing_input_tree_ts["testing/input-tree.ts"]
157
+ file_testing_mocks_ts["testing/mocks.ts"]
158
+ file_testing_setup_ts["testing/setup.ts"]
159
+ file_testing_target_tree_ts["testing/target-tree.ts"]
160
+ file_vite_config_ts["vite.config.ts"]
161
+ file_vitest_config_ts["vitest.config.ts"]
162
+ file_src_modules_customization_customization_module_ts --> file_src_modules_customization_customization_service_ts
163
+ file_src_modules_customization_customization_module_unit_test_ts --> file_src_modules_customization_customization_module_ts
164
+ file_src_modules_customization_customization_module_unit_test_ts --> file_src_modules_customization_customization_service_ts
165
+ file_src_modules_customization_customization_service_ts --> file_src_modules_customization_customization_types_ts
166
+ file_src_modules_customization_customization_service_unit_test_ts --> file_src_modules_customization_customization_service_ts
167
+ file_src_modules_discovery_discovery_module_ts --> file_src_modules_discovery_discovery_service_ts
168
+ file_src_modules_discovery_discovery_module_ts --> file_src_modules_discovery_ignore_rules_service_ts
169
+ file_src_modules_discovery_discovery_service_integration_test_ts --> file_src_modules_discovery_discovery_service_ts
170
+ file_src_modules_discovery_discovery_service_integration_test_ts --> file_src_modules_discovery_discovery_types_ts
171
+ file_src_modules_discovery_discovery_service_integration_test_ts --> file_src_modules_discovery_ignore_rules_service_ts
172
+ file_src_modules_discovery_discovery_service_integration_test_ts --> file_testing_fixture_tree_ts
173
+ file_src_modules_discovery_discovery_service_ts --> file_src_modules_discovery_discovery_constants_ts
174
+ file_src_modules_discovery_discovery_service_ts --> file_src_modules_discovery_discovery_types_ts
175
+ file_src_modules_discovery_discovery_service_ts --> file_src_modules_discovery_ignore_rules_service_ts
176
+ file_src_modules_discovery_discovery_service_ts --> file_src_modules_discovery_ignore_rules_types_ts
177
+ file_src_modules_discovery_discovery_service_unit_test_ts --> file_src_modules_discovery_discovery_service_ts
178
+ file_src_modules_discovery_discovery_service_unit_test_ts --> file_src_modules_discovery_discovery_types_ts
179
+ file_src_modules_discovery_discovery_service_unit_test_ts --> file_src_modules_discovery_ignore_rules_service_ts
180
+ file_src_modules_discovery_discovery_types_ts --> file_src_modules_discovery_ignore_rules_types_ts
181
+ file_src_modules_discovery_ignore_rules_service_ts --> file_src_modules_discovery_ignore_rules_types_ts
182
+ file_src_modules_discovery_ignore_rules_service_unit_test_ts --> file_src_modules_discovery_ignore_rules_service_ts
183
+ file_src_modules_discovery_ignore_rules_service_unit_test_ts --> file_src_modules_discovery_ignore_rules_types_ts
184
+ file_src_modules_inputs_inputs_module_ts --> file_src_modules_inputs_inputs_service_ts
185
+ file_src_modules_inputs_inputs_service_integration_test_ts --> file_src_modules_inputs_inputs_service_ts
186
+ file_src_modules_inputs_inputs_service_integration_test_ts --> file_testing_input_tree_ts
187
+ file_src_modules_inputs_inputs_service_ts --> file_src_modules_inputs_inputs_constants_ts
188
+ file_src_modules_inputs_inputs_service_ts --> file_src_modules_inputs_inputs_types_ts
189
+ file_src_modules_inputs_inputs_service_unit_test_ts --> file_src_modules_inputs_inputs_constants_ts
190
+ file_src_modules_inputs_inputs_service_unit_test_ts --> file_src_modules_inputs_inputs_service_ts
191
+ file_src_modules_limits_limits_module_ts --> file_src_modules_limits_limits_service_ts
192
+ file_src_modules_limits_limits_module_ts --> file_src_modules_limits_metric_index_service_ts
193
+ file_src_modules_limits_limits_service_integration_test_ts --> file_src_modules_limits_limits_service_ts
194
+ file_src_modules_limits_limits_service_integration_test_ts --> file_src_modules_limits_limits_types_ts
195
+ file_src_modules_limits_limits_service_integration_test_ts --> file_src_modules_limits_metric_index_service_ts
196
+ file_src_modules_limits_limits_service_integration_test_ts --> file_testing_fixture_tree_ts
197
+ file_src_modules_limits_limits_service_integration_test_ts --> file_testing_mocks_ts
198
+ file_src_modules_limits_limits_service_ts --> file_src_modules_limits_limits_constants_ts
199
+ file_src_modules_limits_limits_service_ts --> file_src_modules_limits_limits_types_ts
200
+ file_src_modules_limits_limits_service_unit_test_ts --> file_src_modules_limits_limits_service_ts
201
+ file_src_modules_limits_limits_service_unit_test_ts --> file_src_modules_limits_limits_types_ts
202
+ file_src_modules_limits_limits_service_unit_test_ts --> file_src_modules_limits_metric_index_service_ts
203
+ file_src_modules_limits_limits_service_unit_test_ts --> file_testing_mocks_ts
204
+ file_src_modules_limits_limits_types_ts --> file_src_modules_size_size_types_ts
205
+ file_src_modules_limits_metric_index_service_ts --> file_src_modules_limits_limits_constants_ts
206
+ file_src_modules_limits_metric_index_service_ts --> file_src_modules_limits_limits_types_ts
207
+ file_src_modules_limits_metric_index_service_unit_test_ts --> file_src_modules_limits_limits_types_ts
208
+ file_src_modules_limits_metric_index_service_unit_test_ts --> file_src_modules_limits_metric_index_service_ts
209
+ file_src_modules_limits_metric_index_service_unit_test_ts --> file_testing_mocks_ts
210
+ file_src_modules_measure_measure_module_ts --> file_src_modules_customization_customization_module_ts
211
+ file_src_modules_measure_measure_module_ts --> file_src_modules_discovery_discovery_module_ts
212
+ file_src_modules_measure_measure_module_ts --> file_src_modules_inputs_inputs_module_ts
213
+ file_src_modules_measure_measure_module_ts --> file_src_modules_limits_limits_module_ts
214
+ file_src_modules_measure_measure_module_ts --> file_src_modules_measure_measure_service_ts
215
+ file_src_modules_measure_measure_module_ts --> file_src_modules_size_size_module_ts
216
+ file_src_modules_measure_measure_service_ts --> file_src_modules_customization_customization_service_ts
217
+ file_src_modules_measure_measure_service_ts --> file_src_modules_discovery_discovery_service_ts
218
+ file_src_modules_measure_measure_service_ts --> file_src_modules_inputs_inputs_service_ts
219
+ file_src_modules_measure_measure_service_ts --> file_src_modules_limits_limits_service_ts
220
+ file_src_modules_measure_measure_service_ts --> file_src_modules_limits_limits_types_ts
221
+ file_src_modules_measure_measure_service_ts --> file_src_modules_limits_metric_index_service_ts
222
+ file_src_modules_measure_measure_service_ts --> file_src_modules_measure_measure_constants_ts
223
+ file_src_modules_measure_measure_service_ts --> file_src_modules_measure_measure_types_ts
224
+ file_src_modules_measure_measure_service_ts --> file_src_modules_size_size_service_ts
225
+ file_src_modules_measure_measure_service_unit_test_ts --> file_src_modules_customization_customization_service_ts
226
+ file_src_modules_measure_measure_service_unit_test_ts --> file_src_modules_discovery_discovery_service_ts
227
+ file_src_modules_measure_measure_service_unit_test_ts --> file_src_modules_discovery_discovery_types_ts
228
+ file_src_modules_measure_measure_service_unit_test_ts --> file_src_modules_inputs_inputs_service_ts
229
+ file_src_modules_measure_measure_service_unit_test_ts --> file_src_modules_limits_limits_service_ts
230
+ file_src_modules_measure_measure_service_unit_test_ts --> file_src_modules_limits_metric_index_service_ts
231
+ file_src_modules_measure_measure_service_unit_test_ts --> file_src_modules_measure_measure_service_ts
232
+ file_src_modules_measure_measure_service_unit_test_ts --> file_src_modules_size_size_service_ts
233
+ file_src_modules_measure_measure_service_unit_test_ts --> file_testing_mocks_ts
234
+ file_src_modules_measure_measure_types_ts --> file_src_modules_discovery_discovery_types_ts
235
+ file_src_modules_measure_measure_types_ts --> file_src_modules_limits_limits_types_ts
236
+ file_src_modules_measure_measure_types_ts --> file_src_modules_size_size_types_ts
237
+ file_src_modules_size_size_module_ts --> file_src_modules_size_size_service_ts
238
+ file_src_modules_size_size_module_unit_test_ts --> file_src_modules_size_size_module_ts
239
+ file_src_modules_size_size_module_unit_test_ts --> file_src_modules_size_size_service_ts
240
+ file_src_modules_size_size_service_integration_test_ts --> file_src_modules_size_size_constants_ts
241
+ file_src_modules_size_size_service_integration_test_ts --> file_src_modules_size_size_service_ts
242
+ file_src_modules_size_size_service_integration_test_ts --> file_testing_target_tree_ts
243
+ file_src_modules_size_size_service_ts --> file_src_modules_size_size_constants_ts
244
+ file_src_modules_size_size_service_ts --> file_src_modules_size_size_types_ts
245
+ file_src_modules_size_size_service_unit_test_ts --> file_src_modules_size_size_constants_ts
246
+ file_src_modules_size_size_service_unit_test_ts --> file_src_modules_size_size_service_ts
247
+ ```
248
+ <!-- codependix:end name="codependix-file-imports" -->
249
+
250
+ <!-- callidescope:start -->
251
+
252
+ ## πŸ”­ Callidescope
253
+
254
+ Call stacks traced through `packages/ic-suite/codometer/codometer-measurement`, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.
255
+
256
+ | Measure | Value |
257
+ | --- | --- |
258
+ | Callables | 106 |
259
+ | Files | 34 |
260
+ | Calls traced | 121 |
261
+ | Call stacks | 0 |
262
+ | Deepest stack | 0 |
263
+ | Stacks through recursion | 0 |
264
+ | Unfollowable calls | 5 |
265
+
266
+ ### Limits
267
+
268
+ What this project is judged against, as declared in its own `callidescope.config.ts`.
269
+
270
+ | Limit | Value |
271
+ | --- | --- |
272
+ | `maximumDepth` | 14 |
273
+ | `maximumBreadth` | 9 |
274
+
275
+ ### Call stacks (depth)
276
+
277
+ None.
278
+
279
+ ### Breadth
280
+
281
+ | Callable | Breadth | Calls directly | Location |
282
+ | --- | --- | --- | --- |
283
+ | `MeasureService.measure` | 9 | `CustomizationService.buildCommentCounters`, `CustomizationService.buildSymbolCounters`, `MeasureService.measureInput`, `MeasureService.describeFailure`, `MetricIndexService.index`, `LimitsService.evaluate`, `MeasureService.find(…)`, `MeasureService.map(…)`, `MeasureService.readLimitFailures` | `packages/ic-suite/codometer/codometer-measurement/src/modules/measure/measure.service.ts:312` |
284
+ | `InputsService.matchFiles` | 7 | `InputsService.findBoundary`, `InputsService.sitsInsideBoundary`, `InputOutsideRepositoryError.constructor`, `InputsService.readInputPrefix`, `InputsService.walk`, `InputsService.map(…)`, `InputsService.map(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/inputs/inputs.service.ts:282` |
285
+ | `DiscoveryService.categorize` | 6 | `DiscoveryService.filter(…)`, `DiscoveryService.filterByExtension`, `DiscoveryService.filter(…)`, `DiscoveryService.filter(…)`, `DiscoveryService.filter(…)`, `DiscoveryService.filter(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:285` |
286
+
287
+ <details>
288
+ <summary>44 more callables</summary>
289
+
290
+ | Callable | Breadth | Calls directly | Location |
291
+ | --- | --- | --- | --- |
292
+ | `MeasureService.analyzeFiles` | 6 | `LanguagesService.analyze`, `SizeService.analyze`, `CustomizationService.analyze`, `MeasureService.getFolderCount`, `MeasureService.buildJavascriptStatistics`, `MeasureService.buildTypescriptStatistics` | `packages/ic-suite/codometer/codometer-measurement/src/modules/measure/measure.service.ts:75` |
293
+ | `LimitsService.resolve` | 5 | `LimitsService.findCandidates`, `UnboundMetricError.constructor`, `LimitsService.describeTargets`, `LimitsService.map(…)`, `EmptyTargetError.constructor` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/limits.service.ts:156` |
294
+ | `MeasureService.measureInput` | 5 | `MeasureService.discoverInputFiles`, `MeasureService.runsAnalysis`, `MeasureService.analyzeFiles`, `DiscoveryService.categorize`, `SizeService.analyze` | `packages/ic-suite/codometer/codometer-measurement/src/modules/measure/measure.service.ts:253` |
295
+ | `DiscoveryService.walkDirectory` | 4 | `DiscoveryService.readDirectoryEntries`, `DiscoveryService.applyDirectoryIgnoreFile`, `DiscoveryService.walkSubdirectory`, `DiscoveryService.isIgnoredPath` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:217` |
296
+ | `InputsService.walk` | 4 | `InputsService.readEntries`, `InputsService.resolveEntryKind`, `InputsService.canDescend`, `InputsService.isMatched` | `packages/ic-suite/codometer/codometer-measurement/src/modules/inputs/inputs.service.ts:239` |
297
+ | `DiscoveryService.listDiscoveredFiles` | 3 | `DiscoveryService.walkDirectory`, `DiscoveryService.readExcludeFromScopes`, `DiscoveryService.filter(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:145` |
298
+ | `DiscoveryService.walkSubdirectory` | 3 | `DiscoveryService.isExhaustivelyExcluded`, `DiscoveryService.isIgnoredPath`, `DiscoveryService.walkDirectory` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:261` |
299
+ | `LimitsService.findDefaultCandidate` | 3 | `UnboundMetricError.constructor`, `LimitsService.describeTargets`, `LimitsService.bind` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/limits.service.ts:124` |
300
+ | `MeasureService.discoverInputFiles` | 3 | `DiscoveryService.discoverFiles`, `InputsService.matchFiles`, `MeasureService.excludeOutputPaths` | `packages/ic-suite/codometer/codometer-measurement/src/modules/measure/measure.service.ts:189` |
301
+ | `CustomizationService.buildCommentResult` | 2 | `CustomizationService.filter(…)`, `CustomizationService.map(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/customization/customization.service.ts:41` |
302
+ | `CustomizationService.map(…)` | 2 | `CustomizationService.buildCommentResult`, `CustomizationService.countMatches` | `packages/ic-suite/codometer/codometer-measurement/src/modules/customization/customization.service.ts:84` |
303
+ | `DiscoveryService.discoverFiles` | 2 | `DiscoveryService.categorize`, `DiscoveryService.listDiscoveredFiles` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:317` |
304
+ | `InputsService.canDescend` | 2 | `InputsService.isHidden`, `InputsService.some(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/inputs/inputs.service.ts:50` |
305
+ | `InputsService.some(…)` | 2 | `InputsService.leadsToBase`, `InputsService.sitsInsideBase` | `packages/ic-suite/codometer/codometer-measurement/src/modules/inputs/inputs.service.ts:56` |
306
+ | `InputsService.isMatched` | 2 | `InputsService.some(…)`, `InputsService.some(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/inputs/inputs.service.ts:126` |
307
+ | `LimitsService.findCandidates` | 2 | `LimitsService.bind`, `LimitsService.findDefaultCandidate` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/limits.service.ts:86` |
308
+ | `LimitsService.evaluate` | 2 | `LimitsService.resolve`, `LimitsService.describeFailure` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/limits.service.ts:200` |
309
+ | `MetricIndexService.buildTargetIndex` | 2 | `MetricIndexService.addMetric`, `MetricIndexService.indexLanguage` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/metric-index.service.ts:67` |
310
+ | `MetricIndexService.indexCounters` | 2 | `MetricIndexService.addMetric`, `MetricIndexService.isCounterGroup` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/metric-index.service.ts:111` |
311
+ | `MetricIndexService.indexLanguage` | 2 | `MetricIndexService.indexCounters`, `MetricIndexService.addMetric` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/metric-index.service.ts:135` |
312
+ | `MetricIndexService.index` | 2 | `MetricIndexService.describeDuplicate`, `MetricIndexService.buildTargetIndex` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/metric-index.service.ts:168` |
313
+ | `SizeService.measureFile` | 2 | `SizeService.compress`, `UnreadableTargetFileError.constructor` | `packages/ic-suite/codometer/codometer-measurement/src/modules/size/size.service.ts:61` |
314
+ | `CustomizationService.countMatches` | 1 | `CustomizationService.filter(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/customization/customization.service.ts:69` |
315
+ | `CustomizationService.filter(…)` | 1 | `CustomizationService.some(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/customization/customization.service.ts:70` |
316
+ | `CustomizationService.analyze` | 1 | `CustomizationService.map(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/customization/customization.service.ts:78` |
317
+ | `CustomizationService.buildSymbolCounters` | 1 | `CustomizationService.flatMap(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/customization/customization.service.ts:146` |
318
+ | `IgnoreRulesService.isIgnored` | 1 | `IgnoreRulesService.toScopedPath` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/ignore-rules.service.ts:84` |
319
+ | `IgnoreRulesService.readScope` | 1 | `IgnoreRulesService.createScope` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/ignore-rules.service.ts:115` |
320
+ | `DiscoveryService.applyDirectoryIgnoreFile` | 1 | `IgnoreRulesService.readScope` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:59` |
321
+ | `DiscoveryService.filterByExtension` | 1 | `DiscoveryService.filter(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:75` |
322
+ | `DiscoveryService.isExcluded` | 1 | `DiscoveryService.some(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:91` |
323
+ | `DiscoveryService.isExhaustivelyExcluded` | 1 | `DiscoveryService.some(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:105` |
324
+ | `DiscoveryService.isIgnoredPath` | 1 | `IgnoreRulesService.isIgnored` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:128` |
325
+ | `DiscoveryService.filter(…)` | 1 | `DiscoveryService.isExcluded` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:155` |
326
+ | `DiscoveryService.readExcludeFromScopes` | 1 | `IgnoreRulesService.readScope` | `packages/ic-suite/codometer/codometer-measurement/src/modules/discovery/discovery.service.ts:187` |
327
+ | `InputsService.findBoundary` | 1 | `InputsService.some(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/inputs/inputs.service.ts:72` |
328
+ | `InputsService.resolveEntryKind` | 1 | `InputsService.isLinkedFile` | `packages/ic-suite/codometer/codometer-measurement/src/modules/inputs/inputs.service.ts:184` |
329
+ | `InputsService.map(…)` | 1 | `InputsService.toIncludeBase` | `packages/ic-suite/codometer/codometer-measurement/src/modules/inputs/inputs.service.ts:300` |
330
+ | `LimitsService.bind` | 1 | `UnboundMetricError.constructor` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/limits.service.ts:41` |
331
+ | `LimitsService.describeTargets` | 1 | `LimitsService.map(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/limits.service.ts:72` |
332
+ | `LimitsService.map(…)` | 1 | `LimitsService.describeBinding` | `packages/ic-suite/codometer/codometer-measurement/src/modules/limits/limits.service.ts:169` |
333
+ | `SizeService.analyze` | 1 | `SizeService.measureFile` | `packages/ic-suite/codometer/codometer-measurement/src/modules/size/size.service.ts:85` |
334
+ | `MeasureService.excludeOutputPaths` | 1 | `MeasureService.filter(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/measure/measure.service.ts:216` |
335
+ | `MeasureService.readLimitFailures` | 1 | `MeasureService.map(…)` | `packages/ic-suite/codometer/codometer-measurement/src/modules/measure/measure.service.ts:282` |
336
+
337
+ </details>
338
+ <!-- callidescope:end -->
339
+
340
+ <!-- codometer:start -->
341
+
342
+ ## ⏲️ Codometer
343
+
344
+ ### Project
345
+
346
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-6275-22c55e?style=flat-square)
347
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-204.65_kB-6b7280?style=flat-square)
348
+ ![Folders](https://img.shields.io/badge/Folders-9-4a4a4a?style=flat-square)
349
+ ![Source Files](https://img.shields.io/badge/Source_Files-53-3178c6?style=flat-square)
350
+
351
+ ### Measured Targets
352
+
353
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-8.84_kB_gzip-6b7280?style=flat-square)
354
+
355
+ ### TypeScript
356
+
357
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-53-3178c6?style=flat-square)
358
+ ![Interfaces](https://img.shields.io/badge/Interfaces-29-0ea5e9?style=flat-square)
359
+ ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
360
+ ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
361
+ ![Decorators](https://img.shields.io/badge/Decorators-14-db2777?style=flat-square)
362
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-187-6366f1?style=flat-square)
363
+ ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
364
+
365
+ ### JavaScript
366
+
367
+ ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-0-f7df1e?style=flat-square)
368
+ ![Test Files](https://img.shields.io/badge/Test_Files-14-10b981?style=flat-square)
369
+ ![External Packages](https://img.shields.io/badge/External_Packages-15-8b5cf6?style=flat-square)
370
+ ![Classes](https://img.shields.io/badge/Classes-18-7c3aed?style=flat-square)
371
+ ![Functions](https://img.shields.io/badge/Functions-237-16a34a?style=flat-square)
372
+ ![Methods](https://img.shields.io/badge/Methods-94-15803d?style=flat-square)
373
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-316-4ade80?style=flat-square)
374
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-15-059669?style=flat-square)
375
+ ![Constants](https://img.shields.io/badge/Constants-222-dc2626?style=flat-square)
376
+ ![Imports](https://img.shields.io/badge/Imports-227-0284c7?style=flat-square)
377
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-83-ea580c?style=flat-square)
378
+ ![Comments](https://img.shields.io/badge/Comments-361-64748b?style=flat-square)
379
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-818-475569?style=flat-square)
380
+ ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
381
+
382
+ ### Python
383
+
384
+ ![Python Files](https://img.shields.io/badge/Python_Files-0-3776ab?style=flat-square)
385
+ ![Python Lines](https://img.shields.io/badge/Python_Lines-0-4b8bbe?style=flat-square)
386
+ ![Python Classes](https://img.shields.io/badge/Python_Classes-0-7c3aed?style=flat-square)
387
+ ![Python Functions](https://img.shields.io/badge/Python_Functions-0-16a34a?style=flat-square)
388
+ ![Python Protocols](https://img.shields.io/badge/Python_Protocols-0-0ea5e9?style=flat-square)
389
+ ![Python Constants](https://img.shields.io/badge/Python_Constants-0-dc2626?style=flat-square)
390
+ ![Python Imports](https://img.shields.io/badge/Python_Imports-0-0284c7?style=flat-square)
391
+ ![Python Decorators](https://img.shields.io/badge/Python_Decorators-0-db2777?style=flat-square)
392
+ ![Docstrings](https://img.shields.io/badge/Docstrings-0-6366f1?style=flat-square)
393
+ ![Docstring Lines](https://img.shields.io/badge/Docstring_Lines-0-818cf8?style=flat-square)
394
+ ![Python Comments](https://img.shields.io/badge/Python_Comments-0-64748b?style=flat-square)
395
+ ![Python Comment Lines](https://img.shields.io/badge/Python_Comment_Lines-0-475569?style=flat-square)
396
+
397
+ ### JSON
398
+
399
+ ![JSON Files](https://img.shields.io/badge/JSON_Files-4-a16207?style=flat-square)
400
+ ![JSON Lines](https://img.shields.io/badge/JSON_Lines-167-ca8a04?style=flat-square)
401
+ ![JSON Objects](https://img.shields.io/badge/JSON_Objects-38-7c3aed?style=flat-square)
402
+ ![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-13-8b5cf6?style=flat-square)
403
+ ![JSON Properties](https://img.shields.io/badge/JSON_Properties-105-0284c7?style=flat-square)
404
+ ![JSON Strings](https://img.shields.io/badge/JSON_Strings-92-16a34a?style=flat-square)
405
+ ![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-1-059669?style=flat-square)
406
+ ![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-7-0ea5e9?style=flat-square)
407
+ ![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
408
+ ![JSON Items](https://img.shields.io/badge/JSON_Items-42-475569?style=flat-square)
409
+ ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-151-dc2626?style=flat-square)
410
+ ![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-5-ea580c?style=flat-square)
411
+
412
+ ### YAML
413
+
414
+ ![YAML Files](https://img.shields.io/badge/YAML_Files-0-cb171e?style=flat-square)
415
+ ![YAML Lines](https://img.shields.io/badge/YAML_Lines-0-e34c26?style=flat-square)
416
+ ![YAML Documents](https://img.shields.io/badge/YAML_Documents-0-f97316?style=flat-square)
417
+ ![YAML Mappings](https://img.shields.io/badge/YAML_Mappings-0-7c3aed?style=flat-square)
418
+ ![YAML Sequences](https://img.shields.io/badge/YAML_Sequences-0-8b5cf6?style=flat-square)
419
+ ![YAML Keys](https://img.shields.io/badge/YAML_Keys-0-0284c7?style=flat-square)
420
+ ![YAML Scalars](https://img.shields.io/badge/YAML_Scalars-0-16a34a?style=flat-square)
421
+ ![YAML Anchors](https://img.shields.io/badge/YAML_Anchors-0-059669?style=flat-square)
422
+ ![YAML Aliases](https://img.shields.io/badge/YAML_Aliases-0-10b981?style=flat-square)
423
+ ![YAML Comments](https://img.shields.io/badge/YAML_Comments-0-64748b?style=flat-square)
424
+ ![YAML Max Depth](https://img.shields.io/badge/YAML_Max_Depth-0-ea580c?style=flat-square)
425
+
426
+ ### TOML
427
+
428
+ ![TOML Files](https://img.shields.io/badge/TOML_Files-0-9c4221?style=flat-square)
429
+ ![TOML Lines](https://img.shields.io/badge/TOML_Lines-0-b45309?style=flat-square)
430
+ ![TOML Tables](https://img.shields.io/badge/TOML_Tables-0-7c3aed?style=flat-square)
431
+ ![TOML Array Tables](https://img.shields.io/badge/TOML_Array_Tables-0-8b5cf6?style=flat-square)
432
+ ![TOML Keys](https://img.shields.io/badge/TOML_Keys-0-0284c7?style=flat-square)
433
+ ![TOML Arrays](https://img.shields.io/badge/TOML_Arrays-0-16a34a?style=flat-square)
434
+ ![TOML Comments](https://img.shields.io/badge/TOML_Comments-0-64748b?style=flat-square)
435
+
436
+ ### Shell
437
+
438
+ ![Shell Files](https://img.shields.io/badge/Shell_Files-0-89e051?style=flat-square)
439
+ ![Shell Lines](https://img.shields.io/badge/Shell_Lines-0-4eaa25?style=flat-square)
440
+ ![Shell Functions](https://img.shields.io/badge/Shell_Functions-0-16a34a?style=flat-square)
441
+ ![Shell Variables](https://img.shields.io/badge/Shell_Variables-0-0284c7?style=flat-square)
442
+ ![Shell Exports](https://img.shields.io/badge/Shell_Exports-0-ea580c?style=flat-square)
443
+ ![Shell Conditionals](https://img.shields.io/badge/Shell_Conditionals-0-7c3aed?style=flat-square)
444
+ ![Shell Loops](https://img.shields.io/badge/Shell_Loops-0-8b5cf6?style=flat-square)
445
+ ![Shell Pipelines](https://img.shields.io/badge/Shell_Pipelines-0-059669?style=flat-square)
446
+ ![Shebangs](https://img.shields.io/badge/Shebangs-0-6b7280?style=flat-square)
447
+ ![Shell Comments](https://img.shields.io/badge/Shell_Comments-0-64748b?style=flat-square)
448
+ ![Shell Comment Lines](https://img.shields.io/badge/Shell_Comment_Lines-0-475569?style=flat-square)
449
+
450
+ ### SQL
451
+
452
+ ![SQL Files](https://img.shields.io/badge/SQL_Files-0-e38c00?style=flat-square)
453
+ ![SQL Lines](https://img.shields.io/badge/SQL_Lines-0-f29111?style=flat-square)
454
+ ![SQL Statements](https://img.shields.io/badge/SQL_Statements-0-7c3aed?style=flat-square)
455
+ ![SQL Selects](https://img.shields.io/badge/SQL_Selects-0-16a34a?style=flat-square)
456
+ ![SQL Inserts](https://img.shields.io/badge/SQL_Inserts-0-22c55e?style=flat-square)
457
+ ![SQL Updates](https://img.shields.io/badge/SQL_Updates-0-0ea5e9?style=flat-square)
458
+ ![SQL Deletes](https://img.shields.io/badge/SQL_Deletes-0-dc2626?style=flat-square)
459
+ ![SQL Creates](https://img.shields.io/badge/SQL_Creates-0-0284c7?style=flat-square)
460
+ ![SQL Joins](https://img.shields.io/badge/SQL_Joins-0-8b5cf6?style=flat-square)
461
+ ![SQL CTEs](https://img.shields.io/badge/SQL_CTEs-0-059669?style=flat-square)
462
+ ![SQL Comments](https://img.shields.io/badge/SQL_Comments-0-64748b?style=flat-square)
463
+
464
+ ### HCL
465
+
466
+ ![HCL Files](https://img.shields.io/badge/HCL_Files-0-844fba?style=flat-square)
467
+ ![HCL Lines](https://img.shields.io/badge/HCL_Lines-0-a78bfa?style=flat-square)
468
+ ![HCL Blocks](https://img.shields.io/badge/HCL_Blocks-0-7c3aed?style=flat-square)
469
+ ![HCL Resources](https://img.shields.io/badge/HCL_Resources-0-0284c7?style=flat-square)
470
+ ![HCL Variables](https://img.shields.io/badge/HCL_Variables-0-16a34a?style=flat-square)
471
+ ![HCL Outputs](https://img.shields.io/badge/HCL_Outputs-0-059669?style=flat-square)
472
+ ![HCL Attributes](https://img.shields.io/badge/HCL_Attributes-0-0ea5e9?style=flat-square)
473
+ ![HCL Interpolations](https://img.shields.io/badge/HCL_Interpolations-0-db2777?style=flat-square)
474
+ ![HCL Comments](https://img.shields.io/badge/HCL_Comments-0-64748b?style=flat-square)
475
+
476
+ ### CSS
477
+
478
+ ![CSS Files](https://img.shields.io/badge/CSS_Files-0-264de4?style=flat-square)
479
+ ![CSS Lines](https://img.shields.io/badge/CSS_Lines-0-2965f1?style=flat-square)
480
+ ![CSS Rules](https://img.shields.io/badge/CSS_Rules-0-7c3aed?style=flat-square)
481
+ ![CSS Selectors](https://img.shields.io/badge/CSS_Selectors-0-8b5cf6?style=flat-square)
482
+ ![CSS Declarations](https://img.shields.io/badge/CSS_Declarations-0-0284c7?style=flat-square)
483
+ ![CSS At Rules](https://img.shields.io/badge/CSS_At_Rules-0-f97316?style=flat-square)
484
+ ![CSS Media Queries](https://img.shields.io/badge/CSS_Media_Queries-0-ea580c?style=flat-square)
485
+ ![CSS Custom Properties](https://img.shields.io/badge/CSS_Custom_Properties-0-16a34a?style=flat-square)
486
+ ![CSS Comments](https://img.shields.io/badge/CSS_Comments-0-64748b?style=flat-square)
487
+
488
+ ### Conventions
489
+
490
+ ![Module Files](https://img.shields.io/badge/Module_Files-6-7c3aed?style=flat-square)
491
+ ![Service Files](https://img.shields.io/badge/Service_Files-8-0284c7?style=flat-square)
492
+ ![Command Files](https://img.shields.io/badge/Command_Files-0-16a34a?style=flat-square)
493
+ ![Constants Files](https://img.shields.io/badge/Constants_Files-6-ea580c?style=flat-square)
494
+ ![Types Files](https://img.shields.io/badge/Types_Files-7-db2777?style=flat-square)
495
+ ![Utilities Files](https://img.shields.io/badge/Utilities_Files-0-0ea5e9?style=flat-square)
496
+ ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
497
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-10-ca8a04?style=flat-square)
498
+ ![Integration Tests](https://img.shields.io/badge/Integration_Tests-4-7c3aed?style=flat-square)
499
+ ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-0-0284c7?style=flat-square)
500
+ ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
501
+ ![HCL Comment Budget](https://img.shields.io/badge/HCL_Comment_Budget-0-ea580c?style=flat-square)
502
+ ![Python Comment Budget](https://img.shields.io/badge/Python_Comment_Budget-0-db2777?style=flat-square)
503
+ ![SQL Comment Budget](https://img.shields.io/badge/SQL_Comment_Budget-0-0ea5e9?style=flat-square)
504
+ ![TOML Comment Budget](https://img.shields.io/badge/TOML_Comment_Budget-0-059669?style=flat-square)
505
+ ![TypeScript Comment Budget](https://img.shields.io/badge/TypeScript_Comment_Budget-0-ca8a04?style=flat-square)
506
+ ![YAML Comment Budget](https://img.shields.io/badge/YAML_Comment_Budget-0-7c3aed?style=flat-square)
507
+ ![Shell Comment Budget](https://img.shields.io/badge/Shell_Comment_Budget-0-0284c7?style=flat-square)
508
+
509
+ ### Jupyter
510
+
511
+ ![Notebooks](https://img.shields.io/badge/Notebooks-0-f37626?style=flat-square)
512
+ ![Notebook Cells](https://img.shields.io/badge/Notebook_Cells-0-e8a33d?style=flat-square)
513
+ ![Code Cells](https://img.shields.io/badge/Code_Cells-0-3776ab?style=flat-square)
514
+ ![Markdown Cells](https://img.shields.io/badge/Markdown_Cells-0-083fa1?style=flat-square)
515
+ ![Raw Cells](https://img.shields.io/badge/Raw_Cells-0-9ca3af?style=flat-square)
516
+ ![Executed Cells](https://img.shields.io/badge/Executed_Cells-0-16a34a?style=flat-square)
517
+ ![Cell Outputs](https://img.shields.io/badge/Cell_Outputs-0-059669?style=flat-square)
518
+ ![Notebook Code Lines](https://img.shields.io/badge/Notebook_Code_Lines-0-4b8bbe?style=flat-square)
519
+ ![Notebook Classes](https://img.shields.io/badge/Notebook_Classes-0-7c3aed?style=flat-square)
520
+ ![Notebook Functions](https://img.shields.io/badge/Notebook_Functions-0-22c55e?style=flat-square)
521
+ ![Notebook Imports](https://img.shields.io/badge/Notebook_Imports-0-0284c7?style=flat-square)
522
+ ![Notebook Decorators](https://img.shields.io/badge/Notebook_Decorators-0-db2777?style=flat-square)
523
+ ![Notebook Prose Lines](https://img.shields.io/badge/Notebook_Prose_Lines-0-1f6feb?style=flat-square)
524
+ ![Notebook Headings](https://img.shields.io/badge/Notebook_Headings-0-a78bfa?style=flat-square)
525
+ ![Notebook Links](https://img.shields.io/badge/Notebook_Links-0-10b981?style=flat-square)
526
+ ![Notebook Images](https://img.shields.io/badge/Notebook_Images-0-34d399?style=flat-square)
527
+ ![Notebook Code Blocks](https://img.shields.io/badge/Notebook_Code_Blocks-0-dc2626?style=flat-square)
528
+ ![Notebook Properties](https://img.shields.io/badge/Notebook_Properties-0-ca8a04?style=flat-square)
529
+ ![Notebook Nodes](https://img.shields.io/badge/Notebook_Nodes-0-a16207?style=flat-square)
530
+ ![Notebook Max Depth](https://img.shields.io/badge/Notebook_Max_Depth-0-ea580c?style=flat-square)
531
+
532
+ ### Markdown
533
+
534
+ ![Markdown Files](https://img.shields.io/badge/Markdown_Files-1-083fa1?style=flat-square)
535
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-222-1f6feb?style=flat-square)
536
+ ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
537
+ ![H2](https://img.shields.io/badge/H2-7-8b5cf6?style=flat-square)
538
+ ![H3](https://img.shields.io/badge/H3-12-a78bfa?style=flat-square)
539
+ ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
540
+ ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
541
+ ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
542
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-45-64748b?style=flat-square)
543
+ ![Lists](https://img.shields.io/badge/Lists-6-16a34a?style=flat-square)
544
+ ![List Items](https://img.shields.io/badge/List_Items-25-22c55e?style=flat-square)
545
+ ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
546
+ ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
547
+ ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
548
+ ![Links](https://img.shields.io/badge/Links-9-059669?style=flat-square)
549
+ ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
550
+ ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
551
+ ![Inline Code](https://img.shields.io/badge/Inline_Code-73-ef4444?style=flat-square)
552
+ ![Block Quotes](https://img.shields.io/badge/Block_Quotes-0-ca8a04?style=flat-square)
553
+ ![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-0-a16207?style=flat-square)
554
+ <!-- codometer:end -->