You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			79 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											9 months ago
										 | "use strict"; | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |     value: true | ||
|  | }); | ||
|  | Object.defineProperty(exports, "resolveHref", { | ||
|  |     enumerable: true, | ||
|  |     get: function() { | ||
|  |         return resolveHref; | ||
|  |     } | ||
|  | }); | ||
|  | const _querystring = require("../shared/lib/router/utils/querystring"); | ||
|  | const _formaturl = require("../shared/lib/router/utils/format-url"); | ||
|  | const _omit = require("../shared/lib/router/utils/omit"); | ||
|  | const _utils = require("../shared/lib/utils"); | ||
|  | const _normalizetrailingslash = require("./normalize-trailing-slash"); | ||
|  | const _islocalurl = require("../shared/lib/router/utils/is-local-url"); | ||
|  | const _utils1 = require("../shared/lib/router/utils"); | ||
|  | const _interpolateas = require("../shared/lib/router/utils/interpolate-as"); | ||
|  | function resolveHref(router, href, resolveAs) { | ||
|  |     // we use a dummy base url for relative urls
 | ||
|  |     let base; | ||
|  |     let urlAsString = typeof href === "string" ? href : (0, _formaturl.formatWithValidation)(href); | ||
|  |     // repeated slashes and backslashes in the URL are considered
 | ||
|  |     // invalid and will never match a Next.js page/file
 | ||
|  |     const urlProtoMatch = urlAsString.match(/^[a-zA-Z]{1,}:\/\//); | ||
|  |     const urlAsStringNoProto = urlProtoMatch ? urlAsString.slice(urlProtoMatch[0].length) : urlAsString; | ||
|  |     const urlParts = urlAsStringNoProto.split("?", 1); | ||
|  |     if ((urlParts[0] || "").match(/(\/\/|\\)/)) { | ||
|  |         console.error("Invalid href '" + urlAsString + "' passed to next/router in page: '" + router.pathname + "'. Repeated forward-slashes (//) or backslashes \\ are not valid in the href."); | ||
|  |         const normalizedUrl = (0, _utils.normalizeRepeatedSlashes)(urlAsStringNoProto); | ||
|  |         urlAsString = (urlProtoMatch ? urlProtoMatch[0] : "") + normalizedUrl; | ||
|  |     } | ||
|  |     // Return because it cannot be routed by the Next.js router
 | ||
|  |     if (!(0, _islocalurl.isLocalURL)(urlAsString)) { | ||
|  |         return resolveAs ? [ | ||
|  |             urlAsString | ||
|  |         ] : urlAsString; | ||
|  |     } | ||
|  |     try { | ||
|  |         base = new URL(urlAsString.startsWith("#") ? router.asPath : router.pathname, "http://n"); | ||
|  |     } catch (_) { | ||
|  |         // fallback to / for invalid asPath values e.g. //
 | ||
|  |         base = new URL("/", "http://n"); | ||
|  |     } | ||
|  |     try { | ||
|  |         const finalUrl = new URL(urlAsString, base); | ||
|  |         finalUrl.pathname = (0, _normalizetrailingslash.normalizePathTrailingSlash)(finalUrl.pathname); | ||
|  |         let interpolatedAs = ""; | ||
|  |         if ((0, _utils1.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) { | ||
|  |             const query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams); | ||
|  |             const { result, params } = (0, _interpolateas.interpolateAs)(finalUrl.pathname, finalUrl.pathname, query); | ||
|  |             if (result) { | ||
|  |                 interpolatedAs = (0, _formaturl.formatWithValidation)({ | ||
|  |                     pathname: result, | ||
|  |                     hash: finalUrl.hash, | ||
|  |                     query: (0, _omit.omit)(query, params) | ||
|  |                 }); | ||
|  |             } | ||
|  |         } | ||
|  |         // if the origin didn't change, it means we received a relative href
 | ||
|  |         const resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href; | ||
|  |         return resolveAs ? [ | ||
|  |             resolvedHref, | ||
|  |             interpolatedAs || resolvedHref | ||
|  |         ] : resolvedHref; | ||
|  |     } catch (_) { | ||
|  |         return resolveAs ? [ | ||
|  |             urlAsString | ||
|  |         ] : urlAsString; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | 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=resolve-href.js.map
 |