Spaces:
Running
Running
| ; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| 0 && (module.exports = { | |
| PARAMETER_PATTERN: null, | |
| getDynamicParam: null, | |
| interpolateParallelRouteParams: null, | |
| parseMatchedParameter: null, | |
| parseParameter: null | |
| }); | |
| function _export(target, all) { | |
| for(var name in all)Object.defineProperty(target, name, { | |
| enumerable: true, | |
| get: all[name] | |
| }); | |
| } | |
| _export(exports, { | |
| PARAMETER_PATTERN: function() { | |
| return PARAMETER_PATTERN; | |
| }, | |
| getDynamicParam: function() { | |
| return getDynamicParam; | |
| }, | |
| interpolateParallelRouteParams: function() { | |
| return interpolateParallelRouteParams; | |
| }, | |
| parseMatchedParameter: function() { | |
| return parseMatchedParameter; | |
| }, | |
| parseParameter: function() { | |
| return parseParameter; | |
| } | |
| }); | |
| const _invarianterror = require("../../invariant-error"); | |
| const _parseloadertree = require("./parse-loader-tree"); | |
| const _app = require("../routes/app"); | |
| const _resolveparamvalue = require("./resolve-param-value"); | |
| /** | |
| * Gets the value of a param from the params object. This correctly handles the | |
| * case where the param is a fallback route param and encodes the resulting | |
| * value. | |
| * | |
| * @param interpolatedParams - The params object. | |
| * @param segmentKey - The key of the segment. | |
| * @param fallbackRouteParams - The fallback route params. | |
| * @returns The value of the param. | |
| */ function getParamValue(interpolatedParams, segmentKey, fallbackRouteParams) { | |
| let value = interpolatedParams[segmentKey]; | |
| if (fallbackRouteParams?.has(segmentKey)) { | |
| // We know that the fallback route params has the segment key because we | |
| // checked that above. | |
| const [searchValue] = fallbackRouteParams.get(segmentKey); | |
| value = searchValue; | |
| } else if (Array.isArray(value)) { | |
| value = value.map((i)=>encodeURIComponent(i)); | |
| } else if (typeof value === 'string') { | |
| value = encodeURIComponent(value); | |
| } | |
| return value; | |
| } | |
| function interpolateParallelRouteParams(loaderTree, params, pagePath, fallbackRouteParams) { | |
| const interpolated = structuredClone(params); | |
| // Stack-based traversal with depth tracking | |
| const stack = [ | |
| { | |
| tree: loaderTree, | |
| depth: 0 | |
| } | |
| ]; | |
| // Parse the route from the provided page path. | |
| const route = (0, _app.parseAppRoute)(pagePath, true); | |
| while(stack.length > 0){ | |
| const { tree, depth } = stack.pop(); | |
| const { segment, parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); | |
| const appSegment = (0, _app.parseAppRouteSegment)(segment); | |
| if (appSegment?.type === 'dynamic' && !interpolated.hasOwnProperty(appSegment.param.paramName) && // If the param is in the fallback route params, we don't need to | |
| // interpolate it because it's already marked as being unknown. | |
| !fallbackRouteParams?.has(appSegment.param.paramName)) { | |
| const { paramName, paramType } = appSegment.param; | |
| const paramValue = (0, _resolveparamvalue.resolveParamValue)(paramName, paramType, depth, route, interpolated); | |
| if (paramValue !== undefined) { | |
| interpolated[paramName] = paramValue; | |
| } else if (paramType !== 'optional-catchall') { | |
| throw Object.defineProperty(new _invarianterror.InvariantError(`Could not resolve param value for segment: ${paramName}`), "__NEXT_ERROR_CODE", { | |
| value: "E932", | |
| enumerable: false, | |
| configurable: true | |
| }); | |
| } | |
| } | |
| // Calculate next depth - increment if this is not a route group and not empty | |
| let nextDepth = depth; | |
| if (appSegment && appSegment.type !== 'route-group' && appSegment.type !== 'parallel-route') { | |
| nextDepth++; | |
| } | |
| // Add all parallel routes to the stack for processing | |
| for (const parallelRoute of Object.values(parallelRoutes)){ | |
| stack.push({ | |
| tree: parallelRoute, | |
| depth: nextDepth | |
| }); | |
| } | |
| } | |
| return interpolated; | |
| } | |
| function getDynamicParam(interpolatedParams, segmentKey, dynamicParamType, fallbackRouteParams) { | |
| let value = getParamValue(interpolatedParams, segmentKey, fallbackRouteParams); | |
| // handle the case where an optional catchall does not have a value, | |
| // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard` | |
| if (!value || value.length === 0) { | |
| if (dynamicParamType === 'oc') { | |
| return { | |
| param: segmentKey, | |
| value: null, | |
| type: dynamicParamType, | |
| treeSegment: [ | |
| segmentKey, | |
| '', | |
| dynamicParamType | |
| ] | |
| }; | |
| } | |
| throw Object.defineProperty(new _invarianterror.InvariantError(`Missing value for segment key: "${segmentKey}" with dynamic param type: ${dynamicParamType}`), "__NEXT_ERROR_CODE", { | |
| value: "E864", | |
| enumerable: false, | |
| configurable: true | |
| }); | |
| } | |
| return { | |
| param: segmentKey, | |
| // The value that is passed to user code. | |
| value, | |
| // The value that is rendered in the router tree. | |
| treeSegment: [ | |
| segmentKey, | |
| Array.isArray(value) ? value.join('/') : value, | |
| dynamicParamType | |
| ], | |
| type: dynamicParamType | |
| }; | |
| } | |
| const PARAMETER_PATTERN = /^([^[]*)\[((?:\[[^\]]*\])|[^\]]+)\](.*)$/; | |
| function parseParameter(param) { | |
| const match = param.match(PARAMETER_PATTERN); | |
| if (!match) { | |
| return parseMatchedParameter(param); | |
| } | |
| return parseMatchedParameter(match[2]); | |
| } | |
| function parseMatchedParameter(param) { | |
| const optional = param.startsWith('[') && param.endsWith(']'); | |
| if (optional) { | |
| param = param.slice(1, -1); | |
| } | |
| const repeat = param.startsWith('...'); | |
| if (repeat) { | |
| param = param.slice(3); | |
| } | |
| return { | |
| key: param, | |
| repeat, | |
| optional | |
| }; | |
| } | |
| //# sourceMappingURL=get-dynamic-param.js.map |