evw

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>`;
});