[api-extractor] Source map segment without a source crashes SourceMapper with "Target is a folder, not a file"
Les mainteneurs répondent en général sous 1 jour
É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
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
- 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}}}
}
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
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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/rushstack
-
[rush-serve-plugin] The auto-picked port never reaches the port parameter: `_value` is ignored since ts-command-line uses `#value`Peut-être pris @b84330808 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
[rush] Upgrade the pnpm-sync-lib dependency to 0.3.5.Peut-être pris @martinnaj l’a pris il y a 21 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
microsoft/rushstack#5971 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de microsoft/rushstack
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
paperclipai/paperclip#17151 ·
Les mainteneurs répondent en général sous 1 jour
-
needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
AgoraIO-Extensions/agent-infra#3159 ·
Les mainteneurs répondent en général sous 1 jour
-
blocklist addition
Difficulté 1/5 Moins d'une heure Accessibilité débutants 66/100
MetaMask/eth-phishing-detect#304596 ·
Les mainteneurs répondent en général sous 1 jour
-
friction
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
kentcdodds/kody#4142 ·
-
[Bug] Statistics | Task statistics are always empty on MikroORM with MySQL or SQLitePeut-être pris @NdekoCode l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
ever-co/ever-gauzy#11214 ·
Les mainteneurs répondent en général sous 1 jour