-
Notifications
You must be signed in to change notification settings - Fork 0
/
cookie.mock.js
63 lines (56 loc) · 2.06 KB
/
cookie.mock.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// See https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
class DocumentCookie {
constructor() {
this.value = {};
}
getKeyValuePairByKey(cookie, key) {
const splitNewValue = String(cookie).split(';');
const keyValue = splitNewValue.find((v) => {
const keyValuePair = v.split('=');
return keyValuePair[0].toLowerCase().trim() === key.trim();
});
if (keyValue && keyValue.split('=').length > 1) {
return keyValue.split('=')[1];
}
return null;
}
get cookie() {
let now = new Date();
const values = this.value;
return Object.keys(values).filter(function (key) {
return values[key].expires === null || now <= new Date(values[key].expires);
}).map(function (key) {
if (key === '') {
return values[key].value;
}
return key ? `${key}=${values[key].value}` : '';
}).join("; ");
}
set cookie(v) {
const keyValue = String(v).split(';')[0];
const keyValueSplit = keyValue.split('=');
if (keyValueSplit.length == 0) {
return;
}
const key = keyValueSplit.length > 1 ? keyValueSplit[0].trim() : '';
const value = keyValueSplit.length > 1 ? keyValueSplit.slice(1).join("=") : keyValueSplit[0];
let expires = this.getKeyValuePairByKey(v, "expires");
const maxAge = this.getKeyValuePairByKey(v, "max-age");
if (maxAge) {
let date = new Date();
date.setTime(date.getTime() + (maxAge * 1000));
expires = date.toUTCString();
}
this.value[key] = {
value: value.trim(),
domain: this.getKeyValuePairByKey(v, "domain"),
expires: expires,
maxAge: maxAge,
secure: this.getKeyValuePairByKey(v, "secure"),
samesite: this.getKeyValuePairByKey(v, "samesite"),
path: this.getKeyValuePairByKey(v, "path")
}
}
};
// Use this as document
module.exports = DocumentCookie;