@suss/extractor 0.35.0 → 0.36.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/index.cjs +335 -91
- package/dist/index.d.cts +277 -29
- package/dist/index.d.ts +277 -29
- package/dist/index.js +294 -60
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Effect, MessageBusSemantics, DeployableUnit, CodeUnitKind, RequestSpellingMetadata,
|
|
1
|
+
import { BehavioralSummary, Effect, MessageBusSemantics, DeployableUnit, CodeUnitKind, RequestSpellingMetadata, TypeShape, Predicate, ValueRef, BoundaryBinding, RenderNode, ProvenanceSlot, WrapperReference, TestMetadata, GraphqlDeclaredContract, GraphqlMetadata, ConfidenceInfo, Transition, Gap, Input, Output } from '@suss/behavioral-ir';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -22,6 +22,26 @@ interface InputRead {
|
|
|
22
22
|
path: string[];
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Environment variables a library reads from its own installed code,
|
|
27
|
+
* where no walk over the project goes. Without them the checker would
|
|
28
|
+
* call a variable in a template unused when the library reads it on
|
|
29
|
+
* every invocation. An adapter writes one marker summary per declared
|
|
30
|
+
* library that some project file imports, and runtime-config pairing
|
|
31
|
+
* checks the markers before it reports a variable as unused.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
interface LibraryEnvVars {
|
|
35
|
+
/** What the library's import starts with: `@aws-lambda-powertools/`, `aws_lambda_powertools`. */
|
|
36
|
+
module: string;
|
|
37
|
+
/** Prefixes of the variables the library reads, such as `POWERTOOLS_`. */
|
|
38
|
+
prefixes?: string[];
|
|
39
|
+
/** Exact names of the variables the library reads. */
|
|
40
|
+
names?: string[];
|
|
41
|
+
}
|
|
42
|
+
/** The marker for one library, placed at the first project file found importing it. */
|
|
43
|
+
declare function libraryEnvReadMarker(recognition: string, declared: LibraryEnvVars, importer: string): BehavioralSummary;
|
|
44
|
+
|
|
25
45
|
/**
|
|
26
46
|
* Reading a function the project wrote in front of a library, before
|
|
27
47
|
* anything is extracted.
|
|
@@ -240,6 +260,11 @@ type DiscoveryMatch = {
|
|
|
240
260
|
hookName: string;
|
|
241
261
|
operationType: "query" | "mutation" | "subscription";
|
|
242
262
|
}>;
|
|
263
|
+
/** Where a call passes a client of its own instead of the app's: the options argument and the option. */
|
|
264
|
+
clientOption?: {
|
|
265
|
+
argument: number;
|
|
266
|
+
property: string;
|
|
267
|
+
};
|
|
243
268
|
} | {
|
|
244
269
|
/**
|
|
245
270
|
* An imperative Apollo Client call: `client.query({ query })`,
|
|
@@ -1422,14 +1447,7 @@ interface PatternPack {
|
|
|
1422
1447
|
* before reporting. `module` matches as a prefix, so one entry covers a
|
|
1423
1448
|
* family like `@aws-lambda-powertools/`.
|
|
1424
1449
|
*/
|
|
1425
|
-
libraryEnvVars?:
|
|
1426
|
-
/** Module-specifier prefix the library's imports start with. */
|
|
1427
|
-
module: string;
|
|
1428
|
-
/** Env-var name prefixes the library reads, e.g. "POWERTOOLS_". */
|
|
1429
|
-
prefixes?: string[];
|
|
1430
|
-
/** Exact env-var names the library reads. */
|
|
1431
|
-
names?: string[];
|
|
1432
|
-
}>;
|
|
1450
|
+
libraryEnvVars?: LibraryEnvVars[];
|
|
1433
1451
|
/**
|
|
1434
1452
|
* Library wrappers that return the function they were handed. A call to
|
|
1435
1453
|
* the `name` that `module` exports resolves to its `argument`-th
|
|
@@ -1479,13 +1497,14 @@ interface PatternPack {
|
|
|
1479
1497
|
* `uriProperty` the option key whose value is the endpoint. The
|
|
1480
1498
|
* adapter reads every construction in the project and stamps the
|
|
1481
1499
|
* client on each operation summary when exactly one distinct client
|
|
1482
|
-
* exists; two or more
|
|
1483
|
-
* does not say which one it goes through.
|
|
1500
|
+
* exists; two or more abstain, unless a call passes its own client.
|
|
1484
1501
|
*/
|
|
1485
1502
|
graphqlClients?: Array<{
|
|
1486
1503
|
importModule: string;
|
|
1487
1504
|
importName: string;
|
|
1488
1505
|
uriProperty: string;
|
|
1506
|
+
/** On a client a call can pass, the option its transport goes in. */
|
|
1507
|
+
linkProperty?: string;
|
|
1489
1508
|
/**
|
|
1490
1509
|
* How this constructor's cache option installs a fragment
|
|
1491
1510
|
* registry, for the library whose client can supply fragment
|
|
@@ -1510,8 +1529,9 @@ interface PatternPack {
|
|
|
1510
1529
|
* Which service a client talks to, keyed by the endpoint the
|
|
1511
1530
|
* construction was read with: the uri literal, or the written
|
|
1512
1531
|
* expression when the value is computed. The value is the provider
|
|
1513
|
-
* workspace name
|
|
1514
|
-
*
|
|
1532
|
+
* workspace name, or the schema file the provider was read from.
|
|
1533
|
+
* This is deployment knowledge, so it comes from the pack's own
|
|
1534
|
+
* per-project config rather than from the library.
|
|
1515
1535
|
*/
|
|
1516
1536
|
graphqlClientBindings?: Record<string, string>;
|
|
1517
1537
|
/**
|
|
@@ -1525,6 +1545,14 @@ interface PatternPack {
|
|
|
1525
1545
|
files: string[];
|
|
1526
1546
|
workspace: string;
|
|
1527
1547
|
}>;
|
|
1548
|
+
/**
|
|
1549
|
+
* What happens to an operation whose client no binding or scope ties
|
|
1550
|
+
* to a service, in a project with clients for more than one endpoint.
|
|
1551
|
+
* `unchecked`, the default, lists it as not checked. `pairWithAll`
|
|
1552
|
+
* pairs it with every resolver that serves its fields, and warns that
|
|
1553
|
+
* the match is ambiguous.
|
|
1554
|
+
*/
|
|
1555
|
+
graphqlUnboundClients?: "unchecked" | "pairWithAll";
|
|
1528
1556
|
/**
|
|
1529
1557
|
* Per-access recognizers, the counterpart to `invocationRecognizers` for
|
|
1530
1558
|
* values read without a call, such as `process.env.X`. A recognizer is
|
|
@@ -1759,6 +1787,8 @@ interface CaseGroup<Cond> {
|
|
|
1759
1787
|
*
|
|
1760
1788
|
* The lowering works `exitKind` out by scanning the statement's own
|
|
1761
1789
|
* subtree for a return or a throw, skipping every nested function body.
|
|
1790
|
+
* The engine reads `lines` only to say which loop or try each terminal
|
|
1791
|
+
* is written in.
|
|
1762
1792
|
*
|
|
1763
1793
|
* `callbacks` is the bodies of the functions this statement passes to
|
|
1764
1794
|
* calls it makes, when the language treats those as running for the
|
|
@@ -1771,6 +1801,15 @@ interface CaseGroup<Cond> {
|
|
|
1771
1801
|
interface LoweredStatementParts<Cond> {
|
|
1772
1802
|
readonly exitKind: ExitKind;
|
|
1773
1803
|
readonly callbacks?: readonly StatementBlock<Cond>[];
|
|
1804
|
+
/**
|
|
1805
|
+
* The lines a loop or a try is written on, from its first line to the
|
|
1806
|
+
* end of its body. Without them, a branch cannot say which calls in a
|
|
1807
|
+
* loop may have run before its terminal.
|
|
1808
|
+
*/
|
|
1809
|
+
readonly lines?: {
|
|
1810
|
+
readonly start: number;
|
|
1811
|
+
readonly end: number;
|
|
1812
|
+
};
|
|
1774
1813
|
}
|
|
1775
1814
|
/**
|
|
1776
1815
|
* One statement in the unit's control flow, already lowered out of the
|
|
@@ -1950,6 +1989,31 @@ declare function firstWrittenReading<T>(readings: readonly Reading<T>[]): Chosen
|
|
|
1950
1989
|
*/
|
|
1951
1990
|
declare function valueToReadFurtherFrom<T>(reading: Reading<T>): T | null;
|
|
1952
1991
|
|
|
1992
|
+
/**
|
|
1993
|
+
* The `groupId` an effect has, which says which call site in its unit
|
|
1994
|
+
* produced it.
|
|
1995
|
+
*
|
|
1996
|
+
* The id says what the effect is and never where its call is written:
|
|
1997
|
+
* the callee, then a hash of everything else the effect records, such as
|
|
1998
|
+
* its class and the shape of what the call passed. Code that moves or is
|
|
1999
|
+
* reformatted keeps its ids, so `inspect --diff` and `check --base` do
|
|
2000
|
+
* not report it as changed. Two call sites in one unit with the same
|
|
2001
|
+
* effect get the same key, so the ones after the first, in source order,
|
|
2002
|
+
* take `#2`, `#3` and so on. The lines stay in the effect's `location`,
|
|
2003
|
+
* which the key leaves out.
|
|
2004
|
+
*/
|
|
2005
|
+
|
|
2006
|
+
/** The key for an effect, which has no `groupId` yet. */
|
|
2007
|
+
declare function callSiteKey(effect: Effect): string;
|
|
2008
|
+
/**
|
|
2009
|
+
* The effects of one unit's call sites, given in source order with one
|
|
2010
|
+
* list per site, with each `groupId` a later site repeats numbered. An
|
|
2011
|
+
* entry keeps whatever else an adapter records beside its effect.
|
|
2012
|
+
*/
|
|
2013
|
+
declare function numberRepeatedCallSites<T extends {
|
|
2014
|
+
effect: Effect;
|
|
2015
|
+
}>(sites: readonly (readonly T[])[]): T[][];
|
|
2016
|
+
|
|
1953
2017
|
/**
|
|
1954
2018
|
* Folds the code registered around a unit, such as middleware, into what
|
|
1955
2019
|
* the unit does.
|
|
@@ -2033,16 +2097,46 @@ declare function stampModules(summaries: readonly BehavioralSummary[], modules:
|
|
|
2033
2097
|
* Which branch an effect belongs to.
|
|
2034
2098
|
*
|
|
2035
2099
|
* An adapter finds the calls a body makes once, then has to say which
|
|
2036
|
-
* of the branches it also found each call runs on.
|
|
2037
|
-
*
|
|
2038
|
-
* and where the branch's terminal is
|
|
2039
|
-
* attributes effects to branches
|
|
2040
|
-
* it the same way.
|
|
2100
|
+
* of the branches it also found each call runs on. `firesOn` settles it
|
|
2101
|
+
* from what is already extracted: the guards the call is written under,
|
|
2102
|
+
* the line it is written on, and where the branch's terminal is. Every
|
|
2103
|
+
* adapter attributes effects to branches through it, so they all decide
|
|
2104
|
+
* it the same way, for a plain call and for one a pack recognized.
|
|
2041
2105
|
*
|
|
2042
|
-
*
|
|
2043
|
-
*
|
|
2106
|
+
* This package's DESIGN.md shows why each test is there, with the cases
|
|
2107
|
+
* where leaving one out puts an effect on the wrong branch.
|
|
2044
2108
|
*/
|
|
2045
2109
|
|
|
2110
|
+
/** Where the call or read behind an effect is written. */
|
|
2111
|
+
interface EffectSite {
|
|
2112
|
+
/** The line the statement the call is written in starts on. */
|
|
2113
|
+
line: number;
|
|
2114
|
+
/** The guards the call is written under, spelled the way a branch records its conditions. */
|
|
2115
|
+
preconditions?: readonly RawCondition[] | undefined;
|
|
2116
|
+
/**
|
|
2117
|
+
* For a call in a `finally` or `ensure` body, the first line of the
|
|
2118
|
+
* try it cleans up after. The call runs on every path that entered
|
|
2119
|
+
* that try, including one that returned or threw before reaching it.
|
|
2120
|
+
*/
|
|
2121
|
+
cleansUpFrom?: number | undefined;
|
|
2122
|
+
}
|
|
2123
|
+
/** An effect, and where it was written. */
|
|
2124
|
+
interface PlacedEffect<E> {
|
|
2125
|
+
effect: E;
|
|
2126
|
+
site: EffectSite;
|
|
2127
|
+
}
|
|
2128
|
+
/** What the branch test reads off a branch. */
|
|
2129
|
+
type BranchEnding = Pick<RawBranch, "conditions" | "terminal" | "loopAround">;
|
|
2130
|
+
/**
|
|
2131
|
+
* Whether the effect written at `site` can run before `branch` reaches its
|
|
2132
|
+
* terminal. A call in the loop around the terminal may have run on an
|
|
2133
|
+
* earlier pass, whatever its guards say about the last one, so it stays.
|
|
2134
|
+
* Anything else needs a branch that does not contradict its guards, and
|
|
2135
|
+
* has to be written no later than the terminal ends.
|
|
2136
|
+
*/
|
|
2137
|
+
declare function firesOn(site: EffectSite, branch: BranchEnding): boolean;
|
|
2138
|
+
/** The effects that can run before the branch reaches its terminal, in the order given. */
|
|
2139
|
+
declare function effectsFiringOn<E>(placed: readonly PlacedEffect<E>[], branch: BranchEnding): E[];
|
|
2046
2140
|
/**
|
|
2047
2141
|
* Whether the branch leaves room for every guard on the effect. A guard
|
|
2048
2142
|
* the branch wrote down the other way around rules the effect out. A
|
|
@@ -2111,20 +2205,19 @@ declare function throughHelper(branch: RawBranch, at: {
|
|
|
2111
2205
|
* records of field names a branch's `expectedInput` lists.
|
|
2112
2206
|
*/
|
|
2113
2207
|
declare function mergeReadShapes(a: TypeShape | null, b: TypeShape | null): TypeShape | null;
|
|
2114
|
-
/**
|
|
2115
|
-
|
|
2208
|
+
/**
|
|
2209
|
+
* One call in a caller's body that hands a helper the response, in
|
|
2210
|
+
* source order. A branch reaches it when an effect written there would
|
|
2211
|
+
* fire on the branch.
|
|
2212
|
+
*/
|
|
2213
|
+
interface HandOffSite extends EffectSite {
|
|
2116
2214
|
/** The helper's paths, in the caller's terms. */
|
|
2117
2215
|
helper: readonly RawBranch[];
|
|
2118
|
-
preconditions?: readonly RawCondition[] | undefined;
|
|
2119
|
-
/** The line the statement holding the call starts on, which decides whether a branch reaches it. */
|
|
2120
|
-
line: number;
|
|
2121
2216
|
/** The lines the call is written on. */
|
|
2122
2217
|
at: {
|
|
2123
2218
|
start: number;
|
|
2124
2219
|
end: number;
|
|
2125
2220
|
};
|
|
2126
|
-
/** A call in a `finally` runs on every path, even one that left before it. */
|
|
2127
|
-
alwaysRuns?: boolean;
|
|
2128
2221
|
}
|
|
2129
2222
|
/**
|
|
2130
2223
|
* The branch split at each hand-off on it, in source order. A path that
|
|
@@ -2392,7 +2485,32 @@ interface StructuredPathConditionsResult<Cond, Terminal> {
|
|
|
2392
2485
|
byTerminal: Map<Terminal, ConditionInfo<Cond>[][]>;
|
|
2393
2486
|
/** Condition lists for paths that fall through the end of the body. */
|
|
2394
2487
|
fallthrough: ConditionInfo<Cond>[][];
|
|
2488
|
+
/** Where each terminal is written, for the terminals inside a loop or a cleanup body. */
|
|
2489
|
+
placement: Map<Terminal, TerminalPlacement>;
|
|
2395
2490
|
}
|
|
2491
|
+
/** Which loop and which try a terminal is written in, as effect placement reads them. */
|
|
2492
|
+
interface TerminalPlacement {
|
|
2493
|
+
/**
|
|
2494
|
+
* The lines of the outermost loop the terminal is in. Anything else
|
|
2495
|
+
* written in those lines may have run on an earlier pass.
|
|
2496
|
+
*/
|
|
2497
|
+
loopAround?: {
|
|
2498
|
+
start: number;
|
|
2499
|
+
end: number;
|
|
2500
|
+
};
|
|
2501
|
+
/**
|
|
2502
|
+
* For a terminal in a `finally` or `ensure` body, the first line of the
|
|
2503
|
+
* outermost try it cleans up after. It runs on every path that got
|
|
2504
|
+
* that far, including one that left the try early.
|
|
2505
|
+
*/
|
|
2506
|
+
cleansUpFrom?: number;
|
|
2507
|
+
}
|
|
2508
|
+
type ParentMap<Cond> = ReadonlyMap<StructuredStatement<Cond>, StructuredStatement<Cond> | null>;
|
|
2509
|
+
/**
|
|
2510
|
+
* Which loop and which try each terminal is written in. A lowering that
|
|
2511
|
+
* gave its loops and tries no `lines` gets no placement for them.
|
|
2512
|
+
*/
|
|
2513
|
+
declare function placeTerminals<Cond, Terminal>(input: Pick<StructuredPathConditionsInput<Cond, Terminal>, "statements" | "terminalsByStmt">, parentOf?: ParentMap<Cond>): Map<Terminal, TerminalPlacement>;
|
|
2396
2514
|
/**
|
|
2397
2515
|
* Work out the conditions on each path, for every StructuredStatement
|
|
2398
2516
|
* reachable from `input.statements`. Throws `PathBudgetExceeded` when the
|
|
@@ -2518,6 +2636,36 @@ type ChildrenOf<T> = (node: T) => readonly T[];
|
|
|
2518
2636
|
*/
|
|
2519
2637
|
declare function walkDescendants<T, C>(root: T, carried: C, childrenOf: ChildrenOf<T>, visitor: NodeVisitor<T, C>): void;
|
|
2520
2638
|
|
|
2639
|
+
/**
|
|
2640
|
+
* Where each of a body's calls is written, in the terms the branch test
|
|
2641
|
+
* reads: the paths to the statement the call is in, the line that
|
|
2642
|
+
* statement starts on, and the try whose cleanup body it is in.
|
|
2643
|
+
*
|
|
2644
|
+
* The Python and the Ruby adapter ask here once per body. The statements
|
|
2645
|
+
* stand in as the engine's terminals, so one enumeration covers every
|
|
2646
|
+
* call in the body. tree-sitter hands back a new wrapper for a node each
|
|
2647
|
+
* time one is read, so statements are matched by id.
|
|
2648
|
+
*/
|
|
2649
|
+
|
|
2650
|
+
/** What an adapter says about its own language for `statementSites`. */
|
|
2651
|
+
interface StatementReading<N extends Identified, Cond> {
|
|
2652
|
+
/** The statement a node is written in, which is what the lowering keys a path on. */
|
|
2653
|
+
statementOf: (node: N) => N | null;
|
|
2654
|
+
/** The body lowered with these statements as its terminals. */
|
|
2655
|
+
lower: (statements: readonly N[]) => Pick<StructuredPathConditionsInput<Cond, N>, "statements" | "terminalsByStmt">;
|
|
2656
|
+
/** The one-based line a node starts on. */
|
|
2657
|
+
firstLine: (node: N) => number;
|
|
2658
|
+
}
|
|
2659
|
+
/** The paths to each node's statement, and the site an effect at the node has. */
|
|
2660
|
+
interface StatementSites<N, Cond> {
|
|
2661
|
+
pathsTo: (node: N) => readonly ConditionInfo<Cond>[][] | undefined;
|
|
2662
|
+
/** The site for an effect at the node, with the guards the caller read for it. */
|
|
2663
|
+
siteOf: (node: N, preconditions: readonly RawCondition[]) => EffectSite;
|
|
2664
|
+
/** The site for an effect at the node, with the guards every path to its statement passes. */
|
|
2665
|
+
plainSiteOf: (node: N) => EffectSite;
|
|
2666
|
+
}
|
|
2667
|
+
declare function statementSites<N extends Identified, Cond>(nodes: readonly N[], reading: StatementReading<N, Cond>): StatementSites<N, Cond>;
|
|
2668
|
+
|
|
2521
2669
|
/**
|
|
2522
2670
|
* The project root when nothing declares one.
|
|
2523
2671
|
*
|
|
@@ -2591,6 +2739,39 @@ interface SourceSpelling<L extends WalkEnd> {
|
|
|
2591
2739
|
/** Every place a value's walk ended, as distinct value references. */
|
|
2592
2740
|
declare function sourceRefsOf<L extends WalkEnd>(leaves: readonly L[], spelling: SourceSpelling<L>): ValueRef[];
|
|
2593
2741
|
|
|
2742
|
+
/**
|
|
2743
|
+
* Functions a deploy manifest says the platform calls, as a pack finds
|
|
2744
|
+
* them for one source file. A Lambda's `Handler` is one: the template
|
|
2745
|
+
* says which file and which function, and nothing in the code calls it.
|
|
2746
|
+
*
|
|
2747
|
+
* The pack reads the manifest, which is the library's business, and
|
|
2748
|
+
* decides which units the function gets. The adapter finds the
|
|
2749
|
+
* definition by `name`, which is a language rule, and builds each unit
|
|
2750
|
+
* on it, so the call walk starts there. Python and Ruby take packs as
|
|
2751
|
+
* data and use this shape; a TypeScript pack has `discoverUnits` and
|
|
2752
|
+
* finds the function itself.
|
|
2753
|
+
*/
|
|
2754
|
+
|
|
2755
|
+
interface DeclaredEntryPoint {
|
|
2756
|
+
/**
|
|
2757
|
+
* The function as the manifest writes it, in the language's own
|
|
2758
|
+
* spelling: `handler` for a function at the top of the file, or
|
|
2759
|
+
* `Billing::Handler.process` for a Ruby class method.
|
|
2760
|
+
*/
|
|
2761
|
+
name: string;
|
|
2762
|
+
/** The units to build on that function. One function can be several deployed units. */
|
|
2763
|
+
units: DeclaredEntryUnit[];
|
|
2764
|
+
}
|
|
2765
|
+
interface DeclaredEntryUnit {
|
|
2766
|
+
kind: CodeUnitKind;
|
|
2767
|
+
/** The summary's name. */
|
|
2768
|
+
name: string;
|
|
2769
|
+
binding: BoundaryBinding;
|
|
2770
|
+
deployableUnit: DeployableUnit;
|
|
2771
|
+
/** Merged onto the summary's `metadata`. */
|
|
2772
|
+
metadata?: Record<string, unknown>;
|
|
2773
|
+
}
|
|
2774
|
+
|
|
2594
2775
|
/**
|
|
2595
2776
|
* The small surface every language adapter implements, whatever that
|
|
2596
2777
|
* language's own tooling looks like underneath.
|
|
@@ -2951,6 +3132,11 @@ declare const CACHE_DIR_ENV = "SUSS_CACHE_DIR";
|
|
|
2951
3132
|
declare function chosenCacheRoot(): string | null;
|
|
2952
3133
|
/** The extraction cache for the files read under `projectDir`. */
|
|
2953
3134
|
declare function extractionCacheDirFor(projectDir: string): string;
|
|
3135
|
+
/**
|
|
3136
|
+
* The folder `suss map` writes its page and the summaries behind it to:
|
|
3137
|
+
* `.suss` in the project, or a folder of its own under the chosen root.
|
|
3138
|
+
*/
|
|
3139
|
+
declare function mapFolderFor(projectDir: string): string;
|
|
2954
3140
|
/** The file where the server for `projectDir` says how to reach it. */
|
|
2955
3141
|
declare function liveRecordFor(projectDir: string): string;
|
|
2956
3142
|
|
|
@@ -3297,6 +3483,35 @@ interface PackConfigNeed {
|
|
|
3297
3483
|
* since it never ran, so the caller passes these in.
|
|
3298
3484
|
*/
|
|
3299
3485
|
declare function packConfigCheck(needs: ReadonlyArray<PackConfigNeed>): HealthCheck;
|
|
3486
|
+
/**
|
|
3487
|
+
* A path in a pack's config file where nothing exists. `resolved` is the
|
|
3488
|
+
* path the pack was given. `inProject` is the same value read against the
|
|
3489
|
+
* project instead, set only when something exists there, since that is
|
|
3490
|
+
* the path the user most likely meant.
|
|
3491
|
+
*/
|
|
3492
|
+
interface PackPathMissing {
|
|
3493
|
+
pack: string;
|
|
3494
|
+
option: string;
|
|
3495
|
+
/** The value as the config file wrote it, or one entry of a list. */
|
|
3496
|
+
value: string;
|
|
3497
|
+
configFile: string;
|
|
3498
|
+
resolved: string;
|
|
3499
|
+
inProject?: string;
|
|
3500
|
+
}
|
|
3501
|
+
/**
|
|
3502
|
+
* What went wrong with a path option and what to do about it, worded
|
|
3503
|
+
* once for the health block and for the run finding `check` reports.
|
|
3504
|
+
*/
|
|
3505
|
+
declare function describeMissingPath(missing: PackPathMissing): {
|
|
3506
|
+
problem: string;
|
|
3507
|
+
fix: string;
|
|
3508
|
+
};
|
|
3509
|
+
/**
|
|
3510
|
+
* Path options in a config file that point at nothing. The pack still
|
|
3511
|
+
* runs, and every lookup under such a path comes back empty, so the
|
|
3512
|
+
* summaries look like a project with less in it.
|
|
3513
|
+
*/
|
|
3514
|
+
declare function packPathCheck(missing: ReadonlyArray<PackPathMissing>): HealthCheck;
|
|
3300
3515
|
/**
|
|
3301
3516
|
* Run every health check over one extraction report and return what
|
|
3302
3517
|
* fired, grouped by which check caught it.
|
|
@@ -3708,6 +3923,8 @@ interface RawTerminal {
|
|
|
3708
3923
|
* An invocation argument as the adapter read it. An argument that fits none of
|
|
3709
3924
|
* these variants, arithmetic for instance, comes through as null instead of
|
|
3710
3925
|
* being dropped, so a reader still knows how many arguments the call had.
|
|
3926
|
+
* JSON null therefore means the adapter could not read the argument, and a
|
|
3927
|
+
* caller that wrote `null` gets `{ kind: "null" }` instead.
|
|
3711
3928
|
*/
|
|
3712
3929
|
type EffectArg = {
|
|
3713
3930
|
kind: "string";
|
|
@@ -3718,6 +3935,14 @@ type EffectArg = {
|
|
|
3718
3935
|
} | {
|
|
3719
3936
|
kind: "boolean";
|
|
3720
3937
|
value: boolean;
|
|
3938
|
+
}
|
|
3939
|
+
/** A literal `null`, Python's `None` or Ruby's `nil`, which a caller passed on purpose. */
|
|
3940
|
+
| {
|
|
3941
|
+
kind: "null";
|
|
3942
|
+
}
|
|
3943
|
+
/** JavaScript's `undefined`, kept apart from `null` because a parameter default replaces only this one. */
|
|
3944
|
+
| {
|
|
3945
|
+
kind: "undefined";
|
|
3721
3946
|
} | {
|
|
3722
3947
|
kind: "object";
|
|
3723
3948
|
fields: Record<string, EffectArg>;
|
|
@@ -3749,6 +3974,11 @@ type EffectArg = {
|
|
|
3749
3974
|
args: EffectArg[];
|
|
3750
3975
|
} | null;
|
|
3751
3976
|
type RawEffect = {
|
|
3977
|
+
location?: {
|
|
3978
|
+
start: number;
|
|
3979
|
+
end: number;
|
|
3980
|
+
};
|
|
3981
|
+
} & ({
|
|
3752
3982
|
type: "mutation";
|
|
3753
3983
|
target: string;
|
|
3754
3984
|
operation: "create" | "update" | "delete";
|
|
@@ -3765,7 +3995,7 @@ type RawEffect = {
|
|
|
3765
3995
|
} | {
|
|
3766
3996
|
type: "stateChange";
|
|
3767
3997
|
variable: string;
|
|
3768
|
-
};
|
|
3998
|
+
});
|
|
3769
3999
|
interface RawBranch {
|
|
3770
4000
|
conditions: RawCondition[];
|
|
3771
4001
|
terminal: RawTerminal;
|
|
@@ -3781,6 +4011,15 @@ interface RawBranch {
|
|
|
3781
4011
|
start: number;
|
|
3782
4012
|
end: number;
|
|
3783
4013
|
};
|
|
4014
|
+
/**
|
|
4015
|
+
* The lines of the outermost loop the terminal is written in, when it
|
|
4016
|
+
* is in one. A call anywhere in those lines may have run on an earlier
|
|
4017
|
+
* pass before this path reached the terminal.
|
|
4018
|
+
*/
|
|
4019
|
+
loopAround?: {
|
|
4020
|
+
start: number;
|
|
4021
|
+
end: number;
|
|
4022
|
+
};
|
|
3784
4023
|
isDefault: boolean;
|
|
3785
4024
|
/** The fields a consumer reads off a response inside this branch. */
|
|
3786
4025
|
expectedInput?: TypeShape | null;
|
|
@@ -3925,6 +4164,8 @@ interface RawCodeStructure {
|
|
|
3925
4164
|
requestSpelling?: RequestSpellingMetadata;
|
|
3926
4165
|
/** What a test pack found about a `test` unit: whether it is skipped, and what it replaces with a mock. */
|
|
3927
4166
|
test?: TestMetadata;
|
|
4167
|
+
/** A pack's own metadata namespaces, merged onto the summary's `metadata` as given. */
|
|
4168
|
+
packMetadata?: Record<string, unknown>;
|
|
3928
4169
|
/** The extractor cannot derive this. An adapter that has the SDL and knows
|
|
3929
4170
|
* which field the resolver serves fills it in. */
|
|
3930
4171
|
graphqlDeclaredContract?: GraphqlDeclaredContract;
|
|
@@ -3940,6 +4181,13 @@ interface RawCodeStructure {
|
|
|
3940
4181
|
reference: string;
|
|
3941
4182
|
reason: string;
|
|
3942
4183
|
};
|
|
4184
|
+
/** The client the operation's own call passes, when one settled. */
|
|
4185
|
+
graphqlClient?: GraphqlMetadata["client"];
|
|
4186
|
+
/** Why the client the operation's call passes could not be settled. */
|
|
4187
|
+
graphqlUnresolvedClient?: {
|
|
4188
|
+
reference: string;
|
|
4189
|
+
reason: string;
|
|
4190
|
+
};
|
|
3943
4191
|
/**
|
|
3944
4192
|
* Which part of the boundary the source does not state, and why. The binding
|
|
3945
4193
|
* still goes out with that part empty, so the unit pairs with nothing rather
|
|
@@ -3989,4 +4237,4 @@ declare function rawConditionToPredicate(c: RawCondition): Predicate;
|
|
|
3989
4237
|
declare function effectToIR(effect: RawEffect): Effect;
|
|
3990
4238
|
declare function paramToInput(param: RawParameter): Input;
|
|
3991
4239
|
|
|
3992
|
-
export { type AccessRecognizer, type AdapterCodeStamp, type AdapterStamp, type ArgumentParser, type AstCapableOps, type BindingExtraction, type BodyContent, CACHE_DIR_ENV, type CacheAttribution, type CacheDiagnostic, type CacheInput, type CacheLayer, type CacheLookup, type CallOps, type CaseGroup, type ChannelSource, type ChildrenOf, type ChosenReading, type ClassOps, type CodeHasher, type ConditionHandle, type ConditionInfo, type ConditionSource, type ConstructedFrom, type ContractPattern, type DeclaredBinding, type DeclaredBy, type DeclaredMatch, type DeclaredModule, type DeclaredStatusDecorators, type DefaultedReading, type DiscoveredCustomUnit, type DiscoveredSubUnit, type DiscoveredSubUnitParent, type DiscoveryMatch, type DiscoveryPattern, type EffectArg, type EmptyStage, EnclosingNodes, type ExitKind, type ExtractionConfig, type ExtractionReport, type ExtractorOptions, type FailureDelivery, type GlobalPrefixCall, type HandOffSite, type HealthCheck, type HealthViolation, type HelperDeclarations, type HelperSearch, type HelperSink, type HelperValue, IdMap, IdSet, type Identified, type InputMappingPattern, type InputRead, type InvocationRecognizer, type KeepsArms, KeptParses, type LanguageAdapter, type LoweredStatementParts, MAX_ENTRIES, MAX_HELPER_PATHS, MAX_PATHS, MODULE_SURFACE_RECOGNITION, type ModuleInitOptions, type NodeVisitor, type OpsCarrier, type PackConfigNeed, type PackDeclarations, type PackFailure, type PackFunnel, type PackGradient, type PackTally, type ParameterSupplier, type ParsedNode, type PartialPlan, PathBudgetExceeded, type PatternPack, type ProjectHelper, type ProjectHelpers, type RawBranch, type RawCodeStructure, type RawCondition, type RawDeclaredContract, type RawDependencyCall, type RawEffect, type RawParameter, type RawProvenance, type RawTerminal, type Reading, type ReceiverOrigin, type RedirectDelivery, type RedirectOption, type RegistrationHelper, type ResponsePropertyMapping, type ResponsePropertyMeaning, type RootRecord, type RouteVersioning, SKIP_CHILDREN, type SettledModule, type SourceRange, type SourceSpelling, type StatedSlot, type StatementBlock, type StructuredPathConditionsInput, type StructuredPathConditionsResult, type StructuredStatement, type TerminalExtraction, type TerminalMatch, type TerminalPattern, type TestCaseMatch, type Timer, type TimingReport, type TransparentWrapper, type UnitRecord, UnmodeledFlow, type UnsettledName, type ValueEntry, type ValueOps, type VersionPlacement, type WalkEnd, type WrapperMethodRegistration, type WrapperOptionRegistration, type WrapperRegistration, absentReading, ambiguousReading, andThenReading, assembleSummary, assessConfidence, buildUngatedExtractionReport, chosenCacheRoot, commonDirectoryOf, composeWrappers, computeContentHash, computeDistHashFrom, configuredCallOption, createAdapterStamp, createCacheLayer, createCodeHasher, createPackTallies, createTimer, detectGaps, effectToIR, emptyTally, enumerateOrDegrade, enumerateStructuredPaths, evaluatePackHealth, extractionCacheDirFor, extractionConfigStamp, firstWrittenReading, formatPackHealth, guardsHoldOn, helperPathsOnVariables, httpRouteDiscovery, isListedTestFile, liveRecordFor, makeIgnoredDirectory, makeTransitionId, mapReading, markReturnsAsExitCode, matchesTestFileName, mergeReadShapes, moduleInitStructure, moduleOfFile, noopTimer, ownersWhereWritten, packConfigCheck, packGradients, paramToInput, processCodeHasher, projectFileStamp, rawConditionToPredicate, recordPackFailure, redirectDeliveryWhenSet, registrationHelperDiscovery, routeHelperIndex, runDigest, runsBefore, scopeOption, settleModules, sharedGatingConditions, sourceRefsOf, splitAtHandOffs, stampMayMissAWrite, stampModuleImports, stampModules, storageSystemOption, summaryCountsByPack, tallyUnit, terminalToOutput, throughHelper, unreadableReading, unwrapJsonStringify, valueToReadFurtherFrom, walkDescendants, wrapperDiscovery, writtenReading };
|
|
4240
|
+
export { type AccessRecognizer, type AdapterCodeStamp, type AdapterStamp, type ArgumentParser, type AstCapableOps, type BindingExtraction, type BodyContent, type BranchEnding, CACHE_DIR_ENV, type CacheAttribution, type CacheDiagnostic, type CacheInput, type CacheLayer, type CacheLookup, type CallOps, type CaseGroup, type ChannelSource, type ChildrenOf, type ChosenReading, type ClassOps, type CodeHasher, type ConditionHandle, type ConditionInfo, type ConditionSource, type ConstructedFrom, type ContractPattern, type DeclaredBinding, type DeclaredBy, type DeclaredEntryPoint, type DeclaredEntryUnit, type DeclaredMatch, type DeclaredModule, type DeclaredStatusDecorators, type DefaultedReading, type DiscoveredCustomUnit, type DiscoveredSubUnit, type DiscoveredSubUnitParent, type DiscoveryMatch, type DiscoveryPattern, type EffectArg, type EffectSite, type EmptyStage, EnclosingNodes, type ExitKind, type ExtractionConfig, type ExtractionReport, type ExtractorOptions, type FailureDelivery, type GlobalPrefixCall, type HandOffSite, type HealthCheck, type HealthViolation, type HelperDeclarations, type HelperSearch, type HelperSink, type HelperValue, IdMap, IdSet, type Identified, type InputMappingPattern, type InputRead, type InvocationRecognizer, type KeepsArms, KeptParses, type LanguageAdapter, type LibraryEnvVars, type LoweredStatementParts, MAX_ENTRIES, MAX_HELPER_PATHS, MAX_PATHS, MODULE_SURFACE_RECOGNITION, type ModuleInitOptions, type NodeVisitor, type OpsCarrier, type PackConfigNeed, type PackDeclarations, type PackFailure, type PackFunnel, type PackGradient, type PackPathMissing, type PackTally, type ParameterSupplier, type ParsedNode, type PartialPlan, PathBudgetExceeded, type PatternPack, type PlacedEffect, type ProjectHelper, type ProjectHelpers, type RawBranch, type RawCodeStructure, type RawCondition, type RawDeclaredContract, type RawDependencyCall, type RawEffect, type RawParameter, type RawProvenance, type RawTerminal, type Reading, type ReceiverOrigin, type RedirectDelivery, type RedirectOption, type RegistrationHelper, type ResponsePropertyMapping, type ResponsePropertyMeaning, type RootRecord, type RouteVersioning, SKIP_CHILDREN, type SettledModule, type SourceRange, type SourceSpelling, type StatedSlot, type StatementBlock, type StatementReading, type StatementSites, type StructuredPathConditionsInput, type StructuredPathConditionsResult, type StructuredStatement, type TerminalExtraction, type TerminalMatch, type TerminalPattern, type TerminalPlacement, type TestCaseMatch, type Timer, type TimingReport, type TransparentWrapper, type UnitRecord, UnmodeledFlow, type UnsettledName, type ValueEntry, type ValueOps, type VersionPlacement, type WalkEnd, type WrapperMethodRegistration, type WrapperOptionRegistration, type WrapperRegistration, absentReading, ambiguousReading, andThenReading, assembleSummary, assessConfidence, buildUngatedExtractionReport, callSiteKey, chosenCacheRoot, commonDirectoryOf, composeWrappers, computeContentHash, computeDistHashFrom, configuredCallOption, createAdapterStamp, createCacheLayer, createCodeHasher, createPackTallies, createTimer, describeMissingPath, detectGaps, effectToIR, effectsFiringOn, emptyTally, enumerateOrDegrade, enumerateStructuredPaths, evaluatePackHealth, extractionCacheDirFor, extractionConfigStamp, firesOn, firstWrittenReading, formatPackHealth, guardsHoldOn, helperPathsOnVariables, httpRouteDiscovery, isListedTestFile, libraryEnvReadMarker, liveRecordFor, makeIgnoredDirectory, makeTransitionId, mapFolderFor, mapReading, markReturnsAsExitCode, matchesTestFileName, mergeReadShapes, moduleInitStructure, moduleOfFile, noopTimer, numberRepeatedCallSites, ownersWhereWritten, packConfigCheck, packGradients, packPathCheck, paramToInput, placeTerminals, processCodeHasher, projectFileStamp, rawConditionToPredicate, recordPackFailure, redirectDeliveryWhenSet, registrationHelperDiscovery, routeHelperIndex, runDigest, runsBefore, scopeOption, settleModules, sharedGatingConditions, sourceRefsOf, splitAtHandOffs, stampMayMissAWrite, stampModuleImports, stampModules, statementSites, storageSystemOption, summaryCountsByPack, tallyUnit, terminalToOutput, throughHelper, unreadableReading, unwrapJsonStringify, valueToReadFurtherFrom, walkDescendants, wrapperDiscovery, writtenReading };
|