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

@giancosta86/worker-facade

v1.0.0

Published

Message-passing TypeScript utilities for Worker

Downloads

14

Readme

worker-facade

Message-passing TypeScript utilities for Worker

GitHub CI npm version MIT License

worker-facade is a TypeScript library of utilities designed to simplify message-based interaction with Worker instances, as well as their implementation:

  • The WorkerFacade interface includes only a subset of Worker's methods: the ones for message passing, from the perspective of clients

  • The RequestListener function type turns the implementation of a worker into a one-liner, while enabling the creation of mocks (already implementing the WorkerFacade interface) via the worker-mock library

Installation

The package on NPM is:

@giancosta86/worker-facade

The public API entirely resides in the root package index, so one shouldn't reference specific modules.

Usage

The practical aspects of this library can be summarized as follows:

  • when you need to interact with a Worker via messages, pass its clients the WorkerFacade interface instead of the Worker itself - because:

    • WorkerFacade is structurally supported by Worker, but provides less methods

    • in tests, you can mock the worker by instantiating a WorkerMock - provided by the worker-mock package

  • declare the body of your worker as a function compatible with the RequestListener function type - that is, taking these parameters:

    • the request itself

    • a sendResponse(response) function - that can be called as many times as required, to send response messages

    This way:

    • in the worker script, just call RequestListener.register(self, <your listener function>) - without having to take care of message events

    • when mocking the worker, especially in tests, just call WorkerMock.create(<your listener function>) to have a full-fledged mock

API documentation

WorkerFacade

WorkerFacade<TRequest=unknown> is an interface providing just the methods required to perform message passing with any kind of Worker instance:

  • postMessage() - sending a request message, of type TRequest, to the worker interface; you must pass the message itself, which will be wrapped into a dedicated event.
  • addEventListener() - only supporting the message, messageerror and error events - expressed by the WorkerFacade.EventType union type; listeners are called when the worker responds

WorkerFacade is a subset of Worker's interface - and it is also explicitly implemented by WorkerMock, in the worker-mock package.

WorkerFacade.EventType

Union type defining the only events supported by this message-passing facade:

  • message

  • messageerror

  • error

WorkerFacade.EventListener

Should you need to store message-related event listeners into callback variables, you can use the WorkerFacade.EventListener function type - which is focused on the events supported by WorkerFacade.

RequestListener

RequestListener<TRequest, TResponse> is a type describing a function with 2 arguments:

  • a request, of type TRequest - the actual data (not the event) that must be processed

  • a ResponseSender - actually, a function whose first parameter is a response to be sent to the client

RequestListener is an abstraction used to:

  • simplify the actual implementation of a Worker

  • enable the creation of a mock, in the worker-mock package

Further references