function createRenderStep(runNextFrame) { var toRun = []; var toRunNextFrame = []; var numToRun = 0; var isProcessing = false; var toKeepAlive = new WeakSet(); var step = { schedule: function (callback, keepAlive, immediate) { if (keepAlive === void 0) { keepAlive = false; } if (immediate === void 0) { immediate = false; } var addToCurrentFrame = immediate && isProcessing; var buffer = addToCurrentFrame ? toRun : toRunNextFrame; if (keepAlive) toKeepAlive.add(callback); if (buffer.indexOf(callback) === -1) { buffer.push(callback); if (addToCurrentFrame && isProcessing) numToRun = toRun.length; } return callback; }, cancel: function (callback) { var index = toRunNextFrame.indexOf(callback); if (index !== -1) toRunNextFrame.splice(index, 1); toKeepAlive.delete(callback); }, process: function (frameData) { var _a; isProcessing = true; _a = [toRunNextFrame, toRun], toRun = _a[0], toRunNextFrame = _a[1]; toRunNextFrame.length = 0; numToRun = toRun.length; if (numToRun) { for (var i = 0; i < numToRun; i++) { var callback = toRun[i]; callback(frameData); if (toKeepAlive.has(callback)) { step.schedule(callback); runNextFrame(); } } } isProcessing = false; }, }; return step; } export { createRenderStep };