@descryy/core 0.6.3 → 0.8.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.
- package/dist/contracts/index.d.ts +3 -1
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +2 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/paths.d.ts +7 -0
- package/dist/contracts/paths.d.ts.map +1 -1
- package/dist/contracts/paths.js +7 -4
- package/dist/contracts/paths.js.map +1 -1
- package/dist/contracts/shapes.d.ts +12 -1
- package/dist/contracts/shapes.d.ts.map +1 -1
- package/dist/contracts/shapes.js +68 -0
- package/dist/contracts/shapes.js.map +1 -1
- package/dist/contracts/workspace-join.d.ts +104 -0
- package/dist/contracts/workspace-join.d.ts.map +1 -0
- package/dist/contracts/workspace-join.js +208 -0
- package/dist/contracts/workspace-join.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/query/index.d.ts +7 -3
- package/dist/query/index.d.ts.map +1 -1
- package/dist/query/index.js +4 -2
- package/dist/query/index.js.map +1 -1
- package/dist/query/model-table.d.ts +7 -0
- package/dist/query/model-table.d.ts.map +1 -1
- package/dist/query/model-table.js +7 -4
- package/dist/query/model-table.js.map +1 -1
- package/dist/query/persistence-reach.d.ts +150 -0
- package/dist/query/persistence-reach.d.ts.map +1 -0
- package/dist/query/persistence-reach.js +393 -0
- package/dist/query/persistence-reach.js.map +1 -0
- package/dist/query/queries.d.ts +5 -0
- package/dist/query/queries.d.ts.map +1 -1
- package/dist/query/queries.js +58 -0
- package/dist/query/queries.js.map +1 -1
- package/dist/query/user-chain.d.ts +89 -0
- package/dist/query/user-chain.d.ts.map +1 -0
- package/dist/query/user-chain.js +203 -0
- package/dist/query/user-chain.js.map +1 -0
- package/dist/sources/git/history.d.ts +12 -0
- package/dist/sources/git/history.d.ts.map +1 -1
- package/dist/sources/git/history.js +27 -0
- package/dist/sources/git/history.js.map +1 -1
- package/dist/sources/git/index.d.ts +1 -1
- package/dist/sources/git/index.d.ts.map +1 -1
- package/dist/sources/git/index.js +1 -1
- package/dist/sources/git/index.js.map +1 -1
- package/dist/store/incremental-cache.d.ts +120 -0
- package/dist/store/incremental-cache.d.ts.map +1 -0
- package/dist/store/incremental-cache.js +161 -0
- package/dist/store/incremental-cache.js.map +1 -0
- package/dist/store/index.d.ts +2 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -0
- package/dist/store/index.js.map +1 -1
- package/dist/store/reader.d.ts.map +1 -1
- package/dist/store/reader.js +6 -1
- package/dist/store/reader.js.map +1 -1
- package/dist/store/schema.d.ts +4 -4
- package/dist/store/schema.d.ts.map +1 -1
- package/dist/store/schema.js +46 -1
- package/dist/store/schema.js.map +1 -1
- package/dist/store/writer.d.ts.map +1 -1
- package/dist/store/writer.js +4 -3
- package/dist/store/writer.js.map +1 -1
- package/dist/tiers/certify.d.ts +174 -0
- package/dist/tiers/certify.d.ts.map +1 -1
- package/dist/tiers/certify.js +309 -5
- package/dist/tiers/certify.js.map +1 -1
- package/dist/tiers/index.d.ts +1 -1
- package/dist/tiers/index.d.ts.map +1 -1
- package/dist/tiers/index.js.map +1 -1
- package/dist/workspace/graph-layout.d.ts +85 -0
- package/dist/workspace/graph-layout.d.ts.map +1 -0
- package/dist/workspace/graph-layout.js +90 -0
- package/dist/workspace/graph-layout.js.map +1 -0
- package/dist/workspace/index.d.ts +3 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +2 -0
- package/dist/workspace/index.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/** "Which endpoints reach this table, and which of them write to it" — the
|
|
2
|
+
* persistence half of the bug-relevant subgraph, made askable.
|
|
3
|
+
*
|
|
4
|
+
* Until this query existed the question could not be asked in any language:
|
|
5
|
+
* `DATABASE_TABLE`/`DATABASE_COLUMN` are in no edge, of any type, in either
|
|
6
|
+
* direction. That is not a defect — it is the consequence of a ruling. The
|
|
7
|
+
* model-to-table join was deliberately built **by shared node identity rather
|
|
8
|
+
* than by an edge** (`databaseTableNodesFromModel`, `@descryy/ir`, DEC-240),
|
|
9
|
+
* so an ORM-derived producer and a raw-DDL-derived producer land on the same
|
|
10
|
+
* id for the same real table with no coordination. Identity merging and
|
|
11
|
+
* reachability are different problems, and solving the first left the second
|
|
12
|
+
* untouched. This module solves the second **without touching the first**:
|
|
13
|
+
* no new edge type, no new node type, no adapter change
|
|
14
|
+
* (`DEC-NEXT-database-table-column-traversability-vs-queryability.md`,
|
|
15
|
+
* `DEC-NEXT-persistence-half-of-the-bug-relevant-subgraph-is-unreachable.md`
|
|
16
|
+
* option 1).
|
|
17
|
+
*
|
|
18
|
+
* ## The three hops, walked backwards from the table
|
|
19
|
+
*
|
|
20
|
+
* 1. **table -> model** — `modelsForTable` (`model-table.ts`), an O(1) exact
|
|
21
|
+
* id match per model, recomputed from the model's own declared table name.
|
|
22
|
+
* **This leg has no edge under it.** Its evidence is two declarations: a
|
|
23
|
+
* string in the model and the table node's identity. That is why the whole
|
|
24
|
+
* composed claim is name-level and can never reach reliability class A,
|
|
25
|
+
* however well-resolved the other two hops are.
|
|
26
|
+
* 2. **model -> accessor** — `READS`/`ASSIGNS` edges pointing at the model.
|
|
27
|
+
* 3. **accessor -> route -> endpoint** — one budgeted inbound `CALLS` walk
|
|
28
|
+
* seeded on every accessor at once (never one walk per accessor), carrying
|
|
29
|
+
* the set of accessors each node reaches, then
|
|
30
|
+
* `API_ROUTE --SERVES_API--> API_ENDPOINT`.
|
|
31
|
+
*
|
|
32
|
+
* ## The write gate, and why it names no language
|
|
33
|
+
*
|
|
34
|
+
* A developer acting on "this endpoint writes to your users table" changes
|
|
35
|
+
* code. Only some producers distinguish an assignment from a read; the rest
|
|
36
|
+
* emit every field access as `READS`, so answering the write question from a
|
|
37
|
+
* `READS` edge would state the opposite of what the code does for those
|
|
38
|
+
* producers. It must therefore be gated — but gating on a language name above
|
|
39
|
+
* the IR is a boundary breach (rule 1), and the mechanical boundary lint is
|
|
40
|
+
* right to forbid it.
|
|
41
|
+
*
|
|
42
|
+
* So the gate is **evidence, not configuration**: a producer is
|
|
43
|
+
* direction-aware iff it is observed emitting at least one `ASSIGNS` edge
|
|
44
|
+
* into a `MODEL` in this graph. An `ASSIGNS` edge is self-evidencing and
|
|
45
|
+
* needs no gate at all. A `READS` edge from a direction-aware producer is a
|
|
46
|
+
* genuine read. A `READS` edge from a producer never seen emitting `ASSIGNS`
|
|
47
|
+
* is `unknown-direction` — reported as not analysable, folded into neither
|
|
48
|
+
* the read set nor the write set. The failure mode is one-directional by
|
|
49
|
+
* construction: the worst this rule can do is decline to answer, and it can
|
|
50
|
+
* never manufacture a write. */
|
|
51
|
+
import { reliabilityCap, } from "@descryy/ir";
|
|
52
|
+
import { createResolutionFloor } from "./resolution-floor.js";
|
|
53
|
+
import { tableIdForModel } from "./model-table.js";
|
|
54
|
+
/** The two edge types that carry a function's access to a model's fields.
|
|
55
|
+
* Named once so the accessor read and the direction probe cannot drift. */
|
|
56
|
+
export const MODEL_ACCESS_EDGE_TYPES = ["READS", "ASSIGNS"];
|
|
57
|
+
const DEFAULT_MAX_CALL_DEPTH = 4;
|
|
58
|
+
const DEFAULT_BUDGET = 1_000;
|
|
59
|
+
const DEFAULT_PER_NODE_LIMIT = 200;
|
|
60
|
+
const DEFAULT_MODEL_LIMIT = 5_000;
|
|
61
|
+
const NAME_MATCH_NOTE = "The step from a model to its table is a name match on a declared string, not a graph edge — " +
|
|
62
|
+
"two producers agree on a table because they hash the same name, and nothing verifies that the " +
|
|
63
|
+
"name is the table the code reaches at run time. This claim is therefore name-level and is " +
|
|
64
|
+
"capped at reliability class B however well the call path under it resolves.";
|
|
65
|
+
/** Emitted whenever a write is reported. The distinction it draws is the one a
|
|
66
|
+
* reader will otherwise collapse, and collapsing it turns a provable
|
|
67
|
+
* statement about source into an unproven one about a running database. */
|
|
68
|
+
export const WRITE_MEANING_NOTE = "A write here means the handler assigns a mapped column of the model that backs this table. " +
|
|
69
|
+
"That is read from the source, and it is not the same claim as a database write being issued: " +
|
|
70
|
+
"whether the assignment reaches the table depends on the object being attached to a live " +
|
|
71
|
+
"session and that session being flushed, and neither is established here. Treat it as a " +
|
|
72
|
+
"prediction to confirm at run time, not as an observed update.";
|
|
73
|
+
function empty(provider, table, floor, notes, overrides = {}) {
|
|
74
|
+
const structural = reliabilityCap(floor, true);
|
|
75
|
+
return {
|
|
76
|
+
data: {
|
|
77
|
+
table,
|
|
78
|
+
models: [],
|
|
79
|
+
endpoints: [],
|
|
80
|
+
hopGaps: [],
|
|
81
|
+
directionAwareProducers: [],
|
|
82
|
+
directionBlindProducers: [],
|
|
83
|
+
reliability: structural === "A" ? "B" : structural,
|
|
84
|
+
...overrides,
|
|
85
|
+
},
|
|
86
|
+
stamp: stampFor(provider, floor),
|
|
87
|
+
truncated: false,
|
|
88
|
+
notes,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function stampFor(provider, resolutionFloor) {
|
|
92
|
+
return { ...provider.baseStamp(), resolutionFloor };
|
|
93
|
+
}
|
|
94
|
+
/** `attrs.fields` on an access edge, where the producer names the columns. */
|
|
95
|
+
function columnsOf(edge) {
|
|
96
|
+
const fields = edge.attrs?.["fields"];
|
|
97
|
+
if (!Array.isArray(fields))
|
|
98
|
+
return [];
|
|
99
|
+
return fields.filter((f) => typeof f === "string");
|
|
100
|
+
}
|
|
101
|
+
/** Producers observed emitting at least one `ASSIGNS` into a `MODEL`. The
|
|
102
|
+
* probe is bounded and it reports its own incompleteness: a producer missed
|
|
103
|
+
* because the probe stopped early is reported as direction-blind, which
|
|
104
|
+
* under-claims rather than over-claims. */
|
|
105
|
+
function probeDirectionAwareProducers(provider, models, limit) {
|
|
106
|
+
const producers = new Set();
|
|
107
|
+
const examined = Math.min(models.length, limit);
|
|
108
|
+
for (let i = 0; i < examined; i += 1) {
|
|
109
|
+
for (const edge of provider.incoming(models[i].id, { types: ["ASSIGNS"], limit: 1 })) {
|
|
110
|
+
producers.add(edge.producedBy);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return { producers, complete: examined === models.length };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Every `API_ENDPOINT` that reaches `table`, and which of them write to it.
|
|
117
|
+
*
|
|
118
|
+
* `scope` must be the `IdentityScope` the graph was built with —
|
|
119
|
+
* `DATABASE_TABLE` is workspace-scoped, so a mismatched scope misses silently
|
|
120
|
+
* rather than erroring, and the miss surfaces as a `model-for-table` gap.
|
|
121
|
+
*
|
|
122
|
+
* Never throws on graph content. A node of the wrong type, a model whose
|
|
123
|
+
* declared table is not a string, a dangling edge — each degrades to a named
|
|
124
|
+
* reason in `hopGaps` or `notes`.
|
|
125
|
+
*/
|
|
126
|
+
export function endpointsReachingTable(provider, table, scope, options = {}) {
|
|
127
|
+
const maxCallDepth = options.maxCallDepth ?? DEFAULT_MAX_CALL_DEPTH;
|
|
128
|
+
const budget = options.budget ?? DEFAULT_BUDGET;
|
|
129
|
+
const perNodeLimit = options.perNodeLimit ?? DEFAULT_PER_NODE_LIMIT;
|
|
130
|
+
const modelLimit = options.modelLimit ?? DEFAULT_MODEL_LIMIT;
|
|
131
|
+
const floor = createResolutionFloor();
|
|
132
|
+
const notes = [];
|
|
133
|
+
if (table === null || typeof table !== "object" || table.type !== "DATABASE_TABLE") {
|
|
134
|
+
return empty(provider, table, 0, [
|
|
135
|
+
`This query answers about a DATABASE_TABLE node; it was given a ${typeof table === "object" && table !== null ? String(table.type) : "non-node value"}. Nothing was examined, and nothing here says the table is unreached.`,
|
|
136
|
+
]);
|
|
137
|
+
}
|
|
138
|
+
// The table's own resolution is evidence under every claim below: the join
|
|
139
|
+
// rests on this node's identity, and no edge carries it.
|
|
140
|
+
floor.observe(table.resolution);
|
|
141
|
+
// --- hop 1: table -> models, plus the direction probe over the same set ---
|
|
142
|
+
const modelSet = provider.nodesOfType("MODEL", modelLimit);
|
|
143
|
+
let truncated = modelSet.truncated;
|
|
144
|
+
if (modelSet.truncated) {
|
|
145
|
+
notes.push("More models exist than were enumerated, so a model mapping to this table may have been " +
|
|
146
|
+
"missed. Endpoints absent from this answer are not reported as absent from the code.");
|
|
147
|
+
}
|
|
148
|
+
const models = modelSet.nodes.filter((model) => tableIdForModel(model, scope) === table.id);
|
|
149
|
+
for (const model of models)
|
|
150
|
+
floor.observe(model.resolution);
|
|
151
|
+
const probe = probeDirectionAwareProducers(provider, modelSet.nodes, modelLimit);
|
|
152
|
+
if (!probe.complete) {
|
|
153
|
+
truncated = true;
|
|
154
|
+
notes.push("The probe for which producers distinguish an assignment from a read did not cover every " +
|
|
155
|
+
"model. A producer it did not reach is reported as unable to answer the write question, " +
|
|
156
|
+
"never as having answered it.");
|
|
157
|
+
}
|
|
158
|
+
if (models.length === 0) {
|
|
159
|
+
notes.push(NAME_MATCH_NOTE);
|
|
160
|
+
return empty(provider, table, floor.value(), notes, {
|
|
161
|
+
hopGaps: [
|
|
162
|
+
{
|
|
163
|
+
hop: "model-for-table",
|
|
164
|
+
node: table,
|
|
165
|
+
reason: "No model in this graph declares this table. Either nothing read the mapping for its " +
|
|
166
|
+
"language, or the code names the table only where a mapping was refused rather than guessed.",
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// --- hop 2: models -> accessors (the functions holding READS/ASSIGNS) -----
|
|
172
|
+
const hopGaps = [];
|
|
173
|
+
/** accessor function id -> the access edges on it, and the model each reaches. */
|
|
174
|
+
const accessByFunction = new Map();
|
|
175
|
+
for (const model of models) {
|
|
176
|
+
const access = provider.incoming(model.id, {
|
|
177
|
+
types: MODEL_ACCESS_EDGE_TYPES,
|
|
178
|
+
limit: perNodeLimit,
|
|
179
|
+
});
|
|
180
|
+
if (access.length === 0) {
|
|
181
|
+
hopGaps.push({
|
|
182
|
+
hop: "accessor-for-model",
|
|
183
|
+
node: model,
|
|
184
|
+
reason: "No function in this graph reads or assigns a field of this model. Code reaching the " +
|
|
185
|
+
"table by raw query text, or through a field access nothing resolved, is invisible here.",
|
|
186
|
+
});
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (access.length === perNodeLimit) {
|
|
190
|
+
truncated = true;
|
|
191
|
+
notes.push(`More than ${perNodeLimit} functions access one of this table's models; the rest were not examined.`);
|
|
192
|
+
}
|
|
193
|
+
for (const edge of access) {
|
|
194
|
+
const bucket = accessByFunction.get(edge.from);
|
|
195
|
+
if (bucket === undefined)
|
|
196
|
+
accessByFunction.set(edge.from, [{ edge, model }]);
|
|
197
|
+
else
|
|
198
|
+
bucket.push({ edge, model });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (accessByFunction.size === 0) {
|
|
202
|
+
notes.push(NAME_MATCH_NOTE);
|
|
203
|
+
return empty(provider, table, floor.value(), notes, { models, hopGaps });
|
|
204
|
+
}
|
|
205
|
+
// --- hop 3: accessors -> routes -> endpoints ------------------------------
|
|
206
|
+
//
|
|
207
|
+
// One inbound `CALLS` walk carrying, for each node it reaches, the **set of
|
|
208
|
+
// accessors** that node can reach. A plain multi-source BFS cannot be used
|
|
209
|
+
// here and the difference is not cosmetic: it marks each node seen once, so
|
|
210
|
+
// a route calling both a reading helper and a writing one is attributed to
|
|
211
|
+
// whichever the walk happened to discover first, and the write is silently
|
|
212
|
+
// lost. "Which endpoint writes to this table" must not depend on traversal
|
|
213
|
+
// order, so a node is re-entered when a *new* accessor reaches it, and the
|
|
214
|
+
// budget counts (node, accessor) pairs rather than nodes.
|
|
215
|
+
const seeds = [...accessByFunction.keys()];
|
|
216
|
+
/** `${node}\u0000${accessor}` -> the edge that reached it, null at a seed. */
|
|
217
|
+
const via = new Map();
|
|
218
|
+
const pairKey = (node, seed) => `${node}\u0000${seed}`;
|
|
219
|
+
const queue = [];
|
|
220
|
+
for (const seed of seeds) {
|
|
221
|
+
via.set(pairKey(seed, seed), null);
|
|
222
|
+
queue.push({ id: seed, seed, depth: 0 });
|
|
223
|
+
}
|
|
224
|
+
for (let head = 0; head < queue.length; head += 1) {
|
|
225
|
+
const current = queue[head];
|
|
226
|
+
if (current.depth >= maxCallDepth)
|
|
227
|
+
continue;
|
|
228
|
+
for (const edge of provider.incoming(current.id, { types: ["CALLS"], limit: perNodeLimit })) {
|
|
229
|
+
const key = pairKey(edge.from, current.seed);
|
|
230
|
+
if (via.has(key))
|
|
231
|
+
continue;
|
|
232
|
+
if (via.size >= budget) {
|
|
233
|
+
truncated = true;
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
via.set(key, edge);
|
|
237
|
+
queue.push({ id: edge.from, seed: current.seed, depth: current.depth + 1 });
|
|
238
|
+
}
|
|
239
|
+
if (truncated)
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
/** The `CALLS` chain from `node` back to `seed`, route-first. `undefined`
|
|
243
|
+
* when that accessor does not reach this node. */
|
|
244
|
+
function chainTo(node, seed) {
|
|
245
|
+
const edges = [];
|
|
246
|
+
let cursor = node;
|
|
247
|
+
// Bounded by the walk's own depth; the guard is against a malformed chain,
|
|
248
|
+
// not an expected case.
|
|
249
|
+
for (let step = 0; step <= maxCallDepth + 1; step += 1) {
|
|
250
|
+
const key = pairKey(cursor, seed);
|
|
251
|
+
if (!via.has(key))
|
|
252
|
+
return undefined;
|
|
253
|
+
const edge = via.get(key);
|
|
254
|
+
if (edge === null || edge === undefined)
|
|
255
|
+
return edges;
|
|
256
|
+
edges.push(edge);
|
|
257
|
+
cursor = edge.from === cursor ? edge.to : edge.from;
|
|
258
|
+
}
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
/** Every node the walk touched, once, regardless of how many accessors reached it. */
|
|
262
|
+
const touched = new Set();
|
|
263
|
+
for (const key of via.keys())
|
|
264
|
+
touched.add(key.slice(0, key.indexOf("\u0000")));
|
|
265
|
+
const accessorsWithARoute = new Set();
|
|
266
|
+
const byEndpoint = new Map();
|
|
267
|
+
for (const nodeId of touched) {
|
|
268
|
+
const route = provider.node(nodeId);
|
|
269
|
+
if (route === undefined || route.type !== "API_ROUTE")
|
|
270
|
+
continue;
|
|
271
|
+
// Every accessor this route reaches, not only the first one found.
|
|
272
|
+
const chains = [];
|
|
273
|
+
for (const seed of seeds) {
|
|
274
|
+
const chain = chainTo(route.id, seed);
|
|
275
|
+
if (chain === undefined)
|
|
276
|
+
continue;
|
|
277
|
+
const accessor = provider.node(seed);
|
|
278
|
+
if (accessor === undefined)
|
|
279
|
+
continue;
|
|
280
|
+
accessorsWithARoute.add(seed);
|
|
281
|
+
// `chainTo` is accessor-first; path order runs route -> .. -> accessor.
|
|
282
|
+
chains.push({ accessor, callEdges: [...chain].reverse() });
|
|
283
|
+
}
|
|
284
|
+
if (chains.length === 0)
|
|
285
|
+
continue;
|
|
286
|
+
const serves = provider.outgoing(route.id, { types: ["SERVES_API"], limit: perNodeLimit });
|
|
287
|
+
if (serves.length === 0) {
|
|
288
|
+
hopGaps.push({
|
|
289
|
+
hop: "endpoint-for-route",
|
|
290
|
+
node: route,
|
|
291
|
+
reason: "This route reaches the table but is joined to no endpoint, so it cannot be named by " +
|
|
292
|
+
"the method and path a caller would use.",
|
|
293
|
+
});
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
for (const servesEdge of serves) {
|
|
297
|
+
const endpoint = provider.node(servesEdge.to);
|
|
298
|
+
if (endpoint === undefined)
|
|
299
|
+
continue;
|
|
300
|
+
for (const { accessor, callEdges } of chains) {
|
|
301
|
+
for (const { edge: accessEdge, model } of accessByFunction.get(accessor.id) ?? []) {
|
|
302
|
+
const direction = accessEdge.type === "ASSIGNS"
|
|
303
|
+
? "writes"
|
|
304
|
+
: probe.producers.has(accessEdge.producedBy)
|
|
305
|
+
? "reads"
|
|
306
|
+
: "unknown-direction";
|
|
307
|
+
// Path order: route -> endpoint, then route -> .. -> accessor, then accessor -> model.
|
|
308
|
+
const edges = [servesEdge, ...callEdges, accessEdge];
|
|
309
|
+
for (const e of edges)
|
|
310
|
+
floor.observe(e.resolution);
|
|
311
|
+
const path = {
|
|
312
|
+
endpoint,
|
|
313
|
+
route,
|
|
314
|
+
accessor,
|
|
315
|
+
model,
|
|
316
|
+
direction,
|
|
317
|
+
columns: columnsOf(accessEdge),
|
|
318
|
+
callDepth: callEdges.length,
|
|
319
|
+
edges,
|
|
320
|
+
};
|
|
321
|
+
const bucket = byEndpoint.get(endpoint.id);
|
|
322
|
+
if (bucket === undefined)
|
|
323
|
+
byEndpoint.set(endpoint.id, { endpoint, paths: [path] });
|
|
324
|
+
else
|
|
325
|
+
bucket.paths.push(path);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
for (const accessorId of seeds) {
|
|
331
|
+
if (accessorsWithARoute.has(accessorId))
|
|
332
|
+
continue;
|
|
333
|
+
const accessor = provider.node(accessorId);
|
|
334
|
+
if (accessor === undefined)
|
|
335
|
+
continue;
|
|
336
|
+
hopGaps.push({
|
|
337
|
+
hop: "route-for-accessor",
|
|
338
|
+
node: accessor,
|
|
339
|
+
reason: `No route reaches this function within ${maxCallDepth} call hops. It may be reached only ` +
|
|
340
|
+
"by a longer chain, by a caller nothing resolved, or by no request path at all.",
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
// --- assemble -------------------------------------------------------------
|
|
344
|
+
const endpoints = [];
|
|
345
|
+
const directionBlind = new Set();
|
|
346
|
+
for (const { endpoint, paths } of byEndpoint.values()) {
|
|
347
|
+
const direction = paths.some((p) => p.direction === "writes")
|
|
348
|
+
? "writes"
|
|
349
|
+
: paths.some((p) => p.direction === "unknown-direction")
|
|
350
|
+
? "unknown-direction"
|
|
351
|
+
: "reads";
|
|
352
|
+
for (const p of paths) {
|
|
353
|
+
if (p.direction === "unknown-direction") {
|
|
354
|
+
const producer = p.edges[p.edges.length - 1]?.producedBy;
|
|
355
|
+
if (producer !== undefined)
|
|
356
|
+
directionBlind.add(producer);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
const columns = [...new Set(paths.flatMap((p) => p.columns))].sort();
|
|
360
|
+
endpoints.push({ endpoint, direction, columns, paths });
|
|
361
|
+
}
|
|
362
|
+
endpoints.sort((a, b) => a.endpoint.id.localeCompare(b.endpoint.id));
|
|
363
|
+
notes.push(NAME_MATCH_NOTE);
|
|
364
|
+
if (endpoints.some((e) => e.direction === "writes"))
|
|
365
|
+
notes.push(WRITE_MEANING_NOTE);
|
|
366
|
+
if (directionBlind.size > 0) {
|
|
367
|
+
notes.push(`${directionBlind.size} producer(s) under this answer emit every field access as a read, so ` +
|
|
368
|
+
"this answer does not distinguish a write from a read on the paths resting on them. Those " +
|
|
369
|
+
"endpoints are reported as reaching the table with the direction not analysable: not as " +
|
|
370
|
+
"readers, and never as writers — a write is never inferred from a read.");
|
|
371
|
+
}
|
|
372
|
+
if (truncated) {
|
|
373
|
+
notes.push("The node budget was reached, so this answer is partial. Nodes beyond the budget were not " +
|
|
374
|
+
"examined and are not reported as clean.");
|
|
375
|
+
}
|
|
376
|
+
const structural = reliabilityCap(floor.value(), true);
|
|
377
|
+
return {
|
|
378
|
+
data: {
|
|
379
|
+
table,
|
|
380
|
+
models,
|
|
381
|
+
endpoints,
|
|
382
|
+
hopGaps,
|
|
383
|
+
directionAwareProducers: [...probe.producers].sort(),
|
|
384
|
+
directionBlindProducers: [...directionBlind].sort(),
|
|
385
|
+
// Cap, never a promotion: the name-match leg forbids class A outright.
|
|
386
|
+
reliability: structural === "A" ? "B" : structural,
|
|
387
|
+
},
|
|
388
|
+
stamp: stampFor(provider, floor.value()),
|
|
389
|
+
truncated,
|
|
390
|
+
notes,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=persistence-reach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence-reach.js","sourceRoot":"","sources":["../../src/query/persistence-reach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAiDiC;AAEjC,OAAO,EACL,cAAc,GAOf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD;4EAC4E;AAC5E,MAAM,CAAC,MAAM,uBAAuB,GAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAsFjF,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC,MAAM,eAAe,GACnB,8FAA8F;IAC9F,gGAAgG;IAChG,4FAA4F;IAC5F,6EAA6E,CAAC;AAEhF;;4EAE4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAC7B,6FAA6F;IAC7F,+FAA+F;IAC/F,0FAA0F;IAC1F,yFAAyF;IACzF,+DAA+D,CAAC;AAElE,SAAS,KAAK,CACZ,QAA2B,EAC3B,KAAa,EACb,KAAsB,EACtB,KAAe,EACf,YAAuC,EAAE;IAEzC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,IAAI,EAAE;YACJ,KAAK;YACL,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,EAAE;YACX,uBAAuB,EAAE,EAAE;YAC3B,uBAAuB,EAAE,EAAE;YAC3B,WAAW,EAAE,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;YAClD,GAAG,SAAS;SACb;QACD,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;QAChC,SAAS,EAAE,KAAK;QAChB,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,QAA2B,EAAE,eAAgC;IAC7E,OAAO,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,eAAe,EAAE,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAClE,CAAC;AAED;;;4CAG4C;AAC5C,SAAS,4BAA4B,CACnC,QAA2B,EAC3B,MAAyB,EACzB,KAAa;IAEb,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACtF,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAA2B,EAC3B,KAAa,EACb,KAAoB,EACpB,UAAmC,EAAE;IAErC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACpE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAE7D,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnF,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;YAC/B,kEACE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBACrE,uEAAuE;SACxE,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,yDAAyD;IACzD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEhC,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IACnC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CACR,yFAAyF;YACvF,qFAAqF,CACxF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5F,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACjF,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,SAAS,GAAG,IAAI,CAAC;QACjB,KAAK,CAAC,IAAI,CACR,0FAA0F;YACxF,yFAAyF;YACzF,8BAA8B,CACjC,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;YAClD,OAAO,EAAE;gBACP;oBACE,GAAG,EAAE,iBAAiB;oBACtB,IAAI,EAAE,KAAK;oBACX,MAAM,EACJ,sFAAsF;wBACtF,6FAA6F;iBAChG;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,kFAAkF;IAClF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA+D,CAAC;IAEhG,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE;YACzC,KAAK,EAAE,uBAAuB;YAC9B,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,oBAAoB;gBACzB,IAAI,EAAE,KAAK;gBACX,MAAM,EACJ,sFAAsF;oBACtF,yFAAyF;aAC5F,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACnC,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,CAAC,IAAI,CACR,aAAa,YAAY,2EAA2E,CACrG,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,MAAM,KAAK,SAAS;gBAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;;gBACxE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,6EAA6E;IAC7E,EAAE;IACF,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,2EAA2E;IAC3E,2EAA2E;IAC3E,0DAA0D;IAC1D,MAAM,KAAK,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3C,8EAA8E;IAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,GAAG,IAAI,SAAS,IAAI,EAAE,CAAC;IAC/E,MAAM,KAAK,GAA6E,EAAE,CAAC;IAE3F,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,KAAK,IAAI,YAAY;YAAE,SAAS;QAC5C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;YAC5F,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC3B,IAAI,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;gBACvB,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,SAAS;YAAE,MAAM;IACvB,CAAC;IAED;uDACmD;IACnD,SAAS,OAAO,CAAC,IAAY,EAAE,IAAY;QACzC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,2EAA2E;QAC3E,wBAAwB;QACxB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,YAAY,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACpC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACtD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,sFAAsF;IACtF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE/E,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAA0D,CAAC;IAErF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QAEhE,mEAAmE;QACnE,MAAM,MAAM,GAAkE,EAAE,CAAC;QACjF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,QAAQ,KAAK,SAAS;gBAAE,SAAS;YACrC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,wEAAwE;YACxE,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAElC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,oBAAoB;gBACzB,IAAI,EAAE,KAAK;gBACX,MAAM,EACJ,sFAAsF;oBACtF,yCAAyC;aAC5C,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,QAAQ,KAAK,SAAS;gBAAE,SAAS;YAErC,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,MAAM,EAAE,CAAC;gBAC7C,KAAK,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClF,MAAM,SAAS,GACb,UAAU,CAAC,IAAI,KAAK,SAAS;wBAC3B,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;4BAC1C,CAAC,CAAC,OAAO;4BACT,CAAC,CAAC,mBAAmB,CAAC;oBAE5B,uFAAuF;oBACvF,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,GAAG,SAAS,EAAE,UAAU,CAAC,CAAC;oBACrD,KAAK,MAAM,CAAC,IAAI,KAAK;wBAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBAEnD,MAAM,IAAI,GAAoB;wBAC5B,QAAQ;wBACR,KAAK;wBACL,QAAQ;wBACR,KAAK;wBACL,SAAS;wBACT,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC;wBAC9B,SAAS,EAAE,SAAS,CAAC,MAAM;wBAC3B,KAAK;qBACN,CAAC;oBACF,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC3C,IAAI,MAAM,KAAK,SAAS;wBAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;wBAC9E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;QAC/B,IAAI,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,oBAAoB;YACzB,IAAI,EAAE,QAAQ;YACd,MAAM,EACJ,yCAAyC,YAAY,qCAAqC;gBAC1F,gFAAgF;SACnF,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,MAAM,SAAS,GAA0B,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,KAAK,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACtD,MAAM,SAAS,GAAoB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC;YAC5E,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,mBAAmB,CAAC;gBACtD,CAAC,CAAC,mBAAmB;gBACrB,CAAC,CAAC,OAAO,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,SAAS,KAAK,mBAAmB,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;gBACzD,IAAI,QAAQ,KAAK,SAAS;oBAAE,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAErE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACpF,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,GAAG,cAAc,CAAC,IAAI,uEAAuE;YAC3F,2FAA2F;YAC3F,yFAAyF;YACzF,wEAAwE,CAC3E,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CACR,2FAA2F;YACzF,yCAAyC,CAC5C,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IACvD,OAAO;QACL,IAAI,EAAE;YACJ,KAAK;YACL,MAAM;YACN,SAAS;YACT,OAAO;YACP,uBAAuB,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;YACpD,uBAAuB,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,EAAE;YACnD,uEAAuE;YACvE,WAAW,EAAE,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU;SACnD;QACD,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACxC,SAAS;QACT,KAAK;KACN,CAAC;AACJ,CAAC"}
|
package/dist/query/queries.d.ts
CHANGED
|
@@ -66,4 +66,9 @@ export interface CoChange {
|
|
|
66
66
|
* from the lexicographically smaller path (DEC-036), so both directions
|
|
67
67
|
* must be read. Windowed/thresholded at ingest — silence ≠ "never co-changed." */
|
|
68
68
|
export declare function changesWith(provider: AdjacencyProvider, nodeId: string): QueryResult<CoChange[]>;
|
|
69
|
+
export interface ReachablePage {
|
|
70
|
+
readonly node: IRNode;
|
|
71
|
+
readonly depth: number;
|
|
72
|
+
}
|
|
73
|
+
export declare function reachablePages(provider: AdjacencyProvider, startNodeId: string, options?: TraversalOptions): QueryResult<ReachablePage[]>;
|
|
69
74
|
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/query/queries.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/query/queries.ts"],"names":[],"mappings":"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"}
|
package/dist/query/queries.js
CHANGED
|
@@ -242,4 +242,62 @@ export function changesWith(provider, nodeId) {
|
|
|
242
242
|
}
|
|
243
243
|
return result(provider, data, floor.value(), false, notes);
|
|
244
244
|
}
|
|
245
|
+
export function reachablePages(provider, startNodeId, options = {}) {
|
|
246
|
+
const maxDepth = options.maxDepth ?? Number.POSITIVE_INFINITY;
|
|
247
|
+
const budget = options.budget ?? Number.POSITIVE_INFINITY;
|
|
248
|
+
const dataFlowTypes = options.types ?? [...DATA_FLOW_EDGE_TYPES];
|
|
249
|
+
const floor = createResolutionFloor();
|
|
250
|
+
const visited = new Set([startNodeId]);
|
|
251
|
+
const queue = [{ id: startNodeId, depth: 0 }];
|
|
252
|
+
let truncated = false;
|
|
253
|
+
const admit = (id, depth, edge) => {
|
|
254
|
+
if (visited.has(id))
|
|
255
|
+
return;
|
|
256
|
+
if (visited.size >= budget) {
|
|
257
|
+
truncated = true;
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
visited.add(id);
|
|
261
|
+
floor.observe(edge.resolution);
|
|
262
|
+
queue.push({ id, depth });
|
|
263
|
+
};
|
|
264
|
+
for (let head = 0; head < queue.length; head += 1) {
|
|
265
|
+
const current = queue[head];
|
|
266
|
+
if (current.depth >= maxDepth)
|
|
267
|
+
continue;
|
|
268
|
+
for (const edge of provider.outgoing(current.id, { types: dataFlowTypes })) {
|
|
269
|
+
admit(edge.to, current.depth + 1, edge);
|
|
270
|
+
}
|
|
271
|
+
// The one confirmed non-data-flow hop this walk needs: at an API_ENDPOINT,
|
|
272
|
+
// cross USES_API backward to whatever calls it (see the header comment).
|
|
273
|
+
if (provider.node(current.id)?.type === "API_ENDPOINT") {
|
|
274
|
+
for (const edge of provider.incoming(current.id, { types: ["USES_API"] })) {
|
|
275
|
+
admit(edge.from, current.depth + 1, edge);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (truncated)
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
const reachedPages = [];
|
|
282
|
+
for (const entry of queue) {
|
|
283
|
+
if (entry.id === startNodeId)
|
|
284
|
+
continue;
|
|
285
|
+
const node = provider.node(entry.id);
|
|
286
|
+
if (node === undefined)
|
|
287
|
+
continue;
|
|
288
|
+
if (node.type !== "PAGE" && node.type !== "COMPONENT")
|
|
289
|
+
continue;
|
|
290
|
+
reachedPages.push({ node, depth: entry.depth });
|
|
291
|
+
}
|
|
292
|
+
const notes = [];
|
|
293
|
+
if (reachedPages.length === 0) {
|
|
294
|
+
notes.push("No PAGE or COMPONENT was reached. This walk only follows PROPAGATES_TO/READS/ASSIGNS/" +
|
|
295
|
+
"RETURNS and, at an API_ENDPOINT, USES_API backward to its caller — real edges, but ones " +
|
|
296
|
+
"few adapters emit yet (PROPAGATES_TO has only one narrow single-hop producer today; " +
|
|
297
|
+
"interprocedural data-flow chasing does not exist anywhere). Absence here is not evidence " +
|
|
298
|
+
"that this column genuinely reaches no UI surface — it may mean the chain exists in the " +
|
|
299
|
+
"code but nothing in this graph resolved it yet.");
|
|
300
|
+
}
|
|
301
|
+
return result(provider, reachedPages, floor.value(), truncated, notes);
|
|
302
|
+
}
|
|
245
303
|
//# sourceMappingURL=queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/query/queries.ts"],"names":[],"mappings":"AAAA;;;;0EAI0E;AAI1E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAuC,MAAM,eAAe,CAAC;AAEhG,SAAS,QAAQ,CACf,QAA2B,EAC3B,eAAgC;IAEhC,OAAO,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,eAAe,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,MAAM,CACb,QAA2B,EAC3B,IAAO,EACP,eAAgC,EAChC,SAAkB,EAClB,KAAe;IAEf,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CACR,kFAAkF;YAChF,kDAAkD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAChF,CAAC;AAED,8EAA8E;AAC9E,SAAS,OAAO,CACd,QAA2B,EAC3B,OAA2B;IAE3B,MAAM,GAAG,GAAqD,EAAE,CAAC;IACjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAUD,MAAM,UAAU,QAAQ,CACtB,QAA2B,EAC3B,KAAwB,EACxB,UAAyB,EAAE;IAE3B,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE;QAC3C,SAAS,EAAE,IAAI;QACf,GAAG,OAAO;QACV,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;KAC7E,CAAC,CAAC;IACH,wEAAwE;IACxE,8EAA8E;IAC9E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CACR,6DAA6D,OAAO,CAAC,eAAe,IAAI;YACtF,+EAA+E;YAC/E,4CAA4C,CAC/C,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACjH,CAAC;AASD;;oFAEoF;AACpF,MAAM,UAAU,eAAe,CAC7B,QAA2B,EAC3B,MAAc;IAEd,MAAM,KAAK,GAAe,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,6EAA6E;IAC7E,gDAAgD;IAChD,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QACtE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACrD,uFAAuF;YACrF,uFAAuF;YACvF,2CAA2C;KAC9C,CAAC,CAAC;AACL,CAAC;AAED,+CAA+C;AAE/C;;;;+BAI+B;AAC/B,SAAS,kBAAkB,CAAC,QAA2B,EAAE,MAAc;IACrE,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,WAAW;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClF,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAA2B,EAC3B,MAAc,EACd,UAAkD,EAAE;IAEpD,sEAAsE;IACtE,4EAA4E;IAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;QAClE,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;QAC/B,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;KACpE,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CACR,4BAA4B,OAAO,CAAC,eAAe,yCAAyC;YAC1F,uFAAuF,CAC1F,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CACR,wFAAwF;YACtF,oDAAoD,CACvD,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACpF,CAAC;AAED,iDAAiD;AAEjD;oFACoF;AACpF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAE9F,MAAM,UAAU,YAAY,CAC1B,QAA2B,EAC3B,MAAc,EACd,UAA4B,EAAE;IAE9B,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;QACtC,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,CAAC,GAAG,oBAAoB,CAAC;QAChC,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;QAChC,2EAA2E;QAC3E,2DAA2D;QAC3D,KAAK,CAAC,IAAI,CACR,mEAAmE,OAAO,CAAC,eAAe,IAAI;YAC5F,mFAAmF,CACtF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACjH,CAAC;AAED,oDAAoD;AAEpD,MAAM,UAAU,QAAQ,CACtB,QAA2B,EAC3B,UAAkB,EAClB,QAAgB,EAChB,UAA4B,EAAE;IAE9B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC1F,MAAM,GAAG,GAAa,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC7D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,yEAAyE;QACzE,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEzD,MAAM,KAAK,GACT,KAAK,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC,kFAAkF;gBAClF,6CAA6C,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACrF,CAAC;AAUD;gFACgF;AAChF,MAAM,UAAU,UAAU,CACxB,QAA2B,EAC3B,OAA0B,EAC1B,UAAyB,EAAE;IAE3B,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI,KAAK,SAAS;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,6EAA6E;QAC7E,4EAA4E;QAC5E,KAAK,CAAC,IAAI,CACR,GAAG,QAAQ,CAAC,MAAM,qEAAqE;YACrF,mCAAmC,CACtC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE;QACrE,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK;KACN,CAAC;AACJ,CAAC;AAYD;;mFAEmF;AACnF,MAAM,UAAU,WAAW,CAAC,QAA2B,EAAE,MAAc;IACrE,MAAM,KAAK,GAAG;QACZ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;QACzD,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;KAC1D,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3D,IAAI,OAAO,KAAK,MAAM;YAAE,SAAS,CAAC,uEAAuE;QACzG,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/G,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,yEAAyE;QACzE,qEAAqE;QACrE,yEAAyE;QACzE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CACR,4FAA4F;gBAC1F,GAAG,WAAW,8EAA8E;gBAC5F,uFAAuF;gBACvF,yFAAyF;gBACzF,0FAA0F;gBAC1F,sFAAsF;gBACtF,oFAAoF;gBACpF,qFAAqF,CACxF,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACzD,uEAAuE;YACvE,qEAAqE;YACrE,kEAAkE;YAClE,KAAK,CAAC,IAAI,CACR,4FAA4F;gBAC1F,2FAA2F;gBAC3F,6FAA6F;gBAC7F,qFAAqF;gBACrF,uFAAuF;gBACvF,oFAAoF,CACvF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,wFAAwF;gBACtF,2FAA2F;gBAC3F,0FAA0F;gBAC1F,6FAA6F;gBAC7F,6DAA6D,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC"}
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/query/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/** RG-9: the five-hop user chain — click → request → endpoint → route →
|
|
2
|
+
* handler → line — made askable as **one traversal** with a computed
|
|
3
|
+
* completeness verdict, so "chain complete" is a field a caller reads, not
|
|
4
|
+
* a string a mockup typed.
|
|
5
|
+
*
|
|
6
|
+
* Every hop already exists somewhere in the graph before this module: the
|
|
7
|
+
* browser tools write `COMPONENT/PAGE/FUNCTION --USES_API--> API_ENDPOINT`
|
|
8
|
+
* at R4 when a request is witnessed (`packages/mcp/src/browser/graph-write.ts`);
|
|
9
|
+
* `API_ROUTE --SERVES_API--> API_ENDPOINT` and `API_ROUTE --CALLS--> FUNCTION`
|
|
10
|
+
* are structural edges adapters already emit (golden pattern 04). Nothing
|
|
11
|
+
* before this walked all of them in one call — a caller had to run three
|
|
12
|
+
* separate queries and assemble the answer itself, with no single field
|
|
13
|
+
* saying whether the assembly actually reached the end.
|
|
14
|
+
*
|
|
15
|
+
* New query over existing edges only. No new node type, no new edge type
|
|
16
|
+
* (architecture rule: "new capabilities are new queries over these edges,
|
|
17
|
+
* not new types").
|
|
18
|
+
*
|
|
19
|
+
* ## Two degradations, carried honestly rather than hidden
|
|
20
|
+
*
|
|
21
|
+
* - **`request`** needs a `USES_API` edge leaving the origin. That edge is
|
|
22
|
+
* written at R4 only when the browser session that produced it was
|
|
23
|
+
* started with a `stackParser` (`browser_start_session`); without one, no
|
|
24
|
+
* caller edge is written at all, and this hop is named missing —
|
|
25
|
+
* never silently skipped, because a user reading an edgeless run as a
|
|
26
|
+
* clean one is exactly the failure mode this exists to prevent. A
|
|
27
|
+
* lower-resolution structural `USES_API` edge (a typed API client call
|
|
28
|
+
* site resolved without ever running anything) still counts if one
|
|
29
|
+
* exists; the note only fires when nothing does.
|
|
30
|
+
* - **`route` → `handler`** (the `CALLS` edge) ships for express,
|
|
31
|
+
* koa-router, fastify, hono and the Next.js App Router today, and only in
|
|
32
|
+
* `adapter-typescript`. This module names **zero** language above the
|
|
33
|
+
* IR boundary — it walks `CALLS` and reports what it finds. The
|
|
34
|
+
* TypeScript-only reach is a fact about which adapters currently emit
|
|
35
|
+
* that edge, not a branch here; a tenth adapter that starts emitting it
|
|
36
|
+
* tomorrow needs no change to this file.
|
|
37
|
+
*
|
|
38
|
+
* Once one hop is missing the walk stops rather than guessing past it —
|
|
39
|
+
* every stage after the first miss is reported `not attempted`, distinct
|
|
40
|
+
* from a stage that was attempted and came back empty. */
|
|
41
|
+
import { type IREdge, type IRNode, type ReliabilityClass } from "@descryy/ir";
|
|
42
|
+
import type { AdjacencyProvider, QueryResult } from "./provider.ts";
|
|
43
|
+
/** The six named points in the chain, in order. Five hops connect them. */
|
|
44
|
+
export type ChainStageName = "click" | "request" | "endpoint" | "route" | "handler" | "line";
|
|
45
|
+
export declare const CHAIN_STAGE_ORDER: readonly ChainStageName[];
|
|
46
|
+
export interface ChainStage {
|
|
47
|
+
readonly name: ChainStageName;
|
|
48
|
+
readonly present: boolean;
|
|
49
|
+
/** The graph node this stage resolved to. Null for "request" (evidence
|
|
50
|
+
* carried on the edge crossed to reach "endpoint", not a node of its own —
|
|
51
|
+
* there is no node type for an HTTP request) and for "line" (a location on
|
|
52
|
+
* the handler node, not a separate node). Null wherever `present` is false. */
|
|
53
|
+
readonly node: IRNode | null;
|
|
54
|
+
/** The edge crossed to reach this stage from the previous one. Null at
|
|
55
|
+
* "click" (the seed — nothing was crossed to reach it), null at "line" (a
|
|
56
|
+
* node attribute, not an edge), and null wherever `present` is false. */
|
|
57
|
+
readonly edge: IREdge | null;
|
|
58
|
+
/** Set iff `!present`: why this stage could not be reached. Distinguishes
|
|
59
|
+
* "walked and found nothing" from "not attempted because an earlier hop
|
|
60
|
+
* already broke the chain" — both are real, and a caller conflating them
|
|
61
|
+
* would misreport which producer to go fix. */
|
|
62
|
+
readonly reason: string | null;
|
|
63
|
+
}
|
|
64
|
+
export interface UserChain {
|
|
65
|
+
readonly origin: IRNode;
|
|
66
|
+
/** Always 6 entries, `CHAIN_STAGE_ORDER` order — a chain that stops early
|
|
67
|
+
* still reports every named point, the later ones `present: false`. */
|
|
68
|
+
readonly stages: readonly ChainStage[];
|
|
69
|
+
readonly verdict: "complete" | "partial";
|
|
70
|
+
/** The first stage that is missing, in chain order. Null iff `verdict` is
|
|
71
|
+
* `"complete"`. A partial chain always names which hop broke it — the
|
|
72
|
+
* whole point of this query over running three separate ones. */
|
|
73
|
+
readonly missingStage: ChainStageName | null;
|
|
74
|
+
/** The responsible line, once `handler` resolved and carried a location.
|
|
75
|
+
* Convenience projection of the `"line"` stage's node — not new evidence. */
|
|
76
|
+
readonly location: {
|
|
77
|
+
readonly file: string;
|
|
78
|
+
readonly startLine: number;
|
|
79
|
+
} | null;
|
|
80
|
+
readonly reliability: ReliabilityClass;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Walks click → request → endpoint → route → handler → line from `originId`
|
|
84
|
+
* — a `COMPONENT`, `PAGE` or `FUNCTION` node id, wherever browser evidence
|
|
85
|
+
* names the caller — and reports the whole chain with a verdict computed
|
|
86
|
+
* from what was actually found, never assumed complete.
|
|
87
|
+
*/
|
|
88
|
+
export declare function traceUserChain(provider: AdjacencyProvider, originId: string): QueryResult<UserChain>;
|
|
89
|
+
//# sourceMappingURL=user-chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-chain.d.ts","sourceRoot":"","sources":["../../src/query/user-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DAuC2D;AAE3D,OAAO,EAAkB,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG9F,OAAO,KAAK,EAAE,iBAAiB,EAAc,WAAW,EAAE,MAAM,eAAe,CAAC;AAEhF,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7F,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAOtD,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;oFAGgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;8EAE0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;oDAGgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;4EACwE;IACxE,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IACzC;;sEAEkE;IAClE,QAAQ,CAAC,YAAY,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7C;kFAC8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChF,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;CACxC;AA4BD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAgIpG"}
|