29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
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));
|
|
}
|
|
}
|