CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-mikro-orm--cli

Command-line interface tool for MikroORM TypeScript ORM providing database management, migrations, schema operations, and entity generation

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

seeders.mddocs/

Seeder Commands

MikroORM CLI seeding system for populating databases with initial or test data. Provides commands for creating seeder classes and executing them to insert structured data into the database.

Capabilities

Run Seeder

Executes a seeder class to populate the database with data. Supports both explicit seeder specification and default seeder execution.

/**
 * Run seeder class command
 */
command: "seeder:run"

interface SeederRunOptions extends BaseArgs {
  class?: string;  // Seeder class name to execute (--class / -c)
}

Usage Examples:

# Run default seeder (from configuration)
mikro-orm seeder:run

# Run specific seeder class
mikro-orm seeder:run --class UserSeeder

# Run seeder with custom config
mikro-orm seeder:run --class TestDataSeeder --config ./test.config.js

# Run for specific context
mikro-orm seeder:run --class ProductionSeeder --context production

Create Seeder

Creates a new seeder class file with proper structure and naming conventions. Handles class name formatting and file generation.

/**
 * Create new seeder class command
 */
command: "seeder:create <seeder>"

interface CreateSeederOptions extends BaseArgs {
  seeder: string;  // Seeder name (required positional argument)
}

Usage Examples:

# Create seeder with simple name
mikro-orm seeder:create User

# Create seeder with descriptive name
mikro-orm seeder:create TestData

# Create seeder that will be named "UserSeeder"
mikro-orm seeder:create UserSeeder

# Create with kebab-case name (becomes "UserDataSeeder")
mikro-orm seeder:create user-data

Seeder Class Structure

Generated seeder classes follow this structure:

import { Seeder } from '@mikro-orm/seeder';
import { EntityManager } from '@mikro-orm/core';

export class UserSeeder extends Seeder {

  async run(em: EntityManager): Promise<void> {
    // Seeder implementation goes here
    // Example:
    // const user = em.create(User, {
    //   name: 'John Doe',
    //   email: 'john@example.com'
    // });
  }

}

Seeder Naming Conventions

The seeder creation command automatically formats class names:

Name Formatting Rules

  • Removes existing "seeder" suffix (case-insensitive)
  • Converts kebab-case to PascalCase
  • Adds "Seeder" suffix to final class name

Examples

// Input -> Generated Class Name
"user" -> "UserSeeder"
"test-data" -> "TestDataSeeder" 
"UserSeeder" -> "UserSeeder"
"product-catalog" -> "ProductCatalogSeeder"
"admin" -> "AdminSeeder"

Command Options

Global Options

All seeder commands support:

  • --config: Path to ORM configuration file(s)
  • --contextName / --context: Configuration context name

seeder:run Options

  • --class / -c: Specify seeder class name to execute
    • If not provided, uses default seeder from configuration
    • Must match exact class name (case-sensitive)

seeder:create Arguments

  • <seeder>: Required positional argument for seeder name
    • Will be formatted according to naming conventions
    • Generates class file with proper structure

Error Handling

seeder:run Errors

  • Class not found: Specified seeder class doesn't exist or isn't accessible
  • No default seeder: No seeder specified and no default configured
  • Runtime errors: Seeder execution may fail due to:
    • Database constraint violations
    • Duplicate data conflicts
    • Foreign key constraint errors
    • Entity validation failures

seeder:create Errors

  • File system errors: Permission issues creating seeder files
  • Path conflicts: Seeder file already exists
  • Invalid names: Seeder name contains invalid characters
  • Configuration errors: Seeder path configuration issues

Seeder Implementation

Basic Seeder Example

import { Seeder } from '@mikro-orm/seeder';
import { EntityManager } from '@mikro-orm/core';
import { User } from '../entities/User';

export class UserSeeder extends Seeder {

  async run(em: EntityManager): Promise<void> {
    const users = [
      { name: 'Alice Johnson', email: 'alice@example.com', role: 'admin' },
      { name: 'Bob Smith', email: 'bob@example.com', role: 'user' },
      { name: 'Carol Davis', email: 'carol@example.com', role: 'moderator' }
    ];

    for (const userData of users) {
      const user = em.create(User, userData);
    }

    await em.flush();
  }

}

Complex Seeder with Relationships

import { Seeder } from '@mikro-orm/seeder';
import { EntityManager } from '@mikro-orm/core';
import { User } from '../entities/User';
import { Post } from '../entities/Post';

export class BlogSeeder extends Seeder {

  async run(em: EntityManager): Promise<void> {
    // Create users first
    const author = em.create(User, {
      name: 'Jane Author',
      email: 'jane@example.com'
    });

    await em.flush(); // Flush to get user ID

    // Create posts with relationships
    const posts = [
      { title: 'First Post', content: 'Content...', author },
      { title: 'Second Post', content: 'More content...', author }
    ];

    for (const postData of posts) {
      em.create(Post, postData);
    }

    await em.flush();
  }

}

Configuration

Seeder system uses these configuration options:

interface SeederConfiguration {
  seeder: {
    path?: string;           // Path to seeder files directory
    defaultSeeder?: string;  // Default seeder class name for seeder:run
    glob?: string;          // Glob pattern for finding seeder files
    emit?: 'ts' | 'js';     // File type to generate
  };
}

Default Configuration Example

// In your MikroORM config
export default {
  // ... other config
  seeder: {
    path: './src/seeders',
    defaultSeeder: 'DatabaseSeeder',
    glob: '!(*.d).{js,ts}',
    emit: 'ts'
  }
};

Best Practices

Seeder Design

  • Idempotent: Seeders should be safe to run multiple times
  • Data cleanup: Clear existing data before seeding if needed
  • Relationships: Handle entity relationships and dependencies properly
  • Error handling: Implement proper error handling for constraint violations

Development Workflow

  • Environment-specific: Use different seeders for development, testing, and production
  • Order dependencies: Consider seeder execution order for related data
  • Data volume: Keep development seeders lightweight, production seeders comprehensive
  • Version control: Include seeder files in version control for team consistency

docs

cache.md

database.md

debug.md

entities.md

helper-api.md

index.md

migrations.md

schema.md

seeders.md

tile.json