@postxl/generator 0.1.1 → 0.2.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.
- package/dist/src/generator.d.ts +2 -1
- package/dist/src/generator.js +26 -25
- package/dist/src/generators/models/repository.generator.js +19 -7
- package/dist/src/generators/models/seed.generator.js +2 -2
- package/dist/src/prisma/attributes.js +9 -8
- package/dist/src/prisma/parse.js +3 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/src/generator.d.ts
CHANGED
package/dist/src/generator.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#! /usr/bin/env node
|
|
1
2
|
"use strict";
|
|
2
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
4
|
if (k2 === undefined) k2 = k;
|
|
@@ -33,32 +34,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
33
34
|
};
|
|
34
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
36
|
exports.generate = void 0;
|
|
37
|
+
const faker_1 = require("@faker-js/faker");
|
|
36
38
|
const generator_helper_1 = require("@prisma/generator-helper");
|
|
37
39
|
const internals_1 = require("@prisma/internals");
|
|
38
40
|
const prettier = __importStar(require("prettier"));
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const vfs_1 = require("./lib/vfs");
|
|
43
|
-
const route_generator_1 = require("./generators/models/route.generator");
|
|
44
|
-
const repository_generator_1 = require("./generators/models/repository.generator");
|
|
45
|
-
const stub_generator_1 = require("./generators/models/stub.generator");
|
|
46
|
-
const seed_generator_1 = require("./generators/models/seed.generator");
|
|
47
|
-
const react_generator_1 = require("./generators/models/react.generator");
|
|
48
|
-
const types_generator_1 = require("./generators/models/types.generator");
|
|
49
|
-
const types_generator_2 = require("./generators/enums/types.generator");
|
|
50
|
-
const react_generator_2 = require("./generators/enums/react.generator");
|
|
41
|
+
const zod_1 = require("zod");
|
|
42
|
+
const react_generator_1 = require("./generators/enums/react.generator");
|
|
43
|
+
const types_generator_1 = require("./generators/enums/types.generator");
|
|
51
44
|
const datamockmodule_generator_1 = require("./generators/indices/datamockmodule.generator");
|
|
52
|
-
const dataservice_generator_1 = require("./generators/indices/dataservice.generator");
|
|
53
45
|
const datamodule_generator_1 = require("./generators/indices/datamodule.generator");
|
|
54
|
-
const
|
|
55
|
-
const faker_1 = require("@faker-js/faker");
|
|
46
|
+
const dataservice_generator_1 = require("./generators/indices/dataservice.generator");
|
|
56
47
|
const repositories_generator_1 = require("./generators/indices/repositories.generator");
|
|
48
|
+
const seed_generator_1 = require("./generators/indices/seed.generator");
|
|
57
49
|
const stubs_generator_1 = require("./generators/indices/stubs.generator");
|
|
58
|
-
const seed_generator_2 = require("./generators/indices/seed.generator");
|
|
59
|
-
const types_generator_3 = require("./generators/indices/types.generator");
|
|
60
50
|
const testdataservice_generator_1 = require("./generators/indices/testdataservice.generator");
|
|
61
|
-
const
|
|
51
|
+
const types_generator_2 = require("./generators/indices/types.generator");
|
|
52
|
+
const react_generator_2 = require("./generators/models/react.generator");
|
|
53
|
+
const repository_generator_1 = require("./generators/models/repository.generator");
|
|
54
|
+
const route_generator_1 = require("./generators/models/route.generator");
|
|
55
|
+
const seed_generator_2 = require("./generators/models/seed.generator");
|
|
56
|
+
const stub_generator_1 = require("./generators/models/stub.generator");
|
|
57
|
+
const types_generator_3 = require("./generators/models/types.generator");
|
|
58
|
+
const meta_1 = require("./lib/meta");
|
|
59
|
+
const types_1 = require("./lib/schema/types");
|
|
60
|
+
const vfs_1 = require("./lib/vfs");
|
|
61
|
+
const client_path_1 = require("./prisma/client-path");
|
|
62
|
+
const parse_1 = require("./prisma/parse");
|
|
62
63
|
const configDecoder = zod_1.z
|
|
63
64
|
.object({
|
|
64
65
|
project: zod_1.z.string(),
|
|
@@ -132,11 +133,11 @@ const generate = ({ models, enums, config, prismaClientPath, logger, }) => __awa
|
|
|
132
133
|
const meta = (0, meta_1.getModelMetadata)({ model });
|
|
133
134
|
// Types
|
|
134
135
|
if (!config.disableGenerators.types) {
|
|
135
|
-
vfs.write(`/${meta.types.filePath}.ts`, (0,
|
|
136
|
+
vfs.write(`/${meta.types.filePath}.ts`, (0, types_generator_3.generateModelTypes)({ model, meta }));
|
|
136
137
|
}
|
|
137
138
|
// Seed
|
|
138
139
|
if (!config.disableGenerators.seed) {
|
|
139
|
-
vfs.write(`/${meta.seed.filePath}.ts`, (0,
|
|
140
|
+
vfs.write(`/${meta.seed.filePath}.ts`, (0, seed_generator_2.generateSeedModel)({ model, itemCount: 5, meta }));
|
|
140
141
|
}
|
|
141
142
|
// Generate Repositories
|
|
142
143
|
if (!config.disableGenerators.data) {
|
|
@@ -149,7 +150,7 @@ const generate = ({ models, enums, config, prismaClientPath, logger, }) => __awa
|
|
|
149
150
|
}
|
|
150
151
|
// React
|
|
151
152
|
if (!config.disableGenerators.react) {
|
|
152
|
-
vfs.copy((0,
|
|
153
|
+
vfs.copy((0, react_generator_2.generateReactComponentsForModel)({ model, meta }), meta.react.folderPath);
|
|
153
154
|
}
|
|
154
155
|
logger.log(`✅ ${model.name} generated!`);
|
|
155
156
|
}
|
|
@@ -157,10 +158,10 @@ const generate = ({ models, enums, config, prismaClientPath, logger, }) => __awa
|
|
|
157
158
|
for (const enumerator of enums.values()) {
|
|
158
159
|
const meta = (0, meta_1.getEnumMetadata)({ enumerator });
|
|
159
160
|
if (!config.disableGenerators.types) {
|
|
160
|
-
vfs.write(`/${meta.types.filePath}.ts`, (0,
|
|
161
|
+
vfs.write(`/${meta.types.filePath}.ts`, (0, types_generator_1.generateEnumType)({ enumerator, prismaClientPath, meta }));
|
|
161
162
|
}
|
|
162
163
|
if (!config.disableGenerators.react) {
|
|
163
|
-
vfs.copy((0,
|
|
164
|
+
vfs.copy((0, react_generator_1.generateEnumReactComponents)({ enumerator, meta }), meta.react.folderPath);
|
|
164
165
|
}
|
|
165
166
|
}
|
|
166
167
|
// Generate Index Files and Services
|
|
@@ -175,13 +176,13 @@ const generate = ({ models, enums, config, prismaClientPath, logger, }) => __awa
|
|
|
175
176
|
vfs.write(`/${meta.data.stubIndexFilePath}.ts`, (0, stubs_generator_1.generateStubsIndex)({ models, meta }));
|
|
176
177
|
}
|
|
177
178
|
if (!config.disableGenerators.seed) {
|
|
178
|
-
vfs.write(`/${meta.seed.indexFilePath}.ts`, (0,
|
|
179
|
+
vfs.write(`/${meta.seed.indexFilePath}.ts`, (0, seed_generator_1.generateSeedIndex)({ models, meta }));
|
|
179
180
|
}
|
|
180
181
|
if (!config.disableGenerators.trpc) {
|
|
181
182
|
vfs.write(`/${meta.trpc.routesFilePath}.ts`, (0, route_generator_1.generateRoutesIndex)({ models, meta }));
|
|
182
183
|
}
|
|
183
184
|
if (!config.disableGenerators.types) {
|
|
184
|
-
vfs.write(`/${meta.types.indexFilePath}.ts`, (0,
|
|
185
|
+
vfs.write(`/${meta.types.indexFilePath}.ts`, (0, types_generator_2.generateTypesIndex)({ models, enums, meta }));
|
|
185
186
|
}
|
|
186
187
|
// -------------------------------------------------------------------------
|
|
187
188
|
// Add disclaimer and format.
|
|
@@ -35,7 +35,7 @@ function generateRepository({ model, meta }) {
|
|
|
35
35
|
.addImport({ items: [meta.types.zodDecoderFnName], from: meta.types.importPath });
|
|
36
36
|
return `
|
|
37
37
|
import { Injectable, Logger } from '@nestjs/common'
|
|
38
|
-
import { DbService } from '@${model.schemaConfig.project}/db'
|
|
38
|
+
import { DbService, ${model.sourceName} as DbType } from '@${model.schemaConfig.project}/db'
|
|
39
39
|
|
|
40
40
|
import { Repository } from '../repository.type'
|
|
41
41
|
|
|
@@ -52,7 +52,15 @@ export class ${meta.data.repositoryClassName} implements Repository<
|
|
|
52
52
|
|
|
53
53
|
${model.defaultField ? `public defaultValue!: ${model.typeName}` : ''}
|
|
54
54
|
|
|
55
|
-
${isGenerated
|
|
55
|
+
${isGenerated
|
|
56
|
+
? `
|
|
57
|
+
|
|
58
|
+
protected currentMaxId = 0\n
|
|
59
|
+
public get nextId(): ${model.brandedIdType} {
|
|
60
|
+
return ${meta.types.toBrandedIdTypeFnName}(this.currentMaxId + 1)
|
|
61
|
+
}
|
|
62
|
+
`
|
|
63
|
+
: ''}
|
|
56
64
|
|
|
57
65
|
protected uniqueIds = {
|
|
58
66
|
${uniqueStringFields.map((f) => `'${f.name}': new Map<string, ${model.typeName}>()`).join(',\n')}
|
|
@@ -96,8 +104,10 @@ export class ${meta.data.repositoryClassName} implements Repository<
|
|
|
96
104
|
}
|
|
97
105
|
|
|
98
106
|
public get(id: ${model.brandedIdType} | null): ${model.typeName} | null {
|
|
99
|
-
if (id === null)
|
|
100
|
-
|
|
107
|
+
if (id === null) {
|
|
108
|
+
return null
|
|
109
|
+
}
|
|
110
|
+
return this.data.get(id) ?? null
|
|
101
111
|
}
|
|
102
112
|
|
|
103
113
|
public getAll(): Map<${model.brandedIdType}, ${model.typeName}> {
|
|
@@ -279,10 +289,12 @@ export class ${meta.data.repositoryClassName} implements Repository<
|
|
|
279
289
|
/**
|
|
280
290
|
* Utility function that converts a given Database object to a TypeScript model instance
|
|
281
291
|
*/
|
|
282
|
-
private ${decoder}(item:
|
|
283
|
-
return ${meta.types.zodDecoderFnName}.parse(
|
|
292
|
+
private ${decoder}(item: DbType): ${model.typeName} {
|
|
293
|
+
return ${meta.types.zodDecoderFnName}.parse({
|
|
294
|
+
${[...model.fields.values()].map((f) => `${f.name}: item.${f.sourceName}`).join(',\n')}
|
|
295
|
+
})
|
|
284
296
|
}
|
|
285
|
-
}
|
|
297
|
+
}
|
|
286
298
|
`;
|
|
287
299
|
}
|
|
288
300
|
exports.generateRepository = generateRepository;
|
|
@@ -65,7 +65,7 @@ function getExampleMode({ model, maxItemCount }) {
|
|
|
65
65
|
else if (sameNumberOfExamplesPerField) {
|
|
66
66
|
return {
|
|
67
67
|
mode: 'Tuples',
|
|
68
|
-
itemCount: numberOfExamplesPerField
|
|
68
|
+
itemCount: numberOfExamplesPerField,
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
else {
|
|
@@ -127,7 +127,7 @@ function getFieldExample({ field, model, index, exampleMode, }) {
|
|
|
127
127
|
return { hasExample: true, example };
|
|
128
128
|
}
|
|
129
129
|
case 'Tuples': {
|
|
130
|
-
const example = field.attributes.examples[index % field.attributes.examples.length];
|
|
130
|
+
const example = field.attributes.examples[(index - 1) % field.attributes.examples.length];
|
|
131
131
|
return { hasExample: true, example };
|
|
132
132
|
}
|
|
133
133
|
default:
|
|
@@ -31,15 +31,16 @@ function parseArgumentToStringOrStringArray(str) {
|
|
|
31
31
|
try {
|
|
32
32
|
return JSON.parse(str);
|
|
33
33
|
}
|
|
34
|
-
catch (_a) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
34
|
+
catch (_a) { }
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(`[${str}]`);
|
|
37
|
+
}
|
|
38
|
+
catch (_b) { }
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(`"${str}"`);
|
|
42
41
|
}
|
|
42
|
+
catch (_c) { }
|
|
43
|
+
throw new Error(`Could not parse attribute argument: ${str}`);
|
|
43
44
|
}
|
|
44
45
|
exports.parseArgumentToStringOrStringArray = parseArgumentToStringOrStringArray;
|
|
45
46
|
/**
|
package/dist/src/prisma/parse.js
CHANGED
|
@@ -107,6 +107,9 @@ function parseModel({ dmmfModel, enums, models, config, }) {
|
|
|
107
107
|
}
|
|
108
108
|
if (dmmfField.kind === 'scalar') {
|
|
109
109
|
let validation = undefined;
|
|
110
|
+
if (dmmfField.isList) {
|
|
111
|
+
(0, error_1.throwError)(`Array fields with scalars (e.g. String[]) aren't supported! Use a relation instead. Field: ${dmmfModel.name}.${dmmfField.name}`);
|
|
112
|
+
}
|
|
110
113
|
if (dmmfField.type === 'Int') {
|
|
111
114
|
validation = { type: 'int' };
|
|
112
115
|
}
|