0.4.0 • Published 2 years ago

loopback4-seeder v0.4.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

loopback4-seeder

This module contains a mixin to run seeders to populate tables.

Stability: ⚠️Experimental⚠️

Experimental packages provide early access to advanced or experimental functionality to get community feedback. Such modules are published to npm using 0.x.y versions. Their APIs and functionality may be subject to breaking changes in future releases.

Installation

npm install --save loopback4-seeder

Basic use

Use the mixin

This module provides a mixin for your Application that enables convenience methods.

import {SeedMixin} from 'loopback4-seeder';

class MyApplication extends SeedMixin(Application) {}

Implement the SeedMixinInterface

Optionally you can implement the SeedMixinInterface in the constructor of your custom Application class.

By doing that you can directly use the function loadSeeds without creating any seeder classes to load the data from files.

import {SeedMixin, SeedMixinInterface} from 'loopback4-seeder';
import json from './dummy.json';

export class MyApplication extends SeedMixin(Application) implements SeedMixinInterface {
  async loadSeeds(filterClasses?: string[]): Promise<void> {
    if (!filterClasses?.includes('Dummy'))
      await this.loadByModel(json, await this.getRepository(DummyRepository), Dummy);
  }
}

Create seeder

We can create an instance of Seeder.

import {Seeder, seeder} from 'loopback-seeder';

// Create a seed
@seeder()
export class DummySeeder extends Seeder {
  async beforeSeed(): Promise<void> {
    // Optionnally, run before seed to delete all data by example
  }

  async seed(): Promise<void> {
    // Run you seed code
  }
}

Add seed script

To be able to run the seeds, you will need to create a src/seed.ts file containing the next script:

import {Application} from './application';

export const seed = async (args: string[]) => {
  const app = new Application();
  await app.boot();
  await app.load(args);

  // Connectors usually keep a pool of opened connections,
  // this keeps the process running even after all work is done.
  // We need to exit explicitly.
  process.exit(0);
}

seed(process.argv).catch(err => {
  console.error('Cannot seed database schema', err);
  process.exit(1);
})

Then you will need to add a new script inside your package.json file, like:

{
  "scripts": {
    "seed": "node ./dist/seed"
  }
}

Run seed command

Seed database (populate database):

npm run seed

Seed database, only for a specific class (Dummy seeder):

npm run seed Dummy

Debug

To display debug messages from this package, you can use the next command:

DEBUG=loopback:seeder npm run seed

Tests

Run npm test from the root folder.

License

MIT