diff --git a/packages/compiler/src/jit/compiler.ts b/packages/compiler/src/jit/compiler.ts index 409b3a49b1..18ddbe5686 100644 --- a/packages/compiler/src/jit/compiler.ts +++ b/packages/compiler/src/jit/compiler.ts @@ -335,14 +335,22 @@ function assertComponent(meta: CompileDirectiveMetadata) { } } -function flattenSummaries(fn: () => any[], out: CompileTypeSummary[] = []): CompileTypeSummary[] { - fn().forEach((entry) => { +function flattenSummaries( + fn: () => any[], out: CompileTypeSummary[] = [], + seen = new Set<() => any[]>()): CompileTypeSummary[] { + if (seen.has(fn)) { + return out; + } + seen.add(fn); + const summaries = fn(); + for (let i = 0; i < summaries.length; i++) { + const entry = summaries[i]; if (typeof entry === 'function') { - flattenSummaries(entry, out); + flattenSummaries(entry, out, seen); } else { out.push(entry); } - }); + } return out; }