Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

[api-extractor] Source map segment without a source crashes SourceMapper with "Target is a folder, not a file"

Ouverte Adaptée aux débutants
#6,156 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@joshuaellis y travaille déjà.

Depuis le 20/10/2026.

  • #6157 par @joshuaellis — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
node.js, typescript
Domaine
api, backend

Piste de recherche

Commencez dans apps/api-extractor/src/collector/SourceMapper.ts, en particulier dans #getMappedSourceLocation, et suivez la manière dont sont traités les segments de source map sans source. L’issue fournit un exemple minimal de reproduction avec .d.ts.map et indique le fallback attendu : utiliser l’emplacement de la déclaration d’origine lorsqu’il n’y a pas de source associée. Exécutez la reproduction avec API Extractor 7.59.4 ; elle est terminée lorsqu’elle s’achève et signale ae-missing-release-tag pour foo.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Summary

API Extractor crashes when a .d.ts.map contains a mapping segment that has only a generated column and no source. The source map spec allows these segments, and rolldown 1.2.14 now emits them in declaration maps (rolldown/rolldown#11170). We hit this upgrading rolldown in https://github.com/sanity-io/sdk/pull/1445.

Repro steps

  1. Create these files:

package.json

{"name":"ae-repro","version":"1.0.0","types":"dist/index.d.ts"}

src/index.ts

export const foo: string = "foo"

dist/index.d.ts

export declare const foo: string

dist/index.d.ts.map (the second segment, qB, has one field: a generated column with no source)

{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"AAAA,qB"}

api-extractor.json

{
  "projectFolder": ".",
  "mainEntryPointFilePath": "<projectFolder>/dist/index.d.ts",
  "apiReport": {"enabled": true, "reportFolder": "<projectFolder>/etc/"},
  "docModel": {"enabled": false},
  "dtsRollup": {"enabled": false},
  "compiler": {"overrideTsconfig": {"compilerOptions": {"strict": true}}}
}
  1. mkdir etc && npx @microsoft/[email protected] run --local

Expected result: The run completes and reports ae-missing-release-tag for foo. It does when the mappings are AAAA,qBAAqB.

Actual result:

ERROR: Target is a folder, not a file: undefined
Target is a folder, not a file: undefined
EISDIR: illegal operation on a directory, read
    at Object.readFileSync (node:fs)
    at FileSystem.readFile (@rushstack/node-core-library/src/FileSystem.ts:1066:12)
    at SourceMapper.#getMappedSourceLocation (@microsoft/api-extractor/src/collector/SourceMapper.ts:130:56)

Details

SourceMapper.#getMappedSourceLocation takes the nearest mapping item and runs path.resolve(path.dirname(sourceFilePath), nearestMappingItem.source). For a source-less segment source is empty, so the path resolves to the .d.ts file's folder. FileSystem.exists returns true for it, and the read fails.

Treating a mapping item with no source as "no mapping" would fix it, so the original .d.ts location is used.

Standard questions

Question Answer
@microsoft/api-extractor version? 7.59.4
Operating system? Mac (also Linux in GitHub Actions)
API Extractor scenario? reporting (.api.md)
Would you consider contributing a PR? No
TypeScript compiler version? 5.9.3 (bundled); also 6.0.3 in our project
Node.js version (node -v)? 24.12.0 (also 22 in CI)
Langage dominant
TypeScript
Étoiles
6.5k
Forks
710
Merge moyen
1 j 23 h
PR mergées (30 j)
36

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

  • Aucun Dockerfile ni fichier Docker Compose
  • Propose un modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/rushstack

Toutes les issues de microsoft/rushstack

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.