@postxl/generator 0.70.3 → 0.71.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 (26) hide show
  1. package/dist/generator.js +36 -27
  2. package/dist/generators/indices/data/service.generator.js +1 -1
  3. package/dist/generators/indices/dispatcher-service.generator.js +3 -3
  4. package/dist/generators/indices/{import-export/importexport-import-service.generator.d.ts → export/class.generator.d.ts} +2 -2
  5. package/dist/generators/indices/{import-export/importexport-exporter-class.generator.js → export/class.generator.js} +19 -19
  6. package/dist/generators/indices/{import-export/importexport-exporter-class.generator.d.ts → export/encoder.generator.d.ts} +2 -2
  7. package/dist/generators/indices/export/encoder.generator.js +50 -0
  8. package/dist/generators/indices/{import-export/importexport-convert-import-functions.generator.d.ts → import/convert-functions.generator.d.ts} +2 -2
  9. package/dist/generators/indices/{import-export/importexport-convert-import-functions.generator.js → import/convert-functions.generator.js} +15 -17
  10. package/dist/generators/indices/import/decoder.generator.d.ts +9 -0
  11. package/dist/generators/indices/import/decoder.generator.js +40 -0
  12. package/dist/generators/indices/import/service.generator.d.ts +9 -0
  13. package/dist/generators/indices/{import-export/importexport-import-service.generator.js → import/service.generator.js} +20 -20
  14. package/dist/generators/indices/{import-export/importexport-types.generator.d.ts → import/types.generator.d.ts} +2 -2
  15. package/dist/generators/indices/{import-export/importexport-types.generator.js → import/types.generator.js} +7 -7
  16. package/dist/generators/indices/seed-migration.generator.js +2 -4
  17. package/dist/generators/indices/seed-template.generator.js +1 -1
  18. package/dist/generators/models/export/encoder.generator.d.ts +9 -0
  19. package/dist/generators/models/export/encoder.generator.js +42 -0
  20. package/dist/generators/models/import/decoder.generator.d.ts +9 -0
  21. package/dist/generators/models/{importexport-decoder.generator.js → import/decoder.generator.js} +24 -97
  22. package/dist/lib/meta.d.ts +91 -55
  23. package/dist/lib/meta.js +35 -23
  24. package/dist/lib/schema/schema.d.ts +10 -3
  25. package/package.json +1 -1
  26. package/dist/generators/models/importexport-decoder.generator.d.ts +0 -16
package/dist/generator.js CHANGED
@@ -45,31 +45,34 @@ const module_generator_1 = require("./generators/indices/data/module.generator")
45
45
  const service_generator_1 = require("./generators/indices/data/service.generator");
46
46
  const types_generator_2 = require("./generators/indices/data/types.generator");
47
47
  const dispatcher_service_generator_1 = require("./generators/indices/dispatcher-service.generator");
48
- const importexport_convert_import_functions_generator_1 = require("./generators/indices/import-export/importexport-convert-import-functions.generator");
49
- const importexport_exporter_class_generator_1 = require("./generators/indices/import-export/importexport-exporter-class.generator");
50
- const importexport_import_service_generator_1 = require("./generators/indices/import-export/importexport-import-service.generator");
51
- const importexport_types_generator_1 = require("./generators/indices/import-export/importexport-types.generator");
48
+ const class_generator_1 = require("./generators/indices/export/class.generator");
49
+ const encoder_generator_1 = require("./generators/indices/export/encoder.generator");
50
+ const convert_functions_generator_1 = require("./generators/indices/import/convert-functions.generator");
51
+ const decoder_generator_1 = require("./generators/indices/import/decoder.generator");
52
+ const service_generator_2 = require("./generators/indices/import/service.generator");
53
+ const types_generator_3 = require("./generators/indices/import/types.generator");
52
54
  const repositories_generator_1 = require("./generators/indices/repositories.generator");
53
55
  const routes_generator_1 = require("./generators/indices/routes.generator");
54
56
  const seed_migration_generator_1 = require("./generators/indices/seed-migration.generator");
55
57
  const seed_template_generator_1 = require("./generators/indices/seed-template.generator");
56
58
  const testids_generator_1 = require("./generators/indices/testids.generator");
57
- const types_generator_3 = require("./generators/indices/types.generator");
59
+ const types_generator_4 = require("./generators/indices/types.generator");
58
60
  const actiontypes_generator_1 = require("./generators/indices/update/actiontypes.generator");
59
61
  const module_generator_2 = require("./generators/indices/update/module.generator");
60
- const service_generator_2 = require("./generators/indices/update/service.generator");
62
+ const service_generator_3 = require("./generators/indices/update/service.generator");
61
63
  const module_generator_3 = require("./generators/indices/view/module.generator");
