@baseplate-dev/fastify-generators 0.6.4 → 0.6.5
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 +21 -0
- package/dist/constants/fastify-packages.d.ts +3 -3
- package/dist/constants/fastify-packages.js +3 -3
- package/dist/generators/auth/auth-roles/auth-roles.generator.d.ts +1 -0
- package/dist/generators/auth/auth-roles/auth-roles.generator.d.ts.map +1 -1
- package/dist/generators/auth/auth-roles/auth-roles.generator.js +5 -1
- package/dist/generators/auth/auth-roles/auth-roles.generator.js.map +1 -1
- package/dist/generators/auth/auth-roles/templates/module/constants/auth-roles.constants.ts +4 -3
- package/dist/generators/pothos/pothos-prisma-enum/pothos-prisma-enum.generator.d.ts +1 -0
- package/dist/generators/pothos/pothos-prisma-enum/pothos-prisma-enum.generator.d.ts.map +1 -1
- package/dist/generators/pothos/pothos-prisma-enum/pothos-prisma-enum.generator.js +11 -2
- package/dist/generators/pothos/pothos-prisma-enum/pothos-prisma-enum.generator.js.map +1 -1
- package/dist/generators/prisma/_shared/build-data-helpers/build-schema-fragments.d.ts +47 -0
- package/dist/generators/prisma/_shared/build-data-helpers/build-schema-fragments.d.ts.map +1 -0
- package/dist/generators/prisma/_shared/build-data-helpers/build-schema-fragments.js +56 -0
- package/dist/generators/prisma/_shared/build-data-helpers/build-schema-fragments.js.map +1 -0
- package/dist/generators/prisma/_shared/build-data-helpers/build-transform-operation-parts.d.ts +71 -0
- package/dist/generators/prisma/_shared/build-data-helpers/build-transform-operation-parts.d.ts.map +1 -0
- package/dist/generators/prisma/_shared/build-data-helpers/build-transform-operation-parts.js +153 -0
- package/dist/generators/prisma/_shared/build-data-helpers/build-transform-operation-parts.js.map +1 -0
- package/dist/generators/prisma/_shared/build-data-helpers/generate-authorization-statements.d.ts +46 -0
- package/dist/generators/prisma/_shared/build-data-helpers/generate-authorization-statements.d.ts.map +1 -0
- package/dist/generators/prisma/_shared/build-data-helpers/generate-authorization-statements.js +44 -0
- package/dist/generators/prisma/_shared/build-data-helpers/generate-authorization-statements.js.map +1 -0
- package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.d.ts +6 -0
- package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.d.ts.map +1 -1
- package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.js +13 -1
- package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.js.map +1 -1
- package/dist/generators/prisma/_shared/build-data-helpers/generate-where-type.d.ts +24 -0
- package/dist/generators/prisma/_shared/build-data-helpers/generate-where-type.d.ts.map +1 -0
- package/dist/generators/prisma/_shared/build-data-helpers/generate-where-type.js +49 -0
- package/dist/generators/prisma/_shared/build-data-helpers/generate-where-type.js.map +1 -0
- package/dist/generators/prisma/_shared/field-definition-generators/generate-scalar-input-field.d.ts +1 -4
- package/dist/generators/prisma/_shared/field-definition-generators/generate-scalar-input-field.d.ts.map +1 -1
- package/dist/generators/prisma/_shared/field-definition-generators/generate-scalar-input-field.js +10 -2
- package/dist/generators/prisma/_shared/field-definition-generators/generate-scalar-input-field.js.map +1 -1
- package/dist/generators/prisma/_shared/field-definition-generators/types.d.ts +47 -1
- package/dist/generators/prisma/_shared/field-definition-generators/types.d.ts.map +1 -1
- package/dist/generators/prisma/data-utils/data-utils.generator.d.ts +17 -74
- package/dist/generators/prisma/data-utils/data-utils.generator.d.ts.map +1 -1
- package/dist/generators/prisma/data-utils/generated/index.d.ts +50 -145
- package/dist/generators/prisma/data-utils/generated/index.d.ts.map +1 -1
- package/dist/generators/prisma/data-utils/generated/template-paths.d.ts +5 -6
- package/dist/generators/prisma/data-utils/generated/template-paths.d.ts.map +1 -1
- package/dist/generators/prisma/data-utils/generated/template-paths.js +5 -6
- package/dist/generators/prisma/data-utils/generated/template-paths.js.map +1 -1
- package/dist/generators/prisma/data-utils/generated/template-renderers.d.ts +0 -21
- package/dist/generators/prisma/data-utils/generated/template-renderers.d.ts.map +1 -1
- package/dist/generators/prisma/data-utils/generated/template-renderers.js +1 -7
- package/dist/generators/prisma/data-utils/generated/template-renderers.js.map +1 -1
- package/dist/generators/prisma/data-utils/generated/ts-import-providers.d.ts +51 -159
- package/dist/generators/prisma/data-utils/generated/ts-import-providers.d.ts.map +1 -1
- package/dist/generators/prisma/data-utils/generated/ts-import-providers.js +32 -64
- package/dist/generators/prisma/data-utils/generated/ts-import-providers.js.map +1 -1
- package/dist/generators/prisma/data-utils/generated/typed-templates.d.ts +66 -142
- package/dist/generators/prisma/data-utils/generated/typed-templates.d.ts.map +1 -1
- package/dist/generators/prisma/data-utils/generated/typed-templates.js +47 -98
- package/dist/generators/prisma/data-utils/generated/typed-templates.js.map +1 -1
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/define-transformer.ts +130 -0
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/execute-transform-plan.ts +108 -0
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/nested-transformers.ts +364 -0
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/prepare-transformers.ts +73 -0
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/prisma-types.ts +6 -83
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/transformer-types.ts +118 -0
- package/dist/generators/prisma/prisma-authorizer-utils/generated/index.d.ts +34 -106
- package/dist/generators/prisma/prisma-authorizer-utils/generated/index.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-authorizer-utils/generated/template-renderers.d.ts +17 -53
- package/dist/generators/prisma/prisma-authorizer-utils/generated/template-renderers.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-authorizer-utils/generated/typed-templates.d.ts +34 -106
- package/dist/generators/prisma/prisma-authorizer-utils/generated/typed-templates.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-authorizer-utils/prisma-authorizer-utils.generator.d.ts +17 -53
- package/dist/generators/prisma/prisma-authorizer-utils/prisma-authorizer-utils.generator.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-authorizer-utils/templates/src/utils/authorizers.ts +11 -11
- package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.d.ts +39 -49
- package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.js +82 -45
- package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.js.map +1 -1
- package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.d.ts +39 -52
- package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.js +48 -32
- package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.js.map +1 -1
- package/dist/generators/prisma/prisma-data-nested-field/nested-field-writer.d.ts +16 -2
- package/dist/generators/prisma/prisma-data-nested-field/nested-field-writer.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-data-nested-field/nested-field-writer.js +282 -138
- package/dist/generators/prisma/prisma-data-nested-field/nested-field-writer.js.map +1 -1
- package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.d.ts +19 -55
- package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.js +18 -4
- package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.js.map +1 -1
- package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.d.ts +37 -92
- package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.js +86 -29
- package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.js.map +1 -1
- package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.d.ts +40 -52
- package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.js +102 -49
- package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.js.map +1 -1
- package/dist/generators/prisma/prisma-query-filter-utils/generated/index.d.ts +51 -159
- package/dist/generators/prisma/prisma-query-filter-utils/generated/index.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.d.ts +17 -53
- package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.d.ts +68 -212
- package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.d.ts +17 -53
- package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.d.ts.map +1 -1
- package/dist/generators/prisma/prisma-relation-field/prisma-relation-field.generator.js +1 -1
- package/dist/generators/prisma/prisma-relation-field/prisma-relation-field.generator.js.map +1 -1
- package/dist/writers/prisma-schema/fields.d.ts +5 -1
- package/dist/writers/prisma-schema/fields.d.ts.map +1 -1
- package/dist/writers/prisma-schema/fields.js +8 -2
- package/dist/writers/prisma-schema/fields.js.map +1 -1
- package/package.json +8 -8
- package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.d.ts +0 -20
- package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.d.ts.map +0 -1
- package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.js +0 -28
- package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.js.map +0 -1
- package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.d.ts +0 -130
- package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.d.ts.map +0 -1
- package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.js +0 -221
- package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.js.map +0 -1
- package/dist/generators/prisma/_shared/build-data-helpers/index.d.ts +0 -4
- package/dist/generators/prisma/_shared/build-data-helpers/index.d.ts.map +0 -1
- package/dist/generators/prisma/_shared/build-data-helpers/index.js +0 -4
- package/dist/generators/prisma/_shared/build-data-helpers/index.js.map +0 -1
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/commit-operations.ts +0 -366
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/compose-operations.ts +0 -131
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/field-definitions.ts +0 -777
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/field-utils.ts +0 -201
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/prisma-utils.ts +0 -90
- package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/types.ts +0 -721
|
@@ -1,168 +1,312 @@
|
|
|
1
|
-
import { TsCodeUtils,
|
|
1
|
+
import { TsCodeUtils, tsTemplate } from '@baseplate-dev/core-generators';
|
|
2
2
|
import { lowercaseFirstChar, quot, uppercaseFirstChar, } from '@baseplate-dev/utils';
|
|
3
|
-
import {
|
|
3
|
+
import { buildNestedSchemaFragments } from '../_shared/build-data-helpers/build-schema-fragments.js';
|
|
4
|
+
import { buildTransformOperationParts } from '../_shared/build-data-helpers/build-transform-operation-parts.js';
|
|
5
|
+
import { generateExistingItemWhere } from '../_shared/build-data-helpers/generate-where-type.js';
|
|
4
6
|
/**
|
|
5
|
-
* Creates a
|
|
6
|
-
*
|
|
7
|
+
* Creates a compareItem function for one-to-many relations.
|
|
8
|
+
* Matches input items to existing items by their unique key fields.
|
|
7
9
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* @returns TypeScript code fragment for the where unique function
|
|
11
|
-
*/
|
|
12
|
-
function createPrismaWhereUniqueFunction(model, argName = 'value') {
|
|
13
|
-
const primaryKeys = model.idFields;
|
|
14
|
-
if (!primaryKeys) {
|
|
15
|
-
throw new Error(`Primary keys on model ${model.name} are required to generate where unique function`);
|
|
16
|
-
}
|
|
17
|
-
return tsTemplate `(${argName}) => ${TsCodeUtils.mergeFragmentsAsObject(Object.fromEntries(primaryKeys.map((k) => [k, `${argName}.${k}`])), { wrapWithParenthesis: true })}`;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Creates a where unique function for one-to-one nested relations.
|
|
21
|
-
* Maps parent model fields to nested model's unique constraint based on relation field mapping.
|
|
10
|
+
* For models with simple ID:
|
|
11
|
+
* Generates: (input, existing) => input.id === existing.id
|
|
22
12
|
*
|
|
23
|
-
* For
|
|
24
|
-
* Generates: (
|
|
25
|
-
*
|
|
26
|
-
* @param relation - The relation field from nested model to parent
|
|
27
|
-
* @param nestedModel - The nested Prisma model
|
|
28
|
-
* @returns TypeScript code fragment for the where unique function
|
|
13
|
+
* For composite keys:
|
|
14
|
+
* Generates: (input, existing) => input.role === existing.role
|
|
15
|
+
* (only compares the input-provided portion of the key)
|
|
29
16
|
*/
|
|
30
|
-
function
|
|
17
|
+
function createCompareItemFragment(nestedModel, relation, inputFieldNames) {
|
|
18
|
+
const { idFields } = nestedModel;
|
|
19
|
+
if (!idFields || idFields.length === 0)
|
|
20
|
+
return undefined;
|
|
31
21
|
const relationFields = relation.fields ?? [];
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
// Map parent model fields to nested model fields
|
|
40
|
-
// E.g., { userId: parentModel.id } for UserProfile -> User relation
|
|
41
|
-
const whereUniqueObject = Object.fromEntries(relationFields.map((relationField, index) => {
|
|
42
|
-
const referencedField = referencedFields[index];
|
|
43
|
-
return [relationField, `parentModel.${referencedField}`];
|
|
44
|
-
}));
|
|
45
|
-
return tsTemplate `(parentModel) => ${TsCodeUtils.mergeFragmentsAsObject(whereUniqueObject, { wrapWithParenthesis: true })}`;
|
|
22
|
+
// Input ID fields = ID fields that come from user input (not relation FK)
|
|
23
|
+
const inputIdFields = idFields.filter((f) => inputFieldNames.includes(f) && !relationFields.includes(f));
|
|
24
|
+
if (inputIdFields.length === 0)
|
|
25
|
+
return undefined;
|
|
26
|
+
const comparisons = inputIdFields.map((field) => `input.${field} === existing.${field}`);
|
|
27
|
+
return tsTemplate `(input, existing) => ${comparisons.join(' && ')}`;
|
|
46
28
|
}
|
|
47
29
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* For example, UserRole with @@id([userId, role]) where role is in input:
|
|
52
|
-
* Generates: (input, parentModel) => ({ userId_role: { userId: parentModel.id, role: input.role } })
|
|
53
|
-
*
|
|
54
|
-
* For simple cases like UserImage with just id in input:
|
|
55
|
-
* Generates: (input) => ({ id: input.id })
|
|
56
|
-
*
|
|
57
|
-
* @param nestedModel - The nested Prisma model
|
|
58
|
-
* @param relation - The relation field from nested model to parent
|
|
59
|
-
* @param inputFieldNames - Field names that are in the input
|
|
60
|
-
* @param parentModel - The parent Prisma model
|
|
61
|
-
* @returns TypeScript code fragment for the where unique function
|
|
30
|
+
* Generates a deleteRemoved function for one-to-many relations.
|
|
31
|
+
* Uses Prisma deleteMany with OR clause.
|
|
62
32
|
*/
|
|
63
|
-
function
|
|
33
|
+
function createDeleteRemovedFragment(nestedModel, relation) {
|
|
34
|
+
const modelVar = lowercaseFirstChar(nestedModel.name);
|
|
64
35
|
const { idFields } = nestedModel;
|
|
65
36
|
if (!idFields || idFields.length === 0) {
|
|
66
|
-
throw new Error(`Nested model ${nestedModel.name} must have id fields for
|
|
37
|
+
throw new Error(`Nested model ${nestedModel.name} must have id fields for deleteRemoved`);
|
|
67
38
|
}
|
|
68
39
|
const relationFields = relation.fields ?? [];
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
// Field comes from parent model via relation
|
|
77
|
-
const referencedField = referencedFields[relationFieldIndex];
|
|
78
|
-
whereFields[idField] = `parentModel.${referencedField}`;
|
|
79
|
-
}
|
|
80
|
-
else if (inputFieldNames.includes(idField)) {
|
|
81
|
-
// Field comes from input
|
|
82
|
-
whereFields[idField] = `input.${idField}`;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
throw new Error(`ID field ${idField} of ${nestedModel.name} is not in input fields or relation fields`);
|
|
86
|
-
}
|
|
40
|
+
// For simple single ID (not part of relation FK)
|
|
41
|
+
if (idFields.length === 1 && !relationFields.includes(idFields[0])) {
|
|
42
|
+
return tsTemplate `async (tx, removedItems) => {
|
|
43
|
+
await tx.${modelVar}.deleteMany({
|
|
44
|
+
where: { OR: removedItems.map((i) => ({ ${idFields[0]}: i.${idFields[0]} })) },
|
|
45
|
+
});
|
|
46
|
+
}`;
|
|
87
47
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
wrapWithParenthesis: true,
|
|
48
|
+
// For composite keys, map all ID fields
|
|
49
|
+
const mapFields = idFields.map((f) => `${f}: i.${f}`).join(', ');
|
|
50
|
+
return tsTemplate `async (tx, removedItems) => {
|
|
51
|
+
await tx.${modelVar}.deleteMany({
|
|
52
|
+
where: { OR: removedItems.map((i) => ({ ${mapFields} })) },
|
|
94
53
|
});
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
54
|
+
}`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Generates a processDelete function for one-to-one relations.
|
|
58
|
+
* Uses Prisma deleteMany (idempotent) based on parent ID.
|
|
59
|
+
*/
|
|
60
|
+
function createProcessDeleteFragment(nestedModel, reverseRelation) {
|
|
61
|
+
const modelVar = lowercaseFirstChar(nestedModel.name);
|
|
62
|
+
const reverseFields = reverseRelation.fields ?? [];
|
|
63
|
+
const reverseRefs = reverseRelation.references ?? [];
|
|
64
|
+
// Build the where clause from the relation fields
|
|
65
|
+
const whereEntries = reverseFields.map((field, i) => {
|
|
66
|
+
const refField = reverseRefs[i];
|
|
67
|
+
return `${field}: parent.${refField}`;
|
|
68
|
+
});
|
|
69
|
+
return tsTemplate `() => async (tx, parent) => {
|
|
70
|
+
await tx.${modelVar}.deleteMany({ where: { ${whereEntries.join(', ')} } });
|
|
71
|
+
}`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Builds the parent connect fragment used in processCreate data.
|
|
75
|
+
* Generates: `relationName: { connect: { field1: parent.field1, ... } }`
|
|
76
|
+
*/
|
|
77
|
+
function buildParentConnectEntry(reverseRelation) {
|
|
78
|
+
const reverseFields = reverseRelation.fields ?? [];
|
|
79
|
+
const reverseRefs = reverseRelation.references ?? [];
|
|
80
|
+
const connectEntries = reverseFields.map((_, i) => {
|
|
81
|
+
const refField = reverseRefs[i];
|
|
82
|
+
return `${refField}: parent.${refField}`;
|
|
83
|
+
});
|
|
84
|
+
return {
|
|
85
|
+
key: reverseRelation.name,
|
|
86
|
+
value: tsTemplate `{ connect: { ${connectEntries.join(', ')} } }`,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Generates processCreate and processUpdate for the SIMPLE path (no sub-transformers).
|
|
91
|
+
* Uses the shared buildTransformOperationParts for FK handling.
|
|
92
|
+
*/
|
|
93
|
+
function createSimpleProcessFunctions(input, reverseRelation) {
|
|
94
|
+
const { nestedModel, nestedFields, dataUtilsImports } = input;
|
|
95
|
+
const modelVar = lowercaseFirstChar(nestedModel.name);
|
|
96
|
+
const parentConnect = buildParentConnectEntry(reverseRelation);
|
|
97
|
+
const whereExpr = generateExistingItemWhere(nestedModel);
|
|
98
|
+
// Use shared helper for field categorization, destructuring, and data object building
|
|
99
|
+
const createParts = buildTransformOperationParts({
|
|
100
|
+
fields: nestedFields,
|
|
101
|
+
prismaModel: nestedModel,
|
|
102
|
+
dataUtilsImports,
|
|
103
|
+
operationType: 'create',
|
|
104
|
+
inputVarName: 'itemInput',
|
|
105
|
+
additionalDataEntries: { [parentConnect.key]: parentConnect.value },
|
|
106
|
+
});
|
|
107
|
+
const updateParts = buildTransformOperationParts({
|
|
108
|
+
fields: nestedFields,
|
|
109
|
+
prismaModel: nestedModel,
|
|
110
|
+
dataUtilsImports,
|
|
111
|
+
operationType: 'update',
|
|
112
|
+
inputVarName: 'itemInput',
|
|
113
|
+
existingItemVarName: 'existingItem',
|
|
114
|
+
});
|
|
115
|
+
const processCreateFragment = createParts.hasDestructure
|
|
116
|
+
? tsTemplate `(itemInput) => async (tx, parent) => {
|
|
117
|
+
${createParts.inputDestructureFragment}
|
|
118
|
+
await tx.${modelVar}.create({
|
|
119
|
+
data: ${createParts.prismaDataFragment},
|
|
120
|
+
});
|
|
121
|
+
}`
|
|
122
|
+
: tsTemplate `(itemInput) => async (tx, parent) => {
|
|
123
|
+
await tx.${modelVar}.create({
|
|
124
|
+
data: ${createParts.prismaDataFragment},
|
|
125
|
+
});
|
|
126
|
+
}`;
|
|
127
|
+
const processUpdateFragment = updateParts.hasDestructure
|
|
128
|
+
? tsTemplate `(itemInput, existingItem) => async (tx) => {
|
|
129
|
+
${updateParts.inputDestructureFragment}
|
|
130
|
+
await tx.${modelVar}.update({
|
|
131
|
+
where: ${whereExpr},
|
|
132
|
+
data: ${updateParts.prismaDataFragment},
|
|
133
|
+
});
|
|
134
|
+
}`
|
|
135
|
+
: tsTemplate `(itemInput, existingItem) => async (tx) => {
|
|
136
|
+
await tx.${modelVar}.update({
|
|
137
|
+
where: ${whereExpr},
|
|
138
|
+
data: ${updateParts.prismaDataFragment},
|
|
139
|
+
});
|
|
140
|
+
}`;
|
|
141
|
+
return { processCreateFragment, processUpdateFragment };
|
|
115
142
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
143
|
+
/**
|
|
144
|
+
* Generates processCreate and processUpdate for the TRANSFORM path (has sub-transformers).
|
|
145
|
+
* Uses prepareTransformers + executeTransformPlan inside the deferred operations.
|
|
146
|
+
*/
|
|
147
|
+
function createTransformProcessFunctions(input, reverseRelation) {
|
|
148
|
+
const { nestedModel, nestedFields, dataUtilsImports, nestedTransformersFragment, } = input;
|
|
149
|
+
const modelVar = lowercaseFirstChar(nestedModel.name);
|
|
150
|
+
const parentConnect = buildParentConnectEntry(reverseRelation);
|
|
151
|
+
const whereExpr = generateExistingItemWhere(nestedModel);
|
|
152
|
+
if (!nestedTransformersFragment) {
|
|
153
|
+
throw new Error(`Nested model ${nestedModel.name} has sub-transform-fields but no transformers fragment. ` +
|
|
154
|
+
`Ensure the nested model has its own prisma-data-service.`);
|
|
155
|
+
}
|
|
156
|
+
// Build operation parts for create
|
|
157
|
+
const createParts = buildTransformOperationParts({
|
|
158
|
+
fields: nestedFields,
|
|
159
|
+
prismaModel: nestedModel,
|
|
160
|
+
dataUtilsImports,
|
|
161
|
+
operationType: 'create',
|
|
162
|
+
inputVarName: 'itemInput',
|
|
163
|
+
transformersVarFragment: nestedTransformersFragment,
|
|
164
|
+
additionalDataEntries: { [parentConnect.key]: parentConnect.value },
|
|
165
|
+
});
|
|
166
|
+
// Build operation parts for update
|
|
167
|
+
// Use loadExistingVarName: 'existingItem' because in processUpdate,
|
|
168
|
+
// loadExisting should reference the existing nested item, not the parent's 'where'
|
|
169
|
+
const updateParts = buildTransformOperationParts({
|
|
170
|
+
fields: nestedFields,
|
|
171
|
+
prismaModel: nestedModel,
|
|
172
|
+
dataUtilsImports,
|
|
173
|
+
operationType: 'update',
|
|
174
|
+
inputVarName: 'itemInput',
|
|
175
|
+
transformersVarFragment: nestedTransformersFragment,
|
|
176
|
+
existingItemVarName: 'existingItem',
|
|
177
|
+
loadExistingVarName: 'existingItem',
|
|
178
|
+
});
|
|
179
|
+
// We only enter this path when hasTransformFields is true
|
|
180
|
+
// and we pass transformersVarFragment, so these will always be defined
|
|
181
|
+
if (!createParts.transformersObjectFragment ||
|
|
182
|
+
!updateParts.transformersObjectFragment) {
|
|
183
|
+
throw new Error(`Nested model ${nestedModel.name} has sub-transform-fields but transformer fragments were not generated.`);
|
|
184
|
+
}
|
|
185
|
+
const createTransformers = createParts.transformersObjectFragment;
|
|
186
|
+
const updateTransformers = updateParts.transformersObjectFragment;
|
|
187
|
+
// processCreate: prepare transformers then execute inside deferred
|
|
188
|
+
const processCreateFragment = tsTemplate `(itemInput, { serviceContext }) => async (tx, parent) => {
|
|
189
|
+
${createParts.inputDestructureFragment}
|
|
190
|
+
|
|
191
|
+
const plan = await ${dataUtilsImports.prepareTransformers.fragment()}({
|
|
192
|
+
transformers: ${createTransformers},
|
|
193
|
+
serviceContext,
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
await ${dataUtilsImports.executeTransformPlan.fragment()}(plan, {
|
|
197
|
+
tx,
|
|
198
|
+
execute: async (${createParts.hasTransformFields ? '{ transformed }' : ''}) =>
|
|
199
|
+
tx.${modelVar}.create({
|
|
200
|
+
data: ${createParts.prismaDataFragment},
|
|
201
|
+
}),
|
|
202
|
+
});
|
|
203
|
+
}`;
|
|
204
|
+
// processUpdate: prepare transformers then execute inside deferred
|
|
205
|
+
const processUpdateFragment = tsTemplate `(itemInput, existingItem, { serviceContext }) => async (tx) => {
|
|
206
|
+
${updateParts.inputDestructureFragment}
|
|
207
|
+
|
|
208
|
+
const plan = await ${dataUtilsImports.prepareTransformers.fragment()}({
|
|
209
|
+
transformers: ${updateTransformers},
|
|
210
|
+
serviceContext,
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
await ${dataUtilsImports.executeTransformPlan.fragment()}(plan, {
|
|
214
|
+
tx,
|
|
215
|
+
execute: async (${updateParts.hasTransformFields ? '{ transformed }' : ''}) =>
|
|
216
|
+
tx.${modelVar}.update({
|
|
217
|
+
where: ${whereExpr},
|
|
218
|
+
data: ${updateParts.prismaDataFragment},
|
|
219
|
+
}),
|
|
220
|
+
});
|
|
221
|
+
}`;
|
|
222
|
+
return { processCreateFragment, processUpdateFragment };
|
|
119
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* Writes a nested field transformer definition (oneToOneTransformer or oneToManyTransformer).
|
|
226
|
+
*
|
|
227
|
+
* Generates:
|
|
228
|
+
* - schemaFragment: Zod schema for the fieldSchemas object
|
|
229
|
+
* - transformer.fragment: oneToOneTransformer({...}) or oneToManyTransformer({...})
|
|
230
|
+
*
|
|
231
|
+
* For nested entities with sub-transform-fields (e.g., file fields), generates
|
|
232
|
+
* processCreate/processUpdate that use prepareTransformers + executeTransformPlan.
|
|
233
|
+
*/
|
|
120
234
|
export function writePrismaDataNestedField(input) {
|
|
121
|
-
const { parentModel, nestedModel, relation, nestedFields,
|
|
122
|
-
const parentModelConfigFrag = writeParentModelConfigFragment(input);
|
|
123
|
-
const fieldConstructor = relation.isList
|
|
124
|
-
? dataUtilsImports.nestedOneToManyField
|
|
125
|
-
: dataUtilsImports.nestedOneToOneField;
|
|
235
|
+
const { parentModel, nestedModel, relation, nestedFields, dataUtilsImports, nestedFieldSchemasFragment, allDataServiceFieldNames, } = input;
|
|
126
236
|
const nestedFieldNames = nestedFields.map((f) => f.name);
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
:
|
|
237
|
+
// Build schema using shared utility (handles fieldSchemas import, subset pick, and inline)
|
|
238
|
+
const { itemSchema, schemaFragment } = buildNestedSchemaFragments({
|
|
239
|
+
fields: nestedFields,
|
|
240
|
+
fieldNames: nestedFieldNames,
|
|
241
|
+
isList: relation.isList,
|
|
242
|
+
nestedFieldSchemasFragment,
|
|
243
|
+
allDataServiceFieldNames,
|
|
244
|
+
});
|
|
245
|
+
// Find reverse relation (nested model → parent model)
|
|
132
246
|
const reverseRelation = nestedModel.fields.find((f) => f.type === 'relation' &&
|
|
133
247
|
f.relationName === relation.relationName &&
|
|
134
248
|
f.modelType === parentModel.name);
|
|
135
249
|
if (!reverseRelation) {
|
|
136
250
|
throw new Error(`Reverse relation ${relation.name} not found on model ${nestedModel.name}`);
|
|
137
251
|
}
|
|
138
|
-
//
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
252
|
+
// Choose process function generation based on whether nested has sub-transformers
|
|
253
|
+
const hasSubTransformers = nestedFields.some((f) => f.isTransformField);
|
|
254
|
+
const { processCreateFragment, processUpdateFragment } = hasSubTransformers
|
|
255
|
+
? createTransformProcessFunctions(input, reverseRelation)
|
|
256
|
+
: createSimpleProcessFunctions(input, reverseRelation);
|
|
257
|
+
let transformerFragment;
|
|
258
|
+
if (relation.isList) {
|
|
259
|
+
// oneToManyTransformer
|
|
260
|
+
const compareItemFragment = createCompareItemFragment(nestedModel, reverseRelation, nestedFieldNames);
|
|
261
|
+
const deleteRemovedFragment = createDeleteRemovedFragment(nestedModel, reverseRelation);
|
|
262
|
+
const configEntries = {
|
|
263
|
+
parentModel: quot(lowercaseFirstChar(parentModel.name)),
|
|
264
|
+
model: quot(lowercaseFirstChar(nestedModel.name)),
|
|
265
|
+
schema: itemSchema,
|
|
266
|
+
processCreate: processCreateFragment,
|
|
267
|
+
deleteRemoved: deleteRemovedFragment,
|
|
268
|
+
};
|
|
269
|
+
if (compareItemFragment) {
|
|
270
|
+
configEntries.compareItem = compareItemFragment;
|
|
271
|
+
}
|
|
272
|
+
configEntries.processUpdate = processUpdateFragment;
|
|
273
|
+
const configObj = TsCodeUtils.mergeFragmentsAsObject(configEntries);
|
|
274
|
+
transformerFragment = tsTemplate `${dataUtilsImports.oneToManyTransformer.fragment()}(${configObj})`;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// oneToOneTransformer
|
|
278
|
+
const processDeleteFragment = createProcessDeleteFragment(nestedModel, reverseRelation);
|
|
279
|
+
const configEntries = {
|
|
280
|
+
parentModel: quot(lowercaseFirstChar(parentModel.name)),
|
|
281
|
+
model: quot(lowercaseFirstChar(nestedModel.name)),
|
|
282
|
+
schema: itemSchema,
|
|
283
|
+
processCreate: processCreateFragment,
|
|
284
|
+
processUpdate: processUpdateFragment,
|
|
285
|
+
processDelete: processDeleteFragment,
|
|
286
|
+
};
|
|
287
|
+
const configObj = TsCodeUtils.mergeFragmentsAsObject(configEntries);
|
|
288
|
+
transformerFragment = tsTemplate `${dataUtilsImports.oneToOneTransformer.fragment()}(${configObj})`;
|
|
289
|
+
}
|
|
290
|
+
// Precompute values needed by the forUpdate callback
|
|
291
|
+
const nestedModelVar = lowercaseFirstChar(nestedModel.name);
|
|
292
|
+
const reverseFields = reverseRelation.fields ?? [];
|
|
293
|
+
const reverseRefs = reverseRelation.references ?? [];
|
|
294
|
+
const findMethod = relation.isList ? 'findMany' : 'findUnique';
|
|
163
295
|
return {
|
|
164
296
|
name: relation.name,
|
|
165
|
-
|
|
297
|
+
schemaFragment,
|
|
298
|
+
transformer: {
|
|
299
|
+
fragment: transformerFragment,
|
|
300
|
+
needsExistingItem: false,
|
|
301
|
+
buildForCreateEntry: ({ transformersVarFragment }) => tsTemplate `${transformersVarFragment}.${relation.name}.forCreate(${relation.name})`,
|
|
302
|
+
buildForUpdateEntry: ({ transformersVarFragment, loadExistingVarName, }) => {
|
|
303
|
+
const whereClause = reverseFields
|
|
304
|
+
.map((field, i) => `${field}: ${loadExistingVarName}.${reverseRefs[i]}`)
|
|
305
|
+
.join(', ');
|
|
306
|
+
return tsTemplate `${transformersVarFragment}.${relation.name}.forUpdate(${relation.name}, { loadExisting: () => prisma.${nestedModelVar}.${findMethod}({ where: { ${whereClause} } }) })`;
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
isTransformField: true,
|
|
166
310
|
outputDtoField: {
|
|
167
311
|
name: relation.name,
|
|
168
312
|
type: 'nested',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested-field-writer.js","sourceRoot":"","sources":["../../../../src/generators/prisma/prisma-data-nested-field/nested-field-writer.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"nested-field-writer.js","sourceRoot":"","sources":["../../../../src/generators/prisma/prisma-data-nested-field/nested-field-writer.ts"],"names":[],"mappings":"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"}
|
package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export declare const prismaDataNestedFieldGenerator: import("@baseplate-dev/sync
|
|
|
12
12
|
nestedPrismaDataServiceSetup: import("@baseplate-dev/sync").GeneratorTask<any, {
|
|
13
13
|
prismaDataServiceSetup: import("@baseplate-dev/sync").ProviderDependency<({
|
|
14
14
|
additionalModelFieldNames: import("@baseplate-dev/utils").ArrayContainer<string>;
|
|
15
|
-
|
|
15
|
+
transformFields: import("@baseplate-dev/utils").NamedArrayFieldContainer<import("../_shared/field-definition-generators/types.js").InputFieldDefinitionOutput>;
|
|
16
16
|
} & {
|
|
17
17
|
modelName: string;
|
|
18
18
|
}) | undefined>;
|
|
@@ -21,93 +21,57 @@ export declare const prismaDataNestedFieldGenerator: import("@baseplate-dev/sync
|
|
|
21
21
|
prismaOutput: import("@baseplate-dev/sync").ProviderType<import("../prisma/prisma.generator.js").PrismaOutputProvider>;
|
|
22
22
|
prismaDataServiceSetup: import("@baseplate-dev/sync").ProviderType<{
|
|
23
23
|
additionalModelFieldNames: import("@baseplate-dev/utils").ArrayContainer<string>;
|
|
24
|
-
|
|
24
|
+
transformFields: import("@baseplate-dev/utils").NamedArrayFieldContainer<import("../_shared/field-definition-generators/types.js").InputFieldDefinitionOutput>;
|
|
25
25
|
} & {
|
|
26
26
|
modelName: string;
|
|
27
27
|
}>;
|
|
28
28
|
nestedPrismaDataService: import("@baseplate-dev/sync").ProviderDependency<import("../prisma-data-service/prisma-data-service.generator.js").PrismaDataServiceProvider | undefined>;
|
|
29
29
|
dataUtilsImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
|
|
30
|
-
|
|
30
|
+
AfterExecuteHook: {
|
|
31
31
|
isTypeOnly: true;
|
|
32
32
|
};
|
|
33
|
-
|
|
33
|
+
AnyBoundTransformer: {
|
|
34
34
|
isTypeOnly: true;
|
|
35
35
|
};
|
|
36
|
-
|
|
37
|
-
commitDelete: {};
|
|
38
|
-
commitUpdate: {};
|
|
39
|
-
composeCreate: {};
|
|
40
|
-
composeUpdate: {};
|
|
41
|
-
createParentModelConfig: {};
|
|
42
|
-
DataCreateInput: {
|
|
36
|
+
AnyTransformer: {
|
|
43
37
|
isTypeOnly: true;
|
|
44
38
|
};
|
|
45
|
-
|
|
39
|
+
BoundTransformer: {
|
|
46
40
|
isTypeOnly: true;
|
|
47
41
|
};
|
|
48
|
-
|
|
42
|
+
DataQuery: {
|
|
49
43
|
isTypeOnly: true;
|
|
50
44
|
};
|
|
51
|
-
|
|
45
|
+
defineTransformer: {};
|
|
46
|
+
executeTransformPlan: {};
|
|
47
|
+
GetResult: {
|
|
52
48
|
isTypeOnly: true;
|
|
53
49
|
};
|
|
54
|
-
|
|
50
|
+
InferTransformed: {
|
|
55
51
|
isTypeOnly: true;
|
|
56
52
|
};
|
|
57
|
-
|
|
58
|
-
isTypeOnly: true;
|
|
59
|
-
};
|
|
60
|
-
FieldTransformData: {
|
|
61
|
-
isTypeOnly: true;
|
|
62
|
-
};
|
|
63
|
-
FieldTransformResult: {
|
|
64
|
-
isTypeOnly: true;
|
|
65
|
-
};
|
|
66
|
-
generateCreateSchema: {};
|
|
67
|
-
generateUpdateSchema: {};
|
|
68
|
-
GetPayload: {
|
|
69
|
-
isTypeOnly: true;
|
|
70
|
-
};
|
|
71
|
-
InferFieldsOutput: {
|
|
72
|
-
isTypeOnly: true;
|
|
73
|
-
};
|
|
74
|
-
InferInput: {
|
|
75
|
-
isTypeOnly: true;
|
|
76
|
-
};
|
|
77
|
-
ModelInclude: {
|
|
53
|
+
MaybePromise: {
|
|
78
54
|
isTypeOnly: true;
|
|
79
55
|
};
|
|
80
56
|
ModelPropName: {
|
|
81
57
|
isTypeOnly: true;
|
|
82
58
|
};
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
NestedOneToOneFieldConfig: {
|
|
89
|
-
isTypeOnly: true;
|
|
90
|
-
};
|
|
91
|
-
OperationContext: {
|
|
92
|
-
isTypeOnly: true;
|
|
93
|
-
};
|
|
94
|
-
OperationHooks: {
|
|
59
|
+
oneToManyTransformer: {};
|
|
60
|
+
oneToOneTransformer: {};
|
|
61
|
+
prepareTransformers: {};
|
|
62
|
+
relationHelpers: {};
|
|
63
|
+
Transformer: {
|
|
95
64
|
isTypeOnly: true;
|
|
96
65
|
};
|
|
97
|
-
|
|
66
|
+
TransformerResult: {
|
|
98
67
|
isTypeOnly: true;
|
|
99
68
|
};
|
|
100
|
-
|
|
101
|
-
scalarField: {};
|
|
102
|
-
TransactionalOperationContext: {
|
|
69
|
+
TransformPlan: {
|
|
103
70
|
isTypeOnly: true;
|
|
104
71
|
};
|
|
105
72
|
WhereInput: {
|
|
106
73
|
isTypeOnly: true;
|
|
107
74
|
};
|
|
108
|
-
WhereUniqueInput: {
|
|
109
|
-
isTypeOnly: true;
|
|
110
|
-
};
|
|
111
75
|
}>>;
|
|
112
76
|
prismaGeneratedImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
|
|
113
77
|
PrismaClient: {};
|