next
Version:
The React Framework
102 lines (101 loc) • 3.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
0 && (module.exports = {
DEFAULT_SEGMENT_KEY: null,
NOT_FOUND_SEGMENT_KEY: null,
PAGE_SEGMENT_KEY: null,
addSearchParamsIfPageSegment: null,
computeSelectedLayoutSegment: null,
getSegmentValue: null,
getSelectedLayoutSegmentPath: null,
isGroupSegment: null,
isParallelRouteSegment: null
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
DEFAULT_SEGMENT_KEY: function() {
return DEFAULT_SEGMENT_KEY;
},
NOT_FOUND_SEGMENT_KEY: function() {
return NOT_FOUND_SEGMENT_KEY;
},
PAGE_SEGMENT_KEY: function() {
return PAGE_SEGMENT_KEY;
},
addSearchParamsIfPageSegment: function() {
return addSearchParamsIfPageSegment;
},
computeSelectedLayoutSegment: function() {
return computeSelectedLayoutSegment;
},
getSegmentValue: function() {
return getSegmentValue;
},
getSelectedLayoutSegmentPath: function() {
return getSelectedLayoutSegmentPath;
},
isGroupSegment: function() {
return isGroupSegment;
},
isParallelRouteSegment: function() {
return isParallelRouteSegment;
}
});
function getSegmentValue(segment) {
return Array.isArray(segment) ? segment[1] : segment;
}
function isGroupSegment(segment) {
// Use array[0] for performant purpose
return segment[0] === '(' && segment.endsWith(')');
}
function isParallelRouteSegment(segment) {
return segment.startsWith('@') && segment !== '@children';
}
function addSearchParamsIfPageSegment(segment, searchParams) {
const isPageSegment = segment.includes(PAGE_SEGMENT_KEY);
if (isPageSegment) {
const stringifiedQuery = JSON.stringify(searchParams);
return stringifiedQuery !== '{}' ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery : PAGE_SEGMENT_KEY;
}
return segment;
}
function computeSelectedLayoutSegment(segments, parallelRouteKey) {
if (!segments || segments.length === 0) {
return null;
}
// For 'children', use first segment; for other parallel routes, use last segment
const rawSegment = parallelRouteKey === 'children' ? segments[0] : segments[segments.length - 1];
// If the default slot is showing, return null since it's not technically "selected" (it's a fallback)
// Returning an internal value like `__DEFAULT__` would be confusing
return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment;
}
function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) {
let node;
if (first) {
// Use the provided parallel route key on the first parallel route
node = tree[1][parallelRouteKey];
} else {
// After first parallel route prefer children, if there's no children pick the first parallel route.
const parallelRoutes = tree[1];
node = parallelRoutes.children ?? Object.values(parallelRoutes)[0];
}
if (!node) return segmentPath;
const segment = node[0];
let segmentValue = getSegmentValue(segment);
if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {
return segmentPath;
}
segmentPath.push(segmentValue);
return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath);
}
const PAGE_SEGMENT_KEY = '__PAGE__';
const DEFAULT_SEGMENT_KEY = '__DEFAULT__';
const NOT_FOUND_SEGMENT_KEY = '/_not-found';
//# sourceMappingURL=segment.js.map