@joakimbugge/seeder
v0.3.3
Published
ORM-agnostic decorator-based entity seeding
Downloads
106
Maintainers
Readme
seeder
ORM-agnostic foundation for decorator-based entity seeding. This is the core package that typeorm-seeder and mikroorm-seeder are built on.
If you are using TypeORM or MikroORM, install the ORM-specific package instead — you do not need this package directly.
Coded by AI. Reviewed by humans.
📖 Full documentation · API reference
When to use this package
Install @joakimbugge/seeder directly when you want to build seeder support for a data layer that is not TypeORM or MikroORM. It provides the @Seed decorator, the full creation and persistence pipeline, and two adapter interfaces for plugging in your ORM.
Installation
# npm
npm install @joakimbugge/seeder
# yarn
yarn add @joakimbugge/seeder
# pnpm
pnpm add @joakimbugge/seederQuick example
Implement MetadataAdapter and PersistenceAdapter, then wire them into a seed() function:
import {
makeSeedBuilder,
Seed,
} from '@joakimbugge/seeder'
import type {
MetadataAdapter,
PersistenceAdapter,
EntityConstructor,
EntityInstance,
SeedContext,
} from '@joakimbugge/seeder'
const metadataAdapter: MetadataAdapter = {
getEmbeddeds: () => [],
getRelations: () => [],
}
interface MyContext extends SeedContext {
db: MyDatabaseConnection
}
const persistenceAdapter: PersistenceAdapter<MyContext> = {
async save(_EntityClass, entities, { db }) {
return db.insertAll(entities)
},
}
export function seed<T extends EntityInstance>(EntityClass: EntityConstructor<T>) {
return makeSeedBuilder(EntityClass, metadataAdapter, persistenceAdapter)
}Then annotate entities and seed as usual:
import { faker } from '@faker-js/faker'
class User {
@Seed(() => faker.person.fullName())
name!: string
}
const user = await seed(User).create()
// user.name → seeded full name
await seed(User).save({ db })
// persisted via your adapterLicense
MIT
