cli-node-graph 1.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.
Files changed (180) hide show
  1. package/README.md +69 -0
  2. package/dist/analysis/CircularDependencyAnalyzer.d.ts +13 -0
  3. package/dist/analysis/CircularDependencyAnalyzer.d.ts.map +1 -0
  4. package/dist/analysis/CircularDependencyAnalyzer.js +15 -0
  5. package/dist/analysis/CircularDependencyAnalyzer.js.map +1 -0
  6. package/dist/analysis/DeadCodeAnalyzer.d.ts +13 -0
  7. package/dist/analysis/DeadCodeAnalyzer.d.ts.map +1 -0
  8. package/dist/analysis/DeadCodeAnalyzer.js +37 -0
  9. package/dist/analysis/DeadCodeAnalyzer.js.map +1 -0
  10. package/dist/analysis/DependencyAnalyzer.d.ts +16 -0
  11. package/dist/analysis/DependencyAnalyzer.d.ts.map +1 -0
  12. package/dist/analysis/DependencyAnalyzer.js +26 -0
  13. package/dist/analysis/DependencyAnalyzer.js.map +1 -0
  14. package/dist/analysis/ImpactAnalyzer.d.ts +16 -0
  15. package/dist/analysis/ImpactAnalyzer.d.ts.map +1 -0
  16. package/dist/analysis/ImpactAnalyzer.js +26 -0
  17. package/dist/analysis/ImpactAnalyzer.js.map +1 -0
  18. package/dist/analysis/LayerViolationAnalyzer.d.ts +31 -0
  19. package/dist/analysis/LayerViolationAnalyzer.d.ts.map +1 -0
  20. package/dist/analysis/LayerViolationAnalyzer.js +71 -0
  21. package/dist/analysis/LayerViolationAnalyzer.js.map +1 -0
  22. package/dist/cli/ProjectLoader.d.ts +13 -0
  23. package/dist/cli/ProjectLoader.d.ts.map +1 -0
  24. package/dist/cli/ProjectLoader.js +48 -0
  25. package/dist/cli/ProjectLoader.js.map +1 -0
  26. package/dist/cli/index.d.ts +3 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +139 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/config/AnalysisConfig.d.ts +22 -0
  31. package/dist/config/AnalysisConfig.d.ts.map +1 -0
  32. package/dist/config/AnalysisConfig.js +6 -0
  33. package/dist/config/AnalysisConfig.js.map +1 -0
  34. package/dist/exporters/CytoscapeExporter.d.ts +18 -0
  35. package/dist/exporters/CytoscapeExporter.d.ts.map +1 -0
  36. package/dist/exporters/CytoscapeExporter.js +85 -0
  37. package/dist/exporters/CytoscapeExporter.js.map +1 -0
  38. package/dist/exporters/DotExporter.d.ts +13 -0
  39. package/dist/exporters/DotExporter.d.ts.map +1 -0
  40. package/dist/exporters/DotExporter.js +38 -0
  41. package/dist/exporters/DotExporter.js.map +1 -0
  42. package/dist/exporters/GraphExporter.d.ts +7 -0
  43. package/dist/exporters/GraphExporter.d.ts.map +1 -0
  44. package/dist/exporters/GraphExporter.js +2 -0
  45. package/dist/exporters/GraphExporter.js.map +1 -0
  46. package/dist/exporters/GraphMLExporter.d.ts +8 -0
  47. package/dist/exporters/GraphMLExporter.d.ts.map +1 -0
  48. package/dist/exporters/GraphMLExporter.js +30 -0
  49. package/dist/exporters/GraphMLExporter.js.map +1 -0
  50. package/dist/exporters/JsonExporter.d.ts +8 -0
  51. package/dist/exporters/JsonExporter.d.ts.map +1 -0
  52. package/dist/exporters/JsonExporter.js +16 -0
  53. package/dist/exporters/JsonExporter.js.map +1 -0
  54. package/dist/graph/EdgeFactory.d.ts +13 -0
  55. package/dist/graph/EdgeFactory.d.ts.map +1 -0
  56. package/dist/graph/EdgeFactory.js +15 -0
  57. package/dist/graph/EdgeFactory.js.map +1 -0
  58. package/dist/graph/Graph.d.ts +37 -0
  59. package/dist/graph/Graph.d.ts.map +1 -0
  60. package/dist/graph/Graph.js +137 -0
  61. package/dist/graph/Graph.js.map +1 -0
  62. package/dist/graph/GraphAlgorithms.d.ts +28 -0
  63. package/dist/graph/GraphAlgorithms.d.ts.map +1 -0
  64. package/dist/graph/GraphAlgorithms.js +233 -0
  65. package/dist/graph/GraphAlgorithms.js.map +1 -0
  66. package/dist/graph/GraphBuilder.d.ts +10 -0
  67. package/dist/graph/GraphBuilder.d.ts.map +1 -0
  68. package/dist/graph/GraphBuilder.js +71 -0
  69. package/dist/graph/GraphBuilder.js.map +1 -0
  70. package/dist/graph/NodeFactory.d.ts +21 -0
  71. package/dist/graph/NodeFactory.d.ts.map +1 -0
  72. package/dist/graph/NodeFactory.js +53 -0
  73. package/dist/graph/NodeFactory.js.map +1 -0
  74. package/dist/index.d.ts +35 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +24 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/model/EdgeKind.d.ts +22 -0
  79. package/dist/model/EdgeKind.d.ts.map +1 -0
  80. package/dist/model/EdgeKind.js +23 -0
  81. package/dist/model/EdgeKind.js.map +1 -0
  82. package/dist/model/GraphEdge.d.ts +22 -0
  83. package/dist/model/GraphEdge.d.ts.map +1 -0
  84. package/dist/model/GraphEdge.js +2 -0
  85. package/dist/model/GraphEdge.js.map +1 -0
  86. package/dist/model/GraphNode.d.ts +22 -0
  87. package/dist/model/GraphNode.d.ts.map +1 -0
  88. package/dist/model/GraphNode.js +2 -0
  89. package/dist/model/GraphNode.js.map +1 -0
  90. package/dist/model/NodeKind.d.ts +21 -0
  91. package/dist/model/NodeKind.d.ts.map +1 -0
  92. package/dist/model/NodeKind.js +22 -0
  93. package/dist/model/NodeKind.js.map +1 -0
  94. package/dist/parser/ASTWalker.d.ts +21 -0
  95. package/dist/parser/ASTWalker.d.ts.map +1 -0
  96. package/dist/parser/ASTWalker.js +23 -0
  97. package/dist/parser/ASTWalker.js.map +1 -0
  98. package/dist/parser/ProgramFactory.d.ts +15 -0
  99. package/dist/parser/ProgramFactory.d.ts.map +1 -0
  100. package/dist/parser/ProgramFactory.js +65 -0
  101. package/dist/parser/ProgramFactory.js.map +1 -0
  102. package/dist/parser/visitors/CallVisitor.d.ts +17 -0
  103. package/dist/parser/visitors/CallVisitor.d.ts.map +1 -0
  104. package/dist/parser/visitors/CallVisitor.js +111 -0
  105. package/dist/parser/visitors/CallVisitor.js.map +1 -0
  106. package/dist/parser/visitors/ClassVisitor.d.ts +14 -0
  107. package/dist/parser/visitors/ClassVisitor.d.ts.map +1 -0
  108. package/dist/parser/visitors/ClassVisitor.js +87 -0
  109. package/dist/parser/visitors/ClassVisitor.js.map +1 -0
  110. package/dist/parser/visitors/DecoratorVisitor.d.ts +13 -0
  111. package/dist/parser/visitors/DecoratorVisitor.d.ts.map +1 -0
  112. package/dist/parser/visitors/DecoratorVisitor.js +65 -0
  113. package/dist/parser/visitors/DecoratorVisitor.js.map +1 -0
  114. package/dist/parser/visitors/EnumVisitor.d.ts +11 -0
  115. package/dist/parser/visitors/EnumVisitor.d.ts.map +1 -0
  116. package/dist/parser/visitors/EnumVisitor.js +26 -0
  117. package/dist/parser/visitors/EnumVisitor.js.map +1 -0
  118. package/dist/parser/visitors/ExportVisitor.d.ts +16 -0
  119. package/dist/parser/visitors/ExportVisitor.d.ts.map +1 -0
  120. package/dist/parser/visitors/ExportVisitor.js +95 -0
  121. package/dist/parser/visitors/ExportVisitor.js.map +1 -0
  122. package/dist/parser/visitors/FunctionVisitor.d.ts +14 -0
  123. package/dist/parser/visitors/FunctionVisitor.d.ts.map +1 -0
  124. package/dist/parser/visitors/FunctionVisitor.js +74 -0
  125. package/dist/parser/visitors/FunctionVisitor.js.map +1 -0
  126. package/dist/parser/visitors/HeritageVisitor.d.ts +14 -0
  127. package/dist/parser/visitors/HeritageVisitor.d.ts.map +1 -0
  128. package/dist/parser/visitors/HeritageVisitor.js +87 -0
  129. package/dist/parser/visitors/HeritageVisitor.js.map +1 -0
  130. package/dist/parser/visitors/ImportVisitor.d.ts +14 -0
  131. package/dist/parser/visitors/ImportVisitor.d.ts.map +1 -0
  132. package/dist/parser/visitors/ImportVisitor.js +96 -0
  133. package/dist/parser/visitors/ImportVisitor.js.map +1 -0
  134. package/dist/parser/visitors/InterfaceVisitor.d.ts +11 -0
  135. package/dist/parser/visitors/InterfaceVisitor.d.ts.map +1 -0
  136. package/dist/parser/visitors/InterfaceVisitor.js +28 -0
  137. package/dist/parser/visitors/InterfaceVisitor.js.map +1 -0
  138. package/dist/parser/visitors/MethodVisitor.d.ts +11 -0
  139. package/dist/parser/visitors/MethodVisitor.d.ts.map +1 -0
  140. package/dist/parser/visitors/MethodVisitor.js +30 -0
  141. package/dist/parser/visitors/MethodVisitor.js.map +1 -0
  142. package/dist/parser/visitors/TypeReferenceVisitor.d.ts +15 -0
  143. package/dist/parser/visitors/TypeReferenceVisitor.d.ts.map +1 -0
  144. package/dist/parser/visitors/TypeReferenceVisitor.js +85 -0
  145. package/dist/parser/visitors/TypeReferenceVisitor.js.map +1 -0
  146. package/dist/parser/visitors/VariableVisitor.d.ts +11 -0
  147. package/dist/parser/visitors/VariableVisitor.d.ts.map +1 -0
  148. package/dist/parser/visitors/VariableVisitor.js +27 -0
  149. package/dist/parser/visitors/VariableVisitor.js.map +1 -0
  150. package/dist/parser/visitors/context.d.ts +54 -0
  151. package/dist/parser/visitors/context.d.ts.map +1 -0
  152. package/dist/parser/visitors/context.js +117 -0
  153. package/dist/parser/visitors/context.js.map +1 -0
  154. package/dist/resolver/ModuleResolver.d.ts +16 -0
  155. package/dist/resolver/ModuleResolver.d.ts.map +1 -0
  156. package/dist/resolver/ModuleResolver.js +40 -0
  157. package/dist/resolver/ModuleResolver.js.map +1 -0
  158. package/dist/resolver/SymbolResolver.d.ts +15 -0
  159. package/dist/resolver/SymbolResolver.d.ts.map +1 -0
  160. package/dist/resolver/SymbolResolver.js +62 -0
  161. package/dist/resolver/SymbolResolver.js.map +1 -0
  162. package/dist/resolver/TypeResolver.d.ts +13 -0
  163. package/dist/resolver/TypeResolver.d.ts.map +1 -0
  164. package/dist/resolver/TypeResolver.js +32 -0
  165. package/dist/resolver/TypeResolver.js.map +1 -0
  166. package/dist/utils/cache.d.ts +12 -0
  167. package/dist/utils/cache.d.ts.map +1 -0
  168. package/dist/utils/cache.js +38 -0
  169. package/dist/utils/cache.js.map +1 -0
  170. package/dist/utils/id.d.ts +7 -0
  171. package/dist/utils/id.d.ts.map +1 -0
  172. package/dist/utils/id.js +15 -0
  173. package/dist/utils/id.js.map +1 -0
  174. package/dist/utils/path.d.ts +9 -0
  175. package/dist/utils/path.d.ts.map +1 -0
  176. package/dist/utils/path.js +18 -0
  177. package/dist/utils/path.js.map +1 -0
  178. package/docs/ARCHITECTURE.md +100 -0
  179. package/docs/CLI.md +62 -0
  180. package/package.json +58 -0
