Files
Shifted/node_modules/next/dist/client/flight-data-helpers.js
2026-02-10 01:14:19 +00:00

67 lines
2.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "prepareFlightRouterStateForRequest", {
enumerable: true,
get: function() {
return prepareFlightRouterStateForRequest;
}
});
const _segment = require("../shared/lib/segment");
function prepareFlightRouterStateForRequest(flightRouterState, isHmrRefresh) {
// HMR requests need the complete, unmodified state for proper functionality
if (isHmrRefresh) {
return encodeURIComponent(JSON.stringify(flightRouterState));
}
return encodeURIComponent(JSON.stringify(stripClientOnlyDataFromFlightRouterState(flightRouterState)));
}
/**
* Recursively strips client-only data from FlightRouterState while preserving
* server-needed information for proper rendering decisions.
*/ function stripClientOnlyDataFromFlightRouterState(flightRouterState) {
const [segment, parallelRoutes, , refreshMarker, isRootLayout] = flightRouterState;
// __PAGE__ segments are always fetched from the server, so there's
// no need to send them up
const cleanedSegment = stripSearchParamsFromPageSegment(segment);
// Recursively process parallel routes
const cleanedParallelRoutes = {};
for (const [key, childState] of Object.entries(parallelRoutes)){
cleanedParallelRoutes[key] = stripClientOnlyDataFromFlightRouterState(childState);
}
const result = [
cleanedSegment,
cleanedParallelRoutes,
null,
shouldPreserveRefreshMarker(refreshMarker) ? refreshMarker : null
];
// Append optional fields if present
if (isRootLayout !== undefined) {
result[4] = isRootLayout;
}
return result;
}
/**
* Strips search parameters from __PAGE__ segments to prevent sensitive
* client-side data from being sent to the server.
*/ function stripSearchParamsFromPageSegment(segment) {
if (typeof segment === "string" && segment.startsWith(_segment.PAGE_SEGMENT_KEY + "?")) {
return _segment.PAGE_SEGMENT_KEY;
}
return segment;
}
/**
* Determines whether the refresh marker should be sent to the server
* Client-only markers like 'refresh' are stripped, while server-needed markers
* like 'refetch' and 'inside-shared-layout' are preserved.
*/ function shouldPreserveRefreshMarker(refreshMarker) {
return Boolean(refreshMarker && refreshMarker !== "refresh");
}
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=flight-data-helpers.js.map