@suss/adapter-typescript 0.34.0 → 0.35.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.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { SourceFile, Node, Project, FunctionDeclaration, FunctionExpression, ArrowFunction, MethodDeclaration, Symbol, CallExpression, NewExpression, TaggedTemplateExpression, PropertyAccessExpression, ImportDeclaration, ArrayLiteralExpression, ObjectLiteralExpression, ObjectLiteralElementLike, Expression, Identifier } from 'ts-morph';
2
- import { PatternPack, TransparentWrapper, ParameterSupplier, RawCondition, DiscoveryPattern, TerminalPattern, InputMappingPattern, ArgumentParser, StatedSlot, AstCapableOps, CallOps, EffectArg, LanguageAdapter, ExtractorOptions, TimingReport, CacheDiagnostic, ExtractionReport, DeclaredModule, InvocationRecognizer, AccessRecognizer, RawCodeStructure, RawTerminal, RawBranch, configuredCallOption, RawDeclaredContract, ContractPattern, ResponsePropertyMapping } from '@suss/extractor';
1
+ import { SourceFile, Node, Project, FunctionDeclaration, FunctionExpression, ArrowFunction, MethodDeclaration, Symbol, CallExpression, NewExpression, TaggedTemplateExpression, PropertyAccessExpression, Expression, ImportDeclaration, ArrayLiteralExpression, ObjectLiteralExpression, ObjectLiteralElementLike, Identifier } from 'ts-morph';
2
+ import { PatternPack, TransparentWrapper, ParameterSupplier, VersionPlacement, RawCondition, DiscoveryPattern, TerminalPattern, InputMappingPattern, ArgumentParser, StatedSlot, AstCapableOps, CallOps, EffectArg, LanguageAdapter, ExtractorOptions, TimingReport, CacheDiagnostic, ExtractionReport, DeclaredModule, InvocationRecognizer, AccessRecognizer, RawCodeStructure, RawTerminal, ResponsePropertyMapping, RawBranch, KeepsArms, configuredCallOption, RawDeclaredContract, ContractPattern } from '@suss/extractor';
3
3
  export { EmptyStage, ExtractionReport, PackFunnel, Timer, TimingReport, computeContentHash } from '@suss/extractor';
4
4
  import { MessageBusSemantics, DeployableUnit, UnfollowedCall, WrapperReference, Effect, BehavioralSummary, BoundaryBinding, Predicate, TypeShape, ValueRef } from '@suss/behavioral-ir';
5
5
  import { ExplainStats, SourceLeaf, ValueUses, WhyExplained, ValueLocation } from '@suss/resolution';
@@ -104,6 +104,15 @@ interface PassedArgument {
104
104
  call: Node;
105
105
  argument: Node;
106
106
  }
107
+ /** What a call that takes its function out of a table may run. */
108
+ interface DispatchedCall {
109
+ /** Every function it may run. */
110
+ functions: readonly Node[];
111
+ /** True when the source narrows the call to one entry that is one function. */
112
+ certain: boolean;
113
+ /** How many entries came to no function this run read. */
114
+ unresolved: number;
115
+ }
107
116
  /** See `ResolutionStore.envNamers`. */
