@callidescope/core 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,346 @@
1
- # Temporary Holding Version
1
+ # πŸ”­ Callidescope Core
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
+ **The domain vocabulary every other Callidescope package speaks.**
4
+
5
+ This package is the contracts leaf of the Callidescope spine: it declares what a
6
+ run produces β€” call graphs, stacks, frames, findings β€” and depends on nothing.
7
+ It holds no service and no NestJS module, so importing a result type never drags
8
+ a configuration loader or a TypeScript program behind it.
9
+
10
+ ```bash
11
+ npm install --save-dev @callidescope/core
12
+ ```
13
+
14
+ ## What This Package Owns
15
+
16
+ - **`call-graph`** β€” the result and finding vocabulary: `CallGraphResult`,
17
+ `ProjectReport`, `CallStack`, `StackFrame`, `CallableNode`, `CallEdge`,
18
+ `DeepStackFinding`, `WideCallableFinding`, and the identifiers and locations
19
+ they are built from
20
+
21
+ The sharp test for what belongs here: a type describing **what the tool
22
+ produced** is core; a type describing **what the user wrote in
23
+ `callidescope.config.ts`** belongs in
24
+ [`@callidescope/configuration`](../callidescope-configuration/README.md).
25
+
26
+ ## Test
27
+
28
+ ```bash
29
+ nx run callidescope-core:vitest
30
+ ```
31
+
32
+ ## πŸ‘” Conformetry
33
+
34
+ This project was generated from the [nestjs-service-project](../../configuration/conformetry-templates/nestjs-service-project) conformetry template.
35
+
36
+ ## πŸ•ΈοΈ Codependix
37
+
38
+ 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`.
39
+
40
+ ### Nx Neighborhood
41
+
42
+ <!-- codependix:start name="codependix-nx-projects" -->
43
+ ```mermaid
44
+ graph LR
45
+ callidescope_cli["callidescope-cli"]
46
+ callidescope_configuration["callidescope-configuration"]
47
+ callidescope_core["callidescope-core"]
48
+ callidescope_examples["callidescope-examples"]
49
+ callidescope_graph["callidescope-graph"]
50
+ callidescope_nx["callidescope-nx"]
51
+ callidescope_output["callidescope-output"]
52
+ callidescope_cli --> callidescope_core
53
+ callidescope_configuration --> callidescope_core
54
+ callidescope_examples --> callidescope_core
55
+ callidescope_graph --> callidescope_core
56
+ callidescope_nx --> callidescope_core
57
+ callidescope_output --> callidescope_core
58
+ classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
59
+ class callidescope_core subject
60
+ ```
61
+ <!-- codependix:end name="codependix-nx-projects" -->
62
+
63
+ ### NestJS Module Graph
64
+
65
+ <!-- codependix:start name="codependix-nestjs-modules" -->
66
+ ```mermaid
67
+ flowchart LR
68
+ CallidescopeCoreModule
69
+ ```
70
+ <!-- codependix:end name="codependix-nestjs-modules" -->
71
+
72
+ ### File Imports
73
+
74
+ <!-- codependix:start name="codependix-file-imports" -->
75
+ ```mermaid
76
+ graph LR
77
+ file_callidescope_config_ts["callidescope.config.ts"]
78
+ file_codependix_config_ts["codependix.config.ts"]
79
+ file_codometer_config_ts["codometer.config.ts"]
80
+ file_eslint_config_ts["eslint.config.ts"]
81
+ file_src_index_ts["src/index.ts"]
82
+ file_src_index_unit_test_ts["src/index.unit.test.ts"]
83
+ file_src_modules_callidescope_core_callidescope_core_constants_ts["src/modules/callidescope-core/callidescope-core.constants.ts"]
84
+ file_src_modules_callidescope_core_callidescope_core_module_ts["src/modules/callidescope-core/callidescope-core.module.ts"]
85
+ file_src_modules_callidescope_core_callidescope_core_service_ts["src/modules/callidescope-core/callidescope-core.service.ts"]
86
+ file_src_modules_callidescope_core_callidescope_core_service_unit_test_ts["src/modules/callidescope-core/callidescope-core.service.unit.test.ts"]
87
+ file_src_modules_callidescope_core_callidescope_core_types_ts["src/modules/callidescope-core/callidescope-core.types.ts"]
88
+ file_testing_mocks_ts["testing/mocks.ts"]
89
+ file_testing_setup_ts["testing/setup.ts"]
90
+ file_vite_config_ts["vite.config.ts"]
91
+ file_vitest_config_ts["vitest.config.ts"]
92
+ file_src_index_unit_test_ts --> file_src_index_ts
93
+ file_src_modules_callidescope_core_callidescope_core_module_ts --> file_src_modules_callidescope_core_callidescope_core_service_ts
94
+ file_src_modules_callidescope_core_callidescope_core_service_unit_test_ts --> file_src_modules_callidescope_core_callidescope_core_service_ts
95
+ ```
96
+ <!-- codependix:end name="codependix-file-imports" -->
97
+
98
+ <!-- callidescope:start -->
99
+
100
+ ## πŸ”­ Callidescope
101
+
102
+ Call stacks traced through `packages/ic-suite/callidescope/callidescope-core`, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.
103
+
104
+ | Measure | Value |
105
+ | --- | --- |
106
+ | Callables | 1 |
107
+ | Files | 11 |
108
+ | Calls traced | 0 |
109
+ | Call stacks | 0 |
110
+ | Deepest stack | 0 |
111
+ | Stacks through recursion | 0 |
112
+ | Unfollowable calls | 0 |
113
+
114
+ ### Limits
115
+
116
+ What this project is judged against, as declared in its own `callidescope.config.ts`.
117
+
118
+ | Limit | Value |
119
+ | --- | --- |
120
+ | `maximumDepth` | 17 |
121
+ | `maximumBreadth` | none |
122
+
123
+ ### Call stacks (depth)
124
+
125
+ None.
126
+
127
+ ### Breadth
128
+
129
+ None.
130
+ <!-- callidescope:end -->
131
+
132
+ <!-- codometer:start -->
133
+
134
+ ## ⏲️ Codometer
135
+
136
+ ### Project
137
+
138
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-479-22c55e?style=flat-square)
139
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-25.20_kB-6b7280?style=flat-square)
140
+ ![Folders](https://img.shields.io/badge/Folders-4-4a4a4a?style=flat-square)
141
+ ![Source Files](https://img.shields.io/badge/Source_Files-15-3178c6?style=flat-square)
142
+
143
+ ### Measured Targets
144
+
145
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-0.57_kB_gzip-6b7280?style=flat-square)
146
+
147
+ ### TypeScript
148
+
149
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-15-3178c6?style=flat-square)
150
+ ![Interfaces](https://img.shields.io/badge/Interfaces-17-0ea5e9?style=flat-square)
151
+ ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
152
+ ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
153
+ ![Decorators](https://img.shields.io/badge/Decorators-2-db2777?style=flat-square)
154
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-41-6366f1?style=flat-square)
155
+ ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
156
+
157
+ ### JavaScript
158
+
159
+ ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-0-f7df1e?style=flat-square)
160
+ ![Test Files](https://img.shields.io/badge/Test_Files-2-10b981?style=flat-square)
161
+ ![External Packages](https://img.shields.io/badge/External_Packages-7-8b5cf6?style=flat-square)
162
+ ![Classes](https://img.shields.io/badge/Classes-2-7c3aed?style=flat-square)
163
+ ![Functions](https://img.shields.io/badge/Functions-13-16a34a?style=flat-square)
164
+ ![Methods](https://img.shields.io/badge/Methods-0-15803d?style=flat-square)
165
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-12-4ade80?style=flat-square)
166
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-1-059669?style=flat-square)
167
+ ![Constants](https://img.shields.io/badge/Constants-3-dc2626?style=flat-square)
168
+ ![Imports](https://img.shields.io/badge/Imports-21-0284c7?style=flat-square)
169
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-26-ea580c?style=flat-square)
170
+ ![Comments](https://img.shields.io/badge/Comments-55-64748b?style=flat-square)
171
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-116-475569?style=flat-square)
172
+ ![TODO Comments](https://img.shields.io/badge/TODO_Comments-2-ca8a04?style=flat-square)
173
+
174
+ ### Python
175
+
176
+ ![Python Files](https://img.shields.io/badge/Python_Files-0-3776ab?style=flat-square)
177
+ ![Python Lines](https://img.shields.io/badge/Python_Lines-0-4b8bbe?style=flat-square)
178
+ ![Python Classes](https://img.shields.io/badge/Python_Classes-0-7c3aed?style=flat-square)
179
+ ![Python Functions](https://img.shields.io/badge/Python_Functions-0-16a34a?style=flat-square)
180
+ ![Python Protocols](https://img.shields.io/badge/Python_Protocols-0-0ea5e9?style=flat-square)
181
+ ![Python Constants](https://img.shields.io/badge/Python_Constants-0-dc2626?style=flat-square)
182
+ ![Python Imports](https://img.shields.io/badge/Python_Imports-0-0284c7?style=flat-square)
183
+ ![Python Decorators](https://img.shields.io/badge/Python_Decorators-0-db2777?style=flat-square)
184
+ ![Docstrings](https://img.shields.io/badge/Docstrings-0-6366f1?style=flat-square)
185
+ ![Docstring Lines](https://img.shields.io/badge/Docstring_Lines-0-818cf8?style=flat-square)
186
+ ![Python Comments](https://img.shields.io/badge/Python_Comments-0-64748b?style=flat-square)
187
+ ![Python Comment Lines](https://img.shields.io/badge/Python_Comment_Lines-0-475569?style=flat-square)
188
+
189
+ ### JSON
190
+
191
+ ![JSON Files](https://img.shields.io/badge/JSON_Files-4-a16207?style=flat-square)
192
+ ![JSON Lines](https://img.shields.io/badge/JSON_Lines-161-ca8a04?style=flat-square)
193
+ ![JSON Objects](https://img.shields.io/badge/JSON_Objects-38-7c3aed?style=flat-square)
194
+ ![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-13-8b5cf6?style=flat-square)
195
+ ![JSON Properties](https://img.shields.io/badge/JSON_Properties-98-0284c7?style=flat-square)
196
+ ![JSON Strings](https://img.shields.io/badge/JSON_Strings-86-16a34a?style=flat-square)
197
+ ![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-1-059669?style=flat-square)
198
+ ![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-7-0ea5e9?style=flat-square)
199
+ ![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
200
+ ![JSON Items](https://img.shields.io/badge/JSON_Items-43-475569?style=flat-square)
201
+ ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-145-dc2626?style=flat-square)
202
+ ![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-5-ea580c?style=flat-square)
203
+
204
+ ### YAML
205
+
206
+ ![YAML Files](https://img.shields.io/badge/YAML_Files-0-cb171e?style=flat-square)
207
+ ![YAML Lines](https://img.shields.io/badge/YAML_Lines-0-e34c26?style=flat-square)
208
+ ![YAML Documents](https://img.shields.io/badge/YAML_Documents-0-f97316?style=flat-square)
209
+ ![YAML Mappings](https://img.shields.io/badge/YAML_Mappings-0-7c3aed?style=flat-square)
210
+ ![YAML Sequences](https://img.shields.io/badge/YAML_Sequences-0-8b5cf6?style=flat-square)
211
+ ![YAML Keys](https://img.shields.io/badge/YAML_Keys-0-0284c7?style=flat-square)
212
+ ![YAML Scalars](https://img.shields.io/badge/YAML_Scalars-0-16a34a?style=flat-square)
213
+ ![YAML Anchors](https://img.shields.io/badge/YAML_Anchors-0-059669?style=flat-square)
214
+ ![YAML Aliases](https://img.shields.io/badge/YAML_Aliases-0-10b981?style=flat-square)
215
+ ![YAML Comments](https://img.shields.io/badge/YAML_Comments-0-64748b?style=flat-square)
216
+ ![YAML Max Depth](https://img.shields.io/badge/YAML_Max_Depth-0-ea580c?style=flat-square)
217
+
218
+ ### TOML
219
+
220
+ ![TOML Files](https://img.shields.io/badge/TOML_Files-0-9c4221?style=flat-square)
221
+ ![TOML Lines](https://img.shields.io/badge/TOML_Lines-0-b45309?style=flat-square)
222
+ ![TOML Tables](https://img.shields.io/badge/TOML_Tables-0-7c3aed?style=flat-square)
223
+ ![TOML Array Tables](https://img.shields.io/badge/TOML_Array_Tables-0-8b5cf6?style=flat-square)
224
+ ![TOML Keys](https://img.shields.io/badge/TOML_Keys-0-0284c7?style=flat-square)
225
+ ![TOML Arrays](https://img.shields.io/badge/TOML_Arrays-0-16a34a?style=flat-square)
226
+ ![TOML Comments](https://img.shields.io/badge/TOML_Comments-0-64748b?style=flat-square)
227
+
228
+ ### Shell
229
+
230
+ ![Shell Files](https://img.shields.io/badge/Shell_Files-0-89e051?style=flat-square)
231
+ ![Shell Lines](https://img.shields.io/badge/Shell_Lines-0-4eaa25?style=flat-square)
232
+ ![Shell Functions](https://img.shields.io/badge/Shell_Functions-0-16a34a?style=flat-square)
233
+ ![Shell Variables](https://img.shields.io/badge/Shell_Variables-0-0284c7?style=flat-square)
234
+ ![Shell Exports](https://img.shields.io/badge/Shell_Exports-0-ea580c?style=flat-square)
235
+ ![Shell Conditionals](https://img.shields.io/badge/Shell_Conditionals-0-7c3aed?style=flat-square)
236
+ ![Shell Loops](https://img.shields.io/badge/Shell_Loops-0-8b5cf6?style=flat-square)
237
+ ![Shell Pipelines](https://img.shields.io/badge/Shell_Pipelines-0-059669?style=flat-square)
238
+ ![Shebangs](https://img.shields.io/badge/Shebangs-0-6b7280?style=flat-square)
239
+ ![Shell Comments](https://img.shields.io/badge/Shell_Comments-0-64748b?style=flat-square)
240
+ ![Shell Comment Lines](https://img.shields.io/badge/Shell_Comment_Lines-0-475569?style=flat-square)
241
+
242
+ ### SQL
243
+
244
+ ![SQL Files](https://img.shields.io/badge/SQL_Files-0-e38c00?style=flat-square)
245
+ ![SQL Lines](https://img.shields.io/badge/SQL_Lines-0-f29111?style=flat-square)
246
+ ![SQL Statements](https://img.shields.io/badge/SQL_Statements-0-7c3aed?style=flat-square)
247
+ ![SQL Selects](https://img.shields.io/badge/SQL_Selects-0-16a34a?style=flat-square)
248
+ ![SQL Inserts](https://img.shields.io/badge/SQL_Inserts-0-22c55e?style=flat-square)
249
+ ![SQL Updates](https://img.shields.io/badge/SQL_Updates-0-0ea5e9?style=flat-square)
250
+ ![SQL Deletes](https://img.shields.io/badge/SQL_Deletes-0-dc2626?style=flat-square)
251
+ ![SQL Creates](https://img.shields.io/badge/SQL_Creates-0-0284c7?style=flat-square)
252
+ ![SQL Joins](https://img.shields.io/badge/SQL_Joins-0-8b5cf6?style=flat-square)
253
+ ![SQL CTEs](https://img.shields.io/badge/SQL_CTEs-0-059669?style=flat-square)
254
+ ![SQL Comments](https://img.shields.io/badge/SQL_Comments-0-64748b?style=flat-square)
255
+
256
+ ### HCL
257
+
258
+ ![HCL Files](https://img.shields.io/badge/HCL_Files-0-844fba?style=flat-square)
259
+ ![HCL Lines](https://img.shields.io/badge/HCL_Lines-0-a78bfa?style=flat-square)
260
+ ![HCL Blocks](https://img.shields.io/badge/HCL_Blocks-0-7c3aed?style=flat-square)
261
+ ![HCL Resources](https://img.shields.io/badge/HCL_Resources-0-0284c7?style=flat-square)
262
+ ![HCL Variables](https://img.shields.io/badge/HCL_Variables-0-16a34a?style=flat-square)
263
+ ![HCL Outputs](https://img.shields.io/badge/HCL_Outputs-0-059669?style=flat-square)
264
+ ![HCL Attributes](https://img.shields.io/badge/HCL_Attributes-0-0ea5e9?style=flat-square)
265
+ ![HCL Interpolations](https://img.shields.io/badge/HCL_Interpolations-0-db2777?style=flat-square)
266
+ ![HCL Comments](https://img.shields.io/badge/HCL_Comments-0-64748b?style=flat-square)
267
+
268
+ ### CSS
269
+
270
+ ![CSS Files](https://img.shields.io/badge/CSS_Files-0-264de4?style=flat-square)
271
+ ![CSS Lines](https://img.shields.io/badge/CSS_Lines-0-2965f1?style=flat-square)
272
+ ![CSS Rules](https://img.shields.io/badge/CSS_Rules-0-7c3aed?style=flat-square)
273
+ ![CSS Selectors](https://img.shields.io/badge/CSS_Selectors-0-8b5cf6?style=flat-square)
274
+ ![CSS Declarations](https://img.shields.io/badge/CSS_Declarations-0-0284c7?style=flat-square)
275
+ ![CSS At Rules](https://img.shields.io/badge/CSS_At_Rules-0-f97316?style=flat-square)
276
+ ![CSS Media Queries](https://img.shields.io/badge/CSS_Media_Queries-0-ea580c?style=flat-square)
277
+ ![CSS Custom Properties](https://img.shields.io/badge/CSS_Custom_Properties-0-16a34a?style=flat-square)
278
+ ![CSS Comments](https://img.shields.io/badge/CSS_Comments-0-64748b?style=flat-square)
279
+
280
+ ### Conventions
281
+
282
+ ![Module Files](https://img.shields.io/badge/Module_Files-1-7c3aed?style=flat-square)
283
+ ![Service Files](https://img.shields.io/badge/Service_Files-1-0284c7?style=flat-square)
284
+ ![Command Files](https://img.shields.io/badge/Command_Files-0-16a34a?style=flat-square)
285
+ ![Constants Files](https://img.shields.io/badge/Constants_Files-1-ea580c?style=flat-square)
286
+ ![Types Files](https://img.shields.io/badge/Types_Files-1-db2777?style=flat-square)
287
+ ![Utilities Files](https://img.shields.io/badge/Utilities_Files-0-0ea5e9?style=flat-square)
288
+ ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
289
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-2-ca8a04?style=flat-square)
290
+ ![Integration Tests](https://img.shields.io/badge/Integration_Tests-0-7c3aed?style=flat-square)
291
+ ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-0-0284c7?style=flat-square)
292
+ ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
293
+ ![HCL Comment Budget](https://img.shields.io/badge/HCL_Comment_Budget-0-ea580c?style=flat-square)
294
+ ![Python Comment Budget](https://img.shields.io/badge/Python_Comment_Budget-0-db2777?style=flat-square)
295
+ ![SQL Comment Budget](https://img.shields.io/badge/SQL_Comment_Budget-0-0ea5e9?style=flat-square)
296
+ ![TOML Comment Budget](https://img.shields.io/badge/TOML_Comment_Budget-0-059669?style=flat-square)
297
+ ![TypeScript Comment Budget](https://img.shields.io/badge/TypeScript_Comment_Budget-0-ca8a04?style=flat-square)
298
+ ![YAML Comment Budget](https://img.shields.io/badge/YAML_Comment_Budget-0-7c3aed?style=flat-square)
299
+ ![Shell Comment Budget](https://img.shields.io/badge/Shell_Comment_Budget-0-0284c7?style=flat-square)
300
+
301
+ ### Jupyter
302
+
303
+ ![Notebooks](https://img.shields.io/badge/Notebooks-0-f37626?style=flat-square)
304
+ ![Notebook Cells](https://img.shields.io/badge/Notebook_Cells-0-e8a33d?style=flat-square)
305
+ ![Code Cells](https://img.shields.io/badge/Code_Cells-0-3776ab?style=flat-square)
306
+ ![Markdown Cells](https://img.shields.io/badge/Markdown_Cells-0-083fa1?style=flat-square)
307
+ ![Raw Cells](https://img.shields.io/badge/Raw_Cells-0-9ca3af?style=flat-square)
308
+ ![Executed Cells](https://img.shields.io/badge/Executed_Cells-0-16a34a?style=flat-square)
309
+ ![Cell Outputs](https://img.shields.io/badge/Cell_Outputs-0-059669?style=flat-square)
310
+ ![Notebook Code Lines](https://img.shields.io/badge/Notebook_Code_Lines-0-4b8bbe?style=flat-square)
311
+ ![Notebook Classes](https://img.shields.io/badge/Notebook_Classes-0-7c3aed?style=flat-square)
312
+ ![Notebook Functions](https://img.shields.io/badge/Notebook_Functions-0-22c55e?style=flat-square)
313
+ ![Notebook Imports](https://img.shields.io/badge/Notebook_Imports-0-0284c7?style=flat-square)
314
+ ![Notebook Decorators](https://img.shields.io/badge/Notebook_Decorators-0-db2777?style=flat-square)
315
+ ![Notebook Prose Lines](https://img.shields.io/badge/Notebook_Prose_Lines-0-1f6feb?style=flat-square)
316
+ ![Notebook Headings](https://img.shields.io/badge/Notebook_Headings-0-a78bfa?style=flat-square)
317
+ ![Notebook Links](https://img.shields.io/badge/Notebook_Links-0-10b981?style=flat-square)
318
+ ![Notebook Images](https://img.shields.io/badge/Notebook_Images-0-34d399?style=flat-square)
319
+ ![Notebook Code Blocks](https://img.shields.io/badge/Notebook_Code_Blocks-0-dc2626?style=flat-square)
320
+ ![Notebook Properties](https://img.shields.io/badge/Notebook_Properties-0-ca8a04?style=flat-square)
321
+ ![Notebook Nodes](https://img.shields.io/badge/Notebook_Nodes-0-a16207?style=flat-square)
322
+ ![Notebook Max Depth](https://img.shields.io/badge/Notebook_Max_Depth-0-ea580c?style=flat-square)
323
+
324
+ ### Markdown
325
+
326
+ ![Markdown Files](https://img.shields.io/badge/Markdown_Files-1-083fa1?style=flat-square)
327
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-222-1f6feb?style=flat-square)
328
+ ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
329
+ ![H2](https://img.shields.io/badge/H2-7-8b5cf6?style=flat-square)
330
+ ![H3](https://img.shields.io/badge/H3-12-a78bfa?style=flat-square)
331
+ ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
332
+ ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
333
+ ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
334
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-45-64748b?style=flat-square)
335
+ ![Lists](https://img.shields.io/badge/Lists-6-16a34a?style=flat-square)
336
+ ![List Items](https://img.shields.io/badge/List_Items-25-22c55e?style=flat-square)
337
+ ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
338
+ ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
339
+ ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
340
+ ![Links](https://img.shields.io/badge/Links-9-059669?style=flat-square)
341
+ ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
342
+ ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
343
+ ![Inline Code](https://img.shields.io/badge/Inline_Code-73-ef4444?style=flat-square)
344
+ ![Block Quotes](https://img.shields.io/badge/Block_Quotes-0-ca8a04?style=flat-square)
345
+ ![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-0-a16207?style=flat-square)
346
+ <!-- codometer:end -->
@@ -0,0 +1,225 @@
1
+ /**
2
+ * One callable and every distinct callable it calls directly, unfiltered by
3
+ * any limit.
4
+ *
5
+ * Held on a `ProjectReport` the same way `stacks` holds every `CallStack`
6
+ * regardless of `maximumDepth`: computing breadth does not require a
7
+ * configured limit, only reporting a violation does.
8
+ */
9
+ export declare interface CallableBreadthReport {
10
+ readonly breadth: number;
11
+ readonly callees: readonly WideCallableCallee[];
12
+ readonly displayName: string;
13
+ readonly id: CallableId;
14
+ readonly location: SourceLocation;
15
+ /** Absent when the checker could not resolve a signature. */
16
+ readonly signature: CallableSignature | undefined;
17
+ }
18
+
19
+ /** What the documentation comment above a callable says. */
20
+ export declare interface CallableDocumentation {
21
+ readonly isDeprecated: boolean;
22
+ /**
23
+ * The comment's prose in full, newlines collapsed. Empty when it is all tags.
24
+ *
25
+ * Never shortened. How much of it fits belongs to whatever renders it, and
26
+ * a consumer reading this has no line to fit inside.
27
+ */
28
+ readonly summary: string;
29
+ /** Tag names present, without the leading `@`, in source order. */
30
+ readonly tags: readonly string[];
31
+ }
32
+
33
+ /**
34
+ * Stable identifier for one callable: workspace-relative path plus the byte
35
+ * offset its declaration starts at.
36
+ *
37
+ * The offset rather than a line number, because two callables can share a line
38
+ * β€” an arrow property and its enclosing statement do β€” while exactly one
39
+ * declaration can start at one offset.
40
+ */
41
+ export declare type CallableId = string;
42
+
43
+ /** The declaration shape a callable was found as. */
44
+ export declare type CallableKind = "accessor" | "arrow-property" | "callback" | "constructor" | "function" | "method" | "module" | "object-literal-method";
45
+
46
+ /** One function-like declaration in the workspace. */
47
+ export declare interface CallableNode {
48
+ readonly displayName: string;
49
+ readonly enclosingTypeName: string | undefined;
50
+ readonly id: CallableId;
51
+ readonly isExported: boolean;
52
+ readonly kind: CallableKind;
53
+ readonly location: SourceLocation;
54
+ readonly memberName: string;
55
+ readonly projectName: string;
56
+ readonly statementCount: number;
57
+ }
58
+
59
+ /** One parameter of a callable, as the type checker renders it. */
60
+ export declare interface CallableParameter {
61
+ /** True for a parameter with a `?` or a default value. */
62
+ readonly isOptional: boolean;
63
+ readonly isRest: boolean;
64
+ readonly name: string;
65
+ readonly type: string;
66
+ }
67
+
68
+ /** What a callable takes and gives back. */
69
+ export declare interface CallableSignature {
70
+ readonly parameters: readonly CallableParameter[];
71
+ readonly returnType: string;
72
+ /**
73
+ * The whole signature on one line, as TypeScript writes it.
74
+ *
75
+ * Kept alongside the parts because TypeScript renders some shapes better
76
+ * than reassembling them does β€” a destructured parameter reads as
77
+ * `{ alpha, beta }` here and as the synthetic `__0` in `parameters`.
78
+ */
79
+ readonly text: string;
80
+ }
81
+
82
+ /** One caller-to-callee edge, produced by one call site. */
83
+ export declare interface CallEdge {
84
+ readonly calleeId: CallableId;
85
+ readonly callerId: CallableId;
86
+ readonly callSite: SourceLocation;
87
+ /** Above one means a virtual dispatch: the call site had several targets. */
88
+ readonly candidateCount: number;
89
+ readonly resolution: EdgeResolution;
90
+ }
91
+
92
+ /** Everything one callidescope run produced. */
93
+ export declare interface CallGraphResult {
94
+ readonly deepStacks: readonly DeepStackFinding[];
95
+ /** One report per project traced, in the order projects were discovered. */
96
+ readonly projects: readonly ProjectReport[];
97
+ readonly summary: CallGraphSummary;
98
+ readonly wideCallables: readonly WideCallableFinding[];
99
+ }
100
+
101
+ /** Counts describing the graph a run built. */
102
+ export declare interface CallGraphSummary {
103
+ readonly callableCount: number;
104
+ readonly cyclicComponentCount: number;
105
+ readonly edgeCount: number;
106
+ readonly entryPointCount: number;
107
+ readonly fileCount: number;
108
+ readonly maximumDepth: number;
109
+ readonly projectCount: number;
110
+ readonly unresolvedCallCount: number;
111
+ }
112
+
113
+ /**
114
+ * TODO: Document the callidescopeCore module.
115
+ */
116
+ export declare class CallidescopeCoreModule {
117
+ }
118
+
119
+ /**
120
+ * TODO: Document the callidescopeCore service.
121
+ */
122
+ export declare class CallidescopeCoreService {
123
+ constructor();
124
+ }
125
+
126
+ /** One entry point and the deepest stack below it. */
127
+ export declare interface CallStack {
128
+ readonly depth: number;
129
+ readonly entryPointKind: EntryPointKind;
130
+ readonly frames: readonly StackFrame[];
131
+ /**
132
+ * True when a frame on this path holds an unresolved call, making `depth` a
133
+ * floor rather than a measurement.
134
+ */
135
+ readonly isLowerBound: boolean;
136
+ }
137
+
138
+ /** A call stack deeper than the configured limit. */
139
+ export declare interface DeepStackFinding extends CallStack {
140
+ readonly limit: number;
141
+ }
142
+
143
+ /** How a call site was resolved to its target. */
144
+ export declare type EdgeResolution = "alias" | "callback" | "direct" | "implementation" | "super";
145
+
146
+ /** A callable a framework, a runtime, or nothing at all calls. */
147
+ export declare interface EntryPoint {
148
+ readonly callableId: CallableId;
149
+ readonly kind: EntryPointKind;
150
+ }
151
+
152
+ /**
153
+ * What promoted a callable to the root of a call stack.
154
+ *
155
+ * `declared` is the only one a person chose: a configuration named that
156
+ * callable's address outright, saying "this is the surface this package has".
157
+ * Every other kind is inferred β€” from a decorator, a file name, an export, or
158
+ * from nothing at all having called it.
159
+ */
160
+ export declare type EntryPointKind = "declared" | "decorated-method" | "exported-function" | "lifecycle" | "module-bootstrap" | "orphan-root";
161
+
162
+ /**
163
+ * Everything one project contributed to a run.
164
+ *
165
+ * Scoped by the project the entry point sits in, so a section embedded in a
166
+ * project's own README describes that project rather than the workspace.
167
+ */
168
+ export declare interface ProjectReport {
169
+ /** Every callable with at least one direct callee. */
170
+ readonly callableBreadths: readonly CallableBreadthReport[];
171
+ readonly projectName: string;
172
+ /** Every stack that makes at least one call, deepest first. */
173
+ readonly stacks: readonly CallStack[];
174
+ readonly summary: CallGraphSummary;
175
+ }
176
+
177
+ /** Where a declaration or a call site sits. */
178
+ export declare interface SourceLocation {
179
+ readonly column: number;
180
+ /** Workspace-relative, POSIX separators, so reports are machine-independent. */
181
+ readonly filePath: string;
182
+ readonly line: number;
183
+ }
184
+
185
+ /** One frame of a reported call stack. */
186
+ export declare interface StackFrame {
187
+ readonly displayName: string;
188
+ /** Absent when the callable carries no documentation comment. */
189
+ readonly documentation: CallableDocumentation | undefined;
190
+ readonly id: CallableId;
191
+ /** True when this frame belongs to a recursive cycle. */
192
+ readonly isCycle: boolean;
193
+ readonly location: SourceLocation;
194
+ /** Absent when the checker could not resolve a signature. */
195
+ readonly signature: CallableSignature | undefined;
196
+ }
197
+
198
+ /**
199
+ * A call site that produced no edge.
200
+ *
201
+ * Every depth measured through a callable holding one of these is a lower
202
+ * bound, which is why the reason is kept rather than discarded.
203
+ */
204
+ export declare interface UnresolvedCall {
205
+ readonly calleeText: string;
206
+ readonly callerId: CallableId;
207
+ readonly callSite: SourceLocation;
208
+ readonly reason: UnresolvedReason;
209
+ }
210
+
211
+ /** Why a call site produced no edge. */
212
+ export declare type UnresolvedReason = "computed-member" | "dynamic-value" | "generic-parameter" | "no-implementation" | "no-symbol" | "too-many-implementations";
213
+
214
+ /** One callable reached directly by another, named in its breadth report. */
215
+ export declare interface WideCallableCallee {
216
+ readonly displayName: string;
217
+ readonly id: CallableId;
218
+ }
219
+
220
+ /** A callable calling more callables directly than the configured limit. */
221
+ export declare interface WideCallableFinding extends CallableBreadthReport {
222
+ readonly limit: number;
223
+ }
224
+
225
+ export { }
@@ -0,0 +1,30 @@
1
+ import { Injectable as e, Module as t } from "@nestjs/common";
2
+ //#region \0@oxc-project+runtime@0.151.0/helpers/esm/decorateMetadata.js
3
+ function n(e, t) {
4
+ if (typeof Reflect == "object" && typeof Reflect.metadata == "function") return Reflect.metadata(e, t);
5
+ }
6
+ //#endregion
7
+ //#region \0@oxc-project+runtime@0.151.0/helpers/esm/decorate.js
8
+ function r(e, t, n, r) {
9
+ var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
10
+ if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
11
+ else for (var s = e.length - 1; s >= 0; s--) (o = e[s]) && (a = (i < 3 ? o(a) : i > 3 ? o(t, n, a) : o(t, n)) || a);
12
+ return i > 3 && a && Object.defineProperty(t, n, a), a;
13
+ }
14
+ //#endregion
15
+ //#region packages/ic-suite/callidescope/callidescope-core/src/modules/callidescope-core/callidescope-core.service.ts
16
+ var i = class {
17
+ constructor() {}
18
+ };
19
+ i = r([e(), n("design:paramtypes", [])], i);
20
+ //#endregion
21
+ //#region packages/ic-suite/callidescope/callidescope-core/src/modules/callidescope-core/callidescope-core.module.ts
22
+ var a = class {};
23
+ a = r([t({
24
+ controllers: [],
25
+ exports: [i],
26
+ imports: [],
27
+ providers: [i]
28
+ })], a);
29
+ //#endregion
30
+ export { a as CallidescopeCoreModule, i as CallidescopeCoreService };
package/package.json CHANGED
@@ -1,6 +1,60 @@
1
1
  {
2
+ "author": "Jimmy Paolini",
3
+ "bugs": {
4
+ "url": "https://github.com/Organizzolini/codebase/issues"
5
+ },
6
+ "dependencies": {
7
+ "@nestjs/common": "^11.1.21 || ^12.0.1",
8
+ "reflect-metadata": "^0.2.2"
9
+ },
10
+ "description": "Domain vocabulary, call-graph representations, and limit contracts for the Callidescope toolchain",
11
+ "devDependencies": {
12
+ "@golevelup/ts-vitest": "^4.0.0",
13
+ "@nestjs/testing": "^12.0.1",
14
+ "@nx/eslint-plugin": "^23.0.0",
15
+ "@swc/helpers": "^0.5.21",
16
+ "@types/node": "^26.5.1",
17
+ "@vitest/coverage-v8": "^5.0.0",
18
+ "vitest": "^5.0.0"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/src/index.d.ts",
23
+ "default": "./dist/src/index.js"
24
+ },
25
+ "./package.json": "./package.json"
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "LICENSE",
30
+ "README.md"
31
+ ],
32
+ "homepage": "https://github.com/Organizzolini/codebase/tree/main/packages/ic-suite/callidescope/callidescope-core#readme",
33
+ "keywords": [
34
+ "call-graph",
35
+ "call-stack",
36
+ "callidescope",
37
+ "contracts",
38
+ "depth-analysis",
39
+ "types"
40
+ ],
41
+ "license": "MIT",
42
+ "main": "./dist/src/index.js",
2
43
  "name": "@callidescope/core",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
44
+ "publishConfig": {
45
+ "access": "public",
46
+ "registry": "https://registry.npmjs.org"
47
+ },
48
+ "repository": {
49
+ "directory": "packages/ic-suite/callidescope/callidescope-core",
50
+ "type": "git",
51
+ "url": "git+https://github.com/Organizzolini/codebase.git"
52
+ },
53
+ "type": "module",
54
+ "typeCoverage": {
55
+ "atLeast": 100,
56
+ "strict": true
57
+ },
58
+ "types": "./dist/src/index.d.ts",
59
+ "version": "0.0.1"
6
60
  }