Install & Compatibility
Where this runs
No compatibility data collected yet for this library.
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
Column
✓ import { Column } from 'peculiar-orm'
✗ import Column from 'peculiar-orm'
Column is a named export, not default. This is consistent across all decorators.
BaseRepository
✓ import { BaseRepository } from 'peculiar-orm'
✗ const { BaseRepository } = require('peculiar-orm')
Peculiar ORM is ESM-only; require will fail. Use ES module imports.
TransactionManager
✓ import { TransactionManager } from 'peculiar-orm'
✗ import { Transaction } from 'peculiar-orm'
No Transaction class exists. The correct symbol is TransactionManager.
ConnectionPoolManager
✓ import { ConnectionPoolManager } from 'peculiar-orm'
✗ import { PoolManager } from 'peculiar-orm'
Symbol name is ConnectionPoolManager, not PoolManager.
Index
✓ import { Index } from 'peculiar-orm'
✗ import { IndexDecorator } from 'peculiar-orm'
Use Index directly, not a wrapper.
Defines a User entity with decorators, creates a repository extending BaseRepository with CRUD methods, and sets up dependency injection with Inversify.
import { Container } from 'inversify';
import { ConnectionPoolManager, TransactionManager, Column, Index, BaseRepository } from 'peculiar-orm';
class User {
@Column('uuid DEFAULT gen_random_uuid() PRIMARY KEY')
id?: string;
@Column('varchar(255) NOT NULL')
@Index({ unique: true })
email!: string;
@Column('varchar(255)')
name?: string;
@Column('timestamp with time zone DEFAULT now()')
createdAt?: Date;
}
class UserRepository extends BaseRepository<User> {
constructor(transactionManager: TransactionManager) {
super(transactionManager, 'users');
}
async create(user: User): Promise<User> {
const { columns, values, placeholders } = this.getEntityColumns(user);
const sql = `INSERT INTO ${this.tableName} (${columns.join(', ')}) VALUES (${placeholders.join(', ')}) RETURNING *`;
const result = await this.executeQuery<User>(sql, values);
return result.rows[0];
}
async findById(id: string): Promise<User | null> {
const result = await this.executeQuery<User>('SELECT * FROM users WHERE id = $1', [id]);
return result.rows[0] || null;
}
}
const container = new Container();
container.bind(ConnectionPoolManager).toDynamicValue(() => new ConnectionPoolManager({
host: process.env.DB_HOST ?? 'localhost',
database: process.env.DB_NAME ?? 'my_db',
user: process.env.DB_USER ?? 'postgres',
password: process.env.DB_PASSWORD ?? 'password',
max: 20,
idleTimeoutMillis: 30000
})).inSingletonScope();
container.bind(TransactionManager).toSelf().inRequestScope();
container.bind(UserRepository).toSelf();
Errors
Common errors & fixes
Cannot find module 'peculiar-orm' or its corresponding type declarations.
Package not installed or typings not available. Peculiar ORM ships with TypeScript types; this error indicates missing package.
fixnpm install peculiar-orm
TypeError: Class extends value undefined is not a constructor or null
Missing required dependency (pg, reflect-metadata, or inversify) causing BaseRepository import to fail.
fixnpm install pg reflect-metadata inversify
ReflectDecorator: 'experimentalDecorators' is required for decorators to work.
tsconfig.json missing the required compiler options.
fixAdd "experimentalDecorators": true and "emitDecoratorMetadata": true to compilerOptions.
Pool is not a constructor
pg package is not installed or incorrect version (likely pg is missing).
Audit
Dependencies
pgrequiredPostgreSQL driver; used for all database connections and queries
reflect-metadatarequiredRequired for decorators to work (e.g., @Column, @Index)
inversifyrequiredDependency injection container; required for managing ConnectionPoolManager and TransactionManager singletons/scopes