@slan-health/taro-vueuse
Version:
taro vue版本hooks
117 lines (116 loc) • 2.85 kB
JavaScript
import { clearStorage, removeStorage, getStorageInfo, setStorage, getStorageSync, getStorage } from "@tarojs/taro";
const cache = /* @__PURE__ */ new Map();
function useStorage() {
const getSync = (key) => {
if (!cache.has(key)) {
const data2 = getStorageSync(key);
cache.set(key, data2);
}
const data = cache.get(key);
return data;
};
const getStorageSync$1 = (key) => {
return new Promise((resolve, reject) => {
try {
getStorage({
key,
success: ({ data }) => resolve(data),
fail: () => reject(void 0)
});
} catch (e) {
reject(void 0);
}
});
};
const setStorageAsync = (key, data) => {
return new Promise((resolve, reject) => {
try {
if (!key) {
console.warn("please provide a option");
return reject(false);
} else {
setStorage({
key,
data,
success: () => {
cache.set(key, data);
resolve(true);
},
fail: () => reject(false)
});
}
} catch (e) {
reject(false);
}
});
};
const getStorageAsync = (key) => {
return new Promise(async (resolve, reject) => {
try {
if (!key) {
getStorageInfo({
success: async ({ keys }) => {
if (!keys.length) {
resolve(void 0);
} else {
const result = {};
for await (let currentKey of keys) {
const data = await getStorageSync$1(currentKey);
result[currentKey] = data;
}
resolve(result);
}
},
fail: () => reject(void 0)
});
} else {
if (!cache.has(key)) {
const data2 = await getStorageSync$1(key);
cache.set(key, data2);
}
const data = cache.get(key);
resolve(data);
}
} catch (e) {
reject(void 0);
}
});
};
const removeStorageAsync = (key) => {
return new Promise((resolve, reject) => {
const callbackOptions = {
success: () => {
if (cache.has(key)) {
cache.delete(key);
}
resolve(true);
},
fail: () => reject(false)
};
try {
if (!key) {
clearStorage();
cache.clear();
resolve(true);
} else {
removeStorage({
key,
...callbackOptions
});
}
} catch (e) {
reject(false);
}
});
};
return {
getSync,
set: setStorageAsync,
get: getStorageAsync,
remove: removeStorageAsync
};
}
export {
useStorage as default
};
//# sourceMappingURL=index.js.map