@ackplus/nest-seeder 1.1.15 → 1.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/QUICKSTART.md +105 -108
- package/README.md +333 -802
- package/dist/cli.js +68 -13
- package/dist/cli.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +14 -5
package/QUICKSTART.md
CHANGED
|
@@ -1,45 +1,62 @@
|
|
|
1
|
-
# Quick Start
|
|
1
|
+
# ⚡ Quick Start - 5 Minutes to Seeding!
|
|
2
2
|
|
|
3
|
-
Get started with nest-seeder in 5
|
|
3
|
+
Get started with `@ackplus/nest-seeder` in just 5 simple steps.
|
|
4
4
|
|
|
5
|
-
## 📦
|
|
5
|
+
## 📦 Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm install @ackplus/nest-seeder @faker-js/faker
|
|
9
9
|
npm install -D ts-node typescript
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Step 1: Create an Entity
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
```typescript
|
|
15
|
+
// src/entities/user.entity.ts
|
|
16
|
+
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
|
|
17
|
+
|
|
18
|
+
@Entity('users')
|
|
19
|
+
export class User {
|
|
20
|
+
@PrimaryGeneratedColumn()
|
|
21
|
+
id: number;
|
|
22
|
+
|
|
23
|
+
@Column()
|
|
24
|
+
name: string;
|
|
25
|
+
|
|
26
|
+
@Column({ unique: true })
|
|
27
|
+
email: string;
|
|
28
|
+
|
|
29
|
+
@Column({ default: 'user' })
|
|
30
|
+
role: string;
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Step 2: Create a Factory
|
|
15
35
|
|
|
16
36
|
```typescript
|
|
37
|
+
// src/factories/user.factory.ts
|
|
17
38
|
import { Factory } from '@ackplus/nest-seeder';
|
|
18
39
|
|
|
19
40
|
export class UserFactory {
|
|
41
|
+
@Factory((faker) => faker.person.fullName())
|
|
42
|
+
name: string;
|
|
43
|
+
|
|
20
44
|
@Factory((faker) => faker.internet.email())
|
|
21
45
|
email: string;
|
|
22
46
|
|
|
23
|
-
@Factory((faker) => faker.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
@Factory((faker) => faker.person.lastName())
|
|
27
|
-
lastName: string;
|
|
28
|
-
|
|
29
|
-
@Factory((faker) => faker.internet.password())
|
|
30
|
-
password: string;
|
|
47
|
+
@Factory((faker) => faker.helpers.arrayElement(['admin', 'user', 'guest']))
|
|
48
|
+
role: string;
|
|
31
49
|
}
|
|
32
50
|
```
|
|
33
51
|
|
|
34
|
-
##
|
|
35
|
-
|
|
36
|
-
Create a file `src/database/seeders/user.seeder.ts`:
|
|
52
|
+
## Step 3: Create a Seeder
|
|
37
53
|
|
|
38
54
|
```typescript
|
|
55
|
+
// src/seeders/user.seeder.ts
|
|
39
56
|
import { Injectable } from '@nestjs/common';
|
|
40
57
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
41
58
|
import { Repository } from 'typeorm';
|
|
42
|
-
import { Seeder,
|
|
59
|
+
import { Seeder, DataFactory } from '@ackplus/nest-seeder';
|
|
43
60
|
import { User } from '../entities/user.entity';
|
|
44
61
|
import { UserFactory } from '../factories/user.factory';
|
|
45
62
|
|
|
@@ -50,59 +67,28 @@ export class UserSeeder implements Seeder {
|
|
|
50
67
|
private readonly userRepository: Repository<User>,
|
|
51
68
|
) {}
|
|
52
69
|
|
|
53
|
-
async seed(
|
|
70
|
+
async seed(): Promise<void> {
|
|
54
71
|
const factory = DataFactory.createForClass(UserFactory);
|
|
55
72
|
const users = factory.generate(10);
|
|
56
73
|
await this.userRepository.save(users);
|
|
57
74
|
console.log('✅ Seeded 10 users');
|
|
58
75
|
}
|
|
59
76
|
|
|
60
|
-
async drop(
|
|
77
|
+
async drop(): Promise<void> {
|
|
61
78
|
await this.userRepository.delete({});
|
|
62
79
|
}
|
|
63
80
|
}
|
|
64
81
|
```
|
|
65
82
|
|
|
66
|
-
##
|
|
67
|
-
|
|
68
|
-
Update your `app.module.ts`:
|
|
69
|
-
|
|
70
|
-
```typescript
|
|
71
|
-
import { Module } from '@nestjs/common';
|
|
72
|
-
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
73
|
-
import { SeederModule } from '@ackplus/nest-seeder';
|
|
74
|
-
import { User } from './database/entities/user.entity';
|
|
75
|
-
import { UserSeeder } from './database/seeders/user.seeder';
|
|
76
|
-
|
|
77
|
-
@Module({
|
|
78
|
-
imports: [
|
|
79
|
-
TypeOrmModule.forRoot({
|
|
80
|
-
type: 'postgres',
|
|
81
|
-
host: 'localhost',
|
|
82
|
-
port: 5432,
|
|
83
|
-
username: 'postgres',
|
|
84
|
-
password: 'postgres',
|
|
85
|
-
database: 'mydb',
|
|
86
|
-
entities: [User],
|
|
87
|
-
synchronize: true,
|
|
88
|
-
}),
|
|
89
|
-
TypeOrmModule.forFeature([User]),
|
|
90
|
-
SeederModule.register({
|
|
91
|
-
seeders: [UserSeeder],
|
|
92
|
-
}),
|
|
93
|
-
],
|
|
94
|
-
})
|
|
95
|
-
export class AppModule {}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## 🖥️ Step 5A: Option 1 - Using CLI (Recommended)
|
|
83
|
+
## Step 4: Create Seeder Configuration
|
|
99
84
|
|
|
100
|
-
|
|
85
|
+
Create `seeder.config.ts` in your **project root**:
|
|
101
86
|
|
|
102
87
|
```typescript
|
|
88
|
+
// seeder.config.ts (in project root)
|
|
103
89
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
104
|
-
import { User } from './entities/user.entity';
|
|
105
|
-
import { UserSeeder } from './seeders/user.seeder';
|
|
90
|
+
import { User } from './src/entities/user.entity';
|
|
91
|
+
import { UserSeeder } from './src/seeders/user.seeder';
|
|
106
92
|
|
|
107
93
|
export default {
|
|
108
94
|
imports: [
|
|
@@ -122,92 +108,103 @@ export default {
|
|
|
122
108
|
};
|
|
123
109
|
```
|
|
124
110
|
|
|
125
|
-
|
|
111
|
+
## Step 5: Add Script & Run
|
|
112
|
+
|
|
113
|
+
Add to `package.json`:
|
|
126
114
|
|
|
127
115
|
```json
|
|
128
116
|
{
|
|
129
117
|
"scripts": {
|
|
130
|
-
"seed": "nest-seed -c
|
|
131
|
-
"seed:refresh": "nest-seed -c
|
|
118
|
+
"seed": "nest-seed -c seeder.config.ts",
|
|
119
|
+
"seed:refresh": "nest-seed -c seeder.config.ts --refresh"
|
|
132
120
|
}
|
|
133
121
|
}
|
|
134
122
|
```
|
|
135
123
|
|
|
136
|
-
|
|
124
|
+
Run it:
|
|
137
125
|
|
|
138
126
|
```bash
|
|
139
127
|
npm run seed
|
|
140
128
|
```
|
|
141
129
|
|
|
142
|
-
|
|
130
|
+
**Output:**
|
|
131
|
+
```
|
|
132
|
+
🌱 Starting NestJS Seeder...
|
|
133
|
+
📁 Loading configuration from: seeder.config.ts
|
|
134
|
+
[Nest] Starting Nest application...
|
|
135
|
+
[Nest] TypeOrmModule dependencies initialized
|
|
136
|
+
✅ Seeded 10 users
|
|
137
|
+
```
|
|
143
138
|
|
|
144
|
-
|
|
139
|
+
## 🎉 Success!
|
|
145
140
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
141
|
+
You've successfully seeded your database!
|
|
142
|
+
|
|
143
|
+
## 📚 Next Steps
|
|
144
|
+
|
|
145
|
+
### Run with options:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Drop and reseed
|
|
149
|
+
npm run seed:refresh
|
|
150
|
+
|
|
151
|
+
# Run specific seeder
|
|
152
|
+
npm run seed -- --name UserSeeder
|
|
153
|
+
|
|
154
|
+
# With dummy data flag
|
|
155
|
+
npm run seed -- --dummyData
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Add More Seeders
|
|
159
|
+
|
|
160
|
+
1. Create more factories and seeders
|
|
161
|
+
2. Add them to `seeder.config.ts`:
|
|
157
162
|
|
|
158
|
-
|
|
163
|
+
```typescript
|
|
164
|
+
export default {
|
|
165
|
+
imports: [/* ... */],
|
|
166
|
+
seeders: [
|
|
167
|
+
UserSeeder,
|
|
168
|
+
PostSeeder,
|
|
169
|
+
CommentSeeder,
|
|
170
|
+
],
|
|
171
|
+
};
|
|
159
172
|
```
|
|
160
173
|
|
|
161
|
-
###
|
|
174
|
+
### Watch Mode for Development
|
|
175
|
+
|
|
176
|
+
Add to `package.json`:
|
|
162
177
|
|
|
163
178
|
```json
|
|
164
179
|
{
|
|
165
180
|
"scripts": {
|
|
166
|
-
"seed": "
|
|
167
|
-
"seed:refresh": "ts-node src/seed.ts --refresh"
|
|
181
|
+
"seed:watch": "nodemon --watch src/seeders --watch src/factories --ext ts --exec nest-seed -c seeder.config.ts"
|
|
168
182
|
}
|
|
169
183
|
}
|
|
170
184
|
```
|
|
171
185
|
|
|
172
|
-
|
|
186
|
+
Run:
|
|
173
187
|
|
|
174
188
|
```bash
|
|
175
|
-
npm run seed
|
|
189
|
+
npm run seed:watch
|
|
176
190
|
```
|
|
177
191
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
You've successfully set up nest-seeder!
|
|
181
|
-
|
|
182
|
-
## 📚 Next Steps
|
|
183
|
-
|
|
184
|
-
### Run specific seeders:
|
|
185
|
-
```bash
|
|
186
|
-
npm run seed -- --name UserSeeder
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### Refresh data (drop and reseed):
|
|
190
|
-
```bash
|
|
191
|
-
npm run seed:refresh
|
|
192
|
-
```
|
|
192
|
+
Now your database will auto-reseed when you modify seeders or factories!
|
|
193
193
|
|
|
194
|
-
|
|
195
|
-
1. Create more factory classes
|
|
196
|
-
2. Create more seeder classes
|
|
197
|
-
3. Add them to your config/module
|
|
198
|
-
4. Run!
|
|
194
|
+
## 💡 Tips
|
|
199
195
|
|
|
200
|
-
|
|
201
|
-
-
|
|
202
|
-
-
|
|
203
|
-
-
|
|
204
|
-
-
|
|
196
|
+
- **Start small**: Begin with one entity, then add more
|
|
197
|
+
- **Use factories**: They make generating data super easy
|
|
198
|
+
- **Order matters**: List seeders in dependency order
|
|
199
|
+
- **Drop method**: Always implement drop() to clear data
|
|
200
|
+
- **Environment variables**: Use them for database config
|
|
205
201
|
|
|
206
|
-
##
|
|
202
|
+
## 🔗 Resources
|
|
207
203
|
|
|
208
|
-
-
|
|
209
|
-
-
|
|
210
|
-
-
|
|
204
|
+
- [Full Documentation](./README.md)
|
|
205
|
+
- [Examples Directory](./examples/)
|
|
206
|
+
- [GitHub Repository](https://github.com/ackplus/nest-seeder)
|
|
211
207
|
|
|
212
|
-
|
|
208
|
+
---
|
|
213
209
|
|
|
210
|
+
Ready to seed! 🌱
|