UNPKG

next

Version:

The React Framework

118 lines (117 loc) 4.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return resolveRewrites; } }); const _pathmatch = require("./path-match"); const _preparedestination = require("./prepare-destination"); const _removetrailingslash = require("./remove-trailing-slash"); const _normalizelocalepath = require("../../i18n/normalize-locale-path"); const _removebasepath = require("../../../../client/remove-base-path"); const _parserelativeurl = require("./parse-relative-url"); function resolveRewrites(asPath, pages, rewrites, query, resolveHref, locales) { let matchedPage = false; let externalDest = false; let parsedAs = (0, _parserelativeurl.parseRelativeUrl)(asPath); let fsPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedAs.pathname), locales).pathname); let resolvedHref; const handleRewrite = (rewrite)=>{ const matcher = (0, _pathmatch.getPathMatch)(rewrite.source + (process.env.__NEXT_TRAILING_SLASH ? '(/)?' : ''), { removeUnnamedParams: true, strict: true }); let params = matcher(parsedAs.pathname); if ((rewrite.has || rewrite.missing) && params) { const hasParams = (0, _preparedestination.matchHas)({ headers: { host: document.location.hostname, 'user-agent': navigator.userAgent }, cookies: document.cookie.split('; ').reduce((acc, item)=>{ const [key, ...value] = item.split('='); acc[key] = value.join('='); return acc; }, {}) }, parsedAs.query, rewrite.has, rewrite.missing); if (hasParams) { Object.assign(params, hasParams); } else { params = false; } } if (params) { if (!rewrite.destination) { // this is a proxied rewrite which isn't handled on the client externalDest = true; return true; } const destRes = (0, _preparedestination.prepareDestination)({ appendParamsToQuery: true, destination: rewrite.destination, params: params, query: query }); parsedAs = destRes.parsedDestination; asPath = destRes.newUrl; Object.assign(query, destRes.parsedDestination.query); fsPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(asPath), locales).pathname); if (pages.includes(fsPathname)) { // check if we now match a page as this means we are done // resolving the rewrites matchedPage = true; resolvedHref = fsPathname; return true; } // check if we match a dynamic-route, if so we break the rewrites chain resolvedHref = resolveHref(fsPathname); if (resolvedHref !== asPath && pages.includes(resolvedHref)) { matchedPage = true; return true; } } }; let finished = false; for(let i = 0; i < rewrites.beforeFiles.length; i++){ // we don't end after match in beforeFiles to allow // continuing through all beforeFiles rewrites handleRewrite(rewrites.beforeFiles[i]); } matchedPage = pages.includes(fsPathname); if (!matchedPage) { if (!finished) { for(let i = 0; i < rewrites.afterFiles.length; i++){ if (handleRewrite(rewrites.afterFiles[i])) { finished = true; break; } } } // check dynamic route before processing fallback rewrites if (!finished) { resolvedHref = resolveHref(fsPathname); matchedPage = pages.includes(resolvedHref); finished = matchedPage; } if (!finished) { for(let i = 0; i < rewrites.fallback.length; i++){ if (handleRewrite(rewrites.fallback[i])) { finished = true; break; } } } } return { asPath, parsedAs, matchedPage, resolvedHref, externalDest }; } //# sourceMappingURL=resolve-rewrites.js.map