@colbymchenry/codegraph-win32-x64 1.2.0 → 1.3.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 (231) hide show
  1. package/lib/dist/bin/codegraph.d.ts +1 -1
  2. package/lib/dist/bin/codegraph.d.ts.map +1 -1
  3. package/lib/dist/bin/codegraph.js +232 -61
  4. package/lib/dist/bin/codegraph.js.map +1 -1
  5. package/lib/dist/bin/command-supervision.d.ts.map +1 -1
  6. package/lib/dist/bin/command-supervision.js +4 -1
  7. package/lib/dist/bin/command-supervision.js.map +1 -1
  8. package/lib/dist/db/index.d.ts +17 -5
  9. package/lib/dist/db/index.d.ts.map +1 -1
  10. package/lib/dist/db/index.js +68 -12
  11. package/lib/dist/db/index.js.map +1 -1
  12. package/lib/dist/db/migrations.d.ts +1 -1
  13. package/lib/dist/db/migrations.d.ts.map +1 -1
  14. package/lib/dist/db/migrations.js +19 -1
  15. package/lib/dist/db/migrations.js.map +1 -1
  16. package/lib/dist/db/queries.d.ts +76 -1
  17. package/lib/dist/db/queries.d.ts.map +1 -1
  18. package/lib/dist/db/queries.js +180 -0
  19. package/lib/dist/db/queries.js.map +1 -1
  20. package/lib/dist/db/schema.sql +19 -0
  21. package/lib/dist/directory.d.ts +9 -5
  22. package/lib/dist/directory.d.ts.map +1 -1
  23. package/lib/dist/directory.js +210 -19
  24. package/lib/dist/directory.js.map +1 -1
  25. package/lib/dist/extraction/cfml-extractor.d.ts +107 -0
  26. package/lib/dist/extraction/cfml-extractor.d.ts.map +1 -0
  27. package/lib/dist/extraction/cfml-extractor.js +494 -0
  28. package/lib/dist/extraction/cfml-extractor.js.map +1 -0
  29. package/lib/dist/extraction/grammars.d.ts +9 -0
  30. package/lib/dist/extraction/grammars.d.ts.map +1 -1
  31. package/lib/dist/extraction/grammars.js +115 -3
  32. package/lib/dist/extraction/grammars.js.map +1 -1
  33. package/lib/dist/extraction/index.d.ts +46 -1
  34. package/lib/dist/extraction/index.d.ts.map +1 -1
  35. package/lib/dist/extraction/index.js +338 -34
  36. package/lib/dist/extraction/index.js.map +1 -1
  37. package/lib/dist/extraction/languages/arkts.d.ts +3 -0
  38. package/lib/dist/extraction/languages/arkts.d.ts.map +1 -0
  39. package/lib/dist/extraction/languages/arkts.js +127 -0
  40. package/lib/dist/extraction/languages/arkts.js.map +1 -0
  41. package/lib/dist/extraction/languages/c-cpp.d.ts +42 -0
  42. package/lib/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  43. package/lib/dist/extraction/languages/c-cpp.js +369 -4
  44. package/lib/dist/extraction/languages/c-cpp.js.map +1 -1
  45. package/lib/dist/extraction/languages/cfquery.d.ts +12 -0
  46. package/lib/dist/extraction/languages/cfquery.d.ts.map +1 -0
  47. package/lib/dist/extraction/languages/cfquery.js +28 -0
  48. package/lib/dist/extraction/languages/cfquery.js.map +1 -0
  49. package/lib/dist/extraction/languages/cfscript.d.ts +3 -0
  50. package/lib/dist/extraction/languages/cfscript.d.ts.map +1 -0
  51. package/lib/dist/extraction/languages/cfscript.js +73 -0
  52. package/lib/dist/extraction/languages/cfscript.js.map +1 -0
  53. package/lib/dist/extraction/languages/cobol.d.ts +33 -0
  54. package/lib/dist/extraction/languages/cobol.d.ts.map +1 -0
  55. package/lib/dist/extraction/languages/cobol.js +499 -0
  56. package/lib/dist/extraction/languages/cobol.js.map +1 -0
  57. package/lib/dist/extraction/languages/erlang.d.ts +3 -0
  58. package/lib/dist/extraction/languages/erlang.d.ts.map +1 -0
  59. package/lib/dist/extraction/languages/erlang.js +350 -0
  60. package/lib/dist/extraction/languages/erlang.js.map +1 -0
  61. package/lib/dist/extraction/languages/index.d.ts.map +1 -1
  62. package/lib/dist/extraction/languages/index.js +18 -0
  63. package/lib/dist/extraction/languages/index.js.map +1 -1
  64. package/lib/dist/extraction/languages/nix.d.ts +3 -0
  65. package/lib/dist/extraction/languages/nix.d.ts.map +1 -0
  66. package/lib/dist/extraction/languages/nix.js +294 -0
  67. package/lib/dist/extraction/languages/nix.js.map +1 -0
  68. package/lib/dist/extraction/languages/solidity.d.ts +3 -0
  69. package/lib/dist/extraction/languages/solidity.d.ts.map +1 -0
  70. package/lib/dist/extraction/languages/solidity.js +293 -0
  71. package/lib/dist/extraction/languages/solidity.js.map +1 -0
  72. package/lib/dist/extraction/languages/terraform.d.ts +3 -0
  73. package/lib/dist/extraction/languages/terraform.d.ts.map +1 -0
  74. package/lib/dist/extraction/languages/terraform.js +641 -0
  75. package/lib/dist/extraction/languages/terraform.js.map +1 -0
  76. package/lib/dist/extraction/languages/vbnet.d.ts +11 -0
  77. package/lib/dist/extraction/languages/vbnet.d.ts.map +1 -0
  78. package/lib/dist/extraction/languages/vbnet.js +141 -0
  79. package/lib/dist/extraction/languages/vbnet.js.map +1 -0
  80. package/lib/dist/extraction/mybatis-extractor.d.ts +30 -10
  81. package/lib/dist/extraction/mybatis-extractor.d.ts.map +1 -1
  82. package/lib/dist/extraction/mybatis-extractor.js +140 -38
  83. package/lib/dist/extraction/mybatis-extractor.js.map +1 -1
  84. package/lib/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
  85. package/lib/dist/extraction/tree-sitter-helpers.js +1 -0
  86. package/lib/dist/extraction/tree-sitter-helpers.js.map +1 -1
  87. package/lib/dist/extraction/tree-sitter-types.d.ts +3 -1
  88. package/lib/dist/extraction/tree-sitter-types.d.ts.map +1 -1
  89. package/lib/dist/extraction/tree-sitter.d.ts +38 -0
  90. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  91. package/lib/dist/extraction/tree-sitter.js +753 -10
  92. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  93. package/lib/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
  94. package/lib/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
  95. package/lib/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
  96. package/lib/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
  97. package/lib/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
  98. package/lib/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
  99. package/lib/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  100. package/lib/dist/extraction/wasm/tree-sitter-terraform.wasm +0 -0
  101. package/lib/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
  102. package/lib/dist/index.d.ts +63 -1
  103. package/lib/dist/index.d.ts.map +1 -1
  104. package/lib/dist/index.js +327 -5
  105. package/lib/dist/index.js.map +1 -1
  106. package/lib/dist/installer/index.d.ts.map +1 -1
  107. package/lib/dist/installer/index.js +3 -1
  108. package/lib/dist/installer/index.js.map +1 -1
  109. package/lib/dist/mcp/daemon.d.ts +25 -3
  110. package/lib/dist/mcp/daemon.d.ts.map +1 -1
  111. package/lib/dist/mcp/daemon.js +62 -8
  112. package/lib/dist/mcp/daemon.js.map +1 -1
  113. package/lib/dist/mcp/dynamic-boundaries.d.ts.map +1 -1
  114. package/lib/dist/mcp/dynamic-boundaries.js +2 -1
  115. package/lib/dist/mcp/dynamic-boundaries.js.map +1 -1
  116. package/lib/dist/mcp/early-ppid.d.ts +26 -0
  117. package/lib/dist/mcp/early-ppid.d.ts.map +1 -0
  118. package/lib/dist/mcp/early-ppid.js +29 -0
  119. package/lib/dist/mcp/early-ppid.js.map +1 -0
  120. package/lib/dist/mcp/index.d.ts.map +1 -1
  121. package/lib/dist/mcp/index.js +21 -4
  122. package/lib/dist/mcp/index.js.map +1 -1
  123. package/lib/dist/mcp/proxy.d.ts.map +1 -1
  124. package/lib/dist/mcp/proxy.js +29 -3
  125. package/lib/dist/mcp/proxy.js.map +1 -1
  126. package/lib/dist/mcp/query-pool.d.ts +14 -0
  127. package/lib/dist/mcp/query-pool.d.ts.map +1 -1
  128. package/lib/dist/mcp/query-pool.js +18 -0
  129. package/lib/dist/mcp/query-pool.js.map +1 -1
  130. package/lib/dist/mcp/session.d.ts.map +1 -1
  131. package/lib/dist/mcp/session.js +6 -0
  132. package/lib/dist/mcp/session.js.map +1 -1
  133. package/lib/dist/mcp/startup-handshake.d.ts +44 -0
  134. package/lib/dist/mcp/startup-handshake.d.ts.map +1 -0
  135. package/lib/dist/mcp/startup-handshake.js +73 -0
  136. package/lib/dist/mcp/startup-handshake.js.map +1 -0
  137. package/lib/dist/mcp/tools.d.ts +22 -0
  138. package/lib/dist/mcp/tools.d.ts.map +1 -1
  139. package/lib/dist/mcp/tools.js +88 -18
  140. package/lib/dist/mcp/tools.js.map +1 -1
  141. package/lib/dist/mcp/transport.d.ts.map +1 -1
  142. package/lib/dist/mcp/transport.js +18 -0
  143. package/lib/dist/mcp/transport.js.map +1 -1
  144. package/lib/dist/project-config.d.ts +38 -0
  145. package/lib/dist/project-config.d.ts.map +1 -1
  146. package/lib/dist/project-config.js +101 -2
  147. package/lib/dist/project-config.js.map +1 -1
  148. package/lib/dist/resolution/c-fnptr-synthesizer.d.ts +2 -1
  149. package/lib/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
  150. package/lib/dist/resolution/c-fnptr-synthesizer.js +170 -146
  151. package/lib/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
  152. package/lib/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  153. package/lib/dist/resolution/callback-synthesizer.js +982 -81
  154. package/lib/dist/resolution/callback-synthesizer.js.map +1 -1
  155. package/lib/dist/resolution/frameworks/cics.d.ts +20 -0
  156. package/lib/dist/resolution/frameworks/cics.d.ts.map +1 -0
  157. package/lib/dist/resolution/frameworks/cics.js +90 -0
  158. package/lib/dist/resolution/frameworks/cics.js.map +1 -0
  159. package/lib/dist/resolution/frameworks/index.d.ts.map +1 -1
  160. package/lib/dist/resolution/frameworks/index.js +6 -0
  161. package/lib/dist/resolution/frameworks/index.js.map +1 -1
  162. package/lib/dist/resolution/frameworks/java.d.ts.map +1 -1
  163. package/lib/dist/resolution/frameworks/java.js +14 -6
  164. package/lib/dist/resolution/frameworks/java.js.map +1 -1
  165. package/lib/dist/resolution/frameworks/terraform.d.ts +38 -0
  166. package/lib/dist/resolution/frameworks/terraform.d.ts.map +1 -0
  167. package/lib/dist/resolution/frameworks/terraform.js +277 -0
  168. package/lib/dist/resolution/frameworks/terraform.js.map +1 -0
  169. package/lib/dist/resolution/goframe-synthesizer.d.ts +2 -1
  170. package/lib/dist/resolution/goframe-synthesizer.d.ts.map +1 -1
  171. package/lib/dist/resolution/goframe-synthesizer.js +8 -3
  172. package/lib/dist/resolution/goframe-synthesizer.js.map +1 -1
  173. package/lib/dist/resolution/import-resolver.d.ts +7 -0
  174. package/lib/dist/resolution/import-resolver.d.ts.map +1 -1
  175. package/lib/dist/resolution/import-resolver.js +129 -4
  176. package/lib/dist/resolution/import-resolver.js.map +1 -1
  177. package/lib/dist/resolution/index.d.ts +49 -6
  178. package/lib/dist/resolution/index.d.ts.map +1 -1
  179. package/lib/dist/resolution/index.js +342 -65
  180. package/lib/dist/resolution/index.js.map +1 -1
  181. package/lib/dist/resolution/name-matcher.d.ts +0 -3
  182. package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
  183. package/lib/dist/resolution/name-matcher.js +225 -33
  184. package/lib/dist/resolution/name-matcher.js.map +1 -1
  185. package/lib/dist/resolution/strip-comments.d.ts +1 -1
  186. package/lib/dist/resolution/strip-comments.d.ts.map +1 -1
  187. package/lib/dist/resolution/strip-comments.js +49 -0
  188. package/lib/dist/resolution/strip-comments.js.map +1 -1
  189. package/lib/dist/resolution/types.d.ts +29 -0
  190. package/lib/dist/resolution/types.d.ts.map +1 -1
  191. package/lib/dist/resolution/workspace-packages.d.ts +10 -0
  192. package/lib/dist/resolution/workspace-packages.d.ts.map +1 -1
  193. package/lib/dist/resolution/workspace-packages.js +142 -4
  194. package/lib/dist/resolution/workspace-packages.js.map +1 -1
  195. package/lib/dist/search/identifier-segments.d.ts +60 -0
  196. package/lib/dist/search/identifier-segments.d.ts.map +1 -0
  197. package/lib/dist/search/identifier-segments.js +176 -0
  198. package/lib/dist/search/identifier-segments.js.map +1 -0
  199. package/lib/dist/sync/git-hooks.d.ts.map +1 -1
  200. package/lib/dist/sync/git-hooks.js +2 -0
  201. package/lib/dist/sync/git-hooks.js.map +1 -1
  202. package/lib/dist/sync/watcher.d.ts +10 -5
  203. package/lib/dist/sync/watcher.d.ts.map +1 -1
  204. package/lib/dist/sync/watcher.js +51 -14
  205. package/lib/dist/sync/watcher.js.map +1 -1
  206. package/lib/dist/sync/worktree.d.ts.map +1 -1
  207. package/lib/dist/sync/worktree.js +5 -0
  208. package/lib/dist/sync/worktree.js.map +1 -1
  209. package/lib/dist/types.d.ts +19 -1
  210. package/lib/dist/types.d.ts.map +1 -1
  211. package/lib/dist/types.js +10 -0
  212. package/lib/dist/types.js.map +1 -1
  213. package/lib/node_modules/.package-lock.json +1 -1
  214. package/lib/package.json +1 -1
  215. package/package.json +1 -1
  216. package/lib/dist/reasoning/config.d.ts +0 -45
  217. package/lib/dist/reasoning/config.d.ts.map +0 -1
  218. package/lib/dist/reasoning/config.js +0 -171
  219. package/lib/dist/reasoning/config.js.map +0 -1
  220. package/lib/dist/reasoning/credentials.d.ts +0 -5
  221. package/lib/dist/reasoning/credentials.d.ts.map +0 -1
  222. package/lib/dist/reasoning/credentials.js +0 -83
  223. package/lib/dist/reasoning/credentials.js.map +0 -1
  224. package/lib/dist/reasoning/login.d.ts +0 -21
  225. package/lib/dist/reasoning/login.d.ts.map +0 -1
  226. package/lib/dist/reasoning/login.js +0 -85
  227. package/lib/dist/reasoning/login.js.map +0 -1
  228. package/lib/dist/reasoning/reasoner.d.ts +0 -43
  229. package/lib/dist/reasoning/reasoner.d.ts.map +0 -1
  230. package/lib/dist/reasoning/reasoner.js +0 -308
  231. package/lib/dist/reasoning/reasoner.js.map +0 -1
