@ackplus/nest-seeder 1.1.9 → 1.1.15-beta.3

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.
Files changed (69) hide show
  1. package/LICENSE +22 -0
  2. package/QUICKSTART.md +223 -0
  3. package/README.md +623 -6
  4. package/{src → dist}/cli.d.ts +0 -1
  5. package/{src → dist}/cli.js +107 -24
  6. package/dist/cli.js.map +1 -0
  7. package/{src → dist}/index.d.ts +0 -1
  8. package/dist/index.js +25 -0
  9. package/dist/index.js.map +1 -0
  10. package/{src → dist}/lib/decorators/factory.decorator.d.ts +0 -1
  11. package/{src → dist}/lib/decorators/factory.decorator.js +1 -0
  12. package/dist/lib/decorators/factory.decorator.js.map +1 -0
  13. package/{src → dist}/lib/factory/data.factory.d.ts +0 -1
  14. package/{src → dist}/lib/factory/data.factory.js +1 -11
  15. package/dist/lib/factory/data.factory.js.map +1 -0
  16. package/{src → dist}/lib/index.d.ts +0 -1
  17. package/dist/lib/index.js +21 -0
  18. package/dist/lib/index.js.map +1 -0
  19. package/{src → dist}/lib/interfaces/factory.interface.d.ts +0 -1
  20. package/{src → dist}/lib/interfaces/factory.interface.js +1 -0
  21. package/dist/lib/interfaces/factory.interface.js.map +1 -0
  22. package/{src → dist}/lib/interfaces/index.d.ts +0 -1
  23. package/dist/lib/interfaces/index.js +19 -0
  24. package/dist/lib/interfaces/index.js.map +1 -0
  25. package/{src → dist}/lib/interfaces/property-metadata.interface.d.ts +0 -1
  26. package/{src → dist}/lib/interfaces/property-metadata.interface.js +1 -0
  27. package/dist/lib/interfaces/property-metadata.interface.js.map +1 -0
  28. package/{src → dist}/lib/interfaces/seeder-module-async-options.interface.d.ts +0 -19
  29. package/{src → dist}/lib/interfaces/seeder-module-async-options.interface.js +1 -0
  30. package/dist/lib/interfaces/seeder-module-async-options.interface.js.map +1 -0
  31. package/dist/lib/interfaces/seeder-options-factory.interface.d.ts +4 -0
  32. package/{src → dist}/lib/interfaces/seeder-options-factory.interface.js +1 -0
  33. package/dist/lib/interfaces/seeder-options-factory.interface.js.map +1 -0
  34. package/{src → dist}/lib/seeder/seeder.d.ts +0 -1
  35. package/{src → dist}/lib/seeder/seeder.interface.d.ts +0 -1
  36. package/{src → dist}/lib/seeder/seeder.interface.js +1 -0
  37. package/dist/lib/seeder/seeder.interface.js.map +1 -0
  38. package/{src → dist}/lib/seeder/seeder.js +5 -2
  39. package/dist/lib/seeder/seeder.js.map +1 -0
  40. package/{src → dist}/lib/seeder/seeder.module.d.ts +0 -1
  41. package/{src → dist}/lib/seeder/seeder.module.js +9 -3
  42. package/dist/lib/seeder/seeder.module.js.map +1 -0
  43. package/{src → dist}/lib/seeder/seeder.service.d.ts +1 -2
  44. package/{src → dist}/lib/seeder/seeder.service.js +17 -6
  45. package/dist/lib/seeder/seeder.service.js.map +1 -0
  46. package/{src → dist}/lib/storages/factory.metadata.storage.d.ts +0 -1
  47. package/{src → dist}/lib/storages/factory.metadata.storage.js +2 -3
  48. package/dist/lib/storages/factory.metadata.storage.js.map +1 -0
  49. package/dist/tsconfig.build.tsbuildinfo +1 -0
  50. package/package.json +105 -5
  51. package/src/cli.d.ts.map +0 -1
  52. package/src/index.d.ts.map +0 -1
  53. package/src/index.js +0 -11
  54. package/src/lib/decorators/factory.decorator.d.ts.map +0 -1
  55. package/src/lib/factory/data.factory.d.ts.map +0 -1
  56. package/src/lib/index.d.ts.map +0 -1
  57. package/src/lib/index.js +0 -7
  58. package/src/lib/interfaces/factory.interface.d.ts.map +0 -1
  59. package/src/lib/interfaces/index.d.ts.map +0 -1
  60. package/src/lib/interfaces/index.js +0 -5
  61. package/src/lib/interfaces/property-metadata.interface.d.ts.map +0 -1
  62. package/src/lib/interfaces/seeder-module-async-options.interface.d.ts.map +0 -1
  63. package/src/lib/interfaces/seeder-options-factory.interface.d.ts +0 -9
  64. package/src/lib/interfaces/seeder-options-factory.interface.d.ts.map +0 -1
  65. package/src/lib/seeder/seeder.d.ts.map +0 -1
  66. package/src/lib/seeder/seeder.interface.d.ts.map +0 -1
  67. package/src/lib/seeder/seeder.module.d.ts.map +0 -1
  68. package/src/lib/seeder/seeder.service.d.ts.map +0 -1
  69. package/src/lib/storages/factory.metadata.storage.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,11 +1,628 @@
