@postxl/generator 0.24.0 → 0.25.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/generators/indices/emptydatabasemigration.generator.js +10 -1
- package/dist/generators/indices/seed-service.generator.js +1 -1
- package/dist/generators/indices/seed-template-decoder.generator.js +3 -3
- package/dist/generators/models/businesslogic.generator.js +4 -2
- package/dist/generators/models/repository.generator.d.ts +11 -1
- package/dist/generators/models/repository.generator.js +623 -454
- package/dist/generators/models/seed.generator.js +1 -1
- package/dist/lib/schema/schema.d.ts +1 -1
- package/dist/lib/schema/zod.js +1 -1
- package/dist/lib/utils/jsdoc.d.ts +4 -0
- package/dist/lib/utils/jsdoc.js +13 -0
- package/dist/prisma/parse.js +6 -2
- package/package.json +4 -6
|
@@ -23,6 +23,7 @@ CREATE OR REPLACE PROCEDURE "emptyDatabase"() AS $BODY$ BEGIN IF EXISTS (
|
|
|
23
23
|
END IF;
|
|
24
24
|
TRUNCATE TABLE
|
|
25
25
|
${tables};
|
|
26
|
+
UPDATE ${configTableName} SET "isSeeded"=false;
|
|
26
27
|
END;
|
|
27
28
|
$BODY$ LANGUAGE plpgsql;
|
|
28
29
|
`;
|
|
@@ -52,7 +53,15 @@ function prismaMigrationExists(meta) {
|
|
|
52
53
|
return firstMigration !== undefined;
|
|
53
54
|
}
|
|
54
55
|
exports.prismaMigrationExists = prismaMigrationExists;
|
|
56
|
+
/**
|
|
57
|
+
* Returns the first migration in the migrations folder if it exists.
|
|
58
|
+
*/
|
|
55
59
|
function getFirstPrismaMigration(meta) {
|
|
56
60
|
const folder = meta.migrationsPath;
|
|
57
|
-
|
|
61
|
+
try {
|
|
62
|
+
return fs_1.default.readdirSync(folder).find((f) => fs_1.default.statSync(`${folder}/${f}`).isDirectory());
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
58
67
|
}
|
|
@@ -45,7 +45,7 @@ function generateTableDecoder({ model, meta, imports, }) {
|
|
|
45
45
|
imports.addImport({ items: [meta.types.toBrandedIdTypeFnName], from: meta.types.importPath });
|
|
46
46
|
fieldDecoders.push(`${fieldMeta.excelColumnName}: ${toExcelDecoder({
|
|
47
47
|
tsTypeName: field.unbrandedTypeName,
|
|
48
|
-
dbTypeName: field.
|
|
48
|
+
dbTypeName: field.schemaType,
|
|
49
49
|
nullable: false,
|
|
50
50
|
imports,
|
|
51
51
|
})}.transform((id: ${field.unbrandedTypeName}) => ${meta.types.toBrandedIdTypeFnName}(id))`);
|
|
@@ -54,7 +54,7 @@ function generateTableDecoder({ model, meta, imports, }) {
|
|
|
54
54
|
case 'scalar': {
|
|
55
55
|
fieldDecoders.push(`${fieldMeta.excelColumnName}: ${toExcelDecoder({
|
|
56
56
|
tsTypeName: field.tsTypeName,
|
|
57
|
-
dbTypeName: field.
|
|
57
|
+
dbTypeName: field.schemaType,
|
|
58
58
|
nullable: !field.isRequired,
|
|
59
59
|
imports,
|
|
60
60
|
})}`);
|
|
@@ -66,7 +66,7 @@ function generateTableDecoder({ model, meta, imports, }) {
|
|
|
66
66
|
imports.addImport({ items: [refMeta.types.toBrandedIdTypeFnName], from: refMeta.types.importPath });
|
|
67
67
|
fieldDecoders.push(`${fieldMeta.excelColumnName}: ${toExcelDecoder({
|
|
68
68
|
tsTypeName: field.unbrandedTypeName,
|
|
69
|
-
dbTypeName: field.
|
|
69
|
+
dbTypeName: field.schemaType,
|
|
70
70
|
nullable: !field.isRequired,
|
|
71
71
|
imports,
|
|
72
72
|
})}.transform((id: ${field.unbrandedTypeName}${field.isRequired ? '' : '| null'}) => ${field.isRequired ? '' : ' id === null ? null : '}${refMeta.types.toBrandedIdTypeFnName}(id))`);
|
|
@@ -169,7 +169,9 @@ export class ${meta.businessLogic.serviceClassName} {
|
|
|
169
169
|
/**
|
|
170
170
|
* Creates a new ${meta.userFriendlyName}.
|
|
171
171
|
*/
|
|
172
|
-
public async create(item: Omit<${model.typeName}, '
|
|
172
|
+
public async create(item: Omit<${model.typeName}, '${model.idField.name}'> & Partial<{
|
|
173
|
+
${model.idField.name}: ${model.idField.unbrandedTypeName}
|
|
174
|
+
}>): Promise<${model.typeName}> {
|
|
173
175
|
return this.${modelRepositoryVariableName}.create(item)
|
|
174
176
|
}
|
|
175
177
|
|
|
@@ -190,7 +192,7 @@ export class ${meta.businessLogic.serviceClassName} {
|
|
|
190
192
|
*/
|
|
191
193
|
public async delete(id: ${model.brandedIdType}): Promise<void> {
|
|
192
194
|
return this.${modelRepositoryVariableName}.delete(id)
|
|
193
|
-
}
|
|
195
|
+
}
|
|
194
196
|
}
|
|
195
197
|
|
|
196
198
|
const compare = (a: ${model.typeName}, b: ${model.typeName}, field: keyof ${model.typeName}) => {
|
|
@@ -1,7 +1,17 @@
|
|
|
1
|
-
import { Model } from '../../lib/schema/schema';
|
|
2
1
|
import { ModelMetaData } from '../../lib/meta';
|
|
2
|
+
import { Model } from '../../lib/schema/schema';
|
|
3
3
|
/**
|
|
4
4
|
* Generates repository data structure for a given model.
|
|
5
|
+
* Based on the model, the repository is generated slightly differently, based on:
|
|
6
|
+
* - if the model has a default field, the repository will have a public variable "defaultValue"
|
|
7
|
+
* that is set and verified during init
|
|
8
|
+
* - if the model has a generated id, the repository will have a function "generateNextId" that
|
|
9
|
+
* is used to generate the next id. The `create` and `createMany` functions will use this function
|
|
10
|
+
* and allow being called with an id.
|
|
11
|
+
* - unique string fields are ensured to be unique
|
|
12
|
+
* - max length string fields are ensured to not exceed their max length
|
|
13
|
+
* - index for fields marked with index attribute
|
|
14
|
+
* - relations are indexed by the foreign key
|
|
5
15
|
*/
|
|
6
16
|
export declare function generateRepository({ model, meta }: {
|
|
7
17
|
model: Model;
|