@lzehrung/codegraph 2.3.29 → 2.3.30

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 (303) hide show
  1. package/dist/bin/cli.js +5982 -4145
  2. package/dist/bin/query-index-worker.js +1302 -753
  3. package/dist/document-links/asciidoc.d.ts.map +1 -1
  4. package/dist/document-links/asciidoc.js +3 -4
  5. package/dist/document-links/asciidoc.js.map +1 -1
  6. package/dist/document-links/html-forms.d.ts +39 -0
  7. package/dist/document-links/html-forms.d.ts.map +1 -0
  8. package/dist/document-links/html-forms.js +94 -0
  9. package/dist/document-links/html-forms.js.map +1 -0
  10. package/dist/document-links/html.d.ts +8 -0
  11. package/dist/document-links/html.d.ts.map +1 -1
  12. package/dist/document-links/html.js +30 -15
  13. package/dist/document-links/html.js.map +1 -1
  14. package/dist/document-links/markdown.d.ts.map +1 -1
  15. package/dist/document-links/markdown.js +6 -7
  16. package/dist/document-links/markdown.js.map +1 -1
  17. package/dist/document-links/rst.d.ts.map +1 -1
  18. package/dist/document-links/rst.js +6 -0
  19. package/dist/document-links/rst.js.map +1 -1
  20. package/dist/document-links/sfc.d.ts.map +1 -1
  21. package/dist/document-links/sfc.js +4 -4
  22. package/dist/document-links/sfc.js.map +1 -1
  23. package/dist/graphs/angularjs.d.ts.map +1 -1
  24. package/dist/graphs/angularjs.js +9 -1
  25. package/dist/graphs/angularjs.js.map +1 -1
  26. package/dist/graphs/edge-resolution.d.ts.map +1 -1
  27. package/dist/graphs/edge-resolution.js +8 -3
  28. package/dist/graphs/edge-resolution.js.map +1 -1
  29. package/dist/graphs/specifiers.d.ts.map +1 -1
  30. package/dist/graphs/specifiers.js +62 -104
  31. package/dist/graphs/specifiers.js.map +1 -1
  32. package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts.map +1 -1
  33. package/dist/graphs/symbol-graph-detailed/edge-passes.js +118 -86
  34. package/dist/graphs/symbol-graph-detailed/edge-passes.js.map +1 -1
  35. package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts +34 -0
  36. package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts.map +1 -1
  37. package/dist/graphs/symbol-graph-detailed/receiver-calls.js +525 -25
  38. package/dist/graphs/symbol-graph-detailed/receiver-calls.js.map +1 -1
  39. package/dist/impact/call-compatibility/providers/index.d.ts +3 -1
  40. package/dist/impact/call-compatibility/providers/index.d.ts.map +1 -1
  41. package/dist/impact/call-compatibility/providers/index.js +11 -4
  42. package/dist/impact/call-compatibility/providers/index.js.map +1 -1
  43. package/dist/impact/call-compatibility.d.ts.map +1 -1
  44. package/dist/impact/call-compatibility.js +2 -7
  45. package/dist/impact/call-compatibility.js.map +1 -1
  46. package/dist/impact/member-resolution-coverage.js +2 -2
  47. package/dist/impact/member-resolution-coverage.js.map +1 -1
  48. package/dist/indexer/build-cache/manifest.d.ts +7 -0
  49. package/dist/indexer/build-cache/manifest.d.ts.map +1 -1
  50. package/dist/indexer/build-cache/manifest.js +32 -1
  51. package/dist/indexer/build-cache/manifest.js.map +1 -1
  52. package/dist/indexer/build-cache/options.d.ts +16 -2
  53. package/dist/indexer/build-cache/options.d.ts.map +1 -1
  54. package/dist/indexer/build-cache/options.js +17 -3
  55. package/dist/indexer/build-cache/options.js.map +1 -1
  56. package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
  57. package/dist/indexer/build-cache/project-snapshot.js +1 -0
  58. package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
  59. package/dist/indexer/build-index.d.ts.map +1 -1
  60. package/dist/indexer/build-index.js +80 -2
  61. package/dist/indexer/build-index.js.map +1 -1
  62. package/dist/indexer/build-manifest.d.ts +1 -0
  63. package/dist/indexer/build-manifest.d.ts.map +1 -1
  64. package/dist/indexer/build-manifest.js +18 -0
  65. package/dist/indexer/build-manifest.js.map +1 -1
  66. package/dist/indexer/build-workers.js +1 -1
  67. package/dist/indexer/build-workers.js.map +1 -1
  68. package/dist/indexer/declaration-visibility.d.ts +43 -0
  69. package/dist/indexer/declaration-visibility.d.ts.map +1 -0
  70. package/dist/indexer/declaration-visibility.js +202 -0
  71. package/dist/indexer/declaration-visibility.js.map +1 -0
  72. package/dist/indexer/imports/binding-ranges.d.ts +1 -1
  73. package/dist/indexer/imports/binding-ranges.d.ts.map +1 -1
  74. package/dist/indexer/imports/binding-ranges.js +2 -123
  75. package/dist/indexer/imports/binding-ranges.js.map +1 -1
  76. package/dist/indexer/imports/js-text-imports.d.ts.map +1 -1
  77. package/dist/indexer/imports/js-text-imports.js +5 -2
  78. package/dist/indexer/imports/js-text-imports.js.map +1 -1
  79. package/dist/indexer/imports/language-specific.d.ts.map +1 -1
  80. package/dist/indexer/imports/language-specific.js +30 -216
  81. package/dist/indexer/imports/language-specific.js.map +1 -1
  82. package/dist/indexer/imports/native-captures.d.ts.map +1 -1
  83. package/dist/indexer/imports/native-captures.js +23 -32
  84. package/dist/indexer/imports/native-captures.js.map +1 -1
  85. package/dist/indexer/imports/text-import-extractors.d.ts +37 -0
  86. package/dist/indexer/imports/text-import-extractors.d.ts.map +1 -0
  87. package/dist/indexer/imports/text-import-extractors.js +358 -0
  88. package/dist/indexer/imports/text-import-extractors.js.map +1 -0
  89. package/dist/indexer/locals-and-exports.d.ts.map +1 -1
  90. package/dist/indexer/locals-and-exports.js +23 -27
  91. package/dist/indexer/locals-and-exports.js.map +1 -1
  92. package/dist/indexer/navigation-goto.d.ts +1 -7
  93. package/dist/indexer/navigation-goto.d.ts.map +1 -1
  94. package/dist/indexer/navigation-goto.js +180 -381
  95. package/dist/indexer/navigation-goto.js.map +1 -1
  96. package/dist/indexer/navigation-resolve.d.ts.map +1 -1
  97. package/dist/indexer/navigation-resolve.js +20 -1
  98. package/dist/indexer/navigation-resolve.js.map +1 -1
  99. package/dist/indexer/navigation.d.ts.map +1 -1
  100. package/dist/indexer/navigation.js +39 -7
  101. package/dist/indexer/navigation.js.map +1 -1
  102. package/dist/indexer/parse-context.js +2 -2
  103. package/dist/indexer/parse-context.js.map +1 -1
  104. package/dist/indexer/scope-nodes.d.ts +108 -0
  105. package/dist/indexer/scope-nodes.d.ts.map +1 -0
  106. package/dist/indexer/scope-nodes.js +238 -0
  107. package/dist/indexer/scope-nodes.js.map +1 -0
  108. package/dist/indexer/scope.d.ts.map +1 -1
  109. package/dist/indexer/scope.js +70 -130
  110. package/dist/indexer/scope.js.map +1 -1
  111. package/dist/indexer/types.d.ts +7 -0
  112. package/dist/indexer/types.d.ts.map +1 -1
  113. package/dist/languages/definitions/c-family.d.ts +18 -4
  114. package/dist/languages/definitions/c-family.d.ts.map +1 -1
  115. package/dist/languages/definitions/c-family.js +51 -13
  116. package/dist/languages/definitions/c-family.js.map +1 -1
  117. package/dist/languages/definitions/c.d.ts.map +1 -1
  118. package/dist/languages/definitions/c.js +7 -43
  119. package/dist/languages/definitions/c.js.map +1 -1
  120. package/dist/languages/definitions/cpp.d.ts.map +1 -1
  121. package/dist/languages/definitions/cpp.js +15 -61
  122. package/dist/languages/definitions/cpp.js.map +1 -1
  123. package/dist/languages/definitions/csharp.d.ts.map +1 -1
  124. package/dist/languages/definitions/csharp.js +46 -52
  125. package/dist/languages/definitions/csharp.js.map +1 -1
  126. package/dist/languages/definitions/css-like.d.ts.map +1 -1
  127. package/dist/languages/definitions/css-like.js +13 -10
  128. package/dist/languages/definitions/css-like.js.map +1 -1
  129. package/dist/languages/definitions/go.d.ts.map +1 -1
  130. package/dist/languages/definitions/go.js +29 -42
  131. package/dist/languages/definitions/go.js.map +1 -1
  132. package/dist/languages/definitions/html.d.ts.map +1 -1
  133. package/dist/languages/definitions/html.js +15 -14
  134. package/dist/languages/definitions/html.js.map +1 -1
  135. package/dist/languages/definitions/java.d.ts.map +1 -1
  136. package/dist/languages/definitions/java.js +42 -48
  137. package/dist/languages/definitions/java.js.map +1 -1
  138. package/dist/languages/definitions/javascript.d.ts.map +1 -1
  139. package/dist/languages/definitions/javascript.js +26 -54
  140. package/dist/languages/definitions/javascript.js.map +1 -1
  141. package/dist/languages/definitions/js-family.d.ts +15 -1
  142. package/dist/languages/definitions/js-family.d.ts.map +1 -1
  143. package/dist/languages/definitions/js-family.js +51 -0
  144. package/dist/languages/definitions/js-family.js.map +1 -1
  145. package/dist/languages/definitions/kotlin.d.ts.map +1 -1
  146. package/dist/languages/definitions/kotlin.js +26 -43
  147. package/dist/languages/definitions/kotlin.js.map +1 -1
  148. package/dist/languages/definitions/php.d.ts.map +1 -1
  149. package/dist/languages/definitions/php.js +50 -60
  150. package/dist/languages/definitions/php.js.map +1 -1
  151. package/dist/languages/definitions/python.d.ts.map +1 -1
  152. package/dist/languages/definitions/python.js +23 -14
  153. package/dist/languages/definitions/python.js.map +1 -1
  154. package/dist/languages/definitions/ruby.d.ts.map +1 -1
  155. package/dist/languages/definitions/ruby.js +14 -17
  156. package/dist/languages/definitions/ruby.js.map +1 -1
  157. package/dist/languages/definitions/rust.d.ts.map +1 -1
  158. package/dist/languages/definitions/rust.js +30 -52
  159. package/dist/languages/definitions/rust.js.map +1 -1
  160. package/dist/languages/definitions/scss.d.ts.map +1 -1
  161. package/dist/languages/definitions/scss.js +33 -49
  162. package/dist/languages/definitions/scss.js.map +1 -1
  163. package/dist/languages/definitions/sfc-graph.d.ts +4 -0
  164. package/dist/languages/definitions/sfc-graph.d.ts.map +1 -0
  165. package/dist/languages/definitions/sfc-graph.js +16 -0
  166. package/dist/languages/definitions/sfc-graph.js.map +1 -0
  167. package/dist/languages/definitions/shared.d.ts +33 -0
  168. package/dist/languages/definitions/shared.d.ts.map +1 -0
  169. package/dist/languages/definitions/shared.js +63 -0
  170. package/dist/languages/definitions/shared.js.map +1 -0
  171. package/dist/languages/definitions/sql.d.ts.map +1 -1
  172. package/dist/languages/definitions/sql.js +1 -0
  173. package/dist/languages/definitions/sql.js.map +1 -1
  174. package/dist/languages/definitions/svelte.d.ts.map +1 -1
  175. package/dist/languages/definitions/svelte.js +2 -10
  176. package/dist/languages/definitions/svelte.js.map +1 -1
  177. package/dist/languages/definitions/swift.d.ts.map +1 -1
  178. package/dist/languages/definitions/swift.js +37 -31
  179. package/dist/languages/definitions/swift.js.map +1 -1
  180. package/dist/languages/definitions/typescript.d.ts.map +1 -1
  181. package/dist/languages/definitions/typescript.js +56 -90
  182. package/dist/languages/definitions/typescript.js.map +1 -1
  183. package/dist/languages/definitions/vue.d.ts.map +1 -1
  184. package/dist/languages/definitions/vue.js +2 -10
  185. package/dist/languages/definitions/vue.js.map +1 -1
  186. package/dist/languages/definitions/zig.d.ts.map +1 -1
  187. package/dist/languages/definitions/zig.js +9 -15
  188. package/dist/languages/definitions/zig.js.map +1 -1
  189. package/dist/languages/graph-captures.d.ts +40 -0
  190. package/dist/languages/graph-captures.d.ts.map +1 -0
  191. package/dist/languages/graph-captures.js +46 -0
  192. package/dist/languages/graph-captures.js.map +1 -0
  193. package/dist/languages/import-statement-parsers.d.ts +17 -0
  194. package/dist/languages/import-statement-parsers.d.ts.map +1 -1
  195. package/dist/languages/import-statement-parsers.js +108 -0
  196. package/dist/languages/import-statement-parsers.js.map +1 -1
  197. package/dist/languages/js-family.d.ts +2 -0
  198. package/dist/languages/js-family.d.ts.map +1 -1
  199. package/dist/languages/js-family.js +15 -6
  200. package/dist/languages/js-family.js.map +1 -1
  201. package/dist/languages/types.d.ts +4 -0
  202. package/dist/languages/types.d.ts.map +1 -1
  203. package/dist/languages/types.js +1 -1
  204. package/dist/languages/types.js.map +1 -1
  205. package/dist/languages.js +1 -1
  206. package/dist/languages.js.map +1 -1
  207. package/dist/native/contracts.d.ts +1 -1
  208. package/dist/native/contracts.d.ts.map +1 -1
  209. package/dist/native/js-bridge.d.ts +10 -0
  210. package/dist/native/js-bridge.d.ts.map +1 -1
  211. package/dist/native/js-bridge.js +10 -0
  212. package/dist/native/js-bridge.js.map +1 -1
  213. package/dist/native/native-backend-report.d.ts.map +1 -1
  214. package/dist/native/native-backend-report.js +2 -0
  215. package/dist/native/native-backend-report.js.map +1 -1
  216. package/dist/util/comments.d.ts +7 -7
  217. package/dist/util/comments.d.ts.map +1 -1
  218. package/dist/util/comments.js +15 -214
  219. package/dist/util/comments.js.map +1 -1
  220. package/dist/util/lines.d.ts.map +1 -1
  221. package/dist/util/lines.js +4 -1
  222. package/dist/util/lines.js.map +1 -1
  223. package/dist/util/member-access.d.ts +2 -0
  224. package/dist/util/member-access.d.ts.map +1 -1
  225. package/dist/util/member-access.js +18 -5
  226. package/dist/util/member-access.js.map +1 -1
  227. package/dist/util/paths.d.ts +4 -0
  228. package/dist/util/paths.d.ts.map +1 -1
  229. package/dist/util/paths.js +26 -0
  230. package/dist/util/paths.js.map +1 -1
  231. package/dist/util/project-files.js +1 -1
  232. package/dist/util/project-files.js.map +1 -1
  233. package/dist/util/resolution/cargo-targets.d.ts.map +1 -1
  234. package/dist/util/resolution/cargo-targets.js +17 -14
  235. package/dist/util/resolution/cargo-targets.js.map +1 -1
  236. package/dist/util/resolution/cpp.d.ts +6 -0
  237. package/dist/util/resolution/cpp.d.ts.map +1 -0
  238. package/dist/util/resolution/cpp.js +69 -0
  239. package/dist/util/resolution/cpp.js.map +1 -0
  240. package/dist/util/resolution/csharp.d.ts +4 -3
  241. package/dist/util/resolution/csharp.d.ts.map +1 -1
  242. package/dist/util/resolution/csharp.js +27 -113
  243. package/dist/util/resolution/csharp.js.map +1 -1
  244. package/dist/util/resolution/files.d.ts +6 -0
  245. package/dist/util/resolution/files.d.ts.map +1 -1
  246. package/dist/util/resolution/files.js +108 -4
  247. package/dist/util/resolution/files.js.map +1 -1
  248. package/dist/util/resolution/go.d.ts +1 -0
  249. package/dist/util/resolution/go.d.ts.map +1 -1
  250. package/dist/util/resolution/go.js +4 -3
  251. package/dist/util/resolution/go.js.map +1 -1
  252. package/dist/util/resolution/jvm.d.ts +3 -3
  253. package/dist/util/resolution/jvm.d.ts.map +1 -1
  254. package/dist/util/resolution/jvm.js +90 -54
  255. package/dist/util/resolution/jvm.js.map +1 -1
  256. package/dist/util/resolution/node.js +2 -2
  257. package/dist/util/resolution/node.js.map +1 -1
  258. package/dist/util/resolution/php-composer.d.ts.map +1 -1
  259. package/dist/util/resolution/php-composer.js +8 -7
  260. package/dist/util/resolution/php-composer.js.map +1 -1
  261. package/dist/util/resolution/php.d.ts.map +1 -1
  262. package/dist/util/resolution/php.js +30 -43
  263. package/dist/util/resolution/php.js.map +1 -1
  264. package/dist/util/resolution/project-symbols.d.ts +5 -7
  265. package/dist/util/resolution/project-symbols.d.ts.map +1 -1
  266. package/dist/util/resolution/project-symbols.js +23 -9
  267. package/dist/util/resolution/project-symbols.js.map +1 -1
  268. package/dist/util/resolution/python.d.ts.map +1 -1
  269. package/dist/util/resolution/python.js +107 -62
  270. package/dist/util/resolution/python.js.map +1 -1
  271. package/dist/util/resolution/rust.d.ts.map +1 -1
  272. package/dist/util/resolution/rust.js +45 -34
  273. package/dist/util/resolution/rust.js.map +1 -1
  274. package/dist/util/resolution/tsconfig.d.ts.map +1 -1
  275. package/dist/util/resolution/tsconfig.js +3 -9
  276. package/dist/util/resolution/tsconfig.js.map +1 -1
  277. package/dist/util/resolution-candidates.d.ts +5 -1
  278. package/dist/util/resolution-candidates.d.ts.map +1 -1
  279. package/dist/util/resolution-candidates.js +18 -0
  280. package/dist/util/resolution-candidates.js.map +1 -1
  281. package/dist/util/resolution.d.ts.map +1 -1
  282. package/dist/util/resolution.js +93 -49
  283. package/dist/util/resolution.js.map +1 -1
  284. package/dist/util/specifiers.d.ts +4 -10
  285. package/dist/util/specifiers.d.ts.map +1 -1
  286. package/dist/util/specifiers.js +213 -164
  287. package/dist/util/specifiers.js.map +1 -1
  288. package/dist/util/trivia-tables.d.ts +69 -0
  289. package/dist/util/trivia-tables.d.ts.map +1 -0
  290. package/dist/util/trivia-tables.js +186 -0
  291. package/dist/util/trivia-tables.js.map +1 -0
  292. package/dist/util/trivia.d.ts +24 -0
  293. package/dist/util/trivia.d.ts.map +1 -0
  294. package/dist/util/trivia.js +621 -0
  295. package/dist/util/trivia.js.map +1 -0
  296. package/dist/util.d.ts +1 -1
  297. package/dist/util.d.ts.map +1 -1
  298. package/dist/util.js +1 -1
  299. package/dist/util.js.map +1 -1
  300. package/dist/worker/native-extract-worker.d.ts.map +1 -1
  301. package/dist/worker/native-extract-worker.js +4 -4
  302. package/dist/worker/native-extract-worker.js.map +1 -1
  303. package/package.json +3 -3
