@postxl/generator 0.34.0 → 0.35.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/generator.js +40 -22
- package/dist/generators/indices/businesslogic-actiontypes.generator.d.ts +9 -0
- package/dist/generators/indices/businesslogic-actiontypes.generator.js +39 -0
- package/dist/generators/indices/businesslogic-update-index.generator.d.ts +9 -0
- package/dist/generators/indices/businesslogic-update-index.generator.js +20 -0
- package/dist/generators/indices/businesslogic-update-module.generator.d.ts +9 -0
- package/dist/generators/indices/businesslogic-update-module.generator.js +69 -0
- package/dist/generators/indices/businesslogic-update-service.generator.d.ts +9 -0
- package/dist/generators/indices/businesslogic-update-service.generator.js +34 -0
- package/dist/generators/indices/businesslogic-view-index.generator.d.ts +9 -0
- package/dist/generators/indices/businesslogic-view-index.generator.js +19 -0
- package/dist/generators/indices/{businesslogicindex.generator.d.ts → businesslogic-view-module.generator.d.ts} +2 -2
- package/dist/generators/indices/{businesslogicmodule.generator.js → businesslogic-view-module.generator.js} +22 -26
- package/dist/generators/indices/{businesslogicservice.generator.d.ts → businesslogic-view-service.generator.d.ts} +1 -1
- package/dist/generators/indices/{businesslogicservice.generator.js → businesslogic-view-service.generator.js} +9 -10
- package/dist/generators/indices/{datamockmodule.generator.js → datamock-module.generator.js} +8 -16
- package/dist/generators/indices/datamocker.generator.js +3 -7
- package/dist/generators/indices/datamodule.generator.js +7 -13
- package/dist/generators/indices/{businesslogicmodule.generator.d.ts → dispatcher-service.generator.d.ts} +2 -2
- package/dist/generators/indices/dispatcher-service.generator.js +81 -0
- package/dist/generators/indices/seed-migration.generator.d.ts +9 -0
- package/dist/generators/indices/seed-migration.generator.js +35 -0
- package/dist/generators/indices/seed-service.generator.d.ts +1 -1
- package/dist/generators/indices/seed-service.generator.js +327 -123
- package/dist/generators/indices/seed-template-decoder.generator.js +22 -6
- package/dist/generators/indices/{seed.generator.d.ts → seeddata-type.generator.d.ts} +2 -2
- package/dist/generators/indices/seeddata-type.generator.js +42 -0
- package/dist/generators/indices/types.generator.d.ts +1 -1
- package/dist/generators/indices/types.generator.js +8 -6
- package/dist/generators/models/businesslogic-update.generator.d.ts +10 -0
- package/dist/generators/models/businesslogic-update.generator.js +243 -0
- package/dist/generators/models/businesslogic-view.generator.d.ts +10 -0
- package/dist/generators/models/{businesslogic.generator.js → businesslogic-view.generator.js} +23 -72
- package/dist/generators/models/react.generator/modals.generator.js +2 -2
- package/dist/generators/models/repository.generator.d.ts +9 -0
- package/dist/generators/models/repository.generator.js +420 -131
- package/dist/generators/models/route.generator.js +45 -55
- package/dist/generators/models/seed.generator.js +6 -2
- package/dist/generators/models/types.generator.js +60 -13
- package/dist/lib/attributes.d.ts +5 -0
- package/dist/lib/imports.d.ts +23 -2
- package/dist/lib/imports.js +19 -1
- package/dist/lib/meta.d.ts +287 -34
- package/dist/lib/meta.js +87 -16
- package/dist/lib/schema/schema.d.ts +24 -6
- package/dist/lib/schema/types.d.ts +4 -0
- package/dist/lib/utils/jsdoc.d.ts +1 -1
- package/dist/lib/utils/jsdoc.js +8 -6
- package/dist/lib/utils/string.js +2 -1
- package/dist/prisma/attributes.js +7 -3
- package/dist/prisma/parse.js +25 -5
- package/package.json +1 -1
- package/dist/generators/indices/businesslogicindex.generator.js +0 -19
- package/dist/generators/indices/seed.generator.js +0 -17
- package/dist/generators/indices/testdataservice.generator.d.ts +0 -9
- package/dist/generators/indices/testdataservice.generator.js +0 -78
- package/dist/generators/models/businesslogic.generator.d.ts +0 -9
- /package/dist/generators/indices/{datamockmodule.generator.d.ts → datamock-module.generator.d.ts} +0 -0
package/dist/lib/utils/jsdoc.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.toJsDocComment = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Returns a string of JSDoc comments from an array of lines.
|
|
6
6
|
*/
|
|
7
|
-
function
|
|
8
|
-
|
|
7
|
+
function toJsDocComment(comments) {
|
|
8
|
+
if (!comments || comments.length === 0) {
|
|
9
|
+
return '';
|
|
10
|
+
}
|
|
11
|
+
return `/**${comments
|
|
9
12
|
.filter((c) => c !== '')
|
|
10
13
|
.map((c) => `\n * ${c}`)
|
|
11
|
-
.join('')
|
|
12
|
-
return `/**${_lines}\n */`;
|
|
14
|
+
.join('')} \n */`;
|
|
13
15
|
}
|
|
14
|
-
exports.
|
|
16
|
+
exports.toJsDocComment = toJsDocComment;
|
package/dist/lib/utils/string.js
CHANGED
|
@@ -70,8 +70,9 @@ const irregularPlurals = {
|
|
|
70
70
|
* Returns a pluralized version of the given string based on the count.
|
|
71
71
|
*/
|
|
72
72
|
const pluralize = (s, count = 2) => {
|
|
73
|
-
if (count === 1)
|
|
73
|
+
if (count === 1) {
|
|
74
74
|
return s;
|
|
75
|
+
}
|
|
75
76
|
if (s.endsWith('y') &&
|
|
76
77
|
!s.endsWith('ay') &&
|
|
77
78
|
!s.endsWith('ey') &&
|
|
@@ -11,16 +11,18 @@ const string_1 = require("../lib/utils/string");
|
|
|
11
11
|
*/
|
|
12
12
|
function parseAttributesFromDocumentation({ documentation }) {
|
|
13
13
|
const prefix = '@@';
|
|
14
|
-
if (!documentation)
|
|
14
|
+
if (!documentation) {
|
|
15
15
|
return {};
|
|
16
|
+
}
|
|
16
17
|
return documentation
|
|
17
18
|
.split('\n')
|
|
18
19
|
.filter((d) => d.startsWith(prefix))
|
|
19
20
|
.map((d) => d.replace(prefix, ''))
|
|
20
21
|
.reduce((acc, line) => {
|
|
21
22
|
const pattern = /(\w+)\((.*?)\)$/;
|
|
22
|
-
if (!pattern.test(line))
|
|
23
|
+
if (!pattern.test(line)) {
|
|
23
24
|
return acc;
|
|
25
|
+
}
|
|
24
26
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
25
27
|
const [attribute, arg] = line.match(pattern).slice(1);
|
|
26
28
|
acc[(0, string_1.toCamelCase)(attribute)] = parseArgumentToStringOrStringArray(arg);
|
|
@@ -71,6 +73,7 @@ function getModelAttributes(model) {
|
|
|
71
73
|
description: zod_1.default.string().optional(),
|
|
72
74
|
schema: zod_1.default.string().optional(),
|
|
73
75
|
index: zod_1.default.array(zod_1.default.string()).optional(),
|
|
76
|
+
seed: zod_1.default.string().optional(),
|
|
74
77
|
})
|
|
75
78
|
.transform((obj) => ({
|
|
76
79
|
ignore: obj.ignore,
|
|
@@ -78,6 +81,7 @@ function getModelAttributes(model) {
|
|
|
78
81
|
description: obj.description,
|
|
79
82
|
databaseSchema: obj.schema,
|
|
80
83
|
index: obj.index,
|
|
84
|
+
randomSeed: obj.seed !== undefined ? parseInt(obj.seed, 10) : undefined,
|
|
81
85
|
}));
|
|
82
86
|
const result = decoder.safeParse(attributes);
|
|
83
87
|
if (!result.success) {
|
|
@@ -144,7 +148,7 @@ function getFieldAttributes(field) {
|
|
|
144
148
|
isLabel: obj.label,
|
|
145
149
|
examples: obj.examples || obj.example,
|
|
146
150
|
maxLength: obj.maxLength,
|
|
147
|
-
isReadonly: obj.readonly || field.isGenerated || field.isUpdatedAt || field.name === 'createdAt',
|
|
151
|
+
isReadonly: obj.readonly || field.isGenerated || field.isUpdatedAt || field.name === 'createdAt' || field.isId,
|
|
148
152
|
isUpdatedAt: (_a = field.isUpdatedAt) !== null && _a !== void 0 ? _a : false,
|
|
149
153
|
isCreatedAt: field.name === 'createdAt',
|
|
150
154
|
});
|
package/dist/prisma/parse.js
CHANGED
|
@@ -28,19 +28,34 @@ const Types = __importStar(require("../lib/schema/types"));
|
|
|
28
28
|
const error_1 = require("../lib/utils/error");
|
|
29
29
|
const string_1 = require("../lib/utils/string");
|
|
30
30
|
const attributes_1 = require("./attributes");
|
|
31
|
+
/**
|
|
32
|
+
* These models are required for the generators/backend to work.
|
|
33
|
+
*/
|
|
34
|
+
const REQUIRED_MODELS = ['User', 'Config', 'File', 'Action', 'Mutation'];
|
|
31
35
|
/**
|
|
32
36
|
* Converts a Prisma schema (DMMF) document to a Schema that's passed around generators.
|
|
33
37
|
*/
|
|
34
38
|
function parsePrismaSchema({ datamodel: { enums: enumsRaw, models: modelsRaw }, config, }) {
|
|
39
|
+
ensureRequiredModelsExists(modelsRaw);
|
|
35
40
|
// NOTE: We preprocess models and enums so that we can populate relationships.
|
|
36
41
|
const models = modelsRaw.map((dmmfModel) => parseModelCore({ dmmfModel, config }));
|
|
37
42
|
const enums = enumsRaw.map((dmmfEnum) => parseEnum({ dmmfEnum, config }));
|
|
38
43
|
const modelsWithFields = modelsRaw
|
|
39
44
|
.map((dmmfModel) => parseModel({ dmmfModel, models, enums, config }))
|
|
40
|
-
.filter(
|
|
45
|
+
.filter(isModelNotIgnored);
|
|
41
46
|
return { models: modelsWithFields, enums };
|
|
42
47
|
}
|
|
43
48
|
exports.parsePrismaSchema = parsePrismaSchema;
|
|
49
|
+
function ensureRequiredModelsExists(models) {
|
|
50
|
+
for (const requiredModel of REQUIRED_MODELS) {
|
|
51
|
+
if (!models.find((m) => m.name === requiredModel)) {
|
|
52
|
+
(0, error_1.throwError)(`Required model ${requiredModel} not found in schema!`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function isModelNotIgnored(model) {
|
|
57
|
+
return model !== undefined && !model.attributes.ignore;
|
|
58
|
+
}
|
|
44
59
|
/**
|
|
45
60
|
* Parses the core properties of a model without fields.
|
|
46
61
|
*/
|
|
@@ -63,6 +78,10 @@ function parseModelCore({ dmmfModel, config, }) {
|
|
|
63
78
|
*/
|
|
64
79
|
function parseModel({ dmmfModel, enums, models, config, }) {
|
|
65
80
|
const core = parseModelCore({ dmmfModel, config });
|
|
81
|
+
// NOTE: We ignore models which are marked as ignored.
|
|
82
|
+
if (core.attributes.ignore) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
66
85
|
// NOTE: We assume that each relation may only reference one field. Because of this,
|
|
67
86
|
// we can "relate" a given relation to a scalar field used in the relation.
|
|
68
87
|
// Since Prisma doesn't mark those fields as relations, we need to preprocess
|
|
@@ -287,13 +306,14 @@ function getTsTypeForScalar(field) {
|
|
|
287
306
|
case 'Float':
|
|
288
307
|
case 'Int':
|
|
289
308
|
return Types.toTypeName('number');
|
|
290
|
-
case '
|
|
309
|
+
case 'Json':
|
|
291
310
|
case 'Bytes':
|
|
292
311
|
(0, error_1.throwError)('Not implemented yet');
|
|
293
|
-
|
|
312
|
+
// While TypeScript understands that throwError never returns, eslint doesn't and complains.
|
|
313
|
+
// Hence we ignore the fallthrough error.
|
|
314
|
+
// eslint-disable-next-line no-fallthrough
|
|
294
315
|
default:
|
|
295
|
-
|
|
296
|
-
(0, error_1.throwError)(`Investigate: 'default' case in getTypescriptType for field ${field.name} of type ${field.type}`);
|
|
316
|
+
(0, error_1.throwError)(`Investigate: 'default' case in getTsTypeForScalar for field ${field.name} of type ${field.type}`);
|
|
297
317
|
}
|
|
298
318
|
}
|
|
299
319
|
/**
|
package/package.json
CHANGED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateBusinessLogicIndex = void 0;
|
|
4
|
-
const exports_1 = require("../../lib/exports");
|
|
5
|
-
const meta_1 = require("../../lib/meta");
|
|
6
|
-
/**
|
|
7
|
-
* Generates index file for all businessLogic files.
|
|
8
|
-
*/
|
|
9
|
-
function generateBusinessLogicIndex({ models, meta }) {
|
|
10
|
-
const exports = exports_1.ExportsGenerator.from(meta.businessLogic.indexFilePath);
|
|
11
|
-
exports.exportEverythingFromPath(meta.businessLogic.serviceFilePath);
|
|
12
|
-
exports.exportEverythingFromPath(meta.businessLogic.moduleFilePath);
|
|
13
|
-
for (const model of models) {
|
|
14
|
-
const meta = (0, meta_1.getModelMetadata)({ model });
|
|
15
|
-
exports.exportEverythingFromPath(meta.businessLogic.serviceFilePath);
|
|
16
|
-
}
|
|
17
|
-
return exports.generate();
|
|
18
|
-
}
|
|
19
|
-
exports.generateBusinessLogicIndex = generateBusinessLogicIndex;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateSeedIndex = void 0;
|
|
4
|
-
const exports_1 = require("../../lib/exports");
|
|
5
|
-
const meta_1 = require("../../lib/meta");
|
|
6
|
-
/**
|
|
7
|
-
* Generates index file for all seed files.
|
|
8
|
-
*/
|
|
9
|
-
function generateSeedIndex({ models, meta }) {
|
|
10
|
-
const exports = exports_1.ExportsGenerator.from(meta.seed.indexFilePath);
|
|
11
|
-
for (const model of models) {
|
|
12
|
-
const meta = (0, meta_1.getModelMetadata)({ model });
|
|
13
|
-
exports.exportEverythingFromPath(meta.seed.filePath);
|
|
14
|
-
}
|
|
15
|
-
return exports.generate();
|
|
16
|
-
}
|
|
17
|
-
exports.generateSeedIndex = generateSeedIndex;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { SchemaMetaData } from '../../lib/meta';
|
|
2
|
-
import { Model } from '../../lib/schema/schema';
|
|
3
|
-
/**
|
|
4
|
-
* Generates a generic data service object that may be used on the server to access database.
|
|
5
|
-
*/
|
|
6
|
-
export declare function generateTestDataService({ meta, models }: {
|
|
7
|
-
meta: SchemaMetaData;
|
|
8
|
-
models: Model[];
|
|
9
|
-
}): string;
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.generateTestDataService = void 0;
|
|
27
|
-
const meta_1 = require("../../lib/meta");
|
|
28
|
-
const Types = __importStar(require("../../lib/schema/types"));
|
|
29
|
-
const imports_1 = require("../../lib/imports");
|
|
30
|
-
/**
|
|
31
|
-
* Generates a generic data service object that may be used on the server to access database.
|
|
32
|
-
*/
|
|
33
|
-
function generateTestDataService({ meta, models }) {
|
|
34
|
-
const imports = imports_1.ImportsGenerator.from(meta.data.testDataServiceFilePath).addImport({
|
|
35
|
-
items: [Types.toVariableName('MockData')],
|
|
36
|
-
from: meta.data.dataMockModuleFilePath,
|
|
37
|
-
});
|
|
38
|
-
const mm = models.map((model) => ({ model, meta: (0, meta_1.getModelMetadata)({ model }) }));
|
|
39
|
-
for (const { meta } of mm) {
|
|
40
|
-
imports.addImport({
|
|
41
|
-
items: [meta.data.repositoryClassName],
|
|
42
|
-
from: meta.data.repoFilePath,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
const constructor = mm
|
|
46
|
-
.map(({ meta }) => `private ${meta.data.dataServiceName} :${meta.data.repositoryClassName}`)
|
|
47
|
-
.join(',\n');
|
|
48
|
-
return `
|
|
49
|
-
import { Injectable, Logger } from '@nestjs/common'
|
|
50
|
-
|
|
51
|
-
import { ResetService } from '@pxl/common'
|
|
52
|
-
import { DbService } from '@${meta.config.project}/db'
|
|
53
|
-
|
|
54
|
-
${imports.generate()}
|
|
55
|
-
|
|
56
|
-
@Injectable()
|
|
57
|
-
export class TestDataService {
|
|
58
|
-
private logger = new Logger(TestDataService.name)
|
|
59
|
-
constructor(
|
|
60
|
-
private db: DbService,
|
|
61
|
-
private resetService: ResetService,
|
|
62
|
-
${constructor}
|
|
63
|
-
) {}
|
|
64
|
-
|
|
65
|
-
public async resetTestData(data: MockData) {
|
|
66
|
-
this.logger.log(\`✅ Reset test data\`)
|
|
67
|
-
await this.db.emptyDatabase()
|
|
68
|
-
|
|
69
|
-
${mm
|
|
70
|
-
.map(({ meta }) => `await this.${meta.data.dataServiceName}.reInit(data.${meta.data.mockDataPropertyName} ?? [])`)
|
|
71
|
-
.join('\n')}
|
|
72
|
-
|
|
73
|
-
return this.resetService.reset()
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
`;
|
|
77
|
-
}
|
|
78
|
-
exports.generateTestDataService = generateTestDataService;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { ModelMetaData } from '../../lib/meta';
|
|
2
|
-
import { Model } from '../../lib/schema/schema';
|
|
3
|
-
/**
|
|
4
|
-
* Generates business logic for a given model.
|
|
5
|
-
*/
|
|
6
|
-
export declare function generateModelBusinessLogic({ model, meta }: {
|
|
7
|
-
model: Model;
|
|
8
|
-
meta: ModelMetaData;
|
|
9
|
-
}): string;
|
/package/dist/generators/indices/{datamockmodule.generator.d.ts → datamock-module.generator.d.ts}
RENAMED
|
File without changes
|