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

casi

v0.1.2

Published

> Composable Asynchronous Iterators

Downloads

2

Readme

casi

Composable Asynchronous Iterators

A collection of helper functions for working with JavaScript Asynchronous Iterators.

Getting started

You can install casi to your project by typing:

yarn add casi

or if you use npm:

npm install casi --save

This installs casi as a dependency to your project and you can require the library in your project:

// Using require
const { fromEvent } = require('casi')

const iterator = fromEvent(document, 'click')

// Using ES Modules
import { fromEvent } from 'casi'

const iterator = fromEvent(document, 'click')

Example: Simple map and filter

You can use simple functions like map and filter to manipulate your asynchronous iterators:

import { pipe, assign, fromArray, map, filter } from 'casi'

const printOddDoubles = pipe(
  fromArray,
  filter(x => x % 2 === 1),
  map(x => x + x),
  assign(console, 'log')
)

printOddDoubles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
// Prints 2, 6, 10, 14, 18

▶️ See live example!

This example takes an array, converts it to an asynchronous iterator with fromArray, filters out even values with filter, doubles all the remaining values with map and finally prints the values out to your console using assign setter.

Notice that all of these functions are composable, which means you can compose higher-order functions using tools like compose or pipe. In our example we use pipe (which is a normal compose, but the order of the arguments is reversed) to create a general function called printOddDoubles.

Example: Simple counter

Implementing a simple counter in casi can be done in few lines. Assuming you have a couple of buttons and an element with id result, you can do the following:

import { scan, assign, fromEvent, pipe, map, merge } from 'casi'

const up = fromEvent(document.getElementById('plus'), 'click')
const down = fromEvent(document.getElementById('minus'), 'click')
const result = document.getElementById('result')

const stream = merge([map(+1, up), map(-1, down)])
const assignResult = pipe(
  scan(0, (a, b) => a + b),
  assign(result, 'innerText')
)

assignResult(stream)

▶️ ️️See live example!

This example first takes click events from buttons with ids plus and minus, and converts them to AsyncIterableIterator streams with fromEvent function.

We then use map to convert the values to +1 and -1 respectively, and we combine those iterators to a single iterator called stream.

The scan function helps us to hold a value while incrementing/decrementing it by the value from stream. Last we'll use assign to bind the value to element with id result.

Developing

You can run the tests in the project by running:

yarn test

All casi functions should be covered by automation tests.

Features

This project is meant to be a collection of helper functions to work with JavaScript's asynchronous iterators.

Motivation

This project aims to make the native JavaScript asynchronous iterators more usable while offering a bunch of functions that help to handle the concept in your code.

The project takes heavy inspiration from existing stream-handling libraries like bacon.js and RxJS, so if you're familiar with these concepts, you should have easy time following the functions found in casi.

Contributing

If you'd like to contribute, please fork the repository and use a feature branch. Pull requests are warmly welcome.

Links

  • Project homepage: https://github.com/jehna/casi
  • Repository: https://github.com/jehna/casi
  • Issue tracker: https://github.com/jehna/casi/issues
  • Related projects:

Licensing

The code in this project is licensed under MIT license.