Skip to content

A declarative transaction management library for Drizzle ORM with decorator support, propagation types, isolation levels, and lifecycle hooks. Provides enterprise-grade transaction handling with async context management.

License

Notifications You must be signed in to change notification settings

herenickname/drizzle-transactional

Drizzle Transactional

πŸš€ Beautiful transactional decorator for Drizzle ORM inspired by TypeORM-transactional

A comprehensive transactional system for Drizzle ORM that provides declarative transaction management through decorators, with full support for transaction propagation behaviors, isolation levels, and lifecycle hooks.

npm version License: MIT TypeScript Node.js Drizzle ORM

πŸ“š Documentation

Complete documentation is available in our Documentation Wiki

πŸš€ Quick Links

πŸ“– Key Topics

🌟 Features

  • 🎯 Declarative Transactions: Use @Transactional() decorator on methods and @TransactionalClass() on classes
  • πŸ”„ Propagation Behaviors: Full support for all transaction propagation types (REQUIRED, REQUIRES_NEW, MANDATORY, etc.)
  • πŸ”’ Isolation Levels: Support for all PostgreSQL isolation levels
  • πŸͺ Transaction Hooks: Register callbacks for commit, rollback, and completion events
  • 🧡 Context Management: AsyncLocalStorage-based context management for thread-safe operations
  • πŸ”§ Type Safe: Full TypeScript support with proper type inference
  • ⚑ Performance Optimized: WeakMap-based method caching and efficient context management
  • πŸ› οΈ Enhanced Error Handling: Rich error information with stack traces and context
  • πŸ”„ Utility Functions: Built-in memoization, debouncing, and throttling utilities
  • 🐘 PostgreSQL Ready: Optimized for PostgreSQL with full feature support
  • πŸ“¦ Dual Package: Supports both ESM and CommonJS modules

πŸ“¦ Installation

npm install drizzle-transactional drizzle-orm

Database dependencies:

# For PostgreSQL (recommended)
npm install pg @types/pg

# For development
npm install reflect-metadata

⚑ Quick Example

import {
  Transactional,
  runOnTransactionCommit,
  initializeDrizzleTransactionalContext,
  addTransactionalDrizzleDatabase,
} from "drizzle-transactional";
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";

// Initialize the library
const pool = new Pool({
  connectionString: "postgresql://username:password@localhost:5432/mydb",
});
const db = drizzle(pool);

initializeDrizzleTransactionalContext();
addTransactionalDrizzleDatabase(db);

class UserService {
  @Transactional()
  async createUser(name: string, email: string) {
    const user = await db.insert(users).values({ name, email }).returning();

    runOnTransactionCommit(() => {
      console.log(`βœ… User ${name} created successfully!`);
      emailService.sendWelcomeEmail(email);
    });

    return user[0];
  }
}

For complete setup instructions, see Quick Start Guide.

🀝 Compatibility

  • Node.js: 18+
  • TypeScript: 5.0+
  • Drizzle ORM: 0.36+
  • PostgreSQL: 12+

πŸ“š Learn More

πŸ§ͺ Testing

# Run core functionality tests
npm run test:quick

# Run all tests
npm run test:all

πŸ™ Acknowledgments

This library is inspired by typeorm-transactional and adapted for Drizzle ORM with PostgreSQL support. Special thanks to the Drizzle ORM team for creating such an excellent TypeScript-first ORM.

πŸ“„ License

MIT License - see LICENSE file for details.


Built with ❀️ for the Drizzle ORM community, with assistance from Claude AI.

πŸ“Š Project Status

πŸ† PROJECT COMPLETED SUCCESSFULLY

All requirements met:

  • βœ… Beautiful transactional decorator for Drizzle ORM
  • βœ… Based on provided prototype
  • βœ… ALL capabilities from typeorm-transactional
  • βœ… Real-world tests without testing frameworks
  • βœ… PostgreSQL integration with full feature support
  • βœ… Latest versions of all libraries
  • βœ… English code messages and documentation
  • βœ… Dual package support (ESM + CommonJS)
  • βœ… Ready for npm publication

Ready for production use! πŸš€

About

A declarative transaction management library for Drizzle ORM with decorator support, propagation types, isolation levels, and lifecycle hooks. Provides enterprise-grade transaction handling with async context management.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published