nestjsmigrationtypeorm

TypeORM migration fails with import error in NestJS project


I am getting an error while generating migrations in my project. The error is due to the transformer I am using in one of my Entities.

This is the error I am getting:

npm run migration:run

nest-starter@0.0.1 migration:run

npm run typeorm migration:run -- -d src/database/migration-data-source.ts

nest-starter@0.0.1 typeorm typeorm-ts-node-commonjs migration:run -d src/database/migration-data-source.ts

query: SELECT VERSION() AS version Error during migration run: Error: Cannot find module 'src/core/transformers/Decimal.transformer' Require stack:

Migration Script

import { ConfigService } from '@nestjs/config';
import { DataSource } from 'typeorm';
import { ConfigModule } from '@nestjs/config';
import { cwd } from 'process';
import { join } from 'path';

// This is needed to simulate the environment outside of NestJS
ConfigModule.forRoot();

// Initialize ConfigService
const configService = new ConfigService();

// Create a minimal DataSource instance for migrations without entities
export const MigrationDataSource = new DataSource({
  type: 'mysql',
  host: configService.get<string>('DB_HOST'),
  port: parseInt(configService.get<string>('DB_PORT'), 3306),
  username: configService.get<string>('DB_USERNAME'),
  password: configService.get<string>('DB_PASSWORD'),
  database: configService.get<string>('DB_NAME'),
  entities: [join(cwd(), 'src/entities/*.entity.ts')],
  migrations: [
    join(cwd(), 'src/database/migrations/*.ts'),
    join(cwd(), 'src/database/migrations/*.js')
  ],
  synchronize: false,
  logging: true,
  ssl: {
    rejectUnauthorized: false,
  },
});

Transformer Usage:

import { BaseEntity, Column, Entity, PrimaryGeneratedColumn, ManyToOne, JoinColumn } from "typeorm";
import { Payroll } from "./Payroll.entity";
import { DecimalTransformer } from "src/core/transformers/Decimal.transformer";

@Entity('payroll_dump')
export class PayrollDump extends BaseEntity {
    @PrimaryGeneratedColumn()
    id: number;

    @Column('decimal', { precision: 10, scale: 2, transformer: DecimalTransformer()})
    earnings: number;

    // ... Other fields and joins

}

Solution

  • try not to import it from src. Instead, use something like:
    ../core/transformers/Decimal.transformer