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

@almgong/jarvus

v1.0.0

Published

General purpose action executor package.

Downloads

4

Readme

Jarvus

Small (just over 1kb) package for executing arbitrary actions (operations, work) based on specified data. Work is done asynchronously and in a decentralized fashion.

Installation

npm install @almgong/jarvus

Usage

All work-to-do is represented by Action classes in Jarvus. After defining such a class, one simply needs to #add an instance of the action to Jarvus' registry.

Let's go through a real(ish) world example.

We have an ML model that returns text content based on some input. When the model returns 'car', we want to log a car result; when the model returns 'bicycle', we want to log a bicycle result instead.

Our car-Action class

import { Action } from '@almgong/jarvus';

class CarFoundAction extends Action {
  shouldRun(payload) {
    payload.text === 'car';
  }

  execute(payload) {
    MyLoggerService.notify(
      { type: 'vehicle/car', originalImg: payload.imgUrl }
    );
  }
}

and for more flavor, our bicycle-Action class

import { Action } from '@almgong/jarvus';

class BicycleFoundAction extends Action {
  shouldRun(payload) {
    // our model is not quite as accurate when it comes to
    // detecting bikes
    payload.text === 'bicycle' && payload.confidence > 0.98;
  }

  execute(payload) {
    MyLoggerService.notify(
      {
        type: 'vehicle/bicycle',
        originalImg: payload.imgUrl,
        confidence: payload.confidence
      }
    );
  }
}

And to wire it all up

import Jarvus from '@almgong/jarvus';

const jarvus = new Jarvus();
jarvus.add(new CarFoundAction('cars'));
jarvus.add(new BicycleFoundAction('bicycles));

...

jarvus.send({ text: 'car', confidence: .82, imgUrl: '...' }); // executes our car action

jarvus.send({ text: 'bicycle', confidence: .82, imgUrl: '...' }); // does not execute any action
jarvus.send({ text: 'bicycle', confidence: .91, imgUrl: '...' }); // executes our bicycle action

Actions

Action subclasses must define two methods:

shouldRun(payload: object) : boolean - whether the action should run

execute(payload: object) : void - what the action should do if it should run

The payload object in both methods will be the same for any given Action, and but can be customized across Actions.

All Action instances must have a unique identifier, specified on instantiation. This helps guard against duplicate registrations and provides a path for debugging and metric gathering.

Jarvus API

The Jarvus class exposes three public methods:

add(action: Action) : void - add the action to the registry

remove(action: Action) : void - remove the action from the registry

send(payload: object) : void - dispatch an arbitrary payload and let actions determine if they need to run

License

MIT