@colbymchenry/codegraph-darwin-x64 1.0.1 → 1.1.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 (156) hide show
  1. package/lib/dist/bin/codegraph.js +111 -11
  2. package/lib/dist/bin/codegraph.js.map +1 -1
  3. package/lib/dist/db/index.d.ts +22 -1
  4. package/lib/dist/db/index.d.ts.map +1 -1
  5. package/lib/dist/db/index.js +46 -1
  6. package/lib/dist/db/index.js.map +1 -1
  7. package/lib/dist/db/queries.d.ts +14 -0
  8. package/lib/dist/db/queries.d.ts.map +1 -1
  9. package/lib/dist/db/queries.js +25 -0
  10. package/lib/dist/db/queries.js.map +1 -1
  11. package/lib/dist/directory.d.ts +43 -0
  12. package/lib/dist/directory.d.ts.map +1 -1
  13. package/lib/dist/directory.js +121 -0
  14. package/lib/dist/directory.js.map +1 -1
  15. package/lib/dist/extraction/grammars.d.ts +11 -3
  16. package/lib/dist/extraction/grammars.d.ts.map +1 -1
  17. package/lib/dist/extraction/grammars.js +14 -5
  18. package/lib/dist/extraction/grammars.js.map +1 -1
  19. package/lib/dist/extraction/index.d.ts +6 -3
  20. package/lib/dist/extraction/index.d.ts.map +1 -1
  21. package/lib/dist/extraction/index.js +229 -62
  22. package/lib/dist/extraction/index.js.map +1 -1
  23. package/lib/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  24. package/lib/dist/extraction/languages/c-cpp.js +47 -2
  25. package/lib/dist/extraction/languages/c-cpp.js.map +1 -1
  26. package/lib/dist/extraction/languages/csharp.d.ts.map +1 -1
  27. package/lib/dist/extraction/languages/csharp.js +20 -0
  28. package/lib/dist/extraction/languages/csharp.js.map +1 -1
  29. package/lib/dist/extraction/languages/dart.d.ts.map +1 -1
  30. package/lib/dist/extraction/languages/dart.js +22 -0
  31. package/lib/dist/extraction/languages/dart.js.map +1 -1
  32. package/lib/dist/extraction/languages/java.d.ts.map +1 -1
  33. package/lib/dist/extraction/languages/java.js +213 -9
  34. package/lib/dist/extraction/languages/java.js.map +1 -1
  35. package/lib/dist/extraction/languages/kotlin.d.ts.map +1 -1
  36. package/lib/dist/extraction/languages/kotlin.js +51 -0
  37. package/lib/dist/extraction/languages/kotlin.js.map +1 -1
  38. package/lib/dist/extraction/languages/scala.d.ts.map +1 -1
  39. package/lib/dist/extraction/languages/scala.js +19 -9
  40. package/lib/dist/extraction/languages/scala.js.map +1 -1
  41. package/lib/dist/extraction/parse-worker.js +4 -1
  42. package/lib/dist/extraction/parse-worker.js.map +1 -1
  43. package/lib/dist/extraction/tree-sitter-types.d.ts +13 -0
  44. package/lib/dist/extraction/tree-sitter-types.d.ts.map +1 -1
  45. package/lib/dist/extraction/tree-sitter.d.ts +119 -0
  46. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  47. package/lib/dist/extraction/tree-sitter.js +890 -11
  48. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  49. package/lib/dist/index.d.ts +33 -0
  50. package/lib/dist/index.d.ts.map +1 -1
  51. package/lib/dist/index.js +68 -7
  52. package/lib/dist/index.js.map +1 -1
  53. package/lib/dist/installer/index.d.ts.map +1 -1
  54. package/lib/dist/installer/index.js +33 -67
  55. package/lib/dist/installer/index.js.map +1 -1
  56. package/lib/dist/installer/instructions-template.d.ts +3 -3
  57. package/lib/dist/installer/instructions-template.d.ts.map +1 -1
  58. package/lib/dist/installer/instructions-template.js +4 -4
  59. package/lib/dist/installer/targets/claude.d.ts +18 -12
  60. package/lib/dist/installer/targets/claude.d.ts.map +1 -1
  61. package/lib/dist/installer/targets/claude.js +78 -6
  62. package/lib/dist/installer/targets/claude.js.map +1 -1
  63. package/lib/dist/installer/targets/shared.d.ts +12 -2
  64. package/lib/dist/installer/targets/shared.d.ts.map +1 -1
  65. package/lib/dist/installer/targets/shared.js +13 -12
  66. package/lib/dist/installer/targets/shared.js.map +1 -1
  67. package/lib/dist/installer/targets/types.d.ts +7 -0
  68. package/lib/dist/installer/targets/types.d.ts.map +1 -1
  69. package/lib/dist/mcp/daemon.d.ts.map +1 -1
  70. package/lib/dist/mcp/daemon.js +16 -0
  71. package/lib/dist/mcp/daemon.js.map +1 -1
  72. package/lib/dist/mcp/engine.d.ts.map +1 -1
  73. package/lib/dist/mcp/engine.js +8 -0
  74. package/lib/dist/mcp/engine.js.map +1 -1
  75. package/lib/dist/mcp/proxy.d.ts.map +1 -1
  76. package/lib/dist/mcp/proxy.js +14 -1
  77. package/lib/dist/mcp/proxy.js.map +1 -1
  78. package/lib/dist/mcp/server-instructions.d.ts +18 -14
  79. package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
  80. package/lib/dist/mcp/server-instructions.js +57 -52
  81. package/lib/dist/mcp/server-instructions.js.map +1 -1
  82. package/lib/dist/mcp/session.d.ts.map +1 -1
  83. package/lib/dist/mcp/session.js +23 -18
  84. package/lib/dist/mcp/session.js.map +1 -1
  85. package/lib/dist/mcp/tools.d.ts +51 -1
  86. package/lib/dist/mcp/tools.d.ts.map +1 -1
  87. package/lib/dist/mcp/tools.js +585 -151
  88. package/lib/dist/mcp/tools.js.map +1 -1
  89. package/lib/dist/project-config.d.ts +36 -0
  90. package/lib/dist/project-config.d.ts.map +1 -0
  91. package/lib/dist/project-config.js +235 -0
  92. package/lib/dist/project-config.js.map +1 -0
  93. package/lib/dist/reasoning/config.d.ts +45 -0
  94. package/lib/dist/reasoning/config.d.ts.map +1 -0
  95. package/lib/dist/reasoning/config.js +171 -0
  96. package/lib/dist/reasoning/config.js.map +1 -0
  97. package/lib/dist/reasoning/credentials.d.ts +5 -0
  98. package/lib/dist/reasoning/credentials.d.ts.map +1 -0
  99. package/lib/dist/reasoning/credentials.js +83 -0
  100. package/lib/dist/reasoning/credentials.js.map +1 -0
  101. package/lib/dist/reasoning/login.d.ts +21 -0
  102. package/lib/dist/reasoning/login.d.ts.map +1 -0
  103. package/lib/dist/reasoning/login.js +85 -0
  104. package/lib/dist/reasoning/login.js.map +1 -0
  105. package/lib/dist/reasoning/reasoner.d.ts +43 -0
  106. package/lib/dist/reasoning/reasoner.d.ts.map +1 -0
  107. package/lib/dist/reasoning/reasoner.js +308 -0
  108. package/lib/dist/reasoning/reasoner.js.map +1 -0
  109. package/lib/dist/resolution/c-fnptr-synthesizer.d.ts +33 -0
  110. package/lib/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
  111. package/lib/dist/resolution/c-fnptr-synthesizer.js +352 -0
  112. package/lib/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
  113. package/lib/dist/resolution/callback-synthesizer.d.ts +6 -1
  114. package/lib/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  115. package/lib/dist/resolution/callback-synthesizer.js +1109 -1
  116. package/lib/dist/resolution/callback-synthesizer.js.map +1 -1
  117. package/lib/dist/resolution/frameworks/goframe.d.ts +41 -0
  118. package/lib/dist/resolution/frameworks/goframe.d.ts.map +1 -0
  119. package/lib/dist/resolution/frameworks/goframe.js +112 -0
  120. package/lib/dist/resolution/frameworks/goframe.js.map +1 -0
  121. package/lib/dist/resolution/frameworks/index.d.ts +1 -0
  122. package/lib/dist/resolution/frameworks/index.d.ts.map +1 -1
  123. package/lib/dist/resolution/frameworks/index.js +5 -1
  124. package/lib/dist/resolution/frameworks/index.js.map +1 -1
  125. package/lib/dist/resolution/frameworks/react.d.ts.map +1 -1
  126. package/lib/dist/resolution/frameworks/react.js +17 -60
  127. package/lib/dist/resolution/frameworks/react.js.map +1 -1
  128. package/lib/dist/resolution/goframe-synthesizer.d.ts +28 -0
  129. package/lib/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
  130. package/lib/dist/resolution/goframe-synthesizer.js +158 -0
  131. package/lib/dist/resolution/goframe-synthesizer.js.map +1 -0
  132. package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
  133. package/lib/dist/resolution/name-matcher.js +48 -8
  134. package/lib/dist/resolution/name-matcher.js.map +1 -1
  135. package/lib/dist/resolution/strip-comments.d.ts +1 -1
  136. package/lib/dist/resolution/strip-comments.d.ts.map +1 -1
  137. package/lib/dist/resolution/strip-comments.js +2 -0
  138. package/lib/dist/resolution/strip-comments.js.map +1 -1
  139. package/lib/dist/sync/watcher.d.ts +68 -1
  140. package/lib/dist/sync/watcher.d.ts.map +1 -1
  141. package/lib/dist/sync/watcher.js +212 -14
  142. package/lib/dist/sync/watcher.js.map +1 -1
  143. package/lib/dist/telemetry/index.d.ts +0 -3
  144. package/lib/dist/telemetry/index.d.ts.map +1 -1
  145. package/lib/dist/telemetry/index.js +4 -7
  146. package/lib/dist/telemetry/index.js.map +1 -1
  147. package/lib/dist/upgrade/index.d.ts.map +1 -1
  148. package/lib/dist/upgrade/index.js +40 -4
  149. package/lib/dist/upgrade/index.js.map +1 -1
  150. package/lib/dist/utils.d.ts +14 -1
  151. package/lib/dist/utils.d.ts.map +1 -1
  152. package/lib/dist/utils.js +20 -2
  153. package/lib/dist/utils.js.map +1 -1
  154. package/lib/node_modules/.package-lock.json +1 -1
  155. package/lib/package.json +2 -2
  156. package/package.json +1 -1
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cFnPointerDispatchEdges = cFnPointerDispatchEdges;
4
+ const strip_comments_1 = require("./strip-comments");
5
+ const C_CPP_EXT = /\.(c|h|cc|cpp|cxx|hpp|hh|hxx|cppm|ipp|inl|tcc)$/i;
6
+ const FN_KINDS = new Set(['function', 'method']);
7
+ const FANOUT_CAP = 300; // a real command table (git ~150) is legitimate fan-out; this only stops pathological cases.
8
+ function sliceLines(content, startLine, endLine) {
9
+ if (!startLine)
10
+ return '';
11
+ return content.split('\n').slice(startLine - 1, endLine ?? startLine).join('\n');
12
+ }
13
+ /** Index of the `}` matching the `{` at `open` (which must point at a `{`). -1 if unbalanced. */
14
+ function matchBrace(src, open) {
15
+ let depth = 0;
16
+ for (let i = open; i < src.length; i++) {
17
+ const c = src[i];
18
+ if (c === '{')
19
+ depth++;
20
+ else if (c === '}') {
21
+ depth--;
22
+ if (depth === 0)
23
+ return i;
24
+ }
25
+ }
26
+ return -1;
27
+ }
28
+ /** Split `body` on `sep` at brace/paren/bracket depth 0 (commas inside `{…}` / `(…)` stay together). */
29
+ function splitTopLevel(body, sep) {
30
+ const out = [];
31
+ let depth = 0;
32
+ let start = 0;
33
+ for (let i = 0; i < body.length; i++) {
34
+ const c = body[i];
35
+ if (c === '{' || c === '(' || c === '[')
36
+ depth++;
37
+ else if (c === '}' || c === ')' || c === ']')
38
+ depth--;
39
+ else if (c === sep && depth === 0) {
40
+ out.push(body.slice(start, i));
41
+ start = i + 1;
42
+ }
43
+ }
44
+ out.push(body.slice(start));
45
+ return out;
46
+ }
47
+ /** A fn-pointer field looks like `… (*name)(…)` — capture `name`. */
48
+ const FNPTR_DECL_RE = /\(\s*\*\s*(\w+)\s*\)\s*\(/;
49
+ /** `typedef RET (*NAME)(…)` — a function-pointer typedef. */
50
+ const FNPTR_TYPEDEF_RE = /\btypedef\b[^;{}]*?\(\s*\*\s*(\w+)\s*\)\s*\(/g;
51
+ function cFnPointerDispatchEdges(queries, ctx) {
52
+ const files = ctx.getAllFiles().filter((f) => C_CPP_EXT.test(f));
53
+ if (files.length === 0)
54
+ return [];
55
+ // Cache stripped source per file (read once, reused across passes).
56
+ const srcCache = new Map();
57
+ const src = (file) => {
58
+ if (srcCache.has(file))
59
+ return srcCache.get(file);
60
+ const raw = ctx.readFile(file);
61
+ const s = raw == null ? '' : (0, strip_comments_1.stripCommentsForRegex)(raw, 'c');
62
+ srcCache.set(file, s);
63
+ return raw == null ? null : s;
64
+ };
65
+ // ---- Pass A: function-pointer typedefs (cross-file) ----
66
+ const fnPtrTypedefs = new Set();
67
+ for (const file of files) {
68
+ const s = src(file);
69
+ if (!s || !s.includes('typedef'))
70
+ continue;
71
+ FNPTR_TYPEDEF_RE.lastIndex = 0;
72
+ let m;
73
+ while ((m = FNPTR_TYPEDEF_RE.exec(s)))
74
+ fnPtrTypedefs.add(m[1]);
75
+ }
76
+ // ---- Pass B: struct field layouts ----
77
+ // structLayout: struct name → ordered fields (with fn-pointer flag).
78
+ // fieldToStructs: fn-pointer field name → set of struct names that declare it.
79
+ const structLayout = new Map();
80
+ const fieldToStructs = new Map();
81
+ for (const st of ctx.getNodesByKind('struct')) {
82
+ if (!C_CPP_EXT.test(st.filePath))
83
+ continue;
84
+ const s = srcCache.get(st.filePath) ?? src(st.filePath);
85
+ if (!s)
86
+ continue;
87
+ const body = sliceLines(s, st.startLine, st.endLine);
88
+ const open = body.indexOf('{');
89
+ const close = open >= 0 ? matchBrace(body, open) : -1;
90
+ if (open < 0 || close < 0)
91
+ continue;
92
+ const inner = body.slice(open + 1, close);
93
+ const fields = [];
94
+ let idx = 0;
95
+ for (const rawDecl of splitTopLevel(inner, ';')) {
96
+ const decl = rawDecl.trim();
97
+ if (!decl)
98
+ continue;
99
+ let name = null;
100
+ let isFnPtr = false;
101
+ const ptr = decl.match(FNPTR_DECL_RE);
102
+ if (ptr) {
103
+ name = ptr[1];
104
+ isFnPtr = true;
105
+ }
106
+ else {
107
+ // `TYPE [*]name` — fn-pointer when TYPE is a fn-pointer typedef.
108
+ const fm = decl.match(/(\w+)\s+\*?\s*(\w+)\s*$/);
109
+ if (fm) {
110
+ name = fm[2];
111
+ isFnPtr = fnPtrTypedefs.has(fm[1]);
112
+ }
113
+ }
114
+ if (!name)
115
+ continue;
116
+ fields.push({ name, index: idx, isFnPtr });
117
+ if (isFnPtr) {
118
+ if (!fieldToStructs.has(name))
119
+ fieldToStructs.set(name, new Set());
120
+ fieldToStructs.get(name).add(st.name);
121
+ }
122
+ idx++;
123
+ }
124
+ if (fields.some((f) => f.isFnPtr))
125
+ structLayout.set(st.name, fields);
126
+ }
127
+ if (structLayout.size === 0)
128
+ return [];
129
+ const fnPtrFieldOf = (struct, field) => !!structLayout.get(struct)?.some((f) => f.name === field && f.isFnPtr);
130
+ // C/C++ function + method nodes, materialized once (bounded by C/C++ files).
131
+ const cFns = [];
132
+ for (const fn of iterateFns(queries)) {
133
+ if (C_CPP_EXT.test(fn.filePath))
134
+ cFns.push(fn);
135
+ }
136
+ // ---- function-name → node resolution (prefer a function in the same file) ----
137
+ const resolveFn = (name, preferFile) => {
138
+ const cands = ctx.getNodesByName(name).filter((n) => FN_KINDS.has(n.kind));
139
+ if (cands.length === 0)
140
+ return null;
141
+ if (cands.length === 1)
142
+ return cands[0];
143
+ if (preferFile) {
144
+ const same = cands.find((n) => n.filePath === preferFile);
145
+ if (same)
146
+ return same;
147
+ }
148
+ return cands[0];
149
+ };
150
+ // ---- Pass C: registrations — Map<"struct.field", Set<funcNodeId>> ----
151
+ const reg = new Map();
152
+ const idToNode = new Map();
153
+ const addReg = (struct, field, fn) => {
154
+ const key = `${struct}.${field}`;
155
+ if (!reg.has(key))
156
+ reg.set(key, new Set());
157
+ reg.get(key).add(fn.id);
158
+ idToNode.set(fn.id, fn);
159
+ };
160
+ // A struct value `{ … }` (one element) — register its function entries to the
161
+ // struct's fields, by `.field = fn` designators or by positional slot.
162
+ const registerStructValue = (struct, valueBody, file) => {
163
+ const layout = structLayout.get(struct);
164
+ if (!layout)
165
+ return;
166
+ const items = splitTopLevel(valueBody, ',');
167
+ let pos = 0;
168
+ for (const rawItem of items) {
169
+ const item = rawItem.trim();
170
+ if (!item)
171
+ continue;
172
+ const des = item.match(/^\.\s*(\w+)\s*=\s*(?:&\s*)?(\w+)\s*$/);
173
+ if (des) {
174
+ const field = des[1];
175
+ if (fnPtrFieldOf(struct, field)) {
176
+ const fn = resolveFn(des[2], file);
177
+ if (fn)
178
+ addReg(struct, field, fn);
179
+ }
180
+ // a designated item does not advance positional counting
181
+ continue;
182
+ }
183
+ const field = layout.find((f) => f.index === pos);
184
+ if (field?.isFnPtr) {
185
+ const id = item.match(/^&?\s*(\w+)\s*$/);
186
+ if (id) {
187
+ const fn = resolveFn(id[1], file);
188
+ if (fn)
189
+ addReg(struct, field.name, fn);
190
+ }
191
+ }
192
+ pos++;
193
+ }
194
+ };
195
+ // `(?:struct )?TYPE name[opt] = {` initializers, where TYPE is a struct that
196
+ // has ≥1 fn-pointer field. Handles both single (`= {…}`) and array
197
+ // (`[] = { {…}, {…} }`) forms.
198
+ const INIT_RE = /(?:^|[;{}])\s*(?:(?:static|const|extern|register|volatile)\s+)*(?:struct\s+)?(\w+)\s+(\w+)\s*(\[[^\]]*\])?\s*=\s*\{/g;
199
+ for (const file of files) {
200
+ const s = srcCache.get(file);
201
+ if (!s || !s.includes('='))
202
+ continue;
203
+ INIT_RE.lastIndex = 0;
204
+ let m;
205
+ while ((m = INIT_RE.exec(s))) {
206
+ const struct = m[1];
207
+ if (!structLayout.has(struct))
208
+ continue;
209
+ const isArray = !!m[3];
210
+ const open = m.index + m[0].length - 1; // points at the `{`
211
+ const close = matchBrace(s, open);
212
+ if (close < 0)
213
+ continue;
214
+ const body = s.slice(open + 1, close);
215
+ if (isArray) {
216
+ // top-level `{ … }` element groups
217
+ for (const el of splitTopLevel(body, ',')) {
218
+ const t = el.trim();
219
+ if (t.startsWith('{')) {
220
+ const e = matchBrace(t, 0);
221
+ if (e > 0)
222
+ registerStructValue(struct, t.slice(1, e), file);
223
+ }
224
+ else if (t) {
225
+ // array of bare values (rare for structs) — treat as one positional slot
226
+ registerStructValue(struct, t, file);
227
+ }
228
+ }
229
+ }
230
+ else {
231
+ registerStructValue(struct, body, file);
232
+ }
233
+ INIT_RE.lastIndex = close;
234
+ }
235
+ }
236
+ // ---- receiver-type resolution within a function's source ----
237
+ // `(?:struct )?TYPE [*]recv` declared in the params or body → TYPE (if a known struct).
238
+ const recvTypeIn = (fnSrc, recv) => {
239
+ const re = new RegExp(`(?:struct\\s+)?(\\w+)\\s*\\*?\\s*\\b${recv}\\b\\s*(?:[,)=;]|\\[)`, 'g');
240
+ let m;
241
+ while ((m = re.exec(fnSrc))) {
242
+ if (structLayout.has(m[1]))
243
+ return m[1];
244
+ }
245
+ return null;
246
+ };
247
+ // ---- Pass D: field←field propagation (`a->f = b->g`) ----
248
+ // Collected as (targetStruct.field ← sourceStruct.field) pairs, then merged to
249
+ // a fixpoint so a hook slot inherits a registry field's handlers.
250
+ const FIELD_ASSIGN_RE = /(\w+)\s*(?:->|\.)\s*(\w+)\s*=\s*(\w+)\s*(?:->|\.)\s*(\w+)/g;
251
+ const propagations = [];
252
+ for (const fn of cFns) {
253
+ const s = srcCache.get(fn.filePath);
254
+ if (!s)
255
+ continue;
256
+ const body = sliceLines(s, fn.startLine, fn.endLine);
257
+ if (!body.includes('='))
258
+ continue;
259
+ FIELD_ASSIGN_RE.lastIndex = 0;
260
+ let m;
261
+ while ((m = FIELD_ASSIGN_RE.exec(body))) {
262
+ const [, lrecv, lfield, rrecv, rfield] = m;
263
+ const lt = recvTypeIn(body, lrecv);
264
+ const rt = recvTypeIn(body, rrecv);
265
+ if (lt && rt && fnPtrFieldOf(lt, lfield) && fnPtrFieldOf(rt, rfield)) {
266
+ propagations.push({ to: `${lt}.${lfield}`, from: `${rt}.${rfield}` });
267
+ }
268
+ }
269
+ }
270
+ for (let pass = 0; pass < 3 && propagations.length; pass++) {
271
+ let changed = false;
272
+ for (const { to, from } of propagations) {
273
+ const fromSet = reg.get(from);
274
+ if (!fromSet)
275
+ continue;
276
+ if (!reg.has(to))
277
+ reg.set(to, new Set());
278
+ const toSet = reg.get(to);
279
+ for (const id of fromSet) {
280
+ if (!toSet.has(id)) {
281
+ toSet.add(id);
282
+ changed = true;
283
+ }
284
+ }
285
+ }
286
+ if (!changed)
287
+ break;
288
+ }
289
+ if (reg.size === 0)
290
+ return [];
291
+ // ---- Pass E: dispatch sites → edges ----
292
+ // recv->field( or recv.field( where field is a known fn-pointer field.
293
+ const DISPATCH_RE = /(\w+)\s*(?:->|\.)\s*(\w+)\s*\(/g;
294
+ const edges = [];
295
+ const seen = new Set();
296
+ for (const fn of cFns) {
297
+ const s = srcCache.get(fn.filePath);
298
+ if (!s)
299
+ continue;
300
+ const body = sliceLines(s, fn.startLine, fn.endLine);
301
+ DISPATCH_RE.lastIndex = 0;
302
+ let m;
303
+ let added = 0;
304
+ while ((m = DISPATCH_RE.exec(body)) && added < FANOUT_CAP) {
305
+ const recv = m[1];
306
+ const field = m[2];
307
+ const owners = fieldToStructs.get(field);
308
+ if (!owners || owners.size === 0)
309
+ continue;
310
+ // Resolve the receiver's struct type; else fall back to a field name that
311
+ // belongs to exactly one struct.
312
+ let struct = recvTypeIn(body, recv);
313
+ if (!struct || !owners.has(struct))
314
+ struct = owners.size === 1 ? [...owners][0] : null;
315
+ if (!struct)
316
+ continue;
317
+ const targets = reg.get(`${struct}.${field}`);
318
+ if (!targets)
319
+ continue;
320
+ const line = fn.startLine + body.slice(0, m.index).split('\n').length - 1;
321
+ for (const tid of targets) {
322
+ if (tid === fn.id)
323
+ continue;
324
+ const key = `${fn.id}>${tid}`;
325
+ if (seen.has(key))
326
+ continue;
327
+ seen.add(key);
328
+ edges.push({
329
+ source: fn.id,
330
+ target: tid,
331
+ kind: 'calls',
332
+ line,
333
+ provenance: 'heuristic',
334
+ metadata: {
335
+ synthesizedBy: 'fn-pointer-dispatch',
336
+ via: `${struct}.${field}`,
337
+ registeredAt: `${fn.filePath}:${line}`,
338
+ },
339
+ });
340
+ if (++added >= FANOUT_CAP)
341
+ break;
342
+ }
343
+ }
344
+ }
345
+ return edges;
346
+ }
347
+ /** C/C++ function + method nodes, streamed (memory-safe on symbol-dense repos). */
348
+ function* iterateFns(queries) {
349
+ yield* queries.iterateNodesByKind('function');
350
+ yield* queries.iterateNodesByKind('method');
351
+ }
352
+ //# sourceMappingURL=c-fnptr-synthesizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c-fnptr-synthesizer.js","sourceRoot":"","sources":["../../src/resolution/c-fnptr-synthesizer.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,12 @@ import type { ResolutionContext } from './types';
3
3
  /**
4
4
  * Synthesize dispatcher→callback edges (field observers + EventEmitters +
5
5
  * React re-render + JSX children + Vue templates + SvelteKit load + RN event
6
- * channel + Fabric native-impl + MyBatis Java↔XML + Gin middleware chain).
6
+ * channel + Fabric native-impl + MyBatis Java↔XML + Gin middleware chain +
7
+ * Redux-thunk dispatch chain + object-literal registry dispatch + RTK Query
8
+ * generated-hook → endpoint + Pinia useStore().action() + Vuex string dispatch +
9
+ * Celery task .delay()/.apply_async() → task body + Spring publishEvent → @EventListener +
10
+ * MediatR Send/Publish → IRequestHandler/INotificationHandler +
11
+ * Sidekiq Worker.perform_async → #perform + Laravel event(new X) → listener handle).
7
12
  * Returns the count added. Never throws into indexing — callers wrap in try/catch.
8
13
  */
9
14
  export declare function synthesizeCallbackEdges(queries: QueryBuilder, ctx: ResolutionContext): number;
@@ -1 +1 @@
1
- {"version":3,"file":"callback-synthesizer.d.ts","sourceRoot":"","sources":["../../src/resolution/callback-synthesizer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAulDjD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAkE7F"}
1
+ {"version":3,"file":"callback-synthesizer.d.ts","sourceRoot":"","sources":["../../src/resolution/callback-synthesizer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAgkFjD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,GAAG,MAAM,CA0F7F"}