JSPM

@codeforbreakfast/eventsourcing-store-filesystem

0.2.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 201
  • Score
    100M100P100Q67412F
  • License MIT

Filesystem-based event store implementation for learning and debugging - Human-readable JSON files organized by stream for easy inspection

Package Exports

  • @codeforbreakfast/eventsourcing-store-filesystem
  • @codeforbreakfast/eventsourcing-store-filesystem/package.json

Readme

@codeforbreakfast/eventsourcing-store-filesystem

Filesystem-based event store implementation for learning and debugging. Stores events as human-readable JSON files organized by stream.

Features

  • Human-readable storage: Events stored as formatted JSON files
  • Stream isolation: Each stream gets its own directory
  • Sequential naming: Events named by position (0.json, 1.json, etc.)
  • Easy inspection: Open files in any text editor to see events
  • Full EventStore interface: Compatible with all eventsourcing packages

Installation

npm install @codeforbreakfast/eventsourcing-store-filesystem

Usage

import { make, makeFileSystemEventStore } from '@codeforbreakfast/eventsourcing-store-filesystem';
import { BunFileSystem, BunPath } from '@effect/platform-bun';
import { Effect, pipe } from 'effect';

// Also works with Node.js using NodeFileSystem and NodePath from '@effect/platform-node'
const program = pipe(
  make({ baseDir: './event-data' }),
  Effect.flatMap(makeFileSystemEventStore),
  Effect.provide(BunFileSystem.layer),
  Effect.provide(BunPath.layer)
);

const eventStore = await Effect.runPromise(program);

The baseDir directory will be created automatically if it doesn't exist.

Once created, use the eventStore with the standard EventStore API documented in @codeforbreakfast/eventsourcing-store.

Configuration

The store accepts a single configuration option:

Option Type Description
baseDir string Root directory for storing event files. Created automatically if it doesn't exist.

Example:

import { make } from '@codeforbreakfast/eventsourcing-store-filesystem';

// Configure the base directory
const store = make({ baseDir: './my-events' });

Directory Structure

The store creates a simple directory structure:

event-data/
  stream-1/
    0.json
    1.json
    2.json
  stream-2/
    0.json
    1.json

Each event is stored as a formatted JSON file, making it easy to inspect and understand the event stream.

Example Event File

{
  "type": "UserCreated",
  "userId": "123",
  "name": "John Doe",
  "timestamp": "2024-01-15T10:30:00Z"
}

Performance Considerations

This implementation is designed for learning and debugging, not production use:

  • Each event is a separate file (can be slow with many events)
  • No caching or optimization
  • Simple concurrency control via file count checks
  • Live subscriptions work within a single process (uses in-memory PubSub)

For production use, consider:

  • @codeforbreakfast/eventsourcing-store-inmemory (for testing)
  • @codeforbreakfast/eventsourcing-store-postgres (for production)

Use Cases

  • Learning event sourcing concepts
  • Debugging event streams
  • Understanding event store behavior
  • Quick prototyping
  • Educational demonstrations

License

MIT