@postxl/generator 0.70.2 → 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.
- package/dist/generator.js +36 -27
- package/dist/generators/indices/data/service.generator.js +1 -1
- package/dist/generators/indices/dispatcher-service.generator.js +3 -3
- package/dist/generators/indices/{import-export/importexport-import-service.generator.d.ts → export/class.generator.d.ts} +2 -2
- package/dist/generators/indices/{import-export/importexport-exporter-class.generator.js → export/class.generator.js} +19 -19
- package/dist/generators/indices/{import-export/importexport-exporter-class.generator.d.ts → export/encoder.generator.d.ts} +2 -2
- package/dist/generators/indices/export/encoder.generator.js +50 -0
- package/dist/generators/indices/{import-export/importexport-convert-import-functions.generator.d.ts → import/convert-functions.generator.d.ts} +2 -2
- package/dist/generators/indices/{import-export/importexport-convert-import-functions.generator.js → import/convert-functions.generator.js} +15 -17
- package/dist/generators/indices/import/decoder.generator.d.ts +9 -0
- package/dist/generators/indices/import/decoder.generator.js +40 -0
- package/dist/generators/indices/import/service.generator.d.ts +9 -0
- package/dist/generators/indices/{import-export/importexport-import-service.generator.js → import/service.generator.js} +20 -20
- package/dist/generators/indices/{import-export/importexport-types.generator.d.ts → import/types.generator.d.ts} +2 -2
- package/dist/generators/indices/{import-export/importexport-types.generator.js → import/types.generator.js} +7 -7
- package/dist/generators/indices/seed-migration.generator.js +2 -4
- package/dist/generators/indices/seed-template.generator.js +1 -1
- package/dist/generators/models/export/encoder.generator.d.ts +9 -0
- package/dist/generators/models/export/encoder.generator.js +42 -0
- package/dist/generators/models/import/decoder.generator.d.ts +9 -0
- package/dist/generators/models/{importexport-decoder.generator.js → import/decoder.generator.js} +24 -97
- package/dist/lib/meta.d.ts +91 -55
- package/dist/lib/meta.js +35 -23
- package/dist/lib/schema/schema.d.ts +10 -3
- package/package.json +1 -1
- 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
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
71
|
-
const
|
|
72
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
176
|
-
generated.write(`/${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,
|
|
179
|
-
generated.write(`/${meta.update.serviceClassLocation.path}.ts`, (0,
|
|
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
|
|
203
|
-
generated.write(`/${meta.
|
|
204
|
-
generated.write(`/${meta.
|
|
205
|
-
generated.write(`/${meta.
|
|
206
|
-
generated.write(`/${meta.
|
|
207
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
4
|
+
* Generates the Exporter class for the Export module
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
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.
|
|
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
|
|
8
|
+
* Generates the Exporter class for the Export module
|
|
9
9
|
*/
|
|
10
|
-
function
|
|
11
|
-
const imports = imports_1.ImportsGenerator.from(meta.
|
|
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.
|
|
15
|
-
meta.
|
|
16
|
-
(0, types_1.toAnnotatedTypeName)(meta.
|
|
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.
|
|
32
|
-
typeExportsDataEntries.push(`${modelMeta.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
121
|
-
return ${meta.
|
|
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.
|
|
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.
|
|
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
|
|
4
|
+
* Generates the data encoder, aggregating all the models.
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
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
|
|
4
|
+
* Generates the Convert function for the Import module
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
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.
|
|
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
|
|
9
|
+
* Generates the Convert function for the Import module
|
|
10
10
|
*/
|
|
11
|
-
function
|
|
11
|
+
function generateConvertImportFunctions({ models, meta }) {
|
|
12
12
|
const { dto } = meta.types;
|
|
13
|
-
const { importedDataToBulkMutations, deltaToBulkMutations } = meta.
|
|
14
|
-
const { types } = meta.
|
|
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.
|
|
16
|
+
const imports = imports_1.ImportsGenerator.from(meta.import.converterFunctions.location.path);
|
|
17
17
|
imports.addImports({
|
|
18
|
-
[meta.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
377
|
+
from: schemaMeta.import.types.location.path,
|
|
380
378
|
items: [type, create.type, update.type],
|
|
381
379
|
});
|
|
382
380
|
imports.addImport({
|
|
383
|
-
from: schemaMeta.
|
|
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.
|
|
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.
|
|
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;
|