@colbymchenry/codegraph-win32-x64 1.1.6 → 1.3.0

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 (219) 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 +14 -1
  7. package/lib/dist/bin/command-supervision.js.map +1 -1
  8. package/lib/dist/db/migrations.d.ts +1 -1
  9. package/lib/dist/db/migrations.d.ts.map +1 -1
  10. package/lib/dist/db/migrations.js +19 -1
  11. package/lib/dist/db/migrations.js.map +1 -1
  12. package/lib/dist/db/queries.d.ts +51 -0
  13. package/lib/dist/db/queries.d.ts.map +1 -1
  14. package/lib/dist/db/queries.js +141 -0
  15. package/lib/dist/db/queries.js.map +1 -1
  16. package/lib/dist/db/schema.sql +19 -0
  17. package/lib/dist/directory.d.ts +9 -5
  18. package/lib/dist/directory.d.ts.map +1 -1
  19. package/lib/dist/directory.js +210 -19
  20. package/lib/dist/directory.js.map +1 -1
  21. package/lib/dist/extraction/cfml-extractor.d.ts +107 -0
  22. package/lib/dist/extraction/cfml-extractor.d.ts.map +1 -0
  23. package/lib/dist/extraction/cfml-extractor.js +494 -0
  24. package/lib/dist/extraction/cfml-extractor.js.map +1 -0
  25. package/lib/dist/extraction/grammars.d.ts +9 -0
  26. package/lib/dist/extraction/grammars.d.ts.map +1 -1
  27. package/lib/dist/extraction/grammars.js +115 -3
  28. package/lib/dist/extraction/grammars.js.map +1 -1
  29. package/lib/dist/extraction/index.d.ts +46 -1
  30. package/lib/dist/extraction/index.d.ts.map +1 -1
  31. package/lib/dist/extraction/index.js +254 -3
  32. package/lib/dist/extraction/index.js.map +1 -1
  33. package/lib/dist/extraction/languages/arkts.d.ts +3 -0
  34. package/lib/dist/extraction/languages/arkts.d.ts.map +1 -0
  35. package/lib/dist/extraction/languages/arkts.js +127 -0
  36. package/lib/dist/extraction/languages/arkts.js.map +1 -0
  37. package/lib/dist/extraction/languages/c-cpp.d.ts +59 -0
  38. package/lib/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  39. package/lib/dist/extraction/languages/c-cpp.js +499 -3
  40. package/lib/dist/extraction/languages/c-cpp.js.map +1 -1
  41. package/lib/dist/extraction/languages/cfquery.d.ts +12 -0
  42. package/lib/dist/extraction/languages/cfquery.d.ts.map +1 -0
  43. package/lib/dist/extraction/languages/cfquery.js +28 -0
  44. package/lib/dist/extraction/languages/cfquery.js.map +1 -0
  45. package/lib/dist/extraction/languages/cfscript.d.ts +3 -0
  46. package/lib/dist/extraction/languages/cfscript.d.ts.map +1 -0
  47. package/lib/dist/extraction/languages/cfscript.js +73 -0
  48. package/lib/dist/extraction/languages/cfscript.js.map +1 -0
  49. package/lib/dist/extraction/languages/cobol.d.ts +33 -0
  50. package/lib/dist/extraction/languages/cobol.d.ts.map +1 -0
  51. package/lib/dist/extraction/languages/cobol.js +499 -0
  52. package/lib/dist/extraction/languages/cobol.js.map +1 -0
  53. package/lib/dist/extraction/languages/erlang.d.ts +3 -0
  54. package/lib/dist/extraction/languages/erlang.d.ts.map +1 -0
  55. package/lib/dist/extraction/languages/erlang.js +350 -0
  56. package/lib/dist/extraction/languages/erlang.js.map +1 -0
  57. package/lib/dist/extraction/languages/index.d.ts.map +1 -1
  58. package/lib/dist/extraction/languages/index.js +18 -0
  59. package/lib/dist/extraction/languages/index.js.map +1 -1
  60. package/lib/dist/extraction/languages/nix.d.ts +3 -0
  61. package/lib/dist/extraction/languages/nix.d.ts.map +1 -0
  62. package/lib/dist/extraction/languages/nix.js +294 -0
  63. package/lib/dist/extraction/languages/nix.js.map +1 -0
  64. package/lib/dist/extraction/languages/solidity.d.ts +3 -0
  65. package/lib/dist/extraction/languages/solidity.d.ts.map +1 -0
  66. package/lib/dist/extraction/languages/solidity.js +293 -0
  67. package/lib/dist/extraction/languages/solidity.js.map +1 -0
  68. package/lib/dist/extraction/languages/terraform.d.ts +3 -0
  69. package/lib/dist/extraction/languages/terraform.d.ts.map +1 -0
  70. package/lib/dist/extraction/languages/terraform.js +641 -0
  71. package/lib/dist/extraction/languages/terraform.js.map +1 -0
  72. package/lib/dist/extraction/languages/vbnet.d.ts +11 -0
  73. package/lib/dist/extraction/languages/vbnet.d.ts.map +1 -0
  74. package/lib/dist/extraction/languages/vbnet.js +141 -0
  75. package/lib/dist/extraction/languages/vbnet.js.map +1 -0
  76. package/lib/dist/extraction/mybatis-extractor.d.ts +30 -10
  77. package/lib/dist/extraction/mybatis-extractor.d.ts.map +1 -1
  78. package/lib/dist/extraction/mybatis-extractor.js +140 -38
  79. package/lib/dist/extraction/mybatis-extractor.js.map +1 -1
  80. package/lib/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
  81. package/lib/dist/extraction/tree-sitter-helpers.js +1 -0
  82. package/lib/dist/extraction/tree-sitter-helpers.js.map +1 -1
  83. package/lib/dist/extraction/tree-sitter-types.d.ts +20 -1
  84. package/lib/dist/extraction/tree-sitter-types.d.ts.map +1 -1
  85. package/lib/dist/extraction/tree-sitter.d.ts +38 -0
  86. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  87. package/lib/dist/extraction/tree-sitter.js +845 -16
  88. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  89. package/lib/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
  90. package/lib/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
  91. package/lib/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
  92. package/lib/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
  93. package/lib/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
  94. package/lib/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
  95. package/lib/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  96. package/lib/dist/extraction/wasm/tree-sitter-terraform.wasm +0 -0
  97. package/lib/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
  98. package/lib/dist/graph/traversal.d.ts.map +1 -1
  99. package/lib/dist/graph/traversal.js +76 -17
  100. package/lib/dist/graph/traversal.js.map +1 -1
  101. package/lib/dist/index.d.ts +63 -1
  102. package/lib/dist/index.d.ts.map +1 -1
  103. package/lib/dist/index.js +310 -6
  104. package/lib/dist/index.js.map +1 -1
  105. package/lib/dist/installer/index.d.ts.map +1 -1
  106. package/lib/dist/installer/index.js +3 -1
  107. package/lib/dist/installer/index.js.map +1 -1
  108. package/lib/dist/mcp/daemon.d.ts +25 -3
  109. package/lib/dist/mcp/daemon.d.ts.map +1 -1
  110. package/lib/dist/mcp/daemon.js +39 -7
  111. package/lib/dist/mcp/daemon.js.map +1 -1
  112. package/lib/dist/mcp/dynamic-boundaries.d.ts.map +1 -1
  113. package/lib/dist/mcp/dynamic-boundaries.js +2 -1
  114. package/lib/dist/mcp/dynamic-boundaries.js.map +1 -1
  115. package/lib/dist/mcp/early-ppid.d.ts +26 -0
  116. package/lib/dist/mcp/early-ppid.d.ts.map +1 -0
  117. package/lib/dist/mcp/early-ppid.js +29 -0
  118. package/lib/dist/mcp/early-ppid.js.map +1 -0
  119. package/lib/dist/mcp/index.d.ts.map +1 -1
  120. package/lib/dist/mcp/index.js +21 -4
  121. package/lib/dist/mcp/index.js.map +1 -1
  122. package/lib/dist/mcp/proxy.d.ts.map +1 -1
  123. package/lib/dist/mcp/proxy.js +21 -3
  124. package/lib/dist/mcp/proxy.js.map +1 -1
  125. package/lib/dist/mcp/startup-handshake.d.ts +44 -0
  126. package/lib/dist/mcp/startup-handshake.d.ts.map +1 -0
  127. package/lib/dist/mcp/startup-handshake.js +73 -0
  128. package/lib/dist/mcp/startup-handshake.js.map +1 -0
  129. package/lib/dist/mcp/tools.d.ts +22 -0
  130. package/lib/dist/mcp/tools.d.ts.map +1 -1
  131. package/lib/dist/mcp/tools.js +74 -9
  132. package/lib/dist/mcp/tools.js.map +1 -1
  133. package/lib/dist/project-config.d.ts +38 -0
  134. package/lib/dist/project-config.d.ts.map +1 -1
  135. package/lib/dist/project-config.js +101 -2
  136. package/lib/dist/project-config.js.map +1 -1
  137. package/lib/dist/resolution/callback-synthesizer.d.ts +1 -1
  138. package/lib/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  139. package/lib/dist/resolution/callback-synthesizer.js +743 -11
  140. package/lib/dist/resolution/callback-synthesizer.js.map +1 -1
  141. package/lib/dist/resolution/cooperative-yield.d.ts +32 -0
  142. package/lib/dist/resolution/cooperative-yield.d.ts.map +1 -0
  143. package/lib/dist/resolution/cooperative-yield.js +42 -0
  144. package/lib/dist/resolution/cooperative-yield.js.map +1 -0
  145. package/lib/dist/resolution/frameworks/cics.d.ts +20 -0
  146. package/lib/dist/resolution/frameworks/cics.d.ts.map +1 -0
  147. package/lib/dist/resolution/frameworks/cics.js +90 -0
  148. package/lib/dist/resolution/frameworks/cics.js.map +1 -0
  149. package/lib/dist/resolution/frameworks/index.d.ts.map +1 -1
  150. package/lib/dist/resolution/frameworks/index.js +6 -0
  151. package/lib/dist/resolution/frameworks/index.js.map +1 -1
  152. package/lib/dist/resolution/frameworks/java.d.ts.map +1 -1
  153. package/lib/dist/resolution/frameworks/java.js +14 -6
  154. package/lib/dist/resolution/frameworks/java.js.map +1 -1
  155. package/lib/dist/resolution/frameworks/terraform.d.ts +38 -0
  156. package/lib/dist/resolution/frameworks/terraform.d.ts.map +1 -0
  157. package/lib/dist/resolution/frameworks/terraform.js +277 -0
  158. package/lib/dist/resolution/frameworks/terraform.js.map +1 -0
  159. package/lib/dist/resolution/import-resolver.d.ts +7 -0
  160. package/lib/dist/resolution/import-resolver.d.ts.map +1 -1
  161. package/lib/dist/resolution/import-resolver.js +129 -4
  162. package/lib/dist/resolution/import-resolver.js.map +1 -1
  163. package/lib/dist/resolution/index.d.ts +44 -2
  164. package/lib/dist/resolution/index.d.ts.map +1 -1
  165. package/lib/dist/resolution/index.js +335 -30
  166. package/lib/dist/resolution/index.js.map +1 -1
  167. package/lib/dist/resolution/name-matcher.d.ts +22 -3
  168. package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
  169. package/lib/dist/resolution/name-matcher.js +484 -39
  170. package/lib/dist/resolution/name-matcher.js.map +1 -1
  171. package/lib/dist/resolution/strip-comments.d.ts +1 -1
  172. package/lib/dist/resolution/strip-comments.d.ts.map +1 -1
  173. package/lib/dist/resolution/strip-comments.js +49 -0
  174. package/lib/dist/resolution/strip-comments.js.map +1 -1
  175. package/lib/dist/resolution/types.d.ts +20 -0
  176. package/lib/dist/resolution/types.d.ts.map +1 -1
  177. package/lib/dist/resolution/workspace-packages.d.ts +10 -0
  178. package/lib/dist/resolution/workspace-packages.d.ts.map +1 -1
  179. package/lib/dist/resolution/workspace-packages.js +142 -4
  180. package/lib/dist/resolution/workspace-packages.js.map +1 -1
  181. package/lib/dist/search/identifier-segments.d.ts +60 -0
  182. package/lib/dist/search/identifier-segments.d.ts.map +1 -0
  183. package/lib/dist/search/identifier-segments.js +176 -0
  184. package/lib/dist/search/identifier-segments.js.map +1 -0
  185. package/lib/dist/sync/git-hooks.d.ts.map +1 -1
  186. package/lib/dist/sync/git-hooks.js +2 -0
  187. package/lib/dist/sync/git-hooks.js.map +1 -1
  188. package/lib/dist/sync/watcher.d.ts +10 -5
  189. package/lib/dist/sync/watcher.d.ts.map +1 -1
  190. package/lib/dist/sync/watcher.js +51 -14
  191. package/lib/dist/sync/watcher.js.map +1 -1
  192. package/lib/dist/sync/worktree.d.ts.map +1 -1
  193. package/lib/dist/sync/worktree.js +5 -0
  194. package/lib/dist/sync/worktree.js.map +1 -1
  195. package/lib/dist/types.d.ts +19 -1
  196. package/lib/dist/types.d.ts.map +1 -1
  197. package/lib/dist/types.js +10 -0
  198. package/lib/dist/types.js.map +1 -1
  199. package/lib/dist/upgrade/index.js +1 -1
  200. package/lib/dist/upgrade/index.js.map +1 -1
  201. package/lib/node_modules/.package-lock.json +1 -1
  202. package/lib/package.json +1 -1
  203. package/package.json +1 -1
  204. package/lib/dist/reasoning/config.d.ts +0 -45
  205. package/lib/dist/reasoning/config.d.ts.map +0 -1
  206. package/lib/dist/reasoning/config.js +0 -171
  207. package/lib/dist/reasoning/config.js.map +0 -1
  208. package/lib/dist/reasoning/credentials.d.ts +0 -5
  209. package/lib/dist/reasoning/credentials.d.ts.map +0 -1
  210. package/lib/dist/reasoning/credentials.js +0 -83
  211. package/lib/dist/reasoning/credentials.js.map +0 -1
  212. package/lib/dist/reasoning/login.d.ts +0 -21
  213. package/lib/dist/reasoning/login.d.ts.map +0 -1
  214. package/lib/dist/reasoning/login.js +0 -85
  215. package/lib/dist/reasoning/login.js.map +0 -1
  216. package/lib/dist/reasoning/reasoner.d.ts +0 -43
  217. package/lib/dist/reasoning/reasoner.d.ts.map +0 -1
  218. package/lib/dist/reasoning/reasoner.js +0 -308
  219. package/lib/dist/reasoning/reasoner.js.map +0 -1
