[7.1 API] Equivalent of `BuilderProgram.getAllDependencies` / batched module resolution
Los mantenedores suelen responder en 1 día
@jackeddisciple ya está trabajando en esto.
Desde el 23/10/2026.
- #64942 de @jackeddisciple — abierto
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- api
Línea de trabajo
Start by reading the Program API changes in #64247 and the builder/watch/solution-builder scope discussion in #64709, then compare the batched methods in #63904. The issue proposes either a server-side dependency graph method or batched module resolution, without choosing between them. Done means an API direction is agreed on and it addresses the per-import IPC cost and project-reference redirects described here.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
🔍 Search Terms
getAllDependencies, dependency graph, getResolvedModule, batched, 7.1 API, typescript/sync, typescript/async
✅ Viability Checklist
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals
⭐ Suggestion
In TypeScript ≤ 6, BuilderProgram.getAllDependencies(sourceFile) returned the transitive set of files a given source file depends on (module imports, /// <reference path>, type reference directives, and project-reference redirects).
With the 7.1 beta, builder/watch/solution-builder APIs are explicitly out of scope for stable (#64709), so there is no equivalent. The building blocks are mostly present (program.getSourceFileNames(), program.getSourceFile(), and the new program.getResolvedModule() / getResolvedTypeReferenceDirective() from #64247), but reconstructing the dependency graph requires one IPC round-trip per import per file, which gets expensive quickly on larger projects.
I'd like to request one (or both) of the following:
- A dependency-graph method on
Program— e.g.program.getAllDependencies(sourceFile)orprogram.getDependencies(sourceFile)returning the direct/transitive dependency file names, computed server-side. - A batched resolution method — e.g.
program.getResolvedModules(sourceFile)returning all resolutions for a file in a single call, similar in spirit to the batched methods added in #63904. This would let consumers build the graph themselves with one call per file instead of one call per import.
Option 1 is the ergonomic fit for the old API; option 2 is a smaller primitive and can be used independently.
📃 Motivating Example
I use getAllDependencies in StrykerJS to identify inrelated files and use that to implement mutant grouping (a roughly 50% performance improvement over single mutant validation). Migrating to 7.1 currently means re-implementing the traversal client-side.
Current client-side reconstruction (7.1 beta) (using AI)
import { API } from "typescript/sync";
function getAllDependencies(program: Program, rootFileName: string) {
const seen = new Set<string>();
const queue = [rootFileName];
while (queue.length) {
const fileName = queue.pop()!;
if (seen.has(fileName)) continue;
seen.add(fileName);
const sf = program.getSourceFile(fileName);
if (!sf) continue;
// One round-trip per import
for (const imp of sf.imports) {
const r = program.getResolvedModule(sf, imp.text /*, mode */);
if (r?.resolvedModule) queue.push(r.resolvedModule.resolvedFileName);
}
// One round-trip per type reference directive
for (const ref of sf.typeReferenceDirectives) {
const r = program.getResolvedTypeReferenceDirective(sf, ref.fileName);
if (r?.resolvedTypeReferenceDirective?.resolvedFileName) {
queue.push(r.resolvedTypeReferenceDirective.resolvedFileName);
}
}
for (const ref of sf.referencedFiles) {
queue.push(resolve(dirname(fileName), ref.fileName));
}
}
seen.delete(rootFileName);
return [...seen];
}
Issues with this approach:
- Round-trip count scales with total import count, not file count.
- Project-reference output redirects (handled by the old builder method) have to be reimplemented manually.
- Resolution mode (
ESNextvsCommonJS) must be derived client-side per import.
💻 Use Cases
- What do you want to use this for?
Generate a list of unrelated files so we can validate multiple mutants in a single type-check run.
- What shortcomings exist with current approaches?
Per-import IPC calls make the client-side traversal slow on large graphs, and project-reference redirects are easy to get subtly wrong.
- What workarounds are you using in the meantime?
The reconstruction above.
- Lenguaje dominante
- Go
- Estrellas
- 112k
- Forks
- 15.4k
- Merge medio
- 2 d 21 h
- PR fusionados (30 d)
- 126
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de microsoft/TypeScript
-
Won't Fix
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
microsoft/TypeScript#65107 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Native API: formatDiagnosticsWithColorAndContext drops related information without a file locationPosiblemente ocupada @timurzvural la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
microsoft/TypeScript#65087 ·
Los mantenedores suelen responder en 1 día
-
TS7 LSP: documentHighlight returns nothing when the file path contains '@'Quizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. AbiertoBug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
microsoft/TypeScript#64758 ·
Los mantenedores suelen responder en 1 día
-
Language server (tsc --lsp) exits with code 1 after `shutdown` and `exit`Posiblemente ocupada @rajnish-verma-22172 la tomó hace 12 días. AbiertoBug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
microsoft/TypeScript#64742 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Class names `eval` and `arguments` are not reported as invalid strict mode bindingsPosiblemente ocupada @dmety la tomó hace 26 días. AbiertoBug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
microsoft/TypeScript#64661 ·
Los mantenedores suelen responder en 1 día
Todos los issues de microsoft/TypeScript
Issues similares
-
bug good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
[mesheryctl] design delete fails when passing file or URL as positional argumentPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertocomponent/mesheryctl kind/bug language/go
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
meshery/meshery#22772 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
backend security size:S
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
limitlessprojects/Go-Hybrid#3342 ·
Los mantenedores suelen responder en 1 día
-
status/ready type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
buildpacks/pack#2733 ·
Los mantenedores suelen responder en 1 día