npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ngssm-store

v19.0.0

Published

NgSsm - Simple state management implementation.

Downloads

188

Readme

State management

This is a simple custom adaptation and implementation of the redux pattern.

  graph TB;
    B["Store (State manager)"]
    C[/Actions queue/]
    A["State Observers: <br/> <ul> <li>Components</li> <li>Directives</li> <li>Guards</li></ul>"]  
    
    subgraph G[Action processors]
        D[<b>Reducers</b> <br/> Updates state synchronously taking state immutability into account]
        E[<b>Effects</b> <br/> No update of the state. <br/> Call to remote services <br/> Actions dispatch...]
    end

    C --- B
    A -- Dispatch actions --> B
    B -- Publish state --> A
    B -- Apply action on state --> D
    B -- Process action --> E
    D -- Updated state --> B
    E -- Dispatch actions --> B

    style A text-align:left
    style C fill:lightgray

Store Overview

Action dispatching

  sequenceDiagram
    actor O as Component/Effect
    participant S as Store
    participant Q as Actions Queue
    participant E as Event loop
    O->>S: dispatch action
    S->>Q: add action
    S->>E: add message to process next action

An action dispatched by a component or an effect is not processed immediately. The store uses the setTimeout function to process "later" the action.

Action processing

  sequenceDiagram
    participant L as Event loop
    participant S as Store
    participant Q as Actions Queue
    actor O as State Observer
    participant R as Reducer
    participant E as Effect
    L->>S: doProcessNextAction
    S->>Q: get next available action
    alt There is an action to process
      loop For all registered reducers for the current sction
        S->>R: update state
      end

      S->>O: publish new state

      loop For all registered effects for the current action
        S->>E: process action
      end

      S->>L: add message to process next action
    end

Dependencies

  • angular: the library uses the dependency injection system provided by angular,
  • rxjs: the publish/subscribe pattern is implemented with rxjs,
  • immutability-helper: used by the reducers to update safely the state

The state must be immutable. But, to simplify the implementation, it is the responsibility of the user to be sure that the state instance is never updated.

  • schematics: schematics are provided to create feature state, components, reducers, effects, actions...
  • mermaid.js for the documentation.

Schematics

See ngssm-schematics for schematics used to create feature state, action, reducer, effect...