@postxl/generator 0.34.0 → 0.35.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.
Files changed (58) hide show
  1. package/dist/generator.js +40 -22
  2. package/dist/generators/indices/businesslogic-actiontypes.generator.d.ts +9 -0
  3. package/dist/generators/indices/businesslogic-actiontypes.generator.js +39 -0
  4. package/dist/generators/indices/businesslogic-update-index.generator.d.ts +9 -0
  5. package/dist/generators/indices/businesslogic-update-index.generator.js +20 -0
  6. package/dist/generators/indices/businesslogic-update-module.generator.d.ts +9 -0
  7. package/dist/generators/indices/businesslogic-update-module.generator.js +69 -0
  8. package/dist/generators/indices/businesslogic-update-service.generator.d.ts +9 -0
  9. package/dist/generators/indices/businesslogic-update-service.generator.js +34 -0
  10. package/dist/generators/indices/businesslogic-view-index.generator.d.ts +9 -0
  11. package/dist/generators/indices/businesslogic-view-index.generator.js +19 -0
  12. package/dist/generators/indices/{businesslogicindex.generator.d.ts → businesslogic-view-module.generator.d.ts} +2 -2
  13. package/dist/generators/indices/{businesslogicmodule.generator.js → businesslogic-view-module.generator.js} +22 -26
  14. package/dist/generators/indices/{businesslogicservice.generator.d.ts → businesslogic-view-service.generator.d.ts} +1 -1
  15. package/dist/generators/indices/{businesslogicservice.generator.js → businesslogic-view-service.generator.js} +9 -10
  16. package/dist/generators/indices/{datamockmodule.generator.js → datamock-module.generator.js} +8 -16
  17. package/dist/generators/indices/datamocker.generator.js +3 -7
  18. package/dist/generators/indices/datamodule.generator.js +7 -13
  19. package/dist/generators/indices/{businesslogicmodule.generator.d.ts → dispatcher-service.generator.d.ts} +2 -2
  20. package/dist/generators/indices/dispatcher-service.generator.js +81 -0
  21. package/dist/generators/indices/seed-migration.generator.d.ts +9 -0
  22. package/dist/generators/indices/seed-migration.generator.js +35 -0
  23. package/dist/generators/indices/seed-service.generator.d.ts +1 -1
  24. package/dist/generators/indices/seed-service.generator.js +327 -123
  25. package/dist/generators/indices/seed-template-decoder.generator.js +22 -6
  26. package/dist/generators/indices/{seed.generator.d.ts → seeddata-type.generator.d.ts} +2 -2
  27. package/dist/generators/indices/seeddata-type.generator.js +42 -0
  28. package/dist/generators/indices/types.generator.d.ts +1 -1
  29. package/dist/generators/indices/types.generator.js +8 -6
  30. package/dist/generators/models/businesslogic-update.generator.d.ts +10 -0
  31. package/dist/generators/models/businesslogic-update.generator.js +243 -0
  32. package/dist/generators/models/businesslogic-view.generator.d.ts +10 -0
  33. package/dist/generators/models/{businesslogic.generator.js → businesslogic-view.generator.js} +23 -72
  34. package/dist/generators/models/react.generator/modals.generator.js +2 -2
  35. package/dist/generators/models/repository.generator.d.ts +9 -0
  36. package/dist/generators/models/repository.generator.js +420 -131
  37. package/dist/generators/models/route.generator.js +45 -55
  38. package/dist/generators/models/seed.generator.js +6 -2
  39. package/dist/generators/models/types.generator.js +60 -13
  40. package/dist/lib/attributes.d.ts +5 -0
  41. package/dist/lib/imports.d.ts +23 -2
  42. package/dist/lib/imports.js +19 -1
  43. package/dist/lib/meta.d.ts +287 -34
  44. package/dist/lib/meta.js +87 -16
  45. package/dist/lib/schema/schema.d.ts +24 -6
  46. package/dist/lib/schema/types.d.ts +4 -0
  47. package/dist/lib/utils/jsdoc.d.ts +1 -1
  48. package/dist/lib/utils/jsdoc.js +8 -6
  49. package/dist/lib/utils/string.js +2 -1
  50. package/dist/prisma/attributes.js +7 -3
  51. package/dist/prisma/parse.js +25 -5
  52. package/package.json +1 -1
  53. package/dist/generators/indices/businesslogicindex.generator.js +0 -19
  54. package/dist/generators/indices/seed.generator.js +0 -17
  55. package/dist/generators/indices/testdataservice.generator.d.ts +0 -9
  56. package/dist/generators/indices/testdataservice.generator.js +0 -78
  57. package/dist/generators/models/businesslogic.generator.d.ts +0 -9
  58. /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,19 +41,17 @@ 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 datamockmodule_generator_1 = require("./generators/indices/datamockmodule.generator");
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 seed_generator_2 = require("./generators/models/seed.generator");
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");
@@ -62,21 +59,31 @@ const types_1 = require("./lib/schema/types");
62
59
  const client_path_1 = require("./prisma/client-path");
