@postxl/generator 0.38.2 → 0.40.0
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/dist/generator.js +43 -21
- package/dist/generators/enums/types.generator.js +1 -1
- package/dist/generators/indices/businesslogic-actiontypes.generator.js +1 -1
- package/dist/generators/indices/businesslogic-update-module.generator.js +2 -2
- package/dist/generators/indices/businesslogic-update-service.generator.js +1 -1
- package/dist/generators/indices/businesslogic-view-module.generator.js +2 -2
- package/dist/generators/indices/businesslogic-view-service.generator.js +1 -1
- package/dist/generators/indices/{seed-service.generator.d.ts → data-types.generator.d.ts} +2 -2
- package/dist/generators/indices/data-types.generator.js +48 -0
- package/dist/generators/indices/datamock-module.generator.js +11 -11
- package/dist/generators/indices/datamocker.generator.js +1 -1
- package/dist/generators/indices/datamodule.generator.js +34 -52
- package/dist/generators/indices/dataservice.generator.js +202 -9
- package/dist/generators/indices/dispatcher-service.generator.js +20 -10
- package/dist/generators/indices/emptydatabasemigration.generator.d.ts +2 -0
- package/dist/generators/indices/emptydatabasemigration.generator.js +14 -7
- package/dist/generators/indices/importexport-convert-import-functions.generator.d.ts +9 -0
- package/dist/generators/indices/importexport-convert-import-functions.generator.js +528 -0
- package/dist/generators/indices/importexport-exporter-class.generator.d.ts +9 -0
- package/dist/generators/indices/importexport-exporter-class.generator.js +116 -0
- package/dist/generators/indices/importexport-import-service.generator.d.ts +9 -0
- package/dist/generators/indices/importexport-import-service.generator.js +563 -0
- package/dist/generators/indices/{seeddata-type.generator.d.ts → importexport-types.generator.d.ts} +2 -2
- package/dist/generators/indices/importexport-types.generator.js +234 -0
- package/dist/generators/indices/repositories.generator.js +8 -8
- package/dist/generators/indices/seed-migration.generator.js +1 -1
- package/dist/generators/indices/seed-template.generator.js +1 -1
- package/dist/generators/indices/selectors.generator.d.ts +7 -0
- package/dist/generators/indices/selectors.generator.js +82 -0
- package/dist/generators/indices/{seed-template-decoder.generator.d.ts → testdata-service.generator.d.ts} +2 -2
- package/dist/generators/indices/testdata-service.generator.js +71 -0
- package/dist/generators/models/businesslogic-update.generator.js +6 -6
- package/dist/generators/models/businesslogic-view.generator.js +4 -4
- package/dist/generators/models/importexport-decoder.generator.d.ts +23 -0
- package/dist/generators/models/importexport-decoder.generator.js +234 -0
- package/dist/generators/models/react.generator/library.generator.js +4 -0
- package/dist/generators/models/react.generator/modals.generator.js +35 -8
- package/dist/generators/models/repository.generator.js +156 -18
- package/dist/generators/models/route.generator.js +2 -2
- package/dist/generators/models/stub.generator.js +1 -1
- package/dist/generators/models/types.generator.js +1 -1
- package/dist/lib/id-collector.d.ts +43 -0
- package/dist/lib/id-collector.js +53 -0
- package/dist/lib/imports.d.ts +1 -1
- package/dist/lib/meta.d.ts +480 -122
- package/dist/lib/meta.js +187 -74
- package/dist/lib/schema/schema.d.ts +58 -43
- package/dist/lib/schema/types.d.ts +63 -12
- package/dist/lib/schema/types.js +27 -7
- package/dist/lib/utils/string.d.ts +1 -0
- package/dist/lib/utils/string.js +1 -0
- package/dist/prisma/parse.js +4 -4
- package/package.json +2 -2
- package/dist/generators/indices/seed-service.generator.js +0 -356
- package/dist/generators/indices/seed-template-decoder.generator.js +0 -151
- package/dist/generators/indices/seeddata-type.generator.js +0 -42
package/dist/generator.js
CHANGED
|
@@ -48,22 +48,27 @@ const businesslogic_update_service_generator_1 = require("./generators/indices/b
|
|
|
48
48
|
const businesslogic_view_index_generator_1 = require("./generators/indices/businesslogic-view-index.generator");
|
|
49
49
|
const businesslogic_view_module_generator_1 = require("./generators/indices/businesslogic-view-module.generator");
|
|
50
50
|
const businesslogic_view_service_generator_1 = require("./generators/indices/businesslogic-view-service.generator");
|
|
51
|
+
const data_types_generator_1 = require("./generators/indices/data-types.generator");
|
|
51
52
|
const datamock_module_generator_1 = require("./generators/indices/datamock-module.generator");
|
|
52
53
|
const datamocker_generator_1 = require("./generators/indices/datamocker.generator");
|
|
53
54
|
const datamodule_generator_1 = require("./generators/indices/datamodule.generator");
|
|
54
55
|
const dataservice_generator_1 = require("./generators/indices/dataservice.generator");
|
|
55
56
|
const dispatcher_service_generator_1 = require("./generators/indices/dispatcher-service.generator");
|
|
56
57
|
const emptydatabasemigration_generator_1 = require("./generators/indices/emptydatabasemigration.generator");
|
|
58
|
+
const importexport_convert_import_functions_generator_1 = require("./generators/indices/importexport-convert-import-functions.generator");
|
|
59
|
+
const importexport_exporter_class_generator_1 = require("./generators/indices/importexport-exporter-class.generator");
|
|
60
|
+
const importexport_import_service_generator_1 = require("./generators/indices/importexport-import-service.generator");
|
|
61
|
+
const importexport_types_generator_1 = require("./generators/indices/importexport-types.generator");
|
|
57
62
|
const repositories_generator_1 = require("./generators/indices/repositories.generator");
|
|
58
63
|
const seed_migration_generator_1 = require("./generators/indices/seed-migration.generator");
|
|
59
|
-
const seed_service_generator_1 = require("./generators/indices/seed-service.generator");
|
|
60
64
|
const seed_template_generator_1 = require("./generators/indices/seed-template.generator");
|
|
61
|
-
const
|
|
62
|
-
const seeddata_type_generator_1 = require("./generators/indices/seeddata-type.generator");
|
|
65
|
+
const selectors_generator_1 = require("./generators/indices/selectors.generator");
|
|
63
66
|
const stubs_generator_1 = require("./generators/indices/stubs.generator");
|
|
67
|
+
const testdata_service_generator_1 = require("./generators/indices/testdata-service.generator");
|
|
64
68
|
const types_generator_2 = require("./generators/indices/types.generator");
|
|
65
69
|
const businesslogic_update_generator_1 = require("./generators/models/businesslogic-update.generator");
|
|
66
70
|
const businesslogic_view_generator_1 = require("./generators/models/businesslogic-view.generator");
|
|
71
|
+
const importexport_decoder_generator_1 = require("./generators/models/importexport-decoder.generator");
|
|
67
72
|
const react_generator_2 = require("./generators/models/react.generator");
|
|
68
73
|
const repository_generator_1 = require("./generators/models/repository.generator");
|
|
69
74
|
const route_generator_1 = require("./generators/models/route.generator");
|
|
@@ -78,13 +83,15 @@ const parse_1 = require("./prisma/parse");
|
|
|
78
83
|
const CONFIG_SCHEMA = zod_1.z
|
|
79
84
|
.object({
|
|
80
85
|
project: zod_1.z.string(),
|
|
81
|
-
pathToTypes: zod_1.z.string().optional(),
|
|
82
86
|
pathToDataLib: zod_1.z.string().optional(),
|
|
83
87
|
pathToCypress: zod_1.z.string().optional(),
|
|
88
|
+
pathToE2ELib: zod_1.z.string().optional(),
|
|
89
|
+
pathToImportExport: zod_1.z.string().optional(),
|
|
84
90
|
pathToActions: zod_1.z.string().optional(),
|
|
85
91
|
pathToBusinessLogic: zod_1.z.string().optional(),
|
|
86
|
-
pathToSeedLib: zod_1.z.string().optional(),
|
|
87
92
|
pathToSeedData: zod_1.z.string().optional(),
|
|
93
|
+
pathToSeedLib: zod_1.z.string().optional(),
|
|
94
|
+
pathToTypes: zod_1.z.string().optional(),
|
|
88
95
|
trpcRoutesFolder: zod_1.z.string().optional(),
|
|
89
96
|
reactFolderOutput: zod_1.z.string().optional(),
|
|
90
97
|
migrationsFolder: zod_1.z.string().optional(),
|
|
@@ -103,25 +110,28 @@ const CONFIG_SCHEMA = zod_1.z
|
|
|
103
110
|
paths: {
|
|
104
111
|
dataLibPath: (0, types_1.toPath)(s.pathToDataLib || 'repos'),
|
|
105
112
|
cypressPath: (0, types_1.toPath)(s.pathToCypress || './e2e/cypress/'),
|
|
113
|
+
e2eLibPath: (0, types_1.toPath)(s.pathToE2ELib || './e2e/src/'),
|
|
114
|
+
importExportPath: (0, types_1.toPath)(s.pathToImportExport || 'import-export'),
|
|
106
115
|
actionsPath: (0, types_1.toPath)(s.pathToActions || 'actions'),
|
|
107
116
|
businessLogicPath: (0, types_1.toPath)(s.pathToBusinessLogic || 'business-logic'),
|
|
108
|
-
|
|
117
|
+
migrationsFolderPath: (0, types_1.toPath)(s.migrationsFolder || 'migrations'),
|
|
109
118
|
modelTypeDefinitionsPath: (0, types_1.toPath)(s.pathToTypes || 'types'),
|
|
110
|
-
|
|
119
|
+
reactFolderPath: (0, types_1.toPath)(s.reactFolderOutput || 'react'),
|
|
111
120
|
seedDataPath: (0, types_1.toPath)(s.pathToSeedData || 'seed-data'),
|
|
121
|
+
seedLibPath: (0, types_1.toPath)(s.pathToSeedLib || 'seed'),
|
|
112
122
|
trpcRoutesFolderPath: (0, types_1.toPath)(s.trpcRoutesFolder || 'trpc'),
|
|
113
|
-
migrationsFolderPath: (0, types_1.toPath)(s.migrationsFolder || 'migrations'),
|
|
114
123
|
},
|
|
115
124
|
randomSeed: s.randomSeed,
|
|
116
125
|
force: s.force,
|
|
117
126
|
disableGenerators: {
|
|
118
|
-
types: s.pathToTypes === undefined,
|
|
119
|
-
data: s.pathToDataLib === undefined,
|
|
120
127
|
actions: s.pathToActions === undefined,
|
|
121
128
|
businessLogic: s.pathToBusinessLogic === undefined,
|
|
129
|
+
data: s.pathToDataLib === undefined,
|
|
130
|
+
importExport: s.pathToImportExport === undefined,
|
|
131
|
+
react: s.reactFolderOutput === undefined,
|
|
122
132
|
seed: s.pathToSeedLib === undefined,
|
|
123
133
|
trpc: s.trpcRoutesFolder === undefined,
|
|
124
|
-
|
|
134
|
+
types: s.pathToTypes === undefined,
|
|
125
135
|
},
|
|
126
136
|
userType: (0, types_1.toTypeName)(`User`),
|
|
127
137
|
};
|
|
@@ -172,13 +182,17 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
172
182
|
if (!config.disableGenerators.seed) {
|
|
173
183
|
generated.write(`/${meta.seed.filePath}.ts`, (0, seed_generator_1.generateSeedModel)({ model, itemCount: 5, meta }));
|
|
174
184
|
}
|
|
175
|
-
//
|
|
185
|
+
// Data
|
|
176
186
|
if (!config.disableGenerators.data) {
|
|
177
187
|
generated.write(`/${meta.data.stubFilePath}.ts`, (0, stub_generator_1.generateStub)({ model, meta }));
|
|
178
|
-
generated.write(`/${meta.data.
|
|
179
|
-
generated.write(`/${meta.data.
|
|
188
|
+
generated.write(`/${meta.data.repository.filePath}.ts`, (0, repository_generator_1.generateRepository)({ model, meta }));
|
|
189
|
+
generated.write(`/${meta.data.mockRepository.filePath}.ts`, (0, repository_generator_1.generateMockRepository)({ model, meta }));
|
|
180
190
|
generated.write(`/${meta.data.dataMockerStubFilePath}.ts`, (0, stub_generator_1.generateStub)({ model, meta }));
|
|
181
191
|
}
|
|
192
|
+
// Import-Export
|
|
193
|
+
if (!config.disableGenerators.importExport) {
|
|
194
|
+
generated.write(`/${meta.importExport.decoder.filePath}.ts`, (0, importexport_decoder_generator_1.generateModelImportExportDecoder)({ model, meta }));
|
|
195
|
+
}
|
|
182
196
|
// Business Logic
|
|
183
197
|
if (!config.disableGenerators.businessLogic) {
|
|
184
198
|
generated.write(`/${meta.businessLogic.view.serviceFilePath}.ts`, (0, businesslogic_view_generator_1.generateModelBusinessLogicView)({ model, meta }));
|
|
@@ -209,12 +223,15 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
209
223
|
if (!config.disableGenerators.data) {
|
|
210
224
|
generated.write(`/${meta.data.dataMockModuleFilePath}.ts`, (0, datamock_module_generator_1.generateDataMockModule)({ models, meta }));
|
|
211
225
|
generated.write(`/${meta.data.dataModuleFilePath}.ts`, (0, datamodule_generator_1.generateDataModule)({ models, meta }));
|
|
212
|
-
generated.write(`/${meta.data.
|
|
226
|
+
generated.write(`/${meta.data.dataService.filePath}.ts`, (0, dataservice_generator_1.generateDataService)({ models, meta }));
|
|
213
227
|
generated.write(`/${meta.data.dataMockerFilePath}.ts`, (0, datamocker_generator_1.generateDataMocker)({ models, meta }));
|
|
228
|
+
generated.write(`/${meta.data.selectorsFilePath}.ts`, (0, selectors_generator_1.generateSelectors)());
|
|
229
|
+
generated.write(`/${meta.data.testDataServiceFilePath}.ts`, (0, testdata_service_generator_1.generateTestDataService)({ models, meta }));
|
|
214
230
|
generated.write(`/${meta.data.dataMockerStubIndexFilePath}.ts`, (0, stubs_generator_1.generateDataMockerStubsIndex)({ models, meta }));
|
|
215
|
-
generated.write(`/${meta.data.
|
|
216
|
-
generated.write(`/${meta.data.
|
|
231
|
+
generated.write(`/${meta.data.repository.constFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesArray)({ models, meta }));
|
|
232
|
+
generated.write(`/${meta.data.repository.indexFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesIndex)({ models, meta }));
|
|
217
233
|
generated.write(`/${meta.data.stubIndexFilePath}.ts`, (0, stubs_generator_1.generateStubsIndex)({ models, meta }));
|
|
234
|
+
generated.write(`/${meta.data.types.filePath}.ts`, (0, data_types_generator_1.generateDataTypes)({ models, meta }));
|
|
218
235
|
// We only generate the empty database migration if the migration folder already has an existing migration
|
|
219
236
|
// Else we would generate a migration that deletes from tables that have not yet been created in the database
|
|
220
237
|
// We include this check here as the template does not come with any migration - hence this migration should also not be generated
|
|
@@ -222,8 +239,16 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
222
239
|
generated.write((0, emptydatabasemigration_generator_1.deriveEmptyDatabaseMigrationFilePath)(meta), (0, emptydatabasemigration_generator_1.generateEmptyDatabaseStoredProcedure)({ models, meta }));
|
|
223
240
|
}
|
|
224
241
|
}
|
|
242
|
+
if (!config.disableGenerators.importExport) {
|
|
243
|
+
generated.write(`/${meta.importExport.types.filePath}.ts`, (0, importexport_types_generator_1.generateImportExportTypes)({ models, meta }));
|
|
244
|
+
generated.write(`/${meta.importExport.exporterClass.filePath}.ts`, (0, importexport_exporter_class_generator_1.generateImportExportExporterClass)({ models, meta }));
|
|
245
|
+
generated.write(`/${meta.importExport.importService.filePath}.ts`, (0, importexport_import_service_generator_1.generateImportExportImportService)({ models, meta }));
|
|
246
|
+
generated.write(`/${meta.importExport.decoder.indexFilePath}.ts`, (0, importexport_decoder_generator_1.generateImportExportDecoderIndex)({ models, meta }));
|
|
247
|
+
generated.write(`/${meta.importExport.decoder.fullDecoderFilePath}.ts`, (0, importexport_decoder_generator_1.generateImportExportDecoder)({ models, meta }));
|
|
248
|
+
generated.write(`/${meta.importExport.converterFunctions.filePath}.ts`, (0, importexport_convert_import_functions_generator_1.generateImportExportConvertImportFunctions)({ models, meta }));
|
|
249
|
+
}
|
|
225
250
|
if (!config.disableGenerators.actions) {
|
|
226
|
-
generated.write(`/${meta.actions.
|
|
251
|
+
generated.write(`/${meta.actions.dispatcherService.filePath}.ts`, (0, dispatcher_service_generator_1.generateActionsDispatcherService)({ models, meta }));
|
|
227
252
|
}
|
|
228
253
|
if (!config.disableGenerators.businessLogic) {
|
|
229
254
|
generated.write(`/${meta.businessLogic.view.indexFilePath}.ts`, (0, businesslogic_view_index_generator_1.generateBusinessLogicViewIndex)({ models, meta }));
|
|
@@ -235,11 +260,8 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
235
260
|
generated.write(`/${meta.businessLogic.update.actionTypesFilePath}.ts`, (0, businesslogic_actiontypes_generator_1.generateBusinessLogicActionTypes)({ models, meta }));
|
|
236
261
|
}
|
|
237
262
|
if (!config.disableGenerators.seed) {
|
|
238
|
-
generated.write(`/${meta.seed.seedDataTypeFilePath}.ts`, (0, seeddata_type_generator_1.generateSeedDataType)({ models, meta }));
|
|
239
|
-
generated.write(`/${meta.seed.serviceFilePath}.ts`, (0, seed_service_generator_1.generateSeedService)({ models, meta }));
|
|
240
263
|
generated.write(`/${meta.seedData.initialMigrationFilePath}.ts`, (0, seed_migration_generator_1.generateSeedMigration)({ models, meta }));
|
|
241
264
|
generated.write(`/${meta.seedData.templateExcelFilePath}`, yield (0, seed_template_generator_1.generateSeedExcelTemplate)({ models }));
|
|
242
|
-
generated.write(`/${meta.seedData.templateDecoderFilePath}.ts`, (0, seed_template_decoder_generator_1.generateSeedTemplateDecoder)({ models, meta }));
|
|
243
265
|
}
|
|
244
266
|
if (!config.disableGenerators.trpc) {
|
|
245
267
|
generated.write(`/${meta.trpc.routesFilePath}.ts`, (0, route_generator_1.generateRoutesIndex)({ models, meta }));
|
|
@@ -21,7 +21,7 @@ function generateBusinessLogicActionTypes({ models, meta }) {
|
|
|
21
21
|
actionsTypeElements.push(modelMeta.businessLogic.update.actionName);
|
|
22
22
|
actionResultTypeElements.push(`${modelMeta.businessLogic.update.actionModelDiscriminantName}: ${modelMeta.businessLogic.update.actionResultName}`);
|
|
23
23
|
}
|
|
24
|
-
return `
|
|
24
|
+
return /* ts */ `
|
|
25
25
|
${imports.generate()}
|
|
26
26
|
|
|
27
27
|
/**
|
|
@@ -24,7 +24,7 @@ function generateBusinessLogicUpdateModule({ models, meta }) {
|
|
|
24
24
|
providers.push(meta.businessLogic.update.serviceClassName);
|
|
25
25
|
}
|
|
26
26
|
const moduleName = meta.businessLogic.update.moduleName;
|
|
27
|
-
return `
|
|
27
|
+
return /* ts */ `
|
|
28
28
|
import { DynamicModule } from '@${meta.config.project}/common'
|
|
29
29
|
|
|
30
30
|
${imports.generate()}
|
|
@@ -41,7 +41,7 @@ export class ${moduleName} {
|
|
|
41
41
|
*/
|
|
42
42
|
static getInstance(): DynamicModule {
|
|
43
43
|
if (!${moduleName}.cachedModule) {
|
|
44
|
-
throw new Error('${moduleName} must be called via .
|
|
44
|
+
throw new Error('${moduleName} must be called via .forRoot first!')
|
|
45
45
|
}
|
|
46
46
|
return ${moduleName}.cachedModule
|
|
47
47
|
}
|
|
@@ -20,7 +20,7 @@ function generateBusinessLogicUpdateService({ models, meta, }) {
|
|
|
20
20
|
const constructor = mm
|
|
21
21
|
.map(({ meta }) => `@Inject(forwardRef(() => ${meta.businessLogic.update.serviceClassName})) public readonly ${meta.businessLogic.update.serviceVariableName} :${meta.businessLogic.update.serviceClassName}`)
|
|
22
22
|
.join(',\n');
|
|
23
|
-
return `
|
|
23
|
+
return /* ts */ `
|
|
24
24
|
import { Inject, Injectable, forwardRef } from '@nestjs/common'
|
|
25
25
|
|
|
26
26
|
${imports.generate()}
|
|
@@ -23,7 +23,7 @@ function generateBusinessLogicViewModule({ models, meta }) {
|
|
|
23
23
|
providers.push(meta.businessLogic.view.serviceClassName);
|
|
24
24
|
}
|
|
25
25
|
const moduleName = meta.businessLogic.view.moduleName;
|
|
26
|
-
return `
|
|
26
|
+
return /* ts */ `
|
|
27
27
|
import { DynamicModule } from '@${meta.config.project}/common'
|
|
28
28
|
|
|
29
29
|
${imports.generate()}
|
|
@@ -40,7 +40,7 @@ export class ${moduleName} {
|
|
|
40
40
|
*/
|
|
41
41
|
static getInstance(): DynamicModule {
|
|
42
42
|
if (!${moduleName}.cachedModule) {
|
|
43
|
-
throw new Error('${moduleName} must be called via .
|
|
43
|
+
throw new Error('${moduleName} must be called via .forRoot first!')
|
|
44
44
|
}
|
|
45
45
|
return ${moduleName}.cachedModule
|
|
46
46
|
}
|
|
@@ -20,7 +20,7 @@ function generateBusinessLogicViewService({ models, meta }) {
|
|
|
20
20
|
const constructor = mm
|
|
21
21
|
.map(({ meta }) => `@Inject(forwardRef(() => ${meta.businessLogic.view.serviceClassName})) public readonly ${meta.businessLogic.view.serviceVariableName} :${meta.businessLogic.view.serviceClassName}`)
|
|
22
22
|
.join(',\n');
|
|
23
|
-
return `
|
|
23
|
+
return /* ts */ `
|
|
24
24
|
import { Inject, Injectable, forwardRef } from '@nestjs/common'
|
|
25
25
|
|
|
26
26
|
${imports.generate()}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { SchemaMetaData } from '../../lib/meta';
|
|
2
2
|
import { Model } from '../../lib/schema/schema';
|
|
3
3
|
/**
|
|
4
|
-
* Generates
|
|
4
|
+
* Generates type for BulkMutations.
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function generateDataTypes({ models, meta }: {
|
|
7
7
|
models: Model[];
|
|
8
8
|
meta: SchemaMetaData;
|
|
9
9
|
}): string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateDataTypes = void 0;
|
|
4
|
+
const imports_1 = require("../../lib/imports");
|
|
5
|
+
const meta_1 = require("../../lib/meta");
|
|
6
|
+
/**
|
|
7
|
+
* Generates type for BulkMutations.
|
|
8
|
+
*/
|
|
9
|
+
function generateDataTypes({ models, meta }) {
|
|
10
|
+
const { types } = meta.data;
|
|
11
|
+
const imports = imports_1.ImportsGenerator.from(types.filePath);
|
|
12
|
+
const dto = meta.types.dto;
|
|
13
|
+
imports.addImports({
|
|
14
|
+
[meta.types.importPath]: [dto.create, dto.update, dto.upsert, dto.genericModel, dto.idType],
|
|
15
|
+
});
|
|
16
|
+
const modelTypes = [];
|
|
17
|
+
for (const model of models) {
|
|
18
|
+
const modelMeta = (0, meta_1.getModelMetadata)({ model });
|
|
19
|
+
imports.addImport({
|
|
20
|
+
items: [modelMeta.types.typeName, modelMeta.types.brandedIdType],
|
|
21
|
+
from: modelMeta.types.importPath,
|
|
22
|
+
});
|
|
23
|
+
modelTypes.push(`${modelMeta.seed.constantName}?: ${types.bulkMutationForModel}<${modelMeta.types.typeName}, ${modelMeta.types.brandedIdType}>`);
|
|
24
|
+
}
|
|
25
|
+
return /* ts */ `
|
|
26
|
+
${imports.generate()}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Generic type for BulkMutation for a model.
|
|
30
|
+
*/
|
|
31
|
+
export type ${types.bulkMutationForModel}<
|
|
32
|
+
Model extends ${dto.genericModel}<ID>,
|
|
33
|
+
ID extends ${dto.idType}
|
|
34
|
+
> = {
|
|
35
|
+
create?: ${dto.create}<Model, ID>[]
|
|
36
|
+
update?: ${dto.update}<Model, ID>[]
|
|
37
|
+
upsert?: ${dto.upsert}<Model, ID>[]
|
|
38
|
+
delete?: ID[]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Bulk changes for all models.
|
|
43
|
+
*/
|
|
44
|
+
export type ${types.bulkMutation} = {
|
|
45
|
+
${modelTypes.join('\n')}
|
|
46
|
+
}`;
|
|
47
|
+
}
|
|
48
|
+
exports.generateDataTypes = generateDataTypes;
|
|
@@ -34,20 +34,20 @@ function generateDataMockModule({ models, meta }) {
|
|
|
34
34
|
const mm = models.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }));
|
|
35
35
|
const imports = imports_1.ImportsGenerator.from(meta.data.dataMockModuleFilePath).addImports({
|
|
36
36
|
[meta.data.dataModuleFilePath]: [Types.toVariableName('DataModule')],
|
|
37
|
-
[meta.data.
|
|
37
|
+
[meta.data.dataService.filePath]: [meta.data.dataService.class],
|
|
38
38
|
// we need to import the file directly instead via the normal index file as this would cause a circular dependency else
|
|
39
|
-
[meta.actions.
|
|
39
|
+
[meta.actions.importPath]: [meta.actions.actionExecution.mock],
|
|
40
40
|
});
|
|
41
41
|
for (const { model, meta } of mm) {
|
|
42
42
|
imports.addImport({ items: [model.typeName], from: meta.types.importPath });
|
|
43
|
-
imports.addImport({ items: [meta.data.
|
|
44
|
-
imports.addImport({ items: [meta.data.
|
|
43
|
+
imports.addImport({ items: [meta.data.repository.className], from: meta.data.repository.filePath });
|
|
44
|
+
imports.addImport({ items: [meta.data.mockRepository.className], from: meta.data.mockRepository.filePath });
|
|
45
45
|
}
|
|
46
46
|
const providers = mm
|
|
47
47
|
.map(({ meta }) => `{
|
|
48
|
-
provide: ${meta.data.
|
|
48
|
+
provide: ${meta.data.repository.className},
|
|
49
49
|
useFactory: async () => {
|
|
50
|
-
const repository = new ${meta.data.
|
|
50
|
+
const repository = new ${meta.data.mockRepository.className}()
|
|
51
51
|
if (!!seed && !!seed.${meta.seed.constantName}) {
|
|
52
52
|
await repository.reInit({items: seed.${meta.seed.constantName}, execution })
|
|
53
53
|
}
|
|
@@ -55,13 +55,13 @@ function generateDataMockModule({ models, meta }) {
|
|
|
55
55
|
}
|
|
56
56
|
}`)
|
|
57
57
|
.join(', ');
|
|
58
|
-
return `
|
|
58
|
+
return /* ts */ `
|
|
59
59
|
import { DynamicModule } from '@pxl/common'
|
|
60
60
|
import { DbModule } from '@${meta.config.project}/db'
|
|
61
61
|
|
|
62
62
|
${imports.generate()}
|
|
63
63
|
|
|
64
|
-
export class
|
|
64
|
+
export class ${meta.data.dataMockModuleName} {
|
|
65
65
|
static mock(seed?: MockData): DynamicModule {
|
|
66
66
|
const execution = new MockActionExecution()
|
|
67
67
|
|
|
@@ -71,9 +71,9 @@ export class DataMockModule {
|
|
|
71
71
|
]
|
|
72
72
|
|
|
73
73
|
const cachedModule = {
|
|
74
|
-
module:
|
|
74
|
+
module: ${meta.data.moduleName},
|
|
75
75
|
imports: [DbModule.provideMock()],
|
|
76
|
-
providers
|
|
76
|
+
providers,
|
|
77
77
|
exports: providers,
|
|
78
78
|
global: true,
|
|
79
79
|
}
|
|
@@ -84,7 +84,7 @@ export class DataMockModule {
|
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
export interface
|
|
87
|
+
export interface ${meta.data.dataMockDataType} {
|
|
88
88
|
${mm.map(({ model, meta }) => `${meta.data.mockDataPropertyName}?: ${model.typeName}[]`).join('\n')}
|
|
89
89
|
}
|
|
90
90
|
`;
|
|
@@ -71,7 +71,7 @@ function generateAddDataFunction(model, meta) {
|
|
|
71
71
|
`;
|
|
72
72
|
});
|
|
73
73
|
// TODO: Move the publicly accessible function's name to the metadata definition!
|
|
74
|
-
return `
|
|
74
|
+
return /* ts */ `
|
|
75
75
|
public add${model.typeName}(
|
|
76
76
|
item?: Partial<Omit<${model.typeName}, '${idField.name}'> & { ${idField.name}: ${idField.unbrandedTypeName} }>
|
|
77
77
|
): DataMocker {
|
|
@@ -1,50 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.generateDataModule = void 0;
|
|
27
4
|
const imports_1 = require("../../lib/imports");
|
|
28
5
|
const meta_1 = require("../../lib/meta");
|
|
29
|
-
const Types = __importStar(require("../../lib/schema/types"));
|
|
30
6
|
/**
|
|
31
7
|
* Generates a data module class.
|
|
32
8
|
*/
|
|
33
9
|
function generateDataModule({ models, meta }) {
|
|
34
10
|
const mm = models.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }));
|
|
35
11
|
const imports = imports_1.ImportsGenerator.from(meta.data.dataModuleFilePath).addImports({
|
|
36
|
-
[meta.data.
|
|
12
|
+
[meta.data.dataService.filePath]: [meta.data.dataService.class],
|
|
13
|
+
[meta.data.dataMockModuleFilePath]: [meta.data.dataMockModuleName],
|
|
37
14
|
});
|
|
38
15
|
for (const { meta } of mm) {
|
|
39
16
|
imports.addImport({
|
|
40
|
-
items: [meta.data.
|
|
41
|
-
from: meta.data.
|
|
17
|
+
items: [meta.data.repository.className],
|
|
18
|
+
from: meta.data.repository.filePath,
|
|
42
19
|
});
|
|
43
20
|
}
|
|
44
21
|
const moduleName = meta.data.moduleName;
|
|
45
|
-
return `
|
|
22
|
+
return /* ts */ `
|
|
23
|
+
import { FactoryProvider } from '@nestjs/common'
|
|
24
|
+
|
|
46
25
|
import { DynamicModule } from '@${meta.config.project}/common'
|
|
47
|
-
import { DbModule } from '@${meta.config.project}/db'
|
|
26
|
+
import { DbModule, DbService } from '@${meta.config.project}/db'
|
|
27
|
+
import { E2EConfig } from '@${meta.config.project}/e2e'
|
|
48
28
|
|
|
49
29
|
${imports.generate()}
|
|
50
30
|
|
|
@@ -59,7 +39,7 @@ export class ${moduleName} {
|
|
|
59
39
|
*/
|
|
60
40
|
static getInstance(): DynamicModule {
|
|
61
41
|
if (!${moduleName}.cachedModule) {
|
|
62
|
-
throw new Error('${moduleName} must be called via .
|
|
42
|
+
throw new Error('${moduleName} must be called via .forRoot first!')
|
|
63
43
|
}
|
|
64
44
|
return ${moduleName}.cachedModule
|
|
65
45
|
}
|
|
@@ -75,36 +55,39 @@ export class ${moduleName} {
|
|
|
75
55
|
/**
|
|
76
56
|
* The forRoot method should only be called once by the root module.
|
|
77
57
|
*/
|
|
78
|
-
static forRoot(): DynamicModule {
|
|
58
|
+
static forRoot(options: E2EConfig): DynamicModule {
|
|
79
59
|
if (${moduleName}.cachedModule) {
|
|
80
60
|
throw new Error('${moduleName} is already instantiated, please call .forRoot only once from root...')
|
|
81
61
|
}
|
|
82
62
|
|
|
83
|
-
|
|
84
|
-
${
|
|
85
|
-
]
|
|
86
|
-
|
|
87
|
-
${moduleName}.cachedModule = {
|
|
88
|
-
module: ${moduleName},
|
|
89
|
-
global: true,
|
|
90
|
-
imports: [DbModule.forRoot()],
|
|
91
|
-
providers: [DataService, ...repositoryProviders],
|
|
92
|
-
exports: [DataService, ...repositoryProviders],
|
|
63
|
+
if (options.isE2ETest && !options.useDatabaseForE2E) {
|
|
64
|
+
return ${meta.data.dataMockModuleName}.mock()
|
|
93
65
|
}
|
|
94
66
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
67
|
+
// We need to initialize the user repository right at the beginning,
|
|
68
|
+
// so that we have the rootUser available for the other modules - including
|
|
69
|
+
// the action and seed modules which will ensure that seed data is created.
|
|
70
|
+
const userRepositoryProvider: FactoryProvider<UserRepository> = {
|
|
71
|
+
provide: UserRepository,
|
|
72
|
+
inject: [DbService],
|
|
73
|
+
useFactory: async (dbService: DbService) => {
|
|
74
|
+
const repository = new UserRepository(dbService)
|
|
75
|
+
await repository.init()
|
|
76
|
+
return repository
|
|
77
|
+
},
|
|
102
78
|
}
|
|
103
79
|
|
|
104
80
|
const providers = [
|
|
105
|
-
|
|
81
|
+
DataService,
|
|
82
|
+
|
|
83
|
+
userRepositoryProvider,
|
|
84
|
+
|
|
85
|
+
${mm
|
|
86
|
+
.filter((mm) => mm.model.name !== 'User')
|
|
87
|
+
.map(({ meta }) => meta.data.repository.className)
|
|
88
|
+
.join(',')}
|
|
106
89
|
]
|
|
107
|
-
|
|
90
|
+
|
|
108
91
|
${moduleName}.cachedModule = {
|
|
109
92
|
module: ${moduleName},
|
|
110
93
|
global: true,
|
|
@@ -115,7 +98,6 @@ export class ${moduleName} {
|
|
|
115
98
|
|
|
116
99
|
return ${moduleName}.cachedModule
|
|
117
100
|
}
|
|
118
|
-
}
|
|
119
|
-
`;
|
|
101
|
+
}`;
|
|
120
102
|
}
|
|
121
103
|
exports.generateDataModule = generateDataModule;
|