@giancosta86/worker-facade
v1.0.0
Published
Message-passing TypeScript utilities for Worker
Maintainers
Readme
worker-facade
Message-passing TypeScript utilities for Worker
worker-facade is a TypeScript library of utilities designed to simplify message-based interaction with Worker instances, as well as their implementation:
The
WorkerFacadeinterface includes only a subset ofWorker's methods: the ones for message passing, from the perspective of clientsThe
RequestListenerfunction type turns the implementation of a worker into a one-liner, while enabling the creation of mocks (already implementing theWorkerFacadeinterface) 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
Workervia messages, pass its clients theWorkerFacadeinterface instead of theWorkeritself - because:WorkerFacadeis structurally supported byWorker, but provides less methodsin 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
RequestListenerfunction 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 eventswhen 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,messageerroranderrorevents - expressed by theWorkerFacade.EventTypeunion type; listeners are called when the worker responds
- removeEventListener() - used to remove a listener for one of the supported event types
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:
messagemessageerrorerror
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 processeda
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
Workerenable the creation of a mock, in the worker-mock package
Further references
- worker-mock - Minimalist Worker mocks in TypeScript
