Skip to content

Commit

Permalink
Merge pull request #342 from marko-js/fix-complex-input
Browse files Browse the repository at this point in the history
fix: reduce recursion in complex input types
  • Loading branch information
rturnq authored Feb 4, 2025
2 parents b2b476a + 830fddd commit bfa09ff
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 14 deletions.
8 changes: 8 additions & 0 deletions .changeset/famous-cherries-clap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@marko/language-tools": patch
"@marko/language-server": patch
"@marko/type-check": patch
"marko-vscode": patch
---

Reduce recursion in complex input types to prevent excessive depth errors
29 changes: 15 additions & 14 deletions packages/language-tools/marko.internal.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -471,20 +471,21 @@ type ComponentEventHandlers<Component extends Marko.Component> = {
>]: Component[K] extends (...args: any) => any ? Component[K] : never;
};

type FlatScopes<Input extends object, Objects = Input> = Input[keyof Input &
(string | number)] extends infer Prop
? [0] extends [1 & Prop]
? unknown
: Prop extends (...args: any) => { [Marko._.scope]: infer Scope }
? unknown extends Scope
? never
: Scope
: Prop extends object
? Prop extends Extract<Objects, Prop>
? never
: FlatScopes<Prop, Objects | Prop>
: never
: unknown;
type FlatScopes<Input> = [0] extends [1 & Input]
? never
:
| (Input[("content" | "renderBody") & keyof Input] extends infer Prop
? Prop extends (...args: any[]) => { [Marko._.scope]: infer Scope }
? Scope
: never
: never)
| (Input[string & keyof Input] extends infer Prop
? Prop extends { [Symbol.iterator]: any }
? Prop extends readonly any[]
? never
: FlatScopes<Prop>
: never
: never);

type MergeScopes<Scopes> = {
[K in Scopes extends Scopes ? keyof Scopes : never]: Scopes extends Scopes
Expand Down

0 comments on commit bfa09ff

Please sign in to comment.