@efficimo/storage 0.0.0 → 0.2.0

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 (78) hide show
  1. package/README.md +178 -0
  2. package/dist/cjs/BaseStorage.d.ts +3 -2
  3. package/dist/cjs/BaseStorage.d.ts.map +1 -1
  4. package/dist/cjs/BaseStorage.js +12 -21
  5. package/dist/cjs/BaseStorage.js.map +1 -1
  6. package/dist/cjs/CookieStorage.d.ts +10 -0
  7. package/dist/cjs/CookieStorage.d.ts.map +1 -0
  8. package/dist/cjs/CookieStorage.js +16 -0
  9. package/dist/cjs/CookieStorage.js.map +1 -0
  10. package/dist/cjs/CookieStorageAdapter.d.ts +19 -0
  11. package/dist/cjs/CookieStorageAdapter.d.ts.map +1 -0
  12. package/dist/cjs/CookieStorageAdapter.js +111 -0
  13. package/dist/cjs/CookieStorageAdapter.js.map +1 -0
  14. package/dist/cjs/DefaultCookieStorageKeys.d.ts +3 -0
  15. package/dist/cjs/DefaultCookieStorageKeys.d.ts.map +1 -0
  16. package/dist/cjs/DefaultCookieStorageKeys.js +3 -0
  17. package/dist/cjs/DefaultCookieStorageKeys.js.map +1 -0
  18. package/dist/cjs/LocalStorage.d.ts.map +1 -1
  19. package/dist/cjs/LocalStorage.js +2 -1
  20. package/dist/cjs/LocalStorage.js.map +1 -1
  21. package/dist/cjs/NativeStorageAdapter.d.ts +13 -0
  22. package/dist/cjs/NativeStorageAdapter.d.ts.map +1 -0
  23. package/dist/cjs/NativeStorageAdapter.js +52 -0
  24. package/dist/cjs/NativeStorageAdapter.js.map +1 -0
  25. package/dist/cjs/SessionStorage.d.ts.map +1 -1
  26. package/dist/cjs/SessionStorage.js +2 -1
  27. package/dist/cjs/SessionStorage.js.map +1 -1
  28. package/dist/cjs/StorageObservable.d.ts +4 -3
  29. package/dist/cjs/StorageObservable.d.ts.map +1 -1
  30. package/dist/cjs/StorageObservable.js +2 -2
  31. package/dist/cjs/StorageObservable.js.map +1 -1
  32. package/dist/cjs/Store.d.ts +10 -0
  33. package/dist/cjs/Store.d.ts.map +1 -0
  34. package/dist/cjs/Store.js +3 -0
  35. package/dist/cjs/Store.js.map +1 -0
  36. package/dist/cjs/index.d.ts +5 -0
  37. package/dist/cjs/index.d.ts.map +1 -1
  38. package/dist/cjs/index.js +5 -0
  39. package/dist/cjs/index.js.map +1 -1
  40. package/dist/esm/BaseStorage.d.ts +3 -2
  41. package/dist/esm/BaseStorage.d.ts.map +1 -1
  42. package/dist/esm/BaseStorage.js +12 -21
  43. package/dist/esm/BaseStorage.js.map +1 -1
  44. package/dist/esm/CookieStorage.d.ts +10 -0
  45. package/dist/esm/CookieStorage.d.ts.map +1 -0
  46. package/dist/esm/CookieStorage.js +13 -0
  47. package/dist/esm/CookieStorage.js.map +1 -0
  48. package/dist/esm/CookieStorageAdapter.d.ts +19 -0
  49. package/dist/esm/CookieStorageAdapter.d.ts.map +1 -0
  50. package/dist/esm/CookieStorageAdapter.js +107 -0
  51. package/dist/esm/CookieStorageAdapter.js.map +1 -0
  52. package/dist/esm/DefaultCookieStorageKeys.d.ts +3 -0
  53. package/dist/esm/DefaultCookieStorageKeys.d.ts.map +1 -0
  54. package/dist/esm/DefaultCookieStorageKeys.js +2 -0
  55. package/dist/esm/DefaultCookieStorageKeys.js.map +1 -0
  56. package/dist/esm/LocalStorage.d.ts.map +1 -1
  57. package/dist/esm/LocalStorage.js +2 -1
  58. package/dist/esm/LocalStorage.js.map +1 -1
  59. package/dist/esm/NativeStorageAdapter.d.ts +13 -0
  60. package/dist/esm/NativeStorageAdapter.d.ts.map +1 -0
  61. package/dist/esm/NativeStorageAdapter.js +48 -0
  62. package/dist/esm/NativeStorageAdapter.js.map +1 -0
  63. package/dist/esm/SessionStorage.d.ts.map +1 -1
  64. package/dist/esm/SessionStorage.js +2 -1
  65. package/dist/esm/SessionStorage.js.map +1 -1
  66. package/dist/esm/StorageObservable.d.ts +4 -3
  67. package/dist/esm/StorageObservable.d.ts.map +1 -1
  68. package/dist/esm/StorageObservable.js +2 -2
  69. package/dist/esm/StorageObservable.js.map +1 -1
  70. package/dist/esm/Store.d.ts +10 -0
  71. package/dist/esm/Store.d.ts.map +1 -0
  72. package/dist/esm/Store.js +2 -0
  73. package/dist/esm/Store.js.map +1 -0
  74. package/dist/esm/index.d.ts +5 -0
  75. package/dist/esm/index.d.ts.map +1 -1
  76. package/dist/esm/index.js +5 -0
  77. package/dist/esm/index.js.map +1 -1
  78. package/package.json +3 -4
