@exodus/atoms 7.0.5 → 7.1.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.
- package/CHANGELOG.md +10 -0
- package/lib/enforce-rules.d.ts +1 -1
- package/lib/enforce-rules.js +1 -0
- package/lib/enhancers/block-until.d.ts +1 -0
- package/lib/enhancers/swallow-observer-errors.d.ts +1 -0
- package/lib/factories/storage.d.ts +6 -3
- package/lib/factories/storage.js +44 -41
- package/lib/utils/types.d.ts +2 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [7.1.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/atoms@7.0.5...@exodus/atoms@7.1.0) (2024-04-15)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- add `atom.reset` ([#6461](https://github.com/ExodusMovement/exodus-hydra/issues/6461)) ([f687e48](https://github.com/ExodusMovement/exodus-hydra/commit/f687e4836dd36d478bde0dc3a86d481c40d15c78))
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- omit undefined from storage atom type when defaultValue set ([#6507](https://github.com/ExodusMovement/exodus-hydra/issues/6507)) ([2c8590c](https://github.com/ExodusMovement/exodus-hydra/commit/2c8590c5e2e6be30ab5df1d6702c37e14c5e76d5))
|
|
15
|
+
|
|
6
16
|
## [7.0.5](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/atoms@7.0.4...@exodus/atoms@7.0.5) (2024-02-28)
|
|
7
17
|
|
|
8
18
|
### Bug Fixes
|
package/lib/enforce-rules.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ type Params<T> = {
|
|
|
3
3
|
getInitialized?: () => boolean;
|
|
4
4
|
defaultValue?: T;
|
|
5
5
|
set: (value: T) => Promise<void>;
|
|
6
|
-
} & Omit<Atom<T>, 'set'>;
|
|
6
|
+
} & Omit<Atom<T>, 'set' | 'reset'>;
|
|
7
7
|
declare const enforceObservableRules: <T>({ defaultValue, getInitialized, ...atom }: Params<T>) => Atom<T>;
|
|
8
8
|
export default enforceObservableRules;
|
package/lib/enforce-rules.js
CHANGED
|
@@ -8,5 +8,6 @@ export default function blockUntil<T>({ atom, unblock }: Params<T>): {
|
|
|
8
8
|
observe: (listener: Listener<T>) => () => void;
|
|
9
9
|
set(value: T): Promise<void>;
|
|
10
10
|
set(setter: import("../utils/types.js").Setter<T>): Promise<void>;
|
|
11
|
+
reset(): Promise<void>;
|
|
11
12
|
};
|
|
12
13
|
export {};
|
|
@@ -8,5 +8,6 @@ declare const swallowObserverErrors: <T>({ atom, logger }: Params<T>) => {
|
|
|
8
8
|
get(): Promise<T>;
|
|
9
9
|
set(value: T): Promise<void>;
|
|
10
10
|
set(setter: import("../utils/types.js").Setter<T>): Promise<void>;
|
|
11
|
+
reset(): Promise<void>;
|
|
11
12
|
};
|
|
12
13
|
export default swallowObserverErrors;
|
|
@@ -3,10 +3,13 @@ import { Storage } from '@exodus/storage-interface';
|
|
|
3
3
|
type FactoryParams<T> = {
|
|
4
4
|
storage: Storage<T>;
|
|
5
5
|
};
|
|
6
|
-
type Params<
|
|
6
|
+
type Params<D> = {
|
|
7
7
|
key: string;
|
|
8
|
-
defaultValue?:
|
|
8
|
+
defaultValue?: D;
|
|
9
9
|
isSoleWriter?: boolean;
|
|
10
10
|
};
|
|
11
|
-
declare const createStorageAtomFactory: <T>({ storage }: FactoryParams<T>) =>
|
|
11
|
+
declare const createStorageAtomFactory: <T>({ storage }: FactoryParams<T>) => {
|
|
12
|
+
(opts: Omit<Params<unknown>, 'defaultValue'>): Atom<T | undefined>;
|
|
13
|
+
<D extends T>(opts: Params<D>): Atom<T | D>;
|
|
14
|
+
};
|
|
12
15
|
export default createStorageAtomFactory;
|
package/lib/factories/storage.js
CHANGED
|
@@ -1,46 +1,49 @@
|
|
|
1
1
|
import createSimpleObserver from '../simple-observer.js';
|
|
2
2
|
import enforceObservableRules from '../enforce-rules.js';
|
|
3
3
|
import pDefer from 'p-defer';
|
|
4
|
-
const createStorageAtomFactory = ({ storage }) =>
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
4
|
+
const createStorageAtomFactory = ({ storage }) => {
|
|
5
|
+
function createStorageAtom({ key, defaultValue, isSoleWriter, }) {
|
|
6
|
+
const { notify, observe } = createSimpleObserver({ enable: isSoleWriter });
|
|
7
|
+
let cached;
|
|
8
|
+
let writePromiseDefer;
|
|
9
|
+
const set = async (value) => {
|
|
10
|
+
if (value === undefined) {
|
|
11
|
+
writePromiseDefer = pDefer();
|
|
12
|
+
await storage.delete(key);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
writePromiseDefer = pDefer();
|
|
16
|
+
await storage.set(key, value);
|
|
17
|
+
}
|
|
18
|
+
writePromiseDefer.resolve();
|
|
19
|
+
if (isSoleWriter) {
|
|
20
|
+
cached = value;
|
|
21
|
+
await notify(value);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const get = async () => {
|
|
25
|
+
if (cached) {
|
|
26
|
+
return cached;
|
|
27
|
+
}
|
|
28
|
+
if (writePromiseDefer) {
|
|
29
|
+
await writePromiseDefer.promise;
|
|
30
|
+
}
|
|
31
|
+
if (cached) {
|
|
32
|
+
return cached;
|
|
33
|
+
}
|
|
34
|
+
const value = await storage.get(key);
|
|
35
|
+
if (isSoleWriter) {
|
|
36
|
+
cached = value;
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
};
|
|
40
|
+
return enforceObservableRules({
|
|
41
|
+
get,
|
|
42
|
+
set,
|
|
43
|
+
observe,
|
|
44
|
+
defaultValue,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return createStorageAtom;
|
|
45
48
|
};
|
|
46
49
|
export default createStorageAtomFactory;
|
package/lib/utils/types.d.ts
CHANGED
|
@@ -10,8 +10,9 @@ export interface Atom<T> {
|
|
|
10
10
|
set(value: T): Promise<void>;
|
|
11
11
|
set(setter: Setter<T>): Promise<void>;
|
|
12
12
|
observe(listener: Listener<T>): Unsubscribe;
|
|
13
|
+
reset(): Promise<void>;
|
|
13
14
|
}
|
|
14
|
-
export type ReadonlyAtom<T> = Omit<Atom<T>, 'set'>;
|
|
15
|
+
export type ReadonlyAtom<T> = Omit<Atom<T>, 'set' | 'reset'>;
|
|
15
16
|
export type KeystoreValue = string | number;
|
|
16
17
|
export interface Port<T> {
|
|
17
18
|
emit(event: string, value: T): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exodus/atoms",
|
|
3
|
-
"version": "7.0
|
|
3
|
+
"version": "7.1.0",
|
|
4
4
|
"description": "Abstraction for encapsulating a piece of data behind a simple unified interface: get, set, observe",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"@types/lodash": "^4.14.200",
|
|
46
46
|
"@types/minimalistic-assert": "^1.0.2"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "6c7aeab1f2b63a1c925efe6bb0cd37e5b8454aff"
|
|
49
49
|
}
|