UNPKG

next

Version:

The React Framework

53 lines (52 loc) 2.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "interpolateAs", { enumerable: true, get: function() { return interpolateAs; } }); const _routematcher = require("./route-matcher"); const _routeregex = require("./route-regex"); function interpolateAs(route, asPathname, query) { let interpolatedRoute = ''; const dynamicRegex = (0, _routeregex.getRouteRegex)(route); const dynamicGroups = dynamicRegex.groups; const dynamicMatches = // Try to match the dynamic route against the asPath (asPathname !== route ? (0, _routematcher.getRouteMatcher)(dynamicRegex)(asPathname) : '') || // Fall back to reading the values from the href // TODO: should this take priority; also need to change in the router. query; interpolatedRoute = route; const params = Object.keys(dynamicGroups); if (!params.every((param)=>{ let value = dynamicMatches[param] || ''; const { repeat, optional } = dynamicGroups[param]; // support single-level catch-all // TODO: more robust handling for user-error (passing `/`) let replaced = "[" + (repeat ? '...' : '') + param + "]"; if (optional) { replaced = (!value ? '/' : '') + "[" + replaced + "]"; } if (repeat && !Array.isArray(value)) value = [ value ]; return (optional || param in dynamicMatches) && // Interpolate group into data URL if present (interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(// these values should be fully encoded instead of just // path delimiter escaped since they are being inserted // into the URL and we expect URL encoded segments // when parsing dynamic route params (segment)=>encodeURIComponent(segment)).join('/') : encodeURIComponent(value)) || '/'); })) { interpolatedRoute = '' // did not satisfy all requirements ; // n.b. We ignore this error because we handle warning for this case in // development in the `<Link>` component directly. } return { params, result: interpolatedRoute }; } //# sourceMappingURL=interpolate-as.js.map