What is evw?
evw (aka. event &workflow) is a library for building event-driven application in JavaScript/TypeScript.
Installation
npm i evw
Define events
import { defineEvent } from "evw";
export const userCreatedEvent = defineEvent<{ userId: string }>();
export const userDeletedEvent = defineEvent<{ userId: string }>();
Define workflows
import { createWorkflow } from "evw";
import { userCreatedEvent } from "./events";
const workflow = createWorkflow();
workflow.handle(userCreatedEvent, async (event) => {
console.log(`User created: ${event.data.userId}`);
});
const { sendEvent } = workflow.createContext();
sendEvent(userCreatedEvent.with({ userId: "123" }));
Share context cross JS runtimes
Electron
// main.js
import { toIPCRenderer } from "evw/electron";
const { stream } = workflow.createContext();
toIPCRenderer(stream, mainWindow);
// preload.js
import { fromIPCRenderer } from "evw/electron";
import { contextBridge, ipcRenderer } from "electron";
contextBridge.exposeInMainWorld("electronAPI", {
...fromIPCRenderer(ipcRenderer),
});
// renderer.js
import { userCreatedEvent } from "./events";
window.electronAPI.on(userCreatedEvent, (event) => {
document.body.innerHTML += `<p>User created: ${event.data.userId}</p>`;
});