import { DefaultNamingStrategy, NamingStrategyInterface } from 'typeorm'; function toSnakeCase(str: string): string { return str.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/^_/, ''); } export class SnakeNamingStrategy extends DefaultNamingStrategy implements NamingStrategyInterface { tableName(className: string, customName: string): string { return customName || toSnakeCase(className); } columnName(propertyName: string, customName: string, embeddedPrefixes: string[]): string { const prefix = embeddedPrefixes.length ? toSnakeCase(embeddedPrefixes.join('_')) + '_' : ''; return prefix + (customName || toSnakeCase(propertyName)); } relationName(propertyName: string): string { return toSnakeCase(propertyName); } joinColumnName(relationName: string, referencedColumnName: string): string { return toSnakeCase(relationName) + '_' + referencedColumnName; } joinTableColumnName(tableName: string, propertyName: string, columnName?: string): string { return toSnakeCase(tableName) + '_' + (columnName || toSnakeCase(propertyName)); } }