UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

35 lines (34 loc) 1.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.catchInfiniteLoop = catchInfiniteLoop; const assert_js_1 = require("./assert.js"); const trackers = {}; function catchInfiniteLoop(functionName, maxNumberOfCalls = 100, withinSeconds = 5) { // Init const now = new Date(); let tracker = (trackers[functionName] ?? (trackers[functionName] = createTracker(now))); // Reset const elapsedTime = now.getTime() - tracker.start.getTime(); if (elapsedTime > withinSeconds * 1000) tracker = trackers[functionName] = createTracker(now); // Count tracker.count++; // Error const msg = `[Infinite Loop] Rendering ${tracker.count} times within ${withinSeconds} seconds [${functionName}]`; if (tracker.count > maxNumberOfCalls) { (0, assert_js_1.assertUsage)(false, msg); } // Warning, at 50% threshold if (!tracker.warned && tracker.count > maxNumberOfCalls * 0.5) { // Warning is shown upon 10 calls a second, on average during 5 seconds, given the default parameters (0, assert_js_1.assertWarning)(false, msg, { onlyOnce: false, showStackTrace: true }); tracker.warned = true; } } function createTracker(now) { const tracker = { count: 0, start: now, }; return tracker; }