9.0.0 • Published 10 months ago

@exodus/atoms v9.0.0

Weekly downloads
-
License
UNLICENSED
Repository
github
Last release
10 months ago

@exodus/atoms

Install

    yarn add @exodus/atoms

What is an atom?

An atom is a data source wrapper that exposes a single piece of data through 3 different methods:

  • get(): read data
  • set(newValue): write data
  • observe(async (data) => {}): observes data changes. Will be called initially with current data value. Observers are awaited in series.
  • reset(): clear the stored value. The next get() call will return the default value* and observers will be called with the default value.

Data sources

This library provides helpers for creating atoms from multiple data sources we use in our apps

getsetobserve
Memory*
Storage🟡 **
Remote config
Local config
Event emitter

* If no defaultValue is provided, a memory atom's get() method will hang and observers will NOT be called until the first set() call.

** A storage atom needs a special isSoleWriter param to allow write access. This is because storage instances can overlap, e.g. a parent namespace can mutate a child namespace, and our storage-spec doesn't currently provide for detecting changes across those instances.

Usage

import { createInMemoryAtom, createStorageAtomFactory, fromEventEmitter } from '@exodus/atoms'

// In memory atoms
const availableAssetNamesAtom = createInMemoryAtom({
  defaultValue: {},
})

// Storage atoms
const storageAtomFactory = createStorageAtomFactory({ storage })

const acceptedTermsAtom = storageAtomFactory({
  key: 'acceptedTerms',
  defaultValue: false,
  isSoleWriter: true,
})

// Event emitter
const geolocationAtom = fromEventEmitter({
  emitter: geolocation,
  event: 'geolocation',
  get: geolocation.get,
})

Helper functions

compute({ atom, selector })

Computes an atom from another by applying a selector function to the observed data source. Returned atom is read-only, i.e. set will fail.

withSerialization({ atom, serialize, deserialize })

Computes an atom from another by serializing it's data after reading it and deserializing it before writing it.

9.0.0

10 months ago

8.1.1

10 months ago

7.6.1

1 year ago

7.6.0

1 year ago

7.4.1

1 year ago

8.1.0

11 months ago

7.4.0

1 year ago

7.5.1

1 year ago

7.5.0

1 year ago

8.0.0

12 months ago

7.3.3

1 year ago

7.3.1

1 year ago

7.3.2

1 year ago

7.3.0

1 year ago

7.2.0

1 year ago

7.1.0

1 year ago

7.0.5

1 year ago

7.0.4

1 year ago

7.0.3

1 year ago

7.0.2

1 year ago

7.0.1

2 years ago

7.0.0

2 years ago

6.0.2

2 years ago

6.0.1

2 years ago

5.7.3-hotfix.0

2 years ago

6.0.0

2 years ago

5.7.3

2 years ago

5.7.2

2 years ago

5.7.1

2 years ago

5.7.0

2 years ago

5.6.0

2 years ago

5.5.0

2 years ago

5.4.0

2 years ago

5.3.0

2 years ago

5.2.3

2 years ago

5.2.2

2 years ago

5.2.1

2 years ago

5.2.0

2 years ago

5.1.0

2 years ago

5.0.0

2 years ago

4.0.1

2 years ago

4.0.0

2 years ago

3.7.0

2 years ago

3.6.0

2 years ago

3.5.3

2 years ago

3.5.2

2 years ago

3.5.1

2 years ago

3.5.0

2 years ago

3.4.1

2 years ago

3.4.0

2 years ago

3.3.0

2 years ago

3.2.0

2 years ago

3.1.0

2 years ago

3.0.0

2 years ago

2.10.0

3 years ago

2.9.1

3 years ago

2.9.0

3 years ago

2.8.0

3 years ago

2.7.0

3 years ago

2.6.0

3 years ago

2.5.1

3 years ago

2.5.0

3 years ago

2.4.0

3 years ago

2.3.0

3 years ago

2.2.1

3 years ago

2.2.0

3 years ago

2.1.0

3 years ago

2.0.0

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago