版博士V2.0程序
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 

156 行
4.6 KiB

  1. "use strict";
  2. var __defProp = Object.defineProperty;
  3. var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  4. var __getOwnPropNames = Object.getOwnPropertyNames;
  5. var __hasOwnProp = Object.prototype.hasOwnProperty;
  6. var __export = (target, all) => {
  7. for (var name in all)
  8. __defProp(target, name, { get: all[name], enumerable: true });
  9. };
  10. var __copyProps = (to, from, except, desc) => {
  11. if (from && typeof from === "object" || typeof from === "function") {
  12. for (let key of __getOwnPropNames(from))
  13. if (!__hasOwnProp.call(to, key) && key !== except)
  14. __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  15. }
  16. return to;
  17. };
  18. var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
  19. // src/index.ts
  20. var src_exports = {};
  21. __export(src_exports, {
  22. createPersistedState: () => createPersistedState,
  23. default: () => src_default
  24. });
  25. module.exports = __toCommonJS(src_exports);
  26. // src/normalize.ts
  27. function isObject(v) {
  28. return typeof v === "object" && v !== null;
  29. }
  30. function normalizeOptions(options, factoryOptions) {
  31. options = isObject(options) ? options : /* @__PURE__ */ Object.create(null);
  32. return new Proxy(options, {
  33. get(target, key, receiver) {
  34. if (key === "key")
  35. return Reflect.get(target, key, receiver);
  36. return Reflect.get(target, key, receiver) || Reflect.get(factoryOptions, key, receiver);
  37. }
  38. });
  39. }
  40. // src/pick.ts
  41. function get(state, path) {
  42. return path.reduce((obj, p) => {
  43. return obj == null ? void 0 : obj[p];
  44. }, state);
  45. }
  46. function set(state, path, val) {
  47. return path.slice(0, -1).reduce((obj, p) => {
  48. if (/^(__proto__)$/.test(p))
  49. return {};
  50. else
  51. return obj[p] = obj[p] || {};
  52. }, state)[path[path.length - 1]] = val, state;
  53. }
  54. function pick(baseState, paths) {
  55. return paths.reduce((substate, path) => {
  56. const pathArray = path.split(".");
  57. return set(substate, pathArray, get(baseState, pathArray));
  58. }, {});
  59. }
  60. // src/plugin.ts
  61. function hydrateStore(store, { storage, serializer, key, debug }) {
  62. try {
  63. const fromStorage = storage == null ? void 0 : storage.getItem(key);
  64. if (fromStorage)
  65. store.$patch(serializer == null ? void 0 : serializer.deserialize(fromStorage));
  66. } catch (error) {
  67. if (debug)
  68. console.error(error);
  69. }
  70. }
  71. function persistState(state, { storage, serializer, key, paths, debug }) {
  72. try {
  73. const toStore = Array.isArray(paths) ? pick(state, paths) : state;
  74. storage.setItem(key, serializer.serialize(toStore));
  75. } catch (error) {
  76. if (debug)
  77. console.error(error);
  78. }
  79. }
  80. function createPersistedState(factoryOptions = {}) {
  81. return (context) => {
  82. const { auto = false } = factoryOptions;
  83. const {
  84. options: { persist = auto },
  85. store
  86. } = context;
  87. if (!persist)
  88. return;
  89. const persistences = (Array.isArray(persist) ? persist.map((p) => normalizeOptions(p, factoryOptions)) : [normalizeOptions(persist, factoryOptions)]).map(
  90. ({
  91. storage = localStorage,
  92. beforeRestore = null,
  93. afterRestore = null,
  94. serializer = {
  95. serialize: JSON.stringify,
  96. deserialize: JSON.parse
  97. },
  98. key = store.$id,
  99. paths = null,
  100. debug = false
  101. }) => {
  102. var _a;
  103. return {
  104. storage,
  105. beforeRestore,
  106. afterRestore,
  107. serializer,
  108. key: ((_a = factoryOptions.key) != null ? _a : (k) => k)(key),
  109. paths,
  110. debug
  111. };
  112. }
  113. );
  114. store.$persist = () => {
  115. persistences.forEach((persistence) => {
  116. persistState(store.$state, persistence);
  117. });
  118. };
  119. store.$hydrate = ({ runHooks = true } = {}) => {
  120. persistences.forEach((persistence) => {
  121. const { beforeRestore, afterRestore } = persistence;
  122. if (runHooks)
  123. beforeRestore == null ? void 0 : beforeRestore(context);
  124. hydrateStore(store, persistence);
  125. if (runHooks)
  126. afterRestore == null ? void 0 : afterRestore(context);
  127. });
  128. };
  129. persistences.forEach((persistence) => {
  130. const { beforeRestore, afterRestore } = persistence;
  131. beforeRestore == null ? void 0 : beforeRestore(context);
  132. hydrateStore(store, persistence);
  133. afterRestore == null ? void 0 : afterRestore(context);
  134. store.$subscribe(
  135. (_mutation, state) => {
  136. persistState(state, persistence);
  137. },
  138. {
  139. detached: true
  140. }
  141. );
  142. });
  143. };
  144. }
  145. // src/index.ts
  146. var src_default = createPersistedState();
  147. // Annotate the CommonJS export names for ESM import in node:
  148. 0 && (module.exports = {
  149. createPersistedState
  150. });