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/frameworkQuick 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" })