@postxl/generator 0.38.2 → 0.40.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 (56) hide show
  1. package/dist/generator.js +43 -21
  2. package/dist/generators/enums/types.generator.js +1 -1
  3. package/dist/generators/indices/businesslogic-actiontypes.generator.js +1 -1
  4. package/dist/generators/indices/businesslogic-update-module.generator.js +2 -2
  5. package/dist/generators/indices/businesslogic-update-service.generator.js +1 -1
  6. package/dist/generators/indices/businesslogic-view-module.generator.js +2 -2
  7. package/dist/generators/indices/businesslogic-view-service.generator.js +1 -1
  8. package/dist/generators/indices/{seed-service.generator.d.ts → data-types.generator.d.ts} +2 -2
  9. package/dist/generators/indices/data-types.generator.js +48 -0
  10. package/dist/generators/indices/datamock-module.generator.js +11 -11
  11. package/dist/generators/indices/datamocker.generator.js +1 -1
  12. package/dist/generators/indices/datamodule.generator.js +34 -52
  13. package/dist/generators/indices/dataservice.generator.js +202 -9
  14. package/dist/generators/indices/dispatcher-service.generator.js +20 -10
  15. package/dist/generators/indices/emptydatabasemigration.generator.d.ts +2 -0
  16. package/dist/generators/indices/emptydatabasemigration.generator.js +14 -7
  17. package/dist/generators/indices/importexport-convert-import-functions.generator.d.ts +9 -0
  18. package/dist/generators/indices/importexport-convert-import-functions.generator.js +528 -0
  19. package/dist/generators/indices/importexport-exporter-class.generator.d.ts +9 -0
  20. package/dist/generators/indices/importexport-exporter-class.generator.js +116 -0
  21. package/dist/generators/indices/importexport-import-service.generator.d.ts +9 -0
  22. package/dist/generators/indices/importexport-import-service.generator.js +563 -0
  23. package/dist/generators/indices/{seeddata-type.generator.d.ts → importexport-types.generator.d.ts} +2 -2
  24. package/dist/generators/indices/importexport-types.generator.js +234 -0
  25. package/dist/generators/indices/repositories.generator.js +8 -8
  26. package/dist/generators/indices/seed-migration.generator.js +1 -1
  27. package/dist/generators/indices/seed-template.generator.js +1 -1
  28. package/dist/generators/indices/selectors.generator.d.ts +7 -0
  29. package/dist/generators/indices/selectors.generator.js +82 -0
  30. package/dist/generators/indices/{seed-template-decoder.generator.d.ts → testdata-service.generator.d.ts} +2 -2
  31. package/dist/generators/indices/testdata-service.generator.js +71 -0
  32. package/dist/generators/models/businesslogic-update.generator.js +6 -6
  33. package/dist/generators/models/businesslogic-view.generator.js +4 -4
  34. package/dist/generators/models/importexport-decoder.generator.d.ts +23 -0
  35. package/dist/generators/models/importexport-decoder.generator.js +234 -0
  36. package/dist/generators/models/react.generator/library.generator.js +4 -0
  37. package/dist/generators/models/react.generator/modals.generator.js +35 -8
  38. package/dist/generators/models/repository.generator.js +156 -18
  39. package/dist/generators/models/route.generator.js +2 -2
  40. package/dist/generators/models/stub.generator.js +1 -1
  41. package/dist/generators/models/types.generator.js +1 -1
  42. package/dist/lib/id-collector.d.ts +43 -0
  43. package/dist/lib/id-collector.js +53 -0
  44. package/dist/lib/imports.d.ts +1 -1
  45. package/dist/lib/meta.d.ts +480 -122
  46. package/dist/lib/meta.js +187 -74
  47. package/dist/lib/schema/schema.d.ts +58 -43
  48. package/dist/lib/schema/types.d.ts +63 -12
  49. package/dist/lib/schema/types.js +27 -7
  50. package/dist/lib/utils/string.d.ts +1 -0
  51. package/dist/lib/utils/string.js +1 -0
  52. package/dist/prisma/parse.js +4 -4
  53. package/package.json +2 -2
  54. package/dist/generators/indices/seed-service.generator.js +0 -356
  55. package/dist/generators/indices/seed-template-decoder.generator.js +0 -151
  56. package/dist/generators/indices/seeddata-type.generator.js +0 -42
