@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.
Files changed (130) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/constants/fastify-packages.d.ts +3 -3
  3. package/dist/constants/fastify-packages.js +3 -3
  4. package/dist/generators/auth/auth-roles/auth-roles.generator.d.ts +1 -0
  5. package/dist/generators/auth/auth-roles/auth-roles.generator.d.ts.map +1 -1
  6. package/dist/generators/auth/auth-roles/auth-roles.generator.js +5 -1
  7. package/dist/generators/auth/auth-roles/auth-roles.generator.js.map +1 -1
  8. package/dist/generators/auth/auth-roles/templates/module/constants/auth-roles.constants.ts +4 -3
  9. package/dist/generators/pothos/pothos-prisma-enum/pothos-prisma-enum.generator.d.ts +1 -0
  10. package/dist/generators/pothos/pothos-prisma-enum/pothos-prisma-enum.generator.d.ts.map +1 -1
  11. package/dist/generators/pothos/pothos-prisma-enum/pothos-prisma-enum.generator.js +11 -2
  12. package/dist/generators/pothos/pothos-prisma-enum/pothos-prisma-enum.generator.js.map +1 -1
  13. package/dist/generators/prisma/_shared/build-data-helpers/build-schema-fragments.d.ts +47 -0
  14. package/dist/generators/prisma/_shared/build-data-helpers/build-schema-fragments.d.ts.map +1 -0
  15. package/dist/generators/prisma/_shared/build-data-helpers/build-schema-fragments.js +56 -0
  16. package/dist/generators/prisma/_shared/build-data-helpers/build-schema-fragments.js.map +1 -0
  17. package/dist/generators/prisma/_shared/build-data-helpers/build-transform-operation-parts.d.ts +71 -0
  18. package/dist/generators/prisma/_shared/build-data-helpers/build-transform-operation-parts.d.ts.map +1 -0
  19. package/dist/generators/prisma/_shared/build-data-helpers/build-transform-operation-parts.js +153 -0
  20. package/dist/generators/prisma/_shared/build-data-helpers/build-transform-operation-parts.js.map +1 -0
  21. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorization-statements.d.ts +46 -0
  22. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorization-statements.d.ts.map +1 -0
  23. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorization-statements.js +44 -0
  24. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorization-statements.js.map +1 -0
  25. package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.d.ts +6 -0
  26. package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.d.ts.map +1 -1
  27. package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.js +13 -1
  28. package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.js.map +1 -1
  29. package/dist/generators/prisma/_shared/build-data-helpers/generate-where-type.d.ts +24 -0
  30. package/dist/generators/prisma/_shared/build-data-helpers/generate-where-type.d.ts.map +1 -0
  31. package/dist/generators/prisma/_shared/build-data-helpers/generate-where-type.js +49 -0
  32. package/dist/generators/prisma/_shared/build-data-helpers/generate-where-type.js.map +1 -0
  33. package/dist/generators/prisma/_shared/field-definition-generators/generate-scalar-input-field.d.ts +1 -4
  34. package/dist/generators/prisma/_shared/field-definition-generators/generate-scalar-input-field.d.ts.map +1 -1
  35. package/dist/generators/prisma/_shared/field-definition-generators/generate-scalar-input-field.js +10 -2
  36. package/dist/generators/prisma/_shared/field-definition-generators/generate-scalar-input-field.js.map +1 -1
  37. package/dist/generators/prisma/_shared/field-definition-generators/types.d.ts +47 -1
  38. package/dist/generators/prisma/_shared/field-definition-generators/types.d.ts.map +1 -1
  39. package/dist/generators/prisma/data-utils/data-utils.generator.d.ts +17 -74
  40. package/dist/generators/prisma/data-utils/data-utils.generator.d.ts.map +1 -1
  41. package/dist/generators/prisma/data-utils/generated/index.d.ts +50 -145
  42. package/dist/generators/prisma/data-utils/generated/index.d.ts.map +1 -1
  43. package/dist/generators/prisma/data-utils/generated/template-paths.d.ts +5 -6
  44. package/dist/generators/prisma/data-utils/generated/template-paths.d.ts.map +1 -1
  45. package/dist/generators/prisma/data-utils/generated/template-paths.js +5 -6
  46. package/dist/generators/prisma/data-utils/generated/template-paths.js.map +1 -1
  47. package/dist/generators/prisma/data-utils/generated/template-renderers.d.ts +0 -21
  48. package/dist/generators/prisma/data-utils/generated/template-renderers.d.ts.map +1 -1
  49. package/dist/generators/prisma/data-utils/generated/template-renderers.js +1 -7
  50. package/dist/generators/prisma/data-utils/generated/template-renderers.js.map +1 -1
  51. package/dist/generators/prisma/data-utils/generated/ts-import-providers.d.ts +51 -159
  52. package/dist/generators/prisma/data-utils/generated/ts-import-providers.d.ts.map +1 -1
  53. package/dist/generators/prisma/data-utils/generated/ts-import-providers.js +32 -64
  54. package/dist/generators/prisma/data-utils/generated/ts-import-providers.js.map +1 -1
  55. package/dist/generators/prisma/data-utils/generated/typed-templates.d.ts +66 -142
  56. package/dist/generators/prisma/data-utils/generated/typed-templates.d.ts.map +1 -1
  57. package/dist/generators/prisma/data-utils/generated/typed-templates.js +47 -98
  58. package/dist/generators/prisma/data-utils/generated/typed-templates.js.map +1 -1
  59. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/define-transformer.ts +130 -0
  60. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/execute-transform-plan.ts +108 -0
  61. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/nested-transformers.ts +364 -0
  62. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/prepare-transformers.ts +73 -0
  63. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/prisma-types.ts +6 -83
  64. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/transformer-types.ts +118 -0
  65. package/dist/generators/prisma/prisma-authorizer-utils/generated/index.d.ts +34 -106
  66. package/dist/generators/prisma/prisma-authorizer-utils/generated/index.d.ts.map +1 -1
  67. package/dist/generators/prisma/prisma-authorizer-utils/generated/template-renderers.d.ts +17 -53
  68. package/dist/generators/prisma/prisma-authorizer-utils/generated/template-renderers.d.ts.map +1 -1
  69. package/dist/generators/prisma/prisma-authorizer-utils/generated/typed-templates.d.ts +34 -106
  70. package/dist/generators/prisma/prisma-authorizer-utils/generated/typed-templates.d.ts.map +1 -1
  71. package/dist/generators/prisma/prisma-authorizer-utils/prisma-authorizer-utils.generator.d.ts +17 -53
  72. package/dist/generators/prisma/prisma-authorizer-utils/prisma-authorizer-utils.generator.d.ts.map +1 -1
  73. package/dist/generators/prisma/prisma-authorizer-utils/templates/src/utils/authorizers.ts +11 -11
  74. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.d.ts +39 -49
  75. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.d.ts.map +1 -1
  76. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.js +82 -45
  77. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.js.map +1 -1
  78. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.d.ts +39 -52
  79. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.d.ts.map +1 -1
  80. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.js +48 -32
  81. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.js.map +1 -1
  82. package/dist/generators/prisma/prisma-data-nested-field/nested-field-writer.d.ts +16 -2
  83. package/dist/generators/prisma/prisma-data-nested-field/nested-field-writer.d.ts.map +1 -1
  84. package/dist/generators/prisma/prisma-data-nested-field/nested-field-writer.js +282 -138
  85. package/dist/generators/prisma/prisma-data-nested-field/nested-field-writer.js.map +1 -1
  86. package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.d.ts +19 -55
  87. package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.d.ts.map +1 -1
  88. package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.js +18 -4
  89. package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.js.map +1 -1
  90. package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.d.ts +37 -92
  91. package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.d.ts.map +1 -1
  92. package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.js +86 -29
  93. package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.js.map +1 -1
  94. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.d.ts +40 -52
  95. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.d.ts.map +1 -1
  96. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.js +102 -49
  97. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.js.map +1 -1
  98. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.d.ts +51 -159
  99. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.d.ts.map +1 -1
  100. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.d.ts +17 -53
  101. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.d.ts.map +1 -1
  102. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.d.ts +68 -212
  103. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.d.ts.map +1 -1
  104. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.d.ts +17 -53
  105. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.d.ts.map +1 -1
  106. package/dist/generators/prisma/prisma-relation-field/prisma-relation-field.generator.js +1 -1
  107. package/dist/generators/prisma/prisma-relation-field/prisma-relation-field.generator.js.map +1 -1
  108. package/dist/writers/prisma-schema/fields.d.ts +5 -1
  109. package/dist/writers/prisma-schema/fields.d.ts.map +1 -1
  110. package/dist/writers/prisma-schema/fields.js +8 -2
  111. package/dist/writers/prisma-schema/fields.js.map +1 -1
  112. package/package.json +8 -8
  113. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.d.ts +0 -20
  114. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.d.ts.map +0 -1
  115. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.js +0 -28
  116. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.js.map +0 -1
  117. package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.d.ts +0 -130
  118. package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.d.ts.map +0 -1
  119. package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.js +0 -221
  120. package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.js.map +0 -1
  121. package/dist/generators/prisma/_shared/build-data-helpers/index.d.ts +0 -4
  122. package/dist/generators/prisma/_shared/build-data-helpers/index.d.ts.map +0 -1
  123. package/dist/generators/prisma/_shared/build-data-helpers/index.js +0 -4
  124. package/dist/generators/prisma/_shared/build-data-helpers/index.js.map +0 -1
  125. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/commit-operations.ts +0 -366
  126. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/compose-operations.ts +0 -131
  127. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/field-definitions.ts +0 -777
  128. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/field-utils.ts +0 -201
  129. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/prisma-utils.ts +0 -90
  130. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/types.ts +0 -721
