UNPKG

next

Version:

The React Framework

54 lines (52 loc) 2.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "restoreReducer", { enumerable: true, get: function() { return restoreReducer; } }); const _createhreffromurl = require("../create-href-from-url"); const _computechangedpath = require("../compute-changed-path"); const _pprnavigations = require("../ppr-navigations"); function restoreReducer(state, action) { const { url, tree } = action; const href = (0, _createhreffromurl.createHrefFromUrl)(url); // This action is used to restore the router state from the history state. // However, it's possible that the history state no longer contains the `FlightRouterState`. // We will copy over the internal state on pushState/replaceState events, but if a history entry // occurred before hydration, or if the user navigated to a hash using a regular anchor link, // the history state will not contain the `FlightRouterState`. // In this case, we'll continue to use the existing tree so the router doesn't get into an invalid state. const treeToRestore = tree || state.tree; const oldCache = state.cache; const newCache = process.env.__NEXT_PPR ? // data for any segment whose dynamic data was already received. This // prevents an unnecessary flash back to PPR state during a // back/forward navigation. (0, _pprnavigations.updateCacheNodeOnPopstateRestoration)(oldCache, treeToRestore) : oldCache; var _extractPathFromFlightRouterState; return { // Set canonical url canonicalUrl: href, pushRef: { pendingPush: false, mpaNavigation: false, // Ensures that the custom history state that was set is preserved when applying this update. preserveCustomHistoryState: true }, focusAndScrollRef: state.focusAndScrollRef, cache: newCache, prefetchCache: state.prefetchCache, // Restore provided tree tree: treeToRestore, nextUrl: (_extractPathFromFlightRouterState = (0, _computechangedpath.extractPathFromFlightRouterState)(treeToRestore)) != null ? _extractPathFromFlightRouterState : url.pathname }; } if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { Object.defineProperty(exports.default, '__esModule', { value: true }); Object.assign(exports.default, exports); module.exports = exports.default; } //# sourceMappingURL=restore-reducer.js.map