Socket
Socket
Sign inDemoInstall

@tinyhttp/cookie

Package Overview
Dependencies
Maintainers
1
Versions
69
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tinyhttp/cookie - npm Package Compare versions

Comparing version 2.0.4 to 2.0.5

159

dist/index.js
const pairSplitRegExp = /; */;
/**
* RegExp to match field-content in RFC 7230 sec 3.2
*
* field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
* field-vchar = VCHAR / obs-text
* obs-text = %x80-FF
*/
// eslint-disable-next-line no-control-regex
const fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
function tryDecode(str, decode) {
try {
return decode(str);
}
catch (e) {
return str;
}
try {
return decode(str);
} catch (e) {
return str;
}
}
/**
* Parse a cookie header.
*
* Parse the given cookie header string into an object
* The object has the various cookies as keys(names) => values
*
*/
function parse(str, options = {
decode: decodeURIComponent
decode: decodeURIComponent
}) {
const obj = {};
const pairs = str.split(pairSplitRegExp);
for (const pair of pairs) {
let eqIdx = pair.indexOf('=');
// skip things that don't look like key=value
if (eqIdx < 0)
continue;
const key = pair.substr(0, eqIdx).trim();
let val = pair.substr(++eqIdx, pair.length).trim();
// quoted values
if ('"' == val[0])
val = val.slice(1, -1);
// only assign once
if (obj[key] == null)
obj[key] = tryDecode(val, options.decode);
}
return obj;
const obj = {};
const pairs = str.split(pairSplitRegExp);
for (const pair of pairs) {
let eqIdx = pair.indexOf("=");
if (eqIdx < 0)
continue;
const key = pair.substr(0, eqIdx).trim();
let val = pair.substr(++eqIdx, pair.length).trim();
if ('"' == val[0])
val = val.slice(1, -1);
if (obj[key] == null)
obj[key] = tryDecode(val, options.decode);
}
return obj;
}
function serialize(name, val, opt = {}) {
if (!opt.encode)
opt.encode = encodeURIComponent;
if (!fieldContentRegExp.test(name))
throw new TypeError('argument name is invalid');
const value = opt.encode(val);
if (value && !fieldContentRegExp.test(value))
throw new TypeError('argument val is invalid');
let str = name + '=' + value;
if (null != opt.maxAge) {
const maxAge = opt.maxAge - 0;
if (isNaN(maxAge) || !isFinite(maxAge))
throw new TypeError('option maxAge is invalid');
str += '; Max-Age=' + Math.floor(maxAge);
if (!opt.encode)
opt.encode = encodeURIComponent;
if (!fieldContentRegExp.test(name))
throw new TypeError("argument name is invalid");
const value = opt.encode(val);
if (value && !fieldContentRegExp.test(value))
throw new TypeError("argument val is invalid");
let str = name + "=" + value;
if (null != opt.maxAge) {
const maxAge = opt.maxAge - 0;
if (isNaN(maxAge) || !isFinite(maxAge))
throw new TypeError("option maxAge is invalid");
str += "; Max-Age=" + Math.floor(maxAge);
}
if (opt.domain) {
if (!fieldContentRegExp.test(opt.domain))
throw new TypeError("option domain is invalid");
str += "; Domain=" + opt.domain;
}
if (opt.path) {
if (!fieldContentRegExp.test(opt.path))
throw new TypeError("option path is invalid");
str += "; Path=" + opt.path;
}
if (opt.expires)
str += "; Expires=" + opt.expires.toUTCString();
if (opt.httpOnly)
str += "; HttpOnly";
if (opt.secure)
str += "; Secure";
if (opt.sameSite) {
const sameSite = typeof opt.sameSite === "string" ? opt.sameSite.toLowerCase() : opt.sameSite;
switch (sameSite) {
case true:
case "strict":
str += "; SameSite=Strict";
break;
case "lax":
str += "; SameSite=Lax";
break;
case "none":
str += "; SameSite=None";
break;
default:
throw new TypeError("option sameSite is invalid");
}
if (opt.domain) {
if (!fieldContentRegExp.test(opt.domain))
throw new TypeError('option domain is invalid');
str += '; Domain=' + opt.domain;
}
if (opt.path) {
if (!fieldContentRegExp.test(opt.path))
throw new TypeError('option path is invalid');
str += '; Path=' + opt.path;
}
if (opt.expires)
str += '; Expires=' + opt.expires.toUTCString();
if (opt.httpOnly)
str += '; HttpOnly';
if (opt.secure)
str += '; Secure';
if (opt.sameSite) {
const sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;
switch (sameSite) {
case true:
case 'strict':
str += '; SameSite=Strict';
break;
case 'lax':
str += '; SameSite=Lax';
break;
case 'none':
str += '; SameSite=None';
break;
default:
throw new TypeError('option sameSite is invalid');
}
}
return str;
}
return str;
}
export { parse, serialize };
export {
parse,
serialize
};
{
"name": "@tinyhttp/cookie",
"version": "2.0.4",
"version": "2.0.5",
"type": "module",

@@ -34,5 +34,8 @@ "description": "HTTP cookie parser and serializer for Node.js",

"license": "MIT",
"dependencies": {},
"scripts": {
"build": "rollup -c ../../build/defaultConfig.js"
"dev": "vite",
"build": "vite build",
"postbuild": "tsc --emitDeclarationOnly"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc