CLI
populate
Seed data from TypeScript populator files
What it does
Runs one or more populator files against your database. Populators are TypeScript files that seed data. Useful for local development, test setup, or resetting to a known state.
Run
npx damian populate
npx damian populate --group core
npx damian populate --group core --populator userspnpm damian populate
pnpm damian populate --group core
pnpm damian populate --group core --populator usersyarn damian populate
yarn damian populate --group core
yarn damian populate --group core --populator usersFlags
| Flag | Short | Description |
|---|---|---|
--group | -g | Run all populators in a group (skips group prompt) |
--populator | -p | Run a single populator in the group (requires --group) |
Without flags, prompts you to select a group, then multi-select populators within it.
File structure
Place populator files under {root}/populators/{group}/ named *.populator.ts:
damian/
populators/
core/
users.populator.ts
roles.populator.ts
sandbox/
empty-state.populator.ts
with-orders.populator.tsEach file exports a default populator() instance:
import { populator } from 'damian'
import { db, sql } from '../../../src/db'
export default populator({
populate: async () => {
await db.query(sql.void`INSERT INTO public.users (name) VALUES ('Alice'), ('Bob')`)
}
})Dependencies
Use dependsOn to declare execution order. The runner topologically sorts so dependencies run first:
import { populator } from 'damian'
export default populator({
dependsOn: ['users'],
populate: async () => {
// users guaranteed to exist
}
})Entries match base filenames without .populator.ts. All entries must exist in the same selected set.
Special groups
core and sandbox have special meaning in the sandbox command:
coreruns automatically before any sandbox populatorsandboxrepresents different development scenarios; sandbox command asks you to pick one
The populate command treats all groups equally.