Netpress Laravel-inspired backend framework for Node.js
Frameworkv0.1.14 Starterv0.1.12 Docsv1.0.3
Overview Installation Architecture CLI
Data

Seeders

Seeders now live in one shared directory and are composed from DatabaseSeeder.js instead of relying on driver-specific folder splits or alphabetical order alone.

Generated seeders use the shared log helper, so local seeding output matches the rest of the framework.

Quick Example

// database/seeders/DatabaseSeeder.js
export async function run(db) {
  await db.call([
    "UserSeeder",
    "PostSeeder",
  ]);
}
// database/seeders/PostSeeder.js
import { log } from "@admicaa/netpress";

export async function run(db) {
  const Post = db.model("Post");

  if (!Post) {
    throw new Error("Post model is not registered.");
  }

  const existing = await Post.first({ title: "Hello Netpress" });
  if (!existing) {
    await Post.create({
      userId: 1,
      title: "Hello Netpress",
      body: "Shared seeders now compose from DatabaseSeeder.",
      status: "published",
    });
  }

  log.success("PostSeeder completed.");
}

db.model("Post") returns the regular discovered Post model class for the active runtime. Once you have it, methods like Post.create(), Post.query(), and Post.first() are the normal model API.

Seeder examples use db.model(...) because that is the helper Netpress passes into run(db), and it matches the generated seeder stubs. In regular application code, you will usually import Post directly.

What db Gives You

Inside a seeder, Netpress passes a helper object with:

HelperPurpose
db.defaultConnectionthe default configured connection name
db.model(name)resolve the regular discovered model class by name inside a seeder
await db.connection(name)resolve a live connection handle
await db.call(target)run another seeder target

db.call(...) accepts:

  • a seeder name like "UserSeeder"
  • an array of seeder names
  • an imported module
  • a class with run()
  • a function

Commands

npm run artisan -- make:seeder DatabaseSeeder
npm run artisan -- make:seeder PostSeeder
npm run artisan -- db:seed
npm run artisan -- db:seed --seeder=PostSeeder
npm run artisan -- migrate:fresh --seed

Seeder Discovery Rules

Seeder discovery now prefers:

  1. database/seeders/
  2. legacy fallback folders only when the shared root has no top-level seeders

That matches the model and migration discovery strategy.

  • keep DatabaseSeeder.js as the root entry point
  • use db.call(...) to compose other seeders
  • make seeders idempotent so reruns stay safe
  • prefer shared models over raw inserts unless you intentionally want to bypass model logic

When To Use Raw Connections

If a seed really needs lower-level access, you can ask for a connection explicitly:

export async function run(db) {
  const knex = await db.connection("mysql");
  await knex("roles").insert({ name: "admin" });
}

Most starter seeders should still stay on shared models.