@@ -1,151 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateSeedTemplateDecoder = 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
- const types_2 = require("../../lib/types");
8
- const string_1 = require("../../lib/utils/string");
9
- // TODO: Remove hardcoded path that seems to be reused in multiple places!
10
- const PXL_COMMON = (0, types_1.toPath)('@pxl/common');
11
- /**
12
- * Creates a decoder for the Seed Excel template.
13
- */
14
- function generateSeedTemplateDecoder({ models, meta }) {
15
- const imports = imports_1.ImportsGenerator.from(meta.seedData.templateDecoderFilePath);
16
- const decoders = [];
17
- const tableDecoders = [];
18
- const renameTransforms = [];
19
- for (const model of [...models].sort((a, b) => a.name.localeCompare(b.name))) {
20
- const modelMeta = (0, meta_1.getModelMetadata)({ model });
21
- decoders.push(generateTableDecoder({ model, meta: modelMeta, imports }));
22
- tableDecoders.push(`${modelMeta.seed.excel.tableName}: ${modelMeta.seed.decoder.decoderName}`);
23
- renameTransforms.push(`${modelMeta.seed.decoder.dataName}: item['${modelMeta.seed.excel.tableName}']`);
24
- }
25
- return `
26
- import * as z from 'zod'
27
-
28
- ${imports.generate()}
29
-
30
- /**
31
- * Helper schema to identify blank Excel cells
32
- */
33
- const nullOrBlankSchema = z.union([z.null(), z.literal('')])
34
-
35
- ${decoders.join('\n')}
36
-
37
- export const ${meta.seedData.templateDecoderName} = z
38
- .object({${tableDecoders.join(',\n')}})
39
- .transform((item) => ({${renameTransforms.join(',\n')}}))
40
- `;
41
- }
42
- exports.generateSeedTemplateDecoder = generateSeedTemplateDecoder;
43
- function generateTableDecoder({ model, meta, imports, }) {
44
- const fieldDecoders = [];
45
- const blankFieldDecoders = [];
46
- const renameTransforms = [];
47
- for (const field of model.fields) {
48
- const fieldMeta = (0, meta_1.getFieldMetadata)({ field });
49
- renameTransforms.push(`${field.name}: item['${fieldMeta.excelColumnName}']`);
50
- blankFieldDecoders.push(`${fieldMeta.excelColumnName}: nullOrBlankSchema`);
51
- switch (field.kind) {
52
- case 'id': {
53
- imports.addImport({ items: [meta.types.toBrandedIdTypeFnName], from: meta.types.importPath });
54
- fieldDecoders.push(`${fieldMeta.excelColumnName}: ${toExcelDecoder({
55
- tsTypeName: field.unbrandedTypeName,
56
- dbTypeName: field.schemaType,
57
- nullable: false,
58
- imports,
59
- })}.transform((id: ${field.unbrandedTypeName}) => ${meta.types.toBrandedIdTypeFnName}(id))`);
60
- break;
61
- }
62
- case 'scalar': {
63
- fieldDecoders.push(`${fieldMeta.excelColumnName}: ${toExcelDecoder({
64
- tsTypeName: field.tsTypeName,
65
- dbTypeName: field.schemaType,
66
- nullable: !field.isRequired,
67
- imports,
68
- })}`);
69
- break;
70
- }
71
- case 'relation': {
72
- const refModel = field.relationToModel;
73
- const refMeta = (0, meta_1.getModelMetadata)({ model: refModel });
74
- imports.addImport({ items: [refMeta.types.toBrandedIdTypeFnName], from: refMeta.types.importPath });
75
- fieldDecoders.push(`${fieldMeta.excelColumnName}: ${toExcelDecoder({
76
- tsTypeName: field.unbrandedTypeName,
77
- dbTypeName: field.schemaType,
78
- nullable: !field.isRequired,
79
- imports,
80
- })}.transform((id: ${field.unbrandedTypeName}${field.isRequired ? '' : '| null'}) => ${field.isRequired ? '' : ' id === null ? null : '}${refMeta.types.toBrandedIdTypeFnName}(id))`);
81
- break;
82
- }
83
- case 'enum': {
84
- fieldDecoders.push(`${fieldMeta.excelColumnName}: z.enum([${field.enumerator.values.map((v) => `'${v}'`).join(', ')}])${field.isRequired ? '' : '.nullable()'}`);
85
- break;
86
- }
87
- default: {
88
- throw new types_2.ExhaustiveSwitchCheck(field);
89
- }
90
- }
91
- }
92
- const blankSchemaName = `blank${(0, string_1.capitalize)(meta.seed.decoder.schemaName)}`;
93
- return `
94
- /**
95
- * The schema for the ${model.name} table
96
- */
97
- const ${meta.seed.decoder.schemaName} = z
98
- .object({${fieldDecoders.join(',\n')}})
99
- .transform((item) => ({${renameTransforms.join(',\n')}}))
100
-
101
- /** The schema to identify blank rows in the ${model.name} table */
102
- const ${blankSchemaName} = z
103
- .object({${blankFieldDecoders.join(',\n')}})
104
- .transform(() => undefined)
105
-
106
- /**
107
- * The type of the ${model.name} table
108
- */
109
- export type ${meta.seed.decoder.decoderTypeName} = z.infer<typeof ${meta.seed.decoder.schemaName}>
110
-
111
- export const ${meta.seed.decoder.decoderName} = z
112
- .array(${meta.seed.decoder.schemaName}.or(${blankSchemaName}))
113
- .transform((items) => items.filter(Boolean) as ${meta.seed.decoder.decoderTypeName}[])
114
- `;
115
- }
116
- function toExcelDecoder({ tsTypeName, dbTypeName: typeName, nullable, imports, }) {
117
- switch (tsTypeName) {
118
- case 'string': {
119
- const decoder = (0, types_1.toFunction)(nullable ? 'excelStringNullableDecoder' : 'excelStringDecoder');
120
- imports.addImport({
121
- items: [decoder],
122
- from: PXL_COMMON,
123
- });
124
- return decoder;
125
- }
126
- case 'boolean':
127
- imports.addImport({
128
- items: [(0, types_1.toFunction)('excelBooleanDecoder')],
129
- from: PXL_COMMON,
130
- });
131
- return 'excelBooleanDecoder';
132
- case 'number':
133
- switch (typeName) {
134
- case 'Int':
135
- case 'BigInt':
136
- return `z.number().int()${nullable ? '.nullable()' : ''}`;
137
- default:
138
- return `z.number()${nullable ? '.nullable()' : ''}`;
139
- }
140
- case 'Date': {
141
- const decoder = (0, types_1.toFunction)(nullable ? 'excelDateNullableDecoder' : 'excelDateDecoder');
142
- imports.addImport({
143
- items: [decoder],
144
- from: PXL_COMMON,
145
- });
146
- return decoder;
147
- }
148
- default:
149
- throw new Error('Unknown type');
150
- }
151
- }
@@ -1,42 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateSeedDataType = 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 a type for all SeedData.
9
- */
10
- function generateSeedDataType({ models, meta }) {
11
- const imports = imports_1.ImportsGenerator.from(meta.types.importPath);
12
- imports.addImport({ from: meta.data.importPath, items: [(0, types_1.toClassName)('MockData')] });
13
- const modelTypes = [];
14
- const mockConverters = [];
15
- for (const model of models) {
16
- const modelMeta = (0, meta_1.getModelMetadata)({ model });
17
- imports.addImport({
18
- items: [modelMeta.types.dto.create, modelMeta.types.dto.update, modelMeta.types.dto.upsert],
19
- from: modelMeta.types.importPath,
20
- });
21
- modelTypes.push(`${modelMeta.seed.constantName}?: {
22
- create?: ${modelMeta.types.dto.create}[]
23
- update?: ${modelMeta.types.dto.update}[]
24
- upsert?: ${modelMeta.types.dto.upsert}[]
25
- delete?: string[]
26
- }`);
27
- mockConverters.push(`${modelMeta.seed.constantName}: { create: data.${modelMeta.seed.constantName} }`);
28
- }
29
- return `
30
- ${imports.generate()}
31
-
32
- export type SeedData = {
33
- ${modelTypes.join('\n')}
34
- }
35
-
36
- export function mockDataToCreate(data: MockData): SeedData {
37
- return {
38
- ${mockConverters.join(',\n')}
39
- }
40
- }`;
41
- }
42
- exports.generateSeedDataType = generateSeedDataType;