@plq/use-persisted-state 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +179 -50
  3. package/esm/index.d.mts +13 -0
  4. package/esm/index.mjs +10 -0
  5. package/esm/storages/browser-storage.d.mts +1 -0
  6. package/esm/storages/browser-storage.mjs +5 -0
  7. package/esm/storages/chrome-storage.d.mts +1 -0
  8. package/esm/storages/chrome-storage.mjs +5 -0
  9. package/esm/storages/local-storage.d.mts +1 -0
  10. package/esm/storages/local-storage.mjs +3 -0
  11. package/esm/storages/session-storage.d.mts +1 -0
  12. package/esm/storages/session-storage.mjs +3 -0
  13. package/lib/@types/storage.d.ts.map +1 -1
  14. package/lib/create-async-persisted-state.d.ts +2 -2
  15. package/lib/create-async-persisted-state.d.ts.map +1 -1
  16. package/lib/create-async-persisted-state.js +136 -17
  17. package/lib/create-async-persisted-state.js.map +1 -1
  18. package/lib/create-persisted-state.d.ts +2 -2
  19. package/lib/create-persisted-state.d.ts.map +1 -1
  20. package/lib/create-persisted-state.js +76 -15
  21. package/lib/create-persisted-state.js.map +1 -1
  22. package/lib/index.d.ts +6 -5
  23. package/lib/index.d.ts.map +1 -1
  24. package/lib/index.js +4 -2
  25. package/lib/index.js.map +1 -1
  26. package/lib/storages/browser-storage.d.ts +2 -2
  27. package/lib/storages/browser-storage.d.ts.map +1 -1
  28. package/lib/storages/browser-storage.js +6 -26
  29. package/lib/storages/browser-storage.js.map +1 -1
  30. package/lib/storages/chrome-storage.d.ts +2 -2
  31. package/lib/storages/chrome-storage.d.ts.map +1 -1
  32. package/lib/storages/chrome-storage.js +10 -27
  33. package/lib/storages/chrome-storage.js.map +1 -1
  34. package/lib/storages/local-storage.d.ts +1 -1
  35. package/lib/storages/local-storage.d.ts.map +1 -1
  36. package/lib/storages/local-storage.js +3 -1
  37. package/lib/storages/local-storage.js.map +1 -1
  38. package/lib/storages/session-storage.d.ts +1 -1
  39. package/lib/storages/session-storage.d.ts.map +1 -1
  40. package/lib/storages/session-storage.js +3 -1
  41. package/lib/storages/session-storage.js.map +1 -1
  42. package/lib/utils/change-notifier.d.ts +18 -0
  43. package/lib/utils/change-notifier.d.ts.map +1 -0
  44. package/lib/utils/change-notifier.js +38 -0
  45. package/lib/utils/change-notifier.js.map +1 -0
  46. package/lib/utils/create-web-storage.d.ts +10 -2
  47. package/lib/utils/create-web-storage.d.ts.map +1 -1
  48. package/lib/utils/create-web-storage.js +72 -75
  49. package/lib/utils/create-web-storage.js.map +1 -1
  50. package/lib/utils/extension-storage.d.ts +38 -0
  51. package/lib/utils/extension-storage.d.ts.map +1 -0
  52. package/lib/utils/extension-storage.js +66 -0
  53. package/lib/utils/extension-storage.js.map +1 -0
  54. package/lib/utils/get-new-item.d.ts +13 -1
  55. package/lib/utils/get-new-item.d.ts.map +1 -1
  56. package/lib/utils/get-new-item.js +27 -7
  57. package/lib/utils/get-new-item.js.map +1 -1
  58. package/lib/utils/get-new-value.d.ts +1 -1
  59. package/lib/utils/get-new-value.d.ts.map +1 -1
  60. package/lib/utils/get-persisted-value.d.ts +8 -1
  61. package/lib/utils/get-persisted-value.d.ts.map +1 -1
  62. package/lib/utils/get-persisted-value.js +19 -5
  63. package/lib/utils/get-persisted-value.js.map +1 -1
  64. package/lib/utils/is-async-storage.d.ts +7 -0
  65. package/lib/utils/is-async-storage.d.ts.map +1 -1
  66. package/lib/utils/is-async-storage.js +51 -20
  67. package/lib/utils/is-async-storage.js.map +1 -1
  68. package/lib/utils/storage-event-router.d.ts +17 -0
  69. package/lib/utils/storage-event-router.d.ts.map +1 -0
  70. package/lib/utils/storage-event-router.js +54 -0
  71. package/lib/utils/storage-event-router.js.map +1 -0
  72. package/lib/utils/use-storage-handler.d.ts +14 -3
  73. package/lib/utils/use-storage-handler.d.ts.map +1 -1
  74. package/lib/utils/use-storage-handler.js +109 -26
  75. package/lib/utils/use-storage-handler.js.map +1 -1
  76. package/package.json +97 -41
  77. package/src/@types/storage.ts +13 -13
  78. package/src/create-async-persisted-state.ts +125 -20
  79. package/src/create-persisted-state.ts +59 -23
  80. package/src/index.ts +12 -7
  81. package/src/storages/browser-storage.ts +8 -36
  82. package/src/storages/chrome-storage.ts +24 -46
  83. package/src/storages/local-storage.ts +3 -1
  84. package/src/storages/session-storage.ts +3 -1
  85. package/src/utils/change-notifier.ts +43 -0
  86. package/src/utils/create-web-storage.ts +74 -77
  87. package/src/utils/extension-storage.ts +79 -0
  88. package/src/utils/get-new-item.ts +32 -9
  89. package/src/utils/get-new-value.ts +1 -1
  90. package/src/utils/get-persisted-value.ts +22 -7
  91. package/src/utils/is-async-storage.ts +72 -27
  92. package/src/utils/storage-event-router.ts +67 -0
  93. package/src/utils/use-storage-handler.ts +144 -36
  94. package/storages/browser-storage.d.ts +1 -0
  95. package/storages/browser-storage.js +11 -0
  96. package/storages/chrome-storage.d.ts +1 -0
  97. package/storages/chrome-storage.js +11 -0
  98. package/storages/local-storage.d.ts +1 -0
  99. package/storages/local-storage.js +9 -0
  100. package/storages/session-storage.d.ts +1 -0
  101. package/storages/session-storage.js +9 -0