@@ -0,0 +1,494 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CfmlExtractor = void 0;
4
+ exports.isBareScriptCfml = isBareScriptCfml;
5
+ const tree_sitter_helpers_1 = require("./tree-sitter-helpers");
6
+ const tree_sitter_1 = require("./tree-sitter");
7
+ const grammars_1 = require("./grammars");
8
+ /**
9
+ * CfmlExtractor - Extracts code relationships from CFML source (.cfc/.cfm).
10
+ *
11
+ * tree-sitter-cfml splits CFML into two related grammars: `cfml` (tag-based —
12
+ * `<cfcomponent>`/`<cffunction>`/HTML) and `cfscript` (modern bare-script
13
+ * `component { ... }` syntax). The `cfml` grammar's own injections.scm treats
14
+ * bare-script content as an opaque blob meant to be re-parsed by `cfscript` —
15
+ * that re-parsing only happens at the editor/highlighting layer, not in the
16
+ * raw AST, so this extractor replicates it: a file whose first real token
17
+ * isn't `<` is delegated wholesale to the cfscript grammar (the dominant
18
+ * modern style); otherwise the file is walked tag-by-tag with the cfml
19
+ * grammar, delegating any `<cfscript>` tag bodies the same way.
20
+ */
21
+ class CfmlExtractor {
22
+ filePath;
23
+ source;
24
+ language;
25
+ nodes = [];
26
+ edges = [];
27
+ unresolvedReferences = [];
28
+ errors = [];
29
+ /** `language` is the file's detected language — `'cfml'` for `.cfc`/`.cfm`, `'cfscript'` for `.cfs`. Both dialect-switch internally; this only controls the language tag stamped onto emitted nodes/refs. */
30
+ constructor(filePath, source, language = 'cfml') {
31
+ this.filePath = filePath;
32
+ this.source = source;
33
+ this.language = language;
34
+ }
35
+ extract() {
36
+ const startTime = Date.now();
37
+ try {
38
+ if (isBareScriptCfml(this.source)) {
39
+ this.extractBareScript();
40
+ }
41
+ else {
42
+ this.extractTagBased();
43
+ }
44
+ }
45
+ catch (error) {
46
+ this.errors.push({
47
+ message: `CFML extraction error: ${error instanceof Error ? error.message : String(error)}`,
48
+ severity: 'error',
49
+ code: 'parse_error',
50
+ });
51
+ }
52
+ return {
53
+ nodes: this.nodes,
54
+ edges: this.edges,
55
+ unresolvedReferences: this.unresolvedReferences,
56
+ errors: this.errors,
57
+ durationMs: Date.now() - startTime,
58
+ };
59
+ }
60
+ /** Modern bare-script `.cfc`/`.cfm`: delegate the whole file to the cfscript grammar. */
61
+ extractBareScript() {
62
+ const extractor = new tree_sitter_1.TreeSitterExtractor(this.filePath, this.source, 'cfscript');
63
+ const result = extractor.extract();
64
+ // cfscript's `component`/`interface` node has no `name` field — a CFC's
65
+ // component name is always implicit from its file name, never declared
66
+ // in source — so the generic extractor names it '<anonymous>'.
67
+ const componentName = this.componentNameFromPath();
68
+ for (const node of result.nodes) {
69
+ node.language = this.language;
70
+ if (node.name === '<anonymous>' && (node.kind === 'class' || node.kind === 'interface')) {
71
+ node.name = componentName;
72
+ node.qualifiedName = `${this.filePath}::${componentName}`;
73
+ }
74
+ else if (node.qualifiedName === '<anonymous>' || node.qualifiedName.startsWith('<anonymous>::')) {
75
+ // Members were scoped under the anonymous component (`<anonymous>::save`)
76
+ // — carry the rename into their scope chains so type-validated method
77
+ // resolution (which wants `UserService::save`, see resolveMethodOnType)
78
+ // can match them. Inner genuinely-anonymous segments are untouched.
79
+ node.qualifiedName = componentName + node.qualifiedName.slice('<anonymous>'.length);
80
+ }
81
+ this.nodes.push(node);
82
+ }
83
+ this.edges.push(...result.edges);
84
+ for (const ref of result.unresolvedReferences) {
85
+ ref.language = this.language;
86
+ this.unresolvedReferences.push(ref);
87
+ }
88
+ this.errors.push(...result.errors);
89
+ }
90
+ /** Legacy tag-based CFML: walk `<cfcomponent>`/`<cffunction>`, delegating `<cfscript>` bodies. */
91
+ extractTagBased() {
92
+ const parser = (0, grammars_1.getParser)('cfml');
93
+ if (!parser) {
94
+ this.errors.push({
95
+ message: 'cfml grammar not loaded',
96
+ severity: 'error',
97
+ code: 'unsupported_language',
98
+ });
99
+ return;
100
+ }
101
+ const tree = parser.parse(this.source);
102
+ if (!tree) {
103
+ this.errors.push({
104
+ message: 'Failed to parse CFML source',
105
+ severity: 'error',
106
+ code: 'parse_error',
107
+ });
108
+ return;
109
+ }
110
+ const fileNode = this.createFileNode();
111
+ this.walkProgram(tree.rootNode, fileNode.id);
112
+ }
113
+ /** Build the file's own `kind:'file'` node, spanning the whole source. Tag-based files need this explicitly — unlike `extractBareScript` (which delegates the whole file to `TreeSitterExtractor` and inherits its file node), `extractTagBased` walks the tree itself and has no other source of one. */
114
+ createFileNode() {
115
+ const lines = this.source.split('\n');
116
+ const id = (0, tree_sitter_helpers_1.generateNodeId)(this.filePath, 'file', this.filePath, 1);
117
+ const fileNode = {
118
+ id,
119
+ kind: 'file',
120
+ name: this.filePath.split(/[/\\]/).pop() || this.filePath,
121
+ qualifiedName: this.filePath,
122
+ filePath: this.filePath,
123
+ language: this.language,
124
+ startLine: 1,
125
+ endLine: lines.length,
126
+ startColumn: 0,
127
+ endColumn: lines[lines.length - 1]?.length || 0,
128
+ updatedAt: Date.now(),
129
+ };
130
+ this.nodes.push(fileNode);
131
+ return fileNode;
132
+ }
133
+ /**
134
+ * Walks `program`'s named children with a single forward cursor (not an
135
+ * index loop) — `extractComponent` consumes a variable run of FOLLOWING
136
+ * siblings as the component body (see its doc comment), so this must
137
+ * resume from whatever it last consumed rather than revisiting those same
138
+ * cffunction/cfscript siblings a second time as bogus top-level symbols.
139
+ */
140
+ walkProgram(root, fileNodeId) {
141
+ let child = root.namedChild(0);
142
+ while (child) {
143
+ if (child.type === 'cf_component_open_tag') {
144
+ child = this.extractComponent(child, fileNodeId).nextSibling;
145
+ continue;
146
+ }
147
+ else if (child.type === 'cf_function_tag') {
148
+ // A cffunction outside any cfcomponent wrapper (rare, but legal in a
149
+ // .cfm template) — extract as a top-level function, contained by the file.
150
+ this.extractFunctionTag(child, undefined, fileNodeId);
151
+ }
152
+ else if (child.type === 'cf_script_tag') {
153
+ this.delegateScriptTag(child, fileNodeId);
154
+ }
155
+ else if (child.type === 'cf_query_tag') {
156
+ this.delegateQueryTag(child, fileNodeId);
157
+ }
158
+ else {
159
+ this.delegateNestedTags(child, fileNodeId);
160
+ }
161
+ child = child.nextSibling;
162
+ }
163
+ }
164
+ /**
165
+ * `<cfcomponent extends="Base" implements="IFoo,IBar">...</cfcomponent>`.
166
+ * The grammar's implicit-end-tag scanner means component body content
167
+ * (cffunction tags, cfscript tags, etc.) appears as the open tag's FOLLOWING
168
+ * siblings in `program`, not nested children — walk forward to the matching
169
+ * cf_component_close_tag.
170
+ */
171
+ extractComponent(openTag, containerId) {
172
+ const name = this.tagAttr(openTag, 'name') ?? this.componentNameFromPath();
173
+ const id = (0, tree_sitter_helpers_1.generateNodeId)(this.filePath, 'class', name, openTag.startPosition.row + 1);
174
+ const classNode = {
175
+ id,
176
+ kind: 'class',
177
+ name,
178
+ qualifiedName: `${this.filePath}::${name}`,
179
+ filePath: this.filePath,
180
+ language: this.language,
181
+ startLine: openTag.startPosition.row + 1,
182
+ endLine: openTag.startPosition.row + 1, // extended below once the close tag is found
183
+ startColumn: openTag.startPosition.column,
184
+ endColumn: openTag.endPosition.column,
185
+ isExported: true,
186
+ updatedAt: Date.now(),
187
+ };
188
+ this.nodes.push(classNode);
189
+ if (containerId) {
190
+ this.edges.push({ source: containerId, target: classNode.id, kind: 'contains' });
191
+ }
192
+ const extendsName = this.tagAttr(openTag, 'extends');
193
+ if (extendsName) {
194
+ this.unresolvedReferences.push({
195
+ fromNodeId: classNode.id,
196
+ referenceName: extendsName,
197
+ referenceKind: 'extends',
198
+ filePath: this.filePath,
199
+ line: openTag.startPosition.row + 1,
200
+ column: openTag.startPosition.column,
201
+ language: this.language,
202
+ });
203
+ }
204
+ const implementsAttr = this.tagAttr(openTag, 'implements');
205
+ if (implementsAttr) {
206
+ for (const iface of implementsAttr.split(',').map((s) => s.trim()).filter(Boolean)) {
207
+ this.unresolvedReferences.push({
208
+ fromNodeId: classNode.id,
209
+ referenceName: iface,
210
+ referenceKind: 'implements',
211
+ filePath: this.filePath,
212
+ line: openTag.startPosition.row + 1,
213
+ column: openTag.startPosition.column,
214
+ language: this.language,
215
+ });
216
+ }
217
+ }
218
+ // Walk siblings between the open tag and its close tag.
219
+ let sibling = openTag.nextSibling;
220
+ let lastNode = openTag;
221
+ while (sibling) {
222
+ if (sibling.type === 'cf_component_close_tag') {
223
+ lastNode = sibling;
224
+ break;
225
+ }
226
+ if (sibling.type === 'cf_function_tag') {
227
+ this.extractFunctionTag(sibling, classNode.id, classNode.id, classNode.name);
228
+ }
229
+ else if (sibling.type === 'cf_script_tag') {
230
+ this.delegateScriptTag(sibling, classNode.id, classNode.name);
231
+ }
232
+ else if (sibling.type === 'cf_query_tag') {
233
+ this.delegateQueryTag(sibling, classNode.id);
234
+ }
235
+ else {
236
+ this.delegateNestedTags(sibling, classNode.id, classNode.name);
237
+ }
238
+ lastNode = sibling;
239
+ sibling = sibling.nextSibling;
240
+ }
241
+ classNode.endLine = lastNode.endPosition.row + 1;
242
+ return lastNode;
243
+ }
244
+ /**
245
+ * `<cffunction name="..." access="..." returntype="...">...</cffunction>`.
246
+ * `parentClassId` decides `method` vs top-level `function`; `containerId` is
247
+ * the `contains`-edge target (the class when inside one, otherwise the file
248
+ * node for a bare top-level cffunction) — kept separate so a top-level
249
+ * function still gets a containment edge without being misclassified as a
250
+ * method of the file. A method's qualifiedName is scoped under
251
+ * `parentClassName` (`TagService::save`, the same `Class::member` shape the
252
+ * generic extractor produces) so type-validated method resolution can match.
253
+ */
254
+ extractFunctionTag(tag, parentClassId, containerId, parentClassName) {
255
+ const name = this.tagAttr(tag, 'name');
256
+ if (!name)
257
+ return;
258
+ const kind = parentClassId ? 'method' : 'function';
259
+ const id = (0, tree_sitter_helpers_1.generateNodeId)(this.filePath, kind, name, tag.startPosition.row + 1);
260
+ const access = this.tagAttr(tag, 'access');
261
+ const visibility = access === 'private' ? 'private'
262
+ : access === 'package' ? 'internal'
263
+ : access ? 'public'
264
+ : undefined;
265
+ const fnNode = {
266
+ id,
267
+ kind,
268
+ name,
269
+ qualifiedName: parentClassName ? `${parentClassName}::${name}` : `${this.filePath}::${name}`,
270
+ filePath: this.filePath,
271
+ language: this.language,
272
+ startLine: tag.startPosition.row + 1,
273
+ endLine: tag.endPosition.row + 1,
274
+ startColumn: tag.startPosition.column,
275
+ endColumn: tag.endPosition.column,
276
+ visibility,
277
+ returnType: this.tagAttr(tag, 'returntype'),
278
+ updatedAt: Date.now(),
279
+ };
280
+ this.nodes.push(fnNode);
281
+ if (containerId) {
282
+ this.edges.push({ source: containerId, target: fnNode.id, kind: 'contains' });
283
+ }
284
+ // Delegate any <cfscript>/<cfquery> bodies nested inside this function, at
285
+ // any depth (e.g. inside <cfif>/<cfloop>/<cftry> control-flow tags).
286
+ this.delegateNestedTags(tag, fnNode.id);
287
+ }
288
+ /**
289
+ * Recursively delegates any `cf_script_tag`/`cf_query_tag` found within
290
+ * `node`'s subtree — e.g. a `<cfscript>`/`<cfquery>` nested inside
291
+ * `<cfif>`/`<cfloop>`/`<cftry>` control-flow tags, which (unlike
292
+ * `<cfcomponent>`'s body — see the implicit-end-tag note on `extractComponent`)
293
+ * ARE normal children, just possibly several levels deep, so a direct-children
294
+ * check misses them. Does not descend into a nested `cf_function_tag` — that
295
+ * has its own scope and is walked separately. `parentClassName` rides along
296
+ * so a `<cfscript>` at component scope classifies its functions as methods
297
+ * scoped under the component.
298
+ */
299
+ delegateNestedTags(node, containerId, parentClassName) {
300
+ for (let i = 0; i < node.namedChildCount; i++) {
301
+ const child = node.namedChild(i);
302
+ if (!child)
303
+ continue;
304
+ if (child.type === 'cf_script_tag') {
305
+ this.delegateScriptTag(child, containerId, parentClassName);
306
+ }
307
+ else if (child.type === 'cf_query_tag') {
308
+ this.delegateQueryTag(child, containerId);
309
+ }
310
+ else if (child.type === 'cf_function_tag') {
311
+ continue;
312
+ }
313
+ else {
314
+ this.delegateNestedTags(child, containerId, parentClassName);
315
+ }
316
+ }
317
+ }
318
+ /**
319
+ * Delegate a `<cfscript>...</cfscript>` tag body to the cfscript grammar.
320
+ * With `parentClassName` set (the block sits at component scope), functions
321
+ * declared at the script's top level are the component's methods
322
+ * (`<cfcomponent><cfscript>function configure(){}` — the standard ColdBox
323
+ * ModuleConfig shape): they're re-kinded `function` → `method`, and every
324
+ * merged symbol's qualifiedName is prefixed with the component scope
325
+ * (`configure` → `ModuleConfig::configure`) so type-validated method
326
+ * resolution can match them. Functions nested inside another function
327
+ * (closures) keep kind `function`.
328
+ */
329
+ delegateScriptTag(scriptTag, parentId, parentClassName) {
330
+ const content = scriptTag.namedChildren.find((c) => c.type === 'cf_script_content');
331
+ if (!content)
332
+ return;
333
+ const inner = this.source.substring(content.startIndex, content.endIndex);
334
+ const startLine = content.startPosition.row;
335
+ const extractor = new tree_sitter_1.TreeSitterExtractor(this.filePath, inner, 'cfscript');
336
+ const result = extractor.extract();
337
+ // The inner TreeSitterExtractor always synthesizes its own `file`-kind
338
+ // node scoped to just this snippet — drop it (and any edges touching it)
339
+ // since this tag-based file already owns one correctly-ranged file node
340
+ // (see createFileNode); the per-node `parentId` contains-edge below
341
+ // already links every emitted symbol into the real tree.
342
+ const innerFileNodeId = result.nodes.find((n) => n.kind === 'file')?.id;
343
+ // Snippet-top-level symbols are the ones the inner extractor attached
344
+ // directly to its (dropped) snippet file node — as opposed to closures
345
+ // nested inside another function.
346
+ const topLevelIds = new Set(result.edges
347
+ .filter((e) => e.kind === 'contains' && e.source === innerFileNodeId)
348
+ .map((e) => e.target));
349
+ for (const node of result.nodes) {
350
+ if (node.kind === 'file')
351
+ continue;
352
+ node.startLine += startLine;
353
+ node.endLine += startLine;
354
+ node.language = this.language;
355
+ if (parentClassName) {
356
+ if (node.kind === 'function' && topLevelIds.has(node.id)) {
357
+ node.kind = 'method';
358
+ }
359
+ node.qualifiedName = `${parentClassName}::${node.qualifiedName}`;
360
+ }
361
+ this.nodes.push(node);
362
+ if (parentId) {
363
+ this.edges.push({ source: parentId, target: node.id, kind: 'contains' });
364
+ }
365
+ }
366
+ for (const edge of result.edges) {
367
+ if (edge.source === innerFileNodeId || edge.target === innerFileNodeId)
368
+ continue;
369
+ if (edge.line)
370
+ edge.line += startLine;
371
+ this.edges.push(edge);
372
+ }
373
+ for (const ref of result.unresolvedReferences) {
374
+ ref.line += startLine;
375
+ ref.filePath = this.filePath;
376
+ ref.language = this.language;
377
+ // Calls inside a <cfscript> body with no enclosing function (rare — a
378
+ // top-level script in a .cfm template, or any statement directly in
379
+ // the snippet body) attribute to the filtered-out snippet file node by
380
+ // default — redirect those (and any genuinely unset ones) to parentId.
381
+ if ((!ref.fromNodeId || ref.fromNodeId === innerFileNodeId) && parentId)
382
+ ref.fromNodeId = parentId;
383
+ this.unresolvedReferences.push(ref);
384
+ }
385
+ for (const error of result.errors) {
386
+ if (error.line)
387
+ error.line += startLine;
388
+ this.errors.push(error);
389
+ }
390
+ }
391
+ /**
392
+ * Delegate a `<cfquery>...</cfquery>` tag's SQL body to the `cfquery` grammar.
393
+ * `#hash#` expressions inside the SQL (e.g. `#getCurrentUser().getId()#` in a
394
+ * WHERE clause) are real CFML calls/references — tree-sitter-cfml's `cfquery`
395
+ * grammar parses them structurally (same `call_expression`/`member_expression`
396
+ * shape as cfscript), so without this delegation they're silently dropped as
397
+ * opaque SQL text. The grammar models no other symbols, so only call/reference
398
+ * extraction is relevant here — unlike `delegateScriptTag`, there are no nodes
399
+ * or contains-edges to merge.
400
+ */
401
+ delegateQueryTag(queryTag, parentId) {
402
+ const content = queryTag.namedChildren.find((c) => c.type === 'cf_query_content');
403
+ if (!content)
404
+ return;
405
+ const sql = this.source.substring(content.startIndex, content.endIndex);
406
+ const startLine = content.startPosition.row;
407
+ const extractor = new tree_sitter_1.TreeSitterExtractor(this.filePath, sql, 'cfquery');
408
+ const result = extractor.extract();
409
+ const innerFileNodeId = result.nodes.find((n) => n.kind === 'file')?.id;
410
+ for (const ref of result.unresolvedReferences) {
411
+ ref.line += startLine;
412
+ ref.filePath = this.filePath;
413
+ ref.language = this.language;
414
+ if ((!ref.fromNodeId || ref.fromNodeId === innerFileNodeId) && parentId)
415
+ ref.fromNodeId = parentId;
416
+ this.unresolvedReferences.push(ref);
417
+ }
418
+ for (const error of result.errors) {
419
+ if (error.line)
420
+ error.line += startLine;
421
+ this.errors.push(error);
422
+ }
423
+ }
424
+ /** Read a `cf_attribute`'s value by name from a tag node's direct `cf_attribute`/`cf_tag_attributes` children. */
425
+ tagAttr(tag, attrName) {
426
+ const attrs = [];
427
+ for (let i = 0; i < tag.namedChildCount; i++) {
428
+ const child = tag.namedChild(i);
429
+ if (!child)
430
+ continue;
431
+ if (child.type === 'cf_attribute')
432
+ attrs.push(child);
433
+ else if (child.type === 'cf_tag_attributes') {
434
+ for (let j = 0; j < child.namedChildCount; j++) {
435
+ const inner = child.namedChild(j);
436
+ if (inner?.type === 'cf_attribute')
437
+ attrs.push(inner);
438
+ }
439
+ }
440
+ }
441
+ for (const attr of attrs) {
442
+ const nameNode = attr.namedChildren.find((c) => c.type === 'cf_attribute_name');
443
+ if (!nameNode)
444
+ continue;
445
+ const text = this.source.substring(nameNode.startIndex, nameNode.endIndex);
446
+ if (text.toLowerCase() !== attrName.toLowerCase())
447
+ continue;
448
+ // Values come wrapped as `quoted_cf_attribute_value` (name="init") or bare
449
+ // `cf_attribute_value` (name=init — legal and common in older CFML).
450
+ const valueWrapper = attr.namedChildren.find((c) => c.type === 'quoted_cf_attribute_value' || c.type === 'cf_attribute_value');
451
+ const valueNode = valueWrapper?.namedChildren.find((c) => c.type === 'attribute_value');
452
+ if (!valueNode)
453
+ return '';
454
+ return this.source.substring(valueNode.startIndex, valueNode.endIndex);
455
+ }
456
+ return undefined;
457
+ }
458
+ componentNameFromPath() {
459
+ const fileName = this.filePath.split(/[/\\]/).pop() || this.filePath;
460
+ return fileName.replace(/\.(cfc|cfm|cfs)$/i, '');
461
+ }
462
+ }
463
+ exports.CfmlExtractor = CfmlExtractor;
464
+ /**
465
+ * Sniff whether CFML source is bare-script (`component { ... }`, modern style)
466
+ * vs tag-based (`<cfcomponent>`, `<cfif>`, HTML). Skips a leading UTF-8 BOM
467
+ * (endemic in CFML's Windows-editor history — 17% of ColdBox's files carry
468
+ * one; both grammars parse fine with it once routed correctly), whitespace,
469
+ * and `//`/`/* *\/` comments to find the first real token; tag-based files
470
+ * start with `<`, script-based files don't.
471
+ */
472
+ function isBareScriptCfml(source) {
473
+ let i = 0;
474
+ const len = source.length;
475
+ while (i < len) {
476
+ const ch = source[i];
477
+ if (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r' || ch === '\uFEFF') {
478
+ i++;
479
+ }
480
+ else if (ch === '/' && source[i + 1] === '/') {
481
+ const nl = source.indexOf('\n', i);
482
+ i = nl === -1 ? len : nl + 1;
483
+ }
484
+ else if (ch === '/' && source[i + 1] === '*') {
485
+ const end = source.indexOf('*/', i + 2);
486
+ i = end === -1 ? len : end + 2;
487
+ }
488
+ else {
489
+ return ch !== '<';
490
+ }
491
+ }
492
+ return true; // empty/whitespace-only file — treat as script (no-op extraction either way)
493
+ }
494
+ //# sourceMappingURL=cfml-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfml-extractor.js","sourceRoot":"","sources":["../../src/extraction/cfml-extractor.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,15 @@ export declare function isSourceFile(filePath: string, overrides?: Record<string
28
28
  * extractor links them. (config/ + locales/ JSON have no section refs.)
