otrie
TypeScript icon, indicating that this package has built-in type declarations

1.1.3 • Public • Published

Observable Path Trie Store

TrieStore is a RxJS-observable path tree store.

It keeps an instance of RxJS Subject associated with every monitored field in the state object and notifies observers when the node value or any child node value changes.

import {TrieStore} from 'otrie';

const initialState = {
    users: {
        user1: {wants: 'apple'},
        user2: {wants: 'orange'},
    }
};
const store = new TrieStore(initialState);
const userLevelObserver = store.observe(['users']);
const user1LevelObserver = store.observe(['users', 'user1']);
const user1WantsLevelObserver = store.observe(['users', 'user1', 'wants']);

// When the store is constructed first, it emits an initial state to all observers.
expect(await firstValueFrom(userLevelObserver)).toEqual({user1: {wants: 'apple'}, user2: {wants: 'orange'}});
expect(await firstValueFrom(user1LevelObserver)).toEqual({wants: 'apple'});
expect(await firstValueFrom(user1WantsLevelObserver)).toBe('apple');

// When a tree node value is changed all parent node observers are notified.
store.set(['users', 'user1', 'wants'], 'carrot');
expect(await firstValueFrom(userLevelObserver)).toEqual({user1: {wants: 'carrot'}, user2: {wants: 'orange'}});
expect(await firstValueFrom(user1LevelObserver)).toEqual({wants: 'carrot'});
expect(await firstValueFrom(user1WantsLevelObserver)).toBe('carrot');

See sources and related unit tests for details.

Package Sidebar

Install

npm i otrie

Weekly Downloads

162

Version

1.1.3

License

Apache-2.0

Unpacked Size

56.3 kB

Total Files

12

Last publish

Collaborators

  • mfursov