62
- const service_generator_3 = require("./generators/indices/view/service.generator");
64
+ const service_generator_4 = require("./generators/indices/view/service.generator");
63
65
  const admin_page_generator_1 = require("./generators/models/admin.page.generator");
64
- const importexport_decoder_generator_1 = require("./generators/models/importexport-decoder.generator");
66
+ const encoder_generator_2 = require("./generators/models/export/encoder.generator");
67
+ const decoder_generator_2 = require("./generators/models/import/decoder.generator");
65
68
  const react_1 = require("./generators/models/react");
66
69
  const repository_generator_1 = require("./generators/models/repository.generator");
67
70
  const route_generator_1 = require("./generators/models/route.generator");
68
71
  const seed_generator_1 = require("./generators/models/seed.generator");
69
72
  const stub_generator_1 = require("./generators/models/stub.generator");
70
- const types_generator_4 = require("./generators/models/types.generator");
71
- const service_generator_4 = require("./generators/models/update/service.generator");
72
- const service_generator_5 = require("./generators/models/view/service.generator");
73
+ const types_generator_5 = require("./generators/models/types.generator");
74
+ const service_generator_5 = require("./generators/models/update/service.generator");
75
+ const service_generator_6 = require("./generators/models/view/service.generator");
73
76
  const meta_1 = require("./lib/meta");
74
77
  const types_1 = require("./lib/schema/types");
75
78
  const client_path_1 = require("./prisma/client-path");
@@ -82,7 +85,8 @@ const CONFIG_SCHEMA = zod_1.z
82
85
  pathToDbLib: zod_1.z.string().optional(),
83
86
  pathToPlaywright: zod_1.z.string().optional(),
84
87
  pathToE2ELib: zod_1.z.string().optional(),
85
- pathToImportExport: zod_1.z.string().optional(),
88
+ pathToImport: zod_1.z.string().optional(),
89
+ pathToExport: zod_1.z.string().optional(),
86
90
  pathToActions: zod_1.z.string().optional(),
87
91
  pathToBusinessViewLogic: zod_1.z.string().optional(),
88
92
  pathToBusinessUpdateLogic: zod_1.z.string().optional(),
@@ -109,7 +113,8 @@ const CONFIG_SCHEMA = zod_1.z
109
113
  playwrightPath: (0, types_1.toPath)(s.pathToPlaywright || './e2e/'),
110
114
  dbLibPath: (0, types_1.toPath)(s.pathToDbLib || './backend/libs/db/src/'),
111
115
  e2eLibPath: (0, types_1.toPath)(s.pathToE2ELib || './backend/libs/e2e/src/'),
112
- importExportPath: (0, types_1.toPath)(s.pathToImportExport || './backend/libs/import-export/src/'),
116
+ importPath: (0, types_1.toPath)(s.pathToImport || './backend/libs/import/src/'),
117
+ exportPath: (0, types_1.toPath)(s.pathToExport || './backend/libs/export/src/'),
113
118
  actionsPath: (0, types_1.toPath)(s.pathToActions || './backend/libs/actions/src/'),
114
119
  businessViewLogicPath: (0, types_1.toPath)(s.pathToBusinessViewLogic || './backend/libs/view/src/'),
115
120
  businessUpdateLogicPath: (0, types_1.toPath)(s.pathToBusinessUpdateLogic || './backend/libs/update/src/'),
