index.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. Object.defineProperty(exports, "setRevalidateHeaders", {
  6. enumerable: true,
  7. get: function() {
  8. return _revalidateHeaders.setRevalidateHeaders;
  9. }
  10. });
  11. exports.sendEtagResponse = sendEtagResponse;
  12. exports.sendRenderResult = sendRenderResult;
  13. var _utils = require("../../shared/lib/utils");
  14. var _etag = require("../lib/etag");
  15. var _fresh = _interopRequireDefault(require("next/dist/compiled/fresh"));
  16. var _revalidateHeaders = require("./revalidate-headers");
  17. function _interopRequireDefault(obj) {
  18. return obj && obj.__esModule ? obj : {
  19. default: obj
  20. };
  21. }
  22. function sendEtagResponse(req, res, etag) {
  23. if (etag) {
  24. /**
  25. * The server generating a 304 response MUST generate any of the
  26. * following header fields that would have been sent in a 200 (OK)
  27. * response to the same request: Cache-Control, Content-Location, Date,
  28. * ETag, Expires, and Vary. https://tools.ietf.org/html/rfc7232#section-4.1
  29. */ res.setHeader("ETag", etag);
  30. }
  31. if ((0, _fresh).default(req.headers, {
  32. etag
  33. })) {
  34. res.statusCode = 304;
  35. res.end();
  36. return true;
  37. }
  38. return false;
  39. }
  40. async function sendRenderResult({ req , res , result , type , generateEtags , poweredByHeader , options }) {
  41. if ((0, _utils).isResSent(res)) {
  42. return;
  43. }
  44. if (poweredByHeader && type === "html") {
  45. res.setHeader("X-Powered-By", "Next.js");
  46. }
  47. const payload = result.isDynamic() ? null : await result.toUnchunkedString();
  48. if (payload) {
  49. const etag = generateEtags ? (0, _etag).generateETag(payload) : undefined;
  50. if (sendEtagResponse(req, res, etag)) {
  51. return;
  52. }
  53. }
  54. const resultContentType = result.contentType();
  55. if (!res.getHeader("Content-Type")) {
  56. res.setHeader("Content-Type", resultContentType ? resultContentType : type === "json" ? "application/json" : "text/html; charset=utf-8");
  57. }
  58. if (payload) {
  59. res.setHeader("Content-Length", Buffer.byteLength(payload));
  60. }
  61. if (options != null) {
  62. (0, _revalidateHeaders).setRevalidateHeaders(res, options);
  63. }
  64. if (req.method === "HEAD") {
  65. res.end(null);
  66. } else if (payload) {
  67. res.end(payload);
  68. } else {
  69. await result.pipe(res);
  70. }
  71. }
  72. //# sourceMappingURL=index.js.map