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.
		
		
		
		
		
			
		
			
				
	
	
		
			182 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			182 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|     value: true
 | |
| });
 | |
| 0 && (module.exports = {
 | |
|     sendStatusCode: null,
 | |
|     redirect: null,
 | |
|     checkIsOnDemandRevalidate: null,
 | |
|     COOKIE_NAME_PRERENDER_BYPASS: null,
 | |
|     COOKIE_NAME_PRERENDER_DATA: null,
 | |
|     RESPONSE_LIMIT_DEFAULT: null,
 | |
|     SYMBOL_PREVIEW_DATA: null,
 | |
|     SYMBOL_CLEARED_COOKIES: null,
 | |
|     clearPreviewData: null,
 | |
|     ApiError: null,
 | |
|     sendError: null,
 | |
|     setLazyProp: null
 | |
| });
 | |
| function _export(target, all) {
 | |
|     for(var name in all)Object.defineProperty(target, name, {
 | |
|         enumerable: true,
 | |
|         get: all[name]
 | |
|     });
 | |
| }
 | |
| _export(exports, {
 | |
|     sendStatusCode: function() {
 | |
|         return sendStatusCode;
 | |
|     },
 | |
|     redirect: function() {
 | |
|         return redirect;
 | |
|     },
 | |
|     checkIsOnDemandRevalidate: function() {
 | |
|         return checkIsOnDemandRevalidate;
 | |
|     },
 | |
|     COOKIE_NAME_PRERENDER_BYPASS: function() {
 | |
|         return COOKIE_NAME_PRERENDER_BYPASS;
 | |
|     },
 | |
|     COOKIE_NAME_PRERENDER_DATA: function() {
 | |
|         return COOKIE_NAME_PRERENDER_DATA;
 | |
|     },
 | |
|     RESPONSE_LIMIT_DEFAULT: function() {
 | |
|         return RESPONSE_LIMIT_DEFAULT;
 | |
|     },
 | |
|     SYMBOL_PREVIEW_DATA: function() {
 | |
|         return SYMBOL_PREVIEW_DATA;
 | |
|     },
 | |
|     SYMBOL_CLEARED_COOKIES: function() {
 | |
|         return SYMBOL_CLEARED_COOKIES;
 | |
|     },
 | |
|     clearPreviewData: function() {
 | |
|         return clearPreviewData;
 | |
|     },
 | |
|     ApiError: function() {
 | |
|         return ApiError;
 | |
|     },
 | |
|     sendError: function() {
 | |
|         return sendError;
 | |
|     },
 | |
|     setLazyProp: function() {
 | |
|         return setLazyProp;
 | |
|     }
 | |
| });
 | |
| const _headers = require("../web/spec-extension/adapters/headers");
 | |
| const _constants = require("../../lib/constants");
 | |
| function sendStatusCode(res, statusCode) {
 | |
|     res.statusCode = statusCode;
 | |
|     return res;
 | |
| }
 | |
| function redirect(res, statusOrUrl, url) {
 | |
|     if (typeof statusOrUrl === "string") {
 | |
|         url = statusOrUrl;
 | |
|         statusOrUrl = 307;
 | |
|     }
 | |
|     if (typeof statusOrUrl !== "number" || typeof url !== "string") {
 | |
|         throw new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`);
 | |
|     }
 | |
|     res.writeHead(statusOrUrl, {
 | |
|         Location: url
 | |
|     });
 | |
|     res.write(url);
 | |
|     res.end();
 | |
|     return res;
 | |
| }
 | |
| function checkIsOnDemandRevalidate(req, previewProps) {
 | |
|     const headers = _headers.HeadersAdapter.from(req.headers);
 | |
|     const previewModeId = headers.get(_constants.PRERENDER_REVALIDATE_HEADER);
 | |
|     const isOnDemandRevalidate = previewModeId === previewProps.previewModeId;
 | |
|     const revalidateOnlyGenerated = headers.has(_constants.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER);
 | |
|     return {
 | |
|         isOnDemandRevalidate,
 | |
|         revalidateOnlyGenerated
 | |
|     };
 | |
| }
 | |
| const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`;
 | |
| const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`;
 | |
| const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024;
 | |
| const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA);
 | |
| const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS);
 | |
| function clearPreviewData(res, options = {}) {
 | |
|     if (SYMBOL_CLEARED_COOKIES in res) {
 | |
|         return res;
 | |
|     }
 | |
|     const { serialize } = require("next/dist/compiled/cookie");
 | |
|     const previous = res.getHeader("Set-Cookie");
 | |
|     res.setHeader(`Set-Cookie`, [
 | |
|         ...typeof previous === "string" ? [
 | |
|             previous
 | |
|         ] : Array.isArray(previous) ? previous : [],
 | |
|         serialize(COOKIE_NAME_PRERENDER_BYPASS, "", {
 | |
|             // To delete a cookie, set `expires` to a date in the past:
 | |
|             // https://tools.ietf.org/html/rfc6265#section-4.1.1
 | |
|             // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.
 | |
|             expires: new Date(0),
 | |
|             httpOnly: true,
 | |
|             sameSite: process.env.NODE_ENV !== "development" ? "none" : "lax",
 | |
|             secure: process.env.NODE_ENV !== "development",
 | |
|             path: "/",
 | |
|             ...options.path !== undefined ? {
 | |
|                 path: options.path
 | |
|             } : undefined
 | |
|         }),
 | |
|         serialize(COOKIE_NAME_PRERENDER_DATA, "", {
 | |
|             // To delete a cookie, set `expires` to a date in the past:
 | |
|             // https://tools.ietf.org/html/rfc6265#section-4.1.1
 | |
|             // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.
 | |
|             expires: new Date(0),
 | |
|             httpOnly: true,
 | |
|             sameSite: process.env.NODE_ENV !== "development" ? "none" : "lax",
 | |
|             secure: process.env.NODE_ENV !== "development",
 | |
|             path: "/",
 | |
|             ...options.path !== undefined ? {
 | |
|                 path: options.path
 | |
|             } : undefined
 | |
|         })
 | |
|     ]);
 | |
|     Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {
 | |
|         value: true,
 | |
|         enumerable: false
 | |
|     });
 | |
|     return res;
 | |
| }
 | |
| class ApiError extends Error {
 | |
|     constructor(statusCode, message){
 | |
|         super(message);
 | |
|         this.statusCode = statusCode;
 | |
|     }
 | |
| }
 | |
| function sendError(res, statusCode, message) {
 | |
|     res.statusCode = statusCode;
 | |
|     res.statusMessage = message;
 | |
|     res.end(message);
 | |
| }
 | |
| function setLazyProp({ req }, prop, getter) {
 | |
|     const opts = {
 | |
|         configurable: true,
 | |
|         enumerable: true
 | |
|     };
 | |
|     const optsReset = {
 | |
|         ...opts,
 | |
|         writable: true
 | |
|     };
 | |
|     Object.defineProperty(req, prop, {
 | |
|         ...opts,
 | |
|         get: ()=>{
 | |
|             const value = getter();
 | |
|             // we set the property on the object to avoid recalculating it
 | |
|             Object.defineProperty(req, prop, {
 | |
|                 ...optsReset,
 | |
|                 value
 | |
|             });
 | |
|             return value;
 | |
|         },
 | |
|         set: (value)=>{
 | |
|             Object.defineProperty(req, prop, {
 | |
|                 ...optsReset,
 | |
|                 value
 | |
|             });
 | |
|         }
 | |
|     });
 | |
| }
 | |
| 
 | |
| //# sourceMappingURL=index.js.map
 |