resolve-rewrites.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = resolveRewrites;
  6. var _pathMatch = require("./path-match");
  7. var _prepareDestination = require("./prepare-destination");
  8. var _removeTrailingSlash = require("./remove-trailing-slash");
  9. var _normalizeLocalePath = require("../../i18n/normalize-locale-path");
  10. var _removeBasePath = require("../../../../client/remove-base-path");
  11. var _parseRelativeUrl = require("./parse-relative-url");
  12. function resolveRewrites(asPath, pages, rewrites, query, resolveHref, locales) {
  13. let matchedPage = false;
  14. let externalDest = false;
  15. let parsedAs = (0, _parseRelativeUrl).parseRelativeUrl(asPath);
  16. let fsPathname = (0, _removeTrailingSlash).removeTrailingSlash((0, _normalizeLocalePath).normalizeLocalePath((0, _removeBasePath).removeBasePath(parsedAs.pathname), locales).pathname);
  17. let resolvedHref;
  18. const handleRewrite = (rewrite)=>{
  19. const matcher = (0, _pathMatch).getPathMatch(rewrite.source + (process.env.__NEXT_TRAILING_SLASH ? '(/)?' : ''), {
  20. removeUnnamedParams: true,
  21. strict: true
  22. });
  23. let params = matcher(parsedAs.pathname);
  24. if ((rewrite.has || rewrite.missing) && params) {
  25. const hasParams = (0, _prepareDestination).matchHas({
  26. headers: {
  27. host: document.location.hostname
  28. },
  29. cookies: document.cookie.split('; ').reduce((acc, item)=>{
  30. const [key, ...value] = item.split('=');
  31. acc[key] = value.join('=');
  32. return acc;
  33. }, {})
  34. }, parsedAs.query, rewrite.has, rewrite.missing);
  35. if (hasParams) {
  36. Object.assign(params, hasParams);
  37. } else {
  38. params = false;
  39. }
  40. }
  41. if (params) {
  42. if (!rewrite.destination) {
  43. // this is a proxied rewrite which isn't handled on the client
  44. externalDest = true;
  45. return true;
  46. }
  47. const destRes = (0, _prepareDestination).prepareDestination({
  48. appendParamsToQuery: true,
  49. destination: rewrite.destination,
  50. params: params,
  51. query: query
  52. });
  53. parsedAs = destRes.parsedDestination;
  54. asPath = destRes.newUrl;
  55. Object.assign(query, destRes.parsedDestination.query);
  56. fsPathname = (0, _removeTrailingSlash).removeTrailingSlash((0, _normalizeLocalePath).normalizeLocalePath((0, _removeBasePath).removeBasePath(asPath), locales).pathname);
  57. if (pages.includes(fsPathname)) {
  58. // check if we now match a page as this means we are done
  59. // resolving the rewrites
  60. matchedPage = true;
  61. resolvedHref = fsPathname;
  62. return true;
  63. }
  64. // check if we match a dynamic-route, if so we break the rewrites chain
  65. resolvedHref = resolveHref(fsPathname);
  66. if (resolvedHref !== asPath && pages.includes(resolvedHref)) {
  67. matchedPage = true;
  68. return true;
  69. }
  70. }
  71. };
  72. let finished = false;
  73. for(let i = 0; i < rewrites.beforeFiles.length; i++){
  74. // we don't end after match in beforeFiles to allow
  75. // continuing through all beforeFiles rewrites
  76. handleRewrite(rewrites.beforeFiles[i]);
  77. }
  78. matchedPage = pages.includes(fsPathname);
  79. if (!matchedPage) {
  80. if (!finished) {
  81. for(let i = 0; i < rewrites.afterFiles.length; i++){
  82. if (handleRewrite(rewrites.afterFiles[i])) {
  83. finished = true;
  84. break;
  85. }
  86. }
  87. }
  88. // check dynamic route before processing fallback rewrites
  89. if (!finished) {
  90. resolvedHref = resolveHref(fsPathname);
  91. matchedPage = pages.includes(resolvedHref);
  92. finished = matchedPage;
  93. }
  94. if (!finished) {
  95. for(let i = 0; i < rewrites.fallback.length; i++){
  96. if (handleRewrite(rewrites.fallback[i])) {
  97. finished = true;
  98. break;
  99. }
  100. }
  101. }
  102. }
  103. return {
  104. asPath,
  105. parsedAs,
  106. matchedPage,
  107. resolvedHref,
  108. externalDest
  109. };
  110. }
  111. //# sourceMappingURL=resolve-rewrites.js.map