@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 +13 -0
- package/dist/src/generator.js +84 -30
- package/dist/src/generators/indices/datamockmodule.generator.js +1 -1
- package/dist/src/generators/indices/datamodule.generator.js +1 -1
- package/dist/src/lib/meta.js +4 -4
- package/dist/src/lib/schema/schema.d.ts +25 -0
- package/dist/src/lib/vfs.js +4 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
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
|
package/dist/src/generator.js
CHANGED
|
@@ -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
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
134
|
+
if (!config.disableGenerators.types) {
|
|
135
|
+
vfs.write(`/${meta.types.filePath}.ts`, (0, types_generator_1.generateModelTypes)({ model, meta }));
|
|
136
|
+
}
|
|
103
137
|
// Seed
|
|
104
|
-
|
|
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
|
-
|
|
107
|
-
|
|
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
|
-
|
|
147
|
+
if (!config.disableGenerators.trpc) {
|
|
148
|
+
vfs.write(`/${meta.trpc.routerFilePath}.ts`, (0, route_generator_1.generateRoute)({ model, meta }));
|
|
149
|
+
}
|
|
110
150
|
// React
|
|
111
|
-
|
|
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
|
-
|
|
118
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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 '
|
|
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 '
|
|
54
|
+
import { AsyncInit, Repository } from './repository.type'
|
|
55
55
|
|
|
56
56
|
${imports.generate()}
|
|
57
57
|
|
package/dist/src/lib/meta.js
CHANGED
|
@@ -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}
|
|
36
|
-
dataMockModuleFilePath: Types.toPath(`${config.paths.dataLibPath}
|
|
37
|
-
testDataServiceFilePath: Types.toPath(`${config.paths.dataLibPath}
|
|
38
|
-
dataServiceFilePath: Types.toPath(`${config.paths.dataLibPath}
|
|
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.
|
package/dist/src/lib/vfs.js
CHANGED
|
@@ -294,7 +294,10 @@ class VirtualFS {
|
|
|
294
294
|
*/
|
|
295
295
|
_appendChecksumToContent(content) {
|
|
296
296
|
const checksum = this._calculateContentChecksum(content);
|
|
297
|
-
|
|
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.
|