{"version":3,"sources":["../../../../../src/client/components/router-reducer/reducers/server-patch-reducer.ts"],"sourcesContent":["import { createHrefFromUrl } from '../create-href-from-url'\nimport { applyRouterStatePatchToTree } from '../apply-router-state-patch-to-tree'\nimport { isNavigatingToNewRootLayout } from '../is-navigating-to-new-root-layout'\nimport type {\n ServerPatchAction,\n ReducerState,\n ReadonlyReducerState,\n Mutable,\n} from '../router-reducer-types'\nimport { handleExternalUrl } from './navigate-reducer'\nimport { applyFlightData } from '../apply-flight-data'\nimport { handleMutable } from '../handle-mutable'\nimport type { CacheNode } from '../../../../shared/lib/app-router-types'\nimport { createEmptyCacheNode } from '../../app-router'\n\nexport function serverPatchReducer(\n state: ReadonlyReducerState,\n action: ServerPatchAction\n): ReducerState {\n const { serverResponse, navigatedAt } = action\n\n const mutable: Mutable = {}\n\n mutable.preserveCustomHistoryState = false\n\n // Handle case when navigating to page in `pages` from `app`\n if (typeof serverResponse === 'string') {\n return handleExternalUrl(\n state,\n mutable,\n serverResponse,\n state.pushRef.pendingPush\n )\n }\n\n const { flightData, canonicalUrl, renderedSearch } = serverResponse\n\n let currentTree = state.tree\n let currentCache = state.cache\n\n for (const normalizedFlightData of flightData) {\n const { segmentPath: flightSegmentPath, tree: treePatch } =\n normalizedFlightData\n\n const newTree = applyRouterStatePatchToTree(\n // TODO-APP: remove ''\n ['', ...flightSegmentPath],\n currentTree,\n treePatch,\n state.canonicalUrl\n )\n\n // `applyRouterStatePatchToTree` returns `null` when it determined that the server response is not applicable to the current tree.\n // In other words, the server responded with a tree that doesn't match what the client is currently rendering.\n // This can happen if the server patch action took longer to resolve than a subsequent navigation which would have changed the tree.\n // Previously this case triggered an MPA navigation but it should be safe to simply discard the server response rather than forcing\n // the entire page to reload.\n if (newTree === null) {\n return state\n }\n\n if (isNavigatingToNewRootLayout(currentTree, newTree)) {\n return handleExternalUrl(\n state,\n mutable,\n state.canonicalUrl,\n state.pushRef.pendingPush\n )\n }\n\n mutable.canonicalUrl = createHrefFromUrl(canonicalUrl)\n\n const cache: CacheNode = createEmptyCacheNode()\n applyFlightData(navigatedAt, currentCache, cache, normalizedFlightData)\n\n mutable.patchedTree = newTree\n mutable.renderedSearch = renderedSearch\n mutable.cache = cache\n\n currentCache = cache\n currentTree = newTree\n }\n\n return handleMutable(state, mutable)\n}\n"],"names":["serverPatchReducer","state","action","serverResponse","navigatedAt","mutable","preserveCustomHistoryState","handleExternalUrl","pushRef","pendingPush","flightData","canonicalUrl","renderedSearch","currentTree","tree","currentCache","cache","normalizedFlightData","segmentPath","flightSegmentPath","treePatch","newTree","applyRouterStatePatchToTree","isNavigatingToNewRootLayout","createHrefFromUrl","createEmptyCacheNode","applyFlightData","patchedTree","handleMutable"],"mappings":";;;;+BAegBA;;;eAAAA;;;mCAfkB;6CACU;6CACA;iCAOV;iCACF;+BACF;2BAEO;AAE9B,SAASA,mBACdC,KAA2B,EAC3BC,MAAyB;IAEzB,MAAM,EAAEC,cAAc,EAAEC,WAAW,EAAE,GAAGF;IAExC,MAAMG,UAAmB,CAAC;IAE1BA,QAAQC,0BAA0B,GAAG;IAErC,4DAA4D;IAC5D,IAAI,OAAOH,mBAAmB,UAAU;QACtC,OAAOI,IAAAA,kCAAiB,EACtBN,OACAI,SACAF,gBACAF,MAAMO,OAAO,CAACC,WAAW;IAE7B;IAEA,MAAM,EAAEC,UAAU,EAAEC,YAAY,EAAEC,cAAc,EAAE,GAAGT;IAErD,IAAIU,cAAcZ,MAAMa,IAAI;IAC5B,IAAIC,eAAed,MAAMe,KAAK;IAE9B,KAAK,MAAMC,wBAAwBP,WAAY;QAC7C,MAAM,EAAEQ,aAAaC,iBAAiB,EAAEL,MAAMM,SAAS,EAAE,GACvDH;QAEF,MAAMI,UAAUC,IAAAA,wDAA2B,EACzC,sBAAsB;QACtB;YAAC;eAAOH;SAAkB,EAC1BN,aACAO,WACAnB,MAAMU,YAAY;QAGpB,kIAAkI;QAClI,8GAA8G;QAC9G,oIAAoI;QACpI,mIAAmI;QACnI,6BAA6B;QAC7B,IAAIU,YAAY,MAAM;YACpB,OAAOpB;QACT;QAEA,IAAIsB,IAAAA,wDAA2B,EAACV,aAAaQ,UAAU;YACrD,OAAOd,IAAAA,kCAAiB,EACtBN,OACAI,SACAJ,MAAMU,YAAY,EAClBV,MAAMO,OAAO,CAACC,WAAW;QAE7B;QAEAJ,QAAQM,YAAY,GAAGa,IAAAA,oCAAiB,EAACb;QAEzC,MAAMK,QAAmBS,IAAAA,+BAAoB;QAC7CC,IAAAA,gCAAe,EAACtB,aAAaW,cAAcC,OAAOC;QAElDZ,QAAQsB,WAAW,GAAGN;QACtBhB,QAAQO,cAAc,GAAGA;QACzBP,QAAQW,KAAK,GAAGA;QAEhBD,eAAeC;QACfH,cAAcQ;IAChB;IAEA,OAAOO,IAAAA,4BAAa,EAAC3B,OAAOI;AAC9B","ignoreList":[0]}