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

pollinator

v0.3.2

Published

A lightweight node/browser polling machine

Downloads

275

Readme

npm bundle size (version) GitHub GitHub Repo stars npm npm type definitions

Pollinator


🐝 Pollinator is a super lightweight library for lazy people to poll any function (API gateway anyone?). Supports retries, pausing, cancelling, emits events you can subscribe to. It has a nice, natural API and works in Node and browsers.

Main features

  • simple API 🔨
  • start, pause and stop at any time 🎮
  • add event listeners to receive polling results and polling status changes 🎭
  • written in TypeScript 👷‍♂️
  • cancel polling when certain conditions are met based on current or previous results 🔚
  • supports sync and async functions 🎛
  • configurable delay between polling ⏲
  • configurable retry attempts in case of error 🔄
  • well tested, no unnecessary calls ⛰
  • no bs - does only one thing and gets the job done 👍🏻

Installation

For node just do your:

yarn add pollinator
#or
npm install pollinator

For the browsers add the CDN link:

<!-- either use unpkg.com -->
<script src="https://unpkg.com/[email protected]/dist/index.umd.min.js"></script>

<!-- or use JSDelivr -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/index.umd.min.js"></script>

Usage

Here's a minimal example

// es6
import Pollinator from 'pollinator'

function pollingFunction() {
  return fetch('http://some-url.com/endpoint')
}

// configure your poller
const poller = new Pollinator(pollingFunction)
// remember to start
poller.start()

This will poll pollingFunction indefinitely.

To get the return from the polling function you need subscribe to an event.

poller.on(Pollinator.Event.POLL, handlePoll)

function handlePoll(response, status) {
  // do something with the response and current polling status
  console.log('The response is:', response)
  console.log('Current polling status is:', status)
}

Say you want to stop polling when a specific response comes back from the polling function.

const poller = new Pollinator(pollingFunction, {
  conditionFn: stopPollingOnCondition,
})

function stopPollingOnCondition(currentResponse, previousResponse) {
  // return true if you wish to stop polling
  if (currentResponse === 'Half a Bee' && previousResponse === 'Eric')
    return true

  // return false if you don't want to stop and keep on polling
  return false
}

Reference

Pollinator constructor params

| Name | Type | Required | Description | Default | | :--------: | :----------------: | :--------: | :------------------------------------------------- | :-------------------------------- | | pollFn | function | required | A function you want to poll. Can be sync or async. | | | config | PollinatorConfig | optional | Optional configuration. Check details below | see PollinatorConfig type below |

PollinatorConfig type

| Name | Type | Required | Description | Default | | :----------------: | :--------: | :--------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | | polFnParams | unknown | optional | Use this option to pass some parameters to the pollFn | undefined | | conditionFn | function | optional | Use this function to stop polling. The function will be called with two parameters of current and previous response from the pollFn. Must return a boolean where true stops polling.(current: unkown, previous: unkown) => bool | () => false | | delay | number | optional | A value in milliseconds setting the timeout between consequent pollFn calls | 5000 | | failRetryCount | number | optional | A value that indicates the number of attempts to call pollFn after catching an error. Zero means that polling will fail immediately after catching error. Any positive number means that Pollinator will try to poll that many times until it emits the Event.ERROR. | 3 |

Status enum

{
  IDLE, POLLING, FINISHED
}

Event enum

enum Event {
  POLL = 'poll',
  END = 'end',
  ERROR = 'error',
  STATUS_CHANGE = 'statusChange',
}

Pollinator instance methods and properties

| Name | Type | Params | Description | | :--------: | :--------: | :------------------------------------------: | :----------------------------------------------------------- | | start | method | | Starts polling and changes status to Status.POLLING | | stop | method | | Stops polling and changes status to Status.FINISHED | | pause | method | | Pauses polling and status changes to Status.IDLE | | on | method | (event: Event, listener: function) => void | Registers an event listener for a given Event type. | | off | method | (event: Event, listener: function) => void | Removes an event listener for a given Event type. | | status | property | | Get current status of your poller. Value is of type Status |

Building and contributing

If you want to contribute then please do. PRs are welcome. Before squashing any bug or adding a new feature please create an issue first. Also add a test case(s) before contributing any code.

After cloning the repo do the usual:

yarn
#or
npm i

To run tests use this script:

yarn test

To build run:

yarn build

To do

  • max attempts - stop polling when a max number of attempts is achieved
  • current attempts number in the event data
  • timeout - configure max amount of time after which polling stops
  • total polling time in the event data

Spread the pollen 🌻

If you like this lib consider hitting that star ⭐️ button.

You can hit me up here

Twitter Follow