scheduler
Advanced tools
| /** @license React v0.0.0-fa1e8df11 | ||
| * scheduler-unstable_mock.development.js | ||
| * | ||
| * Copyright (c) Facebook, Inc. and its affiliates. | ||
| * | ||
| * This source code is licensed under the MIT license found in the | ||
| * LICENSE file in the root directory of this source tree. | ||
| */ | ||
| 'use strict'; | ||
| if (process.env.NODE_ENV !== "production") { | ||
| (function() { | ||
| 'use strict'; | ||
| Object.defineProperty(exports, '__esModule', { value: true }); | ||
| var enableSchedulerDebugging = false; | ||
| var currentTime = 0; | ||
| var scheduledCallback = null; | ||
| var scheduledCallbackExpiration = -1; | ||
| var yieldedValues = null; | ||
| var expectedNumberOfYields = -1; | ||
| var didStop = false; | ||
| var isFlushing = false; | ||
| function requestHostCallback(callback, expiration) { | ||
| scheduledCallback = callback; | ||
| scheduledCallbackExpiration = expiration; | ||
| } | ||
| function cancelHostCallback() { | ||
| scheduledCallback = null; | ||
| scheduledCallbackExpiration = -1; | ||
| } | ||
| function shouldYieldToHost() { | ||
| if (expectedNumberOfYields !== -1 && yieldedValues !== null && yieldedValues.length >= expectedNumberOfYields || scheduledCallbackExpiration !== -1 && scheduledCallbackExpiration <= currentTime) { | ||
| // We yielded at least as many values as expected. Stop flushing. | ||
| didStop = true; | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
| function getCurrentTime() { | ||
| return currentTime; | ||
| } | ||
| function forceFrameRate() { | ||
| // No-op | ||
| } | ||
| // Should only be used via an assertion helper that inspects the yielded values. | ||
| function unstable_flushNumberOfYields(count) { | ||
| if (isFlushing) { | ||
| throw new Error('Already flushing work.'); | ||
| } | ||
| expectedNumberOfYields = count; | ||
| isFlushing = true; | ||
| try { | ||
| while (scheduledCallback !== null && !didStop) { | ||
| var cb = scheduledCallback; | ||
| scheduledCallback = null; | ||
| var didTimeout = scheduledCallbackExpiration !== -1 && scheduledCallbackExpiration <= currentTime; | ||
| cb(didTimeout); | ||
| } | ||
| } finally { | ||
| expectedNumberOfYields = -1; | ||
| didStop = false; | ||
| isFlushing = false; | ||
| } | ||
| } | ||
| function unstable_flushExpired() { | ||
| if (isFlushing) { | ||
| throw new Error('Already flushing work.'); | ||
| } | ||
| if (scheduledCallback !== null) { | ||
| var cb = scheduledCallback; | ||
| scheduledCallback = null; | ||
| isFlushing = true; | ||
| try { | ||
| cb(true); | ||
| } finally { | ||
| isFlushing = false; | ||
| } | ||
| } | ||
| } | ||
| function unstable_flushWithoutYielding() { | ||
| if (isFlushing) { | ||
| throw new Error('Already flushing work.'); | ||
| } | ||
| isFlushing = true; | ||
| try { | ||
| if (scheduledCallback === null) { | ||
| return false; | ||
| } | ||
| while (scheduledCallback !== null) { | ||
| var cb = scheduledCallback; | ||
| scheduledCallback = null; | ||
| var didTimeout = scheduledCallbackExpiration !== -1 && scheduledCallbackExpiration <= currentTime; | ||
| cb(didTimeout); | ||
| } | ||
| return true; | ||
| } finally { | ||
| expectedNumberOfYields = -1; | ||
| didStop = false; | ||
| isFlushing = false; | ||
| } | ||
| } | ||
| function unstable_clearYields() { | ||
| if (yieldedValues === null) { | ||
| return []; | ||
| } | ||
| var values = yieldedValues; | ||
| yieldedValues = null; | ||
| return values; | ||
| } | ||
| function flushAll() { | ||
| if (yieldedValues !== null) { | ||
| throw new Error('Log is not empty. Assert on the log of yielded values before ' + 'flushing additional work.'); | ||
| } | ||
| unstable_flushWithoutYielding(); | ||
| if (yieldedValues !== null) { | ||
| throw new Error('While flushing work, something yielded a value. Use an ' + 'assertion helper to assert on the log of yielded values, e.g. ' + 'expect(Scheduler).toFlushAndYield([...])'); | ||
| } | ||
| } | ||
| function yieldValue(value) { | ||
| if (yieldedValues === null) { | ||
| yieldedValues = [value]; | ||
| } else { | ||
| yieldedValues.push(value); | ||
| } | ||
| } | ||
| function advanceTime(ms) { | ||
| currentTime += ms; | ||
| // If the host callback timed out, flush the expired work. | ||
| if (!isFlushing && scheduledCallbackExpiration !== -1 && scheduledCallbackExpiration <= currentTime) { | ||
| unstable_flushExpired(); | ||
| } | ||
| } | ||
| /* eslint-disable no-var */ | ||
| // TODO: Use symbols? | ||
| var ImmediatePriority = 1; | ||
| var UserBlockingPriority = 2; | ||
| var NormalPriority = 3; | ||
| var LowPriority = 4; | ||
| var IdlePriority = 5; | ||
| // Max 31 bit integer. The max integer size in V8 for 32-bit systems. | ||
| // Math.pow(2, 30) - 1 | ||
| // 0b111111111111111111111111111111 | ||
| var maxSigned31BitInt = 1073741823; | ||
| // Times out immediately | ||
| var IMMEDIATE_PRIORITY_TIMEOUT = -1; | ||
| // Eventually times out | ||
| var USER_BLOCKING_PRIORITY = 250; | ||
| var NORMAL_PRIORITY_TIMEOUT = 5000; | ||
| var LOW_PRIORITY_TIMEOUT = 10000; | ||
| // Never times out | ||
| var IDLE_PRIORITY = maxSigned31BitInt; | ||
| // Callbacks are stored as a circular, doubly linked list. | ||
| var firstCallbackNode = null; | ||
| var currentHostCallbackDidTimeout = false; | ||
| // Pausing the scheduler is useful for debugging. | ||
| var isSchedulerPaused = false; | ||
| var currentPriorityLevel = NormalPriority; | ||
| var currentEventStartTime = -1; | ||
| var currentExpirationTime = -1; | ||
| // This is set while performing work, to prevent re-entrancy. | ||
| var isPerformingWork = false; | ||
| var isHostCallbackScheduled = false; | ||
| function scheduleHostCallbackIfNeeded() { | ||
| if (isPerformingWork) { | ||
| // Don't schedule work yet; wait until the next time we yield. | ||
| return; | ||
| } | ||
| if (firstCallbackNode !== null) { | ||
| // Schedule the host callback using the earliest expiration in the list. | ||
| var expirationTime = firstCallbackNode.expirationTime; | ||
| if (isHostCallbackScheduled) { | ||
| // Cancel the existing host callback. | ||
| cancelHostCallback(); | ||
| } else { | ||
| isHostCallbackScheduled = true; | ||
| } | ||
| requestHostCallback(flushWork, expirationTime); | ||
| } | ||
| } | ||
| function flushFirstCallback() { | ||
| var currentlyFlushingCallback = firstCallbackNode; | ||
| // Remove the node from the list before calling the callback. That way the | ||
| // list is in a consistent state even if the callback throws. | ||
| var next = firstCallbackNode.next; | ||
| if (firstCallbackNode === next) { | ||
| // This is the last callback in the list. | ||
| firstCallbackNode = null; | ||
| next = null; | ||
| } else { | ||
| var lastCallbackNode = firstCallbackNode.previous; | ||
| firstCallbackNode = lastCallbackNode.next = next; | ||
| next.previous = lastCallbackNode; | ||
| } | ||
| currentlyFlushingCallback.next = currentlyFlushingCallback.previous = null; | ||
| // Now it's safe to call the callback. | ||
| var callback = currentlyFlushingCallback.callback; | ||
| var expirationTime = currentlyFlushingCallback.expirationTime; | ||
| var priorityLevel = currentlyFlushingCallback.priorityLevel; | ||
| var previousPriorityLevel = currentPriorityLevel; | ||
| var previousExpirationTime = currentExpirationTime; | ||
| currentPriorityLevel = priorityLevel; | ||
| currentExpirationTime = expirationTime; | ||
| var continuationCallback; | ||
| try { | ||
| var didUserCallbackTimeout = currentHostCallbackDidTimeout || | ||
| // Immediate priority callbacks are always called as if they timed out | ||
| priorityLevel === ImmediatePriority; | ||
| continuationCallback = callback(didUserCallbackTimeout); | ||
| } catch (error) { | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentExpirationTime = previousExpirationTime; | ||
| } | ||
| // A callback may return a continuation. The continuation should be scheduled | ||
| // with the same priority and expiration as the just-finished callback. | ||
| if (typeof continuationCallback === 'function') { | ||
| var continuationNode = { | ||
| callback: continuationCallback, | ||
| priorityLevel: priorityLevel, | ||
| expirationTime: expirationTime, | ||
| next: null, | ||
| previous: null | ||
| }; | ||
| // Insert the new callback into the list, sorted by its expiration. This is | ||
| // almost the same as the code in `scheduleCallback`, except the callback | ||
| // is inserted into the list *before* callbacks of equal expiration instead | ||
| // of after. | ||
| if (firstCallbackNode === null) { | ||
| // This is the first callback in the list. | ||
| firstCallbackNode = continuationNode.next = continuationNode.previous = continuationNode; | ||
| } else { | ||
| var nextAfterContinuation = null; | ||
| var node = firstCallbackNode; | ||
| do { | ||
| if (node.expirationTime >= expirationTime) { | ||
| // This callback expires at or after the continuation. We will insert | ||
| // the continuation *before* this callback. | ||
| nextAfterContinuation = node; | ||
| break; | ||
| } | ||
| node = node.next; | ||
| } while (node !== firstCallbackNode); | ||
| if (nextAfterContinuation === null) { | ||
| // No equal or lower priority callback was found, which means the new | ||
| // callback is the lowest priority callback in the list. | ||
| nextAfterContinuation = firstCallbackNode; | ||
| } else if (nextAfterContinuation === firstCallbackNode) { | ||
| // The new callback is the highest priority callback in the list. | ||
| firstCallbackNode = continuationNode; | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
| var previous = nextAfterContinuation.previous; | ||
| previous.next = nextAfterContinuation.previous = continuationNode; | ||
| continuationNode.next = nextAfterContinuation; | ||
| continuationNode.previous = previous; | ||
| } | ||
| } | ||
| } | ||
| function flushWork(didUserCallbackTimeout) { | ||
| // Exit right away if we're currently paused | ||
| if (enableSchedulerDebugging && isSchedulerPaused) { | ||
| return; | ||
| } | ||
| // We'll need a new host callback the next time work is scheduled. | ||
| isHostCallbackScheduled = false; | ||
| isPerformingWork = true; | ||
| var previousDidTimeout = currentHostCallbackDidTimeout; | ||
| currentHostCallbackDidTimeout = didUserCallbackTimeout; | ||
| try { | ||
| if (didUserCallbackTimeout) { | ||
| // Flush all the expired callbacks without yielding. | ||
| while (firstCallbackNode !== null && !(enableSchedulerDebugging && isSchedulerPaused)) { | ||
| // TODO Wrap in feature flag | ||
| // Read the current time. Flush all the callbacks that expire at or | ||
| // earlier than that time. Then read the current time again and repeat. | ||
| // This optimizes for as few performance.now calls as possible. | ||
| var currentTime = getCurrentTime(); | ||
| if (firstCallbackNode.expirationTime <= currentTime) { | ||
| do { | ||
| flushFirstCallback(); | ||
| } while (firstCallbackNode !== null && firstCallbackNode.expirationTime <= currentTime && !(enableSchedulerDebugging && isSchedulerPaused)); | ||
| continue; | ||
| } | ||
| break; | ||
| } | ||
| } else { | ||
| // Keep flushing callbacks until we run out of time in the frame. | ||
| if (firstCallbackNode !== null) { | ||
| do { | ||
| if (enableSchedulerDebugging && isSchedulerPaused) { | ||
| break; | ||
| } | ||
| flushFirstCallback(); | ||
| } while (firstCallbackNode !== null && !shouldYieldToHost()); | ||
| } | ||
| } | ||
| } finally { | ||
| isPerformingWork = false; | ||
| currentHostCallbackDidTimeout = previousDidTimeout; | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
| } | ||
| function unstable_runWithPriority(priorityLevel, eventHandler) { | ||
| switch (priorityLevel) { | ||
| case ImmediatePriority: | ||
| case UserBlockingPriority: | ||
| case NormalPriority: | ||
| case LowPriority: | ||
| case IdlePriority: | ||
| break; | ||
| default: | ||
| priorityLevel = NormalPriority; | ||
| } | ||
| var previousPriorityLevel = currentPriorityLevel; | ||
| var previousEventStartTime = currentEventStartTime; | ||
| currentPriorityLevel = priorityLevel; | ||
| currentEventStartTime = getCurrentTime(); | ||
| try { | ||
| return eventHandler(); | ||
| } catch (error) { | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentEventStartTime = previousEventStartTime; | ||
| } | ||
| } | ||
| function unstable_next(eventHandler) { | ||
| var priorityLevel = void 0; | ||
| switch (currentPriorityLevel) { | ||
| case ImmediatePriority: | ||
| case UserBlockingPriority: | ||
| case NormalPriority: | ||
| // Shift down to normal priority | ||
| priorityLevel = NormalPriority; | ||
| break; | ||
| default: | ||
| // Anything lower than normal priority should remain at the current level. | ||
| priorityLevel = currentPriorityLevel; | ||
| break; | ||
| } | ||
| var previousPriorityLevel = currentPriorityLevel; | ||
| var previousEventStartTime = currentEventStartTime; | ||
| currentPriorityLevel = priorityLevel; | ||
| currentEventStartTime = getCurrentTime(); | ||
| try { | ||
| return eventHandler(); | ||
| } catch (error) { | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentEventStartTime = previousEventStartTime; | ||
| } | ||
| } | ||
| function unstable_wrapCallback(callback) { | ||
| var parentPriorityLevel = currentPriorityLevel; | ||
| return function () { | ||
| // This is a fork of runWithPriority, inlined for performance. | ||
| var previousPriorityLevel = currentPriorityLevel; | ||
| var previousEventStartTime = currentEventStartTime; | ||
| currentPriorityLevel = parentPriorityLevel; | ||
| currentEventStartTime = getCurrentTime(); | ||
| try { | ||
| return callback.apply(this, arguments); | ||
| } catch (error) { | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentEventStartTime = previousEventStartTime; | ||
| } | ||
| }; | ||
| } | ||
| function unstable_scheduleCallback(priorityLevel, callback, deprecated_options) { | ||
| var startTime = currentEventStartTime !== -1 ? currentEventStartTime : getCurrentTime(); | ||
| var expirationTime; | ||
| if (typeof deprecated_options === 'object' && deprecated_options !== null && typeof deprecated_options.timeout === 'number') { | ||
| // FIXME: Remove this branch once we lift expiration times out of React. | ||
| expirationTime = startTime + deprecated_options.timeout; | ||
| } else { | ||
| switch (priorityLevel) { | ||
| case ImmediatePriority: | ||
| expirationTime = startTime + IMMEDIATE_PRIORITY_TIMEOUT; | ||
| break; | ||
| case UserBlockingPriority: | ||
| expirationTime = startTime + USER_BLOCKING_PRIORITY; | ||
| break; | ||
| case IdlePriority: | ||
| expirationTime = startTime + IDLE_PRIORITY; | ||
| break; | ||
| case LowPriority: | ||
| expirationTime = startTime + LOW_PRIORITY_TIMEOUT; | ||
| break; | ||
| case NormalPriority: | ||
| default: | ||
| expirationTime = startTime + NORMAL_PRIORITY_TIMEOUT; | ||
| } | ||
| } | ||
| var newNode = { | ||
| callback: callback, | ||
| priorityLevel: priorityLevel, | ||
| expirationTime: expirationTime, | ||
| next: null, | ||
| previous: null | ||
| }; | ||
| // Insert the new callback into the list, ordered first by expiration, then | ||
| // by insertion. So the new callback is inserted after any other callback | ||
| // with equal expiration. | ||
| if (firstCallbackNode === null) { | ||
| // This is the first callback in the list. | ||
| firstCallbackNode = newNode.next = newNode.previous = newNode; | ||
| scheduleHostCallbackIfNeeded(); | ||
| } else { | ||
| var next = null; | ||
| var node = firstCallbackNode; | ||
| do { | ||
| if (node.expirationTime > expirationTime) { | ||
| // The new callback expires before this one. | ||
| next = node; | ||
| break; | ||
| } | ||
| node = node.next; | ||
| } while (node !== firstCallbackNode); | ||
| if (next === null) { | ||
| // No callback with a later expiration was found, which means the new | ||
| // callback has the latest expiration in the list. | ||
| next = firstCallbackNode; | ||
| } else if (next === firstCallbackNode) { | ||
| // The new callback has the earliest expiration in the entire list. | ||
| firstCallbackNode = newNode; | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
| var previous = next.previous; | ||
| previous.next = next.previous = newNode; | ||
| newNode.next = next; | ||
| newNode.previous = previous; | ||
| } | ||
| return newNode; | ||
| } | ||
| function unstable_pauseExecution() { | ||
| isSchedulerPaused = true; | ||
| } | ||
| function unstable_continueExecution() { | ||
| isSchedulerPaused = false; | ||
| if (firstCallbackNode !== null) { | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
| } | ||
| function unstable_getFirstCallbackNode() { | ||
| return firstCallbackNode; | ||
| } | ||
| function unstable_cancelCallback(callbackNode) { | ||
| var next = callbackNode.next; | ||
| if (next === null) { | ||
| // Already cancelled. | ||
| return; | ||
| } | ||
| if (next === callbackNode) { | ||
| // This is the only scheduled callback. Clear the list. | ||
| firstCallbackNode = null; | ||
| } else { | ||
| // Remove the callback from its position in the list. | ||
| if (callbackNode === firstCallbackNode) { | ||
| firstCallbackNode = next; | ||
| } | ||
| var previous = callbackNode.previous; | ||
| previous.next = next; | ||
| next.previous = previous; | ||
| } | ||
| callbackNode.next = callbackNode.previous = null; | ||
| } | ||
| function unstable_getCurrentPriorityLevel() { | ||
| return currentPriorityLevel; | ||
| } | ||
| function unstable_shouldYield() { | ||
| return !currentHostCallbackDidTimeout && (firstCallbackNode !== null && firstCallbackNode.expirationTime < currentExpirationTime || shouldYieldToHost()); | ||
| } | ||
| exports.unstable_flushWithoutYielding = unstable_flushWithoutYielding; | ||
| exports.unstable_flushNumberOfYields = unstable_flushNumberOfYields; | ||
| exports.unstable_flushExpired = unstable_flushExpired; | ||
| exports.unstable_clearYields = unstable_clearYields; | ||
| exports.flushAll = flushAll; | ||
| exports.yieldValue = yieldValue; | ||
| exports.advanceTime = advanceTime; | ||
| exports.unstable_ImmediatePriority = ImmediatePriority; | ||
| exports.unstable_UserBlockingPriority = UserBlockingPriority; | ||
| exports.unstable_NormalPriority = NormalPriority; | ||
| exports.unstable_IdlePriority = IdlePriority; | ||
| exports.unstable_LowPriority = LowPriority; | ||
| exports.unstable_runWithPriority = unstable_runWithPriority; | ||
| exports.unstable_next = unstable_next; | ||
| exports.unstable_scheduleCallback = unstable_scheduleCallback; | ||
| exports.unstable_cancelCallback = unstable_cancelCallback; | ||
| exports.unstable_wrapCallback = unstable_wrapCallback; | ||
| exports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel; | ||
| exports.unstable_shouldYield = unstable_shouldYield; | ||
| exports.unstable_continueExecution = unstable_continueExecution; | ||
| exports.unstable_pauseExecution = unstable_pauseExecution; | ||
| exports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode; | ||
| exports.unstable_now = getCurrentTime; | ||
| exports.unstable_forceFrameRate = forceFrameRate; | ||
| })(); | ||
| } |
| /** @license React v0.0.0-fa1e8df11 | ||
| * scheduler-unstable_mock.production.min.js | ||
| * | ||
| * Copyright (c) Facebook, Inc. and its affiliates. | ||
| * | ||
| * This source code is licensed under the MIT license found in the | ||
| * LICENSE file in the root directory of this source tree. | ||
| */ | ||
| 'use strict';Object.defineProperty(exports,"__esModule",{value:!0});var c=0,f=null,g=-1,h=null,k=-1,l=!1,m=!1;function n(){return-1!==k&&null!==h&&h.length>=k||-1!==g&&g<=c?l=!0:!1}function q(){if(m)throw Error("Already flushing work.");if(null!==f){var a=f;f=null;m=!0;try{a(!0)}finally{m=!1}}}function t(){if(m)throw Error("Already flushing work.");m=!0;try{if(null===f)return!1;for(;null!==f;){var a=f;f=null;a(-1!==g&&g<=c)}return!0}finally{k=-1,m=l=!1}}var u=null,v=!1,w=3,x=-1,y=-1,z=!1,A=!1; | ||
| function B(){if(!z&&null!==u){var a=u.expirationTime;A?(f=null,g=-1):A=!0;f=C;g=a}} | ||
| function D(){var a=u,d=u.next;if(u===d)u=null;else{var b=u.previous;u=b.next=d;d.previous=b}a.next=a.previous=null;b=a.callback;d=a.expirationTime;a=a.priorityLevel;var e=w,r=y;w=a;y=d;try{var p=b(v||1===a)}catch(E){throw E;}finally{w=e,y=r}if("function"===typeof p)if(p={callback:p,priorityLevel:a,expirationTime:d,next:null,previous:null},null===u)u=p.next=p.previous=p;else{b=null;a=u;do{if(a.expirationTime>=d){b=a;break}a=a.next}while(a!==u);null===b?b=u:b===u&&(u=p,B());d=b.previous;d.next=b.previous= | ||
| p;p.next=b;p.previous=d}}function C(a){A=!1;z=!0;var d=v;v=a;try{if(a)for(;null!==u;)if(a=c,u.expirationTime<=a){do D();while(null!==u&&u.expirationTime<=a)}else break;else if(null!==u){do D();while(null!==u&&!n())}}finally{z=!1,v=d,B()}}exports.unstable_flushWithoutYielding=t;exports.unstable_flushNumberOfYields=function(a){if(m)throw Error("Already flushing work.");k=a;m=!0;try{for(;null!==f&&!l;)a=f,f=null,a(-1!==g&&g<=c)}finally{k=-1,m=l=!1}};exports.unstable_flushExpired=q; | ||
| exports.unstable_clearYields=function(){if(null===h)return[];var a=h;h=null;return a};exports.flushAll=function(){if(null!==h)throw Error("Log is not empty. Assert on the log of yielded values before flushing additional work.");t();if(null!==h)throw Error("While flushing work, something yielded a value. Use an assertion helper to assert on the log of yielded values, e.g. expect(Scheduler).toFlushAndYield([...])");};exports.yieldValue=function(a){null===h?h=[a]:h.push(a)}; | ||
| exports.advanceTime=function(a){c+=a;!m&&-1!==g&&g<=c&&q()};exports.unstable_ImmediatePriority=1;exports.unstable_UserBlockingPriority=2;exports.unstable_NormalPriority=3;exports.unstable_IdlePriority=5;exports.unstable_LowPriority=4;exports.unstable_runWithPriority=function(a,d){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var b=w,e=x;w=a;x=c;try{return d()}catch(r){throw B(),r;}finally{w=b,x=e}}; | ||
| exports.unstable_next=function(a){switch(w){case 1:case 2:case 3:var d=3;break;default:d=w}var b=w,e=x;w=d;x=c;try{return a()}catch(r){throw B(),r;}finally{w=b,x=e}}; | ||
| exports.unstable_scheduleCallback=function(a,d,b){var e=-1!==x?x:c;if("object"===typeof b&&null!==b&&"number"===typeof b.timeout)b=e+b.timeout;else switch(a){case 1:b=e+-1;break;case 2:b=e+250;break;case 5:b=e+1073741823;break;case 4:b=e+1E4;break;default:b=e+5E3}a={callback:d,priorityLevel:a,expirationTime:b,next:null,previous:null};if(null===u)u=a.next=a.previous=a,B();else{d=null;e=u;do{if(e.expirationTime>b){d=e;break}e=e.next}while(e!==u);null===d?d=u:d===u&&(u=a,B());b=d.previous;b.next=d.previous= | ||
| a;a.next=d;a.previous=b}return a};exports.unstable_cancelCallback=function(a){var d=a.next;if(null!==d){if(d===a)u=null;else{a===u&&(u=d);var b=a.previous;b.next=d;d.previous=b}a.next=a.previous=null}};exports.unstable_wrapCallback=function(a){var d=w;return function(){var b=w,e=x;w=d;x=c;try{return a.apply(this,arguments)}catch(r){throw B(),r;}finally{w=b,x=e}}};exports.unstable_getCurrentPriorityLevel=function(){return w}; | ||
| exports.unstable_shouldYield=function(){return!v&&(null!==u&&u.expirationTime<y||n())};exports.unstable_continueExecution=function(){null!==u&&B()};exports.unstable_pauseExecution=function(){};exports.unstable_getFirstCallbackNode=function(){return u};exports.unstable_now=function(){return c};exports.unstable_forceFrameRate=function(){}; |
| /** @license React v0.0.0-fa1e8df11 | ||
| * scheduler-unstable_mock.development.js | ||
| * | ||
| * Copyright (c) Facebook, Inc. and its affiliates. | ||
| * | ||
| * This source code is licensed under the MIT license found in the | ||
| * LICENSE file in the root directory of this source tree. | ||
| */ | ||
| 'use strict'; | ||
| (function (global, factory) { | ||
| typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
| typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
| (factory((global.SchedulerMock = {}))); | ||
| }(this, (function (exports) { 'use strict'; | ||
| var enableSchedulerDebugging = false; | ||
| var currentTime = 0; | ||
| var scheduledCallback = null; | ||
| var scheduledCallbackExpiration = -1; | ||
| var yieldedValues = null; | ||
| var expectedNumberOfYields = -1; | ||
| var didStop = false; | ||
| var isFlushing = false; | ||
| function requestHostCallback(callback, expiration) { | ||
| scheduledCallback = callback; | ||
| scheduledCallbackExpiration = expiration; | ||
| } | ||
| function cancelHostCallback() { | ||
| scheduledCallback = null; | ||
| scheduledCallbackExpiration = -1; | ||
| } | ||
| function shouldYieldToHost() { | ||
| if (expectedNumberOfYields !== -1 && yieldedValues !== null && yieldedValues.length >= expectedNumberOfYields || scheduledCallbackExpiration !== -1 && scheduledCallbackExpiration <= currentTime) { | ||
| // We yielded at least as many values as expected. Stop flushing. | ||
| didStop = true; | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
| function getCurrentTime() { | ||
| return currentTime; | ||
| } | ||
| function forceFrameRate() { | ||
| // No-op | ||
| } | ||
| // Should only be used via an assertion helper that inspects the yielded values. | ||
| function unstable_flushNumberOfYields(count) { | ||
| if (isFlushing) { | ||
| throw new Error('Already flushing work.'); | ||
| } | ||
| expectedNumberOfYields = count; | ||
| isFlushing = true; | ||
| try { | ||
| while (scheduledCallback !== null && !didStop) { | ||
| var cb = scheduledCallback; | ||
| scheduledCallback = null; | ||
| var didTimeout = scheduledCallbackExpiration !== -1 && scheduledCallbackExpiration <= currentTime; | ||
| cb(didTimeout); | ||
| } | ||
| } finally { | ||
| expectedNumberOfYields = -1; | ||
| didStop = false; | ||
| isFlushing = false; | ||
| } | ||
| } | ||
| function unstable_flushExpired() { | ||
| if (isFlushing) { | ||
| throw new Error('Already flushing work.'); | ||
| } | ||
| if (scheduledCallback !== null) { | ||
| var cb = scheduledCallback; | ||
| scheduledCallback = null; | ||
| isFlushing = true; | ||
| try { | ||
| cb(true); | ||
| } finally { | ||
| isFlushing = false; | ||
| } | ||
| } | ||
| } | ||
| function unstable_flushWithoutYielding() { | ||
| if (isFlushing) { | ||
| throw new Error('Already flushing work.'); | ||
| } | ||
| isFlushing = true; | ||
| try { | ||
| if (scheduledCallback === null) { | ||
| return false; | ||
| } | ||
| while (scheduledCallback !== null) { | ||
| var cb = scheduledCallback; | ||
| scheduledCallback = null; | ||
| var didTimeout = scheduledCallbackExpiration !== -1 && scheduledCallbackExpiration <= currentTime; | ||
| cb(didTimeout); | ||
| } | ||
| return true; | ||
| } finally { | ||
| expectedNumberOfYields = -1; | ||
| didStop = false; | ||
| isFlushing = false; | ||
| } | ||
| } | ||
| function unstable_clearYields() { | ||
| if (yieldedValues === null) { | ||
| return []; | ||
| } | ||
| var values = yieldedValues; | ||
| yieldedValues = null; | ||
| return values; | ||
| } | ||
| function flushAll() { | ||
| if (yieldedValues !== null) { | ||
| throw new Error('Log is not empty. Assert on the log of yielded values before ' + 'flushing additional work.'); | ||
| } | ||
| unstable_flushWithoutYielding(); | ||
| if (yieldedValues !== null) { | ||
| throw new Error('While flushing work, something yielded a value. Use an ' + 'assertion helper to assert on the log of yielded values, e.g. ' + 'expect(Scheduler).toFlushAndYield([...])'); | ||
| } | ||
| } | ||
| function yieldValue(value) { | ||
| if (yieldedValues === null) { | ||
| yieldedValues = [value]; | ||
| } else { | ||
| yieldedValues.push(value); | ||
| } | ||
| } | ||
| function advanceTime(ms) { | ||
| currentTime += ms; | ||
| // If the host callback timed out, flush the expired work. | ||
| if (!isFlushing && scheduledCallbackExpiration !== -1 && scheduledCallbackExpiration <= currentTime) { | ||
| unstable_flushExpired(); | ||
| } | ||
| } | ||
| /* eslint-disable no-var */ | ||
| // TODO: Use symbols? | ||
| var ImmediatePriority = 1; | ||
| var UserBlockingPriority = 2; | ||
| var NormalPriority = 3; | ||
| var LowPriority = 4; | ||
| var IdlePriority = 5; | ||
| // Max 31 bit integer. The max integer size in V8 for 32-bit systems. | ||
| // Math.pow(2, 30) - 1 | ||
| // 0b111111111111111111111111111111 | ||
| var maxSigned31BitInt = 1073741823; | ||
| // Times out immediately | ||
| var IMMEDIATE_PRIORITY_TIMEOUT = -1; | ||
| // Eventually times out | ||
| var USER_BLOCKING_PRIORITY = 250; | ||
| var NORMAL_PRIORITY_TIMEOUT = 5000; | ||
| var LOW_PRIORITY_TIMEOUT = 10000; | ||
| // Never times out | ||
| var IDLE_PRIORITY = maxSigned31BitInt; | ||
| // Callbacks are stored as a circular, doubly linked list. | ||
| var firstCallbackNode = null; | ||
| var currentHostCallbackDidTimeout = false; | ||
| // Pausing the scheduler is useful for debugging. | ||
| var isSchedulerPaused = false; | ||
| var currentPriorityLevel = NormalPriority; | ||
| var currentEventStartTime = -1; | ||
| var currentExpirationTime = -1; | ||
| // This is set while performing work, to prevent re-entrancy. | ||
| var isPerformingWork = false; | ||
| var isHostCallbackScheduled = false; | ||
| function scheduleHostCallbackIfNeeded() { | ||
| if (isPerformingWork) { | ||
| // Don't schedule work yet; wait until the next time we yield. | ||
| return; | ||
| } | ||
| if (firstCallbackNode !== null) { | ||
| // Schedule the host callback using the earliest expiration in the list. | ||
| var expirationTime = firstCallbackNode.expirationTime; | ||
| if (isHostCallbackScheduled) { | ||
| // Cancel the existing host callback. | ||
| cancelHostCallback(); | ||
| } else { | ||
| isHostCallbackScheduled = true; | ||
| } | ||
| requestHostCallback(flushWork, expirationTime); | ||
| } | ||
| } | ||
| function flushFirstCallback() { | ||
| var currentlyFlushingCallback = firstCallbackNode; | ||
| // Remove the node from the list before calling the callback. That way the | ||
| // list is in a consistent state even if the callback throws. | ||
| var next = firstCallbackNode.next; | ||
| if (firstCallbackNode === next) { | ||
| // This is the last callback in the list. | ||
| firstCallbackNode = null; | ||
| next = null; | ||
| } else { | ||
| var lastCallbackNode = firstCallbackNode.previous; | ||
| firstCallbackNode = lastCallbackNode.next = next; | ||
| next.previous = lastCallbackNode; | ||
| } | ||
| currentlyFlushingCallback.next = currentlyFlushingCallback.previous = null; | ||
| // Now it's safe to call the callback. | ||
| var callback = currentlyFlushingCallback.callback; | ||
| var expirationTime = currentlyFlushingCallback.expirationTime; | ||
| var priorityLevel = currentlyFlushingCallback.priorityLevel; | ||
| var previousPriorityLevel = currentPriorityLevel; | ||
| var previousExpirationTime = currentExpirationTime; | ||
| currentPriorityLevel = priorityLevel; | ||
| currentExpirationTime = expirationTime; | ||
| var continuationCallback; | ||
| try { | ||
| var didUserCallbackTimeout = currentHostCallbackDidTimeout || | ||
| // Immediate priority callbacks are always called as if they timed out | ||
| priorityLevel === ImmediatePriority; | ||
| continuationCallback = callback(didUserCallbackTimeout); | ||
| } catch (error) { | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentExpirationTime = previousExpirationTime; | ||
| } | ||
| // A callback may return a continuation. The continuation should be scheduled | ||
| // with the same priority and expiration as the just-finished callback. | ||
| if (typeof continuationCallback === 'function') { | ||
| var continuationNode = { | ||
| callback: continuationCallback, | ||
| priorityLevel: priorityLevel, | ||
| expirationTime: expirationTime, | ||
| next: null, | ||
| previous: null | ||
| }; | ||
| // Insert the new callback into the list, sorted by its expiration. This is | ||
| // almost the same as the code in `scheduleCallback`, except the callback | ||
| // is inserted into the list *before* callbacks of equal expiration instead | ||
| // of after. | ||
| if (firstCallbackNode === null) { | ||
| // This is the first callback in the list. | ||
| firstCallbackNode = continuationNode.next = continuationNode.previous = continuationNode; | ||
| } else { | ||
| var nextAfterContinuation = null; | ||
| var node = firstCallbackNode; | ||
| do { | ||
| if (node.expirationTime >= expirationTime) { | ||
| // This callback expires at or after the continuation. We will insert | ||
| // the continuation *before* this callback. | ||
| nextAfterContinuation = node; | ||
| break; | ||
| } | ||
| node = node.next; | ||
| } while (node !== firstCallbackNode); | ||
| if (nextAfterContinuation === null) { | ||
| // No equal or lower priority callback was found, which means the new | ||
| // callback is the lowest priority callback in the list. | ||
| nextAfterContinuation = firstCallbackNode; | ||
| } else if (nextAfterContinuation === firstCallbackNode) { | ||
| // The new callback is the highest priority callback in the list. | ||
| firstCallbackNode = continuationNode; | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
| var previous = nextAfterContinuation.previous; | ||
| previous.next = nextAfterContinuation.previous = continuationNode; | ||
| continuationNode.next = nextAfterContinuation; | ||
| continuationNode.previous = previous; | ||
| } | ||
| } | ||
| } | ||
| function flushWork(didUserCallbackTimeout) { | ||
| // Exit right away if we're currently paused | ||
| if (enableSchedulerDebugging && isSchedulerPaused) { | ||
| return; | ||
| } | ||
| // We'll need a new host callback the next time work is scheduled. | ||
| isHostCallbackScheduled = false; | ||
| isPerformingWork = true; | ||
| var previousDidTimeout = currentHostCallbackDidTimeout; | ||
| currentHostCallbackDidTimeout = didUserCallbackTimeout; | ||
| try { | ||
| if (didUserCallbackTimeout) { | ||
| // Flush all the expired callbacks without yielding. | ||
| while (firstCallbackNode !== null && !(enableSchedulerDebugging && isSchedulerPaused)) { | ||
| // TODO Wrap in feature flag | ||
| // Read the current time. Flush all the callbacks that expire at or | ||
| // earlier than that time. Then read the current time again and repeat. | ||
| // This optimizes for as few performance.now calls as possible. | ||
| var currentTime = getCurrentTime(); | ||
| if (firstCallbackNode.expirationTime <= currentTime) { | ||
| do { | ||
| flushFirstCallback(); | ||
| } while (firstCallbackNode !== null && firstCallbackNode.expirationTime <= currentTime && !(enableSchedulerDebugging && isSchedulerPaused)); | ||
| continue; | ||
| } | ||
| break; | ||
| } | ||
| } else { | ||
| // Keep flushing callbacks until we run out of time in the frame. | ||
| if (firstCallbackNode !== null) { | ||
| do { | ||
| if (enableSchedulerDebugging && isSchedulerPaused) { | ||
| break; | ||
| } | ||
| flushFirstCallback(); | ||
| } while (firstCallbackNode !== null && !shouldYieldToHost()); | ||
| } | ||
| } | ||
| } finally { | ||
| isPerformingWork = false; | ||
| currentHostCallbackDidTimeout = previousDidTimeout; | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
| } | ||
| function unstable_runWithPriority(priorityLevel, eventHandler) { | ||
| switch (priorityLevel) { | ||
| case ImmediatePriority: | ||
| case UserBlockingPriority: | ||
| case NormalPriority: | ||
| case LowPriority: | ||
| case IdlePriority: | ||
| break; | ||
| default: | ||
| priorityLevel = NormalPriority; | ||
| } | ||
| var previousPriorityLevel = currentPriorityLevel; | ||
| var previousEventStartTime = currentEventStartTime; | ||
| currentPriorityLevel = priorityLevel; | ||
| currentEventStartTime = getCurrentTime(); | ||
| try { | ||
| return eventHandler(); | ||
| } catch (error) { | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentEventStartTime = previousEventStartTime; | ||
| } | ||
| } | ||
| function unstable_next(eventHandler) { | ||
| var priorityLevel = void 0; | ||
| switch (currentPriorityLevel) { | ||
| case ImmediatePriority: | ||
| case UserBlockingPriority: | ||
| case NormalPriority: | ||
| // Shift down to normal priority | ||
| priorityLevel = NormalPriority; | ||
| break; | ||
| default: | ||
| // Anything lower than normal priority should remain at the current level. | ||
| priorityLevel = currentPriorityLevel; | ||
| break; | ||
| } | ||
| var previousPriorityLevel = currentPriorityLevel; | ||
| var previousEventStartTime = currentEventStartTime; | ||
| currentPriorityLevel = priorityLevel; | ||
| currentEventStartTime = getCurrentTime(); | ||
| try { | ||
| return eventHandler(); | ||
| } catch (error) { | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentEventStartTime = previousEventStartTime; | ||
| } | ||
| } | ||
| function unstable_wrapCallback(callback) { | ||
| var parentPriorityLevel = currentPriorityLevel; | ||
| return function () { | ||
| // This is a fork of runWithPriority, inlined for performance. | ||
| var previousPriorityLevel = currentPriorityLevel; | ||
| var previousEventStartTime = currentEventStartTime; | ||
| currentPriorityLevel = parentPriorityLevel; | ||
| currentEventStartTime = getCurrentTime(); | ||
| try { | ||
| return callback.apply(this, arguments); | ||
| } catch (error) { | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentEventStartTime = previousEventStartTime; | ||
| } | ||
| }; | ||
| } | ||
| function unstable_scheduleCallback(priorityLevel, callback, deprecated_options) { | ||
| var startTime = currentEventStartTime !== -1 ? currentEventStartTime : getCurrentTime(); | ||
| var expirationTime; | ||
| if (typeof deprecated_options === 'object' && deprecated_options !== null && typeof deprecated_options.timeout === 'number') { | ||
| // FIXME: Remove this branch once we lift expiration times out of React. | ||
| expirationTime = startTime + deprecated_options.timeout; | ||
| } else { | ||
| switch (priorityLevel) { | ||
| case ImmediatePriority: | ||
| expirationTime = startTime + IMMEDIATE_PRIORITY_TIMEOUT; | ||
| break; | ||
| case UserBlockingPriority: | ||
| expirationTime = startTime + USER_BLOCKING_PRIORITY; | ||
| break; | ||
| case IdlePriority: | ||
| expirationTime = startTime + IDLE_PRIORITY; | ||
| break; | ||
| case LowPriority: | ||
| expirationTime = startTime + LOW_PRIORITY_TIMEOUT; | ||
| break; | ||
| case NormalPriority: | ||
| default: | ||
| expirationTime = startTime + NORMAL_PRIORITY_TIMEOUT; | ||
| } | ||
| } | ||
| var newNode = { | ||
| callback: callback, | ||
| priorityLevel: priorityLevel, | ||
| expirationTime: expirationTime, | ||
| next: null, | ||
| previous: null | ||
| }; | ||
| // Insert the new callback into the list, ordered first by expiration, then | ||
| // by insertion. So the new callback is inserted after any other callback | ||
| // with equal expiration. | ||
| if (firstCallbackNode === null) { | ||
| // This is the first callback in the list. | ||
| firstCallbackNode = newNode.next = newNode.previous = newNode; | ||
| scheduleHostCallbackIfNeeded(); | ||
| } else { | ||
| var next = null; | ||
| var node = firstCallbackNode; | ||
| do { | ||
| if (node.expirationTime > expirationTime) { | ||
| // The new callback expires before this one. | ||
| next = node; | ||
| break; | ||
| } | ||
| node = node.next; | ||
| } while (node !== firstCallbackNode); | ||
| if (next === null) { | ||
| // No callback with a later expiration was found, which means the new | ||
| // callback has the latest expiration in the list. | ||
| next = firstCallbackNode; | ||
| } else if (next === firstCallbackNode) { | ||
| // The new callback has the earliest expiration in the entire list. | ||
| firstCallbackNode = newNode; | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
| var previous = next.previous; | ||
| previous.next = next.previous = newNode; | ||
| newNode.next = next; | ||
| newNode.previous = previous; | ||
| } | ||
| return newNode; | ||
| } | ||
| function unstable_pauseExecution() { | ||
| isSchedulerPaused = true; | ||
| } | ||
| function unstable_continueExecution() { | ||
| isSchedulerPaused = false; | ||
| if (firstCallbackNode !== null) { | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
| } | ||
| function unstable_getFirstCallbackNode() { | ||
| return firstCallbackNode; | ||
| } | ||
| function unstable_cancelCallback(callbackNode) { | ||
| var next = callbackNode.next; | ||
| if (next === null) { | ||
| // Already cancelled. | ||
| return; | ||
| } | ||
| if (next === callbackNode) { | ||
| // This is the only scheduled callback. Clear the list. | ||
| firstCallbackNode = null; | ||
| } else { | ||
| // Remove the callback from its position in the list. | ||
| if (callbackNode === firstCallbackNode) { | ||
| firstCallbackNode = next; | ||
| } | ||
| var previous = callbackNode.previous; | ||
| previous.next = next; | ||
| next.previous = previous; | ||
| } | ||
| callbackNode.next = callbackNode.previous = null; | ||
| } | ||
| function unstable_getCurrentPriorityLevel() { | ||
| return currentPriorityLevel; | ||
| } | ||
| function unstable_shouldYield() { | ||
| return !currentHostCallbackDidTimeout && (firstCallbackNode !== null && firstCallbackNode.expirationTime < currentExpirationTime || shouldYieldToHost()); | ||
| } | ||
| exports.unstable_flushWithoutYielding = unstable_flushWithoutYielding; | ||
| exports.unstable_flushNumberOfYields = unstable_flushNumberOfYields; | ||
| exports.unstable_flushExpired = unstable_flushExpired; | ||
| exports.unstable_clearYields = unstable_clearYields; | ||
| exports.flushAll = flushAll; | ||
| exports.yieldValue = yieldValue; | ||
| exports.advanceTime = advanceTime; | ||
| exports.unstable_ImmediatePriority = ImmediatePriority; | ||
| exports.unstable_UserBlockingPriority = UserBlockingPriority; | ||
| exports.unstable_NormalPriority = NormalPriority; | ||
| exports.unstable_IdlePriority = IdlePriority; | ||
| exports.unstable_LowPriority = LowPriority; | ||
| exports.unstable_runWithPriority = unstable_runWithPriority; | ||
| exports.unstable_next = unstable_next; | ||
| exports.unstable_scheduleCallback = unstable_scheduleCallback; | ||
| exports.unstable_cancelCallback = unstable_cancelCallback; | ||
| exports.unstable_wrapCallback = unstable_wrapCallback; | ||
| exports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel; | ||
| exports.unstable_shouldYield = unstable_shouldYield; | ||
| exports.unstable_continueExecution = unstable_continueExecution; | ||
| exports.unstable_pauseExecution = unstable_pauseExecution; | ||
| exports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode; | ||
| exports.unstable_now = getCurrentTime; | ||
| exports.unstable_forceFrameRate = forceFrameRate; | ||
| Object.defineProperty(exports, '__esModule', { value: true }); | ||
| }))); |
| /** @license React v0.0.0-fa1e8df11 | ||
| * scheduler-unstable_mock.production.min.js | ||
| * | ||
| * Copyright (c) Facebook, Inc. and its affiliates. | ||
| * | ||
| * This source code is licensed under the MIT license found in the | ||
| * LICENSE file in the root directory of this source tree. | ||
| */ | ||
| 'use strict';(function(b,q){"object"===typeof exports&&"undefined"!==typeof module?q(exports):"function"===typeof define&&define.amd?define(["exports"],q):q(b.SchedulerMock={})})(this,function(b){function q(){return-1!==r&&null!==l&&l.length>=r||-1!==m&&m<=f?v=!0:!1}function z(){if(n)throw Error("Already flushing work.");if(null!==h){var a=h;h=null;n=!0;try{a(!0)}finally{n=!1}}}function A(){if(n)throw Error("Already flushing work.");n=!0;try{if(null===h)return!1;for(;null!==h;){var a=h;h=null;a(-1!== | ||
| m&&m<=f)}return!0}finally{r=-1,n=v=!1}}function p(){if(!x&&null!==c){var a=c.expirationTime;y?(h=null,m=-1):y=!0;h=C;m=a}}function B(){var a=c,e=c.next;if(c===e)c=null;else{var d=c.previous;c=d.next=e;e.previous=d}a.next=a.previous=null;d=a.callback;e=a.expirationTime;a=a.priorityLevel;var b=g,h=w;g=a;w=e;try{var f=d(u||1===a)}catch(D){throw D;}finally{g=b,w=h}if("function"===typeof f)if(f={callback:f,priorityLevel:a,expirationTime:e,next:null,previous:null},null===c)c=f.next=f.previous=f;else{d= | ||
| null;a=c;do{if(a.expirationTime>=e){d=a;break}a=a.next}while(a!==c);null===d?d=c:d===c&&(c=f,p());e=d.previous;e.next=d.previous=f;f.next=d;f.previous=e}}function C(a){y=!1;x=!0;var e=u;u=a;try{if(a)for(;null!==c;)if(a=f,c.expirationTime<=a){do B();while(null!==c&&c.expirationTime<=a)}else break;else if(null!==c){do B();while(null!==c&&!q())}}finally{x=!1,u=e,p()}}var f=0,h=null,m=-1,l=null,r=-1,v=!1,n=!1,c=null,u=!1,g=3,k=-1,w=-1,x=!1,y=!1;b.unstable_flushWithoutYielding=A;b.unstable_flushNumberOfYields= | ||
| function(a){if(n)throw Error("Already flushing work.");r=a;n=!0;try{for(;null!==h&&!v;)a=h,h=null,a(-1!==m&&m<=f)}finally{r=-1,n=v=!1}};b.unstable_flushExpired=z;b.unstable_clearYields=function(){if(null===l)return[];var a=l;l=null;return a};b.flushAll=function(){if(null!==l)throw Error("Log is not empty. Assert on the log of yielded values before flushing additional work.");A();if(null!==l)throw Error("While flushing work, something yielded a value. Use an assertion helper to assert on the log of yielded values, e.g. expect(Scheduler).toFlushAndYield([...])"); | ||
| };b.yieldValue=function(a){null===l?l=[a]:l.push(a)};b.advanceTime=function(a){f+=a;!n&&-1!==m&&m<=f&&z()};b.unstable_ImmediatePriority=1;b.unstable_UserBlockingPriority=2;b.unstable_NormalPriority=3;b.unstable_IdlePriority=5;b.unstable_LowPriority=4;b.unstable_runWithPriority=function(a,c){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var d=g,e=k;g=a;k=f;try{return c()}catch(t){throw p(),t;}finally{g=d,k=e}};b.unstable_next=function(a){switch(g){case 1:case 2:case 3:var c=3;break; | ||
| default:c=g}var d=g,b=k;g=c;k=f;try{return a()}catch(t){throw p(),t;}finally{g=d,k=b}};b.unstable_scheduleCallback=function(a,e,d){var b=-1!==k?k:f;if("object"===typeof d&&null!==d&&"number"===typeof d.timeout)d=b+d.timeout;else switch(a){case 1:d=b+-1;break;case 2:d=b+250;break;case 5:d=b+1073741823;break;case 4:d=b+1E4;break;default:d=b+5E3}a={callback:e,priorityLevel:a,expirationTime:d,next:null,previous:null};if(null===c)c=a.next=a.previous=a,p();else{e=null;b=c;do{if(b.expirationTime>d){e=b; | ||
| break}b=b.next}while(b!==c);null===e?e=c:e===c&&(c=a,p());d=e.previous;d.next=e.previous=a;a.next=e;a.previous=d}return a};b.unstable_cancelCallback=function(a){var b=a.next;if(null!==b){if(b===a)c=null;else{a===c&&(c=b);var d=a.previous;d.next=b;b.previous=d}a.next=a.previous=null}};b.unstable_wrapCallback=function(a){var b=g;return function(){var c=g,e=k;g=b;k=f;try{return a.apply(this,arguments)}catch(t){throw p(),t;}finally{g=c,k=e}}};b.unstable_getCurrentPriorityLevel=function(){return g};b.unstable_shouldYield= | ||
| function(){return!u&&(null!==c&&c.expirationTime<w||q())};b.unstable_continueExecution=function(){null!==c&&p()};b.unstable_pauseExecution=function(){};b.unstable_getFirstCallbackNode=function(){return c};b.unstable_now=function(){return f};b.unstable_forceFrameRate=function(){};Object.defineProperty(b,"__esModule",{value:!0})}); |
| 'use strict'; | ||
| if (process.env.NODE_ENV === 'production') { | ||
| module.exports = require('./cjs/scheduler-unstable_mock.production.min.js'); | ||
| } else { | ||
| module.exports = require('./cjs/scheduler-unstable_mock.development.js'); | ||
| } |
+5
-5
| { | ||
| "branch": "pull/15192", | ||
| "buildNumber": "14024", | ||
| "checksum": "24ccd39", | ||
| "commit": "f9e41e3a5", | ||
| "branch": "master", | ||
| "buildNumber": "18068", | ||
| "checksum": "486c52d", | ||
| "commit": "fa1e8df11", | ||
| "environment": "ci", | ||
| "reactVersion": "16.8.4-canary-f9e41e3a5" | ||
| "reactVersion": "16.8.6-canary-fa1e8df11" | ||
| } |
@@ -1,2 +0,2 @@ | ||
| /** @license React v0.0.0-f9e41e3a5 | ||
| /** @license React v0.0.0-fa1e8df11 | ||
| * scheduler-tracing.development.js | ||
@@ -51,2 +51,8 @@ * | ||
| // Disable javascript: URL strings in href for XSS protection. | ||
| // Disables yielding during render in Concurrent Mode. Used for debugging only. | ||
| // React Fire: prevent the value and checked attributes from syncing | ||
@@ -59,2 +65,20 @@ // with their related DOM properties | ||
| // See https://github.com/react-native-community/discussions-and-proposals/issues/72 for more information | ||
| // This is a flag so we can fix warnings in RN core before turning it on | ||
| // Experimental React Events support. Only used in www builds for now. | ||
| // New API for JSX transforms to target - https://github.com/reactjs/rfcs/pull/107 | ||
| // We will enforce mocking scheduler with scheduler/unstable_mock at some point. (v17?) | ||
| // Till then, we warn about the missing mock, but still fallback to a sync mode compatible version | ||
| // Temporary flag to revert the fix in #15650 | ||
| var DEFAULT_THREAD_ID = 0; | ||
@@ -61,0 +85,0 @@ |
@@ -1,2 +0,2 @@ | ||
| /** @license React v0.0.0-f9e41e3a5 | ||
| /** @license React v0.0.0-fa1e8df11 | ||
| * scheduler-tracing.production.min.js | ||
@@ -3,0 +3,0 @@ * |
@@ -1,2 +0,2 @@ | ||
| /** @license React v0.0.0-f9e41e3a5 | ||
| /** @license React v0.0.0-fa1e8df11 | ||
| * scheduler-tracing.profiling.min.js | ||
@@ -3,0 +3,0 @@ * |
+317
-327
@@ -1,2 +0,2 @@ | ||
| /** @license React v0.0.0-f9e41e3a5 | ||
| /** @license React v0.0.0-fa1e8df11 | ||
| * scheduler.development.js | ||
@@ -22,2 +22,258 @@ * | ||
| // The DOM Scheduler implementation is similar to requestIdleCallback. It | ||
| // works by scheduling a requestAnimationFrame, storing the time for the start | ||
| // of the frame, then scheduling a postMessage which gets scheduled after paint. | ||
| // Within the postMessage handler do as much work as possible until time + frame | ||
| // rate. By separating the idle call into a separate event tick we ensure that | ||
| // layout, paint and other browser work is counted against the available time. | ||
| // The frame rate is dynamically adjusted. | ||
| var requestHostCallback = void 0; | ||
| var cancelHostCallback = void 0; | ||
| var shouldYieldToHost = void 0; | ||
| exports.unstable_now = void 0; | ||
| exports.unstable_forceFrameRate = void 0; | ||
| var hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function'; | ||
| // We capture a local reference to any global, in case it gets polyfilled after | ||
| // this module is initially evaluated. We want to be using a | ||
| // consistent implementation. | ||
| var localDate = Date; | ||
| // This initialization code may run even on server environments if a component | ||
| // just imports ReactDOM (e.g. for findDOMNode). Some environments might not | ||
| // have setTimeout or clearTimeout. However, we always expect them to be defined | ||
| // on the client. https://github.com/facebook/react/pull/13088 | ||
| var localSetTimeout = typeof setTimeout === 'function' ? setTimeout : undefined; | ||
| var localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined; | ||
| // We don't expect either of these to necessarily be defined, but we will error | ||
| // later if they are missing on the client. | ||
| var localRequestAnimationFrame = typeof requestAnimationFrame === 'function' ? requestAnimationFrame : undefined; | ||
| var localCancelAnimationFrame = typeof cancelAnimationFrame === 'function' ? cancelAnimationFrame : undefined; | ||
| // requestAnimationFrame does not run when the tab is in the background. If | ||
| // we're backgrounded we prefer for that work to happen so that the page | ||
| // continues to load in the background. So we also schedule a 'setTimeout' as | ||
| // a fallback. | ||
| // TODO: Need a better heuristic for backgrounded work. | ||
| var ANIMATION_FRAME_TIMEOUT = 100; | ||
| var rAFID = void 0; | ||
| var rAFTimeoutID = void 0; | ||
| var requestAnimationFrameWithTimeout = function (callback) { | ||
| // schedule rAF and also a setTimeout | ||
| rAFID = localRequestAnimationFrame(function (timestamp) { | ||
| // cancel the setTimeout | ||
| localClearTimeout(rAFTimeoutID); | ||
| callback(timestamp); | ||
| }); | ||
| rAFTimeoutID = localSetTimeout(function () { | ||
| // cancel the requestAnimationFrame | ||
| localCancelAnimationFrame(rAFID); | ||
| callback(exports.unstable_now()); | ||
| }, ANIMATION_FRAME_TIMEOUT); | ||
| }; | ||
| if (hasNativePerformanceNow) { | ||
| var Performance = performance; | ||
| exports.unstable_now = function () { | ||
| return Performance.now(); | ||
| }; | ||
| } else { | ||
| exports.unstable_now = function () { | ||
| return localDate.now(); | ||
| }; | ||
| } | ||
| if ( | ||
| // If Scheduler runs in a non-DOM environment, it falls back to a naive | ||
| // implementation using setTimeout. | ||
| typeof window === 'undefined' || | ||
| // Check if MessageChannel is supported, too. | ||
| typeof MessageChannel !== 'function') { | ||
| // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore, | ||
| // fallback to a naive implementation. | ||
| var _callback = null; | ||
| var _flushCallback = function (didTimeout) { | ||
| if (_callback !== null) { | ||
| try { | ||
| _callback(didTimeout); | ||
| } finally { | ||
| _callback = null; | ||
| } | ||
| } | ||
| }; | ||
| requestHostCallback = function (cb, ms) { | ||
| if (_callback !== null) { | ||
| // Protect against re-entrancy. | ||
| setTimeout(requestHostCallback, 0, cb); | ||
| } else { | ||
| _callback = cb; | ||
| setTimeout(_flushCallback, 0, false); | ||
| } | ||
| }; | ||
| cancelHostCallback = function () { | ||
| _callback = null; | ||
| }; | ||
| shouldYieldToHost = function () { | ||
| return false; | ||
| }; | ||
| exports.unstable_forceFrameRate = function () {}; | ||
| } else { | ||
| if (typeof console !== 'undefined') { | ||
| // TODO: Remove fb.me link | ||
| if (typeof localRequestAnimationFrame !== 'function') { | ||
| console.error("This browser doesn't support requestAnimationFrame. " + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills'); | ||
| } | ||
| if (typeof localCancelAnimationFrame !== 'function') { | ||
| console.error("This browser doesn't support cancelAnimationFrame. " + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills'); | ||
| } | ||
| } | ||
| var scheduledHostCallback = null; | ||
| var isMessageEventScheduled = false; | ||
| var timeoutTime = -1; | ||
| var isAnimationFrameScheduled = false; | ||
| var isFlushingHostCallback = false; | ||
| var frameDeadline = 0; | ||
| // We start out assuming that we run at 30fps but then the heuristic tracking | ||
| // will adjust this value to a faster fps if we get more frequent animation | ||
| // frames. | ||
| var previousFrameTime = 33; | ||
| var activeFrameTime = 33; | ||
| var fpsLocked = false; | ||
| shouldYieldToHost = function () { | ||
| return frameDeadline <= exports.unstable_now(); | ||
| }; | ||
| exports.unstable_forceFrameRate = function (fps) { | ||
| if (fps < 0 || fps > 125) { | ||
| console.error('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing framerates higher than 125 fps is not unsupported'); | ||
| return; | ||
| } | ||
| if (fps > 0) { | ||
| activeFrameTime = Math.floor(1000 / fps); | ||
| fpsLocked = true; | ||
| } else { | ||
| // reset the framerate | ||
| activeFrameTime = 33; | ||
| fpsLocked = false; | ||
| } | ||
| }; | ||
| // We use the postMessage trick to defer idle work until after the repaint. | ||
| var channel = new MessageChannel(); | ||
| var port = channel.port2; | ||
| channel.port1.onmessage = function (event) { | ||
| isMessageEventScheduled = false; | ||
| var prevScheduledCallback = scheduledHostCallback; | ||
| var prevTimeoutTime = timeoutTime; | ||
| scheduledHostCallback = null; | ||
| timeoutTime = -1; | ||
| var currentTime = exports.unstable_now(); | ||
| var didTimeout = false; | ||
| if (frameDeadline - currentTime <= 0) { | ||
| // There's no time left in this idle period. Check if the callback has | ||
| // a timeout and whether it's been exceeded. | ||
| if (prevTimeoutTime !== -1 && prevTimeoutTime <= currentTime) { | ||
| // Exceeded the timeout. Invoke the callback even though there's no | ||
| // time left. | ||
| didTimeout = true; | ||
| } else { | ||
| // No timeout. | ||
| if (!isAnimationFrameScheduled) { | ||
| // Schedule another animation callback so we retry later. | ||
| isAnimationFrameScheduled = true; | ||
| requestAnimationFrameWithTimeout(animationTick); | ||
| } | ||
| // Exit without invoking the callback. | ||
| scheduledHostCallback = prevScheduledCallback; | ||
| timeoutTime = prevTimeoutTime; | ||
| return; | ||
| } | ||
| } | ||
| if (prevScheduledCallback !== null) { | ||
| isFlushingHostCallback = true; | ||
| try { | ||
| prevScheduledCallback(didTimeout); | ||
| } finally { | ||
| isFlushingHostCallback = false; | ||
| } | ||
| } | ||
| }; | ||
| var animationTick = function (rafTime) { | ||
| if (scheduledHostCallback !== null) { | ||
| // Eagerly schedule the next animation callback at the beginning of the | ||
| // frame. If the scheduler queue is not empty at the end of the frame, it | ||
| // will continue flushing inside that callback. If the queue *is* empty, | ||
| // then it will exit immediately. Posting the callback at the start of the | ||
| // frame ensures it's fired within the earliest possible frame. If we | ||
| // waited until the end of the frame to post the callback, we risk the | ||
| // browser skipping a frame and not firing the callback until the frame | ||
| // after that. | ||
| requestAnimationFrameWithTimeout(animationTick); | ||
| } else { | ||
| // No pending work. Exit. | ||
| isAnimationFrameScheduled = false; | ||
| return; | ||
| } | ||
| var nextFrameTime = rafTime - frameDeadline + activeFrameTime; | ||
| if (nextFrameTime < activeFrameTime && previousFrameTime < activeFrameTime && !fpsLocked) { | ||
| if (nextFrameTime < 8) { | ||
| // Defensive coding. We don't support higher frame rates than 120hz. | ||
| // If the calculated frame time gets lower than 8, it is probably a bug. | ||
| nextFrameTime = 8; | ||
| } | ||
| // If one frame goes long, then the next one can be short to catch up. | ||
| // If two frames are short in a row, then that's an indication that we | ||
| // actually have a higher frame rate than what we're currently optimizing. | ||
| // We adjust our heuristic dynamically accordingly. For example, if we're | ||
| // running on 120hz display or 90hz VR display. | ||
| // Take the max of the two in case one of them was an anomaly due to | ||
| // missed frame deadlines. | ||
| activeFrameTime = nextFrameTime < previousFrameTime ? previousFrameTime : nextFrameTime; | ||
| } else { | ||
| previousFrameTime = nextFrameTime; | ||
| } | ||
| frameDeadline = rafTime + activeFrameTime; | ||
| if (!isMessageEventScheduled) { | ||
| isMessageEventScheduled = true; | ||
| port.postMessage(undefined); | ||
| } | ||
| }; | ||
| requestHostCallback = function (callback, absoluteTimeout) { | ||
| scheduledHostCallback = callback; | ||
| timeoutTime = absoluteTimeout; | ||
| if (isFlushingHostCallback || absoluteTimeout < 0) { | ||
| // Don't wait for the next frame. Continue working ASAP, in a new event. | ||
| port.postMessage(undefined); | ||
| } else if (!isAnimationFrameScheduled) { | ||
| // If rAF didn't already schedule one, we need to schedule a frame. | ||
| // TODO: If this rAF doesn't materialize because the browser throttles, we | ||
| // might want to still have setTimeout trigger rIC as a backup to ensure | ||
| // that we keep performing work. | ||
| isAnimationFrameScheduled = true; | ||
| requestAnimationFrameWithTimeout(animationTick); | ||
| } | ||
| }; | ||
| cancelHostCallback = function () { | ||
| scheduledHostCallback = null; | ||
| isMessageEventScheduled = false; | ||
| timeoutTime = -1; | ||
| }; | ||
| } | ||
| /* eslint-disable no-var */ | ||
@@ -49,3 +305,3 @@ | ||
| var currentDidTimeout = false; | ||
| var currentHostCallbackDidTimeout = false; | ||
| // Pausing the scheduler is useful for debugging. | ||
@@ -58,27 +314,27 @@ var isSchedulerPaused = false; | ||
| // This is set when a callback is being executed, to prevent re-entrancy. | ||
| var isExecutingCallback = false; | ||
| // This is set while performing work, to prevent re-entrancy. | ||
| var isPerformingWork = false; | ||
| var isHostCallbackScheduled = false; | ||
| var hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function'; | ||
| function ensureHostCallbackIsScheduled() { | ||
| if (isExecutingCallback) { | ||
| function scheduleHostCallbackIfNeeded() { | ||
| if (isPerformingWork) { | ||
| // Don't schedule work yet; wait until the next time we yield. | ||
| return; | ||
| } | ||
| // Schedule the host callback using the earliest expiration in the list. | ||
| var expirationTime = firstCallbackNode.expirationTime; | ||
| if (!isHostCallbackScheduled) { | ||
| isHostCallbackScheduled = true; | ||
| } else { | ||
| // Cancel the existing host callback. | ||
| cancelHostCallback(); | ||
| if (firstCallbackNode !== null) { | ||
| // Schedule the host callback using the earliest expiration in the list. | ||
| var expirationTime = firstCallbackNode.expirationTime; | ||
| if (isHostCallbackScheduled) { | ||
| // Cancel the existing host callback. | ||
| cancelHostCallback(); | ||
| } else { | ||
| isHostCallbackScheduled = true; | ||
| } | ||
| requestHostCallback(flushWork, expirationTime); | ||
| } | ||
| requestHostCallback(flushWork, expirationTime); | ||
| } | ||
| function flushFirstCallback() { | ||
| var flushedNode = firstCallbackNode; | ||
| var currentlyFlushingCallback = firstCallbackNode; | ||
@@ -98,8 +354,8 @@ // Remove the node from the list before calling the callback. That way the | ||
| flushedNode.next = flushedNode.previous = null; | ||
| currentlyFlushingCallback.next = currentlyFlushingCallback.previous = null; | ||
| // Now it's safe to call the callback. | ||
| var callback = flushedNode.callback; | ||
| var expirationTime = flushedNode.expirationTime; | ||
| var priorityLevel = flushedNode.priorityLevel; | ||
| var callback = currentlyFlushingCallback.callback; | ||
| var expirationTime = currentlyFlushingCallback.expirationTime; | ||
| var priorityLevel = currentlyFlushingCallback.priorityLevel; | ||
| var previousPriorityLevel = currentPriorityLevel; | ||
@@ -111,3 +367,8 @@ var previousExpirationTime = currentExpirationTime; | ||
| try { | ||
| continuationCallback = callback(); | ||
| var didUserCallbackTimeout = currentHostCallbackDidTimeout || | ||
| // Immediate priority callbacks are always called as if they timed out | ||
| priorityLevel === ImmediatePriority; | ||
| continuationCallback = callback(didUserCallbackTimeout); | ||
| } catch (error) { | ||
| throw error; | ||
| } finally { | ||
@@ -156,3 +417,3 @@ currentPriorityLevel = previousPriorityLevel; | ||
| firstCallbackNode = continuationNode; | ||
| ensureHostCallbackIsScheduled(); | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
@@ -168,28 +429,4 @@ | ||
| function flushImmediateWork() { | ||
| if ( | ||
| // Confirm we've exited the outer most event handler | ||
| currentEventStartTime === -1 && firstCallbackNode !== null && firstCallbackNode.priorityLevel === ImmediatePriority) { | ||
| isExecutingCallback = true; | ||
| try { | ||
| do { | ||
| flushFirstCallback(); | ||
| } while ( | ||
| // Keep flushing until there are no more immediate callbacks | ||
| firstCallbackNode !== null && firstCallbackNode.priorityLevel === ImmediatePriority); | ||
| } finally { | ||
| isExecutingCallback = false; | ||
| if (firstCallbackNode !== null) { | ||
| // There's still work remaining. Request another callback. | ||
| ensureHostCallbackIsScheduled(); | ||
| } else { | ||
| isHostCallbackScheduled = false; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| function flushWork(didTimeout) { | ||
| function flushWork(didUserCallbackTimeout) { | ||
| // Exit right away if we're currently paused | ||
| if (enableSchedulerDebugging && isSchedulerPaused) { | ||
@@ -199,7 +436,10 @@ return; | ||
| isExecutingCallback = true; | ||
| var previousDidTimeout = currentDidTimeout; | ||
| currentDidTimeout = didTimeout; | ||
| // We'll need a new host callback the next time work is scheduled. | ||
| isHostCallbackScheduled = false; | ||
| isPerformingWork = true; | ||
| var previousDidTimeout = currentHostCallbackDidTimeout; | ||
| currentHostCallbackDidTimeout = didUserCallbackTimeout; | ||
| try { | ||
| if (didTimeout) { | ||
| if (didUserCallbackTimeout) { | ||
| // Flush all the expired callbacks without yielding. | ||
@@ -232,12 +472,6 @@ while (firstCallbackNode !== null && !(enableSchedulerDebugging && isSchedulerPaused)) { | ||
| } finally { | ||
| isExecutingCallback = false; | ||
| currentDidTimeout = previousDidTimeout; | ||
| if (firstCallbackNode !== null) { | ||
| // There's still work remaining. Request another callback. | ||
| ensureHostCallbackIsScheduled(); | ||
| } else { | ||
| isHostCallbackScheduled = false; | ||
| } | ||
| // Before exiting, flush all the immediate work that was scheduled. | ||
| flushImmediateWork(); | ||
| isPerformingWork = false; | ||
| currentHostCallbackDidTimeout = previousDidTimeout; | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
@@ -265,8 +499,9 @@ } | ||
| return eventHandler(); | ||
| } catch (error) { | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentEventStartTime = previousEventStartTime; | ||
| // Before exiting, flush all the immediate work that was scheduled. | ||
| flushImmediateWork(); | ||
| } | ||
@@ -297,8 +532,9 @@ } | ||
| return eventHandler(); | ||
| } catch (error) { | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentEventStartTime = previousEventStartTime; | ||
| // Before exiting, flush all the immediate work that was scheduled. | ||
| flushImmediateWork(); | ||
| } | ||
@@ -318,6 +554,9 @@ } | ||
| return callback.apply(this, arguments); | ||
| } catch (error) { | ||
| // There's still work remaining. Request another callback. | ||
| scheduleHostCallbackIfNeeded(); | ||
| throw error; | ||
| } finally { | ||
| currentPriorityLevel = previousPriorityLevel; | ||
| currentEventStartTime = previousEventStartTime; | ||
| flushImmediateWork(); | ||
| } | ||
@@ -327,3 +566,3 @@ }; | ||
| function unstable_scheduleCallback(callback, deprecated_options) { | ||
| function unstable_scheduleCallback(priorityLevel, callback, deprecated_options) { | ||
| var startTime = currentEventStartTime !== -1 ? currentEventStartTime : exports.unstable_now(); | ||
@@ -336,3 +575,3 @@ | ||
| } else { | ||
| switch (currentPriorityLevel) { | ||
| switch (priorityLevel) { | ||
| case ImmediatePriority: | ||
@@ -358,3 +597,3 @@ expirationTime = startTime + IMMEDIATE_PRIORITY_TIMEOUT; | ||
| callback: callback, | ||
| priorityLevel: currentPriorityLevel, | ||
| priorityLevel: priorityLevel, | ||
| expirationTime: expirationTime, | ||
@@ -366,8 +605,8 @@ next: null, | ||
| // Insert the new callback into the list, ordered first by expiration, then | ||
| // by insertion. So the new callback is inserted any other callback with | ||
| // equal expiration. | ||
| // by insertion. So the new callback is inserted after any other callback | ||
| // with equal expiration. | ||
| if (firstCallbackNode === null) { | ||
| // This is the first callback in the list. | ||
| firstCallbackNode = newNode.next = newNode.previous = newNode; | ||
| ensureHostCallbackIsScheduled(); | ||
| scheduleHostCallbackIfNeeded(); | ||
| } else { | ||
@@ -392,3 +631,3 @@ var next = null; | ||
| firstCallbackNode = newNode; | ||
| ensureHostCallbackIsScheduled(); | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
@@ -412,3 +651,3 @@ | ||
| if (firstCallbackNode !== null) { | ||
| ensureHostCallbackIsScheduled(); | ||
| scheduleHostCallbackIfNeeded(); | ||
| } | ||
@@ -449,254 +688,5 @@ } | ||
| function unstable_shouldYield() { | ||
| return !currentDidTimeout && (firstCallbackNode !== null && firstCallbackNode.expirationTime < currentExpirationTime || shouldYieldToHost()); | ||
| return !currentHostCallbackDidTimeout && (firstCallbackNode !== null && firstCallbackNode.expirationTime < currentExpirationTime || shouldYieldToHost()); | ||
| } | ||
| // The remaining code is essentially a polyfill for requestIdleCallback. It | ||
| // works by scheduling a requestAnimationFrame, storing the time for the start | ||
| // of the frame, then scheduling a postMessage which gets scheduled after paint. | ||
| // Within the postMessage handler do as much work as possible until time + frame | ||
| // rate. By separating the idle call into a separate event tick we ensure that | ||
| // layout, paint and other browser work is counted against the available time. | ||
| // The frame rate is dynamically adjusted. | ||
| // We capture a local reference to any global, in case it gets polyfilled after | ||
| // this module is initially evaluated. We want to be using a | ||
| // consistent implementation. | ||
| var localDate = Date; | ||
| // This initialization code may run even on server environments if a component | ||
| // just imports ReactDOM (e.g. for findDOMNode). Some environments might not | ||
| // have setTimeout or clearTimeout. However, we always expect them to be defined | ||
| // on the client. https://github.com/facebook/react/pull/13088 | ||
| var localSetTimeout = typeof setTimeout === 'function' ? setTimeout : undefined; | ||
| var localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined; | ||
| // We don't expect either of these to necessarily be defined, but we will error | ||
| // later if they are missing on the client. | ||
| var localRequestAnimationFrame = typeof requestAnimationFrame === 'function' ? requestAnimationFrame : undefined; | ||
| var localCancelAnimationFrame = typeof cancelAnimationFrame === 'function' ? cancelAnimationFrame : undefined; | ||
| // requestAnimationFrame does not run when the tab is in the background. If | ||
| // we're backgrounded we prefer for that work to happen so that the page | ||
| // continues to load in the background. So we also schedule a 'setTimeout' as | ||
| // a fallback. | ||
| // TODO: Need a better heuristic for backgrounded work. | ||
| var ANIMATION_FRAME_TIMEOUT = 100; | ||
| var rAFID; | ||
| var rAFTimeoutID; | ||
| var requestAnimationFrameWithTimeout = function (callback) { | ||
| // schedule rAF and also a setTimeout | ||
| rAFID = localRequestAnimationFrame(function (timestamp) { | ||
| // cancel the setTimeout | ||
| localClearTimeout(rAFTimeoutID); | ||
| callback(timestamp); | ||
| }); | ||
| rAFTimeoutID = localSetTimeout(function () { | ||
| // cancel the requestAnimationFrame | ||
| localCancelAnimationFrame(rAFID); | ||
| callback(exports.unstable_now()); | ||
| }, ANIMATION_FRAME_TIMEOUT); | ||
| }; | ||
| if (hasNativePerformanceNow) { | ||
| var Performance = performance; | ||
| exports.unstable_now = function () { | ||
| return Performance.now(); | ||
| }; | ||
| } else { | ||
| exports.unstable_now = function () { | ||
| return localDate.now(); | ||
| }; | ||
| } | ||
| var requestHostCallback; | ||
| var cancelHostCallback; | ||
| var shouldYieldToHost; | ||
| var globalValue = null; | ||
| if (typeof window !== 'undefined') { | ||
| globalValue = window; | ||
| } else if (typeof global !== 'undefined') { | ||
| globalValue = global; | ||
| } | ||
| if (globalValue && globalValue._schedMock) { | ||
| // Dynamic injection, only for testing purposes. | ||
| var globalImpl = globalValue._schedMock; | ||
| requestHostCallback = globalImpl[0]; | ||
| cancelHostCallback = globalImpl[1]; | ||
| shouldYieldToHost = globalImpl[2]; | ||
| exports.unstable_now = globalImpl[3]; | ||
| } else if ( | ||
| // If Scheduler runs in a non-DOM environment, it falls back to a naive | ||
| // implementation using setTimeout. | ||
| typeof window === 'undefined' || | ||
| // Check if MessageChannel is supported, too. | ||
| typeof MessageChannel !== 'function') { | ||
| // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore, | ||
| // fallback to a naive implementation. | ||
| var _callback = null; | ||
| var _flushCallback = function (didTimeout) { | ||
| if (_callback !== null) { | ||
| try { | ||
| _callback(didTimeout); | ||
| } finally { | ||
| _callback = null; | ||
| } | ||
| } | ||
| }; | ||
| requestHostCallback = function (cb, ms) { | ||
| if (_callback !== null) { | ||
| // Protect against re-entrancy. | ||
| setTimeout(requestHostCallback, 0, cb); | ||
| } else { | ||
| _callback = cb; | ||
| setTimeout(_flushCallback, 0, false); | ||
| } | ||
| }; | ||
| cancelHostCallback = function () { | ||
| _callback = null; | ||
| }; | ||
| shouldYieldToHost = function () { | ||
| return false; | ||
| }; | ||
| } else { | ||
| if (typeof console !== 'undefined') { | ||
| // TODO: Remove fb.me link | ||
| if (typeof localRequestAnimationFrame !== 'function') { | ||
| console.error("This browser doesn't support requestAnimationFrame. " + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills'); | ||
| } | ||
| if (typeof localCancelAnimationFrame !== 'function') { | ||
| console.error("This browser doesn't support cancelAnimationFrame. " + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills'); | ||
| } | ||
| } | ||
| var scheduledHostCallback = null; | ||
| var isMessageEventScheduled = false; | ||
| var timeoutTime = -1; | ||
| var isAnimationFrameScheduled = false; | ||
| var isFlushingHostCallback = false; | ||
| var frameDeadline = 0; | ||
| // We start out assuming that we run at 30fps but then the heuristic tracking | ||
| // will adjust this value to a faster fps if we get more frequent animation | ||
| // frames. | ||
| var previousFrameTime = 33; | ||
| var activeFrameTime = 33; | ||
| shouldYieldToHost = function () { | ||
| return frameDeadline <= exports.unstable_now(); | ||
| }; | ||
| // We use the postMessage trick to defer idle work until after the repaint. | ||
| var channel = new MessageChannel(); | ||
| var port = channel.port2; | ||
| channel.port1.onmessage = function (event) { | ||
| isMessageEventScheduled = false; | ||
| var prevScheduledCallback = scheduledHostCallback; | ||
| var prevTimeoutTime = timeoutTime; | ||
| scheduledHostCallback = null; | ||
| timeoutTime = -1; | ||
| var currentTime = exports.unstable_now(); | ||
| var didTimeout = false; | ||
| if (frameDeadline - currentTime <= 0) { | ||
| // There's no time left in this idle period. Check if the callback has | ||
| // a timeout and whether it's been exceeded. | ||
| if (prevTimeoutTime !== -1 && prevTimeoutTime <= currentTime) { | ||
| // Exceeded the timeout. Invoke the callback even though there's no | ||
| // time left. | ||
| didTimeout = true; | ||
| } else { | ||
| // No timeout. | ||
| if (!isAnimationFrameScheduled) { | ||
| // Schedule another animation callback so we retry later. | ||
| isAnimationFrameScheduled = true; | ||
| requestAnimationFrameWithTimeout(animationTick); | ||
| } | ||
| // Exit without invoking the callback. | ||
| scheduledHostCallback = prevScheduledCallback; | ||
| timeoutTime = prevTimeoutTime; | ||
| return; | ||
| } | ||
| } | ||
| if (prevScheduledCallback !== null) { | ||
| isFlushingHostCallback = true; | ||
| try { | ||
| prevScheduledCallback(didTimeout); | ||
| } finally { | ||
| isFlushingHostCallback = false; | ||
| } | ||
| } | ||
| }; | ||
| var animationTick = function (rafTime) { | ||
| if (scheduledHostCallback !== null) { | ||
| // Eagerly schedule the next animation callback at the beginning of the | ||
| // frame. If the scheduler queue is not empty at the end of the frame, it | ||
| // will continue flushing inside that callback. If the queue *is* empty, | ||
| // then it will exit immediately. Posting the callback at the start of the | ||
| // frame ensures it's fired within the earliest possible frame. If we | ||
| // waited until the end of the frame to post the callback, we risk the | ||
| // browser skipping a frame and not firing the callback until the frame | ||
| // after that. | ||
| requestAnimationFrameWithTimeout(animationTick); | ||
| } else { | ||
| // No pending work. Exit. | ||
| isAnimationFrameScheduled = false; | ||
| return; | ||
| } | ||
| var nextFrameTime = rafTime - frameDeadline + activeFrameTime; | ||
| if (nextFrameTime < activeFrameTime && previousFrameTime < activeFrameTime) { | ||
| if (nextFrameTime < 8) { | ||
| // Defensive coding. We don't support higher frame rates than 120hz. | ||
| // If the calculated frame time gets lower than 8, it is probably a bug. | ||
| nextFrameTime = 8; | ||
| } | ||
| // If one frame goes long, then the next one can be short to catch up. | ||
| // If two frames are short in a row, then that's an indication that we | ||
| // actually have a higher frame rate than what we're currently optimizing. | ||
| // We adjust our heuristic dynamically accordingly. For example, if we're | ||
| // running on 120hz display or 90hz VR display. | ||
| // Take the max of the two in case one of them was an anomaly due to | ||
| // missed frame deadlines. | ||
| activeFrameTime = nextFrameTime < previousFrameTime ? previousFrameTime : nextFrameTime; | ||
| } else { | ||
| previousFrameTime = nextFrameTime; | ||
| } | ||
| frameDeadline = rafTime + activeFrameTime; | ||
| if (!isMessageEventScheduled) { | ||
| isMessageEventScheduled = true; | ||
| port.postMessage(undefined); | ||
| } | ||
| }; | ||
| requestHostCallback = function (callback, absoluteTimeout) { | ||
| scheduledHostCallback = callback; | ||
| timeoutTime = absoluteTimeout; | ||
| if (isFlushingHostCallback || absoluteTimeout < 0) { | ||
| // Don't wait for the next frame. Continue working ASAP, in a new event. | ||
| port.postMessage(undefined); | ||
| } else if (!isAnimationFrameScheduled) { | ||
| // If rAF didn't already schedule one, we need to schedule a frame. | ||
| // TODO: If this rAF doesn't materialize because the browser throttles, we | ||
| // might want to still have setTimeout trigger rIC as a backup to ensure | ||
| // that we keep performing work. | ||
| isAnimationFrameScheduled = true; | ||
| requestAnimationFrameWithTimeout(animationTick); | ||
| } | ||
| }; | ||
| cancelHostCallback = function () { | ||
| scheduledHostCallback = null; | ||
| isMessageEventScheduled = false; | ||
| timeoutTime = -1; | ||
| }; | ||
| } | ||
| exports.unstable_ImmediatePriority = ImmediatePriority; | ||
@@ -703,0 +693,0 @@ exports.unstable_UserBlockingPriority = UserBlockingPriority; |
@@ -1,2 +0,2 @@ | ||
| /** @license React v0.0.0-f9e41e3a5 | ||
| /** @license React v0.0.0-fa1e8df11 | ||
| * scheduler.production.min.js | ||
@@ -10,13 +10,13 @@ * | ||
| 'use strict';Object.defineProperty(exports,"__esModule",{value:!0});var d=null,e=!1,g=3,k=-1,l=-1,m=!1,n=!1;function p(){if(!m){var a=d.expirationTime;n?q():n=!0;r(t,a)}} | ||
| function u(){var a=d,b=d.next;if(d===b)d=null;else{var c=d.previous;d=c.next=b;b.previous=c}a.next=a.previous=null;c=a.callback;b=a.expirationTime;a=a.priorityLevel;var f=g,Q=l;g=a;l=b;try{var h=c()}finally{g=f,l=Q}if("function"===typeof h)if(h={callback:h,priorityLevel:a,expirationTime:b,next:null,previous:null},null===d)d=h.next=h.previous=h;else{c=null;a=d;do{if(a.expirationTime>=b){c=a;break}a=a.next}while(a!==d);null===c?c=d:c===d&&(d=h,p());b=c.previous;b.next=c.previous=h;h.next=c;h.previous= | ||
| b}}function v(){if(-1===k&&null!==d&&1===d.priorityLevel){m=!0;try{do u();while(null!==d&&1===d.priorityLevel)}finally{m=!1,null!==d?p():n=!1}}}function t(a){m=!0;var b=e;e=a;try{if(a)for(;null!==d;){var c=exports.unstable_now();if(d.expirationTime<=c){do u();while(null!==d&&d.expirationTime<=c)}else break}else if(null!==d){do u();while(null!==d&&!w())}}finally{m=!1,e=b,null!==d?p():n=!1,v()}} | ||
| var x=Date,y="function"===typeof setTimeout?setTimeout:void 0,z="function"===typeof clearTimeout?clearTimeout:void 0,A="function"===typeof requestAnimationFrame?requestAnimationFrame:void 0,B="function"===typeof cancelAnimationFrame?cancelAnimationFrame:void 0,C,D;function E(a){C=A(function(b){z(D);a(b)});D=y(function(){B(C);a(exports.unstable_now())},100)} | ||
| if("object"===typeof performance&&"function"===typeof performance.now){var F=performance;exports.unstable_now=function(){return F.now()}}else exports.unstable_now=function(){return x.now()};var r,q,w,G=null;"undefined"!==typeof window?G=window:"undefined"!==typeof global&&(G=global); | ||
| if(G&&G._schedMock){var H=G._schedMock;r=H[0];q=H[1];w=H[2];exports.unstable_now=H[3]}else if("undefined"===typeof window||"function"!==typeof MessageChannel){var I=null,J=function(a){if(null!==I)try{I(a)}finally{I=null}};r=function(a){null!==I?setTimeout(r,0,a):(I=a,setTimeout(J,0,!1))};q=function(){I=null};w=function(){return!1}}else{"undefined"!==typeof console&&("function"!==typeof A&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"), | ||
| "function"!==typeof B&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"));var K=null,L=!1,M=-1,N=!1,O=!1,P=0,R=33,S=33;w=function(){return P<=exports.unstable_now()};var T=new MessageChannel,U=T.port2;T.port1.onmessage=function(){L=!1;var a=K,b=M;K=null;M=-1;var c=exports.unstable_now(),f=!1;if(0>=P-c)if(-1!==b&&b<=c)f=!0;else{N||(N=!0,E(V));K=a;M=b;return}if(null!==a){O=!0;try{a(f)}finally{O=!1}}}; | ||
| var V=function(a){if(null!==K){E(V);var b=a-P+S;b<S&&R<S?(8>b&&(b=8),S=b<R?R:b):R=b;P=a+S;L||(L=!0,U.postMessage(void 0))}else N=!1};r=function(a,b){K=a;M=b;O||0>b?U.postMessage(void 0):N||(N=!0,E(V))};q=function(){K=null;L=!1;M=-1}}exports.unstable_ImmediatePriority=1;exports.unstable_UserBlockingPriority=2;exports.unstable_NormalPriority=3;exports.unstable_IdlePriority=5;exports.unstable_LowPriority=4; | ||
| exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=g,f=k;g=a;k=exports.unstable_now();try{return b()}finally{g=c,k=f,v()}};exports.unstable_next=function(a){switch(g){case 1:case 2:case 3:var b=3;break;default:b=g}var c=g,f=k;g=b;k=exports.unstable_now();try{return a()}finally{g=c,k=f,v()}}; | ||
| exports.unstable_scheduleCallback=function(a,b){var c=-1!==k?k:exports.unstable_now();if("object"===typeof b&&null!==b&&"number"===typeof b.timeout)b=c+b.timeout;else switch(g){case 1:b=c+-1;break;case 2:b=c+250;break;case 5:b=c+1073741823;break;case 4:b=c+1E4;break;default:b=c+5E3}a={callback:a,priorityLevel:g,expirationTime:b,next:null,previous:null};if(null===d)d=a.next=a.previous=a,p();else{c=null;var f=d;do{if(f.expirationTime>b){c=f;break}f=f.next}while(f!==d);null===c?c=d:c===d&&(d=a,p()); | ||
| b=c.previous;b.next=c.previous=a;a.next=c;a.previous=b}return a};exports.unstable_cancelCallback=function(a){var b=a.next;if(null!==b){if(b===a)d=null;else{a===d&&(d=b);var c=a.previous;c.next=b;b.previous=c}a.next=a.previous=null}};exports.unstable_wrapCallback=function(a){var b=g;return function(){var c=g,f=k;g=b;k=exports.unstable_now();try{return a.apply(this,arguments)}finally{g=c,k=f,v()}}};exports.unstable_getCurrentPriorityLevel=function(){return g}; | ||
| exports.unstable_shouldYield=function(){return!e&&(null!==d&&d.expirationTime<l||w())};exports.unstable_continueExecution=function(){null!==d&&p()};exports.unstable_pauseExecution=function(){};exports.unstable_getFirstCallbackNode=function(){return d}; | ||
| 'use strict';Object.defineProperty(exports,"__esModule",{value:!0});var d=void 0,f=void 0,g=void 0;exports.unstable_now=void 0;exports.unstable_forceFrameRate=void 0;var k=Date,l="function"===typeof setTimeout?setTimeout:void 0,n="function"===typeof clearTimeout?clearTimeout:void 0,p="function"===typeof requestAnimationFrame?requestAnimationFrame:void 0,q="function"===typeof cancelAnimationFrame?cancelAnimationFrame:void 0,r=void 0,t=void 0; | ||
| function u(a){r=p(function(b){n(t);a(b)});t=l(function(){q(r);a(exports.unstable_now())},100)}if("object"===typeof performance&&"function"===typeof performance.now){var v=performance;exports.unstable_now=function(){return v.now()}}else exports.unstable_now=function(){return k.now()}; | ||
| if("undefined"===typeof window||"function"!==typeof MessageChannel){var w=null,x=function(a){if(null!==w)try{w(a)}finally{w=null}};d=function(a){null!==w?setTimeout(d,0,a):(w=a,setTimeout(x,0,!1))};f=function(){w=null};g=function(){return!1};exports.unstable_forceFrameRate=function(){}}else{"undefined"!==typeof console&&("function"!==typeof p&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!== | ||
| typeof q&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"));var y=null,z=!1,A=-1,B=!1,C=!1,D=0,E=33,F=33,G=!1;g=function(){return D<=exports.unstable_now()};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported"):0<a?(F=Math.floor(1E3/a),G=!0):(F=33,G=!1)};var H=new MessageChannel, | ||
| I=H.port2;H.port1.onmessage=function(){z=!1;var a=y,b=A;y=null;A=-1;var c=exports.unstable_now(),e=!1;if(0>=D-c)if(-1!==b&&b<=c)e=!0;else{B||(B=!0,u(J));y=a;A=b;return}if(null!==a){C=!0;try{a(e)}finally{C=!1}}};var J=function(a){if(null!==y){u(J);var b=a-D+F;b<F&&E<F&&!G?(8>b&&(b=8),F=b<E?E:b):E=b;D=a+F;z||(z=!0,I.postMessage(void 0))}else B=!1};d=function(a,b){y=a;A=b;C||0>b?I.postMessage(void 0):B||(B=!0,u(J))};f=function(){y=null;z=!1;A=-1}}var K=null,L=!1,M=3,N=-1,O=-1,P=!1,Q=!1; | ||
| function R(){if(!P&&null!==K){var a=K.expirationTime;Q?f():Q=!0;d(S,a)}} | ||
| function T(){var a=K,b=K.next;if(K===b)K=null;else{var c=K.previous;K=c.next=b;b.previous=c}a.next=a.previous=null;c=a.callback;b=a.expirationTime;a=a.priorityLevel;var e=M,m=O;M=a;O=b;try{var h=c(L||1===a)}catch(U){throw U;}finally{M=e,O=m}if("function"===typeof h)if(h={callback:h,priorityLevel:a,expirationTime:b,next:null,previous:null},null===K)K=h.next=h.previous=h;else{c=null;a=K;do{if(a.expirationTime>=b){c=a;break}a=a.next}while(a!==K);null===c?c=K:c===K&&(K=h,R());b=c.previous;b.next=c.previous= | ||
| h;h.next=c;h.previous=b}}function S(a){Q=!1;P=!0;var b=L;L=a;try{if(a)for(;null!==K;){var c=exports.unstable_now();if(K.expirationTime<=c){do T();while(null!==K&&K.expirationTime<=c)}else break}else if(null!==K){do T();while(null!==K&&!g())}}finally{P=!1,L=b,R()}}exports.unstable_ImmediatePriority=1;exports.unstable_UserBlockingPriority=2;exports.unstable_NormalPriority=3;exports.unstable_IdlePriority=5;exports.unstable_LowPriority=4; | ||
| exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=M,e=N;M=a;N=exports.unstable_now();try{return b()}catch(m){throw R(),m;}finally{M=c,N=e}};exports.unstable_next=function(a){switch(M){case 1:case 2:case 3:var b=3;break;default:b=M}var c=M,e=N;M=b;N=exports.unstable_now();try{return a()}catch(m){throw R(),m;}finally{M=c,N=e}}; | ||
| exports.unstable_scheduleCallback=function(a,b,c){var e=-1!==N?N:exports.unstable_now();if("object"===typeof c&&null!==c&&"number"===typeof c.timeout)c=e+c.timeout;else switch(a){case 1:c=e+-1;break;case 2:c=e+250;break;case 5:c=e+1073741823;break;case 4:c=e+1E4;break;default:c=e+5E3}a={callback:b,priorityLevel:a,expirationTime:c,next:null,previous:null};if(null===K)K=a.next=a.previous=a,R();else{b=null;e=K;do{if(e.expirationTime>c){b=e;break}e=e.next}while(e!==K);null===b?b=K:b===K&&(K=a,R());c= | ||
| b.previous;c.next=b.previous=a;a.next=b;a.previous=c}return a};exports.unstable_cancelCallback=function(a){var b=a.next;if(null!==b){if(b===a)K=null;else{a===K&&(K=b);var c=a.previous;c.next=b;b.previous=c}a.next=a.previous=null}};exports.unstable_wrapCallback=function(a){var b=M;return function(){var c=M,e=N;M=b;N=exports.unstable_now();try{return a.apply(this,arguments)}catch(m){throw R(),m;}finally{M=c,N=e}}};exports.unstable_getCurrentPriorityLevel=function(){return M}; | ||
| exports.unstable_shouldYield=function(){return!L&&(null!==K&&K.expirationTime<O||g())};exports.unstable_continueExecution=function(){null!==K&&R()};exports.unstable_pauseExecution=function(){};exports.unstable_getFirstCallbackNode=function(){return K}; |
+2
-1
| { | ||
| "name": "scheduler", | ||
| "version": "0.0.0-f9e41e3a5", | ||
| "version": "0.0.0-fa1e8df11", | ||
| "description": "Cooperative scheduler for the browser environment.", | ||
@@ -30,2 +30,3 @@ "main": "index.js", | ||
| "tracing-profiling.js", | ||
| "unstable_mock.js", | ||
| "cjs/", | ||
@@ -32,0 +33,0 @@ "umd/" |
@@ -99,2 +99,9 @@ /** | ||
| function unstable_forceFrameRate() { | ||
| return global.React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Scheduler.unstable_forceFrameRate.apply( | ||
| this, | ||
| arguments | ||
| ); | ||
| } | ||
| return Object.freeze({ | ||
@@ -112,2 +119,3 @@ unstable_now: unstable_now, | ||
| unstable_getFirstCallbackNode: unstable_getFirstCallbackNode, | ||
| unstable_forceFrameRate: unstable_forceFrameRate, | ||
| get unstable_IdlePriority() { | ||
@@ -114,0 +122,0 @@ return global.React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED |
@@ -93,2 +93,9 @@ /** | ||
| function unstable_forceFrameRate() { | ||
| return global.React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Scheduler.unstable_forceFrameRate.apply( | ||
| this, | ||
| arguments | ||
| ); | ||
| } | ||
| return Object.freeze({ | ||
@@ -106,2 +113,3 @@ unstable_now: unstable_now, | ||
| unstable_getFirstCallbackNode: unstable_getFirstCallbackNode, | ||
| unstable_forceFrameRate: unstable_forceFrameRate, | ||
| get unstable_IdlePriority() { | ||
@@ -108,0 +116,0 @@ return global.React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED |
@@ -93,2 +93,9 @@ /** | ||
| function unstable_forceFrameRate() { | ||
| return global.React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Scheduler.unstable_forceFrameRate.apply( | ||
| this, | ||
| arguments | ||
| ); | ||
| } | ||
| return Object.freeze({ | ||
@@ -106,2 +113,3 @@ unstable_now: unstable_now, | ||
| unstable_getFirstCallbackNode: unstable_getFirstCallbackNode, | ||
| unstable_forceFrameRate: unstable_forceFrameRate, | ||
| get unstable_IdlePriority() { | ||
@@ -108,0 +116,0 @@ return global.React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
112153
70.17%23
27.78%2700
68.43%5
66.67%16
77.78%