151 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
"use strict";
 | 
						|
Object.defineProperty(exports, "__esModule", {
 | 
						|
    value: true
 | 
						|
});
 | 
						|
0 && (module.exports = {
 | 
						|
    fromNodeOutgoingHttpHeaders: null,
 | 
						|
    normalizeNextQueryParam: null,
 | 
						|
    splitCookiesString: null,
 | 
						|
    toNodeOutgoingHttpHeaders: null,
 | 
						|
    validateURL: null
 | 
						|
});
 | 
						|
function _export(target, all) {
 | 
						|
    for(var name in all)Object.defineProperty(target, name, {
 | 
						|
        enumerable: true,
 | 
						|
        get: all[name]
 | 
						|
    });
 | 
						|
}
 | 
						|
_export(exports, {
 | 
						|
    fromNodeOutgoingHttpHeaders: function() {
 | 
						|
        return fromNodeOutgoingHttpHeaders;
 | 
						|
    },
 | 
						|
    normalizeNextQueryParam: function() {
 | 
						|
        return normalizeNextQueryParam;
 | 
						|
    },
 | 
						|
    splitCookiesString: function() {
 | 
						|
        return splitCookiesString;
 | 
						|
    },
 | 
						|
    toNodeOutgoingHttpHeaders: function() {
 | 
						|
        return toNodeOutgoingHttpHeaders;
 | 
						|
    },
 | 
						|
    validateURL: function() {
 | 
						|
        return validateURL;
 | 
						|
    }
 | 
						|
});
 | 
						|
const _constants = require("../../lib/constants");
 | 
						|
function fromNodeOutgoingHttpHeaders(nodeHeaders) {
 | 
						|
    const headers = new Headers();
 | 
						|
    for (let [key, value] of Object.entries(nodeHeaders)){
 | 
						|
        const values = Array.isArray(value) ? value : [
 | 
						|
            value
 | 
						|
        ];
 | 
						|
        for (let v of values){
 | 
						|
            if (typeof v === 'undefined') continue;
 | 
						|
            if (typeof v === 'number') {
 | 
						|
                v = v.toString();
 | 
						|
            }
 | 
						|
            headers.append(key, v);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return headers;
 | 
						|
}
 | 
						|
function splitCookiesString(cookiesString) {
 | 
						|
    var cookiesStrings = [];
 | 
						|
    var pos = 0;
 | 
						|
    var start;
 | 
						|
    var ch;
 | 
						|
    var lastComma;
 | 
						|
    var nextStart;
 | 
						|
    var cookiesSeparatorFound;
 | 
						|
    function skipWhitespace() {
 | 
						|
        while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){
 | 
						|
            pos += 1;
 | 
						|
        }
 | 
						|
        return pos < cookiesString.length;
 | 
						|
    }
 | 
						|
    function notSpecialChar() {
 | 
						|
        ch = cookiesString.charAt(pos);
 | 
						|
        return ch !== '=' && ch !== ';' && ch !== ',';
 | 
						|
    }
 | 
						|
    while(pos < cookiesString.length){
 | 
						|
        start = pos;
 | 
						|
        cookiesSeparatorFound = false;
 | 
						|
        while(skipWhitespace()){
 | 
						|
            ch = cookiesString.charAt(pos);
 | 
						|
            if (ch === ',') {
 | 
						|
                // ',' is a cookie separator if we have later first '=', not ';' or ','
 | 
						|
                lastComma = pos;
 | 
						|
                pos += 1;
 | 
						|
                skipWhitespace();
 | 
						|
                nextStart = pos;
 | 
						|
                while(pos < cookiesString.length && notSpecialChar()){
 | 
						|
                    pos += 1;
 | 
						|
                }
 | 
						|
                // currently special character
 | 
						|
                if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {
 | 
						|
                    // we found cookies separator
 | 
						|
                    cookiesSeparatorFound = true;
 | 
						|
                    // pos is inside the next cookie, so back up and return it.
 | 
						|
                    pos = nextStart;
 | 
						|
                    cookiesStrings.push(cookiesString.substring(start, lastComma));
 | 
						|
                    start = pos;
 | 
						|
                } else {
 | 
						|
                    // in param ',' or param separator ';',
 | 
						|
                    // we continue from that comma
 | 
						|
                    pos = lastComma + 1;
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                pos += 1;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if (!cookiesSeparatorFound || pos >= cookiesString.length) {
 | 
						|
            cookiesStrings.push(cookiesString.substring(start, cookiesString.length));
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return cookiesStrings;
 | 
						|
}
 | 
						|
function toNodeOutgoingHttpHeaders(headers) {
 | 
						|
    const nodeHeaders = {};
 | 
						|
    const cookies = [];
 | 
						|
    if (headers) {
 | 
						|
        for (const [key, value] of headers.entries()){
 | 
						|
            if (key.toLowerCase() === 'set-cookie') {
 | 
						|
                // We may have gotten a comma joined string of cookies, or multiple
 | 
						|
                // set-cookie headers. We need to merge them into one header array
 | 
						|
                // to represent all the cookies.
 | 
						|
                cookies.push(...splitCookiesString(value));
 | 
						|
                nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies;
 | 
						|
            } else {
 | 
						|
                nodeHeaders[key] = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return nodeHeaders;
 | 
						|
}
 | 
						|
function validateURL(url) {
 | 
						|
    try {
 | 
						|
        return String(new URL(String(url)));
 | 
						|
    } catch (error) {
 | 
						|
        throw Object.defineProperty(new Error(`URL is malformed "${String(url)}". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`, {
 | 
						|
            cause: error
 | 
						|
        }), "__NEXT_ERROR_CODE", {
 | 
						|
            value: "E61",
 | 
						|
            enumerable: false,
 | 
						|
            configurable: true
 | 
						|
        });
 | 
						|
    }
 | 
						|
}
 | 
						|
function normalizeNextQueryParam(key) {
 | 
						|
    const prefixes = [
 | 
						|
        _constants.NEXT_QUERY_PARAM_PREFIX,
 | 
						|
        _constants.NEXT_INTERCEPTION_MARKER_PREFIX
 | 
						|
    ];
 | 
						|
    for (const prefix of prefixes){
 | 
						|
        if (key !== prefix && key.startsWith(prefix)) {
 | 
						|
            return key.substring(prefix.length);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return null;
 | 
						|
}
 | 
						|
 | 
						|
//# sourceMappingURL=utils.js.map
 |