@postxl/generator 0.44.3 → 0.44.5
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 +8 -9
- package/dist/generators/enums/react.generator.js +1 -1
- package/dist/generators/indices/businesslogic-update-module.generator.js +1 -1
- package/dist/generators/indices/businesslogic-view-module.generator.js +1 -1
- package/dist/generators/indices/data-types.generator.js +4 -3
- package/dist/generators/indices/datamock-module.generator.js +3 -3
- package/dist/generators/indices/datamocker.generator.js +5 -4
- package/dist/generators/indices/datamodule.generator.js +3 -3
- package/dist/generators/indices/dataservice.generator.js +5 -4
- package/dist/generators/indices/dispatcher-service.generator.js +4 -3
- package/dist/generators/indices/importexport-convert-import-functions.generator.js +29 -24
- package/dist/generators/indices/importexport-exporter-class.generator.js +4 -3
- package/dist/generators/indices/importexport-import-service.generator.js +27 -12
- package/dist/generators/indices/importexport-types.generator.js +9 -4
- package/dist/generators/indices/stubs.generator.js +2 -2
- package/dist/generators/indices/testdata-service.generator.js +5 -2
- package/dist/generators/models/businesslogic-update.generator.js +11 -10
- package/dist/generators/models/businesslogic-view.generator.js +4 -3
- package/dist/generators/models/importexport-decoder.generator.d.ts +2 -1
- package/dist/generators/models/importexport-decoder.generator.js +20 -19
- package/dist/generators/models/react.generator/context.generator.js +1 -1
- package/dist/generators/models/react.generator/index.js +2 -8
- package/dist/generators/models/react.generator/library.generator.d.ts +0 -2
- package/dist/generators/models/react.generator/library.generator.js +3 -5
- package/dist/generators/models/react.generator/lookup.generator.js +3 -6
- package/dist/generators/models/react.generator/modals.generator.js +4 -4
- package/dist/generators/models/repository.generator.js +26 -17
- package/dist/generators/models/route.generator.js +3 -2
- package/dist/generators/models/seed.generator.js +5 -4
- package/dist/generators/models/stub.generator.js +7 -2
- package/dist/generators/models/types.generator.js +7 -3
- package/dist/lib/exports.d.ts +2 -2
- package/dist/lib/imports.d.ts +12 -3
- package/dist/lib/imports.js +47 -15
- package/dist/lib/meta.d.ts +163 -88
- package/dist/lib/meta.js +68 -23
- package/dist/lib/schema/schema.d.ts +15 -18
- package/dist/lib/schema/types.d.ts +35 -5
- package/dist/lib/schema/types.js +20 -2
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/types.js +1 -1
- package/dist/prisma/parse.js +7 -9
- package/package.json +1 -1
package/dist/generator.js
CHANGED
|
@@ -82,7 +82,6 @@ const client_path_1 = require("./prisma/client-path");
|
|
|
82
82
|
const parse_1 = require("./prisma/parse");
|
|
83
83
|
const CONFIG_SCHEMA = zod_1.z
|
|
84
84
|
.object({
|
|
85
|
-
project: zod_1.z.string(),
|
|
86
85
|
pathToDataLib: zod_1.z.string().optional(),
|
|
87
86
|
pathToCypress: zod_1.z.string().optional(),
|
|
88
87
|
pathToE2ELib: zod_1.z.string().optional(),
|
|
@@ -106,7 +105,6 @@ const CONFIG_SCHEMA = zod_1.z
|
|
|
106
105
|
})
|
|
107
106
|
.transform((s) => {
|
|
108
107
|
return {
|
|
109
|
-
project: s.project,
|
|
110
108
|
paths: {
|
|
111
109
|
dataLibPath: (0, types_1.toPath)(s.pathToDataLib || 'repos'),
|
|
112
110
|
cypressPath: (0, types_1.toPath)(s.pathToCypress || './e2e/cypress/'),
|
|
@@ -187,11 +185,11 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
187
185
|
generated.write(`/${meta.data.stubFilePath}.ts`, (0, stub_generator_1.generateStub)({ model, meta }));
|
|
188
186
|
generated.write(`/${meta.data.repository.filePath}.ts`, (0, repository_generator_1.generateRepository)({ model, meta }));
|
|
189
187
|
generated.write(`/${meta.data.mockRepository.filePath}.ts`, (0, repository_generator_1.generateMockRepository)({ model, meta }));
|
|
190
|
-
generated.write(`/${meta.
|
|
188
|
+
generated.write(`/${meta.e2e.dataMockerStubFilePath}.ts`, (0, stub_generator_1.generateStub)({ model, meta }));
|
|
191
189
|
}
|
|
192
190
|
// Import-Export
|
|
193
191
|
if (!config.disableGenerators.importExport) {
|
|
194
|
-
generated.write(`/${meta.importExport.decoder.filePath}.ts`, (0, importexport_decoder_generator_1.generateModelImportExportDecoder)({ model, meta }));
|
|
192
|
+
generated.write(`/${meta.importExport.decoder.filePath}.ts`, (0, importexport_decoder_generator_1.generateModelImportExportDecoder)({ model, meta, schemaMeta: (0, meta_1.getSchemaMetadata)({ config }) }));
|
|
195
193
|
}
|
|
196
194
|
// Business Logic
|
|
197
195
|
if (!config.disableGenerators.businessLogic) {
|
|
@@ -224,10 +222,10 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
224
222
|
generated.write(`/${meta.data.dataMockModuleFilePath}.ts`, (0, datamock_module_generator_1.generateDataMockModule)({ models, meta }));
|
|
225
223
|
generated.write(`/${meta.data.dataModuleFilePath}.ts`, (0, datamodule_generator_1.generateDataModule)({ models, meta }));
|
|
226
224
|
generated.write(`/${meta.data.dataService.filePath}.ts`, (0, dataservice_generator_1.generateDataService)({ models, meta }));
|
|
227
|
-
generated.write(`/${meta.data.dataMockerFilePath}.ts`, (0, datamocker_generator_1.generateDataMocker)({ models, meta }));
|
|
228
|
-
generated.write(`/${meta.data.selectorsFilePath}.ts`, (0, selectors_generator_1.generateSelectors)());
|
|
229
225
|
generated.write(`/${meta.data.testDataServiceFilePath}.ts`, (0, testdata_service_generator_1.generateTestDataService)({ models, meta }));
|
|
230
|
-
generated.write(`/${meta.
|
|
226
|
+
generated.write(`/${meta.e2e.dataMocker.filePath}.ts`, (0, datamocker_generator_1.generateDataMocker)({ models, meta }));
|
|
227
|
+
generated.write(`/${meta.e2e.selectorsFilePath}.ts`, (0, selectors_generator_1.generateSelectors)());
|
|
228
|
+
generated.write(`/${meta.e2e.dataMocker.stubIndexFilePath}.ts`, (0, stubs_generator_1.generateDataMockerStubsIndex)({ models, meta }));
|
|
231
229
|
generated.write(`/${meta.data.repository.constFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesArray)({ models, meta }));
|
|
232
230
|
generated.write(`/${meta.data.repository.indexFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesIndex)({ models, meta }));
|
|
233
231
|
generated.write(`/${meta.data.stubIndexFilePath}.ts`, (0, stubs_generator_1.generateStubsIndex)({ models, meta }));
|
|
@@ -272,6 +270,7 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
272
270
|
// -------------------------------------------------------------------------
|
|
273
271
|
// Add disclaimer and format.
|
|
274
272
|
yield generated.transformUTF8Files((path, content) => `${DISCLAIMER}\n${content}`);
|
|
273
|
+
// Important: the eslint config provided here must match the .eslintrc files in the template!
|
|
275
274
|
const lintResult = yield generated.lintUTF8Files({
|
|
276
275
|
fix: true,
|
|
277
276
|
useEslintrc: false,
|
|
@@ -306,11 +305,11 @@ function generate({ models, enums, config, prismaClientPath, logger, }) {
|
|
|
306
305
|
// Side effect imports.
|
|
307
306
|
['^\\u0000'],
|
|
308
307
|
// Any packages that starts with an @ but not libraries we defined in tsconfig.json:
|
|
309
|
-
['^@(?!(
|
|
308
|
+
['^@(?!(postxl|assets|backend|hooks|components|i18n|lib))'],
|
|
310
309
|
// Any other package.
|
|
311
310
|
['^'],
|
|
312
311
|
// Internal PXL packages.
|
|
313
|
-
['^(@
|
|
312
|
+
['^(@postxl|@assets|@backend|@hooks|@components|@i18n|@lib)(/.*|$)'],
|
|
314
313
|
// Parent imports. Put `..` last.
|
|
315
314
|
['^\\.\\.(?!/?$)', '^\\.\\./?$'],
|
|
316
315
|
// Other relative imports. Put same-folder imports and `.` last.
|
|
@@ -20,7 +20,7 @@ exports.generateEnumReactComponents = generateEnumReactComponents;
|
|
|
20
20
|
* Utility function that generates the select component for a given enumerator.
|
|
21
21
|
*/
|
|
22
22
|
function generateEnumSelect({ enumerator, meta }) {
|
|
23
|
-
const imports = imports_1.ImportsGenerator.from(meta.react.folderPath).
|
|
23
|
+
const imports = imports_1.ImportsGenerator.from(meta.react.folderPath).addTypeImport({
|
|
24
24
|
items: [enumerator.tsTypeName],
|
|
25
25
|
from: meta.types.importPath,
|
|
26
26
|
});
|
|
@@ -25,7 +25,7 @@ function generateBusinessLogicUpdateModule({ models, meta }) {
|
|
|
25
25
|
}
|
|
26
26
|
const moduleName = meta.businessLogic.update.moduleName;
|
|
27
27
|
return /* ts */ `
|
|
28
|
-
import { DynamicModule } from '
|
|
28
|
+
import { DynamicModule } from '@backend/common'
|
|
29
29
|
|
|
30
30
|
${imports.generate()}
|
|
31
31
|
|
|
@@ -24,7 +24,7 @@ function generateBusinessLogicViewModule({ models, meta }) {
|
|
|
24
24
|
}
|
|
25
25
|
const moduleName = meta.businessLogic.view.moduleName;
|
|
26
26
|
return /* ts */ `
|
|
27
|
-
import { DynamicModule } from '
|
|
27
|
+
import { DynamicModule } from '@backend/common'
|
|
28
28
|
|
|
29
29
|
${imports.generate()}
|
|
30
30
|
|
|
@@ -10,13 +10,14 @@ function generateDataTypes({ models, meta }) {
|
|
|
10
10
|
const { types } = meta.data;
|
|
11
11
|
const imports = imports_1.ImportsGenerator.from(types.filePath);
|
|
12
12
|
const dto = meta.types.dto;
|
|
13
|
-
imports.
|
|
14
|
-
|
|
13
|
+
imports.addTypeImport({
|
|
14
|
+
from: meta.types.importPath,
|
|
15
|
+
items: [dto.create, dto.update, dto.upsert, dto.genericModel, dto.idType],
|
|
15
16
|
});
|
|
16
17
|
const modelTypes = [];
|
|
17
18
|
for (const model of models) {
|
|
18
19
|
const modelMeta = (0, meta_1.getModelMetadata)({ model });
|
|
19
|
-
imports.
|
|
20
|
+
imports.addTypeImport({
|
|
20
21
|
items: [modelMeta.types.typeName, modelMeta.types.brandedIdType],
|
|
21
22
|
from: modelMeta.types.importPath,
|
|
22
23
|
});
|
|
@@ -39,7 +39,7 @@ function generateDataMockModule({ models, meta }) {
|
|
|
39
39
|
[meta.actions.importPath]: [meta.actions.actionExecution.mock],
|
|
40
40
|
});
|
|
41
41
|
for (const { model, meta } of mm) {
|
|
42
|
-
imports.
|
|
42
|
+
imports.addTypeImport({ items: [model.typeName], from: meta.types.importPath });
|
|
43
43
|
imports.addImport({ items: [meta.data.repository.className], from: meta.data.repository.filePath });
|
|
44
44
|
imports.addImport({ items: [meta.data.mockRepository.className], from: meta.data.mockRepository.filePath });
|
|
45
45
|
}
|
|
@@ -56,8 +56,8 @@ function generateDataMockModule({ models, meta }) {
|
|
|
56
56
|
}`)
|
|
57
57
|
.join(', ');
|
|
58
58
|
return /* ts */ `
|
|
59
|
-
import { DynamicModule } from '@
|
|
60
|
-
import { DbModule } from '
|
|
59
|
+
import { DynamicModule } from '@backend/common'
|
|
60
|
+
import { DbModule } from '@backend/db'
|
|
61
61
|
|
|
62
62
|
${imports.generate()}
|
|
63
63
|
|
|
@@ -4,16 +4,17 @@ exports.generateDataMocker = void 0;
|
|
|
4
4
|
const imports_1 = require("../../lib/imports");
|
|
5
5
|
const meta_1 = require("../../lib/meta");
|
|
6
6
|
const schema_1 = require("../../lib/schema/schema");
|
|
7
|
+
const types_1 = require("../../lib/schema/types");
|
|
7
8
|
/**
|
|
8
9
|
* Generates a generic data mocker class.
|
|
9
10
|
*/
|
|
10
11
|
function generateDataMocker({ models, meta: schemaMeta }) {
|
|
11
12
|
const modelMetas = models.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }));
|
|
12
|
-
const imports = imports_1.ImportsGenerator.from(schemaMeta.
|
|
13
|
+
const imports = imports_1.ImportsGenerator.from(schemaMeta.e2e.dataMocker.filePath);
|
|
13
14
|
for (const { model, meta } of modelMetas) {
|
|
14
15
|
imports.addImports({
|
|
15
|
-
[meta.types.importPath]: [model.typeName],
|
|
16
|
-
[schemaMeta.
|
|
16
|
+
[meta.types.importPath]: [(0, types_1.toAnnotatedTypeName)(model.typeName)],
|
|
17
|
+
[schemaMeta.e2e.dataMocker.stubImportPath]: [meta.data.stubGenerationFnName],
|
|
17
18
|
});
|
|
18
19
|
}
|
|
19
20
|
const publicVariables = modelMetas
|
|
@@ -25,7 +26,7 @@ function generateDataMocker({ models, meta: schemaMeta }) {
|
|
|
25
26
|
const addDataFunctions = modelMetas.map(({ model, meta }) => generateAddDataFunction(model, meta)).join('\n');
|
|
26
27
|
return `
|
|
27
28
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
28
|
-
import type { MockData } from '@
|
|
29
|
+
import type { MockData } from '@backend/data'
|
|
29
30
|
|
|
30
31
|
${imports.generate()}
|
|
31
32
|
|
|
@@ -22,9 +22,9 @@ function generateDataModule({ models, meta }) {
|
|
|
22
22
|
return /* ts */ `
|
|
23
23
|
import { FactoryProvider } from '@nestjs/common'
|
|
24
24
|
|
|
25
|
-
import { DynamicModule } from '
|
|
26
|
-
import { DbModule, DbService } from '
|
|
27
|
-
import { E2EConfig } from '
|
|
25
|
+
import { DynamicModule } from '@backend/common'
|
|
26
|
+
import { DbModule, DbService } from '@backend/db'
|
|
27
|
+
import { E2EConfig } from '@backend/e2e'
|
|
28
28
|
|
|
29
29
|
${imports.generate()}
|
|
30
30
|
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateDataService = void 0;
|
|
4
4
|
const imports_1 = require("../../lib/imports");
|
|
5
5
|
const meta_1 = require("../../lib/meta");
|
|
6
|
+
const types_1 = require("../../lib/schema/types");
|
|
6
7
|
/**
|
|
7
8
|
* Generates a generic data service object that may be used on the server to access database.
|
|
8
9
|
*/
|
|
@@ -25,9 +26,9 @@ function generateDataService({ models, meta }) {
|
|
|
25
26
|
const isEmptyChecks = mm.map(({ meta }) => `(await this.${meta.data.dataServiceName}.count()) === 0`).join(' &&');
|
|
26
27
|
// Building blocks for bulk mutations
|
|
27
28
|
imports.addImports({
|
|
28
|
-
[meta.types.importPath]: [meta.types.dto.create, meta.types.dto.update],
|
|
29
|
-
[meta.data.repository.typeFilePath]: [meta.data.repository.typeName],
|
|
30
|
-
[meta.data.types.filePath]: [meta.data.types.bulkMutation],
|
|
29
|
+
[meta.types.importPath]: [(0, types_1.toAnnotatedTypeName)(meta.types.dto.create), (0, types_1.toAnnotatedTypeName)(meta.types.dto.update)],
|
|
30
|
+
[meta.data.repository.typeFilePath]: [(0, types_1.toAnnotatedTypeName)(meta.data.repository.typeName)],
|
|
31
|
+
[meta.data.types.filePath]: [(0, types_1.toAnnotatedTypeName)(meta.data.types.bulkMutation)],
|
|
31
32
|
[meta.actions.importPath]: [meta.actions.actionExecution.interface],
|
|
32
33
|
});
|
|
33
34
|
const creates = [];
|
|
@@ -44,7 +45,7 @@ function generateDataService({ models, meta }) {
|
|
|
44
45
|
return /* ts */ `
|
|
45
46
|
import { Injectable, Logger } from '@nestjs/common'
|
|
46
47
|
|
|
47
|
-
import { format, mapValues, pluralize } from '@
|
|
48
|
+
import { format, mapValues, pluralize } from '@backend/common'
|
|
48
49
|
|
|
49
50
|
${imports.generate()}
|
|
50
51
|
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateActionsDispatcherService = void 0;
|
|
4
4
|
const imports_1 = require("../../lib/imports");
|
|
5
5
|
const meta_1 = require("../../lib/meta");
|
|
6
|
+
const types_1 = require("../../lib/schema/types");
|
|
6
7
|
/**
|
|
7
8
|
* Generates the action dispatcher service.
|
|
8
9
|
*/
|
|
@@ -11,7 +12,7 @@ function generateActionsDispatcherService({ models, meta }) {
|
|
|
11
12
|
[meta.seed.importPath]: [meta.seed.serviceClassName],
|
|
12
13
|
[meta.importExport.importPath]: [meta.importExport.importService.name],
|
|
13
14
|
[meta.businessLogic.update.importPath]: [meta.businessLogic.update.serviceClassName],
|
|
14
|
-
[meta.types.importPath]: meta.config.userType,
|
|
15
|
+
[meta.types.importPath]: (0, types_1.toAnnotatedTypeName)(meta.config.userType),
|
|
15
16
|
});
|
|
16
17
|
const dataLoader = [];
|
|
17
18
|
for (const model of models) {
|
|
@@ -21,8 +22,8 @@ function generateActionsDispatcherService({ models, meta }) {
|
|
|
21
22
|
return /* ts */ `
|
|
22
23
|
import { Injectable } from '@nestjs/common'
|
|
23
24
|
|
|
24
|
-
import { ExhaustiveSwitchCheck } from '@
|
|
25
|
-
import { DbService } from '@
|
|
25
|
+
import { ExhaustiveSwitchCheck } from '@backend/common'
|
|
26
|
+
import { DbService } from '@backend/db'
|
|
26
27
|
|
|
27
28
|
${imports.generate()}
|
|
28
29
|
|
|
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateImportExportConvertImportFunctions = void 0;
|
|
4
4
|
const imports_1 = require("../../lib/imports");
|
|
5
5
|
const meta_1 = require("../../lib/meta");
|
|
6
|
-
const types_1 = require("../../lib/types");
|
|
6
|
+
const types_1 = require("../../lib/schema/types");
|
|
7
|
+
const types_2 = require("../../lib/types");
|
|
7
8
|
/**
|
|
8
9
|
* Generates the Exporter class for the Import-Export module
|
|
9
10
|
*/
|
|
@@ -14,14 +15,16 @@ function generateImportExportConvertImportFunctions({ models, meta, }) {
|
|
|
14
15
|
const { delta } = types;
|
|
15
16
|
const imports = imports_1.ImportsGenerator.from(meta.importExport.converterFunctions.filePath);
|
|
16
17
|
imports.addImports({
|
|
17
|
-
[meta.importExport.decoder.fullDecoderFilePath]: [
|
|
18
|
+
[meta.importExport.decoder.fullDecoderFilePath]: [
|
|
19
|
+
(0, types_1.toAnnotatedTypeName)(meta.importExport.decoder.decodedPXLModelDataTypeName),
|
|
20
|
+
],
|
|
18
21
|
[meta.data.importPath]: [
|
|
19
|
-
meta.data.dataMockDataType,
|
|
20
|
-
meta.data.types.bulkMutation,
|
|
21
|
-
meta.data.types.bulkMutationForModel,
|
|
22
|
+
(0, types_1.toAnnotatedTypeName)(meta.data.dataMockDataType),
|
|
23
|
+
(0, types_1.toAnnotatedTypeName)(meta.data.types.bulkMutation),
|
|
24
|
+
(0, types_1.toAnnotatedTypeName)(meta.data.types.bulkMutationForModel),
|
|
22
25
|
],
|
|
23
|
-
[meta.types.importPath]: [dto.genericModel, dto.idType],
|
|
24
|
-
[types.filePath]: [types.delta, types.delta_Model.type],
|
|
26
|
+
[meta.types.importPath]: [(0, types_1.toAnnotatedTypeName)(dto.genericModel), (0, types_1.toAnnotatedTypeName)(dto.idType)],
|
|
27
|
+
[types.filePath]: [(0, types_1.toAnnotatedTypeName)(types.delta), (0, types_1.toAnnotatedTypeName)(types.delta_Model.type)],
|
|
25
28
|
});
|
|
26
29
|
const importConverterBlocks = [];
|
|
27
30
|
const deltaConverterBlocks = [];
|
|
@@ -39,7 +42,7 @@ function generateImportExportConvertImportFunctions({ models, meta, }) {
|
|
|
39
42
|
// logState({ state, nextStep, lastStep: 'updateModelState' })
|
|
40
43
|
}
|
|
41
44
|
return /* ts */ `
|
|
42
|
-
import { ExhaustiveSwitchCheck } from '@
|
|
45
|
+
import { ExhaustiveSwitchCheck } from '@backend/common'
|
|
43
46
|
${imports.generate()}
|
|
44
47
|
|
|
45
48
|
/**
|
|
@@ -200,7 +203,7 @@ function assignModelToState({ state, modelNextStep, fieldsGrouped, }) {
|
|
|
200
203
|
state.canBeCreatedFullyLinked.set(fieldsGrouped.model.name, fieldsGrouped);
|
|
201
204
|
break;
|
|
202
205
|
default:
|
|
203
|
-
throw new
|
|
206
|
+
throw new types_2.ExhaustiveSwitchCheck(modelNextStep);
|
|
204
207
|
}
|
|
205
208
|
}
|
|
206
209
|
function initializeModelsState(models) {
|
|
@@ -270,7 +273,7 @@ function generateBlocks({ state, nextStep, imports, iteration, schemaMeta, }) {
|
|
|
270
273
|
case 'link':
|
|
271
274
|
return generateBulkMutationBlockLink({ state, imports, iteration, schemaMeta });
|
|
272
275
|
default:
|
|
273
|
-
throw new
|
|
276
|
+
throw new types_2.ExhaustiveSwitchCheck(nextStep);
|
|
274
277
|
}
|
|
275
278
|
}
|
|
276
279
|
function copyModelState(state) {
|
|
@@ -291,8 +294,9 @@ function generateBulkMutationBlockCreateFullyLinked({ state, iteration, imports,
|
|
|
291
294
|
const modelNames = [];
|
|
292
295
|
for (const [, fieldsGrouped] of models) {
|
|
293
296
|
const modelMeta = (0, meta_1.getModelMetadata)({ model: fieldsGrouped.model });
|
|
294
|
-
imports.
|
|
295
|
-
|
|
297
|
+
imports.addTypeImport({
|
|
298
|
+
from: schemaMeta.types.importPath,
|
|
299
|
+
items: [modelMeta.types.dto.create],
|
|
296
300
|
});
|
|
297
301
|
const { block: importConvertBlock } = generateModelCreateBlock({ fieldsGrouped, modelMeta });
|
|
298
302
|
importConvertBlocks.push(importConvertBlock);
|
|
@@ -321,7 +325,7 @@ function generateBulkMutationBlockCreatePartiallyLinked({ state, imports, iterat
|
|
|
321
325
|
const modelNames = [];
|
|
322
326
|
for (const [, fieldsGrouped] of models) {
|
|
323
327
|
const modelMeta = (0, meta_1.getModelMetadata)({ model: fieldsGrouped.model });
|
|
324
|
-
imports.
|
|
328
|
+
imports.addTypeImport({
|
|
325
329
|
from: modelMeta.types.importPath,
|
|
326
330
|
items: [modelMeta.types.dto.create],
|
|
327
331
|
});
|
|
@@ -370,16 +374,17 @@ function generateDeltaBlock({ fieldsGrouped, modelMeta, schemaMeta, imports, })
|
|
|
370
374
|
});
|
|
371
375
|
const genericsDefinition = `${modelMeta.types.typeName}, ${modelMeta.types.brandedIdType}`;
|
|
372
376
|
const { type, create, update } = schemaMeta.importExport.types.delta_Model;
|
|
373
|
-
imports.
|
|
374
|
-
|
|
375
|
-
[
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
377
|
+
imports.addTypeImport({
|
|
378
|
+
from: modelMeta.types.importPath,
|
|
379
|
+
items: [modelMeta.types.typeName, modelMeta.types.brandedIdType],
|
|
380
|
+
});
|
|
381
|
+
imports.addTypeImport({
|
|
382
|
+
from: schemaMeta.importExport.types.filePath,
|
|
383
|
+
items: [type, create.type, update.type],
|
|
384
|
+
});
|
|
385
|
+
imports.addImport({
|
|
386
|
+
from: schemaMeta.importExport.types.filePath,
|
|
387
|
+
items: [create.typeGuard, update.typeGuard],
|
|
383
388
|
});
|
|
384
389
|
return /* ts */ `
|
|
385
390
|
${modelMeta.seed.constantName}: {
|
|
@@ -407,7 +412,7 @@ function generateBulkMutationBlockLink({ state, imports, iteration, schemaMeta,
|
|
|
407
412
|
const modelNames = [];
|
|
408
413
|
for (const [, fieldsGrouped] of models) {
|
|
409
414
|
const modelMeta = (0, meta_1.getModelMetadata)({ model: fieldsGrouped.model });
|
|
410
|
-
imports.
|
|
415
|
+
imports.addTypeImport({
|
|
411
416
|
from: modelMeta.types.importPath,
|
|
412
417
|
items: [modelMeta.types.dto.update],
|
|
413
418
|
});
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateImportExportExporterClass = void 0;
|
|
4
4
|
const imports_1 = require("../../lib/imports");
|
|
5
5
|
const meta_1 = require("../../lib/meta");
|
|
6
|
+
const types_1 = require("../../lib/schema/types");
|
|
6
7
|
/**
|
|
7
8
|
* Generates the Exporter class for the Import-Export module
|
|
8
9
|
*/
|
|
@@ -12,7 +13,7 @@ function generateImportExportExporterClass({ models, meta }) {
|
|
|
12
13
|
[meta.businessLogic.view.importPath]: [meta.businessLogic.view.serviceClassName],
|
|
13
14
|
[meta.importExport.decoder.fullDecoderFilePath]: [
|
|
14
15
|
meta.importExport.decoder.fullEncoderFunctionName,
|
|
15
|
-
meta.importExport.decoder.encodedExcelDataTypeName,
|
|
16
|
+
(0, types_1.toAnnotatedTypeName)(meta.importExport.decoder.encodedExcelDataTypeName),
|
|
16
17
|
],
|
|
17
18
|
});
|
|
18
19
|
const typeExports = [];
|
|
@@ -23,7 +24,7 @@ function generateImportExportExporterClass({ models, meta }) {
|
|
|
23
24
|
const addAllCalls = [];
|
|
24
25
|
for (const model of models) {
|
|
25
26
|
const modelMeta = (0, meta_1.getModelMetadata)({ model });
|
|
26
|
-
imports.
|
|
27
|
+
imports.addTypeImport({
|
|
27
28
|
from: modelMeta.types.importPath,
|
|
28
29
|
items: [modelMeta.types.brandedIdType, modelMeta.types.typeName],
|
|
29
30
|
});
|
|
@@ -70,7 +71,7 @@ function generateImportExportExporterClass({ models, meta }) {
|
|
|
70
71
|
return /* ts */ `
|
|
71
72
|
import { Logger } from '@nestjs/common'
|
|
72
73
|
|
|
73
|
-
import { mapValues } from '@
|
|
74
|
+
import { mapValues } from '@backend/common'
|
|
74
75
|
${imports.generate()}
|
|
75
76
|
|
|
76
77
|
/**
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateImportExportImportService = void 0;
|
|
4
4
|
const imports_1 = require("../../lib/imports");
|
|
5
5
|
const meta_1 = require("../../lib/meta");
|
|
6
|
+
const types_1 = require("../../lib/schema/types");
|
|
6
7
|
const string_1 = require("../../lib/utils/string");
|
|
7
8
|
/**
|
|
8
9
|
* Generates the Exporter class for the Import-Export module
|
|
@@ -15,18 +16,26 @@ function generateImportExportImportService({ models, meta }) {
|
|
|
15
16
|
const { nonUnique, invalidReference, invalidType, isRequiredDependency, missingField } = errors;
|
|
16
17
|
const { dto } = meta.types;
|
|
17
18
|
imports.addImports({
|
|
18
|
-
[meta.data.importPath]: [meta.data.dataService.class, meta.data.types.bulkMutation],
|
|
19
|
-
[meta.types.importPath]: [
|
|
19
|
+
[meta.data.importPath]: [meta.data.dataService.class, (0, types_1.toAnnotatedTypeName)(meta.data.types.bulkMutation)],
|
|
20
|
+
[meta.types.importPath]: [
|
|
21
|
+
(0, types_1.toAnnotatedTypeName)(dto.genericModel),
|
|
22
|
+
(0, types_1.toAnnotatedTypeName)(dto.idType),
|
|
23
|
+
(0, types_1.toAnnotatedTypeName)(dto.update),
|
|
24
|
+
],
|
|
20
25
|
[meta.actions.importPath]: [meta.actions.actionExecution.interface, meta.actions.dispatcherService.class],
|
|
21
|
-
[types.filePath]: [
|
|
22
|
-
|
|
26
|
+
[types.filePath]: [
|
|
27
|
+
(0, types_1.toAnnotatedTypeName)(delta_Fields),
|
|
28
|
+
(0, types_1.toAnnotatedTypeName)(delta_Model.type),
|
|
29
|
+
(0, types_1.toAnnotatedTypeName)(delta),
|
|
30
|
+
],
|
|
31
|
+
[decoder.fullDecoderFilePath]: [(0, types_1.toAnnotatedTypeName)(decoder.decodedPXLModelDataTypeName)],
|
|
23
32
|
[converterFunctions.filePath]: [converterFunctions.deltaToBulkMutations],
|
|
24
33
|
});
|
|
25
34
|
const resultAssignments = [];
|
|
26
35
|
const detectDeltaFunctions = [];
|
|
27
36
|
for (const model of models) {
|
|
28
37
|
const modelMeta = (0, meta_1.getModelMetadata)({ model });
|
|
29
|
-
imports.
|
|
38
|
+
imports.addTypeImport({
|
|
30
39
|
from: modelMeta.types.importPath,
|
|
31
40
|
items: [modelMeta.types.typeName, modelMeta.types.brandedIdType],
|
|
32
41
|
});
|
|
@@ -35,7 +44,7 @@ function generateImportExportImportService({ models, meta }) {
|
|
|
35
44
|
}
|
|
36
45
|
return /* ts */ `
|
|
37
46
|
import { Injectable } from '@nestjs/common'
|
|
38
|
-
import { ExhaustiveSwitchCheck } from '@
|
|
47
|
+
import { ExhaustiveSwitchCheck } from '@backend/common'
|
|
39
48
|
|
|
40
49
|
${imports.generate()}
|
|
41
50
|
|
|
@@ -438,7 +447,7 @@ exports.generateImportExportImportService = generateImportExportImportService;
|
|
|
438
447
|
function generateDetectDeltaFunction({ model, modelMeta, models, schemaMeta, imports, }) {
|
|
439
448
|
const { types } = schemaMeta.importExport;
|
|
440
449
|
const { delta_Model } = types;
|
|
441
|
-
imports.
|
|
450
|
+
imports.addTypeImport({
|
|
442
451
|
from: types.filePath,
|
|
443
452
|
items: [modelMeta.importExport.delta_Model_Errors],
|
|
444
453
|
});
|
|
@@ -460,7 +469,10 @@ function generateDetectDeltaFunction({ model, modelMeta, models, schemaMeta, imp
|
|
|
460
469
|
}
|
|
461
470
|
if (field.kind === 'scalar') {
|
|
462
471
|
if (field.isUnique) {
|
|
463
|
-
imports.
|
|
472
|
+
imports.addTypeImport({
|
|
473
|
+
from: schemaMeta.importExport.types.filePath,
|
|
474
|
+
items: [delta_Model.errors.nonUnique.type],
|
|
475
|
+
});
|
|
464
476
|
const getByName = `getBy${(0, string_1.toPascalCase)(fieldName)}`;
|
|
465
477
|
sharedValidations.push(`this.validateUniqueField({
|
|
466
478
|
item,
|
|
@@ -469,7 +481,7 @@ function generateDetectDeltaFunction({ model, modelMeta, models, schemaMeta, imp
|
|
|
469
481
|
})`);
|
|
470
482
|
}
|
|
471
483
|
if (field.validation && field.validation.type === 'int') {
|
|
472
|
-
imports.
|
|
484
|
+
imports.addTypeImport({
|
|
473
485
|
from: schemaMeta.importExport.types.filePath,
|
|
474
486
|
items: [delta_Model.errors.invalidType.type],
|
|
475
487
|
});
|
|
@@ -478,7 +490,7 @@ function generateDetectDeltaFunction({ model, modelMeta, models, schemaMeta, imp
|
|
|
478
490
|
}
|
|
479
491
|
else if (field.kind === 'relation') {
|
|
480
492
|
const relatedModelMeta = (0, meta_1.getModelMetadata)({ model: field.relationToModel });
|
|
481
|
-
imports.
|
|
493
|
+
imports.addTypeImport({
|
|
482
494
|
from: schemaMeta.importExport.types.filePath,
|
|
483
495
|
items: [delta_Model.errors.invalidReference.type],
|
|
484
496
|
});
|
|
@@ -501,7 +513,7 @@ function generateDetectDeltaFunction({ model, modelMeta, models, schemaMeta, imp
|
|
|
501
513
|
!relatedField.isRequired) {
|
|
502
514
|
continue;
|
|
503
515
|
}
|
|
504
|
-
imports.
|
|
516
|
+
imports.addTypeImport({
|
|
505
517
|
from: schemaMeta.importExport.types.filePath,
|
|
506
518
|
items: [delta_Model.errors.isRequiredDependency.type],
|
|
507
519
|
});
|
|
@@ -519,7 +531,10 @@ function generateDetectDeltaFunction({ model, modelMeta, models, schemaMeta, imp
|
|
|
519
531
|
}
|
|
520
532
|
}
|
|
521
533
|
if (requiredFields.length > 0) {
|
|
522
|
-
imports.
|
|
534
|
+
imports.addTypeImport({
|
|
535
|
+
from: schemaMeta.importExport.types.filePath,
|
|
536
|
+
items: [delta_Model.errors.missingField.type],
|
|
537
|
+
});
|
|
523
538
|
}
|
|
524
539
|
const requiredFieldsValidation = requiredFields.length > 0
|
|
525
540
|
? `...this.validateRequiredFields({item, fieldNames: [${requiredFields.join(',')}]}),`
|
|
@@ -10,15 +10,20 @@ function generateImportExportTypes({ models, meta }) {
|
|
|
10
10
|
const { types } = meta.importExport;
|
|
11
11
|
const imports = imports_1.ImportsGenerator.from(types.filePath);
|
|
12
12
|
const dto = meta.types.dto;
|
|
13
|
-
imports
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
imports
|
|
14
|
+
.addTypeImport({
|
|
15
|
+
from: meta.types.importPath,
|
|
16
|
+
items: [dto.create, dto.update, dto.genericModel, dto.idType],
|
|
17
|
+
})
|
|
18
|
+
.addTypeImport({
|
|
19
|
+
from: meta.data.importPath,
|
|
20
|
+
items: [meta.data.types.bulkMutation],
|
|
16
21
|
});
|
|
17
22
|
const deltaTypes = [];
|
|
18
23
|
const errorTypes = [];
|
|
19
24
|
for (const model of models) {
|
|
20
25
|
const modelMeta = (0, meta_1.getModelMetadata)({ model });
|
|
21
|
-
imports.
|
|
26
|
+
imports.addTypeImport({
|
|
22
27
|
items: [modelMeta.types.typeName, modelMeta.types.brandedIdType],
|
|
23
28
|
from: modelMeta.types.importPath,
|
|
24
29
|
});
|
|
@@ -19,10 +19,10 @@ exports.generateStubsIndex = generateStubsIndex;
|
|
|
19
19
|
* Generates an index file that exports all stubs for the data mocker.
|
|
20
20
|
*/
|
|
21
21
|
function generateDataMockerStubsIndex({ models, meta }) {
|
|
22
|
-
const exports = exports_1.ExportsGenerator.from(meta.
|
|
22
|
+
const exports = exports_1.ExportsGenerator.from(meta.e2e.dataMocker.stubIndexFilePath);
|
|
23
23
|
for (const model of models) {
|
|
24
24
|
const meta = (0, meta_1.getModelMetadata)({ model });
|
|
25
|
-
exports.exportEverythingFromPath(meta.
|
|
25
|
+
exports.exportEverythingFromPath(meta.e2e.dataMockerStubFilePath);
|
|
26
26
|
}
|
|
27
27
|
return exports.generate();
|
|
28
28
|
}
|
|
@@ -11,7 +11,10 @@ function generateTestDataService({ models, meta: schemaMeta, }) {
|
|
|
11
11
|
const imports = imports_1.ImportsGenerator.from(schemaMeta.data.testDataServiceFilePath);
|
|
12
12
|
imports.addImports({
|
|
13
13
|
[schemaMeta.actions.importPath]: [(0, types_1.toClassName)('ActionExecutionFactory')],
|
|
14
|
-
[schemaMeta.data.importPath]: [
|
|
14
|
+
[schemaMeta.data.importPath]: [
|
|
15
|
+
schemaMeta.data.dataService.class,
|
|
16
|
+
(0, types_1.toAnnotatedTypeName)(schemaMeta.data.dataMockDataType),
|
|
17
|
+
],
|
|
15
18
|
[schemaMeta.importExport.importPath]: [schemaMeta.importExport.converterFunctions.mockDataToBulkMutations],
|
|
16
19
|
[schemaMeta.seed.importPath]: [(0, types_1.toClassName)('createActionSeedData')],
|
|
17
20
|
});
|
|
@@ -30,7 +33,7 @@ function generateTestDataService({ models, meta: schemaMeta, }) {
|
|
|
30
33
|
return /* ts */ `
|
|
31
34
|
import { Injectable, Logger } from '@nestjs/common'
|
|
32
35
|
|
|
33
|
-
import { DbService } from '@
|
|
36
|
+
import { DbService } from '@backend/db'
|
|
34
37
|
${imports.generate()}
|
|
35
38
|
|
|
36
39
|
@Injectable()
|