@ryanuo/utils
Version:
提供多种实用工具函数,涵盖算法、浏览器操作、网络请求等多个领域
66 lines (65 loc) • 1.76 kB
JavaScript
import { safeJSONParse } from "../common";
function getStorage(type = "local") {
return type === "local" ? localStorage : sessionStorage;
}
function withExpiration(value, expires) {
if (!expires)
return value;
const now = (/* @__PURE__ */ new Date()).getTime();
const item = {
value,
expires: now + expires
};
return item;
}
function checkExpiration(item) {
if (!item || typeof item !== "object")
return item;
if ("expires" in item && "value" in item) {
const now = (/* @__PURE__ */ new Date()).getTime();
if (now > item.expires)
return null;
return item.value;
}
return item;
}
const safeStorage = {
get(key, options = {}) {
try {
const { storage = "local" } = options;
const selectedStorage = getStorage(storage);
const data = selectedStorage.getItem(key);
if (!data)
return null;
const parsed = safeJSONParse(data);
const result = checkExpiration(parsed);
if (result === null)
selectedStorage.removeItem(key);
return result;
} catch {
return null;
}
},
set(key, value, options = {}) {
try {
const { storage = "local", expires } = options;
const selectedStorage = getStorage(storage);
const item = withExpiration(value, expires);
selectedStorage.setItem(key, JSON.stringify(item));
return true;
} catch {
return false;
}
},
remove(key, options = {}) {
const { storage = "local" } = options;
const selectedStorage = getStorage(storage);
selectedStorage.removeItem(key);
},
clear(options = {}) {
const { storage = "local" } = options;
const selectedStorage = getStorage(storage);
selectedStorage.clear();
}
};
export { safeStorage };