StackOverflow with `react-helmet`
- Dominant language
- Kotlin
- Stars
- 591
- Forks
- 40
- PR merge metrics
- No merged PRs in 30d
Description
### 🕗 Version
dukat version 0.5.8-rc.4
### 💻 Code or Package Name
`react-helmet`
### 🙁 Actual behavior
When I execute: `dukat ./node_modules/react-helmet/index.d.ts`
I get following error:
```
Exception in thread "main" java.lang.StackOverflowError
at java.base/java.util.LinkedHashMap.getOrDefault(LinkedHashMap.java:453)
at org.jetbrains.dukat.tsLowerings.TypeSpecifierLowering.spec(TypeAliasContext.kt:20)
at org.jetbrains.dukat.tsLowerings.TypeSpecifierLowering.lowerParameterValue(TypeAliasContext.kt:39)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerUnionTypeDeclaration(DeclarationLowering.kt:132)
at org.jetbrains.dukat.tsLowerings.TypeSpecifierLowering.lowerUnionTypeDeclaration(TypeAliasContext.kt:15)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerParameterValue(DeclarationLowering.kt:239)
at org.jetbrains.dukat.tsLowerings.TypeSpecifierLowering.lowerParameterValue(TypeAliasContext.kt:39)
at org.jetbrains.dukat.tsLowerings.TypeAliasContext.dereference(TypeAliasContext.kt:65)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.resolveType(resolveTypeAliases.kt:46)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.unroll(resolveTypeAliases.kt:56)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.unroll(resolveTypeAliases.kt:56)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerUnionTypeDeclaration(resolveTypeAliases.kt:65)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerParameterValue(DeclarationLowering.kt:239)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerParameterValue(resolveTypeAliases.kt:50)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerTypeDeclaration(DeclarationLowering.kt:144)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerTypeDeclaration(resolveTypeAliases.kt:44)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerParameterValue(DeclarationLowering.kt:237)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerParameterValue(resolveTypeAliases.kt:50)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerUnionTypeDeclaration(DeclarationLowering.kt:132)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerUnionTypeDeclaration(resolveTypeAliases.kt:65)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerParameterValue(DeclarationLowering.kt:239)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerParameterValue(resolveTypeAliases.kt:50)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerTypeDeclaration(DeclarationLowering.kt:144)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerTypeDeclaration(resolveTypeAliases.kt:44)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerParameterValue(DeclarationLowering.kt:237)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerParameterValue(resolveTypeAliases.kt:50)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerUnionTypeDeclaration(DeclarationLowering.kt:132)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerUnionTypeDeclaration(resolveTypeAliases.kt:65)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerParameterValue(DeclarationLowering.kt:239)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerParameterValue(resolveTypeAliases.kt:50)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerTypeDeclaration(DeclarationLowering.kt:144)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerTypeDeclaration(resolveTypeAliases.kt:44)
at org.jetbrains.dukat.tsLowerings.DeclarationLowering$DefaultImpls.lowerParameterValue(DeclarationLowering.kt:237)
at org.jetbrains.dukat.tsLowerings.ResolveTypeAliasesLowering.lowerParameterValue(resolveTypeAliases.kt:50)
```
### 🙂 Expected behavior
That the command does what it's supposed to do.
### Investigation
I've investigated it further. The problem seems to be related to this type: `JSX.IntrinsicElements`
This is part of the typescript library. Maybe there are more problems with the indirekt use of the typescript library?
It seams there is a second problem:
All the `React.` usages cause the same stackoverflow error.
If you remove all dependencies on `JSX.IntrinsicElements` and `React` everything works fine.
If someone knows how to make a own wrapper for this, please tell me. We need this for our project.
## Update 1
Quick fix for small packages: Copy the index.d.ts to a new destination remove the import `import * as React from "react";` . Run dukat and it should generate some code. Put the generated code into you project eg. `wrappers`. Now you have a direction for your own wrapper. There are multiple things to change before use but more than nothing.
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the failure with `dukat ./node_modules/react-helmet/index.d.ts`, then trace the stack through `TypeSpecifierLowering` and `ResolveTypeAliasesLowering`, especially `dereference` and `unroll`. Use the `JSX.IntrinsicElements` and `React` references as the failing cases; done means the command completes without StackOverflowError for this package.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- kotlin, react, typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100