@@ -0,0 +1,358 @@
1
+ import { CSHARP_IDENTIFIER_SOURCE, JAVA_IDENTIFIER_SOURCE, KOTLIN_IDENTIFIER_SOURCE, XID_IDENTIFIER_SOURCE, } from "../../util/identifiers.js";
2
+ import { parsePhpImportStatement, parseRustImportStatements, rustImportKeywordOffset, scanRustImportStatements, } from "../../languages/import-statement-parsers.js";
3
+ import { isRustCfgTestStatement } from "../../util/rust-test-modules.js";
4
+ import { extractRustModPathAttribute, rustGraphModuleSpecifier } from "../../util/resolution/rust.js";
5
+ import { extractPythonSpecifiers } from "../../util/specifiers.js";
6
+ import { maskTrivia } from "../../util/trivia.js";
7
+ import { maskImportBindingTrivia } from "./binding-ranges.js";
8
+ const QUOTED_VALUE_QUOTES = ['"', "'"];
9
+ const GO_IMPORT_QUOTES = ['"', "`"];
10
+ /**
11
+ * Values of the quoted literals in `text[from, to)`.
12
+ *
13
+ * `text` must be the comment-only mask (`maskStrings: false`), not the fully masked source: the
14
+ * discovery passes prove a statement is real code, and this pass reads the string payload it
15
+ * contains. A quote inside a comment cannot forge a value because comments are blanked here.
16
+ */
17
+ function scanQuotedValues(text, from, to, quotes) {
18
+ const out = [];
19
+ for (let index = from; index < to; index += 1) {
20
+ const ch = text[index];
21
+ if (ch === undefined || !quotes.includes(ch))
22
+ continue;
23
+ const close = text.indexOf(ch, index + 1);
24
+ if (close < 0 || close >= to)
25
+ break;
26
+ out.push({ value: text.slice(index + 1, close), start: index, end: close + 1 });
27
+ index = close;
28
+ }
29
+ return out;
30
+ }
31
+ /** Index of the `close` delimiter matching the `open` delimiter at `index`, or -1. */
32
+ function matchingDelimiterIndex(masked, index, open, close) {
33
+ let depth = 0;
34
+ for (let cursor = index; cursor < masked.length; cursor += 1) {
35
+ const ch = masked[cursor];
36
+ if (ch === open) {
37
+ depth += 1;
38
+ continue;
39
+ }
40
+ if (ch !== close)
41
+ continue;
42
+ depth -= 1;
43
+ if (depth === 0)
44
+ return cursor;
45
+ }
46
+ return -1;
47
+ }
48
+ function lineEndAt(text, index) {
49
+ const newline = text.indexOf("\n", index);
50
+ return newline < 0 ? text.length : newline;
51
+ }
52
+ const JAVA_DOTTED_SOURCE = String.raw `${JAVA_IDENTIFIER_SOURCE}(?:[\t ]*\.[\t ]*${JAVA_IDENTIFIER_SOURCE})*`;
53
+ const JAVA_IMPORT_STATEMENT_PATTERN = new RegExp(String.raw `^[\t ]*import[\t ]+(?:static[\t ]+)?(${JAVA_DOTTED_SOURCE})(?:[\t ]*\.[\t ]*\*)?[\t ]*;`, "gmu");
54
+ function extractJavaImports(source, sink) {
55
+ if (!source.includes("import"))
56
+ return;
57
+ const masked = maskImportBindingTrivia(source, "java");
58
+ for (const match of masked.matchAll(JAVA_IMPORT_STATEMENT_PATTERN)) {
59
+ const rawSpecifier = match[1];
60
+ if (!rawSpecifier || match.index === undefined)
61
+ continue;
62
+ const spec = rawSpecifier.replace(/\s+/gu, "");
63
+ if (!spec)
64
+ continue;
65
+ sink.specifier({ spec, typeOnly: false });
66
+ sink.binding({ raw: source.slice(match.index, match.index + match[0].length), start: match.index });
67
+ }
68
+ }
69
+ const KOTLIN_DOTTED_SOURCE = String.raw `${KOTLIN_IDENTIFIER_SOURCE}(?:[\t ]*\.[\t ]*${KOTLIN_IDENTIFIER_SOURCE})*`;
70
+ const KOTLIN_IMPORT_STATEMENT_PATTERN = new RegExp(String.raw `^[\t ]*import[\t ]+(${KOTLIN_DOTTED_SOURCE})(?:[\t ]*\.[\t ]*\*)?(?:[\t ]+as[\t ]+${KOTLIN_IDENTIFIER_SOURCE})?[\t ]*;?[\t ]*$`, "gmu");
71
+ function extractKotlinImports(source, sink) {
72
+ if (!source.includes("import"))
73
+ return;
74
+ const masked = maskImportBindingTrivia(source, "kotlin");
75
+ for (const match of masked.matchAll(KOTLIN_IMPORT_STATEMENT_PATTERN)) {
76
+ const rawSpecifier = match[1];
77
+ if (!rawSpecifier || match.index === undefined)
78
+ continue;
79
+ const spec = rawSpecifier.replace(/\s+/gu, "");
80
+ if (!spec)
81
+ continue;
82
+ sink.specifier({ spec, typeOnly: false });
83
+ sink.binding({ raw: source.slice(match.index, match.index + match[0].length), start: match.index });
84
+ }
85
+ }
86
+ const CSHARP_DOTTED_SOURCE = String.raw `${CSHARP_IDENTIFIER_SOURCE}(?:[\t ]*\.[\t ]*${CSHARP_IDENTIFIER_SOURCE})*`;
87
+ const CSHARP_USING_STATEMENT_PATTERN = new RegExp(String.raw `^[\t ]*(?:global[\t ]+)?using[\t ]+(?:${CSHARP_IDENTIFIER_SOURCE}[\t ]*=[\t ]*)?(?:static[\t ]+)?(${CSHARP_DOTTED_SOURCE})[\t ]*;`, "gmu");
88
+ function extractCsharpImports(source, sink) {
89
+ if (!source.includes("using"))
90
+ return;
91
+ const masked = maskImportBindingTrivia(source, "csharp");
92
+ for (const match of masked.matchAll(CSHARP_USING_STATEMENT_PATTERN)) {
93
+ const rawSpecifier = match[1];
94
+ if (!rawSpecifier || match.index === undefined)
95
+ continue;
96
+ const spec = rawSpecifier.replace(/\s+/gu, "");
97
+ if (!spec)
98
+ continue;
99
+ sink.specifier({ spec, typeOnly: false });
100
+ sink.binding({ raw: source.slice(match.index, match.index + match[0].length), start: match.index });
101
+ }
102
+ }
103
+ const PHP_USE_STATEMENT_PATTERN = /^[\t ]*use[\t ]+/gmu;
104
+ const PHP_INCLUDE_STATEMENT_PATTERN = /^[\t ]*(?:require_once|include_once|require|include)[\t ]+/gmu;
105
+ function pushPhpStatement(source, start, end, sink, context) {
106
+ const raw = source.slice(start, end);
107
+ const parsedList = parsePhpImportStatement(raw, context.file);
108
+ if (!parsedList.length)
109
+ return;
110
+ for (const parsed of parsedList) {
111
+ if (parsed.kind === "include") {
112
+ sink.specifier({ spec: parsed.from, typeOnly: false });
113
+ continue;
114
+ }
115
+ sink.specifier({ spec: parsed.from, typeOnly: false, phpImportType: parsed.importType });
116
+ }
117
+ sink.binding({ raw, start });
118
+ }
119
+ function extractPhpImports(source, sink, context) {
120
+ if (!source.includes("use") && !source.includes("require") && !source.includes("include"))
121
+ return;
122
+ const masked = maskImportBindingTrivia(source, "php");
123
+ // A namespace `use` declaration is only valid at namespace scope. Tracking the brace depth of
124
+ // real code keeps a class-body trait `use SomeTrait;` from being reported as an import; a
125
+ // braced namespace's `use` is deliberately left out rather than guessed at.
126
+ let braceDepth = 0;
127
+ let scannedThrough = 0;
128
+ for (const match of masked.matchAll(PHP_USE_STATEMENT_PATTERN)) {
129
+ if (match.index === undefined)
130
+ continue;
131
+ for (; scannedThrough < match.index; scannedThrough += 1) {
132
+ const ch = masked[scannedThrough];
133
+ if (ch === "{")
134
+ braceDepth += 1;
135
+ else if (ch === "}")
136
+ braceDepth = Math.max(0, braceDepth - 1);
137
+ }
138
+ const end = masked.indexOf(";", match.index + match[0].length);
139
+ if (end < 0)
140
+ continue;
141
+ // Skip the whole statement when advancing, so a grouped `use A\{B, C};` cannot raise depth.
142
+ scannedThrough = end + 1;
143
+ if (braceDepth !== 0)
144
+ continue;
145
+ pushPhpStatement(source, match.index, end + 1, sink, context);
146
+ }
147
+ // `include`-family expressions are valid inside function bodies, so they are not depth-filtered.
148
+ for (const match of masked.matchAll(PHP_INCLUDE_STATEMENT_PATTERN)) {
149
+ if (match.index === undefined)
150
+ continue;
151
+ const end = masked.indexOf(";", match.index + match[0].length);
152
+ if (end < 0)
153
+ continue;
154
+ pushPhpStatement(source, match.index, end + 1, sink, context);
155
+ }
156
+ }
157
+ export function rustSpecifierForParsedImport(parsed, source, statementStartIndex) {
158
+ if (parsed.kind === "module" && !parsed.isExternCrate) {
159
+ const pathAttribute = parsed.pathAttribute ?? extractRustModPathAttribute(source, parsed.from, statementStartIndex);
160
+ return {
161
+ spec: rustGraphModuleSpecifier(source, parsed.from, statementStartIndex),
162
+ typeOnly: false,
163
+ ...(pathAttribute ? { pathAttribute } : {}),
164
+ ...(statementStartIndex !== undefined ? { statementStartIndex } : {}),
165
+ };
166
+ }
167
+ if (parsed.kind !== "member") {
168
+ return { spec: parsed.from, typeOnly: false };
169
+ }
170
+ const root = parsed.from.split("::", 1)[0] ?? "";
171
+ if (root === "crate" || root === "self" || root === "super") {
172
+ return { spec: parsed.from, raw: `${parsed.from}::${parsed.imported}`, typeOnly: false };
173
+ }
174
+ return { spec: parsed.from, typeOnly: false };
175
+ }
176
+ function extractRustImports(source, sink) {
177
+ if (!source.includes("use") && !source.includes("mod") && !source.includes("crate"))
178
+ return;
179
+ const masked = maskImportBindingTrivia(source, "rust");
180
+ for (const statement of scanRustImportStatements(masked)) {
181
+ const raw = source.slice(statement.start, statement.start + statement.text.length);
182
+ const keywordOffset = rustImportKeywordOffset(raw);
183
+ const keywordIndex = keywordOffset >= 0 ? statement.start + keywordOffset : statement.start;
184
+ const keywordText = keywordOffset >= 0 ? raw.slice(keywordOffset) : raw;
185
+ if (isRustCfgTestStatement(source, keywordText, keywordIndex))
186
+ continue;
187
+ const parsedList = parseRustImportStatements(raw);
188
+ if (!parsedList.length)
189
+ continue;
190
+ for (const parsed of parsedList) {
191
+ sink.specifier(rustSpecifierForParsedImport(parsed, source, statement.start));
192
+ }
193
+ sink.binding({ raw, start: statement.start });
194
+ }
195
+ }
196
+ function extractPythonImports(source, sink) {
197
+ if (!source.includes("import"))
198
+ return;
199
+ for (const spec of extractPythonSpecifiers(source))
200
+ sink.specifier({ spec });
201
+ }
202
+ const GO_IMPORT_KEYWORD_PATTERN = /^[\t ]*import\b/gmu;
203
+ function extractGoImports(source, sink) {
204
+ if (!source.includes("import"))
205
+ return;
206
+ const masked = maskImportBindingTrivia(source, "go");
207
+ const commentsOnly = maskTrivia(source, "go", { maskStrings: false });
208
+ for (const match of masked.matchAll(GO_IMPORT_KEYWORD_PATTERN)) {
209
+ if (match.index === undefined)
210
+ continue;
211
+ const afterKeyword = match.index + match[0].length;
212
+ let cursor = afterKeyword;
213
+ while (cursor < masked.length && (masked[cursor] === " " || masked[cursor] === "\t"))
214
+ cursor += 1;
215
+ if (source[cursor] === "(") {
216
+ const close = matchingDelimiterIndex(masked, cursor, "(", ")");
217
+ if (close < 0)
218
+ continue;
219
+ for (const literal of scanQuotedValues(commentsOnly, cursor + 1, close, GO_IMPORT_QUOTES)) {
220
+ const spec = literal.value.trim();
221
+ if (spec)
222
+ sink.specifier({ spec, typeOnly: false });
223
+ }
224
+ continue;
225
+ }
226
+ const literal = scanQuotedValues(commentsOnly, cursor, lineEndAt(commentsOnly, cursor), GO_IMPORT_QUOTES)[0];
227
+ const spec = literal?.value.trim();
228
+ if (spec)
229
+ sink.specifier({ spec, typeOnly: false });
230
+ }
231
+ }
232
+ const RUBY_REQUIRE_PATTERN = /^[\t ]*(autoload|require_relative|require|load)\b/gmu;
233
+ const RUBY_AUTOLOAD_PREFIX_PATTERN = /^[\t ]*\(?[\t ]*:?[\p{L}_][\p{L}\p{Nd}_]*[\t ]*,[\t ]*$/u;
234
+ const RUBY_DIRECT_ARGUMENT_PREFIX_PATTERN = /^[\t ]*\(?[\t ]*$/;
235
+ function extractRubyImports(source, sink) {
236
+ if (!source.includes("require") && !source.includes("load") && !source.includes("autoload"))
237
+ return;
238
+ const masked = maskImportBindingTrivia(source, "ruby");
239
+ const commentsOnly = maskTrivia(source, "ruby", { maskStrings: false });
240
+ for (const match of masked.matchAll(RUBY_REQUIRE_PATTERN)) {
241
+ if (match.index === undefined)
242
+ continue;
243
+ const afterKeyword = match.index + match[0].length;
244
+ const to = lineEndAt(commentsOnly, afterKeyword);
245
+ const literal = scanQuotedValues(commentsOnly, afterKeyword, to, QUOTED_VALUE_QUOTES)[0];
246
+ if (!literal)
247
+ continue;
248
+ const prefix = commentsOnly.slice(afterKeyword, literal.start);
249
+ const expectedPrefix = match[1] === "autoload" ? RUBY_AUTOLOAD_PREFIX_PATTERN : RUBY_DIRECT_ARGUMENT_PREFIX_PATTERN;
250
+ if (!expectedPrefix.test(prefix))
251
+ continue;
252
+ const spec = literal.value.trim();
253
+ if (spec)
254
+ sink.specifier({ spec, typeOnly: false });
255
+ }
256
+ }
257
+ const C_INCLUDE_PATTERN = /^[\t ]*#[\t ]*include[\t ]+/gmu;
258
+ function extractCIncludeImports(source, sink) {
259
+ if (!source.includes("#"))
260
+ return;
261
+ const masked = maskImportBindingTrivia(source, "c");
262
+ const commentsOnly = maskTrivia(source, "c", { maskStrings: false });
263
+ for (const match of masked.matchAll(C_INCLUDE_PATTERN)) {
264
+ if (match.index === undefined)
265
+ continue;
266
+ const from = match.index + match[0].length;
267
+ const to = lineEndAt(commentsOnly, from);
268
+ const quoted = scanQuotedValues(commentsOnly, from, to, ['"'])[0];
269
+ if (quoted) {
270
+ const spec = quoted.value.trim();
271
+ if (spec)
272
+ sink.specifier({ spec, typeOnly: false });
273
+ continue;
274
+ }
275
+ const angle = /^[\t ]*<([^>\n]+)>/.exec(commentsOnly.slice(from, to));
276
+ const spec = angle?.[1]?.trim();
277
+ if (spec)
278
+ sink.specifier({ spec, typeOnly: false });
279
+ }
280
+ }
281
+ const SWIFT_MODULE_SOURCE = String.raw `${XID_IDENTIFIER_SOURCE}(?:\.${XID_IDENTIFIER_SOURCE})*`;
282
+ const SWIFT_IMPORT_PATTERN = new RegExp(String.raw `^[\t ]*(?:@[A-Za-z_][A-Za-z0-9_]*(?:\([^)]*\))?[\t ]+)*import[\t ]+(?:(?:typealias|struct|class|enum|protocol|let|var|func)[\t ]+)?(${SWIFT_MODULE_SOURCE})[\t ]*$`, "gmu");
283
+ function extractSwiftImports(source, sink) {
284
+ if (!source.includes("import"))
285
+ return;
286
+ const masked = maskImportBindingTrivia(source, "swift");
287
+ for (const match of masked.matchAll(SWIFT_IMPORT_PATTERN)) {
288
+ const spec = match[1];
289
+ if (!spec)
290
+ continue;
291
+ sink.specifier({ spec, typeOnly: false });
292
+ }
293
+ }
294
+ const ZIG_IMPORT_PATTERN = /@import[\t ]*\(/g;
295
+ function extractZigImports(source, sink) {
296
+ if (!source.includes("@import"))
297
+ return;
298
+ const masked = maskImportBindingTrivia(source, "zig");
299
+ const commentsOnly = maskTrivia(source, "zig", { maskStrings: false });
300
+ for (const match of masked.matchAll(ZIG_IMPORT_PATTERN)) {
301
+ if (match.index === undefined)
302
+ continue;
303
+ const open = match.index + match[0].length - 1;
304
+ const close = matchingDelimiterIndex(masked, open, "(", ")");
305
+ const literal = scanQuotedValues(commentsOnly, open + 1, close < 0 ? commentsOnly.length : close, ['"'])[0];
306
+ const spec = literal?.value.trim();
307
+ if (spec)
308
+ sink.specifier({ spec, typeOnly: false });
309
+ }
310
+ }
311
+ /**
312
+ * Text import extractors keyed by language id. Every entry has the same shape, so adding a
313
+ * language is one registry row and no consumer branch.
314
+ */
315
+ const TEXT_IMPORT_EXTRACTORS = {
316
+ java: extractJavaImports,
317
+ kotlin: extractKotlinImports,
318
+ rust: extractRustImports,
319
+ csharp: extractCsharpImports,
320
+ php: extractPhpImports,
321
+ python: extractPythonImports,
322
+ go: extractGoImports,
323
+ ruby: extractRubyImports,
324
+ c: extractCIncludeImports,
325
+ cpp: extractCIncludeImports,
326
+ swift: extractSwiftImports,
327
+ zig: extractZigImports,
328
+ };
329
+ /** Languages whose extractor also emits binding requests the indexer can resolve. */
330
+ const TEXT_IMPORT_BINDING_LANGUAGES = {
331
+ java: true,
332
+ kotlin: true,
333
+ rust: true,
334
+ csharp: true,
335
+ php: true,
336
+ };
337
+ export function hasTextImportBindings(languageId) {
338
+ return !!TEXT_IMPORT_BINDING_LANGUAGES[languageId];
339
+ }
340
+ /** Module specifiers a language's text extractor can prove, in source order. */
341
+ export function collectTextImportSpecifiers(languageId, source, context) {
342
+ const extractor = TEXT_IMPORT_EXTRACTORS[languageId];
343
+ if (!extractor)
344
+ return [];
345
+ const out = [];
346
+ extractor(source, { specifier: (specifier) => out.push(specifier), binding: () => { } }, context ?? {});
347
+ return out;
348
+ }
349
+ /** Binding requests a language's text extractor can prove, in source order. */
350
+ export function collectTextImportBindingRequests(languageId, source, context) {
351
+ const extractor = TEXT_IMPORT_EXTRACTORS[languageId];
352
+ if (!extractor)
353
+ return [];
354
+ const out = [];
355
+ extractor(source, { specifier: () => { }, binding: (request) => out.push(request) }, context ?? {});
356
+ return out;
357
+ }
358
+ //# sourceMappingURL=text-import-extractors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-import-extractors.js","sourceRoot":"","sources":["../../../src/indexer/imports/text-import-extractors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"locals-and-exports.d.ts","sourceRoot":"","sources":["../../src/indexer/locals-and-exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAe,aAAa,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AAgWrF,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,aAAa,EAAO,EAC7B,IAAI,CAAC,EAAE;IACL,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,GACA,WAAW,CAqwBb"}
1
+ {"version":3,"file":"locals-and-exports.d.ts","sourceRoot":"","sources":["../../src/indexer/locals-and-exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5E,OAAO,KAAK,EAAe,aAAa,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AA6VrF,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,aAAa,EAAO,EAC7B,IAAI,CAAC,EAAE;IACL,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,GACA,WAAW,CA2vBb"}
@@ -9,7 +9,9 @@ import { bindingKindToSymbolKind } from "./declarations.js";
9
9
  import { buildScopeIndexFromSource } from "./scope.js";
10
10
  import { SymbolKind } from "./types.js";
11
11
  import { isPythonInstanceAttributeDeclaration } from "../languages/definitions/python.js";
12
+ import { importCapture } from "../languages/graph-captures.js";
12
13
  import { ECMASCRIPT_IDENTIFIER_SOURCE, XID_IDENTIFIER_SOURCE } from "../util/identifiers.js";
14
+ import { isExportedDeclaration } from "./declaration-visibility.js";
13
15
  /**
14
16
  * Matches one `exportScopeBlockers` entry against an ancestor node. A plain entry compares the
15
17
  * node type; a `parent>node` entry also requires that parent type, which is how Python separates a
@@ -29,7 +31,6 @@ const JS_FALLBACK_REEXPORT_TYPE_SPECIFIER_PATTERN = new RegExp(String.raw `^type
29
31
  const JS_FALLBACK_REEXPORT_NAMESPACE_PATTERN = new RegExp(String.raw `\bexport\s*\*\s+as\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})\s+from\s*("|')([^"']*)\2`, "gu");
30
32
  const JS_FALLBACK_CJS_FUNCTION_PATTERN = new RegExp(String.raw `(?:^|[;\n\r])\s*(?:exports|module\.exports)\.(${ECMASCRIPT_IDENTIFIER_SOURCE})\s*=\s*(function\b|\([^)]*\)\s*=>)`, "gu");
31
33
  const JS_FALLBACK_CJS_OBJECT_FUNCTION_PATTERN = new RegExp(String.raw `(${ECMASCRIPT_IDENTIFIER_SOURCE})\s*:\s*(function\b|\([^)]*\)\s*=>)`, "gu");
32
- const JS_FALLBACK_TS_EXPORT_ASSIGN_PATTERN = new RegExp(String.raw `^\s*export\s*=\s*(${ECMASCRIPT_IDENTIFIER_SOURCE})\s*;?\s*$`, "u");
33
34
  const JS_DEFAULT_FUNCTION_PATTERN = new RegExp(String.raw `\bexport\s+default\s+(?:async\s+)?function\b\s*\*?\s*(${ECMASCRIPT_IDENTIFIER_SOURCE})`, "u");
34
35
  const JS_DEFAULT_CLASS_PATTERN = new RegExp(String.raw `\bexport\s+default\s+(?:abstract\s+)?class\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})`, "u");
35
36
  const JS_DEFAULT_IDENTIFIER_PATTERN = new RegExp(String.raw `\bexport\s+default\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})(?![$_\p{ID_Continue}\u200c\u200d])`, "u");
@@ -628,12 +629,10 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
628
629
  };
629
630
  const hasDefaultExport = () => exports.some((entry) => entry.type === "local" && entry.exportedAs === "default");
630
631
  const excludedCaptures = [];
631
- if (!treeForEnrichment) {
632
- for (const match of matches) {
633
- for (const capture of match.captures) {
634
- if (capture.name === "export_scope" || capture.name === "private_declaration")
635
- excludedCaptures.push(capture);
636
- }
632
+ for (const match of matches) {
633
+ for (const capture of match.captures) {
634
+ if (capture.name === "export_scope" || capture.name === "private_declaration")
635
+ excludedCaptures.push(capture);
637
636
  }
638
637
  }
639
638
  // Native scope captures preserve C/C++ exclusions without an enrichment tree.
@@ -652,14 +651,11 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
652
651
  for (const match of matches) {
653
652
  const map = capturesByName(match);
654
653
  const stmtText = map["stmt"]?.text ?? "";
655
- if (support.id === "c" || support.id === "cpp") {
656
- const declarationNode = nodeForCapture(map["declaration"]);
657
- const hasStaticStorageClass = declarationNode?.namedChildren.some((child) => child.type === "storage_class_specifier" && child.text === "static");
658
- if (hasStaticStorageClass)
659
- continue;
660
- }
661
654
  if (isOutsideModuleScope(map["name"] ?? map["src"]))
662
655
  continue;
656
+ const exportNameNode = nodeForCapture(map["name"] ?? map["src"]);
657
+ if (exportNameNode && !isExportedDeclaration(support.id, exportNameNode))
658
+ continue;
663
659
  const isTypeOnly = support.isTypeOnly(stmtText);
664
660
  if (support.id === "python") {
665
661
  const leftText = map["left"]?.text ?? "";
@@ -711,7 +707,7 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
711
707
  typeOnly: Boolean(map["type_kw"]) || isTypeOnly,
712
708
  });
713
709
  }
714
- else if (/^\s*export\s*\*/.test(stmtText)) {
710
+ else if (importCapture(map, "wild")) {
715
711
  exports.push({
716
712
  type: "exportStar",
717
713
  fromModule: from,
@@ -871,19 +867,6 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
871
867
  }
872
868
  continue;
873
869
  }
874
- const tsExportAssignMatch = support.id === "ts" || support.id === "tsx" ? JS_FALLBACK_TS_EXPORT_ASSIGN_PATTERN.exec(stmtText) : null;
875
- if (tsExportAssignMatch) {
876
- const ident = tsExportAssignMatch[1];
877
- const local = locals.find((def) => def.localName === ident);
878
- if (local) {
879
- exports.push({
880
- type: "local",
881
- exportedAs: "default",
882
- target: { ...local, kind: SymbolKind.Default },
883
- });
884
- }
885
- continue;
886
- }
887
870
  if (map["ts_export_assign"]) {
888
871
  const ident = map["ts_export_assign"].text;
889
872
  const local = locals.find((def) => def.localName === ident);
@@ -900,6 +883,9 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
900
883
  if (nameCapture) {
901
884
  if (isOutsideModuleScope(nameCapture))
902
885
  continue;
886
+ const visibilityNameNode = nodeForCapture(nameCapture);
887
+ if (visibilityNameNode && !isExportedDeclaration(support.id, visibilityNameNode))
888
+ continue;
903
889
  const nameText = map["declarator"]
904
890
  ? declaratorCaptureName(nameCapture, nodeForCapture(nameCapture))
905
891
  : nameCapture.text;
@@ -994,6 +980,16 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
994
980
  moduleSpecifier: binding.from,
995
981
  });
996
982
  }
983
+ else if (binding.kind === "star") {
984
+ if (!exports.some((entry) => entry.type === "exportStar" && entry.fromModule === binding.resolved)) {
985
+ exports.push({
986
+ type: "exportStar",
987
+ fromModule: binding.resolved,
988
+ moduleSpecifier: binding.from,
989
+ sourceSpecifier: binding.from,
990
+ });
991
+ }
992
+ }
997
993
  }
998
994
  }
999
995
  if (support.id === "python" && hasPythonAll) {