1
- # nest-auth
1
+ # @ackplus/nest-seeder
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ A powerful and flexible database seeding library for NestJS applications with support for factories, data generation using Faker.js, and CLI commands.
4
4
 
5
- ## Building
5
+ ## ✨ Features
6
6
 
7
- Run `nx build nest-auth` to build the library.
7
+ - 🌱 **CLI-Based** - Simple command-line interface, no app code modifications needed
8
+ - 🏭 **Factory Pattern** - Generate realistic test data with Faker.js
9
+ - 🔄 **Multiple ORMs** - Support for TypeORM, Mongoose, and Prisma
10
+ - 📦 **Batch Operations** - Efficient bulk data insertion
11
+ - 🎯 **Selective Seeding** - Run specific seeders by name
12
+ - 🔥 **Refresh Mode** - Drop existing data before seeding
13
+ - 🧪 **Test-Friendly** - Perfect for testing and development
14
+ - 📝 **TypeScript** - Full TypeScript support with type safety
8
15
 
9
- ## Running unit tests
16
+ ## 📦 Installation
10
17
 
11
- Run `nx test nest-auth` to execute the unit tests via [Jest](https://jestjs.io).
18
+ ```bash
19
+ npm install @ackplus/nest-seeder @faker-js/faker
20
+ # or
21
+ pnpm add @ackplus/nest-seeder @faker-js/faker
22
+ # or
23
+ yarn add @ackplus/nest-seeder @faker-js/faker
24
+ ```
25
+
26
+ **For TypeScript config files**, also install:
27
+
28
+ ```bash
29
+ npm install -D ts-node typescript
30
+ ```
31
+
32
+ ## 🚀 Quick Start (5 Steps)
33
+
34
+ ### Step 1: Create Entity
35
+
36
+ ```typescript
37
+ // src/entities/user.entity.ts
38
+ import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
39
+
40
+ @Entity('users')
41
+ export class User {
42
+ @PrimaryGeneratedColumn()
43
+ id: number;
44
+
45
+ @Column()
46
+ name: string;
47
+
48
+ @Column({ unique: true })
49
+ email: string;
50
+
51
+ @Column()
52
+ role: string;
53
+ }
54
+ ```
55
+
56
+ ### Step 2: Create Factory
57
+
58
+ ```typescript
59
+ // src/factories/user.factory.ts
60
+ import { Factory } from '@ackplus/nest-seeder';
61
+
62
+ export class UserFactory {
63
+ @Factory((faker) => faker.person.fullName())
64
+ name: string;
65
+
66
+ @Factory((faker) => faker.internet.email())
67
+ email: string;
68
+
69
+ @Factory((faker) => faker.helpers.arrayElement(['admin', 'user', 'guest']))
70
+ role: string;
71
+ }
72
+ ```
73
+
74
+ ### Step 3: Create Seeder
75
+
76
+ ```typescript
77
+ // src/seeders/user.seeder.ts
78
+ import { Injectable } from '@nestjs/common';
79
+ import { InjectRepository } from '@nestjs/typeorm';
80
+ import { Repository } from 'typeorm';
81
+ import { Seeder, DataFactory } from '@ackplus/nest-seeder';
82
+ import { User } from '../entities/user.entity';
83
+ import { UserFactory } from '../factories/user.factory';
84
+
85
+ @Injectable()
86
+ export class UserSeeder implements Seeder {
87
+ constructor(
88
+ @InjectRepository(User)
89
+ private readonly userRepository: Repository<User>,
90
+ ) {}
91
+
92
+ async seed(): Promise<void> {
93
+ // Create factory instance
94
+ const factory = DataFactory.createForClass(UserFactory);
95
+
96
+ // Generate 10 users
97
+ const users = factory.generate(10);
98
+
99
+ // Save to database
100
+ await this.userRepository.save(users);
101
+
102
+ console.log('✅ Seeded 10 users');
103
+ }
104
+
105
+ async drop(): Promise<void> {
106
+ // Clear all users
107
+ await this.userRepository.delete({});
108
+
109
+ console.log('🗑️ Dropped all users');
110
+ }
111
+ }
112
+ ```
113
+
114
+ ### Step 4: Create Configuration File
115
+
116
+ Create `seeder.config.ts` in your **project root**:
117
+
118
+ > **Note:** The seeder configuration is independent and does not require importing your main `AppModule`.
119
+
120
+ ```typescript
121
+ // seeder.config.ts
122
+ import { TypeOrmModule } from '@nestjs/typeorm';
123
+ import { ConfigModule, ConfigService } from '@nestjs/config';
124
+ import { User } from './src/entities/user.entity';
125
+ import { UserSeeder } from './src/seeders/user.seeder';
126
+ import * as dotenv from 'dotenv';
127
+
128
+ dotenv.config();
129
+
130
+ export default {
131
+ imports: [
132
+ ConfigModule.forRoot({
133
+ isGlobal: true,
134
+ }),
135
+ TypeOrmModule.forRootAsync({
136
+ imports: [ConfigModule],
137
+ inject: [ConfigService],
138
+ useFactory: (config: ConfigService) => ({
139
+ type: 'postgres',
140
+ host: config.get<string>('DB_HOST'),
141
+ port: config.get<number>('DB_PORT'),
142
+ username: config.get<string>('DB_USERNAME'),
143
+ password: config.get<string>('DB_PASSWORD'),
144
+ database: config.get<string>('DB_DATABASE'),
145
+ entities: [User],
146
+ synchronize: true,
147
+ }),
148
+ }),
149
+ TypeOrmModule.forFeature([User]),
150
+ ],
151
+ seeders: [UserSeeder],
152
+ };
153
+ ```
154
+
155
+ ### Step 5: Run Seeder
156
+
157
+ Add script to `package.json`:
158
+
159
+ ```json
160
+ {
161
+ "scripts": {
162
+ "seed": "node -r ts-node/register -r tsconfig-paths/register ./node_modules/@ackplus/nest-seeder/dist/cli.js -c ./seeder.config.ts"
163
+ }
164
+ }
165
+ ```
166
+
167
+ Run it:
168
+
169
+ ```bash
170
+ npm run seed
171
+ ```
172
+
173
+ **That's it!** Your database is now seeded! 🎉
174
+
175
+ ## 🖥️ CLI Commands
176
+
177
+ Since you are running the seeder via a package script, you can pass arguments using `--`.
178
+
179
+ ### Basic Usage
180
+
181
+ ```bash
182
+ # Run all seeders
183
+ npm run seed
184
+
185
+ # Drop and reseed
186
+ npm run seed -- --refresh
187
+
188
+ # Run specific seeder
189
+ npm run seed -- --name UserSeeder
190
+
191
+ # Run multiple seeders
192
+ npm run seed -- --name UserSeeder ProductSeeder
193
+ ```
194
+
195
+ ### Available Options
196
+
197
+ | Option | Alias | Description | Default |
198
+ |--------|-------|-------------|---------|
199
+ | `--config` | `-c` | Path to configuration file | (required) |
200
+ | `--refresh` | `-r` | Drop data before seeding | `false` |
201
+ | `--name` | `-n` | Run specific seeder(s) | (all) |
202
+ | `--dummyData` | `-d` | Include dummy data flag | `false` |
203
+ | `--help` | `-h` | Show help | |
204
+
205
+ ### Package.json Scripts
206
+
207
+ You can also define specific scripts for convenience:
208
+
209
+ ```json
210
+ {
211
+ "scripts": {
212
+ "seed": "node -r ts-node/register -r tsconfig-paths/register ./node_modules/@ackplus/nest-seeder/dist/cli.js -c ./seeder.config.ts",
213
+ "seed:refresh": "npm run seed -- --refresh",
214
+ "seed:users": "npm run seed -- --name UserSeeder",
215
+ "seed:watch": "nodemon --watch src/seeders --ext ts --exec \"npm run seed\""
216
+ }
217
+ }
218
+ ```
219
+
220
+ ## ⚙️ Configuration
221
+
222
+ ### TypeORM Example
223
+
224
+ ```typescript
225
+ // seeder.config.ts
226
+ import { TypeOrmModule } from '@nestjs/typeorm';
227
+ import { User, Post, Comment } from './src/entities';
228
+ import { UserSeeder, PostSeeder, CommentSeeder } from './src/seeders';
229
+
230
+ export default {
231
+ imports: [
232
+ TypeOrmModule.forRoot({
233
+ type: 'postgres',
234
+ host: process.env.DB_HOST || 'localhost',
235
+ port: parseInt(process.env.DB_PORT) || 5432,
236
+ username: process.env.DB_USER || 'postgres',
237
+ password: process.env.DB_PASSWORD || 'postgres',
238
+ database: process.env.DB_NAME || 'mydb',
239
+ entities: [User, Post, Comment],
240
+ synchronize: true,
241
+ }),
242
+ TypeOrmModule.forFeature([User, Post, Comment]),
243
+ ],
244
+ seeders: [UserSeeder, PostSeeder, CommentSeeder],
245
+ };
246
+ ```
247
+
248
+ ### MongoDB/Mongoose Example
249
+
250
+ ```typescript
251
+ // seeder.config.ts
252
+ import { MongooseModule } from '@nestjs/mongoose';
253
+ import { User, UserSchema } from './src/schemas/user.schema';
254
+ import { UserSeeder } from './src/seeders/user.seeder';
255
+
256
+ export default {
257
+ imports: [
258
+ MongooseModule.forRoot('mongodb://localhost/mydb'),
259
+ MongooseModule.forFeature([
260
+ { name: User.name, schema: UserSchema }
261
+ ]),
262
+ ],
263
+ seeders: [UserSeeder],
264
+ };
265
+ ```
266
+
267
+ ### SQLite Example
268
+
269
+ ```typescript
270
+ // seeder.config.ts
271
+ import { TypeOrmModule } from '@nestjs/typeorm';
272
+ import { User } from './src/entities/user.entity';
273
+ import { UserSeeder } from './src/seeders/user.seeder';
274
+
275
+ export default {
276
+ imports: [
277
+ TypeOrmModule.forRoot({
278
+ type: 'sqlite',
279
+ database: 'database.sqlite',
280
+ entities: [User],
281
+ synchronize: true,
282
+ }),
283
+ TypeOrmModule.forFeature([User]),
284
+ ],
285
+ seeders: [UserSeeder],
286
+ };
287
+ ```
288
+
289
+ ## 🏭 Factories
290
+
291
+ ### Basic Factory
292
+
293
+ ```typescript
294
+ import { Factory } from '@ackplus/nest-seeder';
295
+
296
+ export class UserFactory {
297
+ @Factory((faker) => faker.person.fullName())
298
+ name: string;
299
+
300
+ @Factory((faker) => faker.internet.email())
301
+ email: string;
302
+
303
+ @Factory((faker) => faker.datatype.number({ min: 18, max: 80 }))
304
+ age: number;
305
+ }
306
+ ```
307
+
308
+ ### Using Factory
309
+
310
+ ```typescript
311
+ import { DataFactory } from '@ackplus/nest-seeder';
312
+ import { UserFactory } from './user.factory';
313
+
314
+ // Create factory
315
+ const factory = DataFactory.createForClass(UserFactory);
316
+
317
+ // Generate one object
318
+ const user = factory.generate(1)[0];
319
+
320
+ // Generate multiple objects
321
+ const users = factory.generate(10);
322
+
323
+ // Generate with overrides
324
+ const admin = factory.generate(1, { role: 'admin' })[0];
325
+ ```
326
+
327
+ ### Factory with Relationships
328
+
329
+ ```typescript
330
+ import { Factory } from '@ackplus/nest-seeder';
331
+
332
+ export class PostFactory {
333
+ @Factory((faker) => faker.lorem.sentence())
334
+ title: string;
335
+
336
+ @Factory((faker) => faker.lorem.paragraphs(3))
337
+ content: string;
338
+
339
+ // Will be set manually in seeder
340
+ authorId: number;
341
+ }
342
+ ```
343
+
344
+ ## 🌱 Seeders
345
+
346
+ ### Basic Seeder
347
+
348
+ ```typescript
349
+ import { Injectable } from '@nestjs/common';
350
+ import { InjectRepository } from '@nestjs/typeorm';
351
+ import { Repository } from 'typeorm';
352
+ import { Seeder, DataFactory } from '@ackplus/nest-seeder';
353
+ import { User } from '../entities/user.entity';
354
+ import { UserFactory } from '../factories/user.factory';
355
+
356
+ @Injectable()
357
+ export class UserSeeder implements Seeder {
358
+ constructor(
359
+ @InjectRepository(User)
360
+ private readonly userRepository: Repository<User>,
361
+ ) {}
362
+
363
+ async seed(): Promise<void> {
364
+ const factory = DataFactory.createForClass(UserFactory);
365
+ const users = factory.generate(10);
366
+ await this.userRepository.save(users);
367
+ }
368
+
369
+ async drop(): Promise<void> {
370
+ await this.userRepository.delete({});
371
+ }
372
+ }
373
+ ```
374
+
375
+ ### Seeder with Relationships
376
+
377
+ ```typescript
378
+ import { Injectable } from '@nestjs/common';
379
+ import { InjectRepository } from '@nestjs/typeorm';
380
+ import { Repository } from 'typeorm';
381
+ import { Seeder, DataFactory } from '@ackplus/nest-seeder';
382
+ import { User } from '../entities/user.entity';
383
+ import { Post } from '../entities/post.entity';
384
+ import { UserFactory } from '../factories/user.factory';
385
+ import { PostFactory } from '../factories/post.factory';
386
+
387
+ @Injectable()
388
+ export class PostSeeder implements Seeder {
389
+ constructor(
390
+ @InjectRepository(User)
391
+ private readonly userRepository: Repository<User>,
392
+ @InjectRepository(Post)
393
+ private readonly postRepository: Repository<Post>,
394
+ ) {}
395
+
396
+ async seed(): Promise<void> {
397
+ // Get existing users
398
+ const users = await this.userRepository.find();
399
+
400
+ if (users.length === 0) {
401
+ console.log('⚠️ No users found. Run UserSeeder first.');
402
+ return;
403
+ }
404
+
405
+ // Create posts for each user
406
+ const postFactory = DataFactory.createForClass(PostFactory);
407
+
408
+ for (const user of users) {
409
+ // Generate 3 posts per user
410
+ const posts = postFactory.generate(3).map(post => ({
411
+ ...post,
412
+ author: user,
413
+ }));
414
+
415
+ await this.postRepository.save(posts);
416
+ }
417
+
418
+ console.log(`✅ Seeded ${users.length * 3} posts`);
419
+ }
420
+
421
+ async drop(): Promise<void> {
422
+ await this.postRepository.delete({});
423
+ }
424
+ }
425
+ ```
426
+
427
+ ### Conditional Seeding
428
+
429
+ ```typescript
430
+ import { Injectable } from '@nestjs/common';
431
+ import { Seeder, SeederServiceOptions, DataFactory } from '@ackplus/nest-seeder';
432
+
433
+ @Injectable()
434
+ export class UserSeeder implements Seeder {
435
+ async seed(options?: SeederServiceOptions): Promise<void> {
436
+ const factory = DataFactory.createForClass(UserFactory);
437
+
438
+ // Seed more data if dummyData flag is set
439
+ const count = options?.dummyData ? 100 : 10;
440
+ const users = factory.generate(count);
441
+
442
+ await this.userRepository.save(users);
443
+ console.log(`✅ Seeded ${count} users`);
444
+ }
445
+
446
+ async drop(): Promise<void> {
447
+ await this.userRepository.delete({});
448
+ }
449
+ }
450
+ ```
451
+
452
+ Run with dummy data:
453
+
454
+ ```bash
455
+ nest-seed -c seeder.config.ts --dummyData
456
+ ```
457
+
458
+ ### MongoDB/Mongoose Seeder
459
+
460
+ ```typescript
461
+ import { Injectable } from '@nestjs/common';
462
+ import { InjectModel } from '@nestjs/mongoose';
463
+ import { Model } from 'mongoose';
464
+ import { Seeder, DataFactory } from '@ackplus/nest-seeder';
465
+ import { User } from '../schemas/user.schema';
466
+ import { UserFactory } from '../factories/user.factory';
467
+
468
+ @Injectable()
469
+ export class UserSeeder implements Seeder {
470
+ constructor(
471
+ @InjectModel(User.name)
472
+ private readonly userModel: Model<User>,
473
+ ) {}
474
+
475
+ async seed(): Promise<void> {
476
+ const factory = DataFactory.createForClass(UserFactory);
477
+ const users = factory.generate(10);
478
+ await this.userModel.insertMany(users);
479
+ }
480
+
481
+ async drop(): Promise<void> {
482
+ await this.userModel.deleteMany({});
483
+ }
484
+ }
485
+ ```
486
+
487
+ ## 🔥 Advanced Examples
488
+
489
+ ### Custom Providers in Config
490
+
491
+ ```typescript
492
+ // seeder.config.ts
493
+ import { CustomService } from './src/services/custom.service';
494
+
495
+ export default {
496
+ imports: [
497
+ TypeOrmModule.forRoot({ /* ... */ }),
498
+ TypeOrmModule.forFeature([User]),
499
+ ],
500
+ seeders: [UserSeeder],
501
+ providers: [CustomService], // Inject custom services
502
+ };
503
+ ```
504
+
505
+ ### Environment-Based Configuration
506
+
507
+ ```typescript
508
+ // seeder.config.ts
509
+ import * as dotenv from 'dotenv';
510
+ dotenv.config();
511
+
512
+ const isDev = process.env.NODE_ENV === 'development';
513
+
514
+ export default {
515
+ imports: [
516
+ TypeOrmModule.forRoot({
517
+ type: 'postgres',
518
+ host: process.env.DB_HOST,
519
+ database: isDev ? 'mydb_dev' : 'mydb_prod',
520
+ synchronize: isDev,
521
+ }),
522
+ TypeOrmModule.forFeature([User, Post]),
523
+ ],
524
+ seeders: isDev
525
+ ? [UserSeeder, PostSeeder, TestDataSeeder]
526
+ : [UserSeeder, PostSeeder],
527
+ };
528
+ ```
529
+
530
+ ### Batch Insert for Performance
531
+
532
+ ```typescript
533
+ @Injectable()
534
+ export class UserSeeder implements Seeder {
535
+ async seed(): Promise<void> {
536
+ const factory = DataFactory.createForClass(UserFactory);
537
+ const batchSize = 1000;
538
+ const totalRecords = 10000;
539
+
540
+ for (let i = 0; i < totalRecords; i += batchSize) {
541
+ const users = factory.generate(batchSize);
542
+ await this.userRepository.save(users);
543
+ console.log(`✅ Seeded ${Math.min(i + batchSize, totalRecords)}/${totalRecords} users`);
544
+ }
545
+ }
546
+
547
+ async drop(): Promise<void> {
548
+ await this.userRepository.delete({});
549
+ }
550
+ }
551
+ ```
552
+
553
+ ## 📚 API Reference
554
+
555
+ ### DataFactory
556
+
557
+ ```typescript
558
+ class DataFactory {
559
+ // Create factory for a class
560
+ static createForClass<T>(factoryClass: new () => T): DataFactory<T>
561
+
562
+ // Generate instances
563
+ generate(count: number, override?: Partial<T>): T[]
564
+ }
565
+ ```
566
+
567
+ ### Seeder Interface
568
+
569
+ ```typescript
570
+ interface Seeder {
571
+ // Seed data into database
572
+ seed(options?: SeederServiceOptions): Promise<void>
573
+
574
+ // Drop/clear data from database
575
+ drop(options?: SeederServiceOptions): Promise<void>
576
+ }
577
+ ```
578
+
579
+ ### @Factory Decorator
580
+
581
+ ```typescript
582
+ // Simple factory
583
+ @Factory((faker) => faker.person.fullName())
584
+ name: string;
585
+
586
+ // With options
587
+ @Factory((faker) => faker.datatype.number({ min: 1, max: 100 }))
588
+ age: number;
589
+
590
+ // Array values
591
+ @Factory((faker) => faker.helpers.arrayElement(['admin', 'user']))
592
+ role: string;
593
+ ```
594
+
595
+ ### SeederServiceOptions
596
+
597
+ ```typescript
598
+ interface SeederServiceOptions {
599
+ refresh?: boolean; // Drop before seeding
600
+ name?: string[]; // Run specific seeders
601
+ dummyData?: boolean; // Custom flag for your logic
602
+ }
603
+ ```
604
+
605
+ ## 🤝 Contributing
606
+
607
+ Contributions are welcome! Please feel free to submit a Pull Request.
608
+
609
+ ## 📄 License
610
+
611
+ This project is licensed under the MIT License.
612
+
613
+ ## 🙏 Acknowledgments
614
+
615
+ - Built with [NestJS](https://nestjs.com/)
616
+ - Powered by [Faker.js](https://fakerjs.dev/)
617
+ - Inspired by database seeding patterns from Laravel and other frameworks
618
+
619
+ ## 📮 Support
620
+
621
+ If you have any questions or need help:
622
+ - Open an issue on [GitHub](https://github.com/ackplus/nest-seeder/issues)
623
+ - Check the [examples](./examples/) directory
624
+ - Review the [Quick Start Guide](./QUICKSTART.md)
625
+
626
+ ---
627
+
628
+ Made with ❤️ for the NestJS community
@@ -1,4 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { SeederOptions, SeederRunner } from './lib';
3
3
  export declare const seeder: (options: SeederOptions) => SeederRunner;
4
- //# sourceMappingURL=cli.d.ts.map