package/README.md ADDED
@@ -0,0 +1,178 @@
1
+ # @efficimo/storage
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@efficimo/storage)](https://www.npmjs.com/package/@efficimo/storage)
4
+ [![npm version](https://img.shields.io/npm/v/@efficimo/storage-react?label=%40efficimo%2Fstorage-react)](https://www.npmjs.com/package/@efficimo/storage-react)
5
+ [![license](https://img.shields.io/npm/l/@efficimo/storage)](./LICENSE)
6
+ [![types](https://img.shields.io/npm/types/@efficimo/storage)](https://www.npmjs.com/package/@efficimo/storage)
7
+
8
+ > Subscribe to browser storage. Typed keys, reactive updates, cross-tab sync — no boilerplate.
9
+
10
+ Built on [`@efficimo/observable`](https://www.npmjs.com/package/@efficimo/observable).
11
+
12
+ ## Packages
13
+
14
+ | Package | Description |
15
+ |---|---|
16
+ | [`@efficimo/storage`](./core) | Core — framework-agnostic |
17
+ | [`@efficimo/storage-react`](./react) | React bindings — `useStorageObservable` hook |
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ # core only
23
+ npm install @efficimo/storage
24
+
25
+ # with React hook
26
+ npm install @efficimo/storage @efficimo/storage-react
27
+ ```
28
+
29
+ ## Quick start
30
+
31
+ ```typescript
32
+ import { BaseStorage } from '@efficimo/storage';
33
+
34
+ type Keys = 'auth.token' | 'user.theme';
35
+ const store = new BaseStorage<Keys>(localStorage);
36
+
37
+ // reactive subscription
38
+ store.getObservable('auth.token').subscribe(token => {
39
+ console.log('token changed:', token);
40
+ });
41
+
42
+ // set / get / remove
43
+ store.set('auth.token', 'abc123');
44
+ store.get('auth.token'); // 'abc123'
45
+ store.remove('auth.token');
46
+ ```
47
+
48
+ ## Typed keys via module augmentation
49
+
50
+ Extend `DefaultLocalStorageKeys` or `DefaultSessionStorageKeys` to get typed keys on the `LocalStorage` and `SessionStorage` singletons:
51
+
52
+ ```typescript
53
+ // storage-keys.d.ts
54
+ import '@efficimo/storage';
55
+
56
+ declare module '@efficimo/storage' {
57
+ interface DefaultLocalStorageKeys {
58
+ 'auth.token': true;
59
+ 'user.theme': true;
60
+ }
61
+ interface DefaultSessionStorageKeys {
62
+ 'wizard.step': true;
63
+ }
64
+ }
65
+ ```
66
+
67
+ ```typescript
68
+ import { LocalStorage, SessionStorage } from '@efficimo/storage';
69
+
70
+ LocalStorage.set('auth.token', 'abc123'); // typed ✓
71
+ LocalStorage.set('unknown.key', 'value'); // TS error ✓
72
+ ```
73
+
74
+ ## JSON serialization
75
+
76
+ `getSerializedObservable` accepts any schema with a `safeParse` method (Zod, Valibot, etc.):
77
+
78
+ ```typescript
79
+ import { z } from 'zod';
80
+ import { LocalStorage } from '@efficimo/storage';
81
+
82
+ declare module '@efficimo/storage' {
83
+ interface DefaultLocalStorageKeys {
84
+ 'user.prefs': true;
85
+ }
86
+ }
87
+
88
+ const schema = z.object({ theme: z.enum(['light', 'dark']), lang: z.string() });
89
+ const prefs = LocalStorage.getSerializedObservable('user.prefs', schema, { theme: 'light', lang: 'en' });
90
+
91
+ prefs.subscribe(v => console.log(v)); // { theme: 'light', lang: 'en' }
92
+
93
+ await prefs.next({ theme: 'dark', lang: 'fr' });
94
+ // localStorage now holds '{"theme":"dark","lang":"fr"}'
95
+ ```
96
+
97
+ ## Cross-tab sync
98
+
99
+ `BaseStorage` listens to the browser `storage` event automatically. Any change made in another tab propagates to all active observables in the current tab — no extra setup required.
100
+
101
+ ## API
102
+
103
+ ### `BaseStorage<StorageKey>`
104
+
105
+ | Method | Description |
106
+ |---|---|
107
+ | `getObservable(key, defaultValue?)` | Returns (or creates) a `StorageObservable` for the given key. |
108
+ | `getSerializedObservable(key, schema, defaultValue?)` | Returns a `JsonSerializeObservableValue` backed by the storage key. |
109
+ | `get(key, defaultValue?)` | Returns the current string value. |
110
+ | `set(key, value)` | Sets the value. |
111
+ | `has(key)` | Returns `true` if the key exists in storage. |
112
+ | `remove(key)` | Removes the key (sets to `null`). |
113
+ | `clear()` | Clears all keys from storage. |
114
+
115
+ ### `StorageObservable<StorageKey>`
116
+
117
+ Implements `ObservableValueInterface<string | null>` from `@efficimo/observable`.
118
+
119
+ | Member | Description |
120
+ |---|---|
121
+ | `getValue()` | Returns the current storage value. |
122
+ | `subscribe(fn)` | Registers subscriber and immediately calls it with the current value. |
123
+ | `next(value \| setter)` | Updates the value. Supports async setter `(prev) => newValue`. No-op if unchanged. |
124
+
125
+ ---
126
+
127
+ ## React bindings — `@efficimo/storage-react`
128
+
129
+ ### `useStorageObservable`
130
+
131
+ Subscribe to a raw `string | null` storage value.
132
+
133
+ ```typescript
134
+ import { LocalStorage } from '@efficimo/storage';
135
+ import { useStorageObservable } from '@efficimo/storage-react';
136
+
137
+ function AuthStatus() {
138
+ const [token, setToken] = useStorageObservable(LocalStorage.getObservable('auth.token'));
139
+
140
+ return token
141
+ ? <button onClick={() => setToken(null)}>Logout</button>
142
+ : <span>Not logged in</span>;
143
+ }
144
+ ```
145
+
146
+ ### `useStorageSerializedObservable`
147
+
148
+ Subscribe to a JSON-serialized storage value. Returns a typed `[T | null, setter]` tuple — no manual parsing needed.
149
+
150
+ ```typescript
151
+ import { z } from 'zod';
152
+ import { LocalStorage } from '@efficimo/storage';
153
+ import { useStorageSerializedObservable } from '@efficimo/storage-react';
154
+
155
+ const prefsObs = LocalStorage.getSerializedObservable(
156
+ 'user.prefs',
157
+ z.object({ theme: z.enum(['light', 'dark']), lang: z.string() }),
158
+ { theme: 'light', lang: 'en' },
159
+ );
160
+
161
+ function ThemeToggle() {
162
+ const [prefs, setPrefs] = useStorageSerializedObservable(prefsObs);
163
+
164
+ return (
165
+ <button onClick={() => setPrefs({ ...prefs, theme: prefs?.theme === 'light' ? 'dark' : 'light' })}>
166
+ {prefs?.theme ?? 'light'}
167
+ </button>
168
+ );
169
+ }
170
+ ```
171
+
172
+ Both hooks re-render the component whenever the storage value changes — including updates from other components or cross-tab events.
173
+
174
+ ---
175
+
176
+ ## License
177
+
178
+ MIT
@@ -1,8 +1,9 @@
1
1
  import { JsonSerializeObservableValue, type SafeParseSchema } from "@efficimo/observable";
2
2
  import { StorageObservable } from "./StorageObservable";
3
- export declare class BaseStorage<StorageKey extends string> {
3
+ import type { Store } from "./Store";
4
+ export declare class BaseStorage<StorageKey extends string, Options = never> {
4
5
  #private;
5
- constructor(storage: Storage);
6
+ constructor(storage: Store<StorageKey, Options>);
6
7
  getObservable<StorageKeyParam extends StorageKey>(storageKey: StorageKeyParam, defaultValue?: string | null): StorageObservable<StorageKey>;
7
8
  getSerializedObservable<StorageKeyParam extends StorageKey, Value>(storageKey: StorageKeyParam, schema: SafeParseSchema<Value>, defaultValue?: Value): JsonSerializeObservableValue<Value>;
8
9
  get<StorageKeyParam extends StorageKey>(storageKey: StorageKeyParam, defaultValue?: string | null): string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseStorage.d.ts","sourceRoot":"","sources":["../../src/BaseStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAgBxD,qBAAa,WAAW,CAAC,UAAU,SAAS,MAAM;;gBAM7B,OAAO,EAAE,OAAO;IAqB5B,aAAa,CAAC,eAAe,SAAS,UAAU,EACrD,UAAU,EAAE,eAAe,EAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,iBAAiB,CAAC,UAAU,CAAC;IAQzB,uBAAuB,CAAC,eAAe,SAAS,UAAU,EAAE,KAAK,EACtE,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,EAC9B,YAAY,CAAC,EAAE,KAAK,GACnB,4BAA4B,CAAC,KAAK,CAAC;IAQ/B,GAAG,CAAC,eAAe,SAAS,UAAU,EAC3C,UAAU,EAAE,eAAe,EAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM,GAAG,IAAI;IAIT,GAAG,CAAC,eAAe,SAAS,UAAU,EAC3C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,GAClB,IAAI;IAIA,GAAG,CAAC,eAAe,SAAS,UAAU,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO;IAU7E,MAAM,CAAC,eAAe,SAAS,UAAU,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI;IAI7E,KAAK,IAAI,IAAI;CAIrB"}
1
+ {"version":3,"file":"BaseStorage.d.ts","sourceRoot":"","sources":["../../src/BaseStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAgBrC,qBAAa,WAAW,CAAC,UAAU,SAAS,MAAM,EAAE,OAAO,GAAG,KAAK;;gBAM9C,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;IAkB/C,aAAa,CAAC,eAAe,SAAS,UAAU,EACrD,UAAU,EAAE,eAAe,EAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,iBAAiB,CAAC,UAAU,CAAC;IAQzB,uBAAuB,CAAC,eAAe,SAAS,UAAU,EAAE,KAAK,EACtE,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,EAC9B,YAAY,CAAC,EAAE,KAAK,GACnB,4BAA4B,CAAC,KAAK,CAAC;IAQ/B,GAAG,CAAC,eAAe,SAAS,UAAU,EAC3C,UAAU,EAAE,eAAe,EAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM,GAAG,IAAI;IAIT,GAAG,CAAC,eAAe,SAAS,UAAU,EAC3C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,GAClB,IAAI;IAIA,GAAG,CAAC,eAAe,SAAS,UAAU,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO;IAI7E,MAAM,CAAC,eAAe,SAAS,UAAU,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI;IAI7E,KAAK,IAAI,IAAI;CAIrB"}
@@ -28,22 +28,18 @@ class BaseStorage {
28
28
  _BaseStorage_observables.set(this, void 0);
29
29
  __classPrivateFieldSet(this, _BaseStorage_observables, {}, "f");
30
30
  __classPrivateFieldSet(this, _BaseStorage_storage, storage, "f");
31
- if (typeof window !== "undefined") {
32
- window.addEventListener("storage", (event) => {
33
- if (event.storageArea === __classPrivateFieldGet(this, _BaseStorage_storage, "f")) {
34
- if (null === event.key) {
35
- for (const observable of Object.values(__classPrivateFieldGet(this, _BaseStorage_observables, "f"))) {
36
- observable.next(null);
37
- }
38
- __classPrivateFieldSet(this, _BaseStorage_observables, {}, "f");
39
- }
40
- else {
41
- const observable = __classPrivateFieldGet(this, _BaseStorage_observables, "f")[event.key];
42
- observable?.next(event.newValue);
43
- }
31
+ storage.onExternalChange?.((key, value) => {
32
+ if (key === null) {
33
+ for (const observable of Object.values(__classPrivateFieldGet(this, _BaseStorage_observables, "f"))) {
34
+ observable.next(null);
44
35
  }
45
- });
46
- }
36
+ __classPrivateFieldSet(this, _BaseStorage_observables, {}, "f");
37
+ }
38
+ else {
39
+ __classPrivateFieldGet(this, _BaseStorage_observables, "f")[key]?.next(value);
40
+ }
41
+ });
42
+ storage.init();
47
43
  }
48
44
  getObservable(storageKey, defaultValue) {
49
45
  if (__classPrivateFieldGet(this, _BaseStorage_observables, "f")[storageKey] == null) {
@@ -61,12 +57,7 @@ class BaseStorage {
61
57
  this.getObservable(storageKey).next(data);
62
58
  }
63
59
  has(storageKey) {
64
- for (let i = 0; i < __classPrivateFieldGet(this, _BaseStorage_storage, "f").length; i++) {
65
- if (__classPrivateFieldGet(this, _BaseStorage_storage, "f").key(i) === storageKey) {
66
- return true;
67
- }
68
- }
69
- return false;
60
+ return __classPrivateFieldGet(this, _BaseStorage_storage, "f").has(storageKey);
70
61
  }
71
62
  remove(storageKey) {
72
63
  this.getObservable(storageKey).next(null);
@@ -1 +1 @@
1
- {"version":3,"file":"BaseStorage.js","sourceRoot":"","sources":["../../src/BaseStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseStorage.js","sourceRoot":"","sources":["../../src/BaseStorage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,qDAA0F;AAC1F,2DAAwD;AAGxD,MAAM,gBAAgB,GAAG,CACvB,OAAmC,EACnC,GAAe,EACf,YAA4B,EACG,EAAE;IACjC,MAAM,GAAG,GAAG,IAAI,qCAAiB,CAAa,GAAG,EAAE,OAAO,CAAC,CAAC;IAE5D,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACpD,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAa,WAAW;IAMtB,YAAmB,OAAmC;QALtD,uCAAqC;QACrC,2CAEE;QAGA,uBAAA,IAAI,4BAAgB,EAAE,MAAA,CAAC;QACvB,uBAAA,IAAI,wBAAY,OAAO,MAAA,CAAC;QAExB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACxC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,uBAAA,IAAI,gCAAa,CAAC,EAAE,CAAC;oBACzD,UAA4C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3D,CAAC;gBACD,uBAAA,IAAI,4BAAgB,EAAE,MAAA,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,uBAAA,IAAI,gCAAa,CAAC,GAAiB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAEM,aAAa,CAClB,UAA2B,EAC3B,YAA4B;QAE5B,IAAI,uBAAA,IAAI,gCAAa,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1C,uBAAA,IAAI,gCAAa,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,uBAAA,IAAI,4BAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,uBAAA,IAAI,gCAAa,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAEM,uBAAuB,CAC5B,UAA2B,EAC3B,MAA8B,EAC9B,YAAoB;QAEpB,OAAO,IAAI,yCAA4B,CACrC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAC1F,MAAM,EACN,YAAY,CACb,CAAC;IACJ,CAAC;IAEM,GAAG,CACR,UAA2B,EAC3B,YAA4B;QAE5B,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjE,CAAC;IAEM,GAAG,CACR,UAA2B,EAC3B,IAAmB;QAEnB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEM,GAAG,CAAqC,UAA2B;QACxE,OAAO,uBAAA,IAAI,4BAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAEM,MAAM,CAAqC,UAA2B;QAC3E,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK;QACV,uBAAA,IAAI,4BAAS,CAAC,KAAK,EAAE,CAAC;QACtB,uBAAA,IAAI,4BAAgB,EAAE,MAAA,CAAC;IACzB,CAAC;CACF;AAzED,kCAyEC"}
@@ -0,0 +1,10 @@
1
+ import { BaseStorage } from "./BaseStorage";
2
+ import { type CookieOptions } from "./CookieStorageAdapter";
3
+ import type { DefaultCookieStorageKeys } from "./DefaultCookieStorageKeys";
4
+ export type { CookieOptions };
5
+ declare class _CookieStorage extends BaseStorage<keyof DefaultCookieStorageKeys & string, CookieOptions> {
6
+ static _instance: _CookieStorage | null;
7
+ static getInstance(): _CookieStorage;
8
+ }
9
+ export declare const CookieStorage: _CookieStorage;
10
+ //# sourceMappingURL=CookieStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieStorage.d.ts","sourceRoot":"","sources":["../../src/CookieStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE3E,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,cAAM,cAAe,SAAQ,WAAW,CAAC,MAAM,wBAAwB,GAAG,MAAM,EAAE,aAAa,CAAC;IAC9F,MAAM,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAQ;IAE/C,MAAM,CAAC,WAAW,IAAI,cAAc;CAOrC;AAED,eAAO,MAAM,aAAa,gBAA+B,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CookieStorage = void 0;
4
+ const BaseStorage_1 = require("./BaseStorage");
5
+ const CookieStorageAdapter_1 = require("./CookieStorageAdapter");
6
+ class _CookieStorage extends BaseStorage_1.BaseStorage {
7
+ static getInstance() {
8
+ if (_CookieStorage._instance == null) {
9
+ _CookieStorage._instance = new _CookieStorage(new CookieStorageAdapter_1.CookieStorageAdapter());
10
+ }
11
+ return _CookieStorage._instance;
12
+ }
13
+ }
14
+ _CookieStorage._instance = null;
15
+ exports.CookieStorage = _CookieStorage.getInstance();
16
+ //# sourceMappingURL=CookieStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieStorage.js","sourceRoot":"","sources":["../../src/CookieStorage.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAC5C,iEAAkF;AAKlF,MAAM,cAAe,SAAQ,yBAAmE;IAG9F,MAAM,CAAC,WAAW;QAChB,IAAI,cAAc,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YACrC,cAAc,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,IAAI,2CAAoB,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,cAAc,CAAC,SAAS,CAAC;IAClC,CAAC;;AARM,wBAAS,GAA0B,IAAI,CAAC;AAWpC,QAAA,aAAa,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Store } from "./Store";
2
+ export interface CookieOptions {
3
+ path?: string;
4
+ domain?: string;
5
+ maxAge?: number;
6
+ sameSite?: CookieSameSite;
7
+ }
8
+ export declare class CookieStorageAdapter implements Store<string, CookieOptions> {
9
+ #private;
10
+ constructor(options?: CookieOptions);
11
+ getItem(key: string): string | null;
12
+ setItem(key: string, value: string, options?: CookieOptions): void;
13
+ removeItem(key: string): void;
14
+ has(key: string): boolean;
15
+ clear(): void;
16
+ init(): void;
17
+ onExternalChange: (handler: (key: string | null, value: string | null) => void) => void;
18
+ }
19
+ //# sourceMappingURL=CookieStorageAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieStorageAdapter.d.ts","sourceRoot":"","sources":["../../src/CookieStorageAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,qBAAa,oBAAqB,YAAW,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;;gBAI3D,OAAO,GAAE,aAAkB;IAIvC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAInC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAQlE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAS7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,KAAK,IAAI,IAAI;IAsBb,IAAI,IAAI,IAAI;IAYZ,gBAAgB,GAAI,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,KAAG,IAAI,CAEpF;CA6BH"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _CookieStorageAdapter_instances, _CookieStorageAdapter_options, _CookieStorageAdapter_onExternalChangeHandler, _CookieStorageAdapter_store, _CookieStorageAdapter_buildInit, _CookieStorageAdapter_entries;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CookieStorageAdapter = void 0;
16
+ class CookieStorageAdapter {
17
+ constructor(options = {}) {
18
+ _CookieStorageAdapter_instances.add(this);
19
+ _CookieStorageAdapter_options.set(this, void 0);
20
+ _CookieStorageAdapter_onExternalChangeHandler.set(this, null);
21
+ this.onExternalChange = (handler) => {
22
+ __classPrivateFieldSet(this, _CookieStorageAdapter_onExternalChangeHandler, handler, "f");
23
+ };
24
+ __classPrivateFieldSet(this, _CookieStorageAdapter_options, options, "f");
25
+ }
26
+ getItem(key) {
27
+ return __classPrivateFieldGet(this, _CookieStorageAdapter_instances, "m", _CookieStorageAdapter_entries).call(this).find(([k]) => k === key)?.[1] ?? null;
28
+ }
29
+ setItem(key, value, options) {
30
+ __classPrivateFieldGet(this, _CookieStorageAdapter_instances, "m", _CookieStorageAdapter_store).call(this)
31
+ .set(__classPrivateFieldGet(this, _CookieStorageAdapter_instances, "m", _CookieStorageAdapter_buildInit).call(this, key, value, options))
32
+ .catch((err) => {
33
+ throw new Error(`Failed to set cookie "${key}": ${err}`);
34
+ });
35
+ }
36
+ removeItem(key) {
37
+ const opts = __classPrivateFieldGet(this, _CookieStorageAdapter_options, "f");
38
+ __classPrivateFieldGet(this, _CookieStorageAdapter_instances, "m", _CookieStorageAdapter_store).call(this)
39
+ .delete({ name: key, domain: opts.domain ?? null, path: opts.path })
40
+ .catch((err) => {
41
+ throw new Error(`Failed to delete cookie "${key}": ${err}`);
42
+ });
43
+ }
44
+ has(key) {
45
+ return this.getItem(key) !== null;
46
+ }
47
+ clear() {
48
+ __classPrivateFieldGet(this, _CookieStorageAdapter_instances, "m", _CookieStorageAdapter_store).call(this)
49
+ .getAll()
50
+ .then((cookies) => {
51
+ for (const cookie of cookies) {
52
+ if (cookie.name == null)
53
+ continue;
54
+ __classPrivateFieldGet(this, _CookieStorageAdapter_instances, "m", _CookieStorageAdapter_store).call(this)
55
+ .delete({
56
+ name: cookie.name,
57
+ domain: __classPrivateFieldGet(this, _CookieStorageAdapter_options, "f").domain ?? null,
58
+ path: __classPrivateFieldGet(this, _CookieStorageAdapter_options, "f").path,
59
+ })
60
+ .catch((err) => {
61
+ throw new Error(`Failed to delete cookie "${cookie.name}": ${err}`);
62
+ });
63
+ }
64
+ })
65
+ .catch((err) => {
66
+ throw new Error(`Failed to clear cookies: ${err}`);
67
+ });
68
+ }
69
+ init() {
70
+ if (typeof window === "undefined" || !window.cookieStore)
71
+ return;
72
+ window.cookieStore.onchange = (event) => {
73
+ for (const cookie of event.changed) {
74
+ __classPrivateFieldGet(this, _CookieStorageAdapter_onExternalChangeHandler, "f")?.call(this, cookie.name ?? null, cookie.value ?? null);
75
+ }
76
+ for (const cookie of event.deleted) {
77
+ __classPrivateFieldGet(this, _CookieStorageAdapter_onExternalChangeHandler, "f")?.call(this, cookie.name ?? null, null);
78
+ }
79
+ };
80
+ }
81
+ }
82
+ exports.CookieStorageAdapter = CookieStorageAdapter;
83
+ _CookieStorageAdapter_options = new WeakMap(), _CookieStorageAdapter_onExternalChangeHandler = new WeakMap(), _CookieStorageAdapter_instances = new WeakSet(), _CookieStorageAdapter_store = function _CookieStorageAdapter_store() {
84
+ if (typeof window === "undefined" || !window.cookieStore) {
85
+ throw new Error("cookieStore is not available in this environment");
86
+ }
87
+ return window.cookieStore;
88
+ }, _CookieStorageAdapter_buildInit = function _CookieStorageAdapter_buildInit(name, value, options) {
89
+ const opts = { ...__classPrivateFieldGet(this, _CookieStorageAdapter_options, "f"), ...options };
90
+ const init = { name, value };
91
+ if (opts.path != null)
92
+ init.path = opts.path;
93
+ if (opts.domain != null)
94
+ init.domain = opts.domain;
95
+ if (opts.maxAge != null)
96
+ init.expires = Date.now() + opts.maxAge * 1000;
97
+ if (opts.sameSite != null)
98
+ init.sameSite = opts.sameSite;
99
+ return init;
100
+ }, _CookieStorageAdapter_entries = function _CookieStorageAdapter_entries() {
101
+ if (typeof document === "undefined" || !document.cookie)
102
+ return [];
103
+ return document.cookie
104
+ .split("; ")
105
+ .filter(Boolean)
106
+ .map((c) => {
107
+ const eq = c.indexOf("=");
108
+ return [decodeURIComponent(c.slice(0, eq)), decodeURIComponent(c.slice(eq + 1))];
109
+ });
110
+ };
111
+ //# sourceMappingURL=CookieStorageAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieStorageAdapter.js","sourceRoot":"","sources":["../../src/CookieStorageAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export interface DefaultCookieStorageKeys {
2
+ }
3
+ //# sourceMappingURL=DefaultCookieStorageKeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultCookieStorageKeys.d.ts","sourceRoot":"","sources":["../../src/DefaultCookieStorageKeys.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,wBAAwB;CAAG"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=DefaultCookieStorageKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultCookieStorageKeys.js","sourceRoot":"","sources":["../../src/DefaultCookieStorageKeys.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorage.d.ts","sourceRoot":"","sources":["../../src/LocalStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEzE,cAAM,aAAc,SAAQ,WAAW,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;IAC7E,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAQ;IAE9C,MAAM,CAAC,WAAW,IAAI,aAAa;CAOpC;AAED,eAAO,MAAM,YAAY,eAA8B,CAAC"}
1
+ {"version":3,"file":"LocalStorage.d.ts","sourceRoot":"","sources":["../../src/LocalStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,cAAM,aAAc,SAAQ,WAAW,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;IAC7E,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAQ;IAE9C,MAAM,CAAC,WAAW,IAAI,aAAa;CAOpC;AAED,eAAO,MAAM,YAAY,eAA8B,CAAC"}
@@ -2,10 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LocalStorage = void 0;
4
4
  const BaseStorage_1 = require("./BaseStorage");
5
+ const NativeStorageAdapter_1 = require("./NativeStorageAdapter");
5
6
  class _LocalStorage extends BaseStorage_1.BaseStorage {
6
7
  static getInstance() {
7
8
  if (_LocalStorage._instance == null) {
8
- _LocalStorage._instance = new _LocalStorage(localStorage);
9
+ _LocalStorage._instance = new _LocalStorage(new NativeStorageAdapter_1.NativeStorageAdapter(localStorage));
9
10
  }
10
11
  return _LocalStorage._instance;
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorage.js","sourceRoot":"","sources":["../../src/LocalStorage.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAG5C,MAAM,aAAc,SAAQ,yBAAmD;IAG7E,MAAM,CAAC,WAAW;QAChB,IAAI,aAAa,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YACpC,aAAa,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,aAAa,CAAC,SAAS,CAAC;IACjC,CAAC;;AARM,uBAAS,GAAyB,IAAI,CAAC;AAWnC,QAAA,YAAY,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"LocalStorage.js","sourceRoot":"","sources":["../../src/LocalStorage.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAE5C,iEAA8D;AAE9D,MAAM,aAAc,SAAQ,yBAAmD;IAG7E,MAAM,CAAC,WAAW;QAChB,IAAI,aAAa,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YACpC,aAAa,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC,IAAI,2CAAoB,CAAC,YAAY,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,aAAa,CAAC,SAAS,CAAC;IACjC,CAAC;;AARM,uBAAS,GAAyB,IAAI,CAAC;AAWnC,QAAA,YAAY,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Store } from "./Store";
2
+ export declare class NativeStorageAdapter implements Store {
3
+ #private;
4
+ constructor(storage: Storage);
5
+ getItem(key: string): string | null;
6
+ setItem(key: string, value: string): void;
7
+ removeItem(key: string): void;
8
+ has(key: string): boolean;
9
+ clear(): void;
10
+ init(): void;
11
+ onExternalChange: (handler: (key: string | null, value: string | null) => void) => void;
12
+ }
13
+ //# sourceMappingURL=NativeStorageAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeStorageAdapter.d.ts","sourceRoot":"","sources":["../../src/NativeStorageAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,oBAAqB,YAAW,KAAK;;gBAIpC,OAAO,EAAE,OAAO;IAI5B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAInC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAQZ,gBAAgB,GAAI,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,KAAG,IAAI,CAEpF;CACH"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _NativeStorageAdapter_storage, _NativeStorageAdapter_onExternalChangeHandler;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.NativeStorageAdapter = void 0;
16
+ class NativeStorageAdapter {
17
+ constructor(storage) {
18
+ _NativeStorageAdapter_storage.set(this, void 0);
19
+ _NativeStorageAdapter_onExternalChangeHandler.set(this, null);
20
+ this.onExternalChange = (handler) => {
21
+ __classPrivateFieldSet(this, _NativeStorageAdapter_onExternalChangeHandler, handler, "f");
22
+ };
23
+ __classPrivateFieldSet(this, _NativeStorageAdapter_storage, storage, "f");
24
+ }
25
+ getItem(key) {
26
+ return __classPrivateFieldGet(this, _NativeStorageAdapter_storage, "f").getItem(key);
27
+ }
28
+ setItem(key, value) {
29
+ __classPrivateFieldGet(this, _NativeStorageAdapter_storage, "f").setItem(key, value);
30
+ }
31
+ removeItem(key) {
32
+ __classPrivateFieldGet(this, _NativeStorageAdapter_storage, "f").removeItem(key);
33
+ }
34
+ has(key) {
35
+ return __classPrivateFieldGet(this, _NativeStorageAdapter_storage, "f").getItem(key) !== null;
36
+ }
37
+ clear() {
38
+ __classPrivateFieldGet(this, _NativeStorageAdapter_storage, "f").clear();
39
+ }
40
+ init() {
41
+ if (typeof window === "undefined")
42
+ return;
43
+ window.addEventListener("storage", (event) => {
44
+ if (event.storageArea !== __classPrivateFieldGet(this, _NativeStorageAdapter_storage, "f"))
45
+ return;
46
+ __classPrivateFieldGet(this, _NativeStorageAdapter_onExternalChangeHandler, "f")?.call(this, event.key, event.newValue);
47
+ });
48
+ }
49
+ }
50
+ exports.NativeStorageAdapter = NativeStorageAdapter;
51
+ _NativeStorageAdapter_storage = new WeakMap(), _NativeStorageAdapter_onExternalChangeHandler = new WeakMap();
52
+ //# sourceMappingURL=NativeStorageAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeStorageAdapter.js","sourceRoot":"","sources":["../../src/NativeStorageAdapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,MAAa,oBAAoB;IAI/B,YAAY,OAAgB;QAHnB,gDAAkB;QAC3B,wDAAwF,IAAI,EAAC;QAkC7F,qBAAgB,GAAG,CAAC,OAA2D,EAAQ,EAAE;YACvF,uBAAA,IAAI,iDAA4B,OAAO,MAAA,CAAC;QAC1C,CAAC,CAAC;QAjCA,uBAAA,IAAI,iCAAY,OAAO,MAAA,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,uBAAA,IAAI,qCAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,uBAAA,IAAI,qCAAS,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,uBAAA,IAAI,qCAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,uBAAA,IAAI,qCAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7C,CAAC;IAED,KAAK;QACH,uBAAA,IAAI,qCAAS,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,IAAI;QACF,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3C,IAAI,KAAK,CAAC,WAAW,KAAK,uBAAA,IAAI,qCAAS;gBAAE,OAAO;YAChD,uBAAA,IAAI,qDAAyB,EAAE,KAA/B,IAAI,EAA4B,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;CAKF;AAvCD,oDAuCC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionStorage.d.ts","sourceRoot":"","sources":["../../src/SessionStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,cAAM,eAAgB,SAAQ,WAAW,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;IACjF,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAQ;IAEhD,MAAM,CAAC,WAAW,IAAI,eAAe;CAOtC;AAED,eAAO,MAAM,cAAc,iBAAgC,CAAC"}
1
+ {"version":3,"file":"SessionStorage.d.ts","sourceRoot":"","sources":["../../src/SessionStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAG7E,cAAM,eAAgB,SAAQ,WAAW,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;IACjF,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAQ;IAEhD,MAAM,CAAC,WAAW,IAAI,eAAe;CAOtC;AAED,eAAO,MAAM,cAAc,iBAAgC,CAAC"}
@@ -2,10 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SessionStorage = void 0;
4
4
  const BaseStorage_1 = require("./BaseStorage");
5
+ const NativeStorageAdapter_1 = require("./NativeStorageAdapter");
5
6
  class _SessionStorage extends BaseStorage_1.BaseStorage {
6
7
  static getInstance() {
7
8
  if (_SessionStorage._instance == null) {
8
- _SessionStorage._instance = new _SessionStorage(sessionStorage);
9
+ _SessionStorage._instance = new _SessionStorage(new NativeStorageAdapter_1.NativeStorageAdapter(sessionStorage));
9
10
  }
10
11
  return _SessionStorage._instance;
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SessionStorage.js","sourceRoot":"","sources":["../../src/SessionStorage.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAG5C,MAAM,eAAgB,SAAQ,yBAAqD;IAGjF,MAAM,CAAC,WAAW;QAChB,IAAI,eAAe,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YACtC,eAAe,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,eAAe,CAAC,SAAS,CAAC;IACnC,CAAC;;AARM,yBAAS,GAA2B,IAAI,CAAC;AAWrC,QAAA,cAAc,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"SessionStorage.js","sourceRoot":"","sources":["../../src/SessionStorage.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAE5C,iEAA8D;AAE9D,MAAM,eAAgB,SAAQ,yBAAqD;IAGjF,MAAM,CAAC,WAAW;QAChB,IAAI,eAAe,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YACtC,eAAe,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,IAAI,2CAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,eAAe,CAAC,SAAS,CAAC;IACnC,CAAC;;AARM,yBAAS,GAA2B,IAAI,CAAC;AAWrC,QAAA,cAAc,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import { Observable, type ObservableValueInterface, type SetFunction, type Subscriber } from "@efficimo/observable";
2
+ import type { Store } from "./Store";
2
3
  export declare class StorageObservable<StorageKey extends string> extends Observable<string | null> implements ObservableValueInterface<string | null> {
3
4
  private key;
4
5
  private storage;
5
- constructor(key: StorageKey, storage: Storage);
6
- subscribe: (subscriber: Subscriber<string | null>) => import("@efficimo/observable").Subscription;
7
- next: (value: string | null | SetFunction<string | null>) => Promise<void>;
6
+ constructor(key: StorageKey, storage: Store<StorageKey, unknown>);
7
+ subscribe: (subscriber: Subscriber<string | null>) => import("@efficimo/observable").SubscriptionInterface;
8
+ next: (value: string | null | SetFunction<string | null>) => void;
8
9
  getValue: () => string | null;
9
10
  }
10
11
  //# sourceMappingURL=StorageObservable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageObservable.d.ts","sourceRoot":"","sources":["../../src/StorageObservable.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,iBAAiB,CAAC,UAAU,SAAS,MAAM,CACtD,SAAQ,UAAU,CAAC,MAAM,GAAG,IAAI,CAChC,YAAW,wBAAwB,CAAC,MAAM,GAAG,IAAI,CAAC;IAElD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,OAAO,CAAU;gBAEb,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO;IAM7C,SAAS,GAAI,YAAY,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,iDAGhD;IAEF,IAAI,GAAU,OAAO,MAAM,GAAG,IAAI,GAAG,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,mBAe7D;IAEF,QAAQ,sBAEN;CACH"}
1
+ {"version":3,"file":"StorageObservable.d.ts","sourceRoot":"","sources":["../../src/StorageObservable.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,iBAAiB,CAAC,UAAU,SAAS,MAAM,CACtD,SAAQ,UAAU,CAAC,MAAM,GAAG,IAAI,CAChC,YAAW,wBAAwB,CAAC,MAAM,GAAG,IAAI,CAAC;IAElD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,OAAO,CAA6B;gBAEhC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;IAMhE,SAAS,GAAI,YAAY,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,0DAGhD;IAEF,IAAI,GAAI,OAAO,MAAM,GAAG,IAAI,GAAG,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,KAAG,IAAI,CAe9D;IAEF,QAAQ,sBAEN;CACH"}
@@ -9,9 +9,9 @@ class StorageObservable extends observable_1.Observable {
9
9
  subscriber(this.storage.getItem(this.key));
10
10
  return super.subscribe(subscriber);
11
11
  };
12
- this.next = async (value) => {
12
+ this.next = (value) => {
13
13
  const prevValue = this.storage.getItem(this.key);
14
- const newValue = (0, observable_1.isSetFunction)(value) ? await value(prevValue) : value;
14
+ const newValue = (0, observable_1.isSetFunction)(value) ? value(prevValue) : value;
15
15
  if (prevValue === newValue) {
16
16
  return;
17
17
  }