@@ -0,0 +1,9 @@
1
+ /** Normalize a path to forward slashes. */
2
+ export declare function toPosixPath(filePath: string): string;
3
+ /** Get the folder path for a file. */
4
+ export declare function folderOf(filePath: string): string;
5
+ /** Resolve a path relative to a base directory. */
6
+ export declare function resolveFrom(base: string, target: string): string;
7
+ /** Get relative path from root. */
8
+ export declare function relativeTo(root: string, filePath: string): string;
9
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/utils/path.ts"],"names":[],"mappings":"AAEA,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,sCAAsC;AACtC,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE"}
@@ -0,0 +1,18 @@
1
+ import { dirname, normalize, relative, resolve, sep } from 'node:path';
2
+ /** Normalize a path to forward slashes. */
3
+ export function toPosixPath(filePath) {
4
+ return normalize(filePath).split(sep).join('/');
5
+ }
6
+ /** Get the folder path for a file. */
7
+ export function folderOf(filePath) {
8
+ return toPosixPath(dirname(filePath));
9
+ }
10
+ /** Resolve a path relative to a base directory. */
11
+ export function resolveFrom(base, target) {
12
+ return toPosixPath(resolve(base, target));
13
+ }
14
+ /** Get relative path from root. */
15
+ export function relativeTo(root, filePath) {
16
+ return toPosixPath(relative(root, filePath));
17
+ }
18
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/utils/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEvE,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IACtD,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,QAAgB;IACvD,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,100 @@
1
+ # Architecture
2
+
3
+ ## Overview
4
+
5
+ cli-node-graph uses a layered architecture where each layer is independent and testable.
6
+
7
+ ```
8
+ CLI
9
+
10
+
11
+ Project Loader
12
+
13
+
14
+ TypeScript Program (ProgramFactory)
15
+
16
+
17
+ AST Walker (single traversal)
18
+
19
+
20
+ Visitors (Import, Export, Class, Call, …)
21
+
22
+
23
+ Resolvers (Symbol, Type, Module, Path)
24
+
25
+
26
+ Graph Builder
27
+
28
+
29
+ Graph Database
30
+
31
+ ├── Exporters (JSON, DOT, GraphML, …)
32
+ ├── Analyzers (Cycles, Impact, Dead Code, Layers)
33
+ └── Visualization (React Flow)
34
+ ```
35
+
36
+ ## Layers
37
+
38
+ ### Parser Layer
39
+
40
+ - **ProgramFactory** — Reads `tsconfig.json`, creates `Program`, `TypeChecker`, and filtered source files
41
+ - **ASTWalker** — Single-pass traversal dispatching to all visitors (avoids repeated AST walks)
42
+
43
+ ### Visitor Layer
44
+
45
+ One visitor per concern:
46
+
47
+ | Visitor | Responsibility |
48
+ |---------|---------------|
49
+ | ImportVisitor | Static and dynamic imports |
50
+ | ExportVisitor | Exports and re-exports |
51
+ | ClassVisitor | Classes, methods, properties, constructors |
52
+ | InterfaceVisitor | Interface declarations |
53
+ | EnumVisitor | Enum declarations |
54
+ | FunctionVisitor | Functions, arrow functions, return types |
55
+ | MethodVisitor | Method declarations |
56
+ | VariableVisitor | Variable declarations |
57
+ | CallVisitor | Call expressions resolved via TypeChecker |
58
+ | DecoratorVisitor | Decorator usage |
59
+ | TypeReferenceVisitor | Type references in signatures |
60
+ | HeritageVisitor | extends / implements clauses |
61
+
62
+ ### Resolver Layer
63
+
64
+ - **SymbolResolver** — `getSymbolAtLocation`, alias resolution, cached lookups
65
+ - **TypeResolver** — `getTypeAtLocation`, call signatures, return types
66
+ - **ModuleResolver** — Module specifier → file path resolution
67
+ - **PathResolver** — Project-relative path normalization
68
+
69
+ ### Graph Layer
70
+
71
+ - **Graph** — Indexed in-memory graph (by kind, file, adjacency)
72
+ - **GraphBuilder** — Orchestrates the full pipeline
73
+ - **GraphAlgorithms** — Topological sort, SCCs, shortest path, impact traversal
74
+
75
+ ### Analysis Layer
76
+
77
+ - **CircularDependencyAnalyzer** — Finds all dependency cycles
78
+ - **DeadCodeAnalyzer** — Unused exports, functions, orphan modules
79
+ - **ImpactAnalyzer** — Downstream impact of changes
80
+ - **DependencyAnalyzer** — Coupling metrics
81
+ - **LayerViolationAnalyzer** — Architecture layer rule enforcement
82
+
83
+ ## Design Decisions
84
+
85
+ 1. **Single AST traversal** — All visitors run in one walk to support large codebases (100k+ nodes)
86
+ 2. **TypeChecker-first resolution** — No string matching; all symbol resolution goes through the TS API
87
+ 3. **Cached symbol lookups** — LRU cache prevents repeated TypeChecker calls
88
+ 4. **Indexed graph** — O(1) lookups by kind, file, and adjacency for fast queries
89
+ 5. **Independent exporters** — Each format is a standalone class implementing `GraphExporter`
90
+
91
+ ## Performance Considerations
92
+
93
+ - Indexed adjacency lists for graph queries
94
+ - Symbol lookup cache (10k entries default)
95
+ - Filtered source files (no `.d.ts`, configurable excludes)
96
+ - Graph filtering and cloning for subset analysis
97
+
98
+ ## Extensibility
99
+
100
+ Add new node/edge kinds in `model/`, create a new visitor in `parser/visitors/`, register it in `GraphBuilder`. Add new exporters by implementing `GraphExporter`.
package/docs/CLI.md ADDED
@@ -0,0 +1,62 @@
1
+ # CLI Reference
2
+
3
+ ## Commands
4
+
5
+ ### `cli-node-graph analyze [path]`
6
+
7
+ Analyze a TypeScript project and build the dependency graph.
8
+
9
+ ```bash
10
+ cli-node-graph analyze .
11
+ cli-node-graph analyze ./apps/api --tsconfig tsconfig.app.json
12
+ ```
13
+
14
+ ### `cli-node-graph graph [path]`
15
+
16
+ Show summary statistics of the cached or last-analyzed graph.
17
+
18
+ ### `cli-node-graph export [path] --format <format>`
19
+
20
+ Export the graph to a file format.
21
+
22
+ | Format | Description |
23
+ |--------|-------------|
24
+ | `json` | Full graph as JSON |
25
+ | `dot` | Graphviz DOT |
26
+ | `graphml` | GraphML XML |
27
+ | `mermaid` | Mermaid diagram |
28
+ | `cytoscape` | Cytoscape.js elements |
29
+ | `reactflow` | React Flow nodes/edges |
30
+ | `neo4j` | Neo4j CSV import |
31
+
32
+ ```bash
33
+ cli-node-graph export . --format json -o graph.json
34
+ cli-node-graph export . --format dot -o graph.dot
35
+ cli-node-graph export . --format reactflow -o graph.json
36
+ ```
37
+
38
+ ### `cli-node-graph cycles [path]`
39
+
40
+ Detect and list all circular dependencies.
41
+
42
+ ### `cli-node-graph impact <target> [path]`
43
+
44
+ Analyze downstream impact of modifying a file or symbol.
45
+
46
+ ```bash
47
+ cli-node-graph impact src/UserService.ts
48
+ cli-node-graph impact UserController
49
+ ```
50
+
51
+ ### `cli-node-graph stats [path]`
52
+
53
+ Show detailed graph statistics (node/edge counts by kind).
54
+
55
+ ## Cache
56
+
57
+ Analysis results are cached in `.cli-node-graph/graph.json` in the project root.
58
+
59
+ ## Exit Codes
60
+
61
+ - `0` — Success
62
+ - `1` — Error (missing graph, unknown format, node not found)
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "cli-node-graph",
3
+ "version": "1.0.1",
4
+ "description": "TypeScript codebase knowledge graph analyzer (Nx-style)",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": ["dist", "README.md", "LICENSE", "docs"],
9
+ "bin": {
10
+ "cli-node-graph": "./dist/cli/index.js"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ }
17
+ },
18
+ "scripts": {
19
+ "build": "tsc -p tsconfig.build.json",
20
+ "dev": "tsx src/cli/index.ts",
21
+ "cli-node-graph": "tsx src/cli/index.ts",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
+ "lint": "eslint src tests --ext .ts",
25
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
26
+ "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
27
+ "typecheck": "tsc --noEmit",
28
+ "prepack": "pnpm build",
29
+ "prepublishOnly": "pnpm test && pnpm build"
30
+ },
31
+ "engines": {
32
+ "node": ">=22.0.0"
33
+ },
34
+ "keywords": [
35
+ "typescript",
36
+ "dependency-graph",
37
+ "static-analysis",
38
+ "code-intelligence"
39
+ ],
40
+ "license": "MIT",
41
+ "dependencies": {
42
+ "commander": "^13.1.0",
43
+ "fast-glob": "^3.3.3"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^22.13.10",
47
+ "@typescript-eslint/eslint-plugin": "^8.26.1",
48
+ "@typescript-eslint/parser": "^8.26.1",
49
+ "eslint": "^9.22.0",
50
+ "prettier": "^3.5.3",
51
+ "tsx": "^4.19.3",
52
+ "typescript": "^5.8.2",
53
+ "vitest": "^3.0.9"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public"
57
+ }
58
+ }