@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
|
@@ -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
|
+
async function bootstrap(options) {
|
|
10
|
+
const app = await core_1.NestFactory.createApplicationContext(seeder_module_1.SeederModule.register(options));
|
|
11
|
+
const seedersService = app.get(seeder_service_1.SeederService);
|
|
12
|
+
await seedersService.run();
|
|
13
|
+
await app.close();
|
|
14
|
+
}
|
|
15
|
+
const seeder = (options) => {
|
|
16
|
+
return {
|
|
17
|
+
run(extraOptions) {
|
|
18
|
+
const cliOptions = {};
|
|
19
|
+
const argv = (0, yargs_1.default)(process.argv).argv;
|
|
20
|
+
if (argv.r || argv.refresh) {
|
|
21
|
+
cliOptions.refresh = true;
|
|
22
|
+
}
|
|
23
|
+
if (argv.n || argv.name) {
|
|
24
|
+
cliOptions.name = argv.n || argv.name;
|
|
25
|
+
}
|
|
26
|
+
if (argv.d || argv.dummyData) {
|
|
27
|
+
cliOptions.dummyData = argv.d || argv.dummyData;
|
|
28
|
+
}
|
|
29
|
+
extraOptions = Object.assign(extraOptions, cliOptions);
|
|
30
|
+
return bootstrap({
|
|
31
|
+
...options,
|
|
32
|
+
...extraOptions,
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
exports.seeder = seeder;
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
}
|
|
18
|
+
//# sourceMappingURL=seeder.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder.module.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/seeder/seeder.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,gBAAgB,EACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAC;AAG/F,MAAM,WAAW,wBAAyB,SAAQ,oBAAoB;IAClE,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,wBAAwB;IACjE,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;AAID,qBACa,YAAY;IAErB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa;IAkB5D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,GAAG,aAAa;IAkBrE,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAcnC,OAAO,CAAC,MAAM,CAAC,0BAA0B;CAgB5C"}
|
|
@@ -0,0 +1,74 @@
|
|
|
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: async (seederOptions, ...seeders) => {
|
|
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: async (optionsFactory) => await 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);
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
}
|
|
11
|
+
//# sourceMappingURL=seeder.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/seeder/seeder.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGlE,qBACa,aAAa;IAGlB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE,oBAAyB;IAGjD,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IASnB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAYpB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAS1B,cAAc,IAAI,MAAM,EAAE;CAmC7B"}
|
|
@@ -1,38 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
) { }
|
|
13
|
-
|
|
14
|
-
async run(): Promise<any> {
|
|
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
|
+
async run() {
|
|
15
12
|
if (this.options.refresh) {
|
|
16
13
|
await this.drop();
|
|
17
14
|
await this.seed();
|
|
18
|
-
}
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
19
17
|
await this.seed();
|
|
20
18
|
}
|
|
21
19
|
}
|
|
22
|
-
|
|
23
|
-
async seed(): Promise<any> {
|
|
20
|
+
async seed() {
|
|
24
21
|
// Don't use `Promise.all` during insertion.
|
|
25
22
|
// `Promise.all` will run all promises in parallel which is not what we want.
|
|
26
23
|
const seeders = this.getSeederToRun();
|
|
27
|
-
|
|
28
24
|
for (const seeder of seeders) {
|
|
29
25
|
console.info(`${seeder.constructor.name} start`);
|
|
30
26
|
await seeder.seed(this.options);
|
|
31
27
|
console.info(`${seeder.constructor.name} completed`);
|
|
32
28
|
}
|
|
33
29
|
}
|
|
34
|
-
|
|
35
|
-
async drop(): Promise<any> {
|
|
30
|
+
async drop() {
|
|
36
31
|
const seeders = this.getSeederToRun();
|
|
37
32
|
for (const seeder of seeders) {
|
|
38
33
|
console.info(`Truncate ${seeder.constructor.name} start`);
|
|
@@ -40,40 +35,28 @@ export class SeederService {
|
|
|
40
35
|
console.info(`Truncate ${seeder.constructor.name} completed`);
|
|
41
36
|
}
|
|
42
37
|
}
|
|
43
|
-
|
|
44
|
-
getSeederToRun(): Seeder[] {
|
|
38
|
+
getSeederToRun() {
|
|
45
39
|
if (this.options?.name && typeof this.options.name === 'string') {
|
|
46
40
|
this.options.name = [this.options.name];
|
|
47
41
|
}
|
|
48
|
-
|
|
49
42
|
if (this.options.name) {
|
|
50
43
|
const nameArray = Array.isArray(this.options.name) ? this.options.name : [this.options.name];
|
|
51
|
-
const seeders = this.seeders.filter(
|
|
52
|
-
(s) => nameArray.indexOf(s.constructor.name) >= 0,
|
|
53
|
-
);
|
|
44
|
+
const seeders = this.seeders.filter((s) => nameArray.indexOf(s.constructor.name) >= 0);
|
|
54
45
|
if (seeders?.length === 0) {
|
|
55
46
|
const allNames = this.seeders.map((s) => s.constructor.name);
|
|
56
|
-
console.warn(
|
|
57
|
-
'\x1b[43m',
|
|
58
|
-
'Warning : No Seeder Found. Available Name are',
|
|
59
|
-
'\x1b[0m',
|
|
60
|
-
'\x1b[32m',
|
|
61
|
-
'\n',
|
|
62
|
-
`${allNames.join('\n')}`,
|
|
63
|
-
'\x1b[0m',
|
|
64
|
-
);
|
|
47
|
+
console.warn('\x1b[43m', 'Warning : No Seeder Found. Available Name are', '\x1b[0m', '\x1b[32m', '\n', `${allNames.join('\n')}`, '\x1b[0m');
|
|
65
48
|
return [];
|
|
66
49
|
}
|
|
67
50
|
return seeders;
|
|
68
51
|
}
|
|
69
52
|
if (this.seeders?.length === 0) {
|
|
70
|
-
console.info(
|
|
71
|
-
'\x1b[43m',
|
|
72
|
-
'Warning : No seeders to run. Make sure you have passed default seeder',
|
|
73
|
-
'\x1b[0m',
|
|
74
|
-
);
|
|
53
|
+
console.info('\x1b[43m', 'Warning : No seeders to run. Make sure you have passed default seeder', '\x1b[0m');
|
|
75
54
|
}
|
|
76
55
|
return this.seeders;
|
|
77
56
|
}
|
|
78
|
-
|
|
79
|
-
|
|
57
|
+
};
|
|
58
|
+
exports.SeederService = SeederService;
|
|
59
|
+
exports.SeederService = SeederService = tslib_1.__decorate([
|
|
60
|
+
(0, common_1.Injectable)(),
|
|
61
|
+
tslib_1.__metadata("design:paramtypes", [Array, Object])
|
|
62
|
+
], SeederService);
|
|
@@ -0,0 +1,17 @@
|
|
|
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;
|
|
17
|
+
//# sourceMappingURL=factory.metadata.storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.metadata.storage.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-seeder/src/lib/storages/factory.metadata.storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EACH,YAAY,EACZ,qBAAqB,EACxB,MAAM,iCAAiC,CAAC;AAGzC,MAAM,MAAM,oBAAoB,GAAG;IAC/B,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,GAAG,EAAE;QACD,SAAS,EAAE,qBAAqB,GAAG,YAAY,CAAC;QAChD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACL,CAAC;AAEF,qBAAa,0BAA0B;IAEnC,OAAO,CAAC,UAAU,CAA8B;IAEhD,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIzD,4BAA4B,CACxB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GACtB,oBAAoB,EAAE;CAI5B;AAID,eAAO,MAAM,sBAAsB,EAAE,0BACoC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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());
|
package/eslint.config.mjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import baseConfig from '../../eslint.base.config';
|
|
2
|
-
|
|
3
|
-
export default [
|
|
4
|
-
...baseConfig,
|
|
5
|
-
{
|
|
6
|
-
files: ['**/*.json'],
|
|
7
|
-
rules: {
|
|
8
|
-
'@nx/dependency-checks': [
|
|
9
|
-
'error',
|
|
10
|
-
{
|
|
11
|
-
ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs,ts,cts,mts}'],
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
},
|
|
15
|
-
languageOptions: {
|
|
16
|
-
parser: await import('jsonc-eslint-parser'),
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
ignores: ['**/out-tsc'],
|
|
21
|
-
},
|
|
22
|
-
];
|
package/jest.config.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
displayName: 'test-nest-2',
|
|
3
|
-
preset: '../../jest.preset.js',
|
|
4
|
-
testEnvironment: 'node',
|
|
5
|
-
transform: {
|
|
6
|
-
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
|
|
7
|
-
},
|
|
8
|
-
moduleFileExtensions: ['ts', 'js', 'html'],
|
|
9
|
-
coverageDirectory: '../../coverage/packages/test-nest-2',
|
|
10
|
-
};
|
package/project.json
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "nest-seeder",
|
|
3
|
-
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
4
|
-
"sourceRoot": "packages/nest-seeder/src",
|
|
5
|
-
"projectType": "library",
|
|
6
|
-
"release": {
|
|
7
|
-
"version": {
|
|
8
|
-
"manifestRootsToUpdate": [
|
|
9
|
-
"dist/{projectRoot}"
|
|
10
|
-
],
|
|
11
|
-
"currentVersionResolver": "git-tag",
|
|
12
|
-
"fallbackCurrentVersionResolver": "disk"
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
"tags": [],
|
|
16
|
-
"targets": {
|
|
17
|
-
"build": {
|
|
18
|
-
"executor": "@nx/js:tsc",
|
|
19
|
-
"outputs": [
|
|
20
|
-
"{options.outputPath}"
|
|
21
|
-
],
|
|
22
|
-
"options": {
|
|
23
|
-
"outputPath": "dist/packages/nest-seeder",
|
|
24
|
-
"tsConfig": "packages/nest-seeder/tsconfig.lib.json",
|
|
25
|
-
"packageJson": "packages/nest-seeder/package.json",
|
|
26
|
-
"main": "packages/nest-seeder/src/index.ts",
|
|
27
|
-
"assets": [
|
|
28
|
-
"packages/nest-seeder/*.md"
|
|
29
|
-
]
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
"nx-release-publish": {
|
|
33
|
-
"options": {
|
|
34
|
-
"packageRoot": "dist/{projectRoot}"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Faker } from '@faker-js/faker';
|
|
2
|
-
|
|
3
|
-
import { FactoryMetadataStorage } from '../storages/factory.metadata.storage';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
type BaseType = string | number | Date | Buffer | boolean | Record<string, any>;
|
|
7
|
-
|
|
8
|
-
export type FactoryValue = BaseType | Array<BaseType>;
|
|
9
|
-
|
|
10
|
-
export type FactoryValueGenerator = (
|
|
11
|
-
faker?: Faker,
|
|
12
|
-
ctx?: Record<string, any>
|
|
13
|
-
) => FactoryValue;
|
|
14
|
-
|
|
15
|
-
export function Factory(
|
|
16
|
-
generator: FactoryValueGenerator | FactoryValue,
|
|
17
|
-
dependsOn?: string[],
|
|
18
|
-
) {
|
|
19
|
-
return (
|
|
20
|
-
target: Record<string, any>,
|
|
21
|
-
propertyKey: string | symbol,
|
|
22
|
-
): void => {
|
|
23
|
-
FactoryMetadataStorage.addPropertyMetadata({
|
|
24
|
-
target: target.constructor,
|
|
25
|
-
propertyKey: propertyKey as string,
|
|
26
|
-
arg: {
|
|
27
|
-
generator,
|
|
28
|
-
dependsOn,
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Module,
|
|
3
|
-
DynamicModule,
|
|
4
|
-
Provider,
|
|
5
|
-
Type,
|
|
6
|
-
ForwardReference,
|
|
7
|
-
} from '@nestjs/common';
|
|
8
|
-
|
|
9
|
-
import { Seeder, SeederServiceOptions } from './seeder.interface';
|
|
10
|
-
import { SeederService } from './seeder.service';
|
|
11
|
-
import { SeederModuleAsyncOptions } from '../interfaces/seeder-module-async-options.interface';
|
|
12
|
-
import { SeederOptionsFactory } from '../interfaces/seeder-options-factory.interface';
|
|
13
|
-
|
|
14
|
-
export interface SeederModuleExtraOptions extends SeederServiceOptions {
|
|
15
|
-
seeders?: Provider<Seeder>[];
|
|
16
|
-
plugins?: any[];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface SeederModuleOptions extends SeederModuleExtraOptions {
|
|
20
|
-
imports?: Array<
|
|
21
|
-
Type<any> | DynamicModule | Promise<DynamicModule> | ForwardReference
|
|
22
|
-
>;
|
|
23
|
-
providers?: Provider[];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const SEEDER_MODULE_OPTIONS = 'SEEDER_MODULE_OPTIONS';
|
|
27
|
-
|
|
28
|
-
@Module({})
|
|
29
|
-
export class SeederModule {
|
|
30
|
-
|
|
31
|
-
static register(options: SeederModuleOptions): DynamicModule {
|
|
32
|
-
return {
|
|
33
|
-
module: SeederModule,
|
|
34
|
-
imports: options.imports || [],
|
|
35
|
-
providers: [
|
|
36
|
-
...(options.providers || []),
|
|
37
|
-
...options.seeders || [],
|
|
38
|
-
{
|
|
39
|
-
provide: SeederService,
|
|
40
|
-
useFactory: (...seeders: Seeder[]): SeederService => {
|
|
41
|
-
return new SeederService(seeders, options);
|
|
42
|
-
},
|
|
43
|
-
inject: (options.seeders || []) as Type<any>[],
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
static forRootAsync(options: SeederModuleAsyncOptions): DynamicModule {
|
|
50
|
-
return {
|
|
51
|
-
module: SeederModule,
|
|
52
|
-
global: options.isGlobal,
|
|
53
|
-
imports: options.imports || [],
|
|
54
|
-
providers: [
|
|
55
|
-
...this.createAsyncProviders(options),
|
|
56
|
-
{
|
|
57
|
-
provide: SeederService,
|
|
58
|
-
useFactory: async (seederOptions: SeederModuleOptions, ...seeders: Seeder[]): Promise<SeederService> => {
|
|
59
|
-
return new SeederService(seeders, seederOptions);
|
|
60
|
-
},
|
|
61
|
-
inject: [SEEDER_MODULE_OPTIONS, ...(options.inject || [])],
|
|
62
|
-
},
|
|
63
|
-
],
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
private static createAsyncProviders(options: SeederModuleAsyncOptions): Provider[] {
|
|
68
|
-
if (options.useExisting || options.useFactory) {
|
|
69
|
-
return [this.createAsyncOptionsProvider(options)];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return [
|
|
73
|
-
this.createAsyncOptionsProvider(options),
|
|
74
|
-
{
|
|
75
|
-
provide: options.useClass!,
|
|
76
|
-
useClass: options.useClass!,
|
|
77
|
-
},
|
|
78
|
-
];
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
private static createAsyncOptionsProvider(options: SeederModuleAsyncOptions): Provider {
|
|
82
|
-
if (options.useFactory) {
|
|
83
|
-
return {
|
|
84
|
-
provide: SEEDER_MODULE_OPTIONS,
|
|
85
|
-
useFactory: options.useFactory,
|
|
86
|
-
inject: options.inject || [],
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return {
|
|
91
|
-
provide: SEEDER_MODULE_OPTIONS,
|
|
92
|
-
useFactory: async (optionsFactory: SeederOptionsFactory) =>
|
|
93
|
-
await optionsFactory.createSeederOptions(),
|
|
94
|
-
inject: [options.useExisting || options.useClass!],
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
}
|
package/src/lib/seeder/seeder.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Provider,
|
|
3
|
-
Type,
|
|
4
|
-
DynamicModule,
|
|
5
|
-
ForwardReference,
|
|
6
|
-
} from '@nestjs/common';
|
|
7
|
-
import { NestFactory } from '@nestjs/core';
|
|
8
|
-
import yargs from 'yargs';
|
|
9
|
-
|
|
10
|
-
import { SeederServiceOptions } from './seeder.interface';
|
|
11
|
-
import {
|
|
12
|
-
SeederModule,
|
|
13
|
-
SeederModuleExtraOptions,
|
|
14
|
-
SeederModuleOptions,
|
|
15
|
-
} from './seeder.module';
|
|
16
|
-
import { SeederService } from './seeder.service';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export interface SeederOptions {
|
|
20
|
-
imports?: Array<
|
|
21
|
-
Type<any> | DynamicModule | Promise<DynamicModule> | ForwardReference
|
|
22
|
-
>;
|
|
23
|
-
providers?: Provider[];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface SeederRunner {
|
|
27
|
-
run(extraOptions: SeederModuleExtraOptions): Promise<void>;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async function bootstrap(options: SeederModuleOptions) {
|
|
31
|
-
const app = await NestFactory.createApplicationContext(
|
|
32
|
-
SeederModule.register(options),
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
const seedersService = app.get(SeederService);
|
|
36
|
-
await seedersService.run();
|
|
37
|
-
|
|
38
|
-
await app.close();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export const seeder = (options: SeederOptions): SeederRunner => {
|
|
42
|
-
return {
|
|
43
|
-
run(extraOptions: SeederModuleExtraOptions): Promise<void> {
|
|
44
|
-
const cliOptions: SeederServiceOptions = {};
|
|
45
|
-
const argv:any = yargs(process.argv).argv;
|
|
46
|
-
if (argv.r || argv.refresh) {
|
|
47
|
-
cliOptions.refresh = true;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (argv.n || argv.name) {
|
|
51
|
-
cliOptions.name = argv.n || argv.name;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (argv.d || argv.dummyData) {
|
|
55
|
-
cliOptions.dummyData = argv.d || argv.dummyData;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
extraOptions = Object.assign(extraOptions, cliOptions);
|
|
59
|
-
|
|
60
|
-
return bootstrap({
|
|
61
|
-
...options,
|
|
62
|
-
...extraOptions,
|
|
63
|
-
});
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Type } from '@nestjs/common';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
FactoryValue,
|
|
5
|
-
FactoryValueGenerator,
|
|
6
|
-
} from '../decorators/factory.decorator';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export type PropertyMetadataType = {
|
|
10
|
-
target?: any;
|
|
11
|
-
propertyKey?: any;
|
|
12
|
-
arg: {
|
|
13
|
-
generator: FactoryValueGenerator | FactoryValue;
|
|
14
|
-
dependsOn?: string[];
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export class FactoryMetadataStorageHost {
|
|
19
|
-
|
|
20
|
-
private properties: PropertyMetadataType[] = [];
|
|
21
|
-
|
|
22
|
-
addPropertyMetadata(metadata: PropertyMetadataType): void {
|
|
23
|
-
this.properties.push(metadata);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
getPropertyMetadatasByTarget(
|
|
27
|
-
target: Type<unknown>,
|
|
28
|
-
): PropertyMetadataType[] {
|
|
29
|
-
return this.properties.filter((property) => property.target === target);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const globalRef = global as any;
|
|
35
|
-
|
|
36
|
-
export const FactoryMetadataStorage: FactoryMetadataStorageHost = globalRef.FactoryMetadataStorage ||
|
|
37
|
-
(globalRef.FactoryMetadataStorage = new FactoryMetadataStorageHost());
|
package/tsconfig.json
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"module": "commonjs",
|
|
5
|
-
"forceConsistentCasingInFileNames": true
|
|
6
|
-
},
|
|
7
|
-
"files": [],
|
|
8
|
-
"include": [],
|
|
9
|
-
"references": [
|
|
10
|
-
{
|
|
11
|
-
"path": "./tsconfig.lib.json"
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"path": "./tsconfig.spec.json"
|
|
15
|
-
}
|
|
16
|
-
]
|
|
17
|
-
}
|
package/tsconfig.lib.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"outDir": "../../dist/out-tsc",
|
|
5
|
-
"declaration": true,
|
|
6
|
-
"types": ["node"],
|
|
7
|
-
"target": "es2021",
|
|
8
|
-
"experimentalDecorators": true,
|
|
9
|
-
"emitDecoratorMetadata": true,
|
|
10
|
-
"forceConsistentCasingInFileNames": true
|
|
11
|
-
},
|
|
12
|
-
"include": ["src/**/*.ts"],
|
|
13
|
-
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"]
|
|
14
|
-
}
|