63
60
  const parse_1 = require("./prisma/parse");
64
61
  const datamocker_generator_1 = require("./generators/indices/datamocker.generator");
65
- const businesslogicservice_generator_1 = require("./generators/indices/businesslogicservice.generator");
66
- const businesslogicindex_generator_1 = require("./generators/indices/businesslogicindex.generator");
67
- const businesslogicmodule_generator_1 = require("./generators/indices/businesslogicmodule.generator");
68
- const businesslogic_generator_1 = require("./generators/models/businesslogic.generator");
62
+ const businesslogic_update_service_generator_1 = require("./generators/indices/businesslogic-update-service.generator");
63
+ const businesslogic_update_index_generator_1 = require("./generators/indices/businesslogic-update-index.generator");
64
+ const businesslogic_update_module_generator_1 = require("./generators/indices/businesslogic-update-module.generator");
69
65
  const seed_template_decoder_generator_1 = require("./generators/indices/seed-template-decoder.generator");
70
66
  const seed_template_generator_1 = require("./generators/indices/seed-template.generator");
71
67
  const seed_service_generator_1 = require("./generators/indices/seed-service.generator");
68
+ const dispatcher_service_generator_1 = require("./generators/indices/dispatcher-service.generator");
69
+ const businesslogic_actiontypes_generator_1 = require("./generators/indices/businesslogic-actiontypes.generator");
70
+ const seeddata_type_generator_1 = require("./generators/indices/seeddata-type.generator");
71
+ const seed_migration_generator_1 = require("./generators/indices/seed-migration.generator");
72
+ const businesslogic_view_generator_1 = require("./generators/models/businesslogic-view.generator");
73
+ const businesslogic_update_generator_1 = require("./generators/models/businesslogic-update.generator");
74
+ const businesslogic_view_service_generator_1 = require("./generators/indices/businesslogic-view-service.generator");
75
+ const businesslogic_view_module_generator_1 = require("./generators/indices/businesslogic-view-module.generator");
76
+ const businesslogic_view_index_generator_1 = require("./generators/indices/businesslogic-view-index.generator");
72
77
  const CONFIG_SCHEMA = zod_1.z