29
29
  */
30
30
  export declare function isShopifyLiquidJson(filePath: string): boolean;
31
+ /**
32
+ * OTP application resource file: `<app>.app.src` (checked into every rebar3/
33
+ * erlang.mk app) or its compiled `<app>.app`. Erlang TERMS, not forms — the
34
+ * grammar parses them as top-level expressions, and the Erlang extractor's
35
+ * application-tuple handler turns `{mod, {Mod, _}}` and `{applications, […]}`
36
+ * into entry-module and dependency edges. Routed by full suffix because the
37
+ * last-dot extension (`.src`) is far too generic for EXTENSION_MAP.
38
+ */
39
+ export declare function isErlangAppFile(filePath: string): boolean;
31
40
  /**
32
41
  * Play Framework routes file: the extensionless `conf/routes` (and included
33
42
  * `conf/*.routes`). No grammar — route extraction is done by the Play framework
@@ -1 +1 @@
1
- {"version":3,"file":"grammars.d.ts","sourceRoot":"","sources":["../../src/extraction/grammars.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,SAAS,CAAC,CAAC;AA+BtJ;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAuElD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,OAAO,CAO5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAM1D;AAWD;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlD;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CnF;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAc3D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAiBhH;AAmBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAY/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAK3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,EAAE,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAMpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAM/E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAoCjE"}
1
+ {"version":3,"file":"grammars.d.ts","sourceRoot":"","sources":["../../src/extraction/grammars.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,SAAS,CAAC,CAAC;AAyCtJ;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAmHlD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,OAAO,CAQ5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAM1D;AAWD;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlD;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEnF;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAc3D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAoBhH;AA4BD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAY/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAK3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,EAAE,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAMpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAM/E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA8CjE"}