@ackplus/nest-seeder 0.1.35

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 (48) hide show
  1. package/README.md +412 -0
  2. package/package.json +37 -0
  3. package/src/cli.d.ts +3 -0
  4. package/src/cli.js +168 -0
  5. package/src/cli.js.map +1 -0
  6. package/src/index.d.ts +8 -0
  7. package/src/index.js +12 -0
  8. package/src/index.js.map +1 -0
  9. package/src/lib/decorators/factory.decorator.d.ts +6 -0
  10. package/src/lib/decorators/factory.decorator.js +17 -0
  11. package/src/lib/decorators/factory.decorator.js.map +1 -0
  12. package/src/lib/factory/data.factory.d.ts +6 -0
  13. package/src/lib/factory/data.factory.js +51 -0
  14. package/src/lib/factory/data.factory.js.map +1 -0
  15. package/src/lib/index.d.ts +4 -0
  16. package/src/lib/index.js +8 -0
  17. package/src/lib/index.js.map +1 -0
  18. package/src/lib/interfaces/factory.interface.d.ts +4 -0
  19. package/src/lib/interfaces/factory.interface.js +3 -0
  20. package/src/lib/interfaces/factory.interface.js.map +1 -0
  21. package/src/lib/interfaces/index.d.ts +2 -0
  22. package/src/lib/interfaces/index.js +6 -0
  23. package/src/lib/interfaces/index.js.map +1 -0
  24. package/src/lib/interfaces/property-metadata.interface.d.ts +6 -0
  25. package/src/lib/interfaces/property-metadata.interface.js +3 -0
  26. package/src/lib/interfaces/property-metadata.interface.js.map +1 -0
  27. package/src/lib/interfaces/seeder-module-async-options.interface.d.ts +10 -0
  28. package/src/lib/interfaces/seeder-module-async-options.interface.js +3 -0
  29. package/src/lib/interfaces/seeder-module-async-options.interface.js.map +1 -0
  30. package/src/lib/interfaces/seeder-options-factory.interface.d.ts +4 -0
  31. package/src/lib/interfaces/seeder-options-factory.interface.js +3 -0
  32. package/src/lib/interfaces/seeder-options-factory.interface.js.map +1 -0
  33. package/src/lib/seeder/seeder.d.ts +10 -0
  34. package/src/lib/seeder/seeder.interface.d.ts +9 -0
  35. package/src/lib/seeder/seeder.interface.js +3 -0
  36. package/src/lib/seeder/seeder.interface.js.map +1 -0
  37. package/src/lib/seeder/seeder.js +37 -0
  38. package/src/lib/seeder/seeder.js.map +1 -0
  39. package/src/lib/seeder/seeder.module.d.ts +17 -0
  40. package/src/lib/seeder/seeder.module.js +75 -0
  41. package/src/lib/seeder/seeder.module.js.map +1 -0
  42. package/src/lib/seeder/seeder.service.d.ts +10 -0
  43. package/src/lib/seeder/seeder.service.js +67 -0
  44. package/src/lib/seeder/seeder.service.js.map +1 -0
  45. package/src/lib/storages/factory.metadata.storage.d.ts +16 -0
  46. package/src/lib/storages/factory.metadata.storage.js +19 -0
  47. package/src/lib/storages/factory.metadata.storage.js.map +1 -0
  48. package/tsconfig.tsbuildinfo +1 -0
