版博士V2.0程序
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

67 linhas
1.9 KiB

  1. import { resolveUnref } from '@vueuse/shared';
  2. import { shallowRef, ref, watch } from 'vue-demi';
  3. import { get, set, del, update } from 'idb-keyval';
  4. var __defProp = Object.defineProperty;
  5. var __getOwnPropSymbols = Object.getOwnPropertySymbols;
  6. var __hasOwnProp = Object.prototype.hasOwnProperty;
  7. var __propIsEnum = Object.prototype.propertyIsEnumerable;
  8. var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  9. var __spreadValues = (a, b) => {
  10. for (var prop in b || (b = {}))
  11. if (__hasOwnProp.call(b, prop))
  12. __defNormalProp(a, prop, b[prop]);
  13. if (__getOwnPropSymbols)
  14. for (var prop of __getOwnPropSymbols(b)) {
  15. if (__propIsEnum.call(b, prop))
  16. __defNormalProp(a, prop, b[prop]);
  17. }
  18. return a;
  19. };
  20. function useIDBKeyval(key, initialValue, options = {}) {
  21. const {
  22. flush = "pre",
  23. deep = true,
  24. shallow,
  25. onError = (e) => {
  26. console.error(e);
  27. }
  28. } = options;
  29. const data = (shallow ? shallowRef : ref)(initialValue);
  30. const rawInit = resolveUnref(initialValue);
  31. async function read() {
  32. try {
  33. const rawValue = await get(key);
  34. if (rawValue === void 0) {
  35. if (rawInit !== void 0 && rawInit !== null)
  36. await set(key, rawInit);
  37. } else {
  38. data.value = rawValue;
  39. }
  40. } catch (e) {
  41. onError(e);
  42. }
  43. }
  44. read();
  45. async function write() {
  46. try {
  47. if (data.value == null) {
  48. await del(key);
  49. } else {
  50. if (Array.isArray(data.value))
  51. await update(key, () => JSON.parse(JSON.stringify(data.value)));
  52. else if (typeof data.value === "object")
  53. await update(key, () => __spreadValues({}, data.value));
  54. else
  55. await update(key, () => data.value);
  56. }
  57. } catch (e) {
  58. onError(e);
  59. }
  60. }
  61. watch(data, () => write(), { flush, deep });
  62. return data;
  63. }
  64. export { useIDBKeyval };