dox-foundation-demo node_modules/express/node_modules/cookie/index.js

    Source

    /// Serialize the a name value pair into a cookie string suitable for
    /// http headers. An optional options object specified cookie parameters
    ///
    /// serialize('foo', 'bar', { httpOnly: true })
    ///   => "foo=bar; httpOnly"
    ///
    /// @param {String} name
    /// @param {String} val
    /// @param {Object} options
    /// @return {String}
    var serialize = function(name, val, opt){
        opt = opt || {};
        var enc = opt.encode || encode;
        var pairs = [name + '=' + enc(val)];
    
        if (opt.maxAge) pairs.push('Max-Age=' + opt.maxAge);
        if (opt.domain) pairs.push('Domain=' + opt.domain);
        if (opt.path) pairs.push('Path=' + opt.path);
        if (opt.expires) pairs.push('Expires=' + opt.expires.toUTCString());
        if (opt.httpOnly) pairs.push('HttpOnly');
        if (opt.secure) pairs.push('Secure');
    
        return pairs.join('; ');
    };
    
    /// Parse the given cookie header string into an object
    /// The object has the various cookies as keys(names) => values
    /// @param {String} str
    /// @return {Object}
    var parse = function(str, opt) {
        opt = opt || {};
        var obj = {}
        var pairs = str.split(/[;,] */);
        var dec = opt.decode || decode;
    
        pairs.forEach(function(pair) {
            var eq_idx = pair.indexOf('=')
    
            // skip things that don't look like key=value
            if (eq_idx < 0) {
                return;
            }
    
            var key = pair.substr(0, eq_idx).trim()
            var val = pair.substr(++eq_idx, pair.length).trim();
    
            // quoted values
            if ('"' == val[0]) {
                val = val.slice(1, -1);
            }
    
            // only assign once
            if (undefined == obj[key]) {
                try {
                    obj[key] = dec(val);
                } catch (e) {
                    obj[key] = val;
                }
            }
        });
    
        return obj;
    };
    
    var encode = encodeURIComponent;
    var decode = decodeURIComponent;
    
    module.exports.serialize = serialize;
    module.exports.parse = parse;