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

@vovikilelik/task-queue-js

v1.1.0

Published

The easy way to implement a client-server API

Downloads

6

Readme

Task-queue-js

Library for organizing client API based on Set theory.

Installation

  • Git git clone http://git.vovikilelik.com/Clu/task-queue-js.git
  • Npm npm i @vovikilelik/task-queue-js

Using

import { join, all, put } './task-queue.js';

Base scenarios

  • join(...f)(x) - like y = await f[0](x); z = await f[1](y); ... f[n];
  • all(...f)(x) - like Promise.all([...f.map(fn => fn(x))])
  • put(key, f)(x) - like f(x[key]).then(a => ({ [key]: a }))

Each scenario does not call requests immediately after creation, but only creates a script described in ...tasks. In order for the request has been executed, you need to call the ready-made scenario, like the function:

/* Create scenario */
const scenario = join(task1, task2, ..., taskn);

/* Execute scenario with various initial data */
scenario(initData).then(...).catch(...);

Each task is a function that takes the result of the previous task and returns a Promise.

const task = (data) => doPromise(data);
const scenario = join(task);

/* execute with data */
scenario(data);

The result of the task will merged to the result of the previous one. It can complement the previous object or overwrite some of the fields.

const task = (prev) => makeRequest(prev).then(items => ({ items }));

join(task)({ id: 1 }).then(console.log);
> { id: 1, items: [] }

Scenarios and tasks can be combined, and conditions can be specified directly when declaring arguments:

join(
  all(
    join(
      all(),
      ...
    ),
  ),
  isValid() && task
);

If there is no need for requests to the server, you can immediately transfer the finished data, both in scripts and in tasks, or return nothing:

const task1 = () => ({ one: 'Hello!' });
const task2 = () => false; // Will be ignored

const scenario = join(task1, task2, { two: 'Hi!' });
scenario().then(console.log);
> { one: 'Hello!', two: 'Hi!' }

Examples

/* An function for make request, do not mind... */
const myFetch = (url) => fetch(`https://${url}`).then(response => response.json());
import { join } './task-queue.js';

/* First task needs to id */
const loadUser = (response) => {
  const { id } = response;

  return myFetch(`user/${id}`)
    .then(json => ({ user: json }));
}

/* Second task needs to wait result of first task */
const loadItems = (response) => {
  const { id, user } = response;

  return myFetch(`metadata/${id}/${user.id}`)
    .then(json => ({ items: json }));
}

/* This tasks will call consistently
   and next task will be accept previous result. */
const scenario = join(loadUser, loadItems);

Using

/* It able to various requesting */
scenario({ id: 1 }).then(setData);
// { id: 1, user: {...}, items: [] }

scenario({ id: 2 }).then(setData);
// { id: 2, user: {...}, items: [] }
...