@launchsecure/launch-kit 0.0.32 → 0.0.34
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.
- package/dist/chart-client/assets/{index-B__ARB8k.js → index-DFu2xIrM.js} +2 -2
- package/dist/chart-client/assets/index-DpKO9p0s.css +1 -0
- package/dist/chart-client/index.html +2 -2
- package/dist/client/assets/{index-h8kMzVtG.js → index-Cbw6bVdx.js} +2 -2
- package/dist/client/assets/index-Dv6dD2zY.css +32 -0
- package/dist/client/index.html +2 -2
- package/dist/council-client/assets/index-AqQ9Sei6.css +1 -0
- package/dist/council-client/assets/{index-CWaDcsFR.js → index-CAsmGTzg.js} +2 -2
- package/dist/council-client/index.html +2 -2
- package/dist/deck-client/assets/{_baseUniq-C7GsHvgg.js → _baseUniq-BiVx0WO_.js} +1 -1
- package/dist/deck-client/assets/{arc-CSrZRINY.js → arc-DGMkiEzS.js} +1 -1
- package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-zoB-G17J.js → architectureDiagram-Q4EWVU46-Y2WRmHtk.js} +1 -1
- package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-BRjjtYH6.js → blockDiagram-DXYQGD6D-_Lbfu5BQ.js} +1 -1
- package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-C3D3sd2U.js → c4Diagram-AHTNJAMY-CTqpYTBX.js} +1 -1
- package/dist/deck-client/assets/channel-DB6LxW_l.js +1 -0
- package/dist/deck-client/assets/{chunk-4BX2VUAB-DhpDMOPO.js → chunk-4BX2VUAB-liEIbPHs.js} +1 -1
- package/dist/deck-client/assets/{chunk-4TB4RGXK-BIRgPXRl.js → chunk-4TB4RGXK-CCc6lYvL.js} +1 -1
- package/dist/deck-client/assets/{chunk-55IACEB6-BF24dwDZ.js → chunk-55IACEB6-D02jJUR2.js} +1 -1
- package/dist/deck-client/assets/{chunk-EDXVE4YY-CW75Y61B.js → chunk-EDXVE4YY-BFmGMbLD.js} +1 -1
- package/dist/deck-client/assets/{chunk-FMBD7UC4-B5-oyL79.js → chunk-FMBD7UC4-6wFLOVcJ.js} +1 -1
- package/dist/deck-client/assets/{chunk-OYMX7WX6-BB2bHe_Q.js → chunk-OYMX7WX6-Bnr8RiBf.js} +1 -1
- package/dist/deck-client/assets/{chunk-QZHKN3VN-D80eZO4B.js → chunk-QZHKN3VN-Ct82MksJ.js} +1 -1
- package/dist/deck-client/assets/{chunk-YZCP3GAM-Dz9787p_.js → chunk-YZCP3GAM-BXmN1diQ.js} +1 -1
- package/dist/deck-client/assets/classDiagram-6PBFFD2Q-g944ZyG8.js +1 -0
- package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-g944ZyG8.js +1 -0
- package/dist/deck-client/assets/clone-DiIRH1pI.js +1 -0
- package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-MQjiZLcL.js → cose-bilkent-S5V4N54A-CmQCT-mH.js} +1 -1
- package/dist/deck-client/assets/{dagre-KV5264BT-DG4EcLpJ.js → dagre-KV5264BT-DDdSa9EX.js} +1 -1
- package/dist/deck-client/assets/{diagram-5BDNPKRD-1n7hM3Gc.js → diagram-5BDNPKRD-Bccks2xJ.js} +1 -1
- package/dist/deck-client/assets/{diagram-G4DWMVQ6-CYMarncV.js → diagram-G4DWMVQ6-CPPNgxmQ.js} +1 -1
- package/dist/deck-client/assets/{diagram-MMDJMWI5-DSisoipe.js → diagram-MMDJMWI5-KrD300pS.js} +1 -1
- package/dist/deck-client/assets/{diagram-TYMM5635-Btnq49OJ.js → diagram-TYMM5635-DefnLuQf.js} +1 -1
- package/dist/deck-client/assets/{erDiagram-SMLLAGMA-Cu2Hb_Tz.js → erDiagram-SMLLAGMA-DI9FfnFP.js} +1 -1
- package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-CGJzUzsO.js → flowDiagram-DWJPFMVM-twKyd3Fx.js} +1 -1
- package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-D9sqGUBT.js → ganttDiagram-T4ZO3ILL-Wau3jhBr.js} +1 -1
- package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-C0QwX2od.js → gitGraphDiagram-UUTBAWPF-D9GgYXwb.js} +1 -1
- package/dist/deck-client/assets/{graph-CcBjOQCl.js → graph-BhNLzyXS.js} +1 -1
- package/dist/deck-client/assets/index-B-YQq5b5.css +1 -0
- package/dist/deck-client/assets/{index-0arwoc0z.js → index-BtQBaQ7s.js} +3 -3
- package/dist/deck-client/assets/{infoDiagram-42DDH7IO-DTimhhhS.js → infoDiagram-42DDH7IO-TylGlSG-.js} +1 -1
- package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-DxOxg_B4.js → ishikawaDiagram-UXIWVN3A-DAT8icpg.js} +1 -1
- package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-Bpq0qa4j.js → journeyDiagram-VCZTEJTY-D3v_XL72.js} +1 -1
- package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-aTIrpcVO.js → kanban-definition-6JOO6SKY-DNUOBiNr.js} +1 -1
- package/dist/deck-client/assets/{layout-DqglLR2E.js → layout-COfodgwF.js} +1 -1
- package/dist/deck-client/assets/{linear-D5GxehPc.js → linear-DmTsuIvK.js} +1 -1
- package/dist/deck-client/assets/{min-DXLfSREq.js → min-BW1F7i1D.js} +1 -1
- package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-mO5Vys7I.js → mindmap-definition-QFDTVHPH-CErFzKWl.js} +1 -1
- package/dist/deck-client/assets/{pieDiagram-DEJITSTG-Dm0gzdAr.js → pieDiagram-DEJITSTG-DW5F757o.js} +1 -1
- package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-Daq7j3qD.js → quadrantDiagram-34T5L4WZ-B1S2-TfI.js} +1 -1
- package/dist/deck-client/assets/{requirementDiagram-MS252O5E-CmwV95um.js → requirementDiagram-MS252O5E-BY5BAR-5.js} +1 -1
- package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-BOYl3Nkf.js → sankeyDiagram-XADWPNL6-CE1Cp9HS.js} +1 -1
- package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-BuUjhIcW.js → sequenceDiagram-FGHM5R23-IaHnbKye.js} +1 -1
- package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-LUZ_uwio.js → stateDiagram-FHFEXIEX-CwPJm9hU.js} +1 -1
- package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-DQYa2M1q.js +1 -0
- package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-CDUxCCAW.js → timeline-definition-GMOUNBTQ-DVFGGSgN.js} +1 -1
- package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-BRb24Tf7.js → vennDiagram-DHZGUBPP-C1194MJi.js} +1 -1
- package/dist/deck-client/assets/wardley-RL74JXVD-CHZiUbBa.js +162 -0
- package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-BLGlYrQz.js → wardleyDiagram-NUSXRM2D-hpwdFfGj.js} +1 -1
- package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-De31MSnk.js → xychartDiagram-5P7HB3ND-DYkotwy8.js} +1 -1
- package/dist/deck-client/index.html +2 -2
- package/dist/server/chart-serve.js +167 -2
- package/dist/server/cli.js +328 -42
- package/dist/server/course-entry.js +1 -1
- package/dist/server/graph-mcp-entry.js +180 -4
- package/dist/server/init-entry.js +1133 -219
- package/dist/server/launch-radar-entry.js +45 -0
- package/dist/server/parse-worker-entry.js +167 -2
- package/dist/server/radar-docker-init-entry.js +644 -0
- package/dist/server/radar-entrypoint-entry.js +99 -0
- package/dist/server/radar-teardown-entry.js +478 -0
- package/dist/server/recall-entry.js +4 -1
- package/dist/server/rover-entry.js +20122 -0
- package/package.json +7 -5
- package/scaffolds/ls-marketplace/plugins/kit/commands/activate-statusline.md +5 -5
- package/scaffolds/ls-marketplace/plugins/kit/commands/standup.md +6 -6
- package/scaffolds/ls-marketplace/plugins/kit/skills/analyse/SKILL.md +6 -0
- package/scaffolds/ls-marketplace/plugins/kit/skills/brief/SKILL.md +40 -48
- package/scaffolds/ls-marketplace/plugins/kit/skills/debug/SKILL.md +45 -20
- package/scaffolds/ls-marketplace/plugins/kit/skills/deploy-check/SKILL.md +76 -67
- package/scaffolds/ls-marketplace/plugins/kit/skills/handoff/SKILL.md +132 -0
- package/scaffolds/ls-marketplace/plugins/kit/skills/ship/SKILL.md +290 -0
- package/scaffolds/statusline/statusline-mcp.sh +82 -2
- package/scaffolds/statusline/statusline-wrapper.sh +8 -1
- package/dist/chart-client/assets/index-CDIhdgWg.css +0 -1
- package/dist/client/assets/index-CfW4n40I.css +0 -32
- package/dist/council-client/assets/index-CZim6x1u.css +0 -1
- package/dist/deck-client/assets/channel-8ReQnQfH.js +0 -1
- package/dist/deck-client/assets/classDiagram-6PBFFD2Q-cRxTeGkK.js +0 -1
- package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-cRxTeGkK.js +0 -1
- package/dist/deck-client/assets/clone-LSHZ3K6R.js +0 -1
- package/dist/deck-client/assets/index-BlTlhxFW.css +0 -1
- package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-CnnRwE5D.js +0 -1
- package/dist/deck-client/assets/wardley-RL74JXVD-B0BYyVBY.js +0 -162
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
18
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
19
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
20
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
21
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
22
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
23
|
+
mod
|
|
24
|
+
));
|
|
25
|
+
|
|
26
|
+
// src/server/launch-radar-entry.ts
|
|
27
|
+
var import_node_child_process = require("node:child_process");
|
|
28
|
+
var import_node_path = __toESM(require("node:path"));
|
|
29
|
+
var sequencerEntry = import_node_path.default.join(__dirname, "cli.js");
|
|
30
|
+
var child = (0, import_node_child_process.spawn)(process.execPath, [sequencerEntry, "radar", ...process.argv.slice(2)], {
|
|
31
|
+
stdio: "inherit"
|
|
32
|
+
});
|
|
33
|
+
var forward = (sig) => () => {
|
|
34
|
+
try {
|
|
35
|
+
child.kill(sig);
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
process.on("SIGTERM", forward("SIGTERM"));
|
|
40
|
+
process.on("SIGINT", forward("SIGINT"));
|
|
41
|
+
process.on("SIGHUP", forward("SIGHUP"));
|
|
42
|
+
child.on("exit", (code, signal) => {
|
|
43
|
+
if (signal) process.kill(process.pid, signal);
|
|
44
|
+
else process.exit(code ?? 0);
|
|
45
|
+
});
|
|
@@ -346,6 +346,7 @@ function emptyParsedFile(absPath) {
|
|
|
346
346
|
return {
|
|
347
347
|
name: absPath.split("/").pop() ?? absPath,
|
|
348
348
|
exports: [],
|
|
349
|
+
defines: [],
|
|
349
350
|
imports: [],
|
|
350
351
|
reExports: [],
|
|
351
352
|
jsxElements: /* @__PURE__ */ new Set(),
|
|
@@ -458,6 +459,34 @@ function parseFileTS(absPath) {
|
|
|
458
459
|
reExports.push({ name: "*", from: caps["reexport.wildcard.source"], isWildcard: true });
|
|
459
460
|
}
|
|
460
461
|
}
|
|
462
|
+
const definesSet = /* @__PURE__ */ new Set();
|
|
463
|
+
function recordCallable(decl) {
|
|
464
|
+
if (decl.type === "function_declaration" || decl.type === "generator_function_declaration") {
|
|
465
|
+
const id = childOfType(decl, "identifier");
|
|
466
|
+
if (id) definesSet.add(id.text);
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
if (decl.type === "class_declaration") {
|
|
470
|
+
const id = childOfType(decl, "type_identifier") ?? childOfType(decl, "identifier");
|
|
471
|
+
if (id) definesSet.add(id.text);
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
if (decl.type === "lexical_declaration" || decl.type === "variable_declaration") {
|
|
475
|
+
for (const d of childrenOfType(decl, "variable_declarator")) {
|
|
476
|
+
const id = childOfType(d, "identifier");
|
|
477
|
+
if (!id) continue;
|
|
478
|
+
const isCallable = !!childOfType(d, "arrow_function") || !!childOfType(d, "function_expression") || !!childOfType(d, "function") || !!childOfType(d, "generator_function");
|
|
479
|
+
if (isCallable) definesSet.add(id.text);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
for (const child of root.children) {
|
|
484
|
+
if (child.type === "export_statement") {
|
|
485
|
+
for (const gc of child.children) recordCallable(gc);
|
|
486
|
+
} else {
|
|
487
|
+
recordCallable(child);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
461
490
|
const jsxElements = /* @__PURE__ */ new Set();
|
|
462
491
|
const jsxQuery = getQuery("jsx-elements");
|
|
463
492
|
const jsxCaptures = jsxQuery.captures(root);
|
|
@@ -546,7 +575,7 @@ function parseFileTS(absPath) {
|
|
|
546
575
|
}
|
|
547
576
|
}
|
|
548
577
|
const name = defaultName ?? firstValueExport ?? firstTypeExport ?? "";
|
|
549
|
-
return { name, exports: exportsOrdered, imports, reExports, jsxElements, navigations, fetchCalls };
|
|
578
|
+
return { name, exports: exportsOrdered, defines: [...definesSet], imports, reExports, jsxElements, navigations, fetchCalls };
|
|
550
579
|
}
|
|
551
580
|
function extractDbCallsTS(absPath) {
|
|
552
581
|
const tree = parseSource(absPath);
|
|
@@ -2041,6 +2070,11 @@ function generate(rootDir) {
|
|
|
2041
2070
|
const parsed = parsedByPath.get(absPath);
|
|
2042
2071
|
const name = parsed.name || nameFromFilename(absPath);
|
|
2043
2072
|
const layer = CLASSIFICATION_TO_LAYER[type] ?? "ui";
|
|
2073
|
+
const importedNames = [...new Set(
|
|
2074
|
+
parsed.imports.flatMap(
|
|
2075
|
+
(imp) => imp.isTypeOnly ? [] : imp.names.filter((n) => !imp.typeNames.has(n))
|
|
2076
|
+
)
|
|
2077
|
+
)];
|
|
2044
2078
|
nodeIdSet.add(id);
|
|
2045
2079
|
if (layer === "api") {
|
|
2046
2080
|
const dbCalls = extractDbCallsTS(absPath);
|
|
@@ -2079,6 +2113,8 @@ function generate(rootDir) {
|
|
|
2079
2113
|
responses: deep.responses,
|
|
2080
2114
|
params: deep.params,
|
|
2081
2115
|
...deep.effects ? { effects: deep.effects } : {},
|
|
2116
|
+
...parsed.defines.length > 0 ? { defines: parsed.defines } : {},
|
|
2117
|
+
...importedNames.length > 0 ? { imported_names: importedNames } : {},
|
|
2082
2118
|
...deep.notes ? { notes: deep.notes } : {},
|
|
2083
2119
|
_dbCalls: dbCalls
|
|
2084
2120
|
// temp: used for cross-ref building below
|
|
@@ -2095,6 +2131,8 @@ function generate(rootDir) {
|
|
|
2095
2131
|
layer: "ui",
|
|
2096
2132
|
route,
|
|
2097
2133
|
exports: parsed.exports,
|
|
2134
|
+
...parsed.defines.length > 0 ? { defines: parsed.defines } : {},
|
|
2135
|
+
...importedNames.length > 0 ? { imported_names: importedNames } : {},
|
|
2098
2136
|
elements: deep.elements,
|
|
2099
2137
|
stateVars: deep.stateVars,
|
|
2100
2138
|
conditions: deep.conditions,
|
|
@@ -5048,6 +5086,132 @@ var middlewareGatesParser = {
|
|
|
5048
5086
|
}
|
|
5049
5087
|
};
|
|
5050
5088
|
|
|
5089
|
+
// src/server/graph/parsers/crosslayer/call-resolver.ts
|
|
5090
|
+
var BARE_IDENT = /^[A-Za-z_$][\w$]*$/;
|
|
5091
|
+
var callResolverParser = {
|
|
5092
|
+
id: "call-resolver",
|
|
5093
|
+
layer: "crosslayer",
|
|
5094
|
+
concern: "call-graph",
|
|
5095
|
+
detect(_rootDir) {
|
|
5096
|
+
return true;
|
|
5097
|
+
},
|
|
5098
|
+
generate(_rootDir, layerOutputs) {
|
|
5099
|
+
const definers = /* @__PURE__ */ new Map();
|
|
5100
|
+
const addDef = (sym, entry) => {
|
|
5101
|
+
if (!BARE_IDENT.test(sym)) return;
|
|
5102
|
+
const list = definers.get(sym);
|
|
5103
|
+
if (!list) {
|
|
5104
|
+
definers.set(sym, [entry]);
|
|
5105
|
+
} else if (!list.some((d) => d.nodeId === entry.nodeId)) {
|
|
5106
|
+
list.push(entry);
|
|
5107
|
+
}
|
|
5108
|
+
};
|
|
5109
|
+
const nodeLayer = /* @__PURE__ */ new Map();
|
|
5110
|
+
for (const [layer, output] of layerOutputs) {
|
|
5111
|
+
if (layer === "db" || layer === "static") continue;
|
|
5112
|
+
for (const node of output.nodes) {
|
|
5113
|
+
nodeLayer.set(node.id, layer);
|
|
5114
|
+
const entry = { nodeId: node.id, layer };
|
|
5115
|
+
for (const s of node.exports ?? []) addDef(s, entry);
|
|
5116
|
+
for (const s of node.defines ?? []) addDef(s, entry);
|
|
5117
|
+
}
|
|
5118
|
+
}
|
|
5119
|
+
const importTargets = /* @__PURE__ */ new Map();
|
|
5120
|
+
for (const [, output] of layerOutputs) {
|
|
5121
|
+
for (const e of output.edges) {
|
|
5122
|
+
if (e.type !== "imports" && e.type !== "imports_type" && e.type !== "renders") continue;
|
|
5123
|
+
let set = importTargets.get(e.source);
|
|
5124
|
+
if (!set) {
|
|
5125
|
+
set = /* @__PURE__ */ new Set();
|
|
5126
|
+
importTargets.set(e.source, set);
|
|
5127
|
+
}
|
|
5128
|
+
set.add(e.target);
|
|
5129
|
+
}
|
|
5130
|
+
}
|
|
5131
|
+
const crossRefs = [];
|
|
5132
|
+
const seen = /* @__PURE__ */ new Set();
|
|
5133
|
+
let resolvedSelf = 0;
|
|
5134
|
+
let resolvedImport = 0;
|
|
5135
|
+
let ambiguous = 0;
|
|
5136
|
+
let dropped = 0;
|
|
5137
|
+
for (const [, output] of layerOutputs) {
|
|
5138
|
+
for (const node of output.nodes) {
|
|
5139
|
+
const calls = node.effects?.calls;
|
|
5140
|
+
if (!calls || calls.length === 0) continue;
|
|
5141
|
+
const selfSyms = /* @__PURE__ */ new Set([
|
|
5142
|
+
...node.exports ?? [],
|
|
5143
|
+
...node.defines ?? []
|
|
5144
|
+
]);
|
|
5145
|
+
const importedSyms = new Set(node.imported_names ?? []);
|
|
5146
|
+
const myImports = importTargets.get(node.id);
|
|
5147
|
+
const localSeen = /* @__PURE__ */ new Set();
|
|
5148
|
+
for (const callee of calls) {
|
|
5149
|
+
if (!BARE_IDENT.test(callee)) continue;
|
|
5150
|
+
if (localSeen.has(callee)) continue;
|
|
5151
|
+
localSeen.add(callee);
|
|
5152
|
+
const key = `${node.id}\u2192${callee}`;
|
|
5153
|
+
if (selfSyms.has(callee)) {
|
|
5154
|
+
if (seen.has(key)) continue;
|
|
5155
|
+
seen.add(key);
|
|
5156
|
+
crossRefs.push({
|
|
5157
|
+
source: node.id,
|
|
5158
|
+
target: callee,
|
|
5159
|
+
type: "calls",
|
|
5160
|
+
layer: nodeLayer.get(node.id) ?? "ui",
|
|
5161
|
+
defined_in: node.id
|
|
5162
|
+
});
|
|
5163
|
+
resolvedSelf++;
|
|
5164
|
+
continue;
|
|
5165
|
+
}
|
|
5166
|
+
if (!importedSyms.has(callee)) {
|
|
5167
|
+
dropped++;
|
|
5168
|
+
continue;
|
|
5169
|
+
}
|
|
5170
|
+
const defs = (definers.get(callee) ?? []).filter((d) => d.nodeId !== node.id);
|
|
5171
|
+
if (defs.length === 0) {
|
|
5172
|
+
dropped++;
|
|
5173
|
+
continue;
|
|
5174
|
+
}
|
|
5175
|
+
const fromImported = myImports ? defs.filter((d) => myImports.has(d.nodeId)) : [];
|
|
5176
|
+
const chosen = fromImported.length > 0 ? fromImported : defs;
|
|
5177
|
+
const owner = chosen[0];
|
|
5178
|
+
const isAmbiguous = chosen.length > 1;
|
|
5179
|
+
if (isAmbiguous) ambiguous++;
|
|
5180
|
+
if (seen.has(key)) continue;
|
|
5181
|
+
seen.add(key);
|
|
5182
|
+
const ref = {
|
|
5183
|
+
source: node.id,
|
|
5184
|
+
target: callee,
|
|
5185
|
+
type: "calls",
|
|
5186
|
+
layer: owner.layer,
|
|
5187
|
+
defined_in: owner.nodeId
|
|
5188
|
+
};
|
|
5189
|
+
if (isAmbiguous) ref.ambiguous = true;
|
|
5190
|
+
crossRefs.push(ref);
|
|
5191
|
+
resolvedImport++;
|
|
5192
|
+
}
|
|
5193
|
+
}
|
|
5194
|
+
}
|
|
5195
|
+
crossRefs.sort(
|
|
5196
|
+
(a, b) => a.source.localeCompare(b.source) || a.target.localeCompare(b.target)
|
|
5197
|
+
);
|
|
5198
|
+
return {
|
|
5199
|
+
cross_refs: crossRefs,
|
|
5200
|
+
flagged_edges: [],
|
|
5201
|
+
warnings: [],
|
|
5202
|
+
patterns: {
|
|
5203
|
+
call_resolution: {
|
|
5204
|
+
resolved_self: resolvedSelf,
|
|
5205
|
+
resolved_import: resolvedImport,
|
|
5206
|
+
ambiguous,
|
|
5207
|
+
dropped,
|
|
5208
|
+
symbols_defined: definers.size
|
|
5209
|
+
}
|
|
5210
|
+
}
|
|
5211
|
+
};
|
|
5212
|
+
}
|
|
5213
|
+
};
|
|
5214
|
+
|
|
5051
5215
|
// src/server/graph/core/parser-registry.ts
|
|
5052
5216
|
function isMultiLayerParser(p) {
|
|
5053
5217
|
return "layers" in p && Array.isArray(p.layers);
|
|
@@ -5114,7 +5278,8 @@ function registerBuiltins(registry, disabled) {
|
|
|
5114
5278
|
apiAnnotationsParser,
|
|
5115
5279
|
urlLiteralScannerParser,
|
|
5116
5280
|
staticRefScannerParser,
|
|
5117
|
-
middlewareGatesParser
|
|
5281
|
+
middlewareGatesParser,
|
|
5282
|
+
callResolverParser
|
|
5118
5283
|
];
|
|
5119
5284
|
for (const parser of builtins) {
|
|
5120
5285
|
if (disabled.has(parser.id)) continue;
|