@exodus/atoms 7.0.5 → 7.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
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.2.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/atoms@7.1.0...@exodus/atoms@7.2.0) (2024-04-16)
7
+
8
+ ### Features
9
+
10
+ - add `mergeWithValue` enhancer ([#6390](https://github.com/ExodusMovement/exodus-hydra/issues/6390)) ([125d708](https://github.com/ExodusMovement/exodus-hydra/commit/125d708bcf541c56248241fc921e53755c398671))
11
+
12
+ ## [7.1.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/atoms@7.0.5...@exodus/atoms@7.1.0) (2024-04-15)
13
+
14
+ ### Features
15
+
16
+ - add `atom.reset` ([#6461](https://github.com/ExodusMovement/exodus-hydra/issues/6461)) ([f687e48](https://github.com/ExodusMovement/exodus-hydra/commit/f687e4836dd36d478bde0dc3a86d481c40d15c78))
17
+
18
+ ### Bug Fixes
19
+
20
+ - 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))
21
+
6
22
  ## [7.0.5](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/atoms@7.0.4...@exodus/atoms@7.0.5) (2024-02-28)
7
23
 
8
24
  ### Bug Fixes
@@ -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;
@@ -53,6 +53,7 @@ const enforceObservableRules = ({ defaultValue, getInitialized = () => true, ...
53
53
  return {
54
54
  get,
55
55
  set,
56
+ reset: () => set(undefined),
56
57
  observe,
57
58
  };
58
59
  };
@@ -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 {};
@@ -0,0 +1,7 @@
1
+ import { Atom } from '../utils/types.js';
2
+ type Params<T extends object> = {
3
+ atom: Atom<T>;
4
+ value: T;
5
+ };
6
+ declare const mergeWithValue: <T extends object>({ atom, value }: Params<T>) => Atom<T>;
7
+ export default mergeWithValue;
@@ -0,0 +1,27 @@
1
+ const mergeWithValue = ({ atom, value }) => {
2
+ const get = async () => {
3
+ const values = await atom.get();
4
+ return { ...value, ...values };
5
+ };
6
+ const observe = (callback) => {
7
+ return atom.observe((values) => {
8
+ const finalValue = { ...value, ...values };
9
+ return callback(finalValue);
10
+ });
11
+ };
12
+ const set = async (newValue) => {
13
+ if (typeof newValue === 'function') {
14
+ return atom.set((currentValue) => {
15
+ return newValue({ ...value, ...currentValue });
16
+ });
17
+ }
18
+ return atom.set({ ...value, ...newValue });
19
+ };
20
+ return {
21
+ ...atom,
22
+ set,
23
+ get,
24
+ observe,
25
+ };
26
+ };
27
+ export default mergeWithValue;
@@ -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<T> = {
6
+ type Params<D> = {
7
7
  key: string;
8
- defaultValue?: T;
8
+ defaultValue?: D;
9
9
  isSoleWriter?: boolean;
10
10
  };
11
- declare const createStorageAtomFactory: <T>({ storage }: FactoryParams<T>) => ({ key, defaultValue, isSoleWriter }: Params<T>) => Atom<T | undefined>;
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;
@@ -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 }) => ({ key, defaultValue, isSoleWriter }) => {
5
- const { notify, observe } = createSimpleObserver({ enable: isSoleWriter });
6
- let cached;
7
- let writePromiseDefer;
8
- const set = async (value) => {
9
- if (value === undefined) {
10
- writePromiseDefer = pDefer();
11
- await storage.delete(key);
12
- }
13
- else {
14
- writePromiseDefer = pDefer();
15
- await storage.set(key, value);
16
- }
17
- writePromiseDefer.resolve();
18
- if (isSoleWriter) {
19
- cached = value;
20
- await notify(value);
21
- }
22
- };
23
- const get = async () => {
24
- if (cached) {
25
- return cached;
26
- }
27
- if (writePromiseDefer) {
28
- await writePromiseDefer.promise;
29
- }
30
- if (cached) {
31
- return cached;
32
- }
33
- const value = await storage.get(key);
34
- if (isSoleWriter) {
35
- cached = value;
36
- }
37
- return value;
38
- };
39
- return enforceObservableRules({
40
- get,
41
- set,
42
- observe,
43
- defaultValue,
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/index.d.ts CHANGED
@@ -16,6 +16,7 @@ export { default as warnOnSameValueSet } from './enhancers/warn-on-same-value-se
16
16
  export { default as swallowObserverErrors } from './enhancers/swallow-observer-errors.js';
17
17
  export { default as timeoutObservers } from './enhancers/timeout-observers.js';
18
18
  export { default as optimisticNotifier } from './enhancers/optimistic-notifier.js';
19
+ export { default as mergeWithValue } from './enhancers/merge-with-value.js';
19
20
  export { default as waitUntil } from './effects/wait-until.js';
20
21
  export { default as enforceObservableRules } from './enforce-rules.js';
21
22
  export { default as fromEventEmitter } from './event-emitter.js';
package/lib/index.js CHANGED
@@ -16,6 +16,7 @@ export { default as warnOnSameValueSet } from './enhancers/warn-on-same-value-se
16
16
  export { default as swallowObserverErrors } from './enhancers/swallow-observer-errors.js';
17
17
  export { default as timeoutObservers } from './enhancers/timeout-observers.js';
18
18
  export { default as optimisticNotifier } from './enhancers/optimistic-notifier.js';
19
+ export { default as mergeWithValue } from './enhancers/merge-with-value.js';
19
20
  export { default as waitUntil } from './effects/wait-until.js';
20
21
  export { default as enforceObservableRules } from './enforce-rules.js';
21
22
  export { default as fromEventEmitter } from './event-emitter.js';
@@ -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.5",
3
+ "version": "7.2.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": "c21223c12402e16bdc94166fbf089e191c077cdd"
48
+ "gitHead": "fa602a1a0c09f5e0afe7218d05a85eb162ae84c8"
49
49
  }