feat(metadata): support advanced generics using recursion#763
feat(metadata): support advanced generics using recursion#763moshams272 wants to merge 7 commits intonodejs:mainfrom
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
PR SummaryMedium Risk Overview The new parser adds support for nested generics, function return types ( Reviewed by Cursor Bugbot for commit e746538. Bugbot is set up for automated code reviews on this repo. Configure here. |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #763 +/- ##
==========================================
- Coverage 78.43% 78.32% -0.12%
==========================================
Files 157 158 +1
Lines 13962 14047 +85
Branches 1152 1169 +17
==========================================
+ Hits 10951 11002 +51
- Misses 3006 3035 +29
- Partials 5 10 +5 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
- Enforce exact TS operator precedence: Arrow functions (=>) before Unions (|) and Intersections (&). - Implement stripOuterParentheses to unwrap redundant outer groups and prevent parser depth-blindness. - Fix array loss: safely preserve [] notation for both base types and generics. - Correctly handle higher-order functions by re-joining subsequent arrow operator segments.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit d343adb. Configure here.
| const result = transformType(cleanType); | ||
| if (cleanType.length && result) { | ||
| return `[\`<${cleanType}>\`](${result})${isArray ? '[]' : ''}`; | ||
| } |
There was a problem hiding this comment.
Array type link text formatting changed from old behavior
Low Severity
For plain array types like string[], the old code produced link text <string[]> (with [] inside the link), but the new base-case logic uses cleanType (with [] stripped) in the link text and appends [] outside. This changes rendered documentation output from [`<string[]>`](URL) to [`<string>`](URL)[], making the array brackets unlinked. The old code used trimmedPiece (which preserved []) in the Markdown link template.
Reviewed by Cursor Bugbot for commit d343adb. Configure here.
There was a problem hiding this comment.
I think <string>[] is better than <string[]> as the link is just on word string!


Description
This PR uses the Recursive approach instead of using Regex that just covered the basic generic and can't handle:
Transformer<T, Awaitable<U>>(str: MyType) => Promise<T>string & number | booleanThe new implementation uses a top-down Recursive approach, breaking down types layer by layer starting from the weakest operators to the strongest.
Validation
transformers.test.mjsnode --run testand verified that all test cases (old and new) passed successfully.Related Issues
This PR acts as an extension to #666. While #666 solved the basic mapping, this implementation introduces a recursive parser to handle more complex nested types.
Check List
node --run testand all tests passed.node --run format&node --run lint.