@@ -0,0 +1,641 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.terraformExtractor = void 0;
4
+ const tree_sitter_helpers_1 = require("../tree-sitter-helpers");
5
+ // Grammar: tree-sitter-terraform (vendored at src/extraction/wasm/tree-sitter-terraform.wasm,
6
+ // built from @tree-sitter-grammars/tree-sitter-hcl, Apache-2.0). The HCL grammar
7
+ // is intentionally generic: ALL Terraform top-level constructs share the same
8
+ // AST node type `block`, distinguished only by the first `identifier` child
9
+ // (the block "type": resource, variable, data, module, output, locals, …).
10
+ // Labels for resources/data/modules/variables come from `string_lit` children
11
+ // AFTER that first identifier.
12
+ //
13
+ // resource "aws_s3_bucket" "my_bucket" { ... }
14
+ // └─ block
15
+ // ├─ identifier ("resource")
16
+ // ├─ string_lit ("aws_s3_bucket") ← type label
17
+ // ├─ string_lit ("my_bucket") ← name label
18
+ // ├─ block_start
19
+ // ├─ body
20
+ // │ ├─ attribute (identifier "bucket" "=" expression)
21
+ // │ └─ block ("tags" { ... }) ← nested block (skipped)
22
+ // └─ block_end
23
+ //
24
+ // References live inside `expression` subtrees: a leading `identifier` followed
25
+ // by zero or more `get_attr` (`.foo`) nodes. We synthesise qualified-name refs
26
+ // matching the node names emitted above (e.g. `var.region` → unresolved ref
27
+ // `var.region`, which the matcher resolves to the `variable "region"` node).
28
+ /** Built-in references that should NOT be resolved to project nodes. */
29
+ const BUILTIN_HEADS = new Set([
30
+ 'each', // for_each iterator: each.key / each.value
31
+ 'count', // count meta-argument: count.index
32
+ 'self', // provisioner connection self.*
33
+ 'path', // path.module / path.root / path.cwd
34
+ 'terraform', // terraform.workspace
35
+ ]);
36
+ /** Bare strings that we never want to treat as references. */
37
+ const BUILTIN_KEYWORDS = new Set(['null', 'true', 'false']);
38
+ /** Read a string_lit value (skipping the quotes / template start/end tokens). */
39
+ function stringLitValue(node, source) {
40
+ const literal = node.namedChildren.find((c) => c?.type === 'template_literal');
41
+ if (literal)
42
+ return (0, tree_sitter_helpers_1.getNodeText)(literal, source);
43
+ // Empty string ("") parses as quoted_template_start + quoted_template_end
44
+ // with no template_literal — return empty.
45
+ return '';
46
+ }
47
+ /** Block "type" and its label values. Returns null if the block is malformed. */
48
+ function readBlockHeader(block, source) {
49
+ const named = block.namedChildren.filter((c) => c !== null);
50
+ const first = named[0];
51
+ if (!first || first.type !== 'identifier')
52
+ return null;
53
+ const type = (0, tree_sitter_helpers_1.getNodeText)(first, source);
54
+ const labels = [];
55
+ for (let i = 1; i < named.length; i++) {
56
+ const child = named[i];
57
+ if (!child)
58
+ continue;
59
+ if (child.type === 'string_lit') {
60
+ labels.push(stringLitValue(child, source));
61
+ }
62
+ else if (child.type === 'identifier') {
63
+ // HCL allows unquoted identifier labels (rare in Terraform but legal).
64
+ labels.push((0, tree_sitter_helpers_1.getNodeText)(child, source));
65
+ }
66
+ else {
67
+ break;
68
+ }
69
+ }
70
+ return { type, labels };
71
+ }
72
+ /** Find the `body` child of a block (it's after the labels and block_start). */
73
+ function getBlockBody(block) {
74
+ return block.namedChildren.find((c) => c?.type === 'body') ?? null;
75
+ }
76
+ /**
77
+ * Walk an `expression` subtree and emit a reference for every dotted name
78
+ * whose head is a Terraform reference root (var / local / module / data / a
79
+ * resource type name). Skips built-ins.
80
+ *
81
+ * Patterns we recognise:
82
+ * var.X → ref "var.X" (variable "X")
83
+ * local.X → ref "local.X" (locals.X)
84
+ * module.M.O → ref "module.M" (module "M")
85
+ * data.T.N.A → ref "data.T.N" (data "T" "N")
86
+ * T.N[.A] → ref "T.N" (resource "T" "N", e.g. aws_x.y)
87
+ */
88
+ function collectReferences(expr, source, onRef) {
89
+ // BFS for variable_expr and inspect each. variable_expr's only child is an
90
+ // identifier (the head); its siblings via get_attr / index chains live on
91
+ // the parent _expr_term, so walk the parent chain to collect them.
92
+ const queue = [expr];
93
+ while (queue.length) {
94
+ const n = queue.shift();
95
+ if (n.type === 'variable_expr') {
96
+ emitRefFromVariableExpr(n, source, onRef);
97
+ // Don't recurse into the chain we just read — but DO continue scanning
98
+ // siblings (e.g. function call arguments).
99
+ }
100
+ for (const c of n.namedChildren) {
101
+ if (c)
102
+ queue.push(c);
103
+ }
104
+ }
105
+ }
106
+ function emitRefFromVariableExpr(varExpr, source, onRef) {
107
+ const id = varExpr.namedChildren.find((c) => c?.type === 'identifier');
108
+ if (!id)
109
+ return;
110
+ const head = (0, tree_sitter_helpers_1.getNodeText)(id, source);
111
+ if (BUILTIN_HEADS.has(head) || BUILTIN_KEYWORDS.has(head))
112
+ return;
113
+ // Walk get_attr siblings on the parent. The AST shape is roughly:
114
+ // expression > _expr_term (hidden) → variable_expr + get_attr + get_attr + ...
115
+ // tree-sitter exposes _expr_term children flattened on `expression`.
116
+ const attrs = [];
117
+ let cursor = varExpr.nextNamedSibling;
118
+ while (cursor) {
119
+ if (cursor.type === 'get_attr') {
120
+ const attrId = cursor.namedChildren.find((c) => c?.type === 'identifier');
121
+ if (!attrId)
122
+ break;
123
+ attrs.push((0, tree_sitter_helpers_1.getNodeText)(attrId, source));
124
+ cursor = cursor.nextNamedSibling;
125
+ }
126
+ else if (cursor.type === 'index' || cursor.type === 'new_index' || cursor.type === 'legacy_index' || cursor.type === 'splat' || cursor.type === 'attr_splat' || cursor.type === 'full_splat') {
127
+ // foo[0], foo[*], foo.* — keep walking but don't add a segment.
128
+ cursor = cursor.nextNamedSibling;
129
+ }
130
+ else {
131
+ break;
132
+ }
133
+ }
134
+ const line = varExpr.startPosition.row + 1;
135
+ const col = varExpr.startPosition.column;
136
+ for (const qname of qualifyReference(head, attrs))
137
+ onRef(qname, line, col);
138
+ }
139
+ function qualifyReference(head, attrs) {
140
+ switch (head) {
141
+ case 'var':
142
+ // var.X — variable "X"
143
+ return attrs[0] ? [`var.${attrs[0]}`] : [];
144
+ case 'local':
145
+ // local.K — locals attribute K
146
+ return attrs[0] ? [`local.${attrs[0]}`] : [];
147
+ case 'module': {
148
+ // module.M[.OUTPUT] — module "M". A two-segment chain (`module.M.out`)
149
+ // additionally emits a scoped `module.M:output.out` ref that the
150
+ // Terraform resolver bridges to the `output "out"` node inside the
151
+ // module's source directory — the edge that carries impact across the
152
+ // module boundary instead of dead-ending at the declaration. Only the
153
+ // Terraform framework resolver understands the `:`-scoped spelling; if
154
+ // the module's source is a registry/git address the ref simply stays
155
+ // unresolved and the boundary remains visible.
156
+ if (!attrs[0])
157
+ return [];
158
+ const refs = [`module.${attrs[0]}`];
159
+ if (attrs[1])
160
+ refs.push(`module.${attrs[0]}:output.${attrs[1]}`);
161
+ // module.M.outputs.X — the cloudposse/atmos remote-state shape (the
162
+ // remote-state module re-exposes another component's outputs under its
163
+ // `outputs` map). Emit a scoped candidate the resolver bridges to that
164
+ // component's own `output "X"` when the target is provably unique;
165
+ // anything dynamic or ambiguous stays unresolved.
166
+ if (attrs[1] === 'outputs' && attrs[2])
167
+ refs.push(`module.${attrs[0]}:remote-output.${attrs[2]}`);
168
+ return refs;
169
+ }
170
+ case 'data':
171
+ // data.TYPE.NAME[.ATTR] — data "TYPE" "NAME"
172
+ return attrs[0] && attrs[1] ? [`data.${attrs[0]}.${attrs[1]}`] : [];
173
+ default:
174
+ // <type>.<name>[.<attr>...] — managed resource (e.g. aws_s3_bucket.my)
175
+ // Skip plain identifiers with no dotted chain — those are function calls,
176
+ // local-only variables, or template params.
177
+ if (!attrs[0])
178
+ return [];
179
+ return [`${head}.${attrs[0]}`];
180
+ }
181
+ }
182
+ exports.terraformExtractor = {
183
+ // The HCL grammar exposes everything as `block` / `attribute`; the default
184
+ // dispatcher does not know how to read Terraform's first-identifier-as-type
185
+ // convention, so we drive extraction entirely from visitNode below.
186
+ functionTypes: [],
187
+ classTypes: [],
188
+ methodTypes: [],
189
+ interfaceTypes: [],
190
+ structTypes: [],
191
+ enumTypes: [],
192
+ typeAliasTypes: [],
193
+ importTypes: [],
194
+ callTypes: [],
195
+ variableTypes: [],
196
+ nameField: '',
197
+ bodyField: '',
198
+ paramsField: '',
199
+ visitNode: (node, ctx) => {
200
+ if (node.type !== 'block') {
201
+ // .tfvars files carry no blocks — just top-level `name = value`
202
+ // assignments, each of which SETS the root module variable of that
203
+ // name. Reference the variable from the file node so "what sets
204
+ // var.region" is answerable from the graph.
205
+ if (node.type === 'attribute' &&
206
+ ctx.filePath.endsWith('.tfvars') &&
207
+ node.parent?.type === 'body' &&
208
+ node.parent.parent?.type === 'config_file') {
209
+ const idNode = node.namedChildren.find((c) => c?.type === 'identifier');
210
+ const fileNodeId = ctx.nodeStack[0];
211
+ if (idNode && fileNodeId) {
212
+ ctx.addUnresolvedReference({
213
+ fromNodeId: fileNodeId,
214
+ referenceName: `var.${(0, tree_sitter_helpers_1.getNodeText)(idNode, ctx.source)}`,
215
+ referenceKind: 'references',
216
+ line: node.startPosition.row + 1,
217
+ column: node.startPosition.column,
218
+ });
219
+ }
220
+ return true;
221
+ }
222
+ // Let the default walker descend into bodies/expressions; we only claim
223
+ // top-level blocks.
224
+ return false;
225
+ }
226
+ const header = readBlockHeader(node, ctx.source);
227
+ if (!header)
228
+ return false;
229
+ const { type, labels } = header;
230
+ const body = getBlockBody(node);
231
+ // --- locals: every attribute becomes its own constant ---
232
+ if (type === 'locals' && labels.length === 0) {
233
+ emitLocals(body, ctx);
234
+ return true; // we handled everything inside this block
235
+ }
236
+ // --- terraform { ... } settings block — no symbols, no refs to project ---
237
+ if (type === 'terraform' && labels.length === 0) {
238
+ return true;
239
+ }
240
+ // --- moved / import / removed: state-migration blocks. Their from/to
241
+ // attributes hold resource addresses, so a refactor's paper trail joins
242
+ // the graph ("what references aws_instance.old" includes the moved
243
+ // block's file). No symbol is declared — anchor the refs to the file
244
+ // node. Scoped module refs are suppressed: `module.a.aws_x.b` here names
245
+ // a resource INSIDE a module instance, not a module output.
246
+ if ((type === 'moved' || type === 'import' || type === 'removed') && labels.length === 0) {
247
+ const fileNodeId = ctx.nodeStack[0];
248
+ if (body && fileNodeId) {
249
+ emitReferencesInBody(body, ctx, fileNodeId, { suppressScoped: true });
250
+ }
251
+ return true;
252
+ }
253
+ // --- assert { condition = … } (inside check blocks): the condition's
254
+ // references are real dependencies of the check; anchor them to the file
255
+ // node. The check block itself declares no symbol and is left to the
256
+ // default walker, so its nested scoped `data` blocks still index.
257
+ if (type === 'assert' && labels.length === 0) {
258
+ const fileNodeId = ctx.nodeStack[0];
259
+ if (body && fileNodeId) {
260
+ emitReferencesInBody(body, ctx, fileNodeId, { suppressScoped: true });
261
+ }
262
+ return true;
263
+ }
264
+ // --- resource / data / module / variable / output / provider ---
265
+ const decl = describeBlock(type, labels);
266
+ if (!decl) {
267
+ // Unknown top-level block (e.g. nested block hoisted as top-level via
268
+ // walker). Let the default walker continue.
269
+ return false;
270
+ }
271
+ // provider "aws" { alias = "east" } is addressed as `aws.east`; carry the
272
+ // alias in the node so aliased and default configurations of the same
273
+ // provider stop colliding on one qualified name.
274
+ if (type === 'provider' && body && labels[0]) {
275
+ const alias = readStringAttr(body, 'alias', ctx.source);
276
+ if (alias) {
277
+ decl.name = `${labels[0]}.${alias}`;
278
+ decl.qualifiedName = `provider.${labels[0]}.${alias}`;
279
+ decl.signature = `provider "${labels[0]}" alias="${alias}"`;
280
+ }
281
+ }
282
+ const created = ctx.createNode(decl.kind, decl.name, node, {
283
+ qualifiedName: decl.qualifiedName,
284
+ signature: decl.signature,
285
+ isExported: decl.kind === 'variable',
286
+ });
287
+ if (!created)
288
+ return true;
289
+ // Collect references inside this block's body (attribute expressions).
290
+ if (body) {
291
+ ctx.pushScope(created.id);
292
+ try {
293
+ // The `provider` / `providers` meta-arguments select a provider
294
+ // CONFIGURATION (`aws.east`), which the generic expression walk would
295
+ // misread as a resource reference — handle them explicitly and skip
296
+ // them in the walk.
297
+ const skipTopAttrs = new Set();
298
+ if (type === 'resource' || type === 'data') {
299
+ emitProviderSelectionRef(body, ctx, created.id);
300
+ skipTopAttrs.add('provider');
301
+ }
302
+ if (type === 'module') {
303
+ emitModuleProvidersRefs(body, ctx, created.id);
304
+ skipTopAttrs.add('providers');
305
+ }
306
+ emitReferencesInBody(body, ctx, created.id, { skipTopAttrs });
307
+ if (type === 'module' && labels[0]) {
308
+ emitModuleWiring(labels[0], node, body, ctx, created.id);
309
+ }
310
+ }
311
+ finally {
312
+ ctx.popScope();
313
+ }
314
+ }
315
+ return true;
316
+ },
317
+ };
318
+ /**
319
+ * Module meta-arguments — attributes of a `module` block that configure the
320
+ * call itself rather than set one of the child module's input variables.
321
+ */
322
+ const MODULE_META_ARGS = new Set(['source', 'version', 'count', 'for_each', 'providers', 'depends_on']);
323
+ /**
324
+ * Bridge a `module "M" { ... }` block across the module boundary with
325
+ * `:`-scoped references that only the Terraform framework resolver
326
+ * understands (a plain qualified name would let the generic matcher bind
327
+ * them to a same-named symbol in an unrelated module — a wrong edge is
328
+ * worse than none):
329
+ *
330
+ * - `module.M:file` (imports) → the module source directory's
331
+ * entry file, when `source` is a local `./`/`../` path. Registry and
332
+ * git sources emit nothing — an out-of-repo module stays a visible
333
+ * boundary instead of a guessed edge.
334
+ * - `module.M:var.<in>` (references) → the child module's
335
+ * `variable "<in>"` node, one per input attribute. This is what lets
336
+ * "what depends on modules/vpc's var.cidr" reach the callers.
337
+ */
338
+ function emitModuleWiring(moduleName, block, body, ctx, fromNodeId) {
339
+ for (const attr of body.namedChildren) {
340
+ if (!attr || attr.type !== 'attribute')
341
+ continue;
342
+ const idNode = attr.namedChildren.find((c) => c?.type === 'identifier');
343
+ if (!idNode)
344
+ continue;
345
+ const attrName = (0, tree_sitter_helpers_1.getNodeText)(idNode, ctx.source);
346
+ if (attrName === 'source') {
347
+ const expr = attr.namedChildren.find((c) => c?.type === 'expression');
348
+ const lit = expr ? findStringLit(expr) : null;
349
+ const source = lit ? stringLitValue(lit, ctx.source) : '';
350
+ if (source.startsWith('./') || source.startsWith('../')) {
351
+ ctx.addUnresolvedReference({
352
+ fromNodeId,
353
+ referenceName: `module.${moduleName}:file`,
354
+ referenceKind: 'imports',
355
+ line: block.startPosition.row + 1,
356
+ column: block.startPosition.column,
357
+ });
358
+ }
359
+ continue;
360
+ }
361
+ if (MODULE_META_ARGS.has(attrName))
362
+ continue;
363
+ ctx.addUnresolvedReference({
364
+ fromNodeId,
365
+ referenceName: `module.${moduleName}:var.${attrName}`,
366
+ referenceKind: 'references',
367
+ line: attr.startPosition.row + 1,
368
+ column: attr.startPosition.column,
369
+ });
370
+ }
371
+ }
372
+ /** First string_lit anywhere under an expression (source = "./modules/x"). */
373
+ function findStringLit(expr) {
374
+ const queue = [expr];
375
+ while (queue.length) {
376
+ const n = queue.shift();
377
+ if (n.type === 'string_lit')
378
+ return n;
379
+ for (const c of n.namedChildren) {
380
+ if (c)
381
+ queue.push(c);
382
+ }
383
+ }
384
+ return null;
385
+ }
386
+ function describeBlock(type, labels) {
387
+ const [first, second] = labels;
388
+ switch (type) {
389
+ case 'resource': {
390
+ if (!first || !second)
391
+ return null;
392
+ return {
393
+ kind: 'class',
394
+ name: `${first}.${second}`,
395
+ qualifiedName: `${first}.${second}`,
396
+ signature: `resource "${first}" "${second}"`,
397
+ };
398
+ }
399
+ case 'data': {
400
+ if (!first || !second)
401
+ return null;
402
+ return {
403
+ kind: 'class',
404
+ name: `${first}.${second}`,
405
+ qualifiedName: `data.${first}.${second}`,
406
+ signature: `data "${first}" "${second}"`,
407
+ };
408
+ }
409
+ case 'module': {
410
+ if (!first)
411
+ return null;
412
+ return {
413
+ kind: 'module',
414
+ name: first,
415
+ qualifiedName: `module.${first}`,
416
+ signature: `module "${first}"`,
417
+ };
418
+ }
419
+ case 'variable': {
420
+ if (!first)
421
+ return null;
422
+ return {
423
+ kind: 'variable',
424
+ name: first,
425
+ qualifiedName: `var.${first}`,
426
+ signature: `variable "${first}"`,
427
+ };
428
+ }
429
+ case 'output': {
430
+ if (!first)
431
+ return null;
432
+ return {
433
+ kind: 'variable',
434
+ name: first,
435
+ qualifiedName: `output.${first}`,
436
+ signature: `output "${first}"`,
437
+ };
438
+ }
439
+ case 'provider': {
440
+ if (!first)
441
+ return null;
442
+ return {
443
+ kind: 'namespace',
444
+ name: first,
445
+ qualifiedName: `provider.${first}`,
446
+ signature: `provider "${first}"`,
447
+ };
448
+ }
449
+ default:
450
+ return null;
451
+ }
452
+ }
453
+ function emitLocals(body, ctx) {
454
+ if (!body)
455
+ return;
456
+ for (const attr of body.namedChildren) {
457
+ if (!attr || attr.type !== 'attribute')
458
+ continue;
459
+ const idNode = attr.namedChildren.find((c) => c?.type === 'identifier');
460
+ if (!idNode)
461
+ continue;
462
+ const name = (0, tree_sitter_helpers_1.getNodeText)(idNode, ctx.source);
463
+ const created = ctx.createNode('constant', name, attr, {
464
+ qualifiedName: `local.${name}`,
465
+ signature: `local.${name}`,
466
+ });
467
+ if (!created)
468
+ continue;
469
+ const expr = attr.namedChildren.find((c) => c?.type === 'expression');
470
+ if (expr) {
471
+ ctx.pushScope(created.id);
472
+ try {
473
+ collectReferences(expr, ctx.source, (qname, line, column) => {
474
+ ctx.addUnresolvedReference({
475
+ fromNodeId: created.id,
476
+ referenceName: qname,
477
+ referenceKind: 'references',
478
+ line,
479
+ column,
480
+ });
481
+ });
482
+ }
483
+ finally {
484
+ ctx.popScope();
485
+ }
486
+ }
487
+ }
488
+ }
489
+ function emitReferencesInBody(body, ctx, fromNodeId, opts) {
490
+ const queue = [];
491
+ for (const c of body.namedChildren) {
492
+ if (!c)
493
+ continue;
494
+ if (opts?.skipTopAttrs && c.type === 'attribute') {
495
+ const id = c.namedChildren.find((x) => x?.type === 'identifier');
496
+ if (id && opts.skipTopAttrs.has((0, tree_sitter_helpers_1.getNodeText)(id, ctx.source)))
497
+ continue;
498
+ }
499
+ queue.push(c);
500
+ }
501
+ while (queue.length) {
502
+ const n = queue.shift();
503
+ if (n.type === 'expression') {
504
+ collectReferences(n, ctx.source, (qname, line, column) => {
505
+ if (opts?.suppressScoped && qname.includes(':'))
506
+ return;
507
+ ctx.addUnresolvedReference({
508
+ fromNodeId,
509
+ referenceName: qname,
510
+ referenceKind: 'references',
511
+ line,
512
+ column,
513
+ });
514
+ });
515
+ // Don't descend into expression — collectReferences already does.
516
+ continue;
517
+ }
518
+ for (const c of n.namedChildren) {
519
+ if (c)
520
+ queue.push(c);
521
+ }
522
+ }
523
+ }
524
+ /**
525
+ * Value of a direct string attribute of a body (`alias = "east"`), or null.
526
+ */
527
+ function readStringAttr(body, name, source) {
528
+ for (const attr of body.namedChildren) {
529
+ if (!attr || attr.type !== 'attribute')
530
+ continue;
531
+ const idNode = attr.namedChildren.find((c) => c?.type === 'identifier');
532
+ if (!idNode || (0, tree_sitter_helpers_1.getNodeText)(idNode, source) !== name)
533
+ continue;
534
+ const expr = attr.namedChildren.find((c) => c?.type === 'expression');
535
+ const lit = expr ? findStringLit(expr) : null;
536
+ return lit ? stringLitValue(lit, source) : null;
537
+ }
538
+ return null;
539
+ }
540
+ /**
541
+ * `provider = aws.east` (or bare `provider = google-beta`) in a resource/data
542
+ * block selects a provider CONFIGURATION — reference `provider.aws.east` /
543
+ * `provider.google-beta` so the selection links to the aliased provider block
544
+ * instead of being misread as a resource named `aws.east`.
545
+ */
546
+ function emitProviderSelectionRef(body, ctx, fromNodeId) {
547
+ for (const attr of body.namedChildren) {
548
+ if (!attr || attr.type !== 'attribute')
549
+ continue;
550
+ const idNode = attr.namedChildren.find((c) => c?.type === 'identifier');
551
+ if (!idNode || (0, tree_sitter_helpers_1.getNodeText)(idNode, ctx.source) !== 'provider')
552
+ continue;
553
+ const expr = attr.namedChildren.find((c) => c?.type === 'expression');
554
+ if (!expr)
555
+ return;
556
+ const sel = providerSelectionFromExpr(expr, ctx.source);
557
+ if (sel) {
558
+ ctx.addUnresolvedReference({
559
+ fromNodeId,
560
+ referenceName: `provider.${sel}`,
561
+ referenceKind: 'references',
562
+ line: attr.startPosition.row + 1,
563
+ column: attr.startPosition.column,
564
+ });
565
+ }
566
+ return;
567
+ }
568
+ }
569
+ /**
570
+ * `providers = { aws = aws.east, aws.dns = aws.dns }` in a module block maps
571
+ * the child's provider slots (keys) to THIS scope's provider configurations
572
+ * (values) — reference each value.
573
+ */
574
+ function emitModuleProvidersRefs(body, ctx, fromNodeId) {
575
+ for (const attr of body.namedChildren) {
576
+ if (!attr || attr.type !== 'attribute')
577
+ continue;
578
+ const idNode = attr.namedChildren.find((c) => c?.type === 'identifier');
579
+ if (!idNode || (0, tree_sitter_helpers_1.getNodeText)(idNode, ctx.source) !== 'providers')
580
+ continue;
581
+ // Find every object_elem and read its `val` side only — the key names the
582
+ // CHILD module's provider requirement, not a configuration here.
583
+ const queue = [attr];
584
+ while (queue.length) {
585
+ const n = queue.shift();
586
+ if (n.type === 'object_elem') {
587
+ const val = (0, tree_sitter_helpers_1.getChildByField)(n, 'val');
588
+ const sel = val ? providerSelectionFromExpr(val, ctx.source) : null;
589
+ if (sel) {
590
+ ctx.addUnresolvedReference({
591
+ fromNodeId,
592
+ referenceName: `provider.${sel}`,
593
+ referenceKind: 'references',
594
+ line: n.startPosition.row + 1,
595
+ column: n.startPosition.column,
596
+ });
597
+ }
598
+ continue;
599
+ }
600
+ for (const c of n.namedChildren) {
601
+ if (c)
602
+ queue.push(c);
603
+ }
604
+ }
605
+ return;
606
+ }
607
+ }
608
+ /**
609
+ * Read a provider-configuration address (`aws`, `aws.east`, `google-beta`)
610
+ * from an expression. Anything more complex (conditionals, lookups) is
611
+ * dynamic — return null and leave it unresolved.
612
+ */
613
+ function providerSelectionFromExpr(expr, source) {
614
+ const queue = [expr];
615
+ while (queue.length) {
616
+ const n = queue.shift();
617
+ if (n.type === 'variable_expr') {
618
+ const id = n.namedChildren.find((c) => c?.type === 'identifier');
619
+ if (!id)
620
+ return null;
621
+ const head = (0, tree_sitter_helpers_1.getNodeText)(id, source);
622
+ const next = n.nextNamedSibling;
623
+ if (next?.type === 'get_attr') {
624
+ const attrId = next.namedChildren.find((c) => c?.type === 'identifier');
625
+ // A second segment means something dynamic (e.g. var.x.y) — bail.
626
+ if (!attrId || next.nextNamedSibling)
627
+ return null;
628
+ return `${head}.${(0, tree_sitter_helpers_1.getNodeText)(attrId, source)}`;
629
+ }
630
+ return next ? null : head;
631
+ }
632
+ if (n.type === 'function_call' || n.type === 'conditional' || n.type === 'for_expr')
633
+ return null;
634
+ for (const c of n.namedChildren) {
635
+ if (c)
636
+ queue.push(c);
637
+ }
638
+ }
639
+ return null;
640
+ }
641
+ //# sourceMappingURL=terraform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform.js","sourceRoot":"","sources":["../../../src/extraction/languages/terraform.ts"],"names":[],"mappings":"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"}