@@ -166,17 +171,19 @@ function generate(_a) {
166
171
  for (const model of models) {
167
172
  const meta = (0, meta_1.getModelMetadata)({ model });
168
173
  // Types
169
- generated.write(`/${meta.types.filePath}.ts`, (0, types_generator_4.generateModelTypes)({ model, meta }));
174
+ generated.write(`/${meta.types.filePath}.ts`, (0, types_generator_5.generateModelTypes)({ model, meta }));
170
175
  // Seed
171
176
  generated.write(`/${meta.seed.location.path}.ts`, (0, seed_generator_1.generateSeedModel)({ model, itemCount: 5, meta, models }));
172
177
  // Data
173
178
  generated.write(`/${meta.data.stubLocation.path}.ts`, (0, stub_generator_1.generateStub)({ model, meta }));
174
179
  generated.write(`/${meta.data.repository.location.path}.ts`, (0, repository_generator_1.generateRepository)({ model, meta }));
175
- // Import-Export
176
- generated.write(`/${meta.importExport.decoder.filePath}.ts`, (0, importexport_decoder_generator_1.generateModelImportExportDecoder)({ model, meta }));
180
+ // Import
181
+ generated.write(`/${meta.import.decoder.location.path}.ts`, (0, decoder_generator_2.generateModelImportDecoder)({ model, meta }));
182
+ // Export
183
+ generated.write(`/${meta.export.encoder.location.path}.ts`, (0, encoder_generator_2.generateModelExportEncoder)({ model, meta }));
177
184
  // Business Logic
178
- generated.write(`/${meta.view.serviceLocation.path}.ts`, (0, service_generator_5.generateModelBusinessLogicView)({ model, meta }));
179
- generated.write(`/${meta.update.serviceClassLocation.path}.ts`, (0, service_generator_4.generateModelBusinessLogicUpdate)({ model, meta }));
185
+ generated.write(`/${meta.view.serviceLocation.path}.ts`, (0, service_generator_6.generateModelBusinessLogicView)({ model, meta }));
186
+ generated.write(`/${meta.update.serviceClassLocation.path}.ts`, (0, service_generator_5.generateModelBusinessLogicUpdate)({ model, meta }));
180
187
  // Routes
181
188
  generated.write(`/${meta.trpc.routerFilePath}.ts`, (0, route_generator_1.generateRoute)({ model, meta }));
182
189
  // React
@@ -199,20 +206,22 @@ function generate(_a) {
199
206
  generated.write(`/${meta.data.repository.constFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesArray)({ models, meta }));
200
207
  generated.write(`/${meta.data.types.location.path}.ts`, (0, types_generator_2.generateDataTypes)({ models, meta }));
201
208
  generated.write(`/${meta.e2e.testIdsFilePath}.ts`, (0, testids_generator_1.generateTestIds)());
202
- // Import-Export
203
- generated.write(`/${meta.importExport.types.location.path}.ts`, (0, importexport_types_generator_1.generateImportExportTypes)({ models, meta }));
204
- generated.write(`/${meta.importExport.exporterClass.location.path}.ts`, (0, importexport_exporter_class_generator_1.generateImportExportExporterClass)({ models, meta }));
205
- generated.write(`/${meta.importExport.importService.location.path}.ts`, (0, importexport_import_service_generator_1.generateImportExportImportService)({ models, meta }));
206
- generated.write(`/${meta.importExport.decoder.location.path}.ts`, (0, importexport_decoder_generator_1.generateImportExportDecoder)({ models, meta }));
207
- generated.write(`/${meta.importExport.converterFunctions.location.path}.ts`, (0, importexport_convert_import_functions_generator_1.generateImportExportConvertImportFunctions)({ models, meta }));
209
+ // Import
210
+ generated.write(`/${meta.import.types.location.path}.ts`, (0, types_generator_3.generateImportTypes)({ models, meta }));
211
+ generated.write(`/${meta.import.importService.location.path}.ts`, (0, service_generator_2.generateImportService)({ models, meta }));
212
+ generated.write(`/${meta.import.decoder.location.path}.ts`, (0, decoder_generator_1.generateImportDecoder)({ models, meta }));
213
+ generated.write(`/${meta.import.converterFunctions.location.path}.ts`, (0, convert_functions_generator_1.generateConvertImportFunctions)({ models, meta }));
214
+ // Export
215
+ generated.write(`/${meta.export.encoder.location.path}.ts`, (0, encoder_generator_1.generateExportEncoder)({ models, meta }));
216
+ generated.write(`/${meta.export.exporterClass.location.path}.ts`, (0, class_generator_1.generateExporterClass)({ models, meta }));
208
217
  // Actions
209
218
  generated.write(`/${meta.actions.dispatcher.classLocation.path}.ts`, (0, dispatcher_service_generator_1.generateActionsDispatcherService)({ models, meta }));
210
219
  // View
211
220
  generated.write(`/${meta.view.moduleLocation.path}.ts`, (0, module_generator_3.generateBusinessLogicViewModule)({ models, meta }));
212
- generated.write(`/${meta.view.serviceLocation.path}.ts`, (0, service_generator_3.generateBusinessLogicViewService)({ models, meta }));
221
+ generated.write(`/${meta.view.serviceLocation.path}.ts`, (0, service_generator_4.generateBusinessLogicViewService)({ models, meta }));
213
222
  // Update
214
223
  generated.write(`/${meta.update.moduleLocation.path}.ts`, (0, module_generator_2.generateBusinessLogicUpdateModule)({ models, meta }));
215
- generated.write(`/${meta.update.serviceLocation.path}.ts`, (0, service_generator_2.generateBusinessLogicUpdateService)({ models, meta }));
224
+ generated.write(`/${meta.update.serviceLocation.path}.ts`, (0, service_generator_3.generateBusinessLogicUpdateService)({ models, meta }));
216
225
  generated.write(`/${meta.update.actionTypesFilePath}.ts`, (0, actiontypes_generator_1.generateBusinessLogicActionTypes)({ models, meta }));
217
226
  // Seed
218
227
  generated.write(`/${meta.seedData.initialMigrationLocation.path}.ts`, (0, seed_migration_generator_1.generateSeedMigration)({ models, meta }));
@@ -220,7 +229,7 @@ function generate(_a) {
220
229
  // Routes
221
230
  generated.write(`/${meta.trpc.routesFilePath}.ts`, (0, routes_generator_1.generateRoutesIndex)({ models, meta }));
222
231
  // Types
223
- generated.write(`/${meta.types.indexFilePath}.ts`, (0, types_generator_3.generateTypesIndex)({ models, enums, meta }));
232
+ generated.write(`/${meta.types.indexFilePath}.ts`, (0, types_generator_4.generateTypesIndex)({ models, enums, meta }));
224
233
  // -------------------------------------------------------------------------
225
234
  // Add disclaimer and format.
226
235
  yield generated.transformUTF8Files((path, content) => `${lock_1.GENERATED_FILE_DISCLAIMER}\n${content}`);
@@ -21,7 +21,7 @@ function generateDataService({ models, meta }) {
21
21
  .join(',\n');
22
22
  const initializer = mm.map(({ meta }) => `await this.${meta.data.dataServiceName}.init()`).join('\n');
23
23
  const excelExports = mm
24
- .map(({ meta }) => `${meta.importExport.tableName}: Array.from((await this.${meta.data.dataServiceName}.getAll()).values()),`)
24
+ .map(({ meta }) => `${meta.import.tableName}: Array.from((await this.${meta.data.dataServiceName}.getAll()).values()),`)
25
25
  .join('\n');
26
26
  const isEmptyChecks = mm.map(({ meta }) => `(await this.${meta.data.dataServiceName}.count()) === 0`).join(' &&');
27
27
  // Building blocks for bulk mutations
@@ -10,7 +10,7 @@ const types_1 = require("../../lib/schema/types");
10
10
  function generateActionsDispatcherService({ models, meta }) {
11
11
  const imports = imports_1.ImportsGenerator.from(meta.actions.dispatcher.classLocation.path).addImports({
12
12
  [meta.seed.serviceLocation.import]: [meta.seed.serviceClassName],
13
- [meta.importExport.importService.location.import]: [meta.importExport.importService.name],
13
+ [meta.import.importService.location.import]: [meta.import.importService.name],
14
14
  [meta.update.serviceLocation.import]: [meta.update.serviceClassName],
15
15
  [meta.types.importPath]: (0, types_1.toAnnotatedTypeName)(meta.config.userType),
16
16
  [meta.backendModules.db.databaseService.location.import]: [meta.backendModules.db.databaseService.name],
@@ -35,12 +35,12 @@ import { Action, ResultOfAction } from './actions.types'
35
35
  @Injectable()
36
36
  export class ${meta.actions.dispatcher.class} {
37
37
 
38
- // As SeedModule and ImportExportModule get instantiated after the ActionsModule, we use this hack to avoid a circular dependency:
38
+ // As SeedModule and ImportModule get instantiated after the ActionsModule, we use this hack to avoid a circular dependency:
39
39
  // we set the seedService and the importService to value and then overwrite it in the services' constructors.
40
40
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment
41
41
  public seedService: SeedService = {} as unknown as any
42
42
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment
43
- public ${meta.importExport.importService.sharedName}: ImportService = {} as unknown as any
43
+ public ${meta.import.importService.sharedName}: ImportService = {} as unknown as any
44
44
 
45
45
  constructor(
46
46
  private readonly updateService: ${meta.update.serviceClassName},
@@ -1,9 +1,9 @@
1
1
  import { SchemaMetaData } from '../../../lib/meta';
2
2
  import { Model } from '../../../lib/schema/schema';
3
3
  /**
4
- * Generates the Exporter class for the Import-Export module
4
+ * Generates the Exporter class for the Export module
5
5
  */
6
- export declare function generateImportExportImportService({ models, meta }: {
6
+ export declare function generateExporterClass({ models, meta }: {
7
7
  models: Model[];
8
8
  meta: SchemaMetaData;
9
9
  }): string;
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateImportExportExporterClass = void 0;
3
+ exports.generateExporterClass = void 0;
4
4
  const imports_1 = require("../../../lib/imports");
5
5
  const meta_1 = require("../../../lib/meta");
6
6
  const types_1 = require("../../../lib/schema/types");
7
7
  /**
8
- * Generates the Exporter class for the Import-Export module
8
+ * Generates the Exporter class for the Export module
9
9
  */
10
- function generateImportExportExporterClass({ models, meta }) {
11
- const imports = imports_1.ImportsGenerator.from(meta.importExport.exporterClass.location.path);
10
+ function generateExporterClass({ models, meta }) {
11
+ const imports = imports_1.ImportsGenerator.from(meta.export.exporterClass.location.path);
12
12
  imports.addImports({
13
13
  [meta.view.serviceLocation.import]: [meta.view.serviceClassName],
14
- [meta.importExport.decoder.location.path]: [
15
- meta.importExport.decoder.fullEncoderFunctionName,
16
- (0, types_1.toAnnotatedTypeName)(meta.importExport.decoder.encodedExcelDataTypeName),
14
+ [meta.export.encoder.location.path]: [
15
+ meta.export.encoder.fullEncoderFunctionName,
16
+ (0, types_1.toAnnotatedTypeName)(meta.export.encoder.encodedExcelDataTypeName),
17
17
  ],
18
18
  });
19
19
  const typeExports = [];
@@ -28,10 +28,10 @@ function generateImportExportExporterClass({ models, meta }) {
28
28
  from: modelMeta.types.importPath,
29
29
  items: [modelMeta.types.brandedIdType, modelMeta.types.typeName],
30
30
  });
31
- typeExports.push(`export type ${modelMeta.importExport.exportDataTypeName} = CapitalizedKeys<${model.name}>`);
32
- typeExportsDataEntries.push(`${modelMeta.importExport.exportDataPropertyName}?: ${modelMeta.importExport.exportDataTypeName}[]`);
31
+ typeExports.push(`export type ${modelMeta.export.exportDataTypeName} = CapitalizedKeys<${model.name}>`);
32
+ typeExportsDataEntries.push(`${modelMeta.export.exportDataPropertyName}?: ${modelMeta.export.exportDataTypeName}[]`);
33
33
  privateMaps.push(`private ${modelMeta.internalPluralName} = new Map<${modelMeta.types.brandedIdType}, ${modelMeta.types.typeName}>()`);
34
- exportDataProperties.push(`${modelMeta.importExport.exportDataFullPropertyName}: Array.from(this.${modelMeta.internalPluralName}.values())`);
34
+ exportDataProperties.push(`${modelMeta.export.exportDataFullPropertyName}: Array.from(this.${modelMeta.internalPluralName}.values())`);
35
35
  const linkedItems = [];
36
36
  for (const field of model.fields) {
37
37
  if (field.kind !== 'relation') {
@@ -39,12 +39,12 @@ function generateImportExportExporterClass({ models, meta }) {
39
39
  }
40
40
  const linkedModelMeta = (0, meta_1.getModelMetadata)({ model: field.relationToModel });
41
41
  if (field.isRequired) {
42
- linkedItems.push(`await this.${linkedModelMeta.importExport.exportAddFunctionName}({id: item.${field.name}, includeChildren: false})`);
42
+ linkedItems.push(`await this.${linkedModelMeta.export.exportAddFunctionName}({id: item.${field.name}, includeChildren: false})`);
43
43
  }
44
44
  else {
45
45
  linkedItems.push(`
46
46
  if (item.${field.name}) {
47
- await this.${linkedModelMeta.importExport.exportAddFunctionName}({id: item.${field.name}, includeChildren: false})
47
+ await this.${linkedModelMeta.export.exportAddFunctionName}({id: item.${field.name}, includeChildren: false})
48
48
  }`);
49
49
  }
50
50
  }
@@ -55,7 +55,7 @@ function generateImportExportExporterClass({ models, meta }) {
55
55
  childItemCalls.push(`
56
56
  // Add all ${linkedModelMeta.userFriendlyNamePlural} that are related to the ${modelMeta.userFriendlyName} via ${referencingField.name}
57
57
  for (const ${referencingField.name} of await this.viewService.${linkedModelMeta.view.serviceVariableName}.data.${linkedFieldMeta.getByForeignKeyIdsMethodFnName}(id)) {
58
- await this.${linkedModelMeta.importExport.exportAddFunctionName}({id: ${referencingField.name}, includeChildren})
58
+ await this.${linkedModelMeta.export.exportAddFunctionName}({id: ${referencingField.name}, includeChildren})
59
59
  }
60
60
  `);
61
61
  }
@@ -70,7 +70,7 @@ function generateImportExportExporterClass({ models, meta }) {
70
70
  /**
71
71
  * Adds a ${modelMeta.userFriendlyName} and all related (and nested) dependencies to the export.
72
72
  */
73
- public async ${modelMeta.importExport.exportAddFunctionName}(${signature}) {
73
+ public async ${modelMeta.export.exportAddFunctionName}(${signature}) {
74
74
  if (this.${modelMeta.internalPluralName}.has(id)) {
75
75
  return
76
76
  }
@@ -107,7 +107,7 @@ ${imports.generate()}
107
107
  * - Call the \`exportData()\` method to get the encoded Excel data.
108
108
  * - Alternatively, you can call 'exportAll()' to dump all data.
109
109
  */
110
- export class ${meta.importExport.exporterClass.name} {
110
+ export class ${meta.export.exporterClass.name} {
111
111
  private logger = new Logger(Exporter.name)
112
112
 
113
113
  ${privateMaps.join('\n ')}
@@ -117,8 +117,8 @@ export class ${meta.importExport.exporterClass.name} {
117
117
  /**
118
118
  * Exports all data that was added by prior calls to \`.add{Model}\` functions.
119
119
  */
120
- public exportData(): ${meta.importExport.decoder.encodedExcelDataTypeName} {
121
- return ${meta.importExport.decoder.fullEncoderFunctionName}({
120
+ public exportData(): ${meta.export.encoder.encodedExcelDataTypeName} {
121
+ return ${meta.export.encoder.fullEncoderFunctionName}({
122
122
  ${exportDataProperties.join(',\n ')}
123
123
  })
124
124
  }
@@ -126,7 +126,7 @@ export class ${meta.importExport.exporterClass.name} {
126
126
  /**
127
127
  * Exports all data.
128
128
  */
129
- public async exportAll(): Promise<${meta.importExport.decoder.encodedExcelDataTypeName}> {
129
+ public async exportAll(): Promise<${meta.export.encoder.encodedExcelDataTypeName}> {
130
130
  ${addAllCalls.join('\n')}
131
131
 
132
132
  return this.exportData()
@@ -137,4 +137,4 @@ export class ${meta.importExport.exporterClass.name} {
137
137
 
138
138
  `;
139
139
  }
140
- exports.generateImportExportExporterClass = generateImportExportExporterClass;
140
+ exports.generateExporterClass = generateExporterClass;
@@ -1,9 +1,9 @@
1
1
  import { SchemaMetaData } from '../../../lib/meta';
2
2
  import { Model } from '../../../lib/schema/schema';
3
3
  /**
4
- * Generates the Exporter class for the Import-Export module
4
+ * Generates the data encoder, aggregating all the models.
5
5
  */
6
- export declare function generateImportExportExporterClass({ models, meta }: {
6
+ export declare function generateExportEncoder({ models, meta }: {
7
7
  models: Model[];
8
8
  meta: SchemaMetaData;
9
9
  }): string;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateExportEncoder = void 0;
4
+ const imports_1 = require("../../../lib/imports");
5
+ const meta_1 = require("../../../lib/meta");
6
+ const types_1 = require("../../../lib/schema/types");
7
+ /**
8
+ * Generates the data encoder, aggregating all the models.
9
+ */
10
+ function generateExportEncoder({ models, meta }) {
11
+ const schemaMeta = (0, meta_1.getSchemaMetadata)({ config: meta.config });
12
+ const { encodedExcelDataTypeName, fullEncoderFunctionName } = meta.export.encoder;
13
+ const imports = imports_1.ImportsGenerator.from(meta.export.encoder.location.path);
14
+ const { decodedPXLModelDataTypeName } = schemaMeta.import.decoder;
15
+ imports.addImports({
16
+ [schemaMeta.import.decoder.location.import]: [decodedPXLModelDataTypeName],
17
+ });
18
+ const modelTypes = [];
19
+ const exportFields = [];
20
+ for (const model of models) {
21
+ const modelMeta = (0, meta_1.getModelMetadata)({ model });
22
+ imports.addImport({
23
+ from: modelMeta.export.encoder.location.path,
24
+ items: [
25
+ modelMeta.export.encoder.arrayEncoderFunctionName,
26
+ (0, types_1.toAnnotatedTypeName)(modelMeta.export.encoder.encodedExcelType),
27
+ ],
28
+ });
29
+ modelTypes.push(`${modelMeta.export.tableName}?: ${modelMeta.export.encoder.encodedExcelType}[]`);
30
+ exportFields.push(`${modelMeta.import.tableName}:
31
+ data.${modelMeta.export.exportDataFullPropertyName} !== undefined ?
32
+ ${modelMeta.export.encoder.arrayEncoderFunctionName}(data.${modelMeta.export.exportDataFullPropertyName})
33
+ : undefined`);
34
+ }
35
+ return `
36
+ ${imports.generate()}
37
+
38
+ export type ${encodedExcelDataTypeName} = {
39
+ ${modelTypes.join(',\n')}
40
+ }
41
+
42
+ /**
43
+ * Converts the model data to Excel format
44
+ */
45
+ export const ${fullEncoderFunctionName} = (data: ${decodedPXLModelDataTypeName}): ${encodedExcelDataTypeName} => ({
46
+ ${exportFields.join(',\n')}
47
+ })
48
+ `;
49
+ }
50
+ exports.generateExportEncoder = generateExportEncoder;
@@ -1,9 +1,9 @@
1
1
  import { SchemaMetaData } from '../../../lib/meta';
2
2
  import { Model } from '../../../lib/schema/schema';
3
3
  /**
4
- * Generates the Exporter class for the Import-Export module
4
+ * Generates the Convert function for the Import module
5
5
  */
6
- export declare function generateImportExportConvertImportFunctions({ models, meta, }: {
6
+ export declare function generateConvertImportFunctions({ models, meta }: {
7
7
  models: Model[];
8
8
  meta: SchemaMetaData;
9
9
  }): string;
@@ -1,23 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateImportExportConvertImportFunctions = void 0;
3
+ exports.generateConvertImportFunctions = void 0;
4
4
  const imports_1 = require("../../../lib/imports");
5
5
  const meta_1 = require("../../../lib/meta");
6
6
  const types_1 = require("../../../lib/schema/types");
7
7
  const types_2 = require("../../../lib/types");
8
8
  /**
9
- * Generates the Exporter class for the Import-Export module
9
+ * Generates the Convert function for the Import module
10
10
  */
11
- function generateImportExportConvertImportFunctions({ models, meta, }) {
11
+ function generateConvertImportFunctions({ models, meta }) {
12
12
  const { dto } = meta.types;
13
- const { importedDataToBulkMutations, deltaToBulkMutations } = meta.importExport.converterFunctions;
14
- const { types } = meta.importExport;
13
+ const { importedDataToBulkMutations, deltaToBulkMutations } = meta.import.converterFunctions;
14
+ const { types } = meta.import;
15
15
  const { delta } = types;
16
- const imports = imports_1.ImportsGenerator.from(meta.importExport.converterFunctions.location.path);
16
+ const imports = imports_1.ImportsGenerator.from(meta.import.converterFunctions.location.path);
17
17
  imports.addImports({
18
- [meta.importExport.decoder.location.path]: [
19
- (0, types_1.toAnnotatedTypeName)(meta.importExport.decoder.decodedPXLModelDataTypeName),
20
- ],
18
+ [meta.import.decoder.location.path]: [(0, types_1.toAnnotatedTypeName)(meta.import.decoder.decodedPXLModelDataTypeName)],
21
19
  [meta.data.types.location.import]: [
22
20
  (0, types_1.toAnnotatedTypeName)(meta.data.types.bulkMutation),
23
21
  (0, types_1.toAnnotatedTypeName)(meta.data.types.bulkMutationForModel),
@@ -60,7 +58,7 @@ export function ${deltaToBulkMutations}(
60
58
  * For sophisticated imports that handle deltas, use \`${deltaToBulkMutations}\` instead!
61
59
  */
62
60
  export function ${importedDataToBulkMutations}(
63
- input: ${meta.importExport.decoder.decodedPXLModelDataTypeName}
61
+ input: ${meta.import.decoder.decodedPXLModelDataTypeName}
64
62
  ): ${meta.data.types.bulkMutation}[] {
65
63
  return [${importConverterBlocks.join(',\n')}]
66
64
  }
@@ -121,7 +119,7 @@ function deltaModelTo${meta.data.types.bulkMutation}<
121
119
  }
122
120
  `;
123
121
  }
124
- exports.generateImportExportConvertImportFunctions = generateImportExportConvertImportFunctions;
122
+ exports.generateConvertImportFunctions = generateConvertImportFunctions;
125
123
  // Helpful for debugging the complex logic, so should not be removed
126
124
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
127
125
  function logState({ iteration, state, nextStep, lastStep, }) {
@@ -355,7 +353,7 @@ function generateModelCreateBlock({ fieldsGrouped, modelMeta, }) {
355
353
  return {
356
354
  block: /* ts */ `
357
355
  ${modelMeta.seed.constantName}: {
358
- create: input.${modelMeta.importExport.decoder.decodedModelArrayName}?.map(
356
+ create: input.${modelMeta.import.decoder.decodedModelArrayName}?.map(
359
357
  (item: ${modelMeta.types.dto.create}) => ({
360
358
  ${createAssignments.join(',\n')}
361
359
  }))
@@ -370,17 +368,17 @@ function generateDeltaBlock({ fieldsGrouped, modelMeta, schemaMeta, imports, })
370
368
  modelMeta,
371
369
  });
372
370
  const genericsDefinition = `${modelMeta.types.typeName}, ${modelMeta.types.brandedIdType}`;
373
- const { type, create, update } = schemaMeta.importExport.types.delta_Model;
371
+ const { type, create, update } = schemaMeta.import.types.delta_Model;
374
372
  imports.addTypeImport({
375
373
  from: modelMeta.types.importPath,
376
374
  items: [modelMeta.types.typeName, modelMeta.types.brandedIdType],
377
375
  });
378
376
  imports.addTypeImport({
379
- from: schemaMeta.importExport.types.location.path,
377
+ from: schemaMeta.import.types.location.path,
380
378
  items: [type, create.type, update.type],
381
379
  });
382
380
  imports.addImport({
383
- from: schemaMeta.importExport.types.location.path,
381
+ from: schemaMeta.import.types.location.path,
384
382
  items: [create.typeGuard, update.typeGuard],
385
383
  });
386
384
  return /* ts */ `
@@ -434,7 +432,7 @@ function generateBulkMutationBlockLink({ state, imports, iteration, schemaMeta,
434
432
  function generateModelLinkBlocks({ fieldsGrouped, modelMeta, schemaMeta, }) {
435
433
  const { model, nullableFieldsForLaterLinking } = fieldsGrouped;
436
434
  const genericsDefinition = `${modelMeta.types.typeName}, ${modelMeta.types.brandedIdType}`;
437
- const { create, update } = schemaMeta.importExport.types.delta_Model;
435
+ const { create, update } = schemaMeta.import.types.delta_Model;
438
436
  if (nullableFieldsForLaterLinking.size === 0) {
439
437
  throw new Error(`Cannot link fields for ${model.name} as it does not have any nullable fields`);
440
438
  }
@@ -445,7 +443,7 @@ function generateModelLinkBlocks({ fieldsGrouped, modelMeta, schemaMeta, }) {
445
443
  return {
446
444
  importConvertBlock: /* ts */ `
447
445
  ${modelMeta.seed.constantName}: {
448
- update: input.${modelMeta.importExport.decoder.decodedModelArrayName}?.map(
446
+ update: input.${modelMeta.import.decoder.decodedModelArrayName}?.map(
449
447
  (item: ${modelMeta.types.dto.update}) => ({
450
448
  id: item.id,
451
449
  ${linkFromObject.join(',\n')}
@@ -0,0 +1,9 @@
1
+ import { SchemaMetaData } from '../../../lib/meta';
2
+ import { Model } from '../../../lib/schema/schema';
3
+ /**
4
+ * Generates the data decoder, aggregating all the models.
5
+ */
6
+ export declare function generateImportDecoder({ models, meta }: {
7
+ models: Model[];
8
+ meta: SchemaMetaData;
9
+ }): string;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateImportDecoder = void 0;
4
+ const imports_1 = require("../../../lib/imports");
5
+ const meta_1 = require("../../../lib/meta");
6
+ /**
7
+ * Generates the data decoder, aggregating all the models.
8
+ */
9
+ function generateImportDecoder({ models, meta }) {
10
+ const { decodedPXLModelDataTypeName, fullDecoderName } = meta.import.decoder;
11
+ const imports = imports_1.ImportsGenerator.from(meta.import.decoder.location.path);
12
+ const decoderEntries = [];
13
+ for (const model of models) {
14
+ const modelMeta = (0, meta_1.getModelMetadata)({ model });
15
+ imports.addImport({
16
+ from: modelMeta.import.decoder.location.path,
17
+ items: [modelMeta.import.decoder.tableDecoder],
18
+ });
19
+ decoderEntries.push(`${modelMeta.import.tableName}: ${modelMeta.import.decoder.tableDecoder}.optional()`);
20
+ }
21
+ return `
22
+ import * as z from 'zod'
23
+
24
+ import { uncapitalizeKeys } from '@postxl/runtime'
25
+
26
+ ${imports.generate()}
27
+
28
+ /**
29
+ * Decoder that converts Excel data to model data
30
+ */
31
+ export const ${fullDecoderName} = z
32
+ .object({
33
+ ${decoderEntries.join(',\n')}
34
+ })
35
+ .transform(uncapitalizeKeys)
36
+
37
+ export type ${decodedPXLModelDataTypeName} = z.infer<typeof excelDataDecoder>
38
+ `;
39
+ }
40
+ exports.generateImportDecoder = generateImportDecoder;
@@ -0,0 +1,9 @@
1
+ import { SchemaMetaData } from '../../../lib/meta';
2
+ import { Model } from '../../../lib/schema/schema';
3
+ /**
4
+ * Generates the Import Service class for the Import module
5
+ */
6
+ export declare function generateImportService({ models, meta }: {
7
+ models: Model[];
8
+ meta: SchemaMetaData;
9
+ }): string;