@postxl/generator 0.34.0 → 0.36.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 +91 -32
- package/dist/generators/indices/businesslogic-actiontypes.generator.d.ts +9 -0
- package/dist/generators/indices/businesslogic-actiontypes.generator.js +39 -0
- package/dist/generators/indices/businesslogic-update-index.generator.d.ts +9 -0
- package/dist/generators/indices/businesslogic-update-index.generator.js +20 -0
- package/dist/generators/indices/businesslogic-update-module.generator.d.ts +9 -0
- package/dist/generators/indices/businesslogic-update-module.generator.js +69 -0
- package/dist/generators/indices/businesslogic-update-service.generator.d.ts +9 -0
- package/dist/generators/indices/{businesslogicservice.generator.js → businesslogic-update-service.generator.js} +9 -10
- package/dist/generators/indices/businesslogic-view-index.generator.d.ts +9 -0
- package/dist/generators/indices/businesslogic-view-index.generator.js +19 -0
- package/dist/generators/indices/{businesslogicindex.generator.d.ts → businesslogic-view-module.generator.d.ts} +2 -2
- package/dist/generators/indices/{businesslogicmodule.generator.js → businesslogic-view-module.generator.js} +22 -26
- package/dist/generators/indices/{businesslogicservice.generator.d.ts → businesslogic-view-service.generator.d.ts} +1 -1
- package/dist/generators/indices/businesslogic-view-service.generator.js +34 -0
- package/dist/generators/indices/{datamockmodule.generator.js → datamock-module.generator.js} +8 -16
- package/dist/generators/indices/datamocker.generator.js +46 -40
- package/dist/generators/indices/datamodule.generator.js +7 -13
- package/dist/generators/indices/{businesslogicmodule.generator.d.ts → dispatcher-service.generator.d.ts} +2 -2
- package/dist/generators/indices/dispatcher-service.generator.js +81 -0
- package/dist/generators/indices/seed-migration.generator.d.ts +9 -0
- package/dist/generators/indices/seed-migration.generator.js +35 -0
- package/dist/generators/indices/seed-service.generator.d.ts +1 -1
- package/dist/generators/indices/seed-service.generator.js +327 -123
- package/dist/generators/indices/seed-template-decoder.generator.js +22 -6
- package/dist/generators/indices/{seed.generator.d.ts → seeddata-type.generator.d.ts} +2 -2
- package/dist/generators/indices/seeddata-type.generator.js +42 -0
- package/dist/generators/indices/types.generator.d.ts +1 -1
- package/dist/generators/indices/types.generator.js +8 -6
- package/dist/generators/models/businesslogic-update.generator.d.ts +10 -0
- package/dist/generators/models/businesslogic-update.generator.js +243 -0
- package/dist/generators/models/businesslogic-view.generator.d.ts +10 -0
- package/dist/generators/models/{businesslogic.generator.js → businesslogic-view.generator.js} +24 -72
- package/dist/generators/models/react.generator/modals.generator.js +2 -2
- package/dist/generators/models/repository.generator.d.ts +9 -0
- package/dist/generators/models/repository.generator.js +420 -131
- package/dist/generators/models/route.generator.js +45 -55
- package/dist/generators/models/seed.generator.js +6 -2
- package/dist/generators/models/types.generator.js +60 -13
- package/dist/lib/attributes.d.ts +5 -0
- package/dist/lib/imports.d.ts +23 -2
- package/dist/lib/imports.js +19 -1
- package/dist/lib/meta.d.ts +287 -34
- package/dist/lib/meta.js +87 -16
- package/dist/lib/schema/schema.d.ts +24 -6
- package/dist/lib/schema/types.d.ts +4 -0
- package/dist/lib/utils/jsdoc.d.ts +1 -1
- package/dist/lib/utils/jsdoc.js +8 -6
- package/dist/lib/utils/string.js +2 -1
- package/dist/lib/vfs.d.ts +33 -0
- package/dist/lib/vfs.js +157 -0
- package/dist/prisma/attributes.js +7 -3
- package/dist/prisma/parse.js +25 -5
- package/package.json +8 -3
- package/dist/generators/indices/businesslogicindex.generator.js +0 -19
- package/dist/generators/indices/seed.generator.js +0 -17
- package/dist/generators/indices/testdataservice.generator.d.ts +0 -9
- package/dist/generators/indices/testdataservice.generator.js +0 -78
- package/dist/generators/models/businesslogic.generator.d.ts +0 -9
- /package/dist/generators/indices/{datamockmodule.generator.d.ts → datamock-module.generator.d.ts} +0 -0
package/dist/generator.js
CHANGED
|
@@ -34,7 +34,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
34
34
|
};
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.generate = void 0;
|
|
37
|
-
const faker_1 = require("@faker-js/faker");
|
|
38
37
|
const lock_1 = require("@postxl/lock");
|
|
39
38
|
const generator_helper_1 = require("@prisma/generator-helper");
|
|
40
39
|
const internals_1 = require("@prisma/internals");
|
|
@@ -42,41 +41,50 @@ const prettier = __importStar(require("prettier"));
|
|
|
42
41
|
const zod_1 = require("zod");
|
|
43
42
|
const react_generator_1 = require("./generators/enums/react.generator");
|
|
44
43
|
const types_generator_1 = require("./generators/enums/types.generator");
|
|
45
|
-
const
|
|
44
|
+
const datamock_module_generator_1 = require("./generators/indices/datamock-module.generator");
|
|
46
45
|
const datamodule_generator_1 = require("./generators/indices/datamodule.generator");
|
|
47
46
|
const dataservice_generator_1 = require("./generators/indices/dataservice.generator");
|
|
48
47
|
const emptydatabasemigration_generator_1 = require("./generators/indices/emptydatabasemigration.generator");
|
|
49
48
|
const repositories_generator_1 = require("./generators/indices/repositories.generator");
|
|
50
|
-
const seed_generator_1 = require("./generators/indices/seed.generator");
|
|
51
49
|
const stubs_generator_1 = require("./generators/indices/stubs.generator");
|
|
52
|
-
const testdataservice_generator_1 = require("./generators/indices/testdataservice.generator");
|
|
53
50
|
const types_generator_2 = require("./generators/indices/types.generator");
|
|
54
51
|
const react_generator_2 = require("./generators/models/react.generator");
|
|
55
52
|
const repository_generator_1 = require("./generators/models/repository.generator");
|
|
56
53
|
const route_generator_1 = require("./generators/models/route.generator");
|
|
57
|
-
const
|
|
54
|
+
const seed_generator_1 = require("./generators/models/seed.generator");
|
|
58
55
|
const stub_generator_1 = require("./generators/models/stub.generator");
|
|
59
56
|
const types_generator_3 = require("./generators/models/types.generator");
|
|
60
57
|
const meta_1 = require("./lib/meta");
|
|
61
58
|
const types_1 = require("./lib/schema/types");
|
|
62
|
-
const
|
|
63
|
-
const
|
|
59
|
+
const vfs_1 = require("./lib/vfs");
|
|
60
|
+
const businesslogic_actiontypes_generator_1 = require("./generators/indices/businesslogic-actiontypes.generator");
|
|
61
|
+
const businesslogic_update_index_generator_1 = require("./generators/indices/businesslogic-update-index.generator");
|
|
62
|
+
const businesslogic_update_module_generator_1 = require("./generators/indices/businesslogic-update-module.generator");
|
|
63
|
+
const businesslogic_update_service_generator_1 = require("./generators/indices/businesslogic-update-service.generator");
|
|
64
|
+
const businesslogic_view_index_generator_1 = require("./generators/indices/businesslogic-view-index.generator");
|
|
65
|
+
const businesslogic_view_module_generator_1 = require("./generators/indices/businesslogic-view-module.generator");
|
|
66
|
+
const businesslogic_view_service_generator_1 = require("./generators/indices/businesslogic-view-service.generator");
|
|
64
67
|
const datamocker_generator_1 = require("./generators/indices/datamocker.generator");
|
|
65
|
-
const
|
|
66
|
-
const
|
|
67
|
-
const
|
|
68
|
-
const businesslogic_generator_1 = require("./generators/models/businesslogic.generator");
|
|
68
|
+
const dispatcher_service_generator_1 = require("./generators/indices/dispatcher-service.generator");
|
|
69
|
+
const seed_migration_generator_1 = require("./generators/indices/seed-migration.generator");
|
|
70
|
+
const seed_service_generator_1 = require("./generators/indices/seed-service.generator");
|
|
69
71
|
const seed_template_decoder_generator_1 = require("./generators/indices/seed-template-decoder.generator");
|
|
70
72
|
const seed_template_generator_1 = require("./generators/indices/seed-template.generator");
|
|
71
|
-
const
|
|
73
|
+
const seeddata_type_generator_1 = require("./generators/indices/seeddata-type.generator");
|
|
74
|
+
const businesslogic_update_generator_1 = require("./generators/models/businesslogic-update.generator");
|
|
75
|
+
const businesslogic_view_generator_1 = require("./generators/models/businesslogic-view.generator");
|
|
76
|
+
const client_path_1 = require("./prisma/client-path");
|
|
77
|
+
const parse_1 = require("./prisma/parse");
|
|
72
78
|
const CONFIG_SCHEMA = zod_1.z
|
|
73
79
|
.object({
|
|
74
80
|
project: zod_1.z.string(),
|
|
75
81
|
pathToTypes: zod_1.z.string().optional(),
|
|
76
82
|
pathToDataLib: zod_1.z.string().optional(),
|
|
77
83
|
pathToCypress: zod_1.z.string().optional(),
|
|
84
|
+
pathToActions: zod_1.z.string().optional(),
|
|
78
85
|
pathToBusinessLogic: zod_1.z.string().optional(),
|
|
79
86
|
pathToSeedLib: zod_1.z.string().optional(),
|
|
87
|
+
pathToSeedData: zod_1.z.string().optional(),
|
|
80
88
|
trpcRoutesFolder: zod_1.z.string().optional(),
|
|
81
89
|
reactFolderOutput: zod_1.z.string().optional(),
|
|
82
90
|
migrationsFolder: zod_1.z.string().optional(),
|
|
@@ -95,10 +103,12 @@ const CONFIG_SCHEMA = zod_1.z
|
|
|
95
103
|
paths: {
|
|
96
104
|
dataLibPath: (0, types_1.toPath)(s.pathToDataLib || 'repos'),
|
|
97
105
|
cypressPath: (0, types_1.toPath)(s.pathToCypress || './e2e/cypress/'),
|
|
98
|
-
|
|
106
|
+
actionsPath: (0, types_1.toPath)(s.pathToActions || 'actions'),
|
|
107
|
+
businessLogicPath: (0, types_1.toPath)(s.pathToBusinessLogic || 'business-logic'),
|
|
99
108
|
reactFolderPath: (0, types_1.toPath)(s.reactFolderOutput || 'react'),
|
|
100
109
|
modelTypeDefinitionsPath: (0, types_1.toPath)(s.pathToTypes || 'types'),
|
|
101
|
-
|
|
110
|
+
seedLibPath: (0, types_1.toPath)(s.pathToSeedLib || 'seed'),
|
|
111
|
+
seedDataPath: (0, types_1.toPath)(s.pathToSeedData || 'seed-data'),
|
|
102
112
|
trpcRoutesFolderPath: (0, types_1.toPath)(s.trpcRoutesFolder || 'trpc'),
|
|
103
113
|
migrationsFolderPath: (0, types_1.toPath)(s.migrationsFolder || 'migrations'),
|
|
104
114
|
},
|
|
@@ -107,11 +117,13 @@ const CONFIG_SCHEMA = zod_1.z
|
|
|
107
117
|
disableGenerators: {
|
|
108
118
|
types: s.pathToTypes === undefined,
|
|
109
119
|
data: s.pathToDataLib === undefined,
|
|
120
|
+
actions: s.pathToActions === undefined,
|
|
110
121
|
businessLogic: s.pathToBusinessLogic === undefined,
|
|
111
122
|
seed: s.pathToSeedLib === undefined,
|
|
112
123
|
trpc: s.trpcRoutesFolder === undefined,
|
|
113
124
|
react: s.reactFolderOutput === undefined,
|
|
114
125
|
},
|
|
126
|
+
userType: (0, types_1.toTypeName)(`User`),
|
|
115
127
|
};
|
|
116
128
|
});
|
|
117
129
|
(0, generator_helper_1.generatorHandler)({
|
|
@@ -147,9 +159,8 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
147
159
|
if (root == undefined) {
|
|
148
160
|
throw new Error(`Could not find lock file. Make sure you are running the generator in a project folder.`);
|
|
149
161
|
}
|
|
150
|
-
|
|
151
|
-
const
|
|
152
|
-
const generated = new lock_1.VirtualFS();
|
|
162
|
+
const vfs = yield vfs_1.ExtendedVirtualFS.fromLockFile(root);
|
|
163
|
+
const generated = new vfs_1.ExtendedVirtualFS();
|
|
153
164
|
// Generate Models
|
|
154
165
|
for (const model of models) {
|
|
155
166
|
const meta = (0, meta_1.getModelMetadata)({ model });
|
|
@@ -159,7 +170,7 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
159
170
|
}
|
|
160
171
|
// Seed
|
|
161
172
|
if (!config.disableGenerators.seed) {
|
|
162
|
-
generated.write(`/${meta.seed.filePath}.ts`, (0,
|
|
173
|
+
generated.write(`/${meta.seed.filePath}.ts`, (0, seed_generator_1.generateSeedModel)({ model, itemCount: 5, meta }));
|
|
163
174
|
}
|
|
164
175
|
// Generate Repositories
|
|
165
176
|
if (!config.disableGenerators.data) {
|
|
@@ -170,7 +181,8 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
170
181
|
}
|
|
171
182
|
// Business Logic
|
|
172
183
|
if (!config.disableGenerators.businessLogic) {
|
|
173
|
-
generated.write(`/${meta.businessLogic.serviceFilePath}.ts`, (0,
|
|
184
|
+
generated.write(`/${meta.businessLogic.view.serviceFilePath}.ts`, (0, businesslogic_view_generator_1.generateModelBusinessLogicView)({ model, meta }));
|
|
185
|
+
generated.write(`/${meta.businessLogic.update.serviceFilePath}.ts`, (0, businesslogic_update_generator_1.generateModelBusinessLogicUpdate)({ model, meta }));
|
|
174
186
|
}
|
|
175
187
|
// Routes
|
|
176
188
|
if (!config.disableGenerators.trpc) {
|
|
@@ -178,7 +190,7 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
178
190
|
}
|
|
179
191
|
// React
|
|
180
192
|
if (!config.disableGenerators.react) {
|
|
181
|
-
generated.copy((0, react_generator_2.generateReactComponentsForModel)({ model, meta }), meta.react.folderPath);
|
|
193
|
+
yield generated.copy((0, react_generator_2.generateReactComponentsForModel)({ model, meta }), meta.react.folderPath);
|
|
182
194
|
}
|
|
183
195
|
logger.log(`- ${model.name} processed`);
|
|
184
196
|
}
|
|
@@ -189,18 +201,17 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
189
201
|
generated.write(`/${meta.types.filePath}.ts`, (0, types_generator_1.generateEnumType)({ enumerator, prismaClientPath, meta }));
|
|
190
202
|
}
|
|
191
203
|
if (!config.disableGenerators.react) {
|
|
192
|
-
generated.copy((0, react_generator_1.generateEnumReactComponents)({ enumerator, meta }), meta.react.folderPath);
|
|
204
|
+
yield generated.copy((0, react_generator_1.generateEnumReactComponents)({ enumerator, meta }), meta.react.folderPath);
|
|
193
205
|
}
|
|
194
206
|
}
|
|
195
207
|
// Generate Index Files and Services
|
|
196
208
|
const meta = (0, meta_1.getSchemaMetadata)({ config });
|
|
197
209
|
if (!config.disableGenerators.data) {
|
|
198
|
-
generated.write(`/${meta.data.dataMockModuleFilePath}.ts`, (0,
|
|
210
|
+
generated.write(`/${meta.data.dataMockModuleFilePath}.ts`, (0, datamock_module_generator_1.generateDataMockModule)({ models, meta }));
|
|
199
211
|
generated.write(`/${meta.data.dataModuleFilePath}.ts`, (0, datamodule_generator_1.generateDataModule)({ models, meta }));
|
|
200
212
|
generated.write(`/${meta.data.dataServiceFilePath}.ts`, (0, dataservice_generator_1.generateDataService)({ models, meta }));
|
|
201
213
|
generated.write(`/${meta.data.dataMockerFilePath}.ts`, (0, datamocker_generator_1.generateDataMocker)({ models, meta }));
|
|
202
214
|
generated.write(`/${meta.data.dataMockerStubIndexFilePath}.ts`, (0, stubs_generator_1.generateDataMockerStubsIndex)({ models, meta }));
|
|
203
|
-
generated.write(`/${meta.data.testDataServiceFilePath}.ts`, (0, testdataservice_generator_1.generateTestDataService)({ models, meta }));
|
|
204
215
|
generated.write(`/${meta.data.repositoriesConstFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesArray)({ models, meta }));
|
|
205
216
|
generated.write(`/${meta.data.repositoriesIndexFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesIndex)({ models, meta }));
|
|
206
217
|
generated.write(`/${meta.data.stubIndexFilePath}.ts`, (0, stubs_generator_1.generateStubsIndex)({ models, meta }));
|
|
@@ -211,16 +222,24 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
211
222
|
generated.write((0, emptydatabasemigration_generator_1.deriveEmptyDatabaseMigrationFilePath)(meta), (0, emptydatabasemigration_generator_1.generateEmptyDatabaseStoredProcedure)({ models, meta }));
|
|
212
223
|
}
|
|
213
224
|
}
|
|
225
|
+
if (!config.disableGenerators.actions) {
|
|
226
|
+
generated.write(`/${meta.actions.dispatcherServiceFilePath}.ts`, (0, dispatcher_service_generator_1.generateActionsDispatcherService)({ models, meta }));
|
|
227
|
+
}
|
|
214
228
|
if (!config.disableGenerators.businessLogic) {
|
|
215
|
-
generated.write(`/${meta.businessLogic.indexFilePath}.ts`, (0,
|
|
216
|
-
generated.write(`/${meta.businessLogic.moduleFilePath}.ts`, (0,
|
|
217
|
-
generated.write(`/${meta.businessLogic.serviceFilePath}.ts`, (0,
|
|
229
|
+
generated.write(`/${meta.businessLogic.view.indexFilePath}.ts`, (0, businesslogic_view_index_generator_1.generateBusinessLogicViewIndex)({ models, meta }));
|
|
230
|
+
generated.write(`/${meta.businessLogic.view.moduleFilePath}.ts`, (0, businesslogic_view_module_generator_1.generateBusinessLogicViewModule)({ models, meta }));
|
|
231
|
+
generated.write(`/${meta.businessLogic.view.serviceFilePath}.ts`, (0, businesslogic_view_service_generator_1.generateBusinessLogicViewService)({ models, meta }));
|
|
232
|
+
generated.write(`/${meta.businessLogic.update.indexFilePath}.ts`, (0, businesslogic_update_index_generator_1.generateBusinessLogicUpdateIndex)({ models, meta }));
|
|
233
|
+
generated.write(`/${meta.businessLogic.update.moduleFilePath}.ts`, (0, businesslogic_update_module_generator_1.generateBusinessLogicUpdateModule)({ models, meta }));
|
|
234
|
+
generated.write(`/${meta.businessLogic.update.serviceFilePath}.ts`, (0, businesslogic_update_service_generator_1.generateBusinessLogicUpdateService)({ models, meta }));
|
|
235
|
+
generated.write(`/${meta.businessLogic.update.actionTypesFilePath}.ts`, (0, businesslogic_actiontypes_generator_1.generateBusinessLogicActionTypes)({ models, meta }));
|
|
218
236
|
}
|
|
219
237
|
if (!config.disableGenerators.seed) {
|
|
220
|
-
generated.write(`/${meta.seed.
|
|
238
|
+
generated.write(`/${meta.seed.seedDataTypeFilePath}.ts`, (0, seeddata_type_generator_1.generateSeedDataType)({ models, meta }));
|
|
221
239
|
generated.write(`/${meta.seed.serviceFilePath}.ts`, (0, seed_service_generator_1.generateSeedService)({ models, meta }));
|
|
222
|
-
generated.write(`/${meta.
|
|
223
|
-
generated.write(`/${meta.
|
|
240
|
+
generated.write(`/${meta.seedData.initialMigrationFilePath}.ts`, (0, seed_migration_generator_1.generateSeedMigration)({ models, meta }));
|
|
241
|
+
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 }));
|
|
224
243
|
}
|
|
225
244
|
if (!config.disableGenerators.trpc) {
|
|
226
245
|
generated.write(`/${meta.trpc.routesFilePath}.ts`, (0, route_generator_1.generateRoutesIndex)({ models, meta }));
|
|
@@ -231,11 +250,51 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
231
250
|
// -------------------------------------------------------------------------
|
|
232
251
|
// Add disclaimer and format.
|
|
233
252
|
const prettierConfig = yield prettier.resolveConfig(process.cwd());
|
|
234
|
-
generated.transformUTF8Files((path, content) => `${DISCLAIMER}\n${content}`);
|
|
235
|
-
generated.formatUTF8Files(prettierConfig);
|
|
253
|
+
yield generated.transformUTF8Files((path, content) => `${DISCLAIMER}\n${content}`);
|
|
254
|
+
yield generated.formatUTF8Files(prettierConfig);
|
|
255
|
+
const lintResult = yield generated.lintUTF8Files({
|
|
256
|
+
fix: true,
|
|
257
|
+
useEslintrc: false,
|
|
258
|
+
allowInlineConfig: true,
|
|
259
|
+
extensions: ['.ts', '.tsx', '.js', '.jsx'],
|
|
260
|
+
overrideConfig: {
|
|
261
|
+
parser: '@typescript-eslint/parser',
|
|
262
|
+
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
|
|
263
|
+
plugins: ['@typescript-eslint'],
|
|
264
|
+
parserOptions: {
|
|
265
|
+
sourceType: 'module',
|
|
266
|
+
ecmaVersion: 'latest',
|
|
267
|
+
},
|
|
268
|
+
env: {
|
|
269
|
+
es2022: true,
|
|
270
|
+
node: true,
|
|
271
|
+
},
|
|
272
|
+
rules: {
|
|
273
|
+
// The "curly" rule ensures that all if, else if, else, for, while, or do blocks are followed by a block in braces, even if it is only a single line.
|
|
274
|
+
// This will flag `if(condition) return x` and expect it to be written as `if (condition) { return x }`
|
|
275
|
+
curly: ['error', 'all'],
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
});
|
|
279
|
+
const unfixableErrorCount = lintResult.totalErrorCount - lintResult.totalFixableErrorCount;
|
|
280
|
+
if (unfixableErrorCount > 0) {
|
|
281
|
+
console.log(`LINT: ${unfixableErrorCount} unfixable errors! Please open an issue with your schema!`);
|
|
282
|
+
}
|
|
283
|
+
const unfixedWarningCount = lintResult.totalWarningCount - lintResult.totalFixableWarningCount;
|
|
284
|
+
if (unfixedWarningCount > 0) {
|
|
285
|
+
console.log(`LINT: ${unfixedWarningCount} unfixed warnings! Please open an issue with your schema!`);
|
|
286
|
+
}
|
|
287
|
+
for (const [, result] of lintResult.results) {
|
|
288
|
+
if (result.errorCount > 0 || result.warningCount > 0) {
|
|
289
|
+
console.log(result.message);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
if (unfixedWarningCount === 0 && unfixableErrorCount === 0) {
|
|
293
|
+
console.log(`LINT: All files linted successfully without warnings and errors!`);
|
|
294
|
+
}
|
|
236
295
|
// -------------------------------------------------------------------------
|
|
237
296
|
// Merge with existing files.
|
|
238
|
-
vfs.copy(generated, './');
|
|
297
|
+
yield vfs.copy(generated, './');
|
|
239
298
|
// Flush to disk.
|
|
240
299
|
// NOTE: We use a special "internal" variable to force regeneration of all files so that
|
|
241
300
|
// the template files are always up to date.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SchemaMetaData } from '../../lib/meta';
|
|
2
|
+
import { Model } from '../../lib/schema/schema';
|
|
3
|
+
/**
|
|
4
|
+
* Generates the action types for the BusinessLogicModule.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateBusinessLogicActionTypes({ models, meta }: {
|
|
7
|
+
models: Model[];
|
|
8
|
+
meta: SchemaMetaData;
|
|
9
|
+
}): string;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateBusinessLogicActionTypes = void 0;
|
|
4
|
+
const imports_1 = require("../../lib/imports");
|
|
5
|
+
const meta_1 = require("../../lib/meta");
|
|
6
|
+
/**
|
|
7
|
+
* Generates the action types for the BusinessLogicModule.
|
|
8
|
+
*/
|
|
9
|
+
function generateBusinessLogicActionTypes({ models, meta }) {
|
|
10
|
+
const imports = imports_1.ImportsGenerator.from(meta.businessLogic.update.actionTypesFilePath);
|
|
11
|
+
const modelNameTypeElements = [];
|
|
12
|
+
const actionsTypeElements = [];
|
|
13
|
+
const actionResultTypeElements = [];
|
|
14
|
+
for (const model of models) {
|
|
15
|
+
const modelMeta = (0, meta_1.getModelMetadata)({ model });
|
|
16
|
+
imports.addImport({
|
|
17
|
+
items: [modelMeta.businessLogic.update.actionName, modelMeta.businessLogic.update.actionResultName],
|
|
18
|
+
from: modelMeta.businessLogic.update.serviceFilePath,
|
|
19
|
+
});
|
|
20
|
+
modelNameTypeElements.push(`'${modelMeta.businessLogic.update.actionModelDiscriminantName}'`);
|
|
21
|
+
actionsTypeElements.push(modelMeta.businessLogic.update.actionName);
|
|
22
|
+
actionResultTypeElements.push(`${modelMeta.businessLogic.update.actionModelDiscriminantName}: ${modelMeta.businessLogic.update.actionResultName}`);
|
|
23
|
+
}
|
|
24
|
+
return `
|
|
25
|
+
${imports.generate()}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Used by any of the default actions (create, update, delete) to identify the model.
|
|
29
|
+
*/
|
|
30
|
+
export type ModelName = ${modelNameTypeElements.join(' | ')}
|
|
31
|
+
|
|
32
|
+
export type Action_BusinessLogic = ${actionsTypeElements.join(' | ')}
|
|
33
|
+
|
|
34
|
+
export type ActionResult_BusinessLogic = {
|
|
35
|
+
${actionResultTypeElements.join('\n')}
|
|
36
|
+
}
|
|
37
|
+
`;
|
|
38
|
+
}
|
|
39
|
+
exports.generateBusinessLogicActionTypes = generateBusinessLogicActionTypes;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SchemaMetaData } from '../../lib/meta';
|
|
2
|
+
import { Model } from '../../lib/schema/schema';
|
|
3
|
+
/**
|
|
4
|
+
* Generates index file for all businessLogic update files.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateBusinessLogicUpdateIndex({ models, meta }: {
|
|
7
|
+
models: Model[];
|
|
8
|
+
meta: SchemaMetaData;
|
|
9
|
+
}): string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateBusinessLogicUpdateIndex = void 0;
|
|
4
|
+
const exports_1 = require("../../lib/exports");
|
|
5
|
+
const meta_1 = require("../../lib/meta");
|
|
6
|
+
/**
|
|
7
|
+
* Generates index file for all businessLogic update files.
|
|
8
|
+
*/
|
|
9
|
+
function generateBusinessLogicUpdateIndex({ models, meta }) {
|
|
10
|
+
const exports = exports_1.ExportsGenerator.from(meta.businessLogic.update.indexFilePath);
|
|
11
|
+
exports.exportEverythingFromPath(meta.businessLogic.update.serviceFilePath);
|
|
12
|
+
exports.exportEverythingFromPath(meta.businessLogic.update.moduleFilePath);
|
|
13
|
+
exports.exportEverythingFromPath(meta.businessLogic.update.actionTypesFilePath);
|
|
14
|
+
for (const model of models) {
|
|
15
|
+
const meta = (0, meta_1.getModelMetadata)({ model });
|
|
16
|
+
exports.exportEverythingFromPath(meta.businessLogic.update.serviceFilePath);
|
|
17
|
+
}
|
|
18
|
+
return exports.generate();
|
|
19
|
+
}
|
|
20
|
+
exports.generateBusinessLogicUpdateIndex = generateBusinessLogicUpdateIndex;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SchemaMetaData } from '../../lib/meta';
|
|
2
|
+
import { Model } from '../../lib/schema/schema';
|
|
3
|
+
/**
|
|
4
|
+
* Generates a BusinessLogic update module class.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateBusinessLogicUpdateModule({ models, meta }: {
|
|
7
|
+
models: Model[];
|
|
8
|
+
meta: SchemaMetaData;
|
|
9
|
+
}): string;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateBusinessLogicUpdateModule = void 0;
|
|
4
|
+
const imports_1 = require("../../lib/imports");
|
|
5
|
+
const meta_1 = require("../../lib/meta");
|
|
6
|
+
/**
|
|
7
|
+
* Generates a BusinessLogic update module class.
|
|
8
|
+
*/
|
|
9
|
+
function generateBusinessLogicUpdateModule({ models, meta }) {
|
|
10
|
+
const mm = models
|
|
11
|
+
.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }))
|
|
12
|
+
.sort((a, b) => a.meta.businessLogic.update.serviceClassName.localeCompare(b.meta.businessLogic.update.serviceClassName));
|
|
13
|
+
const imports = imports_1.ImportsGenerator.from(meta.businessLogic.update.moduleFilePath).addImports({
|
|
14
|
+
[meta.data.importPath]: meta.data.moduleName,
|
|
15
|
+
[meta.businessLogic.update.serviceFilePath]: meta.businessLogic.update.serviceClassName,
|
|
16
|
+
[meta.businessLogic.view.importPath]: meta.businessLogic.view.moduleName,
|
|
17
|
+
});
|
|
18
|
+
const providers = [meta.businessLogic.update.serviceClassName];
|
|
19
|
+
for (const { meta } of mm) {
|
|
20
|
+
imports.addImport({
|
|
21
|
+
items: [meta.businessLogic.update.serviceClassName],
|
|
22
|
+
from: meta.businessLogic.update.serviceFilePath,
|
|
23
|
+
});
|
|
24
|
+
providers.push(meta.businessLogic.update.serviceClassName);
|
|
25
|
+
}
|
|
26
|
+
const moduleName = meta.businessLogic.update.moduleName;
|
|
27
|
+
return `
|
|
28
|
+
import { DynamicModule } from '@${meta.config.project}/common'
|
|
29
|
+
|
|
30
|
+
${imports.generate()}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
export class ${moduleName} {
|
|
34
|
+
/**
|
|
35
|
+
* Internal cache for the module instance.
|
|
36
|
+
*/
|
|
37
|
+
private static cachedModule: DynamicModule | undefined = undefined
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The getInstance method should be called by any module that needs the module.
|
|
41
|
+
*/
|
|
42
|
+
static getInstance(): DynamicModule {
|
|
43
|
+
if (!${moduleName}.cachedModule) {
|
|
44
|
+
throw new Error('${moduleName} must be called via .provide first!')
|
|
45
|
+
}
|
|
46
|
+
return ${moduleName}.cachedModule
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The forRoot method should only be called once by the root module.
|
|
51
|
+
*/
|
|
52
|
+
static forRoot(): DynamicModule {
|
|
53
|
+
if (${moduleName}.cachedModule) {
|
|
54
|
+
throw new Error('${moduleName} is already instantiated, please call .forRoot only once from root...')
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const providers = [${providers.join(', ')}]
|
|
58
|
+
${moduleName}.cachedModule = {
|
|
59
|
+
module: ${moduleName},
|
|
60
|
+
providers,
|
|
61
|
+
imports: [${meta.data.moduleName}.getInstance(), ${meta.businessLogic.view.moduleName}.getInstance()],
|
|
62
|
+
exports: providers,
|
|
63
|
+
}
|
|
64
|
+
return ${moduleName}.cachedModule
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
}
|
|
69
|
+
exports.generateBusinessLogicUpdateModule = generateBusinessLogicUpdateModule;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SchemaMetaData } from '../../lib/meta';
|
|
2
|
+
import { Model } from '../../lib/schema/schema';
|
|
3
|
+
/**
|
|
4
|
+
* Generates the business logic service class.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateBusinessLogicUpdateService({ models, meta, }: {
|
|
7
|
+
models: Model[];
|
|
8
|
+
meta: SchemaMetaData;
|
|
9
|
+
}): string;
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.generateBusinessLogicUpdateService = void 0;
|
|
4
4
|
const imports_1 = require("../../lib/imports");
|
|
5
5
|
const meta_1 = require("../../lib/meta");
|
|
6
6
|
/**
|
|
7
7
|
* Generates the business logic service class.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
function generateBusinessLogicService({ models, meta }) {
|
|
9
|
+
function generateBusinessLogicUpdateService({ models, meta, }) {
|
|
11
10
|
const mm = models
|
|
12
11
|
.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }))
|
|
13
|
-
.sort((a, b) => a.meta.businessLogic.serviceClassName.localeCompare(b.meta.businessLogic.serviceClassName));
|
|
14
|
-
const imports = imports_1.ImportsGenerator.from(meta.businessLogic.serviceFilePath);
|
|
12
|
+
.sort((a, b) => a.meta.businessLogic.update.serviceClassName.localeCompare(b.meta.businessLogic.update.serviceClassName));
|
|
13
|
+
const imports = imports_1.ImportsGenerator.from(meta.businessLogic.update.serviceFilePath);
|
|
15
14
|
for (const { meta } of mm) {
|
|
16
15
|
imports.addImport({
|
|
17
|
-
items: [meta.businessLogic.serviceClassName],
|
|
18
|
-
from: meta.businessLogic.serviceFilePath,
|
|
16
|
+
items: [meta.businessLogic.update.serviceClassName],
|
|
17
|
+
from: meta.businessLogic.update.serviceFilePath,
|
|
19
18
|
});
|
|
20
19
|
}
|
|
21
20
|
const constructor = mm
|
|
22
|
-
.map(({ meta }) => `@Inject(forwardRef(() => ${meta.businessLogic.serviceClassName})) public ${meta.businessLogic.serviceVariableName} :${meta.businessLogic.serviceClassName}`)
|
|
21
|
+
.map(({ meta }) => `@Inject(forwardRef(() => ${meta.businessLogic.update.serviceClassName})) public readonly ${meta.businessLogic.update.serviceVariableName} :${meta.businessLogic.update.serviceClassName}`)
|
|
23
22
|
.join(',\n');
|
|
24
23
|
return `
|
|
25
24
|
import { Inject, Injectable, forwardRef } from '@nestjs/common'
|
|
@@ -27,9 +26,9 @@ function generateBusinessLogicService({ models, meta }) {
|
|
|
27
26
|
${imports.generate()}
|
|
28
27
|
|
|
29
28
|
@Injectable()
|
|
30
|
-
export class ${meta.businessLogic.serviceClassName} {
|
|
29
|
+
export class ${meta.businessLogic.update.serviceClassName} {
|
|
31
30
|
constructor(${constructor}) {}
|
|
32
31
|
}
|
|
33
32
|
`;
|
|
34
33
|
}
|
|
35
|
-
exports.
|
|
34
|
+
exports.generateBusinessLogicUpdateService = generateBusinessLogicUpdateService;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SchemaMetaData } from '../../lib/meta';
|
|
2
|
+
import { Model } from '../../lib/schema/schema';
|
|
3
|
+
/**
|
|
4
|
+
* Generates index file for all businessLogic view files.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateBusinessLogicViewIndex({ models, meta }: {
|
|
7
|
+
models: Model[];
|
|
8
|
+
meta: SchemaMetaData;
|
|
9
|
+
}): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateBusinessLogicViewIndex = void 0;
|
|
4
|
+
const exports_1 = require("../../lib/exports");
|
|
5
|
+
const meta_1 = require("../../lib/meta");
|
|
6
|
+
/**
|
|
7
|
+
* Generates index file for all businessLogic view files.
|
|
8
|
+
*/
|
|
9
|
+
function generateBusinessLogicViewIndex({ models, meta }) {
|
|
10
|
+
const exports = exports_1.ExportsGenerator.from(meta.businessLogic.view.indexFilePath);
|
|
11
|
+
exports.exportEverythingFromPath(meta.businessLogic.view.serviceFilePath);
|
|
12
|
+
exports.exportEverythingFromPath(meta.businessLogic.view.moduleFilePath);
|
|
13
|
+
for (const model of models) {
|
|
14
|
+
const meta = (0, meta_1.getModelMetadata)({ model });
|
|
15
|
+
exports.exportEverythingFromPath(meta.businessLogic.view.serviceFilePath);
|
|
16
|
+
}
|
|
17
|
+
return exports.generate();
|
|
18
|
+
}
|
|
19
|
+
exports.generateBusinessLogicViewIndex = generateBusinessLogicViewIndex;
|
|
@@ -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 a BusinessLogic view module class.
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function generateBusinessLogicViewModule({ models, meta }: {
|
|
7
7
|
models: Model[];
|
|
8
8
|
meta: SchemaMetaData;
|
|
9
9
|
}): string;
|
|
@@ -1,34 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.generateBusinessLogicViewModule = void 0;
|
|
4
4
|
const imports_1 = require("../../lib/imports");
|
|
5
5
|
const meta_1 = require("../../lib/meta");
|
|
6
6
|
/**
|
|
7
|
-
* Generates a
|
|
7
|
+
* Generates a BusinessLogic view module class.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
function generateBusinessLogicModule({ models, meta }) {
|
|
9
|
+
function generateBusinessLogicViewModule({ models, meta }) {
|
|
11
10
|
const mm = models
|
|
12
11
|
.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }))
|
|
13
|
-
.sort((a, b) => a.meta.businessLogic.serviceClassName.localeCompare(b.meta.businessLogic.serviceClassName));
|
|
14
|
-
const imports = imports_1.ImportsGenerator.from(meta.businessLogic.moduleFilePath)
|
|
15
|
-
.
|
|
16
|
-
|
|
17
|
-
from: meta.data.importPath,
|
|
18
|
-
})
|
|
19
|
-
.addImport({
|
|
20
|
-
items: [meta.businessLogic.serviceClassName],
|
|
21
|
-
from: meta.businessLogic.serviceFilePath,
|
|
12
|
+
.sort((a, b) => a.meta.businessLogic.view.serviceClassName.localeCompare(b.meta.businessLogic.view.serviceClassName));
|
|
13
|
+
const imports = imports_1.ImportsGenerator.from(meta.businessLogic.view.moduleFilePath).addImports({
|
|
14
|
+
[meta.data.importPath]: meta.data.moduleName,
|
|
15
|
+
[meta.businessLogic.view.serviceFilePath]: meta.businessLogic.view.serviceClassName,
|
|
22
16
|
});
|
|
23
|
-
const providers = [meta.businessLogic.serviceClassName];
|
|
17
|
+
const providers = [meta.businessLogic.view.serviceClassName];
|
|
24
18
|
for (const { meta } of mm) {
|
|
25
19
|
imports.addImport({
|
|
26
|
-
items: [meta.businessLogic.serviceClassName],
|
|
27
|
-
from: meta.businessLogic.serviceFilePath,
|
|
20
|
+
items: [meta.businessLogic.view.serviceClassName],
|
|
21
|
+
from: meta.businessLogic.view.serviceFilePath,
|
|
28
22
|
});
|
|
29
|
-
providers.push(meta.businessLogic.serviceClassName);
|
|
23
|
+
providers.push(meta.businessLogic.view.serviceClassName);
|
|
30
24
|
}
|
|
31
|
-
const moduleName = meta.businessLogic.moduleName;
|
|
25
|
+
const moduleName = meta.businessLogic.view.moduleName;
|
|
32
26
|
return `
|
|
33
27
|
import { DynamicModule } from '@${meta.config.project}/common'
|
|
34
28
|
|
|
@@ -38,20 +32,22 @@ ${imports.generate()}
|
|
|
38
32
|
export class ${moduleName} {
|
|
39
33
|
/**
|
|
40
34
|
* Internal cache for the module instance.
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
*/
|
|
36
|
+
private static cachedModule: DynamicModule | undefined = undefined
|
|
43
37
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
38
|
+
/**
|
|
39
|
+
* The getInstance method should be called by any module that needs the module.
|
|
40
|
+
*/
|
|
47
41
|
static getInstance(): DynamicModule {
|
|
48
|
-
if (!${moduleName}.cachedModule)
|
|
42
|
+
if (!${moduleName}.cachedModule) {
|
|
43
|
+
throw new Error('${moduleName} must be called via .provide first!')
|
|
44
|
+
}
|
|
49
45
|
return ${moduleName}.cachedModule
|
|
50
46
|
}
|
|
51
47
|
|
|
52
48
|
/**
|
|
53
49
|
* The forRoot method should only be called once by the root module.
|
|
54
|
-
|
|
50
|
+
*/
|
|
55
51
|
static forRoot(): DynamicModule {
|
|
56
52
|
if (${moduleName}.cachedModule) {
|
|
57
53
|
throw new Error('${moduleName} is already instantiated, please call .forRoot only once from root...')
|
|
@@ -69,4 +65,4 @@ export class ${moduleName} {
|
|
|
69
65
|
}
|
|
70
66
|
`;
|
|
71
67
|
}
|
|
72
|
-
exports.
|
|
68
|
+
exports.generateBusinessLogicViewModule = generateBusinessLogicViewModule;
|
|
@@ -3,7 +3,7 @@ import { Model } from '../../lib/schema/schema';
|
|
|
3
3
|
/**
|
|
4
4
|
* Generates the business logic service class.
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function generateBusinessLogicViewService({ models, meta }: {
|
|
7
7
|
models: Model[];
|
|
8
8
|
meta: SchemaMetaData;
|
|
9
9
|
}): string;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateBusinessLogicViewService = void 0;
|
|
4
|
+
const imports_1 = require("../../lib/imports");
|
|
5
|
+
const meta_1 = require("../../lib/meta");
|
|
6
|
+
/**
|
|
7
|
+
* Generates the business logic service class.
|
|
8
|
+
*/
|
|
9
|
+
function generateBusinessLogicViewService({ models, meta }) {
|
|
10
|
+
const mm = models
|
|
11
|
+
.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }))
|
|
12
|
+
.sort((a, b) => a.meta.businessLogic.view.serviceClassName.localeCompare(b.meta.businessLogic.view.serviceClassName));
|
|
13
|
+
const imports = imports_1.ImportsGenerator.from(meta.businessLogic.view.serviceFilePath);
|
|
14
|
+
for (const { meta } of mm) {
|
|
15
|
+
imports.addImport({
|
|
16
|
+
items: [meta.businessLogic.view.serviceClassName],
|
|
17
|
+
from: meta.businessLogic.view.serviceFilePath,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const constructor = mm
|
|
21
|
+
.map(({ meta }) => `@Inject(forwardRef(() => ${meta.businessLogic.view.serviceClassName})) public readonly ${meta.businessLogic.view.serviceVariableName} :${meta.businessLogic.view.serviceClassName}`)
|
|
22
|
+
.join(',\n');
|
|
23
|
+
return `
|
|
24
|
+
import { Inject, Injectable, forwardRef } from '@nestjs/common'
|
|
25
|
+
|
|
26
|
+
${imports.generate()}
|
|
27
|
+
|
|
28
|
+
@Injectable()
|
|
29
|
+
export class ${meta.businessLogic.view.serviceClassName} {
|
|
30
|
+
constructor(${constructor}) {}
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
}
|
|
34
|
+
exports.generateBusinessLogicViewService = generateBusinessLogicViewService;
|