diff --git a/src/utils/ast/ast.traverse.ts b/src/utils/ast/ast.traverse.ts index 23b519d..ba87ea3 100644 --- a/src/utils/ast/ast.traverse.ts +++ b/src/utils/ast/ast.traverse.ts @@ -66,7 +66,14 @@ export const astTraverse = ({ logger({ time, type: 'push', queue: 'callstack', ast: callExpression }); if (isConsoleExpression(callExpression)) { // console.log, console.error, console.warn, console.info - logger({ time, type: 'push', queue: 'console', ast: callExpression }); + if (callExpression.arguments.length > 1) + throw new Error('Unsupported console argument'); + logger({ + time, + type: 'push', + queue: 'console', + ast: callExpression.arguments[0], + }); } else if (isPromiseCallbackExpression(callExpression)) { // promise.resolve.then() addToQueue({ type: 'microtask', ast: callExpression.arguments[0] }); diff --git a/src/utils/calculator/calculator.ts b/src/utils/calculator/calculator.ts index 9ff6181..ffc9bfb 100644 --- a/src/utils/calculator/calculator.ts +++ b/src/utils/calculator/calculator.ts @@ -124,8 +124,9 @@ export class Calculator { render: (time) => { this.lastRender = time; this.log({ time, type: 'render' }); - while (this.rafCallbacks.length > 0) { - // TODO: exclude infinite loop, when rAF is invoked inside rAF + const count = this.rafCallbacks.length; + // exclude inner callbacks execution in the same step + for (let i = 0; i < count; i++) { const task = this.rafCallbacks.shift(); if (!task) throw new Error('No raf callback found'); this.log({ time, type: 'shift', queue: 'rafCallback', ast: task });