Kotlin / Kotlin/dukat

StackOverflow with `react-helmet`

Open
#482 2 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.