73
78
  .object({
74
79
  project: zod_1.z.string(),
75
80
  pathToTypes: zod_1.z.string().optional(),
76
81
  pathToDataLib: zod_1.z.string().optional(),
77
82
  pathToCypress: zod_1.z.string().optional(),
83
+ pathToActions: zod_1.z.string().optional(),
78
84
  pathToBusinessLogic: zod_1.z.string().optional(),
79
85
  pathToSeedLib: zod_1.z.string().optional(),
86
+ pathToSeedData: zod_1.z.string().optional(),
80
87
  trpcRoutesFolder: zod_1.z.string().optional(),
81
88
  reactFolderOutput: zod_1.z.string().optional(),
82
89
  migrationsFolder: zod_1.z.string().optional(),
@@ -95,10 +102,12 @@ const CONFIG_SCHEMA = zod_1.z
95
102
  paths: {
96
103
  dataLibPath: (0, types_1.toPath)(s.pathToDataLib || 'repos'),
97
104
  cypressPath: (0, types_1.toPath)(s.pathToCypress || './e2e/cypress/'),
98
- businessLogicPath: (0, types_1.toPath)(s.pathToBusinessLogic || 'repos'),
105
+ actionsPath: (0, types_1.toPath)(s.pathToActions || 'actions'),
106
+ businessLogicPath: (0, types_1.toPath)(s.pathToBusinessLogic || 'business-logic'),
99
107
  reactFolderPath: (0, types_1.toPath)(s.reactFolderOutput || 'react'),
100
108
  modelTypeDefinitionsPath: (0, types_1.toPath)(s.pathToTypes || 'types'),
101
- seedPath: (0, types_1.toPath)(s.pathToSeedLib || 'seed'),
109
+ seedLibPath: (0, types_1.toPath)(s.pathToSeedLib || 'seed'),
110
+ seedDataPath: (0, types_1.toPath)(s.pathToSeedData || 'seed-data'),
102
111
  trpcRoutesFolderPath: (0, types_1.toPath)(s.trpcRoutesFolder || 'trpc'),
103
112
  migrationsFolderPath: (0, types_1.toPath)(s.migrationsFolder || 'migrations'),
104
113
  },
@@ -107,11 +116,13 @@ const CONFIG_SCHEMA = zod_1.z
107
116
  disableGenerators: {
108
117
  types: s.pathToTypes === undefined,
109
118
  data: s.pathToDataLib === undefined,
119
+ actions: s.pathToActions === undefined,
110
120
  businessLogic: s.pathToBusinessLogic === undefined,
111
121
  seed: s.pathToSeedLib === undefined,
112
122
  trpc: s.trpcRoutesFolder === undefined,
113
123
  react: s.reactFolderOutput === undefined,
114
124
  },
125
+ userType: (0, types_1.toTypeName)(`User`),
115
126
  };
116
127
  });
