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

nice-threads

v0.9.0

Published

A promise wrapper for JavaScript Workers, batteries

Downloads

363

Readme

Nice Threads

A promise wrapper for JavaScript Workers, batteries included for Deno and Node.

Usage

Import using Deno, Node CJS require, or Node ESM import.

All executors and workers are of type module; use await import to dynamically import other modules at runtime. Using require will result in transpiling those statements to await import, so ensure that Node modules you want to use also provide ESM exports. This is also how TypeScript support "just works" when targeting CommonJS module syntax.

Then, you can start individual threads and manage them yourself:

const niceThread = new NiceThread(async function (input) {
	// Example only. Typically, you want some big work to do off the main thread.
	return input
});

const result = await niceThread.call(10); // Expected: '10'

Or use the provided round-robin thread pool:

const pool = new NiceThreadPool(async (size: number): string => {
	const myImport = await import('some_import');
	return await myImport(size);
});

pool.poolSize = 6;

const results = await pool.all(Array.from({ length: 20 }, () => 2048));

Accurate debugging and testing is now supported with a module-wide API.

// Example only.
import { mock, unmock } from 'https://deno.land/x/nice_threads/mod.ts' // or `from 'nice-threads'`

describe('My Test', () => {
	it('should give me real code coverage', async () => {
		mock()
		const niceThread = new NiceThread(async function (input) {
			return input
		});

		const result = await niceThread.call(10); // Expected: '10'
		unmock()
	})
})

For complete details of the library, please see the hosted documentation. In-line code examples will be added before a major version release.

Fixes old lib Promise Workers

This code base is a refactor of the promise-workers library. Nice Threads has a better name, and works in Node and Deno.

Most features of Promise Workers will be deprecated. A list of feature parity and reasoning will be forthcoming. The main driver is that Promise Workers was written with a lot of assumptions regarding Node 12 that no longer apply, and had major compatibility issues with Workers in Web and Deno. It was easier to get a clean break than to treat it as a new version of Promise Workers.