@postxl/generator 0.0.9 → 0.0.11

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,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.0.11
4
+
5
+ ### Added
6
+
7
+ - Add skipping of generators by remove path in generator config
8
+
9
+ ## 0.0.10
10
+
11
+ ### Fixes
12
+
13
+ - Generated files now do not cause linting errors from Prettier as newline is added at the end of the file
14
+ - Moved data service and module to root of data module
15
+
3
16
  ## 0.0.9
4
17
 
5
18
  ### 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());
@@ -61,7 +61,7 @@ function generateDataMockModule({ models, meta }) {
61
61
  import { DynamicModule } from '@nestjs/common'
62
62
  import { DbModule } from '@${meta.config.project}/db'
63
63
 
64
- import { provideMockRepository } from '../mock.repository'
64
+ import { provideMockRepository } from './mock.repository'
65
65
 
66
66
  ${imports.generate()}
67
67
 
@@ -51,7 +51,7 @@ function generateDataModule({ models, meta }) {
51
51
  import { DynamicModule, Provider, Type } from '@nestjs/common'
52
52
  import { DbModule, DbService } from '@${meta.config.project}/db'
53
53
 
54
- import { AsyncInit, Repository } from '../repository.type'
54
+ import { AsyncInit, Repository } from './repository.type'
55
55
 
56
56
  ${imports.generate()}
57
57
 
@@ -32,10 +32,10 @@ const string_1 = require("./utils/string");
32
32
  function getSchemaMetadata({ config }) {
33
33
  return {
34
34
  data: {
35
- dataModuleFilePath: Types.toPath(`${config.paths.dataLibPath}services/data.module`),
36
- dataMockModuleFilePath: Types.toPath(`${config.paths.dataLibPath}services/data.mock.module`),
37
- testDataServiceFilePath: Types.toPath(`${config.paths.dataLibPath}services/test-data.service`),
38
- dataServiceFilePath: Types.toPath(`${config.paths.dataLibPath}services/data.service`),
35
+ dataModuleFilePath: Types.toPath(`${config.paths.dataLibPath}data.module`),
36
+ dataMockModuleFilePath: Types.toPath(`${config.paths.dataLibPath}data.mock.module`),
37
+ testDataServiceFilePath: Types.toPath(`${config.paths.dataLibPath}test-data.service`),
38
+ dataServiceFilePath: Types.toPath(`${config.paths.dataLibPath}data.service`),
39
39
  repositoriesConstFilePath: Types.toPath(`${config.paths.dataLibPath}repositories/repositories`),
40
40
  repositoriesIndexFilePath: Types.toPath(`${config.paths.dataLibPath}repositories/index`),
41
41
  stubIndexFilePath: Types.toPath(`${config.paths.dataLibPath}stubs/index`),
@@ -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.
@@ -294,7 +294,10 @@ class VirtualFS {
294
294
  */
295
295
  _appendChecksumToContent(content) {
296
296
  const checksum = this._calculateContentChecksum(content);
297
- return content + '\n' + VirtualFS.CHECKSUM_PREFIX + checksum;
297
+ // NOTE: We add a newline character to make Prettier happy.
298
+ // According to POSIX standard, files should end with a newline - and Prettier obeys that.
299
+ // As the checksum is added after we ran Prettier, we need to add the newline manually
300
+ return content + '\n' + VirtualFS.CHECKSUM_PREFIX + checksum + '\n';
298
301
  }
299
302
  /**
300
303
  * Adds arbitrary meta information to the given content.