getInnerRequest.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const { isRelativeRequest } = require("./util/path");
  7. /** @typedef {import("./Resolver")} Resolver */
  8. /** @typedef {import("./Resolver").ResolveRequest} ResolveRequest */
  9. /**
  10. * @param {Resolver} resolver resolver
  11. * @param {ResolveRequest} request string
  12. * @returns {string} inner request
  13. */
  14. module.exports = function getInnerRequest(resolver, request) {
  15. if (
  16. typeof request.__innerRequest === "string" &&
  17. request.__innerRequest_request === request.request &&
  18. request.__innerRequest_relativePath === request.relativePath
  19. ) {
  20. return request.__innerRequest;
  21. }
  22. /** @type {string | undefined} */
  23. let innerRequest;
  24. if (request.request) {
  25. innerRequest = request.request;
  26. if (request.relativePath && isRelativeRequest(innerRequest)) {
  27. innerRequest = resolver.join(request.relativePath, innerRequest);
  28. }
  29. } else {
  30. innerRequest = request.relativePath;
  31. }
  32. // eslint-disable-next-line camelcase
  33. request.__innerRequest_request = request.request;
  34. // eslint-disable-next-line camelcase
  35. request.__innerRequest_relativePath = request.relativePath;
  36. return (request.__innerRequest = /** @type {string} */ (innerRequest));
  37. };