@@ -1,11 +1,44 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.default = createPersistedState;
7
40
  const react_1 = require("react");
8
- const use_storage_handler_1 = __importDefault(require("./utils/use-storage-handler"));
41
+ const use_storage_handler_1 = __importStar(require("./utils/use-storage-handler"));
9
42
  const get_new_value_1 = __importDefault(require("./utils/get-new-value"));
10
43
  const get_new_item_1 = __importDefault(require("./utils/get-new-item"));
11
44
  const get_persisted_value_1 = __importDefault(require("./utils/get-persisted-value"));
@@ -14,23 +47,51 @@ function createPersistedState(storageKey, storage) {
14
47
  const clear = () => {
15
48
  storage.remove(safeStorageKey);
16
49
  };
50
+ const readPersisted = (key, initialValue) => (0, get_persisted_value_1.default)(key, initialValue, storage.get(safeStorageKey)[safeStorageKey]);
17
51
  const usePersistedState = (key, initialValue) => {
18
- const persist = storage.get(safeStorageKey);
19
- const persistedState = persist[safeStorageKey];
20
- const initialOrPersistedValue = (0, get_persisted_value_1.default)(key, initialValue, persistedState);
21
- const [state, setState] = (0, react_1.useState)(initialOrPersistedValue);
22
- const setPersistedState = (newState) => {
23
- const newValue = (0, get_new_value_1.default)(newState, state);
24
- setState(newValue);
52
+ // Reading through the initializer keeps the storage out of the render path:
53
+ // the hook runs on every render of every consuming component, so a re-read is
54
+ // only warranted when the key it is asked for actually changes.
55
+ const [state, setState] = (0, react_1.useState)(() => readPersisted(key, initialValue));
56
+ // The setter must resolve updater functions against the last value applied,
57
+ // not against the one captured by the render that created it. Reading the
58
+ // render closure collapses updates batched into a single event.
59
+ const latestValue = (0, react_1.useRef)(state);
60
+ const applyValue = (0, react_1.useCallback)((value) => {
61
+ latestValue.current = value;
62
+ setState(value);
63
+ }, []);
64
+ // A mounted hook handed a different key has to show that key's value before
65
+ // anything can be written, or the next update stores the previous key's value
66
+ // under the new key and destroys what was there. Adjusting during render ties
67
+ // the re-read to the change itself, where an effect would cost a read and a
68
+ // second render on every mount as well.
69
+ const renderedKey = (0, react_1.useRef)(key);
70
+ if (renderedKey.current !== key) {
71
+ renderedKey.current = key;
72
+ applyValue(readPersisted(key, initialValue));
73
+ }
74
+ // The entries this hook has written and not yet seen reported back.
75
+ const pendingOwnWrites = (0, react_1.useRef)([]);
76
+ const setPersistedState = (0, react_1.useCallback)((newState) => {
77
+ const newValue = (0, get_new_value_1.default)(newState, latestValue.current);
78
+ applyValue(newValue);
25
79
  const persistedItem = storage.get(safeStorageKey)[safeStorageKey];
26
- const newItem = (0, get_new_item_1.default)(key, persistedItem, newValue);
80
+ let newItem;
81
+ try {
82
+ newItem = (0, get_new_item_1.default)(key, persistedItem, newValue);
83
+ }
84
+ catch {
85
+ // Refused, and reported where it was refused. A write replaces the whole
86
+ // entry, so an entry that cannot be read is one no write can be built on
87
+ // without dropping every other hook's key; skipping leaves the bytes for
88
+ // a repair to reach. The caller keeps what it set, unpersisted.
89
+ return;
90
+ }
91
+ (0, use_storage_handler_1.recordOwnWrite)(pendingOwnWrites, newItem);
27
92
  storage.set({ [safeStorageKey]: newItem });
28
- };
29
- (0, react_1.useEffect)(() => {
30
- const initialOrPersistedValue = (0, get_persisted_value_1.default)(key, initialValue, persistedState);
31
- setState(initialOrPersistedValue);
32
- }, [initialValue, key, persistedState]);
33
- (0, use_storage_handler_1.default)(key, safeStorageKey, setState, storage, initialValue);
93
+ }, [key, applyValue]);
94
+ (0, use_storage_handler_1.default)(key, safeStorageKey, applyValue, storage, initialValue, pendingOwnWrites);
34
95
  return [state, setPersistedState];
35
96
  };
36
97
  return [usePersistedState, clear];
@@ -1 +1 @@
1
- {"version":3,"file":"create-persisted-state.js","sourceRoot":"","sources":["../src/create-persisted-state.ts"],"names":[],"mappings":";;;;;AAUA,uCAuCC;AAjDD,iCAAgD;AAKhD,sFAA2D;AAC3D,0EAA+C;AAC/C,wEAA6C;AAC7C,sFAA2D;AAE3D,SAAwB,oBAAoB,CAC1C,UAAkB,EAClB,OAAgB;IAEhB,MAAM,cAAc,GAAG,wBAAwB,UAAU,EAAE,CAAA;IAC3D,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAChC,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAG,CAAI,GAAW,EAAE,YAAe,EAAwB,EAAE;QAClF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAC3C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;QAC9C,MAAM,uBAAuB,GAAG,IAAA,6BAAiB,EAAI,GAAG,EAAE,YAAY,EAAE,cAAc,CAAC,CAAA;QAEvF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAI,uBAAuB,CAAC,CAAA;QAE9D,MAAM,iBAAiB,GAAG,CAAC,QAAiC,EAAQ,EAAE;YACpE,MAAM,QAAQ,GAAG,IAAA,uBAAW,EAAI,QAAQ,EAAE,KAAK,CAAC,CAAA;YAEhD,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAElB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,CAAA;YACjE,MAAM,OAAO,GAAG,IAAA,sBAAU,EAAI,GAAG,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAA;YAE3D,OAAO,CAAC,GAAG,CAAC,EAAC,CAAC,cAAc,CAAC,EAAE,OAAO,EAAC,CAAC,CAAA;QAC1C,CAAC,CAAA;QAED,IAAA,iBAAS,EAAC,GAAG,EAAE;YACb,MAAM,uBAAuB,GAAG,IAAA,6BAAiB,EAAI,GAAG,EAAE,YAAY,EAAE,cAAc,CAAC,CAAA;YAEvF,QAAQ,CAAC,uBAAuB,CAAC,CAAA;QACnC,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAA;QAEvC,IAAA,6BAAiB,EAAI,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;QAE1E,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAA;IACnC,CAAC,CAAA;IAED,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"create-persisted-state.js","sourceRoot":"","sources":["../src/create-persisted-state.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { default as createSyncPersistedState } from './create-persisted-state';
2
- import createAsyncPersistedState from './create-async-persisted-state';
3
- import { Storage, AsyncStorage } from './@types/storage';
4
- import { PersistedState } from './@types/hook';
1
+ import type { Storage, AsyncStorage } from './@types/storage';
2
+ import type { PersistedState } from './@types/hook';
5
3
  export default function createPersistedState<S extends Storage | AsyncStorage>(name: string, storage: S): [PersistedState, () => void | Promise<void>];
6
- export { createSyncPersistedState as createPersistedState, createAsyncPersistedState, };
4
+ export { default as createPersistedState } from './create-persisted-state';
5
+ export { default as createAsyncPersistedState } from './create-async-persisted-state';
6
+ export type { AsyncStorage, Storage, StorageChange, StorageChangeEvent, StorageChangeListener } from './@types/storage';
7
+ export type { PersistedState, UsePersistedState } from './@types/hook';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,yBAAyB,MAAM,gCAAgC,CAAA;AAItE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,CAAC,SAAS,OAAO,GAAG,YAAY,EAC3E,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,GACT,CAAC,cAAc,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAM9C;AAED,OAAO,EACL,wBAAwB,IAAI,oBAAoB,EAChD,yBAAyB,GAC1B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,CAAC,SAAS,OAAO,GAAG,YAAY,EAC3E,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,GACT,CAAC,cAAc,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAM9C;AAED,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAMrF,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACvH,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA"}
package/lib/index.js CHANGED
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createAsyncPersistedState = exports.createPersistedState = void 0;
7
7
  exports.default = createPersistedState;
8
8
  const create_persisted_state_1 = __importDefault(require("./create-persisted-state"));
9
- Object.defineProperty(exports, "createPersistedState", { enumerable: true, get: function () { return create_persisted_state_1.default; } });
10
9
  const create_async_persisted_state_1 = __importDefault(require("./create-async-persisted-state"));
11
- exports.createAsyncPersistedState = create_async_persisted_state_1.default;
12
10
  const is_async_storage_1 = __importDefault(require("./utils/is-async-storage"));
13
11
  function createPersistedState(name, storage) {
14
12
  if ((0, is_async_storage_1.default)(storage)) {
@@ -16,4 +14,8 @@ function createPersistedState(name, storage) {
16
14
  }
17
15
  return (0, create_persisted_state_1.default)(name, storage);
18
16
  }
17
+ var create_persisted_state_2 = require("./create-persisted-state");
18
+ Object.defineProperty(exports, "createPersistedState", { enumerable: true, get: function () { return __importDefault(create_persisted_state_2).default; } });
19
+ var create_async_persisted_state_2 = require("./create-async-persisted-state");
20
+ Object.defineProperty(exports, "createAsyncPersistedState", { enumerable: true, get: function () { return __importDefault(create_async_persisted_state_2).default; } });
19
21
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAQA,uCASC;AAjBD,sFAA8E;AAoBhD,qGApBV,gCAAwB,OAoBM;AAnBlD,kGAAsE;AAoBpE,oCApBK,sCAAyB,CAoBL;AAlB3B,gFAAqD;AAKrD,SAAwB,oBAAoB,CAC1C,IAAY,EACZ,OAAU;IAEV,IAAI,IAAA,0BAAc,EAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAA,sCAAyB,EAAC,IAAI,EAAE,OAAuB,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,IAAA,gCAAwB,EAAC,IAAI,EAAE,OAAkB,CAAC,CAAA;AAC3D,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAQA,uCASC;AAjBD,sFAA+D;AAC/D,kGAAsE;AAEtE,gFAAqD;AAKrD,SAAwB,oBAAoB,CAC1C,IAAY,EACZ,OAAU;IAEV,IAAI,IAAA,0BAAc,EAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAA,sCAAyB,EAAC,IAAI,EAAE,OAAuB,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,IAAA,gCAAwB,EAAC,IAAI,EAAE,OAAkB,CAAC,CAAA;AAC3D,CAAC;AAED,mEAA0E;AAAjE,+IAAA,OAAO,OAAwB;AACxC,+EAAqF;AAA5E,0JAAA,OAAO,OAA6B"}
@@ -1,6 +1,6 @@
1
- import { AsyncStorage } from '../@types/storage';
1
+ import type { AsyncStorage } from '../@types/storage';
2
2
  declare const local: AsyncStorage;
3
3
  declare const sync: AsyncStorage;
4
4
  declare const managed: AsyncStorage;
5
- export { local, sync, managed, };
5
+ export { local, sync, managed };
6
6
  //# sourceMappingURL=browser-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-storage.d.ts","sourceRoot":"","sources":["../../src/storages/browser-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA4D,MAAM,mBAAmB,CAAA;AAyC1G,QAAA,MAAM,KAAK,cAAgD,CAAA;AAC3D,QAAA,MAAM,IAAI,cAA8C,CAAA;AACxD,QAAA,MAAM,OAAO,cAAoD,CAAA;AAEjE,OAAO,EACL,KAAK,EACL,IAAI,EACJ,OAAO,GACR,CAAA"}
1
+ {"version":3,"file":"browser-storage.d.ts","sourceRoot":"","sources":["../../src/storages/browser-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAiBrD,QAAA,MAAM,KAAK,cAAgD,CAAA;AAC3D,QAAA,MAAM,IAAI,cAA8C,CAAA;AACxD,QAAA,MAAM,OAAO,cAAoD,CAAA;AAEjE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA"}
@@ -1,37 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.managed = exports.sync = exports.local = void 0;
4
- const listeners = {
5
- local: new Set(),
6
- sync: new Set(),
7
- managed: new Set(),
8
- };
9
- function fireStorageEvent(changes, area) {
10
- listeners[area].forEach(listener => {
11
- listener(changes);
12
- });
13
- }
4
+ const extension_storage_1 = require("../utils/extension-storage");
5
+ const registry = (0, extension_storage_1.createListenerRegistry)();
14
6
  browser.storage.onChanged.addListener((changes, area) => {
15
- fireStorageEvent(changes, area);
7
+ registry.fire((0, extension_storage_1.toStorageChanges)(changes), area);
16
8
  });
17
- function createOnChanged(area) {
18
- return {
19
- addListener(listener) {
20
- listeners[area].add(listener);
21
- },
22
- removeListener(listener) {
23
- listeners[area].delete(listener);
24
- },
25
- hasListener(listener) {
26
- return listeners[area].has(listener);
27
- },
28
- };
29
- }
9
+ // browser.storage is promise-based, unlike its callback-based chrome counterpart.
30
10
  const createStorage = (storage, area) => ({
31
- get: storage.get,
11
+ get: async (keys) => (0, extension_storage_1.toStoredItems)(await storage.get(keys)),
32
12
  set: storage.set,
33
13
  remove: storage.remove,
34
- onChanged: createOnChanged(area),
14
+ onChanged: registry.createOnChanged(area),
35
15
  });
36
16
  const local = createStorage(browser.storage.local, 'local');
37
17
  exports.local = local;
@@ -1 +1 @@
1
- {"version":3,"file":"browser-storage.js","sourceRoot":"","sources":["../../src/storages/browser-storage.ts"],"names":[],"mappings":";;;AAEA,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,IAAI,GAAG,EAAyB;IACvC,IAAI,EAAE,IAAI,GAAG,EAAyB;IACtC,OAAO,EAAE,IAAI,GAAG,EAAyB;CAC1C,CAAA;AAID,SAAS,gBAAgB,CAAC,OAAyC,EAAE,IAAU;IAC7E,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACjC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACnB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACtD,gBAAgB,CAAC,OAAO,EAAE,IAAY,CAAC,CAAA;AACzC,CAAC,CAAC,CAAA;AAEF,SAAS,eAAe,CAAC,IAAU;IACjC,OAAO;QACL,WAAW,CAAC,QAAQ;YAClB,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC;QACD,cAAc,CAAC,QAAQ;YACrB,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAClC,CAAC;QACD,WAAW,CAAC,QAAQ;YAClB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACtC,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,OAAoC,EAAE,IAAU,EAAgB,EAAE,CAAC,CAAC;IACzF,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC;CACjC,CAAC,CAAA;AAEF,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAKzD,sBAAK;AAJP,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AAKtD,oBAAI;AAJN,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAK/D,0BAAO"}
1
+ {"version":3,"file":"browser-storage.js","sourceRoot":"","sources":["../../src/storages/browser-storage.ts"],"names":[],"mappings":";;;AACA,kEAA+G;AAE/G,MAAM,QAAQ,GAAG,IAAA,0CAAsB,GAAE,CAAA;AAEzC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACtD,QAAQ,CAAC,IAAI,CAAC,IAAA,oCAAgB,EAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;AAChD,CAAC,CAAC,CAAA;AAEF,kFAAkF;AAClF,MAAM,aAAa,GAAG,CAAC,OAAoC,EAAE,IAAU,EAAgB,EAAE,CAAC,CAAC;IACzF,GAAG,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,IAAA,iCAAa,EAAC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzD,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,SAAS,EAAE,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC;CAC1C,CAAC,CAAA;AAEF,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAIlD,sBAAK;AAHd,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AAGxC,oBAAI;AAFpB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAE3C,0BAAO"}
@@ -1,6 +1,6 @@
1
- import { AsyncStorage } from '../@types/storage';
1
+ import type { AsyncStorage } from '../@types/storage';
2
2
  declare const local: AsyncStorage;
3
3
  declare const sync: AsyncStorage;
4
4
  declare const managed: AsyncStorage;
5
- export { local, sync, managed, };
5
+ export { local, sync, managed };
6
6
  //# sourceMappingURL=chrome-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chrome-storage.d.ts","sourceRoot":"","sources":["../../src/storages/chrome-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA4D,MAAM,mBAAmB,CAAA;AAiD1G,QAAA,MAAM,KAAK,cAA+C,CAAA;AAC1D,QAAA,MAAM,IAAI,cAA6C,CAAA;AACvD,QAAA,MAAM,OAAO,cAAmD,CAAA;AAEhE,OAAO,EACL,KAAK,EACL,IAAI,EACJ,OAAO,GACR,CAAA"}
1
+ {"version":3,"file":"chrome-storage.d.ts","sourceRoot":"","sources":["../../src/storages/chrome-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AA+BrD,QAAA,MAAM,KAAK,cAA+C,CAAA;AAC1D,QAAA,MAAM,IAAI,cAA6C,CAAA;AACvD,QAAA,MAAM,OAAO,cAAmD,CAAA;AAEhE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA"}
@@ -1,36 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.managed = exports.sync = exports.local = void 0;
4
- const listeners = {
5
- local: new Set(),
6
- sync: new Set(),
7
- managed: new Set(),
8
- };
9
- function fireStorageEvent(changes, area) {
10
- listeners[area].forEach(listener => {
11
- listener(changes);
12
- });
13
- }
4
+ const extension_storage_1 = require("../utils/extension-storage");
5
+ const registry = (0, extension_storage_1.createListenerRegistry)();
14
6
  chrome.storage.onChanged.addListener((changes, area) => {
15
- fireStorageEvent(changes, area);
7
+ registry.fire((0, extension_storage_1.toStorageChanges)(changes), area);
16
8
  });
17
- function createOnChanged(area) {
18
- return {
19
- addListener(listener) {
20
- listeners[area].add(listener);
21
- },
22
- removeListener(listener) {
23
- listeners[area].delete(listener);
24
- },
25
- hasListener(listener) {
26
- return listeners[area].has(listener);
27
- },
28
- };
29
- }
9
+ // chrome.storage is callback-based, unlike its promise-based firefox counterpart.
30
10
  const createStorage = (storage, area) => ({
31
- get: keys => new Promise(resolve => {
11
+ // Declared async, like the firefox adapter, so that asking whether this
12
+ // storage is asynchronous can be answered from the function itself instead of
13
+ // by calling it — a call here costs a round trip to the extension process.
14
+ get: async (keys) => new Promise(resolve => {
32
15
  storage.get(keys, items => {
33
- resolve(items);
16
+ resolve((0, extension_storage_1.toStoredItems)(items));
34
17
  });
35
18
  }),
36
19
  set: items => new Promise(resolve => {
@@ -39,7 +22,7 @@ const createStorage = (storage, area) => ({
39
22
  remove: keys => new Promise(resolve => {
40
23
  storage.remove(keys, resolve);
41
24
  }),
42
- onChanged: createOnChanged(area),
25
+ onChanged: registry.createOnChanged(area),
43
26
  });
44
27
  const local = createStorage(chrome.storage.local, 'local');
45
28
  exports.local = local;
@@ -1 +1 @@
1
- {"version":3,"file":"chrome-storage.js","sourceRoot":"","sources":["../../src/storages/chrome-storage.ts"],"names":[],"mappings":";;;AAEA,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,IAAI,GAAG,EAAyB;IACvC,IAAI,EAAE,IAAI,GAAG,EAAyB;IACtC,OAAO,EAAE,IAAI,GAAG,EAAyB;CAC1C,CAAA;AAID,SAAS,gBAAgB,CAAC,OAAyC,EAAE,IAAU;IAC7E,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACjC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACnB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACrD,gBAAgB,CAAC,OAAO,EAAE,IAAY,CAAC,CAAA;AACzC,CAAC,CAAC,CAAA;AAEF,SAAS,eAAe,CAAC,IAAU;IACjC,OAAO;QACL,WAAW,CAAC,QAAQ;YAClB,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC;QACD,cAAc,CAAC,QAAQ;YACrB,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAClC,CAAC;QACD,WAAW,CAAC,QAAQ;YAClB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACtC,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,OAAmC,EAAE,IAAU,EAAgB,EAAE,CAAC,CAAC;IACxF,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC;IACF,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC7B,CAAC,CAAC;IACF,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACpC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC/B,CAAC,CAAC;IACF,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC;CACjC,CAAC,CAAA;AAEF,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAKxD,sBAAK;AAJP,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AAKrD,oBAAI;AAJN,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAK9D,0BAAO"}
1
+ {"version":3,"file":"chrome-storage.js","sourceRoot":"","sources":["../../src/storages/chrome-storage.ts"],"names":[],"mappings":";;;AACA,kEAA+G;AAE/G,MAAM,QAAQ,GAAG,IAAA,0CAAsB,GAAE,CAAA;AAEzC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACrD,QAAQ,CAAC,IAAI,CAAC,IAAA,oCAAgB,EAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;AAChD,CAAC,CAAC,CAAA;AAEF,kFAAkF;AAClF,MAAM,aAAa,GAAG,CAAC,OAAmC,EAAE,IAAU,EAAgB,EAAE,CAAC,CAAC;IACxF,wEAAwE;IACxE,8EAA8E;IAC9E,2EAA2E;IAC3E,GAAG,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE,CAChB,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YACxB,OAAO,CAAC,IAAA,iCAAa,EAAC,KAAK,CAAC,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC;IACJ,GAAG,EAAE,KAAK,CAAC,EAAE,CACX,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC7B,CAAC,CAAC;IACJ,MAAM,EAAE,IAAI,CAAC,EAAE,CACb,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACpB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC/B,CAAC,CAAC;IACJ,SAAS,EAAE,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC;CAC1C,CAAC,CAAA;AAEF,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAIjD,sBAAK;AAHd,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AAGvC,oBAAI;AAFpB,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAE1C,0BAAO"}
@@ -1,3 +1,3 @@
1
- declare const _default: import("../@types/storage").Storage;
1
+ declare const _default: import("..").Storage;
2
2
  export default _default;
3
3
  //# sourceMappingURL=local-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../src/storages/local-storage.ts"],"names":[],"mappings":";AAEA,wBAA0C"}
1
+ {"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../src/storages/local-storage.ts"],"names":[],"mappings":";AAIA,wBAA4F"}
@@ -4,5 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const create_web_storage_1 = __importDefault(require("../utils/create-web-storage"));
7
- exports.default = (0, create_web_storage_1.default)(localStorage);
7
+ // The typeof guard keeps this import from throwing on server runtimes (SSR),
8
+ // where the browser storage globals are not defined.
9
+ exports.default = (0, create_web_storage_1.default)(typeof localStorage !== 'undefined' ? localStorage : undefined);
8
10
  //# sourceMappingURL=local-storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-storage.js","sourceRoot":"","sources":["../../src/storages/local-storage.ts"],"names":[],"mappings":";;;;;AAAA,qFAAuD;AAEvD,kBAAe,IAAA,4BAAa,EAAC,YAAY,CAAC,CAAA"}
1
+ {"version":3,"file":"local-storage.js","sourceRoot":"","sources":["../../src/storages/local-storage.ts"],"names":[],"mappings":";;;;;AAAA,qFAAuD;AAEvD,6EAA6E;AAC7E,qDAAqD;AACrD,kBAAe,IAAA,4BAAa,EAAC,OAAO,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA"}
@@ -1,3 +1,3 @@
1
- declare const _default: import("../@types/storage").Storage;
1
+ declare const _default: import("..").Storage;
2
2
  export default _default;
3
3
  //# sourceMappingURL=session-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../src/storages/session-storage.ts"],"names":[],"mappings":";AAEA,wBAA4C"}
1
+ {"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../src/storages/session-storage.ts"],"names":[],"mappings":";AAIA,wBAAgG"}
@@ -4,5 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const create_web_storage_1 = __importDefault(require("../utils/create-web-storage"));
7
- exports.default = (0, create_web_storage_1.default)(sessionStorage);
7
+ // The typeof guard keeps this import from throwing on server runtimes (SSR),
8
+ // where the browser storage globals are not defined.
9
+ exports.default = (0, create_web_storage_1.default)(typeof sessionStorage !== 'undefined' ? sessionStorage : undefined);
8
10
  //# sourceMappingURL=session-storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../src/storages/session-storage.ts"],"names":[],"mappings":";;;;;AAAA,qFAAuD;AAEvD,kBAAe,IAAA,4BAAa,EAAC,cAAc,CAAC,CAAA"}
1
+ {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../src/storages/session-storage.ts"],"names":[],"mappings":";;;;;AAAA,qFAAuD;AAEvD,6EAA6E;AAC7E,qDAAqD;AACrD,kBAAe,IAAA,4BAAa,EAAC,OAAO,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import type { StorageChange, StorageChangeEvent } from '../@types/storage';
2
+ export interface ChangeNotifier {
3
+ fire(changes: {
4
+ [key: string]: StorageChange;
5
+ }): void;
6
+ hasListeners(): boolean;
7
+ onChanged: StorageChangeEvent;
8
+ }
9
+ /**
10
+ * Holds the subscribers of a single change source. Each adapter — and, for the
11
+ * extension backends, each storage area — owns one, so a change never reaches
12
+ * listeners that subscribed elsewhere.
13
+ *
14
+ * Routing a backend's events to the right notifier stays with the adapter: the
15
+ * extensions demultiplex one event by area name, the DOM one by storage object.
16
+ */
17
+ export declare function createChangeNotifier(): ChangeNotifier;
18
+ //# sourceMappingURL=change-notifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-notifier.d.ts","sourceRoot":"","sources":["../../src/utils/change-notifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAyB,MAAM,mBAAmB,CAAA;AAEjG,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,GAAG,IAAI,CAAA;IACrD,YAAY,IAAI,OAAO,CAAA;IACvB,SAAS,EAAE,kBAAkB,CAAA;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CA0BrD"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createChangeNotifier = createChangeNotifier;
4
+ /**
5
+ * Holds the subscribers of a single change source. Each adapter — and, for the
6
+ * extension backends, each storage area — owns one, so a change never reaches
7
+ * listeners that subscribed elsewhere.
8
+ *
9
+ * Routing a backend's events to the right notifier stays with the adapter: the
10
+ * extensions demultiplex one event by area name, the DOM one by storage object.
11
+ */
12
+ function createChangeNotifier() {
13
+ const listeners = new Set();
14
+ return {
15
+ fire(changes) {
16
+ for (const listener of listeners) {
17
+ listener(changes);
18
+ }
19
+ },
20
+ // Lets an adapter release a shared resource once nobody is listening; the
21
+ // set behind onChanged stays the only count, so the two cannot drift.
22
+ hasListeners() {
23
+ return listeners.size > 0;
24
+ },
25
+ onChanged: {
26
+ addListener(listener) {
27
+ listeners.add(listener);
28
+ },
29
+ removeListener(listener) {
30
+ listeners.delete(listener);
31
+ },
32
+ hasListener(listener) {
33
+ return listeners.has(listener);
34
+ },
35
+ },
36
+ };
37
+ }
38
+ //# sourceMappingURL=change-notifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-notifier.js","sourceRoot":"","sources":["../../src/utils/change-notifier.ts"],"names":[],"mappings":";;AAgBA,oDA0BC;AAlCD;;;;;;;GAOG;AACH,SAAgB,oBAAoB;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAA;IAElD,OAAO;QACL,IAAI,CAAC,OAAO;YACV,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACnB,CAAC;QACH,CAAC;QACD,0EAA0E;QAC1E,sEAAsE;QACtE,YAAY;YACV,OAAO,SAAS,CAAC,IAAI,GAAG,CAAC,CAAA;QAC3B,CAAC;QACD,SAAS,EAAE;YACT,WAAW,CAAC,QAAQ;gBAClB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACzB,CAAC;YACD,cAAc,CAAC,QAAQ;gBACrB,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC5B,CAAC;YACD,WAAW,CAAC,QAAQ;gBAClB,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAChC,CAAC;SACF;KACF,CAAA;AACH,CAAC"}
@@ -1,4 +1,12 @@
1
- import { Storage } from '../@types/storage';
2
- declare const _default: (storage: globalThis.Storage) => Storage;
1
+ import type { Storage } from '../@types/storage';
2
+ /**
3
+ * Adapts a Web Storage area to the library's `Storage` contract.
4
+ *
5
+ * Pass `undefined` where the global is missing, as it is on a server: the
6
+ * adapter then reads back nothing and **silently discards every write**, so a
7
+ * consumer keeps its initial value instead of the import throwing. Listeners
8
+ * are still accepted and reported, they simply never fire.
9
+ */
10
+ declare const _default: (storage: globalThis.Storage | undefined) => Storage;
3
11
  export default _default;
4
12
  //# sourceMappingURL=create-web-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-web-storage.d.ts","sourceRoot":"","sources":["../../src/utils/create-web-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA4D,MAAM,mBAAmB,CAAA;yBAmCrF,SAAS,UAAU,CAAC,OAAO,KAAG,OAAO;AAArD,wBAoEE"}
1
+ {"version":3,"file":"create-web-storage.d.ts","sourceRoot":"","sources":["../../src/utils/create-web-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqC,MAAM,mBAAmB,CAAA;AAQnF;;;;;;;GAOG;yBACa,SAAS,UAAU,CAAC,OAAO,GAAG,SAAS,KAAG,OAAO;AAAjE,wBAqFC"}