108
117
  interface EnvironmentNamers {
109
118
  /**
@@ -149,6 +158,8 @@ declare class ResolutionStore {
149
158
  /** See `notePossibleCallers`. */
150
159
  private readonly possibleCallers;
151
160
  private readonly callerFilesRead;
161
+ /** Containers whose writes `dispatchedFunctions` has already stated. */
162
+ private readonly containersRead;
152
163
  private stale;
153
164
  constructor(wrappers?: TransparentWrapper[], environmentObjects?: readonly string[], runtime?: RuntimeSpellings, parameterSuppliers?: readonly ParameterSupplier[]);
154
165
  /** A store with the wrappers and runtime objects these packs declare, as an extraction over them starts from. */
@@ -252,6 +263,21 @@ declare class ResolutionStore {
252
263
  * arrives at them.
253
264
  */
254
265
  argumentsPassedTo(parameter: Node): PassedArgument[];
266
+ /**
267
+ * What each call may run when it takes its function out of a table or
268
+ * a map. The writes into each table are read before the answer is,
269
+ * since a registry fills one from a body no question passes through.
270
+ * A call that takes no function from a table is left out.
271
+ */
272
+ dispatchedFunctions(calls: readonly Node[]): Map<Node, DispatchedCall>;
273
+ private askDispatch;
274
+ private nodesFor;
275
+ /**
276
+ * States the writes into each container not read before, and reads the
277
+ * files that may call a function writing one, since a registry is
278
+ * usually filled by a function its callers pass handlers to.
279
+ */
280
+ private readContainerWrites;
255
281
  /**
256
282
  * The other direction from `argumentsPassedTo`: every call in this
257
283
  * parameter's own function, or a closure nested inside it, that hands
@@ -346,6 +372,20 @@ declare class ResolutionStore {
346
372
  * what keeps a wrapper's own result apart from the library's.
347
373
  */
348
374
  returnsCall(func: Node, call: Node): boolean;
375
+ /**
376
+ * Each expression a function's returns hand back, as written. Unlike
377
+ * `returnsCall`, a call into a library comes back too, since a caller
378
+ * asking this wants to see where the project's own code stops.
379
+ */
380
+ returnedValuesOf(func: Node): Node[];
381
+ /**
382
+ * Every call made through this parameter, in its own function or in
383
+ * a closure written inside it, which is how a wrapper runs the
384
+ * handler it was given.
385
+ */
386
+ callsThrough(parameter: Node): Node[];
387
+ /** Every name the facts record as referring to this declaration. */
388
+ referencesTo(declaration: Node): Node[];
349
389
  /**
350
390
  * What the reads of a local do with it, when `receiver` is a local a
351
391
  * function declares once as `construction`. Null for anything else,
@@ -556,6 +596,45 @@ interface GlobalPrefix {
556
596
  excluded: ExcludedRoute[];
557
597
  }
558
598
 
599
+ /**
600
+ * The API versions a decorated route serves, and the paths they put it at.
601
+ *
602
+ * NestJS reads `@Controller({ version })` and `@Version()` only after the
603
+ * bootstrap calls `app.enableVersioning()`, usually in a file with no
604
+ * controller in it. URI versioning puts `v1` in the path after the global
605
+ * prefix and before the controller's path. Header, media type and custom
606
+ * versioning leave the path alone, so every version of a route shares it.
607
+ *
608
+ * When the run cannot read how the application serves versions, a route
609
+ * that states a version claims no path. Any path it claimed could pair it
610
+ * with a client or a document for another version.
611
+ */
612
+
613
+ /** The versions a route or an application states. Null in the list means every version. */
614
+ type StatedVersion = {
615
+ kind: "unstated";
616
+ } | {
617
+ kind: "unread";
618
+ } | {
619
+ kind: "listed";
620
+ versions: ReadonlyArray<string | null>;
621
+ };
622
+ /**
623
+ * How an application serves versions. `off` means the run read the
624
+ * application and nothing turns versioning on, so Nest ignores every
625
+ * version a route states.
626
+ */
627
+ type AppVersioning = {
628
+ kind: "off";
629
+ } | {
630
+ kind: "unread";
631
+ } | {
632
+ kind: "on";
633
+ placement: VersionPlacement;
634
+ pathPrefix: string;
635
+ defaultVersion: StatedVersion;
636
+ };
637
+
559
638
  type FunctionRoot = FunctionDeclaration | FunctionExpression | ArrowFunction | MethodDeclaration;
560
639
  /**
561
640
  * Public API: returns RawCondition[] with structured: null.
@@ -732,6 +811,12 @@ interface DiscoveredUnit {
732
811
  method: string | null;
733
812
  path: string | null;
734
813
  };
814
+ /**
815
+ * The file a file convention found this unit in. Its path and export
816
+ * name decide the route, even when the function it exports was written
817
+ * in another module or returned by a factory.
818
+ */
819
+ routeFile?: SourceFile;
735
820
  /**
736
821
  * The status the framework sends for a response this unit's body
737
822
  * states none for, when the route declares one: `@HttpCode(204)`, or
@@ -739,6 +824,8 @@ interface DiscoveredUnit {
739
824
  * pack's response terminals for this unit alone.
740
825
  */
741
826
  defaultStatusCode?: number;
827
+ /** Statuses the route's own decorators list as possible responses. */
828
+ declaredStatuses?: number[];
742
829
  /**
743
830
  * Populated by a pack's `discoverUnits` callback for a message-bus
744
831
  * consumer whose channel the code gives (a handler factory whose
@@ -788,13 +875,21 @@ interface DiscoveredUnit {
788
875
  */
789
876
  unfollowed?: UnfollowedCall;
790
877
  /**
791
- * The functions the registration call lists before this handler,
792
- * `router.post("/", validate, handler)`, in the order they run. Each
793
- * is a unit of its own in the same file, and these references point
794
- * the handler at them. They run inside whatever the app registers
795
- * for every route, so they are applied after those.
878
+ * The functions that run around this handler on its route alone, in
879
+ * the order they run: the ones `router.post("/", validate, handler)`
880
+ * lists before it, or the layers a route export written as
881
+ * `withAuth(handler)` puts around it. A reference points at the
882
+ * layer's own summary, and a layer the run could not read has none.
883
+ * They run inside whatever the app registers for every route, so they
884
+ * are applied after those.
796
885
  */
797
886
  routeWrappers?: WrapperReference[];
887
+ /**
888
+ * Set on the closure a wrapper factory hands back: the position of the
889
+ * factory's parameter it calls to run the handler it was given. That
890
+ * call is the closure's continuation.
891
+ */
892
+ factoryContinuation?: number;
798
893
  /**
799
894
  * The functions listed before this handler that a project factory
800
895
  * returned and the store could not follow, one stop per call.
@@ -831,6 +926,8 @@ interface MountPrefixIndex {
831
926
  * puts in front of its routes. A key with no entry has none.
832
927
  */
833
928
  globalPrefixes?: ReadonlyMap<string, GlobalPrefix>;
929
+ /** How the run's applications serve API versions, keyed by `routeVersioningKey`. */
930
+ versionings?: ReadonlyMap<string, AppVersioning>;
834
931
  }
835
932
  /**
836
933
  * What the project helper index says it has already expanded, which the
@@ -1137,10 +1234,19 @@ interface TypeScriptAdapterConfig {
1137
1234
  onCacheDiagnostic?: (diagnostic: CacheDiagnostic) => void;
1138
1235
  /** Not called on a cache hit, where no stage ran. */
1139
1236
  onExtractionReport?: (report: ExtractionReport) => void;
1140
- /** Absolute. `.suss/cache/` beside the tsconfig; `null` turns it off. */
1237
+ /**
1238
+ * Absolute. `.suss/cache/` in `walkedDirectory` when set, otherwise
1239
+ * beside the tsconfig, or under `SUSS_CACHE_DIR` when that is set;
1240
+ * `null` turns it off.
1241
+ */
1141
1242
  cacheDir?: string | null;
1142
1243
  /** The modules the project lists in `suss.json`, with absolute paths. */
1143
1244
  modules?: readonly DeclaredModule[];
1245
+ /**
1246
+ * Absolute. Walks only the tsconfig's files under this directory, for a
1247
+ * tsconfig found above the directory a run was pointed at.
1248
+ */
1249
+ walkedDirectory?: string;
1144
1250
  }
