@ackplus/nest-seeder 1.1.1 → 1.1.5
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/package.json +2 -2
- package/src/cli.d.ts +4 -0
- package/src/cli.d.ts.map +1 -0
- package/src/{cli.ts → cli.js} +56 -89
- package/src/{index.ts → index.d.ts} +1 -7
- package/src/index.d.ts.map +1 -0
- package/src/index.js +11 -0
- package/src/lib/decorators/factory.decorator.d.ts +7 -0
- package/src/lib/decorators/factory.decorator.d.ts.map +1 -0
- package/src/lib/decorators/factory.decorator.js +16 -0
- package/src/lib/factory/data.factory.d.ts +7 -0
- package/src/lib/factory/data.factory.d.ts.map +1 -0
- package/src/lib/factory/{data.factory.ts → data.factory.js} +16 -45
- package/src/lib/{index.ts → index.d.ts} +1 -3
- package/src/lib/index.d.ts.map +1 -0
- package/src/lib/index.js +7 -0
- package/src/lib/interfaces/factory.interface.d.ts +5 -0
- package/src/lib/interfaces/factory.interface.d.ts.map +1 -0
- package/src/lib/interfaces/factory.interface.js +2 -0
- package/src/lib/interfaces/{index.ts → index.d.ts} +1 -1
- package/src/lib/interfaces/index.d.ts.map +1 -0
- package/src/lib/interfaces/index.js +5 -0
- package/src/lib/interfaces/property-metadata.interface.d.ts +7 -0
- package/src/lib/interfaces/property-metadata.interface.d.ts.map +1 -0
- package/src/lib/interfaces/property-metadata.interface.js +2 -0
- package/src/lib/interfaces/{seeder-module-async-options.interface.ts → seeder-module-async-options.interface.d.ts} +1 -5
- package/src/lib/interfaces/seeder-module-async-options.interface.d.ts.map +1 -0
- package/src/lib/interfaces/seeder-module-async-options.interface.js +2 -0
- package/src/lib/interfaces/{seeder-options-factory.interface.ts → seeder-options-factory.interface.d.ts} +1 -1
- package/src/lib/interfaces/seeder-options-factory.interface.d.ts.map +1 -0
- package/src/lib/interfaces/seeder-options-factory.interface.js +2 -0
- package/src/lib/seeder/seeder.d.ts +11 -0
- package/src/lib/seeder/seeder.d.ts.map +1 -0
- package/src/lib/seeder/{seeder.interface.ts → seeder.interface.d.ts} +1 -1
- package/src/lib/seeder/seeder.interface.d.ts.map +1 -0
- package/src/lib/seeder/seeder.interface.js +2 -0
- package/src/lib/seeder/seeder.js +37 -0
- package/src/lib/seeder/seeder.module.d.ts +18 -0
- package/src/lib/seeder/seeder.module.d.ts.map +1 -0
- package/src/lib/seeder/seeder.module.js +74 -0
- package/src/lib/seeder/seeder.service.d.ts +11 -0
- package/src/lib/seeder/seeder.service.d.ts.map +1 -0
- package/src/lib/seeder/{seeder.service.ts → seeder.service.js} +25 -42
- package/src/lib/storages/factory.metadata.storage.d.ts +17 -0
- package/src/lib/storages/factory.metadata.storage.d.ts.map +1 -0
- package/src/lib/storages/factory.metadata.storage.js +18 -0
- package/eslint.config.mjs +0 -22
- package/jest.config.ts +0 -10
- package/project.json +0 -38
- package/src/lib/decorators/factory.decorator.ts +0 -32
- package/src/lib/interfaces/factory.interface.ts +0 -9
- package/src/lib/interfaces/property-metadata.interface.ts +0 -11
- package/src/lib/seeder/seeder.module.ts +0 -97
- package/src/lib/seeder/seeder.ts +0 -66
- package/src/lib/storages/factory.metadata.storage.ts +0 -37
- package/tsconfig.json +0 -17
- package/tsconfig.lib.json +0 -14
- package/tsconfig.spec.json +0 -15
package/package.json
CHANGED
package/src/cli.d.ts
ADDED
package/src/cli.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../../packages/nest-seeder/src/cli.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAyB,MAAM,OAAO,CAAC;AAqK3E,eAAO,MAAM,MAAM,GAAI,SAAS,aAAa,KAAG,YAgC/C,CAAC"}
|
package/src/{cli.ts → cli.js}
RENAMED
|
@@ -1,52 +1,45 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
dummyData: boolean;
|
|
15
|
-
config: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async function parseArguments(): Promise<CliArguments> {
|
|
19
|
-
const argv = await yargs(process.argv.slice(2))
|
|
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
|
+
async function parseArguments() {
|
|
13
|
+
const argv = await (0, yargs_1.default)(process.argv.slice(2))
|
|
20
14
|
.option('refresh', {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
alias: 'r',
|
|
16
|
+
type: 'boolean',
|
|
17
|
+
description: 'Drop all data before seeding',
|
|
18
|
+
default: false
|
|
19
|
+
})
|
|
26
20
|
.option('name', {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
21
|
+
alias: 'n',
|
|
22
|
+
type: 'array',
|
|
23
|
+
string: true,
|
|
24
|
+
description: 'Specific seeder names to run',
|
|
25
|
+
})
|
|
32
26
|
.option('dummyData', {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
alias: 'd',
|
|
28
|
+
type: 'boolean',
|
|
29
|
+
description: 'Include dummy data',
|
|
30
|
+
default: false
|
|
31
|
+
})
|
|
38
32
|
.option('config', {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
33
|
+
alias: 'c',
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'Path to seeder configuration file',
|
|
36
|
+
demandOption: true
|
|
37
|
+
})
|
|
44
38
|
.help()
|
|
45
39
|
.example('nest-seed -c ./seeder.config.ts', 'Run all seeders')
|
|
46
40
|
.example('nest-seed -c ./seeder.config.ts --refresh', 'Drop and reseed all data')
|
|
47
41
|
.example('nest-seed -c ./seeder.config.ts --name UserSeeder', 'Run specific seeder')
|
|
48
42
|
.parseAsync();
|
|
49
|
-
|
|
50
43
|
return {
|
|
51
44
|
refresh: argv.refresh,
|
|
52
45
|
name: argv.name,
|
|
@@ -54,7 +47,6 @@ async function parseArguments(): Promise<CliArguments> {
|
|
|
54
47
|
config: argv.config,
|
|
55
48
|
};
|
|
56
49
|
}
|
|
57
|
-
|
|
58
50
|
function setupTsNode() {
|
|
59
51
|
try {
|
|
60
52
|
// Register ts-node for TypeScript support
|
|
@@ -69,41 +61,36 @@ function setupTsNode() {
|
|
|
69
61
|
skipLibCheck: true,
|
|
70
62
|
}
|
|
71
63
|
});
|
|
72
|
-
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
73
66
|
console.error('Failed to setup TypeScript support. Make sure ts-node is installed:');
|
|
74
67
|
console.error('npm install -D ts-node typescript');
|
|
75
68
|
process.exit(1);
|
|
76
69
|
}
|
|
77
70
|
}
|
|
78
|
-
|
|
79
|
-
async function loadSeederConfig(configPath: string) {
|
|
71
|
+
async function loadSeederConfig(configPath) {
|
|
80
72
|
try {
|
|
81
73
|
// Resolve the config path relative to current working directory
|
|
82
74
|
const resolvedPath = path.resolve(process.cwd(), configPath);
|
|
83
|
-
|
|
84
75
|
// Check if file exists
|
|
85
76
|
if (!fs.existsSync(resolvedPath)) {
|
|
86
77
|
throw new Error(`Configuration file not found: ${resolvedPath}`);
|
|
87
78
|
}
|
|
88
|
-
|
|
89
79
|
// Setup TypeScript support if needed
|
|
90
80
|
if (configPath.endsWith('.ts')) {
|
|
91
81
|
setupTsNode();
|
|
92
82
|
}
|
|
93
|
-
|
|
94
83
|
// Clear require cache to ensure fresh import
|
|
95
84
|
delete require.cache[resolvedPath];
|
|
96
|
-
|
|
97
85
|
// Import the configuration
|
|
98
|
-
const configModule = await
|
|
86
|
+
const configModule = await Promise.resolve(`${resolvedPath}`).then(s => tslib_1.__importStar(require(s)));
|
|
99
87
|
const config = configModule.default || configModule;
|
|
100
|
-
|
|
101
88
|
if (!config) {
|
|
102
89
|
throw new Error('Configuration file must export a default configuration object');
|
|
103
90
|
}
|
|
104
|
-
|
|
105
91
|
return config;
|
|
106
|
-
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
107
94
|
console.error('Error loading seeder configuration:');
|
|
108
95
|
console.error(error.message);
|
|
109
96
|
console.error('\nMake sure your configuration file:');
|
|
@@ -113,49 +100,38 @@ async function loadSeederConfig(configPath: string) {
|
|
|
113
100
|
process.exit(1);
|
|
114
101
|
}
|
|
115
102
|
}
|
|
116
|
-
|
|
117
103
|
async function runSeeder() {
|
|
118
104
|
try {
|
|
119
105
|
const args = await parseArguments();
|
|
120
|
-
|
|
121
106
|
console.log('🌱 Starting NestJS Seeder...');
|
|
122
107
|
console.log(`📁 Loading configuration from: ${args.config}`);
|
|
123
|
-
|
|
124
108
|
// Load the seeder configuration from specified path
|
|
125
109
|
const seederConfig = await loadSeederConfig(args.config);
|
|
126
|
-
|
|
127
|
-
const cliOptions: SeederServiceOptions = {
|
|
110
|
+
const cliOptions = {
|
|
128
111
|
refresh: args.refresh,
|
|
129
112
|
name: args.name,
|
|
130
113
|
dummyData: args.dummyData,
|
|
131
114
|
};
|
|
132
|
-
|
|
133
115
|
if (args.refresh) {
|
|
134
116
|
console.log('🔄 Refresh mode: Will drop existing data before seeding');
|
|
135
117
|
}
|
|
136
|
-
|
|
137
118
|
if (args.name && args.name.length > 0) {
|
|
138
119
|
console.log(`🎯 Running specific seeders: ${args.name.join(', ')}`);
|
|
139
120
|
}
|
|
140
|
-
|
|
141
121
|
if (args.dummyData) {
|
|
142
122
|
console.log('🎲 Dummy data mode enabled');
|
|
143
123
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}),
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
const seedersService = app.get(SeederService);
|
|
124
|
+
const app = await core_1.NestFactory.createApplicationContext(seeder_module_1.SeederModule.register({
|
|
125
|
+
...seederConfig,
|
|
126
|
+
...cliOptions,
|
|
127
|
+
}));
|
|
128
|
+
const seedersService = app.get(seeder_service_1.SeederService);
|
|
153
129
|
await seedersService.run();
|
|
154
|
-
|
|
155
130
|
await app.close();
|
|
156
131
|
console.log('✅ Seeding completed successfully!');
|
|
157
132
|
process.exit(0);
|
|
158
|
-
}
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
159
135
|
console.error('❌ Error running seeder:');
|
|
160
136
|
console.error(error.message);
|
|
161
137
|
if (error.stack && process.env.NODE_ENV === 'development') {
|
|
@@ -165,41 +141,32 @@ async function runSeeder() {
|
|
|
165
141
|
process.exit(1);
|
|
166
142
|
}
|
|
167
143
|
}
|
|
168
|
-
|
|
169
|
-
export const seeder = (options: SeederOptions): SeederRunner => {
|
|
144
|
+
const seeder = (options) => {
|
|
170
145
|
return {
|
|
171
|
-
async run(extraOptions
|
|
172
|
-
const cliOptions
|
|
173
|
-
const argv
|
|
146
|
+
async run(extraOptions) {
|
|
147
|
+
const cliOptions = {};
|
|
148
|
+
const argv = (0, yargs_1.default)(process.argv).argv;
|
|
174
149
|
if (argv.r || argv.refresh) {
|
|
175
150
|
cliOptions.refresh = true;
|
|
176
151
|
}
|
|
177
|
-
|
|
178
152
|
if (argv.n || argv.name) {
|
|
179
153
|
cliOptions.name = argv.n || argv.name;
|
|
180
154
|
}
|
|
181
|
-
|
|
182
155
|
if (argv.d || argv.dummyData) {
|
|
183
156
|
cliOptions.dummyData = argv.d || argv.dummyData;
|
|
184
157
|
}
|
|
185
|
-
|
|
186
158
|
extraOptions = Object.assign(extraOptions, cliOptions);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}),
|
|
193
|
-
);
|
|
194
|
-
|
|
195
|
-
const seedersService = app.get(SeederService);
|
|
159
|
+
const app = await core_1.NestFactory.createApplicationContext(seeder_module_1.SeederModule.register({
|
|
160
|
+
...options,
|
|
161
|
+
...extraOptions,
|
|
162
|
+
}));
|
|
163
|
+
const seedersService = app.get(seeder_service_1.SeederService);
|
|
196
164
|
await seedersService.run();
|
|
197
|
-
|
|
198
165
|
await app.close();
|
|
199
166
|
},
|
|
200
167
|
};
|
|
201
168
|
};
|
|
202
|
-
|
|
169
|
+
exports.seeder = seeder;
|
|
203
170
|
// Only run if this file is executed directly
|
|
204
171
|
if (require.main === module) {
|
|
205
172
|
runSeeder();
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
export * from './lib/seeder/seeder';
|
|
2
|
-
|
|
3
2
|
export * from './lib/seeder/seeder.interface';
|
|
4
|
-
|
|
5
3
|
export * from './lib/seeder/seeder.module';
|
|
6
|
-
|
|
7
4
|
export * from './lib/seeder/seeder.service';
|
|
8
|
-
|
|
9
5
|
export * from './lib/factory/data.factory';
|
|
10
|
-
|
|
11
6
|
export * from './lib/decorators/factory.decorator';
|
|
12
|
-
|
|
13
7
|
export * from './lib/interfaces/seeder-options-factory.interface';
|
|
14
|
-
|
|
15
8
|
export * from './lib/interfaces/seeder-module-async-options.interface';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/nest-seeder/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AAEpC,cAAc,+BAA+B,CAAC;AAE9C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,oCAAoC,CAAC;AAEnD,cAAc,mDAAmD,CAAC;AAElE,cAAc,wDAAwD,CAAC"}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
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);
|
|
@@ -0,0 +1,7 @@
|
|
|
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 {};
|
|
7
|
+
//# sourceMappingURL=factory.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.decorator.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/decorators/factory.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKxC,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEtD,MAAM,MAAM,qBAAqB,GAAG,CAChC,KAAK,CAAC,EAAE,KAAK,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACxB,YAAY,CAAC;AAElB,wBAAgB,OAAO,CACnB,SAAS,EAAE,qBAAqB,GAAG,YAAY,EAC/C,SAAS,CAAC,EAAE,MAAM,EAAE,IAGhB,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,aAAa,MAAM,GAAG,MAAM,KAC7B,IAAI,CAUV"}
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.factory.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/factory/data.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAOxC,qBAAa,WAAW;IAEpB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO;IAuBrD,OAAO,CAAC,MAAM,CAAC,QAAQ;CA2D1B"}
|
|
@@ -1,31 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
PropertyMetadataType,
|
|
9
|
-
} from '../storages/factory.metadata.storage';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export class DataFactory {
|
|
13
|
-
|
|
14
|
-
static createForClass(target: Type<unknown>): Factory {
|
|
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) {
|
|
15
8
|
if (!target) {
|
|
16
|
-
throw new Error(
|
|
17
|
-
`Target class "${target}" passed in to the "TemplateFactory#createForClass()" method is "undefined".`,
|
|
18
|
-
);
|
|
9
|
+
throw new Error(`Target class "${target}" passed in to the "TemplateFactory#createForClass()" method is "undefined".`);
|
|
19
10
|
}
|
|
20
|
-
|
|
21
|
-
const properties = FactoryMetadataStorage.getPropertyMetadatasByTarget(target);
|
|
22
|
-
|
|
11
|
+
const properties = factory_metadata_storage_1.FactoryMetadataStorage.getPropertyMetadatasByTarget(target);
|
|
23
12
|
return {
|
|
24
|
-
generate: (
|
|
25
|
-
|
|
26
|
-
values: Record<string, any> = {},
|
|
27
|
-
): Record<string, FactoryValue>[] => {
|
|
28
|
-
const ret: Record<string, FactoryValue>[] = [];
|
|
13
|
+
generate: (count, values = {}) => {
|
|
14
|
+
const ret = [];
|
|
29
15
|
for (let i = 0; i < count; i++) {
|
|
30
16
|
ret.push(this.generate(properties, values));
|
|
31
17
|
}
|
|
@@ -33,17 +19,11 @@ export class DataFactory {
|
|
|
33
19
|
},
|
|
34
20
|
};
|
|
35
21
|
}
|
|
36
|
-
|
|
37
|
-
private static generate(
|
|
38
|
-
properties: PropertyMetadataType[],
|
|
39
|
-
values: Record<string, any>,
|
|
40
|
-
): Record<string, FactoryValue> {
|
|
22
|
+
static generate(properties, values) {
|
|
41
23
|
const ctx = { ...values };
|
|
42
|
-
|
|
43
24
|
return properties.reduce((result, property) => {
|
|
44
25
|
const propertyKey = property.propertyKey;
|
|
45
26
|
const { generator, dependsOn } = property.arg;
|
|
46
|
-
|
|
47
27
|
// Skip if the value is already generated in the context (ctx)
|
|
48
28
|
if (ctx[propertyKey] !== undefined) {
|
|
49
29
|
return {
|
|
@@ -51,39 +31,30 @@ export class DataFactory {
|
|
|
51
31
|
...result,
|
|
52
32
|
};
|
|
53
33
|
}
|
|
54
|
-
|
|
55
34
|
// If the property has dependencies, ensure they are generated first
|
|
56
35
|
if (Array.isArray(dependsOn)) {
|
|
57
36
|
dependsOn.forEach((dependency) => {
|
|
58
37
|
if (ctx[dependency] === undefined) {
|
|
59
38
|
// Find the dependent property and generate it if it hasn't been generated yet
|
|
60
|
-
const dependentProperty = properties.find(
|
|
61
|
-
(p) => p.propertyKey === dependency,
|
|
62
|
-
);
|
|
39
|
+
const dependentProperty = properties.find((p) => p.propertyKey === dependency);
|
|
63
40
|
if (dependentProperty) {
|
|
64
41
|
ctx[dependency] = typeof dependentProperty.arg.generator ===
|
|
65
42
|
'function' ?
|
|
66
|
-
dependentProperty.arg.generator(
|
|
67
|
-
faker,
|
|
68
|
-
ctx,
|
|
69
|
-
) :
|
|
43
|
+
dependentProperty.arg.generator(faker_1.faker, ctx) :
|
|
70
44
|
dependentProperty.arg;
|
|
71
45
|
}
|
|
72
46
|
}
|
|
73
47
|
});
|
|
74
48
|
}
|
|
75
|
-
|
|
76
49
|
// Generate the current field
|
|
77
50
|
ctx[propertyKey] = typeof generator === 'function' ?
|
|
78
|
-
generator(faker, ctx) :
|
|
51
|
+
generator(faker_1.faker, ctx) :
|
|
79
52
|
generator;
|
|
80
|
-
|
|
81
53
|
return {
|
|
82
54
|
[propertyKey]: ctx[propertyKey],
|
|
83
55
|
...result,
|
|
84
56
|
};
|
|
85
57
|
}, {});
|
|
86
|
-
|
|
87
58
|
// return properties.reduce(
|
|
88
59
|
// (r, p) => ({
|
|
89
60
|
// [p.propertyKey]: ctx[p.propertyKey] = typeof p.arg === 'function' ? p.arg(faker, ctx) : p.arg,
|
|
@@ -92,5 +63,5 @@ export class DataFactory {
|
|
|
92
63
|
// {},
|
|
93
64
|
// );
|
|
94
65
|
}
|
|
95
|
-
|
|
96
66
|
}
|
|
67
|
+
exports.DataFactory = DataFactory;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/nest-seeder/src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,cAAc,2BAA2B,CAAC;AAE1C,cAAc,wBAAwB,CAAC;AAEvC,cAAc,gCAAgC,CAAC"}
|
package/src/lib/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
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);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/factory.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D,MAAM,WAAW,OAAO;IACpB,QAAQ,CACJ,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;CACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAE9C,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FactoryValueGenerator, FactoryValue } from '../decorators/factory.decorator';
|
|
2
|
+
export interface PropertyMetadata {
|
|
3
|
+
target: () => void;
|
|
4
|
+
propertyKey: string;
|
|
5
|
+
arg: FactoryValueGenerator | FactoryValue;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=property-metadata.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-metadata.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/property-metadata.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,YAAY,EACf,MAAM,iCAAiC,CAAC;AAGzC,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,qBAAqB,GAAG,YAAY,CAAC;CAC7C"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Type, ModuleMetadata } from '@nestjs/common';
|
|
2
2
|
import { SeederModuleOptions } from '../seeder/seeder.module';
|
|
3
3
|
import { SeederOptionsFactory } from './seeder-options-factory.interface';
|
|
4
|
-
|
|
5
4
|
/**
|
|
6
5
|
* Async options for SeederModule configuration
|
|
7
6
|
*/
|
|
@@ -10,24 +9,21 @@ export interface SeederModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'
|
|
|
10
9
|
* Make the module global
|
|
11
10
|
*/
|
|
12
11
|
isGlobal?: boolean;
|
|
13
|
-
|
|
14
12
|
/**
|
|
15
13
|
* Use a factory function to create options
|
|
16
14
|
*/
|
|
17
15
|
useFactory?: (...args: any[]) => Promise<SeederModuleOptions> | SeederModuleOptions;
|
|
18
|
-
|
|
19
16
|
/**
|
|
20
17
|
* Use a class that implements SeederOptionsFactory
|
|
21
18
|
*/
|
|
22
19
|
useClass?: Type<SeederOptionsFactory>;
|
|
23
|
-
|
|
24
20
|
/**
|
|
25
21
|
* Use an existing provider
|
|
26
22
|
*/
|
|
27
23
|
useExisting?: Type<SeederOptionsFactory>;
|
|
28
|
-
|
|
29
24
|
/**
|
|
30
25
|
* Dependencies to inject into the factory function or class
|
|
31
26
|
*/
|
|
32
27
|
inject?: any[];
|
|
33
28
|
}
|
|
29
|
+
//# sourceMappingURL=seeder-module-async-options.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder-module-async-options.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/seeder-module-async-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IAC7E;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;IAEpF;;OAEG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEtC;;OAEG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEzC;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAClB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { SeederModuleOptions } from '../seeder/seeder.module';
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* Interface for SeederOptionsFactory
|
|
5
4
|
* Implement this interface to create a factory class for seeder configuration
|
|
@@ -7,3 +6,4 @@ import { SeederModuleOptions } from '../seeder/seeder.module';
|
|
|
7
6
|
export interface SeederOptionsFactory {
|
|
8
7
|
createSeederOptions(): Promise<SeederModuleOptions> | SeederModuleOptions;
|
|
9
8
|
}
|
|
9
|
+
//# sourceMappingURL=seeder-options-factory.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder-options-factory.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/interfaces/seeder-options-factory.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACjC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;CAC7E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
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;
|
|
11
|
+
//# sourceMappingURL=seeder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/seeder/seeder.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,IAAI,EACJ,aAAa,EACb,gBAAgB,EACnB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAEH,wBAAwB,EAE3B,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,EAAE,KAAK,CACX,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,gBAAgB,CACxE,CAAC;IACF,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IACzB,GAAG,CAAC,YAAY,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAaD,eAAO,MAAM,MAAM,GAAI,SAAS,aAAa,KAAG,YAyB/C,CAAC"}
|
|
@@ -3,8 +3,8 @@ export interface SeederServiceOptions {
|
|
|
3
3
|
refresh?: boolean;
|
|
4
4
|
dummyData?: boolean;
|
|
5
5
|
}
|
|
6
|
-
|
|
7
6
|
export interface Seeder {
|
|
8
7
|
seed(options: SeederServiceOptions): Promise<any>;
|
|
9
8
|
drop(options: SeederServiceOptions): Promise<any>;
|
|
10
9
|
}
|
|
10
|
+
//# sourceMappingURL=seeder.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/seeder/seeder.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,MAAM;IACnB,IAAI,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD"}
|