@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.
Files changed (60) hide show
  1. package/dist/generator.js +91 -32
  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/{businesslogicservice.generator.js → businesslogic-update-service.generator.js} +9 -10
  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/businesslogic-view-service.generator.js +34 -0
  16. package/dist/generators/indices/{datamockmodule.generator.js → datamock-module.generator.js} +8 -16
  17. package/dist/generators/indices/datamocker.generator.js +46 -40
  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} +24 -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/lib/vfs.d.ts +33 -0
  51. package/dist/lib/vfs.js +157 -0
  52. package/dist/prisma/attributes.js +7 -3
  53. package/dist/prisma/parse.js +25 -5
  54. package/package.json +8 -3
  55. package/dist/generators/indices/businesslogicindex.generator.js +0 -19
  56. package/dist/generators/indices/seed.generator.js +0 -17
  57. package/dist/generators/indices/testdataservice.generator.d.ts +0 -9
  58. package/dist/generators/indices/testdataservice.generator.js +0 -78
  59. package/dist/generators/models/businesslogic.generator.d.ts +0 -9
  60. /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 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");
61
58
  const types_1 = require("./lib/schema/types");
62
- const client_path_1 = require("./prisma/client-path");
63
- const parse_1 = require("./prisma/parse");
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 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");
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 seed_service_generator_1 = require("./generators/indices/seed-service.generator");
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
- businessLogicPath: (0, types_1.toPath)(s.pathToBusinessLogic || 'repos'),
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
- seedPath: (0, types_1.toPath)(s.pathToSeedLib || 'seed'),
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
- faker_1.faker.seed(config.randomSeed);
151
- const vfs = yield lock_1.VirtualFS.fromLockFile(root);
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, seed_generator_2.generateSeedModel)({ model, itemCount: 5, meta }));
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, businesslogic_generator_1.generateModelBusinessLogic)({ model, meta }));
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, datamockmodule_generator_1.generateDataMockModule)({ models, meta }));
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, 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 }));
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.indexFilePath}.ts`, (0, seed_generator_1.generateSeedIndex)({ models, meta }));
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.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 }));
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.generateBusinessLogicService = void 0;
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
- // TODO: https://github.com/PostXL/PostXL/issues/347
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.generateBusinessLogicService = generateBusinessLogicService;
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;
@@ -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;