1145
1251
  interface TypeScriptAdapter extends LanguageAdapter {
1146
1252
  /** Kept off `LanguageAdapter`, so a caller needing ts-morph asks for it. */
@@ -1208,6 +1314,31 @@ interface FoundTerminal {
1208
1314
  */
1209
1315
  declare function findTerminals(func: FunctionRoot, patterns: TerminalPattern[], barriers?: DescentBarriers, resolution?: ResolutionStore, originatesFrom?: OriginatesFrom, resolveCallee?: ResolveCallee): FoundTerminal[];
1210
1316
 
1317
+ /**
1318
+ * Reads a project function a client caller hands its response to as part
1319
+ * of the caller.
1320
+ *
1321
+ * const response = await fetch(`/api/orders/${id}`);
1322
+ * return readOrder(response);
1323
+ *
1324
+ * `readOrder` throws on `!response.ok`. Read alone, the caller tests
1325
+ * nothing, so every failure looks unhandled. The helper's paths are read
1326
+ * the way the caller's were, with each parameter replaced by what the
1327
+ * caller passed, and each becomes a path of the caller. A helper is
1328
+ * followed only when one of its paths tests the response or its parsed
1329
+ * body, so a call that logs the response leaves the caller as it was.
1330
+ */
1331
+
1332
+ interface ResponseHandOffOptions {
1333
+ /** The callee text the caller's own conditions use for the response. */
1334
+ responseCallee: string;
1335
+ /** The callee texts they use for its parsed body, such as `res.json`. */
1336
+ bodyCallees: readonly string[];
1337
+ /** The pack's response members, to tell a body field from a status read. */
1338
+ responseSemantics: ResponsePropertyMapping[] | undefined;
1339
+ resolution: ResolutionStore;
1340
+ }
1341
+
1211
1342
  /**
1212
1343
  * Turns one function into the list of branches a summary is built from.
1213
1344
  *
@@ -1257,8 +1388,29 @@ interface RawBranchResult {
1257
1388
  * or when every condition on it came from an early return or throw,
1258
1389
  * since those are the paths that run when no guard fired.
1259
1390
  */
1260
- declare function extractRawBranches(func: FunctionRoot, terminalPatterns: TerminalPattern[], invocationRecognizers?: InvocationRecognizer[], accessRecognizers?: AccessRecognizer[], barriers?: DescentBarriers, resolution?: ResolutionStore, originatesFrom?: OriginatesFrom, anchorCallsOf?: AnchorCallsOf, resolveCallee?: ResolveCallee, collectCallAccounting?: boolean): RawBranchResult;
1391
+ declare function extractRawBranches(func: FunctionRoot, terminalPatterns: TerminalPattern[], invocationRecognizers?: InvocationRecognizer[], accessRecognizers?: AccessRecognizer[], barriers?: DescentBarriers, resolution?: ResolutionStore, originatesFrom?: OriginatesFrom, anchorCallsOf?: AnchorCallsOf, resolveCallee?: ResolveCallee, collectCallAccounting?: boolean, keepsArms?: KeepsArms<Expression>, handOff?: ResponseHandOffOptions): RawBranchResult;
1392
+
1393
+ /**
1394
+ * Picks the files a run walks, and gets the compiler ahead of the
1395
+ * import graph before anything asks it a question.
1396
+ *
1397
+ * `createLazyProject` reads the tsconfig's file list and keeps the
1398
+ * files whose imports match some active pack's `requiresImport` gate.
1399
+ * Those candidates are what the run walks; everything else is loaded
1400
+ * later, one file at a time, by `lazyAddSourceFile` when symbol
1401
+ * resolution points at it.
1402
+ *
1403
+ * The rest of the module is about load order. TypeScript follows a
1404
+ * re-export chain by recursing, so a barrel chain a few hundred files
1405
+ * deep runs the call stack out. `loadImportGraphsDepthFirst` loads each
1406
+ * file after everything it imports. The README says why that matters.
1407
+ */
1408
+
1409
+ /** Reads no source, so a cache hit never pays for the bootstrap. */
1410
+ declare function readTsconfigFileList(tsConfigFilePath: string): string[];
1261
1411
 
1412
+ /** The suffixes this adapter reads, JavaScript included. */
1413
+ declare const SOURCE_SUFFIXES: readonly [".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"];
1262
1414
  /**
1263
1415
  * A Project covering `rootDir`, for a codebase with no tsconfig to read.
1264
1416
  * Returns the project and the files it loaded.
@@ -1434,9 +1586,21 @@ declare function namedImportsOf(sourceFile: SourceFile, modules: readonly string
1434
1586
  declare function importedNamesOf(sourceFile: SourceFile, modules: readonly string[], options?: ImportScanOptions): Map<string, string>;
1435
1587
  /** The local spellings of default and namespace imports of these modules. */
1436
1588
  declare function importedRootsOf(sourceFile: SourceFile, modules: readonly string[], options?: ImportScanOptions): Set<string>;
1589
+ /**
1590
+ * The specifier, as written, of the import that binds this local name,
1591
+ * whether as a named, default or namespace import. Null when no import
1592
+ * in the file binds it.
1593
+ */
1594
+ declare function specifierImportedAs(sourceFile: SourceFile, local: string): string | null;
1437
1595
  /** Every import declaration in the file that names one of `modules`. */
1438
1596
  declare function importDeclarationsOf(sourceFile: SourceFile, modules: readonly string[], options?: ImportScanOptions): ImportDeclaration[];
1439
1597
 
1598
+ /**
1599
+ * The name a property of an object literal is written under, or null
1600
+ * for a spread, which has none, and for a computed key.
1601
+ */
1602
+ declare function propertyNameOf(property: Node): string | null;
1603
+
1440
1604
  /**
1441
1605
  * What a value at a discovery site turns out to be, whether it was
1442
1606
  * written out there or referred to by name.
@@ -1472,11 +1636,6 @@ declare function propertyValueOf(property: Node): Node | null;
1472
1636
  * arrives as a parameter, which nothing here can follow.
1473
1637
  */
1474
1638
  declare function functionValueOf(value: Node, resolution: ResolutionStore | undefined): FunctionRoot | null;
1475
- /**
1476
- * The name a property of an object literal is written under, or null
1477
- * for a spread, which has none.
1478
- */
1479
- declare function propertyNameOf(property: Node): string | null;
1480
1639
  /**
1481
1640
  * The function a property of an object literal is set to. A method
1482
1641
  * written into the literal is that function; a property set to a name
@@ -1866,6 +2025,39 @@ declare function createTsSubUnitContext(): TsSubUnitContext;
1866
2025
  * way twice.
1867
2026
  */
1868
2027
  declare function workspaceRootFor(anchor: string): string;
2028
+ /**
2029
+ * What a project calls itself.
2030
+ *
2031
+ * Its package.json name is what a person would say and what a sibling
2032
+ * package already imports it by. A project without one falls back to
2033
+ * the folder, which is at least what somebody typed.
2034
+ */
2035
+ declare function workspaceNameFor(root: string | undefined): string | null;
2036
+ /** A file as a summary records it: the project it is in, and its path from that project's root. */
2037
+ interface FilePlace {
2038
+ /** Absolute. */
2039
+ root: string;
2040
+ workspace: string | null;
2041
+ file: string;
2042
+ }
2043
+ /**
2044
+ * Where a file belongs when it is read as part of its own project: the
2045
+ * root an extract of that project measures from, the project's name, and
2046
+ * the file's path from that root.
2047
+ */
2048
+ declare function projectPlaceOf(file: string): FilePlace;
2049
+ /**
2050
+ * Where a file outside the run's root belongs, such as a sibling package
2051
+ * reached through a workspace link, or null for a file under the root.
2052
+ * The path the link leads to never appears, so every checkout agrees.
2053
+ */
2054
+ declare function placeOutsideRun(file: string, runRoot: string): FilePlace | null;
2055
+ /**
2056
+ * How a summary writes a path on disk that it mentions, such as an
2057
+ * import: its path from the run's root, or the other project's name and
2058
+ * the path from that project's root for a file outside the run.
2059
+ */
2060
+ declare function pathFromRun(file: string, runRoot: string): string;
1869
2061
 
1870
2062
  /** What a call writes out, and whether it was serialized as JSON first. */
1871
2063
  interface WrittenPayload {
@@ -1917,7 +2109,7 @@ declare function receiverTypesOf(node: Node): ReceiverType[];
1917
2109
  * that affects extraction output: IR shape, discovery semantics,
1918
2110
  * terminal classification, anything that would invalidate previously
1919
2111
  * cached summaries. `createAdapterStamp` (from `@suss/extractor`) folds
1920
- * it together with a hash of this adapter's own loaded code, so a
2112
+ * it together with a hash of the code this adapter loads, so a
1921
2113
  * rebuilt dev build invalidates the cache even when nobody remembered
1922
2114
  * to bump the constant. See that package's README for the full design.
1923
2115
  */
@@ -1982,4 +2174,4 @@ declare function climbSyntax(node: Node): Node;
1982
2174
  */
1983
2175
  declare function peelValue(node: Node): Node;
1984
2176
 
1985
- export { ADAPTER_VERSION, type Accessed, type CallAccountingEntry, type CallAccountingOutcome, type ClientCallSite, type ConfiguredCallContext, type ConfiguredCallRead, type ConfiguredCallSpec, type ContractReadResult, type DescentBarriers, type DiscoveredUnit, type EnvironmentNamers, type ExplainCallableOptions, type ExplainedResolution, type FoundTerminal, type FunctionRoot, GENERIC_TERMINALS, type ImportScanOptions, NO_BARRIERS, type ObservedStubCall, type RawBranchResult, type ReadNameOptions, type ReceiverType, type RefreshReport, ResolutionStore, type StubCallEvidence, type StubEvidenceOptions, TSCONFIG_NAMES, type TsAccessRecognizerContext, type TsDiscoveryContext, type TsInvocationRecognizerContext, type TsJsxAttributeLocation, type TsSubUnitContext, type TypeScriptAdapter, type TypeScriptAdapterConfig, TypeScriptWhySession, type WhySessionOptions, type WrittenPayload, accessContextFor, arrayLiteralOf, buildProjectHelperIndex, callOpsFor, climbSyntax, collectAncestorBranches, collectClientFieldAccesses, computeAdapterPacksDigest, couldNameAValue, createProjectWithoutTsconfig, createTsDiscoveryContext, createTsSubUnitContext, createTypeScriptAdapter, declarationsBehind, discoverUnits, exportedDeclarationsOf, extractCodeStructure, extractRawBranches, findEnclosingFunction, findNearestTsconfig, findTerminals, functionTargetOf, functionValueOf, hasBody, importDeclarationsOf, importedNamesOf, importedRootsOf, invocationContextFor, isDefaultedAt, isImportedFrom, methodDeclaredIn, namedImportsOf, numberValueOf, objectLiteralOf, parseConditionExpression, peelSyntax, peelValue, propertiesOf, propertyFunctionOf, propertyNameOf, propertyOf, propertyValueOf, readConfiguredCall, readContract, readContractForClientCall, readName, receiverTypesOf, resolveAliasedSymbol, resolveSubject, rootIdentifier, startsItsOwnScope, stringPropertyOf, stringValueOf, stubEvidence, stubEvidenceIn, symbolBehind, toFunctionRoot, workspaceRootFor, writtenNodeOf, writtenPayloadOf };
2177
+ export { ADAPTER_VERSION, type Accessed, type CallAccountingEntry, type CallAccountingOutcome, type ClientCallSite, type ConfiguredCallContext, type ConfiguredCallRead, type ConfiguredCallSpec, type ContractReadResult, type DescentBarriers, type DiscoveredUnit, type EnvironmentNamers, type ExplainCallableOptions, type ExplainedResolution, type FilePlace, type FoundTerminal, type FunctionRoot, GENERIC_TERMINALS, type ImportScanOptions, NO_BARRIERS, type ObservedStubCall, type RawBranchResult, type ReadNameOptions, type ReceiverType, type RefreshReport, ResolutionStore, SOURCE_SUFFIXES, type StubCallEvidence, type StubEvidenceOptions, TSCONFIG_NAMES, type TsAccessRecognizerContext, type TsDiscoveryContext, type TsInvocationRecognizerContext, type TsJsxAttributeLocation, type TsSubUnitContext, type TypeScriptAdapter, type TypeScriptAdapterConfig, TypeScriptWhySession, type WhySessionOptions, type WrittenPayload, accessContextFor, arrayLiteralOf, buildProjectHelperIndex, callOpsFor, climbSyntax, collectAncestorBranches, collectClientFieldAccesses, computeAdapterPacksDigest, couldNameAValue, createProjectWithoutTsconfig, createTsDiscoveryContext, createTsSubUnitContext, createTypeScriptAdapter, declarationsBehind, discoverUnits, exportedDeclarationsOf, extractCodeStructure, extractRawBranches, findEnclosingFunction, findNearestTsconfig, findTerminals, functionTargetOf, functionValueOf, hasBody, importDeclarationsOf, importedNamesOf, importedRootsOf, invocationContextFor, isDefaultedAt, isImportedFrom, methodDeclaredIn, namedImportsOf, numberValueOf, objectLiteralOf, parseConditionExpression, pathFromRun, peelSyntax, peelValue, placeOutsideRun, projectPlaceOf, propertiesOf, propertyFunctionOf, propertyNameOf, propertyOf, propertyValueOf, readConfiguredCall, readContract, readContractForClientCall, readName, readTsconfigFileList, receiverTypesOf, resolveAliasedSymbol, resolveSubject, rootIdentifier, specifierImportedAs, startsItsOwnScope, stringPropertyOf, stringValueOf, stubEvidence, stubEvidenceIn, symbolBehind, toFunctionRoot, workspaceNameFor, workspaceRootFor, writtenNodeOf, writtenPayloadOf };