UNPKG

usedjs

Version:

used.js 是一个轻量级小巧的可运行在浏览器中的 JavaScript 函数库

85 lines (80 loc) 2.44 kB
function decode(s: string): string{ return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); } function cookieHandler(key: string, value?: any, attributes?: any){ if (!document){ return new Error('Not Found document') } const write = (value !== 'json' && value !== undefined) || attributes !== undefined; const read = !write; if (write){ if (!attributes.path){ attributes.path = '/'; } if (typeof attributes.expires === 'number'){ attributes.expires = new Date(new Date().getTime() + attributes.expires * 86400000); } attributes.expires = attributes.expires ? attributes.expires.toUTCString() : ''; try{ const r = JSON.stringify(value); if (/^[\{\[]/.test(r)){ value = r; } }catch(e){} value = encodeURIComponent(String(value)); key = encodeURIComponent(String(key)); let stringifiedAttributes = ''; for (let attributeName in attributes){ if (!attributes[attributeName]){ continue; } stringifiedAttributes += '; ' + attributeName; if (attributes[attributeName] === true){ continue; } stringifiedAttributes += '=' + attributes[attributeName].split(';')[0]; } return document.cookie = key + '=' + value + stringifiedAttributes; } if (read){ let i = 0; const jar = Object.create(null); const cookies = document.cookie ? document.cookie.split('; ') : []; const l = cookies.length; const json = value === 'json'; for (; i < l; i ++){ const parts = cookies[i].split('='); let cookie = parts.slice(1).join('='); if (!json && cookie.charAt(0) === '"'){ cookie = cookie.slice(1, -1); } try{ const name = decode(parts[0]); let cookieVal = decode(cookie); if (json){ try{ cookieVal = JSON.parse(cookie) } catch(e){} } jar[name] = cookieVal; }catch(e){} } return key ? jar[key] : jar; } } export function get(key: string) { return cookieHandler(key); } export function getJSON(key: string){ return cookieHandler(key, 'json'); } export function set(key: string, value: any, attributes={}){ return cookieHandler(key, value, attributes); } export function remove(key: string, attributes?: any){ if (attributes){ attributes = Object.create(null); attributes.expires = -1; } return cookieHandler(key, '', attributes) }