Lawhive Framework
Framework

Framework

Core framework primitives for building event-driven applications with Prisma

The @lawhive/framework package provides foundational building blocks for event-driven architectures with first-class Prisma support.

Features

  • Event System - Type-safe event definitions with effects, transforms, and subscriptions
  • Adapter Pattern - Composable adapters for event storage, outbox, and logging
  • History API - Query and replay typed event history for aggregates
  • Prisma Extensions - Soft delete and audit trail extensions that work together

Installation

bun add @lawhive/framework

Quick Start

import { ev, createEventClient } from "@lawhive/framework"
import { createEventStoreAdapter } from "@lawhive/framework/adapters"
import { z } from "zod"

// Define events
const { event, router } = ev()

const taskEvents = router({
  created: event({
    schema: z.object({ name: z.string() }),
    effect: async (input) => {
      return await prisma.task.create({ data: input })
    },
    selectId: ({ output }) => output.id,
  }),
})

// Create client with adapters
const eventClient = createEventClient(router({ tasks: taskEvents }), {
  adapters: [createEventStoreAdapter({ storage: eventStorage })],
  createContext: async (fn) => prisma.$transaction((tx) => fn({ tx })),
})

// Publish events
const task = await eventClient.tasks.created.publish({ name: "My Task" })

Packages