@@ -1,201 +0,0 @@
1
- // @ts-nocheck
2
-
3
- import type {
4
- AnyFieldDefinition,
5
- AnyOperationHooks,
6
- DataOperationType,
7
- InferFieldOutput,
8
- InferFieldsCreateOutput,
9
- InferFieldsOutput,
10
- InferFieldsUpdateOutput,
11
- InferInput,
12
- InferInputSchema,
13
- } from '$types';
14
- import type { ServiceContext } from '%serviceContextImports';
15
-
16
- import { z } from 'zod';
17
-
18
- /**
19
- * Invokes an array of hooks with the provided context.
20
- *
21
- * All hooks are executed in parallel using `Promise.all`. If no hooks are provided
22
- * or the array is empty, this function returns immediately.
23
- *
24
- * @template TContext - The context type passed to each hook
25
- * @param hooks - Optional array of async hook functions to invoke
26
- * @param context - The context object passed to each hook
27
- * @returns Promise that resolves when all hooks have completed
28
- *
29
- * @example
30
- * ```typescript
31
- * await invokeHooks(config.hooks?.beforeExecute, {
32
- * operation: 'create',
33
- * serviceContext: ctx,
34
- * tx: transaction,
35
- * });
36
- * ```
37
- */
38
- export async function invokeHooks<TContext>(
39
- hooks: ((ctx: TContext) => Promise<void>)[] | undefined,
40
- context: TContext,
41
- ): Promise<void> {
42
- if (!hooks || hooks.length === 0) return;
43
- await Promise.all(hooks.map((hook) => hook(context)));
44
- }
45
-
46
- /**
47
- * Transforms field definitions into Prisma create/update data structures.
48
- *
49
- * This function processes each field definition by:
50
- * 1. Validating the input value against the field's schema
51
- * 2. Transforming the value into Prisma-compatible create/update data
52
- * 3. Collecting hooks from each field for execution during the operation lifecycle
53
- *
54
- * @template TFields - Record of field definitions
55
- * @param fields - Field definitions to process
56
- * @param input - Input data to validate and transform
57
- * @param options - Transformation options
58
- * @param options.serviceContext - Service context with user, request info
59
- * @param options.operation - Type of operation (create, update, upsert, delete)
60
- * @param options.allowOptionalFields - Whether to allow undefined field values
61
- * @param options.loadExisting - Function to load existing model data
62
- * @returns Object containing transformed data and collected hooks
63
- *
64
- * @example
65
- * ```typescript
66
- * const { data, hooks } = await transformFields(
67
- * { name: scalarField(z.string()), email: scalarField(z.email()) },
68
- * { name: 'John', email: 'john@example.com' },
69
- * {
70
- * serviceContext: ctx,
71
- * operation: 'create',
72
- * allowOptionalFields: false,
73
- * loadExisting: () => Promise.resolve(undefined),
74
- * },
75
- * );
76
- * ```
77
- */
78
- export async function transformFields<
79
- TFields extends Record<string, AnyFieldDefinition>,
80
- >(
81
- fields: TFields,
82
- input: InferInput<TFields>,
83
- {
84
- serviceContext,
85
- operation,
86
- allowOptionalFields,
87
- loadExisting,
88
- }: {
89
- serviceContext: ServiceContext;
90
- operation: DataOperationType;
91
- allowOptionalFields: boolean;
92
- loadExisting: () => Promise<object | undefined>;
93
- },
94
- ): Promise<{
95
- data: InferFieldsOutput<TFields>;
96
- hooks: AnyOperationHooks;
97
- }> {
98
- const hooks: Required<AnyOperationHooks> = {
99
- beforeExecute: [],
100
- afterExecute: [],
101
- afterCommit: [],
102
- };
103
-
104
- const data = {} as {
105
- [K in keyof TFields]: InferFieldOutput<TFields[K]>;
106
- };
107
-
108
- for (const [key, field] of Object.entries(fields)) {
109
- const fieldKey = key as keyof typeof input;
110
- const value = input[fieldKey];
111
-
112
- if (allowOptionalFields && value === undefined) continue;
113
-
114
- const result = await field.processInput(value, {
115
- operation,
116
- serviceContext,
117
- fieldName: fieldKey as string,
118
- loadExisting,
119
- });
120
-
121
- if (result.data !== undefined) {
122
- data[fieldKey as keyof TFields] = result.data as InferFieldOutput<
123
- TFields[keyof TFields]
124
- >;
125
- }
126
-
127
- if (result.hooks) {
128
- hooks.beforeExecute.push(...(result.hooks.beforeExecute ?? []));
129
- hooks.afterExecute.push(...(result.hooks.afterExecute ?? []));
130
- hooks.afterCommit.push(...(result.hooks.afterCommit ?? []));
131
- }
132
- }
133
-
134
- const create = {} as InferFieldsCreateOutput<TFields>;
135
- const update = {} as InferFieldsUpdateOutput<TFields>;
136
- for (const [key, value] of Object.entries<
137
- InferFieldOutput<TFields[keyof TFields]>
138
- >(data)) {
139
- if (value.create !== undefined) {
140
- create[key as keyof TFields] =
141
- value.create as InferFieldsCreateOutput<TFields>[keyof TFields];
142
- }
143
- if (value.update !== undefined) {
144
- update[key as keyof TFields] =
145
- value.update as InferFieldsUpdateOutput<TFields>[keyof TFields];
146
- }
147
- }
148
-
149
- return { data: { create, update }, hooks };
150
- }
151
-
152
- /**
153
- * =========================================
154
- * Schema Generation Utilities
155
- * =========================================
156
- */
157
-
158
- /**
159
- * Generates a Zod schema for create operations from field definitions.
160
- *
161
- * Extracts the Zod schema from each field definition and combines them
162
- * into a single object schema. This schema can be used for validation
163
- * in GraphQL resolvers, REST endpoints, tRPC procedures, or OpenAPI documentation.
164
- *
165
- * @template TFields - Record of field definitions
166
- * @param fields - Field definitions to extract schemas from
167
- * @returns Zod object schema preserving each field's optionality
168
- */
169
- export function generateCreateSchema<
170
- TFields extends Record<string, AnyFieldDefinition>,
171
- >(fields: TFields): InferInputSchema<TFields> {
172
- const shape = Object.fromEntries(
173
- Object.entries(fields).map(([key, field]) => [key, field.schema]),
174
- ) as {
175
- [K in keyof TFields]: TFields[K]['schema'];
176
- };
177
-
178
- return z.object(shape) as InferInputSchema<TFields>;
179
- }
180
-
181
- type PartialSchema<T extends z.ZodObject<z.ZodRawShape>> = z.ZodObject<{
182
- [K in keyof T['shape']]: z.ZodOptional<T['shape'][K]>;
183
- }>;
184
-
185
- /**
186
- * Generates a Zod schema for update operations from field definitions.
187
- *
188
- * Wraps {@link generateCreateSchema} with `.partial()` so every field becomes
189
- * optional, allowing callers to supply only the fields they want to change.
190
- *
191
- * @template TFields - Record of field definitions
192
- * @param fields - Field definitions to extract schemas from
193
- * @returns Partial Zod object schema where all fields are optional
194
- */
195
- export function generateUpdateSchema<
196
- TFields extends Record<string, AnyFieldDefinition>,
197
- >(fields: TFields): PartialSchema<InferInputSchema<TFields>> {
198
- return generateCreateSchema(fields).partial() as PartialSchema<
199
- InferInputSchema<TFields>
200
- >;
201
- }
@@ -1,90 +0,0 @@
1
- // @ts-nocheck
2
-
3
- import type {
4
- CreateInput,
5
- GetPayload,
6
- ModelInclude,
7
- ModelPropName,
8
- UpdateInput,
9
- WhereInput,
10
- WhereUniqueInput,
11
- } from '$prismaTypes';
12
- import type { Prisma } from '%prismaGeneratedImports';
13
- import type { prisma } from '%prismaImports';
14
-
15
- /**
16
- * Generic interface for Prisma model delegates.
17
- *
18
- * Provides a type-safe way to interact with any Prisma model through
19
- * a common set of operations. Used internally by the data operations
20
- * system to perform database operations on models determined at runtime.
21
- *
22
- * @template TModelName - The Prisma model name
23
- *
24
- * @internal This interface is used internally by the data operations system
25
- */
26
- interface GenericPrismaDelegate<TModelName extends ModelPropName> {
27
- findUnique: <
28
- TInclude extends
29
- | NonNullable<ModelInclude<TModelName>['include']>
30
- | undefined = undefined,
31
- >(args: {
32
- where: WhereUniqueInput<TModelName>;
33
- include?: TInclude;
34
- }) => Promise<GetPayload<
35
- TModelName,
36
- TInclude extends undefined ? undefined : { include: TInclude }
37
- > | null>;
38
- findMany: (args: {
39
- where: WhereInput<TModelName>;
40
- }) => Promise<GetPayload<TModelName>[]>;
41
- create: (args: {
42
- data: CreateInput<TModelName>;
43
- }) => Promise<GetPayload<TModelName>>;
44
- update: (args: {
45
- where: WhereUniqueInput<TModelName>;
46
- data: UpdateInput<TModelName>;
47
- }) => Promise<GetPayload<TModelName>>;
48
- upsert: (args: {
49
- where: WhereUniqueInput<TModelName>;
50
- create: CreateInput<TModelName>;
51
- update: UpdateInput<TModelName>;
52
- }) => Promise<GetPayload<TModelName>>;
53
- delete: (args: {
54
- where: WhereUniqueInput<TModelName>;
55
- }) => Promise<GetPayload<TModelName>>;
56
- deleteMany: (args: {
57
- where: WhereInput<TModelName>;
58
- }) => Promise<{ count: number }>;
59
- }
60
-
61
- /**
62
- * Creates a type-safe generic delegate for a Prisma model.
63
- *
64
- * This function allows accessing Prisma model operations (findUnique, create, update, etc.)
65
- * in a type-safe way when the model name is only known at runtime. It's used internally
66
- * by nested field handlers and other generic operations.
67
- *
68
- * @template TModelName - The Prisma model name
69
- * @param tx - Prisma transaction client
70
- * @param modelName - The name of the model to create a delegate for (e.g., 'user', 'post')
71
- * @returns A generic delegate providing type-safe access to model operations
72
- *
73
- * @example
74
- * ```typescript
75
- * const delegate = makeGenericPrismaDelegate(tx, 'user');
76
- *
77
- * // Type-safe operations
78
- * const user = await delegate.findUnique({ where: { id: userId } });
79
- * const users = await delegate.findMany({ where: { isActive: true } });
80
- * const newUser = await delegate.create({ data: { name: 'John', email: 'john@example.com' } });
81
- * ```
82
- *
83
- * @internal This function is used internally by nested field handlers
84
- */
85
- export function makeGenericPrismaDelegate<TModelName extends ModelPropName>(
86
- tx: Prisma.TransactionClient | typeof prisma,
87
- modelName: TModelName,
88
- ): GenericPrismaDelegate<TModelName> {
89
- return tx[modelName] as unknown as GenericPrismaDelegate<TModelName>;
90
- }