117
128
  (0, generator_helper_1.generatorHandler)({
@@ -147,7 +158,6 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
147
158
  if (root == undefined) {
148
159
  throw new Error(`Could not find lock file. Make sure you are running the generator in a project folder.`);
149
160
  }
150
- faker_1.faker.seed(config.randomSeed);
151
161
  const vfs = yield lock_1.VirtualFS.fromLockFile(root);
152
162
  const generated = new lock_1.VirtualFS();
153
163
  // Generate Models
@@ -159,7 +169,7 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
159
169
  }
160
170
  // Seed
161
171
  if (!config.disableGenerators.seed) {
162
- generated.write(`/${meta.seed.filePath}.ts`, (0, seed_generator_2.generateSeedModel)({ model, itemCount: 5, meta }));
172
+ generated.write(`/${meta.seed.filePath}.ts`, (0, seed_generator_1.generateSeedModel)({ model, itemCount: 5, meta }));
163
173
  }
164
174
  // Generate Repositories
165
175
  if (!config.disableGenerators.data) {
@@ -170,7 +180,8 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
170
180
  }
171
181
  // Business Logic
172
182
  if (!config.disableGenerators.businessLogic) {
173
- generated.write(`/${meta.businessLogic.serviceFilePath}.ts`, (0, businesslogic_generator_1.generateModelBusinessLogic)({ model, meta }));
183
+ generated.write(`/${meta.businessLogic.view.serviceFilePath}.ts`, (0, businesslogic_view_generator_1.generateModelBusinessLogicView)({ model, meta }));
184
+ generated.write(`/${meta.businessLogic.update.serviceFilePath}.ts`, (0, businesslogic_update_generator_1.generateModelBusinessLogicUpdate)({ model, meta }));
174
185
  }
175
186
  // Routes
176
187
  if (!config.disableGenerators.trpc) {
@@ -195,12 +206,11 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
195
206
  // Generate Index Files and Services
196
207
  const meta = (0, meta_1.getSchemaMetadata)({ config });
197
208
  if (!config.disableGenerators.data) {
198
- generated.write(`/${meta.data.dataMockModuleFilePath}.ts`, (0, datamockmodule_generator_1.generateDataMockModule)({ models, meta }));
209
+ generated.write(`/${meta.data.dataMockModuleFilePath}.ts`, (0, datamock_module_generator_1.generateDataMockModule)({ models, meta }));
199
210
  generated.write(`/${meta.data.dataModuleFilePath}.ts`, (0, datamodule_generator_1.generateDataModule)({ models, meta }));
200
211
  generated.write(`/${meta.data.dataServiceFilePath}.ts`, (0, dataservice_generator_1.generateDataService)({ models, meta }));
201
212
  generated.write(`/${meta.data.dataMockerFilePath}.ts`, (0, datamocker_generator_1.generateDataMocker)({ models, meta }));
202
213
  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
214
  generated.write(`/${meta.data.repositoriesConstFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesArray)({ models, meta }));
205
215
  generated.write(`/${meta.data.repositoriesIndexFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesIndex)({ models, meta }));
206
216
  generated.write(`/${meta.data.stubIndexFilePath}.ts`, (0, stubs_generator_1.generateStubsIndex)({ models, meta }));
@@ -211,16 +221,24 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
211
221
  generated.write((0, emptydatabasemigration_generator_1.deriveEmptyDatabaseMigrationFilePath)(meta), (0, emptydatabasemigration_generator_1.generateEmptyDatabaseStoredProcedure)({ models, meta }));
212
222
  }
213
223
  }
224
+ if (!config.disableGenerators.actions) {
225
+ generated.write(`/${meta.actions.dispatcherServiceFilePath}.ts`, (0, dispatcher_service_generator_1.generateActionsDispatcherService)({ models, meta }));
226
+ }
214
227
  if (!config.disableGenerators.businessLogic) {
215
- generated.write(`/${meta.businessLogic.indexFilePath}.ts`, (0, businesslogicindex_generator_1.generateBusinessLogicIndex)({ models, meta }));
216
- generated.write(`/${meta.businessLogic.moduleFilePath}.ts`, (0, businesslogicmodule_generator_1.generateBusinessLogicModule)({ models, meta }));
217
- generated.write(`/${meta.businessLogic.serviceFilePath}.ts`, (0, businesslogicservice_generator_1.generateBusinessLogicService)({ models, meta }));
228
+ generated.write(`/${meta.businessLogic.view.indexFilePath}.ts`, (0, businesslogic_view_index_generator_1.generateBusinessLogicViewIndex)({ models, meta }));
229
+ generated.write(`/${meta.businessLogic.view.moduleFilePath}.ts`, (0, businesslogic_view_module_generator_1.generateBusinessLogicViewModule)({ models, meta }));
230
+ generated.write(`/${meta.businessLogic.view.serviceFilePath}.ts`, (0, businesslogic_view_service_generator_1.generateBusinessLogicViewService)({ models, meta }));
231
+ generated.write(`/${meta.businessLogic.update.indexFilePath}.ts`, (0, businesslogic_update_index_generator_1.generateBusinessLogicUpdateIndex)({ models, meta }));
232
+ generated.write(`/${meta.businessLogic.update.moduleFilePath}.ts`, (0, businesslogic_update_module_generator_1.generateBusinessLogicUpdateModule)({ models, meta }));
233
+ generated.write(`/${meta.businessLogic.update.serviceFilePath}.ts`, (0, businesslogic_update_service_generator_1.generateBusinessLogicUpdateService)({ models, meta }));
234
+ generated.write(`/${meta.businessLogic.update.actionTypesFilePath}.ts`, (0, businesslogic_actiontypes_generator_1.generateBusinessLogicActionTypes)({ models, meta }));
218
235
  }
219
236
  if (!config.disableGenerators.seed) {
220
- generated.write(`/${meta.seed.indexFilePath}.ts`, (0, seed_generator_1.generateSeedIndex)({ models, meta }));
237
+ generated.write(`/${meta.seed.seedDataTypeFilePath}.ts`, (0, seeddata_type_generator_1.generateSeedDataType)({ models, meta }));
221
238
  generated.write(`/${meta.seed.serviceFilePath}.ts`, (0, seed_service_generator_1.generateSeedService)({ models, meta }));
222
- generated.write(`/${meta.seed.templateExcelFilePath}`, yield (0, seed_template_generator_1.generateSeedExcelTemplate)({ models }));
223
- generated.write(`/${meta.seed.templateDecoderFilePath}.ts`, (0, seed_template_decoder_generator_1.generateSeedTemplateDecoder)({ models, meta }));
239
+ generated.write(`/${meta.seedData.initialMigrationFilePath}.ts`, (0, seed_migration_generator_1.generateSeedMigration)({ models, meta }));
240
+ generated.write(`/${meta.seedData.templateExcelFilePath}`, yield (0, seed_template_generator_1.generateSeedExcelTemplate)({ models }));
241
+ generated.write(`/${meta.seedData.templateDecoderFilePath}.ts`, (0, seed_template_decoder_generator_1.generateSeedTemplateDecoder)({ models, meta }));
224
242
  }
225
243
  if (!config.disableGenerators.trpc) {
226
244
  generated.write(`/${meta.trpc.routesFilePath}.ts`, (0, route_generator_1.generateRoutesIndex)({ models, meta }));
@@ -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;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateBusinessLogicUpdateService = 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 generateBusinessLogicUpdateService({ 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.serviceFilePath);
14
+ for (const { meta } of mm) {
15
+ imports.addImport({
16
+ items: [meta.businessLogic.update.serviceClassName],
17
+ from: meta.businessLogic.update.serviceFilePath,
18
+ });
19
+ }
20
+ const constructor = mm
21
+ .map(({ meta }) => `@Inject(forwardRef(() => ${meta.businessLogic.update.serviceClassName})) public readonly ${meta.businessLogic.update.serviceVariableName} :${meta.businessLogic.update.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.update.serviceClassName} {
30
+ constructor(${constructor}) {}
31
+ }
32
+ `;
33
+ }
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 index file for all businessLogic files.
4
+ * Generates a BusinessLogic view module class.
5
5
  */
6
- export declare function generateBusinessLogicIndex({ models, meta }: {
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.generateBusinessLogicModule = void 0;
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 business Logic module class.
7
+ * Generates a BusinessLogic view module class.
8
8
  */
9
- // TODO: https://github.com/PostXL/PostXL/issues/347
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
- .addImport({
16
- items: [meta.data.moduleName],
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
- private static cachedModule: DynamicModule | undefined = undefined
35
+ */
36
+ private static cachedModule: DynamicModule | undefined = undefined
43
37
 
44
- /**
45
- * The getInstance method should be called by any module that needs the module.
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) throw new Error('${moduleName} must be called via .provide first!')
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.generateBusinessLogicModule = generateBusinessLogicModule;
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 generateBusinessLogicService({ models, meta }: {
6
+ export declare function generateBusinessLogicViewService({ models, meta }: {
7
7
  models: Model[];
8
8
  meta: SchemaMetaData;
9
9
  }): string;
@@ -1,25 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateBusinessLogicService = void 0;
3
+ exports.generateBusinessLogicViewService = 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
- // TODO: https://github.com/PostXL/PostXL/issues/347
10
- function generateBusinessLogicService({ models, meta }) {
9
+ function generateBusinessLogicViewService({ 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.view.serviceClassName.localeCompare(b.meta.businessLogic.view.serviceClassName));
13
+ const imports = imports_1.ImportsGenerator.from(meta.businessLogic.view.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.view.serviceClassName],
17
+ from: meta.businessLogic.view.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.view.serviceClassName})) public readonly ${meta.businessLogic.view.serviceVariableName} :${meta.businessLogic.view.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.view.serviceClassName} {
31
30
  constructor(${constructor}) {}
32
31
  }
33
32
  `;
34
33
  }
35
- exports.generateBusinessLogicService = generateBusinessLogicService;
34
+ exports.generateBusinessLogicViewService = generateBusinessLogicViewService;
@@ -30,21 +30,13 @@ const Types = __importStar(require("../../lib/schema/types"));
30
30
  /**
31
31
  * Generates a mocking class
32
32
  */
33
- // TODO: https://github.com/PostXL/PostXL/issues/347
34
33
  function generateDataMockModule({ models, meta }) {
35
34
  const mm = models.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }));
36
- const imports = imports_1.ImportsGenerator.from(meta.data.dataMockModuleFilePath)
37
- .addImport({
38
- items: [Types.toVariableName('DataModule')],
39
- from: meta.data.dataModuleFilePath,
40
- })
41
- .addImport({
42
- items: [Types.toVariableName('DataService')],
43
- from: meta.data.dataServiceFilePath,
44
- })
45
- .addImport({
46
- items: [Types.toVariableName('TestDataService')],
47
- from: meta.data.testDataServiceFilePath,
35
+ const imports = imports_1.ImportsGenerator.from(meta.data.dataMockModuleFilePath).addImports({
36
+ [meta.data.dataModuleFilePath]: [Types.toVariableName('DataModule')],
37
+ [meta.data.dataServiceFilePath]: [Types.toVariableName('DataService')],
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.actionExecutionInterfaceFilePath]: [meta.actions.actionExecutionMock],
48
40
  });
49
41
  for (const { model, meta } of mm) {
50
42
  imports.addImport({ items: [model.typeName], from: meta.types.importPath });
@@ -57,7 +49,7 @@ function generateDataMockModule({ models, meta }) {
57
49
  useFactory: async () => {
58
50
  const repository = new ${meta.data.mockRepositoryClassName}()
59
51
  if (!!seed && !!seed.${meta.seed.constantName}) {
60
- await repository.reInit(seed.${meta.seed.constantName})
52
+ await repository.reInit({items: seed.${meta.seed.constantName}, execution })
61
53
  }
62
54
  return repository
63
55
  }
@@ -70,11 +62,11 @@ import { DbModule } from '@${meta.config.project}/db'
70
62
  ${imports.generate()}
71
63
 
72
64
  export class DataMockModule {
73
-
74
65
  static mock(seed?: MockData): DynamicModule {
66
+ const execution = new MockActionExecution()
67
+
75
68
  const providers = [
76
69
  DataService,
77
- TestDataService,
78
70
  ${providers}
79
71
  ]
80
72
 
@@ -11,13 +11,9 @@ function generateDataMocker({ models, meta: schemaMeta }) {
11
11
  const modelMetas = models.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }));
12
12
  const imports = imports_1.ImportsGenerator.from(schemaMeta.data.dataMockerFilePath);
13
13
  for (const { model, meta } of modelMetas) {
14
- imports.addImport({
15
- items: [model.typeName],
16
- from: meta.types.importPath,
17
- });
18
- imports.addImport({
19
- items: [meta.data.stubGenerationFnName],
20
- from: schemaMeta.data.dataMockerStubImportPath,
14
+ imports.addImports({
15
+ [meta.types.importPath]: [model.typeName],
16
+ [schemaMeta.data.dataMockerStubImportPath]: [meta.data.stubGenerationFnName],
21
17
  });
22
18
  }
23
19
  const publicVariables = modelMetas