@postxl/generator 0.0.10 → 0.0.12

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/changelog.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.0.12
4
+
5
+ ### Added
6
+
7
+ - Remove remaining unbranded types from other repo functions
8
+
9
+ ## 0.0.11
10
+
11
+ ### Added
12
+
13
+ - Add skipping of generators by remove path in generator config
14
+
3
15
  ## 0.0.10
4
16
 
5
17
  ### Fixes
@@ -58,6 +58,45 @@ const stubs_generator_1 = require("./generators/indices/stubs.generator");
58
58
  const seed_generator_2 = require("./generators/indices/seed.generator");
59
59
  const types_generator_3 = require("./generators/indices/types.generator");
60
60
  const testdataservice_generator_1 = require("./generators/indices/testdataservice.generator");
61
+ const zod_1 = require("zod");
62
+ const configDecoder = zod_1.z
63
+ .object({
64
+ project: zod_1.z.string(),
65
+ pathToTypes: zod_1.z.string().optional(),
66
+ pathToDataLib: zod_1.z.string().optional(),
67
+ pathToSeedLib: zod_1.z.string().optional(),
68
+ trpcRoutesFolder: zod_1.z.string().optional(),
69
+ reactFolderOutput: zod_1.z.string().optional(),
70
+ randomSeed: zod_1.z
71
+ .string()
72
+ .optional()
73
+ .transform((v) => (v === undefined ? 1 : parseInt(v))),
74
+ force: zod_1.z
75
+ .string()
76
+ .optional()
77
+ .transform((v) => (v === undefined ? false : v === 'true')),
78
+ })
79
+ .transform((s) => {
80
+ return {
81
+ project: s.project,
82
+ paths: {
83
+ dataLibPath: (0, types_1.toPath)(s.pathToDataLib || 'repos'),
84
+ reactFolderPath: (0, types_1.toPath)(s.reactFolderOutput || 'react'),
85
+ modelTypeDefinitionsPath: (0, types_1.toPath)(s.pathToTypes || 'types'),
86
+ seedPath: (0, types_1.toPath)(s.pathToSeedLib || 'seed'),
87
+ trpcRoutesFolderPath: (0, types_1.toPath)(s.trpcRoutesFolder || 'trpc'),
88
+ },
89
+ randomSeed: s.randomSeed,
90
+ force: s.force,
91
+ disableGenerators: {
92
+ types: s.pathToTypes === undefined,
93
+ data: s.pathToDataLib === undefined,
94
+ seed: s.pathToSeedLib === undefined,
95
+ trpc: s.trpcRoutesFolder === undefined,
96
+ react: s.reactFolderOutput === undefined,
97
+ },
98
+ };
99
+ });
61
100
  (0, generator_helper_1.generatorHandler)({
62
101
  onManifest() {
63
102
  internals_1.logger.info(`PXL Registered`);
@@ -70,18 +109,11 @@ const testdataservice_generator_1 = require("./generators/indices/testdataservic
70
109
  onGenerate: ({ generator, otherGenerators, dmmf }) => __awaiter(void 0, void 0, void 0, function* () {
71
110
  internals_1.logger.info(`PXL started generating code...`);
72
111
  const prismaClientPath = (0, client_path_1.getClientImportPath)(otherGenerators);
73
- const config = {
74
- project: generator.config['project'] || 'pxl',
75
- paths: {
76
- dataLibPath: (0, types_1.toPath)(generator.config['pathToDataLib'] || 'repos'),
77
- reactFolderPath: (0, types_1.toPath)(generator.config['reactFolderOutput'] || 'react'),
78
- modelTypeDefinitionsPath: (0, types_1.toPath)(generator.config['pathToTypes'] || 'types'),
79
- seedPath: (0, types_1.toPath)(generator.config['pathToSeedLib'] || 'seed'),
80
- trpcRoutesFolderPath: (0, types_1.toPath)(generator.config['trpcRoutesFolder'] || 'trpc'),
81
- },
82
- randomSeed: parseInt(generator.config['randomSeed']) || 1,
83
- force: generator.config['force'] === 'true',
84
- };
112
+ const decodedConfig = configDecoder.safeParse(generator.config);
113
+ if (!decodedConfig.success) {
114
+ throw new Error(`Invalid generator config: ${decodedConfig.error.message}`);
115
+ }
116
+ const config = decodedConfig.data;
85
117
  internals_1.logger.log(`Parsing DMMF...`);
86
118
  const { models, enums } = (0, parse_1.parsePrismaSchema)({ datamodel: dmmf.datamodel, config });
87
119
  internals_1.logger.log(`Generating...`);
@@ -99,36 +131,58 @@ const generate = ({ models, enums, config, prismaClientPath, logger, }) => __awa
99
131
  for (const model of models) {
100
132
  const meta = (0, meta_1.getModelMetadata)({ model });
101
133
  // Types
102
- vfs.write(`/${meta.types.filePath}.ts`, (0, types_generator_1.generateModelTypes)({ model, meta }));
134
+ if (!config.disableGenerators.types) {
135
+ vfs.write(`/${meta.types.filePath}.ts`, (0, types_generator_1.generateModelTypes)({ model, meta }));
136
+ }
103
137
  // Seed
104
- vfs.write(`/${meta.seed.filePath}.ts`, (0, seed_generator_1.generateSeedModel)({ model, itemCount: 5, meta }));
138
+ if (!config.disableGenerators.seed) {
139
+ vfs.write(`/${meta.seed.filePath}.ts`, (0, seed_generator_1.generateSeedModel)({ model, itemCount: 5, meta }));
140
+ }
105
141
  // Generate Repositories
106
- vfs.write(`/${meta.data.stubFilePath}.ts`, (0, stub_generator_1.generateStub)({ model, meta }));
107
- vfs.write(`/${meta.data.repoFilePath}.ts`, (0, repository_generator_1.generateRepository)({ model, meta }));
142
+ if (!config.disableGenerators.data) {
143
+ vfs.write(`/${meta.data.stubFilePath}.ts`, (0, stub_generator_1.generateStub)({ model, meta }));
144
+ vfs.write(`/${meta.data.repoFilePath}.ts`, (0, repository_generator_1.generateRepository)({ model, meta }));
145
+ }
108
146
  // Routes
109
- vfs.write(`/${meta.trpc.routerFilePath}.ts`, (0, route_generator_1.generateRoute)({ model, meta }));
147
+ if (!config.disableGenerators.trpc) {
148
+ vfs.write(`/${meta.trpc.routerFilePath}.ts`, (0, route_generator_1.generateRoute)({ model, meta }));
149
+ }
110
150
  // React
111
- vfs.copy((0, react_generator_1.generateReactComponentsForModel)({ model, meta }), meta.react.folderPath);
151
+ if (!config.disableGenerators.react) {
152
+ vfs.copy((0, react_generator_1.generateReactComponentsForModel)({ model, meta }), meta.react.folderPath);
153
+ }
112
154
  logger.log(`✅ ${model.name} generated!`);
113
155
  }
114
156
  // Generate Enums
115
157
  for (const enumerator of enums.values()) {
116
158
  const meta = (0, meta_1.getEnumMetadata)({ enumerator });
117
- vfs.write(`/${meta.types.filePath}.ts`, (0, types_generator_2.generateEnumType)({ enumerator, prismaClientPath, meta }));
118
- vfs.copy((0, react_generator_2.generateEnumReactComponents)({ enumerator, meta }), meta.react.folderPath);
159
+ if (!config.disableGenerators.types) {
160
+ vfs.write(`/${meta.types.filePath}.ts`, (0, types_generator_2.generateEnumType)({ enumerator, prismaClientPath, meta }));
161
+ }
162
+ if (!config.disableGenerators.react) {
163
+ vfs.copy((0, react_generator_2.generateEnumReactComponents)({ enumerator, meta }), meta.react.folderPath);
164
+ }
119
165
  }
120
166
  // Generate Index Files and Services
121
167
  const meta = (0, meta_1.getSchemaMetadata)({ config });
122
- vfs.write(`/${meta.data.dataMockModuleFilePath}.ts`, (0, datamockmodule_generator_1.generateDataMockModule)({ models, meta }));
123
- vfs.write(`/${meta.data.dataModuleFilePath}.ts`, (0, datamodule_generator_1.generateDataModule)({ models, meta }));
124
- vfs.write(`/${meta.data.dataServiceFilePath}.ts`, (0, dataservice_generator_1.generateDataService)({ models, meta }));
125
- vfs.write(`/${meta.data.testDataServiceFilePath}.ts`, (0, testdataservice_generator_1.generateTestDataService)({ meta }));
126
- vfs.write(`/${meta.data.repositoriesConstFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesArray)({ models, meta }));
127
- vfs.write(`/${meta.data.repositoriesIndexFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesIndex)({ models, meta }));
128
- vfs.write(`/${meta.data.stubIndexFilePath}.ts`, (0, stubs_generator_1.generateStubsIndex)({ models, meta }));
129
- vfs.write(`/${meta.seed.indexFilePath}.ts`, (0, seed_generator_2.generateSeedIndex)({ models, meta }));
130
- vfs.write(`/${meta.trpc.routesFilePath}.ts`, (0, route_generator_1.generateRoutesIndex)({ models, meta }));
131
- vfs.write(`/${meta.types.indexFilePath}.ts`, (0, types_generator_3.generateTypesIndex)({ models, enums, meta }));
168
+ if (!config.disableGenerators.data) {
169
+ vfs.write(`/${meta.data.dataMockModuleFilePath}.ts`, (0, datamockmodule_generator_1.generateDataMockModule)({ models, meta }));
170
+ vfs.write(`/${meta.data.dataModuleFilePath}.ts`, (0, datamodule_generator_1.generateDataModule)({ models, meta }));
171
+ vfs.write(`/${meta.data.dataServiceFilePath}.ts`, (0, dataservice_generator_1.generateDataService)({ models, meta }));
172
+ vfs.write(`/${meta.data.testDataServiceFilePath}.ts`, (0, testdataservice_generator_1.generateTestDataService)({ meta }));
173
+ vfs.write(`/${meta.data.repositoriesConstFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesArray)({ models, meta }));
174
+ vfs.write(`/${meta.data.repositoriesIndexFilePath}.ts`, (0, repositories_generator_1.generateRepositoriesIndex)({ models, meta }));
175
+ vfs.write(`/${meta.data.stubIndexFilePath}.ts`, (0, stubs_generator_1.generateStubsIndex)({ models, meta }));
176
+ }
177
+ if (!config.disableGenerators.seed) {
178
+ vfs.write(`/${meta.seed.indexFilePath}.ts`, (0, seed_generator_2.generateSeedIndex)({ models, meta }));
179
+ }
180
+ if (!config.disableGenerators.trpc) {
181
+ vfs.write(`/${meta.trpc.routesFilePath}.ts`, (0, route_generator_1.generateRoutesIndex)({ models, meta }));
182
+ }
183
+ if (!config.disableGenerators.types) {
184
+ vfs.write(`/${meta.types.indexFilePath}.ts`, (0, types_generator_3.generateTypesIndex)({ models, enums, meta }));
185
+ }
132
186
  // -------------------------------------------------------------------------
133
187
  // Add disclaimer and format.
134
188
  const prettierConfig = yield prettier.resolveConfig(process.cwd());
@@ -134,12 +134,8 @@ export class ${meta.data.repositoryClassName} implements Repository<
134
134
  }
135
135
  }
136
136
  public async createWithId(item: Omit<${model.typeName}, '${idField.name}'> & {
137
- id: ${model.brandedIdType} | ${idField.unbrandedTypeName} | undefined
138
- }): Promise<${model.typeName}> {
139
- if (item.${idField.name} === undefined) {
140
- return this.create(item)
141
- }
142
-
137
+ id: ${model.brandedIdType}
138
+ }): Promise<${model.typeName}> {
143
139
  const newItem = this.${decoder}(
144
140
  await this.db.${meta.data.repository.getMethodFnName}.create({
145
141
  data: this.toCreateItem(item as ${model.typeName}),
@@ -187,13 +183,12 @@ export class ${meta.data.repositoryClassName} implements Repository<
187
183
  }
188
184
 
189
185
  public async update(item: Partial<${model.typeName}> & {
190
- id: ${model.brandedIdType} | ${idField.unbrandedTypeName}
186
+ id: ${model.brandedIdType}
191
187
  }): Promise<${model.typeName}> {
192
- const id = ${meta.types.toBrandedIdTypeFnName}(item.id)
193
- const existingItem = this.get(id)
188
+ const existingItem = this.get(item.id)
194
189
 
195
190
  if (!existingItem) {
196
- throw new Error(\`Could not update ${meta.userFriendlyName} with id \${id}. Not found!\`)
191
+ throw new Error(\`Could not update ${meta.userFriendlyName} with id \${item.id}. Not found!\`)
197
192
  }
198
193
 
199
194
  ${uniqueStringFields
@@ -11,6 +11,31 @@ export type SchemaConfig = {
11
11
  * Project scope to use in TypeScript imports (e.g. `mca` for `@mca/types`).
12
12
  */
13
13
  project: string;
14
+ /**
15
+ * Indicates whether the generator should be ignored
16
+ */
17
+ disableGenerators: {
18
+ /**
19
+ * If true, type definitions for models will not be generated.
20
+ */
21
+ types: boolean;
22
+ /**
23
+ * If true, data module will not be generated.
24
+ */
25
+ data: boolean;
26
+ /**
27
+ * If true, seed data will not be generated.
28
+ */
29
+ seed: boolean;
30
+ /**
31
+ * If true, React components will not be generated.
32
+ */
33
+ react: boolean;
34
+ /**
35
+ * If true, trpc routes will not be generated.
36
+ */
37
+ trpc: boolean;
38
+ };
14
39
  paths: {
15
40
  /**
16
41
  * Path to the directory containing model type definitions.