package/README.md ADDED
@@ -0,0 +1,412 @@
1
+ # NestJS Seeder Module
2
+
3
+ A powerful and flexible seeding solution for NestJS applications with TypeORM support.
4
+
5
+ ## Features
6
+
7
+ - ✅ **CLI Support** - Run seeders from command line
8
+ - ✅ **TypeORM Integration** - Works seamlessly with your existing TypeORM setup
9
+ - ✅ **Selective Seeding** - Run specific seeders by name
10
+ - ✅ **Data Refresh** - Drop and recreate data
11
+ - ✅ **TypeScript Support** - Full TypeScript support with ts-node
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install @ackplus/nest-seeder
17
+ # Also install peer dependencies
18
+ npm install -D ts-node typescript
19
+ ```
20
+
21
+ ## Quick Start
22
+
23
+ ### 1. Create Your Seeders
24
+
25
+ ```typescript
26
+ // src/database/seeders/user.seeder.ts
27
+ import { Injectable } from '@nestjs/common';
28
+ import { InjectRepository } from '@nestjs/typeorm';
29
+ import { Repository } from 'typeorm';
30
+ import { Seeder, SeederServiceOptions } from '@ackplus/nest-seeder';
31
+ import { User } from '../../entities/user.entity';
32
+
33
+ @Injectable()
34
+ export class UserSeeder implements Seeder {
35
+ constructor(
36
+ @InjectRepository(User)
37
+ private readonly userRepository: Repository<User>,
38
+ ) {}
39
+
40
+ async seed(options: SeederServiceOptions): Promise<any> {
41
+ const users = [
42
+ { name: 'John Doe', email: 'john@example.com' },
43
+ { name: 'Jane Smith', email: 'jane@example.com' },
44
+ ];
45
+
46
+ for (const userData of users) {
47
+ const existingUser = await this.userRepository.findOne({
48
+ where: { email: userData.email }
49
+ });
50
+
51
+ if (!existingUser) {
52
+ const user = this.userRepository.create(userData);
53
+ await this.userRepository.save(user);
54
+ console.log(`Created user: ${user.name}`);
55
+ }
56
+ }
57
+ }
58
+
59
+ async drop(options: SeederServiceOptions): Promise<any> {
60
+ await this.userRepository.clear();
61
+ }
62
+ }
63
+ ```
64
+
65
+ ### 2. Create Seeder Configuration File
66
+
67
+ Create a seeder configuration file (e.g., `seeder.config.ts`) in your project:
68
+
69
+ ```typescript
70
+ // seeder.config.ts
71
+ import { TypeOrmModule } from '@nestjs/typeorm';
72
+ import { SeederModuleOptions } from '@ackplus/nest-seeder';
73
+ import { UserSeeder } from './src/database/seeders/user.seeder';
74
+ import { User } from './src/entities/user.entity';
75
+
76
+ const seederConfig: SeederModuleOptions = {
77
+ imports: [
78
+ TypeOrmModule.forRoot({
79
+ type: 'postgres', // Change to your database type
80
+ host: process.env.DB_HOST || 'localhost',
81
+ port: parseInt(process.env.DB_PORT || '5432'),
82
+ username: process.env.DB_USERNAME || 'postgres',
83
+ password: process.env.DB_PASSWORD || 'password',
84
+ database: process.env.DB_NAME || 'your_database_name',
85
+ entities: [User], // Add your entities here
86
+ synchronize: false, // Set to false in production
87
+ }),
88
+ TypeOrmModule.forFeature([User]), // Add your entities here
89
+ ],
90
+ providers: [UserSeeder],
91
+ seeders: [UserSeeder],
92
+ };
93
+
94
+ export default seederConfig;
95
+ ```
96
+
97
+ ### 3. Add Scripts to package.json
98
+
99
+ ```json
100
+ {
101
+ "scripts": {
102
+ "seed": "nest-seed -c ./seeder.config.ts",
103
+ "seed:refresh": "nest-seed -c ./seeder.config.ts --refresh",
104
+ "seed:user": "nest-seed -c ./seeder.config.ts --name UserSeeder"
105
+ }
106
+ }
107
+ ```
108
+
109
+ ### 4. Run Your Seeders
110
+
111
+ ```bash
112
+ # Run all seeders
113
+ npm run seed
114
+
115
+ # Drop all data and reseed
116
+ npm run seed:refresh
117
+
118
+ # Run specific seeder
119
+ npm run seed:user
120
+
121
+ # Run with dummy data flag
122
+ npm run seed -- --dummyData
123
+ ```
124
+
125
+ ## CLI Usage
126
+
127
+ The CLI can import seeder configuration from any TypeScript or JavaScript file:
128
+
129
+ ```bash
130
+ # Basic usage
131
+ nest-seed -c ./seeder.config.ts
132
+
133
+ # Different config file
134
+ nest-seed -c ./configs/development.seeder.ts
135
+
136
+ # Relative or absolute paths
137
+ nest-seed -c ../shared/seeder.config.ts
138
+ nest-seed -c /absolute/path/to/seeder.config.ts
139
+
140
+ # With options
141
+ nest-seed -c ./seeder.config.ts --refresh --name UserSeeder --dummyData
142
+ ```
143
+
144
+ ## CLI Options
145
+
146
+ | Option | Alias | Description | Example |
147
+ |--------|-------|-------------|---------|
148
+ | `--config` | `-c` | Path to seeder configuration file | `--config ./seeder.config.ts` |
149
+ | `--refresh` | `-r` | Drop all data before seeding | `--refresh` |
150
+ | `--name` | `-n` | Run specific seeders | `--name UserSeeder PostSeeder` |
151
+ | `--dummyData` | `-d` | Include dummy data flag | `--dummyData` |
152
+
153
+ ## Configuration Options
154
+
155
+ ### Using Environment Variables
156
+
157
+ ```typescript
158
+ // seeder.config.ts
159
+ import { TypeOrmModule } from '@nestjs/typeorm';
160
+
161
+ const seederConfig = {
162
+ imports: [
163
+ TypeOrmModule.forRoot({
164
+ type: process.env.DB_TYPE as any || 'postgres',
165
+ host: process.env.DB_HOST,
166
+ port: parseInt(process.env.DB_PORT || '5432'),
167
+ username: process.env.DB_USERNAME,
168
+ password: process.env.DB_PASSWORD,
169
+ database: process.env.DB_NAME,
170
+ entities: [User, Post],
171
+ }),
172
+ TypeOrmModule.forFeature([User, Post]),
173
+ ],
174
+ seeders: [UserSeeder, PostSeeder],
175
+ };
176
+
177
+ export default seederConfig;
178
+ ```
179
+
180
+ ### Reusing Existing Database Configuration
181
+
182
+ ```typescript
183
+ // seeder.config.ts
184
+ import { databaseConfig } from './src/config/database.config';
185
+ import { TypeOrmModule } from '@nestjs/typeorm';
186
+
187
+ const seederConfig = {
188
+ imports: [
189
+ TypeOrmModule.forRoot(databaseConfig), // Reuse your existing config
190
+ TypeOrmModule.forFeature([User, Post]),
191
+ ],
192
+ seeders: [UserSeeder, PostSeeder],
193
+ };
194
+
195
+ export default seederConfig;
196
+ ```
197
+
198
+ ### Multiple Environment Configurations
199
+
200
+ ```typescript
201
+ // seeder.config.dev.ts
202
+ export default {
203
+ imports: [
204
+ TypeOrmModule.forRoot({
205
+ database: 'myapp_dev',
206
+ // ... dev config
207
+ }),
208
+ ],
209
+ seeders: [UserSeeder, PostSeeder, DummyDataSeeder],
210
+ };
211
+
212
+ // seeder.config.prod.ts
213
+ export default {
214
+ imports: [
215
+ TypeOrmModule.forRoot({
216
+ database: 'myapp_prod',
217
+ // ... prod config
218
+ }),
219
+ ],
220
+ seeders: [UserSeeder], // Only essential seeders
221
+ };
222
+ ```
223
+
224
+ ```json
225
+ {
226
+ "scripts": {
227
+ "seed:dev": "nest-seed -c ./seeder.config.dev.ts",
228
+ "seed:prod": "nest-seed -c ./seeder.config.prod.ts"
229
+ }
230
+ }
231
+ ```
232
+
233
+ ## Advanced Usage
234
+
235
+ ### Conditional Seeding
236
+
237
+ ```typescript
238
+ async seed(options: SeederServiceOptions): Promise<any> {
239
+ if (options.dummyData) {
240
+ // Seed lots of fake data for development
241
+ await this.seedDummyUsers(1000);
242
+ } else {
243
+ // Seed only essential data
244
+ await this.seedEssentialUsers();
245
+ }
246
+ }
247
+ ```
248
+
249
+ ### Seeder Dependencies
250
+
251
+ ```typescript
252
+ // Run seeders in order by organizing them properly
253
+ const seederConfig = {
254
+ seeders: [
255
+ UserSeeder, // Run first
256
+ PostSeeder, // Depends on users
257
+ CommentSeeder, // Depends on posts
258
+ ],
259
+ };
260
+ ```
261
+
262
+ ## Integration with Existing App
263
+
264
+ ### Option A: Using register() method
265
+
266
+ ```typescript
267
+ // app.module.ts
268
+ import { Module } from '@nestjs/common';
269
+ import { SeederModule } from '@ackplus/nest-seeder';
270
+
271
+ @Module({
272
+ imports: [
273
+ // Your existing imports
274
+ SeederModule.register({
275
+ imports: [TypeOrmModule.forFeature([User])],
276
+ providers: [UserSeeder],
277
+ seeders: [UserSeeder],
278
+ }),
279
+ ],
280
+ })
281
+ export class AppModule {}
282
+ ```
283
+
284
+ ### Option B: Using forRootAsync() with useClass
285
+
286
+ Create a factory class:
287
+
288
+ ```typescript
289
+ // seeder-config.factory.ts
290
+ import { Injectable } from '@nestjs/common';
291
+ import { ConfigService } from '@nestjs/config';
292
+ import { TypeOrmModule } from '@nestjs/typeorm';
293
+ import { SeederOptionsFactory, SeederModuleOptions } from '@ackplus/nest-seeder';
294
+ import { UserSeeder } from './database/seeders/user.seeder';
295
+ import { User } from './entities/user.entity';
296
+
297
+ @Injectable()
298
+ export class SeederConfigFactory implements SeederOptionsFactory {
299
+ constructor(private readonly configService: ConfigService) {}
300
+
301
+ createSeederOptions(): SeederModuleOptions {
302
+ return {
303
+ imports: [
304
+ TypeOrmModule.forRoot({
305
+ type: this.configService.get('DB_TYPE', 'postgres') as any,
306
+ host: this.configService.get('DB_HOST', 'localhost'),
307
+ port: this.configService.get('DB_PORT', 5432),
308
+ username: this.configService.get('DB_USERNAME', 'postgres'),
309
+ password: this.configService.get('DB_PASSWORD', 'password'),
310
+ database: this.configService.get('DB_NAME', 'myapp_db'),
311
+ entities: [User],
312
+ synchronize: false,
313
+ }),
314
+ TypeOrmModule.forFeature([User]),
315
+ ],
316
+ providers: [UserSeeder],
317
+ seeders: [UserSeeder],
318
+ };
319
+ }
320
+ }
321
+ ```
322
+
323
+ Use in your app module:
324
+
325
+ ```typescript
326
+ // app.module.ts
327
+ import { Module } from '@nestjs/common';
328
+ import { ConfigModule } from '@nestjs/config';
329
+ import { SeederModule } from '@ackplus/nest-seeder';
330
+ import { SeederConfigFactory } from './seeder-config.factory';
331
+
332
+ @Module({
333
+ imports: [
334
+ ConfigModule.forRoot(),
335
+ SeederModule.forRootAsync({
336
+ imports: [ConfigModule],
337
+ useClass: SeederConfigFactory,
338
+ }),
339
+ ],
340
+ })
341
+ export class AppModule {}
342
+ ```
343
+
344
+ ### Option C: Using forRootAsync() with useFactory
345
+
346
+ ```typescript
347
+ // app.module.ts
348
+ import { Module } from '@nestjs/common';
349
+ import { ConfigModule, ConfigService } from '@nestjs/config';
350
+ import { SeederModule } from '@ackplus/nest-seeder';
351
+
352
+ @Module({
353
+ imports: [
354
+ ConfigModule.forRoot(),
355
+ SeederModule.forRootAsync({
356
+ imports: [ConfigModule, TypeOrmModule.forFeature([User])],
357
+ useFactory: (configService: ConfigService) => ({
358
+ imports: [
359
+ TypeOrmModule.forRoot({
360
+ type: configService.get('DB_TYPE', 'postgres') as any,
361
+ host: configService.get('DB_HOST', 'localhost'),
362
+ // ... other config
363
+ }),
364
+ TypeOrmModule.forFeature([User]),
365
+ ],
366
+ providers: [UserSeeder],
367
+ seeders: [UserSeeder],
368
+ }),
369
+ inject: [ConfigService],
370
+ }),
371
+ ],
372
+ })
373
+ export class AppModule {}
374
+ ```
375
+
376
+ ### Using SeederService
377
+
378
+ After registering the module, inject SeederService anywhere:
379
+
380
+ ```typescript
381
+ constructor(private readonly seederService: SeederService) {}
382
+ await this.seederService.run();
383
+ ```
384
+
385
+ ## Best Practices
386
+
387
+ 1. **Environment Variables**: Use the same environment variables as your main app
388
+ 2. **Idempotent Seeders**: Make seeders safe to run multiple times
389
+ 3. **Order Dependencies**: Place dependent seeders after their dependencies
390
+ 4. **Clean Drop Methods**: Implement proper cleanup in drop methods
391
+ 5. **Separate Configs**: Use different config files for different environments
392
+
393
+ ## Troubleshooting
394
+
395
+ ### "Cannot find module" errors
396
+ - Make sure the config file path is correct relative to where you run the command
397
+ - Ensure all import paths in your config are correct
398
+ - Check that `ts-node` and `typescript` are installed for TypeScript files
399
+
400
+ ### Database connection errors
401
+ - Verify your database configuration in the seeder config
402
+ - Ensure your database is running and accessible
403
+ - Check environment variables are properly set
404
+
405
+ ### TypeScript compilation errors
406
+ - Make sure your `tsconfig.json` has `experimentalDecorators: true`
407
+ - Install missing dependencies: `npm install -D ts-node typescript`
408
+ - Verify your config file has proper exports
409
+
410
+ ## Contributing
411
+
412
+ Contributions are welcome! Please feel free to submit a Pull Request.
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@ackplus/nest-seeder",
3
+ "version": "0.1.35",
4
+ "type": "commonjs",
5
+ "main": "./src/index.js",
6
+ "types": "./src/index.d.ts",
7
+ "license": "MIT",
8
+ "scripts": {
9
+ "postbuild": "chmod +x dist/cli.js"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/ack-solutions/packages.git"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "bin": {
19
+ "nest-seed": "dist/cli.js"
20
+ },
21
+ "homepage": "https://github.com/ack-solutions/packages.git#readme",
22
+ "peerDependencies": {
23
+ "typeorm": "^0.3.23",
24
+ "@nestjs/typeorm": "^11.0.0",
25
+ "@nestjs/common": "^10.4.5"
26
+ },
27
+ "devDependencies": {
28
+ "typeorm": "^0.3.23",
29
+ "@nestjs/typeorm": "^11.0.0",
30
+ "@nestjs/common": "^10.4.5",
31
+ "tslib": "^2.3.0"
32
+ },
33
+ "dependencies": {
34
+ "@faker-js/faker": "^9.8.0",
35
+ "yargs": "^18.0.0"
36
+ }
37
+ }
package/src/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { SeederOptions, SeederRunner } from './lib';
3
+ export declare const seeder: (options: SeederOptions) => SeederRunner;
package/src/cli.js ADDED
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.seeder = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const seeder_module_1 = require("./lib/seeder/seeder.module");
7
+ const yargs_1 = tslib_1.__importDefault(require("yargs"));
8
+ const core_1 = require("@nestjs/core");
9
+ const seeder_service_1 = require("./lib/seeder/seeder.service");
10
+ const path = tslib_1.__importStar(require("path"));
11
+ const fs = tslib_1.__importStar(require("fs"));
12
+ function parseArguments() {
13
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
14
+ const argv = yield (0, yargs_1.default)(process.argv.slice(2))
15
+ .option('refresh', {
16
+ alias: 'r',
17
+ type: 'boolean',
18
+ description: 'Drop all data before seeding',
19
+ default: false
20
+ })
21
+ .option('name', {
22
+ alias: 'n',
23
+ type: 'array',
24
+ string: true,
25
+ description: 'Specific seeder names to run',
26
+ })
27
+ .option('dummyData', {
28
+ alias: 'd',
29
+ type: 'boolean',
30
+ description: 'Include dummy data',
31
+ default: false
32
+ })
33
+ .option('config', {
34
+ alias: 'c',
35
+ type: 'string',
36
+ description: 'Path to seeder configuration file',
37
+ demandOption: true
38
+ })
39
+ .help()
40
+ .example('nest-seed -c ./seeder.config.ts', 'Run all seeders')
41
+ .example('nest-seed -c ./seeder.config.ts --refresh', 'Drop and reseed all data')
42
+ .example('nest-seed -c ./seeder.config.ts --name UserSeeder', 'Run specific seeder')
43
+ .parseAsync();
44
+ return {
45
+ refresh: argv.refresh,
46
+ name: argv.name,
47
+ dummyData: argv.dummyData,
48
+ config: argv.config,
49
+ };
50
+ });
51
+ }
52
+ function setupTsNode() {
53
+ try {
54
+ require('ts-node').register({
55
+ transpileOnly: true,
56
+ compilerOptions: {
57
+ module: 'commonjs',
58
+ experimentalDecorators: true,
59
+ emitDecoratorMetadata: true,
60
+ esModuleInterop: true,
61
+ allowSyntheticDefaultImports: true,
62
+ skipLibCheck: true,
63
+ }
64
+ });
65
+ }
66
+ catch (error) {
67
+ console.error('Failed to setup TypeScript support. Make sure ts-node is installed:');
68
+ console.error('npm install -D ts-node typescript');
69
+ process.exit(1);
70
+ }
71
+ }
72
+ function loadSeederConfig(configPath) {
73
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
74
+ try {
75
+ const resolvedPath = path.resolve(process.cwd(), configPath);
76
+ if (!fs.existsSync(resolvedPath)) {
77
+ throw new Error(`Configuration file not found: ${resolvedPath}`);
78
+ }
79
+ if (configPath.endsWith('.ts')) {
80
+ setupTsNode();
81
+ }
82
+ delete require.cache[resolvedPath];
83
+ const configModule = yield Promise.resolve(`${resolvedPath}`).then(s => tslib_1.__importStar(require(s)));
84
+ const config = configModule.default || configModule;
85
+ if (!config) {
86
+ throw new Error('Configuration file must export a default configuration object');
87
+ }
88
+ return config;
89
+ }
90
+ catch (error) {
91
+ console.error('Error loading seeder configuration:');
92
+ console.error(error.message);
93
+ console.error('\nMake sure your configuration file:');
94
+ console.error('1. Exists at the specified path');
95
+ console.error('2. Exports a default configuration object');
96
+ console.error('3. Has proper TypeScript setup if using .ts files');
97
+ process.exit(1);
98
+ }
99
+ });
100
+ }
101
+ function runSeeder() {
102
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
103
+ try {
104
+ const args = yield parseArguments();
105
+ console.log('🌱 Starting NestJS Seeder...');
106
+ console.log(`📁 Loading configuration from: ${args.config}`);
107
+ const seederConfig = yield loadSeederConfig(args.config);
108
+ const cliOptions = {
109
+ refresh: args.refresh,
110
+ name: args.name,
111
+ dummyData: args.dummyData,
112
+ };
113
+ if (args.refresh) {
114
+ console.log('🔄 Refresh mode: Will drop existing data before seeding');
115
+ }
116
+ if (args.name && args.name.length > 0) {
117
+ console.log(`🎯 Running specific seeders: ${args.name.join(', ')}`);
118
+ }
119
+ if (args.dummyData) {
120
+ console.log('🎲 Dummy data mode enabled');
121
+ }
122
+ const app = yield core_1.NestFactory.createApplicationContext(seeder_module_1.SeederModule.register(Object.assign(Object.assign({}, seederConfig), cliOptions)));
123
+ const seedersService = app.get(seeder_service_1.SeederService);
124
+ yield seedersService.run();
125
+ yield app.close();
126
+ console.log('✅ Seeding completed successfully!');
127
+ process.exit(0);
128
+ }
129
+ catch (error) {
130
+ console.error('❌ Error running seeder:');
131
+ console.error(error.message);
132
+ if (error.stack && process.env.NODE_ENV === 'development') {
133
+ console.error('\nStack trace:');
134
+ console.error(error.stack);
135
+ }
136
+ process.exit(1);
137
+ }
138
+ });
139
+ }
140
+ const seeder = (options) => {
141
+ return {
142
+ run(extraOptions) {
143
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
144
+ const cliOptions = {};
145
+ const argv = (0, yargs_1.default)(process.argv).argv;
146
+ if (argv.r || argv.refresh) {
147
+ cliOptions.refresh = true;
148
+ }
149
+ if (argv.n || argv.name) {
150
+ cliOptions.name = argv.n || argv.name;
151
+ }
152
+ if (argv.d || argv.dummyData) {
153
+ cliOptions.dummyData = argv.d || argv.dummyData;
154
+ }
155
+ extraOptions = Object.assign(extraOptions, cliOptions);
156
+ const app = yield core_1.NestFactory.createApplicationContext(seeder_module_1.SeederModule.register(Object.assign(Object.assign({}, options), extraOptions)));
157
+ const seedersService = app.get(seeder_service_1.SeederService);
158
+ yield seedersService.run();
159
+ yield app.close();
160
+ });
161
+ },
162
+ };
163
+ };
164
+ exports.seeder = seeder;
165
+ if (require.main === module) {
166
+ runSeeder();
167
+ }
168
+ //# sourceMappingURL=cli.js.map
package/src/cli.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../packages/nest-seeder/src/cli.ts"],"names":[],"mappings":"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"}
package/src/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * from './lib/seeder/seeder';
2
+ export * from './lib/seeder/seeder.interface';
3
+ export * from './lib/seeder/seeder.module';
4
+ export * from './lib/seeder/seeder.service';
5
+ export * from './lib/factory/data.factory';
6
+ export * from './lib/decorators/factory.decorator';
7
+ export * from './lib/interfaces/seeder-options-factory.interface';
8
+ export * from './lib/interfaces/seeder-module-async-options.interface';
package/src/index.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./lib/seeder/seeder"), exports);
5
+ tslib_1.__exportStar(require("./lib/seeder/seeder.interface"), exports);
6
+ tslib_1.__exportStar(require("./lib/seeder/seeder.module"), exports);
7
+ tslib_1.__exportStar(require("./lib/seeder/seeder.service"), exports);
8
+ tslib_1.__exportStar(require("./lib/factory/data.factory"), exports);
9
+ tslib_1.__exportStar(require("./lib/decorators/factory.decorator"), exports);
10
+ tslib_1.__exportStar(require("./lib/interfaces/seeder-options-factory.interface"), exports);
11
+ tslib_1.__exportStar(require("./lib/interfaces/seeder-module-async-options.interface"), exports);
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/nest-seeder/src/index.ts"],"names":[],"mappings":";;;AAAA,8DAAoC;AAEpC,wEAA8C;AAE9C,qEAA2C;AAE3C,sEAA4C;AAE5C,qEAA2C;AAE3C,6EAAmD;AAEnD,4FAAkE;AAElE,iGAAuE"}
@@ -0,0 +1,6 @@
1
+ import { Faker } from '@faker-js/faker';
2
+ type BaseType = string | number | Date | Buffer | boolean | Record<string, any>;
3
+ export type FactoryValue = BaseType | Array<BaseType>;
4
+ export type FactoryValueGenerator = (faker?: Faker, ctx?: Record<string, any>) => FactoryValue;
5
+ export declare function Factory(generator: FactoryValueGenerator | FactoryValue, dependsOn?: string[]): (target: Record<string, any>, propertyKey: string | symbol) => void;
6
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Factory = Factory;
4
+ const factory_metadata_storage_1 = require("../storages/factory.metadata.storage");
5
+ function Factory(generator, dependsOn) {
6
+ return (target, propertyKey) => {
7
+ factory_metadata_storage_1.FactoryMetadataStorage.addPropertyMetadata({
8
+ target: target.constructor,
9
+ propertyKey: propertyKey,
10
+ arg: {
11
+ generator,
12
+ dependsOn,
13
+ },
14
+ });
15
+ };
16
+ }
17
+ //# sourceMappingURL=factory.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.decorator.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/decorators/factory.decorator.ts"],"names":[],"mappings":";;AAcA,0BAiBC;AA7BD,mFAA8E;AAY9E,SAAgB,OAAO,CACnB,SAA+C,EAC/C,SAAoB;IAEpB,OAAO,CACH,MAA2B,EAC3B,WAA4B,EACxB,EAAE;QACN,iDAAsB,CAAC,mBAAmB,CAAC;YACvC,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,WAAW,EAAE,WAAqB;YAClC,GAAG,EAAE;gBACD,SAAS;gBACT,SAAS;aACZ;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { Factory } from '../interfaces';
3
+ export declare class DataFactory {
4
+ static createForClass(target: Type<unknown>): Factory;
5
+ private static generate;
6
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataFactory = void 0;
4
+ const faker_1 = require("@faker-js/faker");
5
+ const factory_metadata_storage_1 = require("../storages/factory.metadata.storage");
6
+ class DataFactory {
7
+ static createForClass(target) {
8
+ if (!target) {
9
+ throw new Error(`Target class "${target}" passed in to the "TemplateFactory#createForClass()" method is "undefined".`);
10
+ }
11
+ const properties = factory_metadata_storage_1.FactoryMetadataStorage.getPropertyMetadatasByTarget(target);
12
+ return {
13
+ generate: (count, values = {}) => {
14
+ const ret = [];
15
+ for (let i = 0; i < count; i++) {
16
+ ret.push(this.generate(properties, values));
17
+ }
18
+ return ret;
19
+ },
20
+ };
21
+ }
22
+ static generate(properties, values) {
23
+ const ctx = Object.assign({}, values);
24
+ return properties.reduce((result, property) => {
25
+ const propertyKey = property.propertyKey;
26
+ const { generator, dependsOn } = property.arg;
27
+ if (ctx[propertyKey] !== undefined) {
28
+ return Object.assign({ [propertyKey]: ctx[propertyKey] }, result);
29
+ }
30
+ if (Array.isArray(dependsOn)) {
31
+ dependsOn.forEach((dependency) => {
32
+ if (ctx[dependency] === undefined) {
33
+ const dependentProperty = properties.find((p) => p.propertyKey === dependency);
34
+ if (dependentProperty) {
35
+ ctx[dependency] = typeof dependentProperty.arg.generator ===
36
+ 'function' ?
37
+ dependentProperty.arg.generator(faker_1.faker, ctx) :
38
+ dependentProperty.arg;
39
+ }
40
+ }
41
+ });
42
+ }
43
+ ctx[propertyKey] = typeof generator === 'function' ?
44
+ generator(faker_1.faker, ctx) :
45
+ generator;
46
+ return Object.assign({ [propertyKey]: ctx[propertyKey] }, result);
47
+ }, {});
48
+ }
49
+ }
50
+ exports.DataFactory = DataFactory;
51
+ //# sourceMappingURL=data.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.factory.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/factory/data.factory.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAKxC,mFAG8C;AAG9C,MAAa,WAAW;IAEpB,MAAM,CAAC,cAAc,CAAC,MAAqB;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACX,iBAAiB,MAAM,8EAA8E,CACxG,CAAC;QACN,CAAC;QAED,MAAM,UAAU,GAAG,iDAAsB,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;QAE/E,OAAO;YACH,QAAQ,EAAE,CACN,KAAa,EACb,SAA8B,EAAE,EACF,EAAE;gBAChC,MAAM,GAAG,GAAmC,EAAE,CAAC;gBAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChD,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;SACJ,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,QAAQ,CACnB,UAAkC,EAClC,MAA2B;QAE3B,MAAM,GAAG,qBAAQ,MAAM,CAAE,CAAC;QAE1B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;YACzC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC;YAG9C,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;gBACjC,uBACI,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,IAC5B,MAAM,EACX;YACN,CAAC;YAGD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,SAAS,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;oBAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;wBAEhC,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CACtC,CAAC;wBACF,IAAI,iBAAiB,EAAE,CAAC;4BACpB,GAAG,CAAC,UAAU,CAAC,GAAG,OAAO,iBAAiB,CAAC,GAAG,CAAC,SAAS;gCACpD,UAAU,CAAC,CAAC;gCACZ,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAC3B,aAAK,EACL,GAAG,CACN,CAAC,CAAC;gCACH,iBAAiB,CAAC,GAAG,CAAC;wBAC9B,CAAC;oBACL,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;YAGD,GAAG,CAAC,WAAW,CAAC,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC;gBAChD,SAAS,CAAC,aAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvB,SAAS,CAAC;YAEd,uBACI,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,IAC5B,MAAM,EACX;QACN,CAAC,EAAE,EAAE,CAAC,CAAC;IASX,CAAC;CAEJ;AApFD,kCAoFC"}
@@ -0,0 +1,4 @@
1
+ export * from './seeder/seeder';
2
+ export * from './seeder/seeder.interface';
3
+ export * from './factory/data.factory';
4
+ export * from './decorators/factory.decorator';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./seeder/seeder"), exports);
5
+ tslib_1.__exportStar(require("./seeder/seeder.interface"), exports);
6
+ tslib_1.__exportStar(require("./factory/data.factory"), exports);
7
+ tslib_1.__exportStar(require("./decorators/factory.decorator"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/nest-seeder/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAEhC,oEAA0C;AAE1C,iEAAuC;AAEvC,yEAA+C"}
@@ -0,0 +1,4 @@
1
+ import { FactoryValue } from '../decorators/factory.decorator';
2
+ export interface Factory {
3
+ generate(count: number, values?: Record<string, any>): Record<string, FactoryValue>[];
4
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=factory.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.interface.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/factory.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './property-metadata.interface';
2
+ export * from './factory.interface';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./property-metadata.interface"), exports);
5
+ tslib_1.__exportStar(require("./factory.interface"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/index.ts"],"names":[],"mappings":";;;AAAA,wEAA8C;AAE9C,8DAAoC"}
@@ -0,0 +1,6 @@
1
+ import { FactoryValueGenerator, FactoryValue } from '../decorators/factory.decorator';
2
+ export interface PropertyMetadata {
3
+ target: () => void;
4
+ propertyKey: string;
5
+ arg: FactoryValueGenerator | FactoryValue;
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=property-metadata.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-metadata.interface.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/property-metadata.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { Type, ModuleMetadata } from '@nestjs/common';
2
+ import { SeederModuleOptions } from '../seeder/seeder.module';
3
+ import { SeederOptionsFactory } from './seeder-options-factory.interface';
4
+ export interface SeederModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
5
+ isGlobal?: boolean;
6
+ useFactory?: (...args: any[]) => Promise<SeederModuleOptions> | SeederModuleOptions;
7
+ useClass?: Type<SeederOptionsFactory>;
8
+ useExisting?: Type<SeederOptionsFactory>;
9
+ inject?: any[];
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=seeder-module-async-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeder-module-async-options.interface.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/seeder-module-async-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { SeederModuleOptions } from '../seeder/seeder.module';
2
+ export interface SeederOptionsFactory {
3
+ createSeederOptions(): Promise<SeederModuleOptions> | SeederModuleOptions;
4
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=seeder-options-factory.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeder-options-factory.interface.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/seeder-options-factory.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { Provider, Type, DynamicModule, ForwardReference } from '@nestjs/common';
2
+ import { SeederModuleExtraOptions } from './seeder.module';
3
+ export interface SeederOptions {
4
+ imports?: Array<Type<any> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
5
+ providers?: Provider[];
6
+ }
7
+ export interface SeederRunner {
8
+ run(extraOptions: SeederModuleExtraOptions): Promise<void>;
9
+ }
10
+ export declare const seeder: (options: SeederOptions) => SeederRunner;
@@ -0,0 +1,9 @@
1
+ export interface SeederServiceOptions {
2
+ name?: string | string[];
3
+ refresh?: boolean;
4
+ dummyData?: boolean;
5
+ }
6
+ export interface Seeder {
7
+ seed(options: SeederServiceOptions): Promise<any>;
8
+ drop(options: SeederServiceOptions): Promise<any>;
9
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=seeder.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeder.interface.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/seeder/seeder.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.seeder = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const core_1 = require("@nestjs/core");
6
+ const yargs_1 = tslib_1.__importDefault(require("yargs"));
7
+ const seeder_module_1 = require("./seeder.module");
8
+ const seeder_service_1 = require("./seeder.service");
9
+ function bootstrap(options) {
10
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
11
+ const app = yield core_1.NestFactory.createApplicationContext(seeder_module_1.SeederModule.register(options));
12
+ const seedersService = app.get(seeder_service_1.SeederService);
13
+ yield seedersService.run();
14
+ yield app.close();
15
+ });
16
+ }
17
+ const seeder = (options) => {
18
+ return {
19
+ run(extraOptions) {
20
+ const cliOptions = {};
21
+ const argv = (0, yargs_1.default)(process.argv).argv;
22
+ if (argv.r || argv.refresh) {
23
+ cliOptions.refresh = true;
24
+ }
25
+ if (argv.n || argv.name) {
26
+ cliOptions.name = argv.n || argv.name;
27
+ }
28
+ if (argv.d || argv.dummyData) {
29
+ cliOptions.dummyData = argv.d || argv.dummyData;
30
+ }
31
+ extraOptions = Object.assign(extraOptions, cliOptions);
32
+ return bootstrap(Object.assign(Object.assign({}, options), extraOptions));
33
+ },
34
+ };
35
+ };
36
+ exports.seeder = seeder;
37
+ //# sourceMappingURL=seeder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeder.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/seeder/seeder.ts"],"names":[],"mappings":";;;;AAMA,uCAA2C;AAC3C,0DAA0B;AAG1B,mDAIyB;AACzB,qDAAiD;AAcjD,SAAe,SAAS,CAAC,OAA4B;;QACjD,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,wBAAwB,CAClD,4BAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CACjC,CAAC;QAEF,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAC;QAC9C,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC;QAE3B,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CAAA;AAEM,MAAM,MAAM,GAAG,CAAC,OAAsB,EAAgB,EAAE;IAC3D,OAAO;QACH,GAAG,CAAC,YAAsC;YACtC,MAAM,UAAU,GAAyB,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAO,IAAA,eAAK,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAC1C,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACzB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,CAAC;YAED,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtB,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;YAC1C,CAAC;YAED,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3B,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;YACpD,CAAC;YAED,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAEvD,OAAO,SAAS,iCACT,OAAO,GACP,YAAY,EACjB,CAAC;QACP,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAzBW,QAAA,MAAM,UAyBjB"}
@@ -0,0 +1,17 @@
1
+ import { DynamicModule, Provider, Type, ForwardReference } from '@nestjs/common';
2
+ import { Seeder, SeederServiceOptions } from './seeder.interface';
3
+ import { SeederModuleAsyncOptions } from '../interfaces/seeder-module-async-options.interface';
4
+ export interface SeederModuleExtraOptions extends SeederServiceOptions {
5
+ seeders?: Provider<Seeder>[];
6
+ plugins?: any[];
7
+ }
8
+ export interface SeederModuleOptions extends SeederModuleExtraOptions {
9
+ imports?: Array<Type<any> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
10
+ providers?: Provider[];
11
+ }
12
+ export declare class SeederModule {
13
+ static register(options: SeederModuleOptions): DynamicModule;
14
+ static forRootAsync(options: SeederModuleAsyncOptions): DynamicModule;
15
+ private static createAsyncProviders;
16
+ private static createAsyncOptionsProvider;
17
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var SeederModule_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.SeederModule = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const common_1 = require("@nestjs/common");
7
+ const seeder_service_1 = require("./seeder.service");
8
+ const SEEDER_MODULE_OPTIONS = 'SEEDER_MODULE_OPTIONS';
9
+ let SeederModule = SeederModule_1 = class SeederModule {
10
+ static register(options) {
11
+ return {
12
+ module: SeederModule_1,
13
+ imports: options.imports || [],
14
+ providers: [
15
+ ...(options.providers || []),
16
+ ...options.seeders || [],
17
+ {
18
+ provide: seeder_service_1.SeederService,
19
+ useFactory: (...seeders) => {
20
+ return new seeder_service_1.SeederService(seeders, options);
21
+ },
22
+ inject: (options.seeders || []),
23
+ },
24
+ ],
25
+ };
26
+ }
27
+ static forRootAsync(options) {
28
+ return {
29
+ module: SeederModule_1,
30
+ global: options.isGlobal,
31
+ imports: options.imports || [],
32
+ providers: [
33
+ ...this.createAsyncProviders(options),
34
+ {
35
+ provide: seeder_service_1.SeederService,
36
+ useFactory: (seederOptions, ...seeders) => tslib_1.__awaiter(this, void 0, void 0, function* () {
37
+ return new seeder_service_1.SeederService(seeders, seederOptions);
38
+ }),
39
+ inject: [SEEDER_MODULE_OPTIONS, ...(options.inject || [])],
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ static createAsyncProviders(options) {
45
+ if (options.useExisting || options.useFactory) {
46
+ return [this.createAsyncOptionsProvider(options)];
47
+ }
48
+ return [
49
+ this.createAsyncOptionsProvider(options),
50
+ {
51
+ provide: options.useClass,
52
+ useClass: options.useClass,
53
+ },
54
+ ];
55
+ }
56
+ static createAsyncOptionsProvider(options) {
57
+ if (options.useFactory) {
58
+ return {
59
+ provide: SEEDER_MODULE_OPTIONS,
60
+ useFactory: options.useFactory,
61
+ inject: options.inject || [],
62
+ };
63
+ }
64
+ return {
65
+ provide: SEEDER_MODULE_OPTIONS,
66
+ useFactory: (optionsFactory) => tslib_1.__awaiter(this, void 0, void 0, function* () { return yield optionsFactory.createSeederOptions(); }),
67
+ inject: [options.useExisting || options.useClass],
68
+ };
69
+ }
70
+ };
71
+ exports.SeederModule = SeederModule;
72
+ exports.SeederModule = SeederModule = SeederModule_1 = tslib_1.__decorate([
73
+ (0, common_1.Module)({})
74
+ ], SeederModule);
75
+ //# sourceMappingURL=seeder.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeder.module.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/seeder/seeder.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAMwB;AAGxB,qDAAiD;AAgBjD,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAG/C,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAErB,MAAM,CAAC,QAAQ,CAAC,OAA4B;QACxC,OAAO;YACH,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,SAAS,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC5B,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;gBACxB;oBACI,OAAO,EAAE,8BAAa;oBACtB,UAAU,EAAE,CAAC,GAAG,OAAiB,EAAiB,EAAE;wBAChD,OAAO,IAAI,8BAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/C,CAAC;oBACD,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAgB;iBACjD;aACJ;SACJ,CAAC;IACN,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAiC;QACjD,OAAO;YACH,MAAM,EAAE,cAAY;YACpB,MAAM,EAAE,OAAO,CAAC,QAAQ;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,SAAS,EAAE;gBACP,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACrC;oBACI,OAAO,EAAE,8BAAa;oBACtB,UAAU,EAAE,CAAO,aAAkC,EAAE,GAAG,OAAiB,EAA0B,EAAE;wBACnG,OAAO,IAAI,8BAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;oBACrD,CAAC,CAAA;oBACD,MAAM,EAAE,CAAC,qBAAqB,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;iBAC7D;aACJ;SACJ,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,OAAiC;QACjE,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO;YACH,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;YACxC;gBACI,OAAO,EAAE,OAAO,CAAC,QAAS;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAS;aAC9B;SACJ,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,0BAA0B,CAAC,OAAiC;QACvE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;gBACH,OAAO,EAAE,qBAAqB;gBAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;aAC/B,CAAC;QACN,CAAC;QAED,OAAO;YACH,OAAO,EAAE,qBAAqB;YAC9B,UAAU,EAAE,CAAO,cAAoC,EAAE,EAAE,wDACvD,OAAA,MAAM,cAAc,CAAC,mBAAmB,EAAE,CAAA,GAAA;YAC9C,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAS,CAAC;SACrD,CAAC;IACN,CAAC;CACJ,CAAA;AApEY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,YAAY,CAoExB"}
@@ -0,0 +1,10 @@
1
+ import { Seeder, SeederServiceOptions } from './seeder.interface';
2
+ export declare class SeederService {
3
+ private readonly seeders;
4
+ private readonly options;
5
+ constructor(seeders: Seeder[], options?: SeederServiceOptions);
6
+ run(): Promise<any>;
7
+ seed(): Promise<any>;
8
+ drop(): Promise<any>;
9
+ getSeederToRun(): Seeder[];
10
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SeederService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ let SeederService = class SeederService {
7
+ constructor(seeders, options = {}) {
8
+ this.seeders = seeders;
9
+ this.options = options;
10
+ }
11
+ run() {
12
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
13
+ if (this.options.refresh) {
14
+ yield this.drop();
15
+ yield this.seed();
16
+ }
17
+ else {
18
+ yield this.seed();
19
+ }
20
+ });
21
+ }
22
+ seed() {
23
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
24
+ const seeders = this.getSeederToRun();
25
+ for (const seeder of seeders) {
26
+ console.info(`${seeder.constructor.name} start`);
27
+ yield seeder.seed(this.options);
28
+ console.info(`${seeder.constructor.name} completed`);
29
+ }
30
+ });
31
+ }
32
+ drop() {
33
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
34
+ const seeders = this.getSeederToRun();
35
+ for (const seeder of seeders) {
36
+ console.info(`Truncate ${seeder.constructor.name} start`);
37
+ yield seeder.drop(this.options);
38
+ console.info(`Truncate ${seeder.constructor.name} completed`);
39
+ }
40
+ });
41
+ }
42
+ getSeederToRun() {
43
+ var _a, _b;
44
+ if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.name) && typeof this.options.name === 'string') {
45
+ this.options.name = [this.options.name];
46
+ }
47
+ if (this.options.name) {
48
+ const seeders = this.seeders.filter((s) => { var _a; return ((_a = this.options.name) === null || _a === void 0 ? void 0 : _a.indexOf(s.constructor.name)) >= 0; });
49
+ if ((seeders === null || seeders === void 0 ? void 0 : seeders.length) === 0) {
50
+ const allNames = this.seeders.map((s) => s.constructor.name);
51
+ console.warn('\x1b[43m', 'Warning : No Seeder Found. Available Name are', '\x1b[0m', '\x1b[32m', '\n', `${allNames.join('\n')}`, '\x1b[0m');
52
+ return [];
53
+ }
54
+ return seeders;
55
+ }
56
+ if (((_b = this.seeders) === null || _b === void 0 ? void 0 : _b.length) === 0) {
57
+ console.info('\x1b[43m', 'Warning : No seeders to run. Make sure you have passed default seeder', '\x1b[0m');
58
+ }
59
+ return this.seeders;
60
+ }
61
+ };
62
+ exports.SeederService = SeederService;
63
+ exports.SeederService = SeederService = tslib_1.__decorate([
64
+ (0, common_1.Injectable)(),
65
+ tslib_1.__metadata("design:paramtypes", [Array, Object])
66
+ ], SeederService);
67
+ //# sourceMappingURL=seeder.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeder.service.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/seeder/seeder.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { FactoryValue, FactoryValueGenerator } from '../decorators/factory.decorator';
3
+ export type PropertyMetadataType = {
4
+ target?: any;
5
+ propertyKey?: any;
6
+ arg: {
7
+ generator: FactoryValueGenerator | FactoryValue;
8
+ dependsOn?: string[];
9
+ };
10
+ };
11
+ export declare class FactoryMetadataStorageHost {
12
+ private properties;
13
+ addPropertyMetadata(metadata: PropertyMetadataType): void;
14
+ getPropertyMetadatasByTarget(target: Type<unknown>): PropertyMetadataType[];
15
+ }
16
+ export declare const FactoryMetadataStorage: FactoryMetadataStorageHost;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FactoryMetadataStorage = exports.FactoryMetadataStorageHost = void 0;
4
+ class FactoryMetadataStorageHost {
5
+ constructor() {
6
+ this.properties = [];
7
+ }
8
+ addPropertyMetadata(metadata) {
9
+ this.properties.push(metadata);
10
+ }
11
+ getPropertyMetadatasByTarget(target) {
12
+ return this.properties.filter((property) => property.target === target);
13
+ }
14
+ }
15
+ exports.FactoryMetadataStorageHost = FactoryMetadataStorageHost;
16
+ const globalRef = global;
17
+ exports.FactoryMetadataStorage = globalRef.FactoryMetadataStorage ||
18
+ (globalRef.FactoryMetadataStorage = new FactoryMetadataStorageHost());
19
+ //# sourceMappingURL=factory.metadata.storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.metadata.storage.js","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/storages/factory.metadata.storage.ts"],"names":[],"mappings":";;;AAiBA,MAAa,0BAA0B;IAAvC;QAEY,eAAU,GAA2B,EAAE,CAAC;IAYpD,CAAC;IAVG,mBAAmB,CAAC,QAA8B;QAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,4BAA4B,CACxB,MAAqB;QAErB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC5E,CAAC;CAEJ;AAdD,gEAcC;AAED,MAAM,SAAS,GAAG,MAAa,CAAC;AAEnB,QAAA,sBAAsB,GAA+B,SAAS,CAAC,sBAAsB;IAC9F,CAAC,SAAS,CAAC,sBAAsB,GAAG,IAAI,0BAA0B,EAAE,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":"5.8.3"}