From 3d2168d7f1670b43881a297d95b7985980743690 Mon Sep 17 00:00:00 2001 From: Tito Bouzout Date: Sun, 7 Sep 2025 11:14:47 -0300 Subject: [PATCH] fix "Maximum call stack size exceeded" on `resolveChildren`s `results.push.apply(results, result)` --- packages/solid/src/reactive/signal.ts | 12 +++++++++++- packages/solid/src/server/reactive.ts | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/solid/src/reactive/signal.ts b/packages/solid/src/reactive/signal.ts index abea5717f..49a5c5691 100644 --- a/packages/solid/src/reactive/signal.ts +++ b/packages/solid/src/reactive/signal.ts @@ -1746,7 +1746,17 @@ function resolveChildren(children: JSX.Element | Accessor): ResolvedChildre const results: any[] = []; for (let i = 0; i < children.length; i++) { const result = resolveChildren(children[i]); - Array.isArray(result) ? results.push.apply(results, result) : results.push(result); + if (Array.isArray(result)) { + if (result.length > 32768) { + for (let i = 0; i < result.length; i += 32768) { + results.push.apply(results, result.slice(i, Math.min(i + 32768, result.length))); + } + } else { + results.push.apply(results, result); + } + } else { + results.push(result); + } } return results; } diff --git a/packages/solid/src/server/reactive.ts b/packages/solid/src/server/reactive.ts index 5bdf28284..49b81b588 100644 --- a/packages/solid/src/server/reactive.ts +++ b/packages/solid/src/server/reactive.ts @@ -240,7 +240,17 @@ function resolveChildren(children: any): unknown { const results: any[] = []; for (let i = 0; i < children.length; i++) { const result = resolveChildren(children[i]); - Array.isArray(result) ? results.push.apply(results, result) : results.push(result); + if (Array.isArray(result)) { + if (result.length > 32768) { + for (let i = 0; i < result.length; i += 32768) { + results.push.apply(results, result.slice(i, Math.min(i + 32768, result.length))); + } + } else { + results.push.apply(results, result); + } + } else { + results.push(result); + } } return results; }