@baseplate-dev/fastify-generators 0.5.3 → 0.6.1

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 (177) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/dist/constants/fastify-packages.d.ts +14 -14
  3. package/dist/constants/fastify-packages.js +14 -14
  4. package/dist/constants/fastify-packages.js.map +1 -1
  5. package/dist/generators/auth/auth-context/templates/module/types/auth-context.types.ts +1 -0
  6. package/dist/generators/auth/auth-context/templates/module/utils/auth-context.utils.ts +3 -1
  7. package/dist/generators/core/fastify/fastify.generator.d.ts.map +1 -1
  8. package/dist/generators/core/fastify/fastify.generator.js +3 -1
  9. package/dist/generators/core/fastify/fastify.generator.js.map +1 -1
  10. package/dist/generators/pothos/index.d.ts +1 -0
  11. package/dist/generators/pothos/index.d.ts.map +1 -1
  12. package/dist/generators/pothos/index.js +1 -0
  13. package/dist/generators/pothos/index.js.map +1 -1
  14. package/dist/generators/pothos/pothos-auth/pothos-auth.generator.d.ts +5 -0
  15. package/dist/generators/pothos/pothos-auth/pothos-auth.generator.d.ts.map +1 -1
  16. package/dist/generators/pothos/pothos-auth/pothos-auth.generator.js +8 -0
  17. package/dist/generators/pothos/pothos-auth/pothos-auth.generator.js.map +1 -1
  18. package/dist/generators/pothos/pothos-prisma-count-query/index.d.ts +2 -0
  19. package/dist/generators/pothos/pothos-prisma-count-query/index.d.ts.map +1 -0
  20. package/dist/generators/pothos/pothos-prisma-count-query/index.js +2 -0
  21. package/dist/generators/pothos/pothos-prisma-count-query/index.js.map +1 -0
  22. package/dist/generators/pothos/pothos-prisma-count-query/pothos-prisma-count-query.generator.d.ts +16 -0
  23. package/dist/generators/pothos/pothos-prisma-count-query/pothos-prisma-count-query.generator.d.ts.map +1 -0
  24. package/dist/generators/pothos/pothos-prisma-count-query/pothos-prisma-count-query.generator.js +104 -0
  25. package/dist/generators/pothos/pothos-prisma-count-query/pothos-prisma-count-query.generator.js.map +1 -0
  26. package/dist/generators/pothos/pothos-prisma-crud-mutation/pothos-prisma-crud-mutation.generator.d.ts.map +1 -1
  27. package/dist/generators/pothos/pothos-prisma-crud-mutation/pothos-prisma-crud-mutation.generator.js +2 -5
  28. package/dist/generators/pothos/pothos-prisma-crud-mutation/pothos-prisma-crud-mutation.generator.js.map +1 -1
  29. package/dist/generators/pothos/pothos-prisma-find-query/pothos-prisma-find-query.generator.d.ts +4 -0
  30. package/dist/generators/pothos/pothos-prisma-find-query/pothos-prisma-find-query.generator.d.ts.map +1 -1
  31. package/dist/generators/pothos/pothos-prisma-find-query/pothos-prisma-find-query.generator.js +52 -10
  32. package/dist/generators/pothos/pothos-prisma-find-query/pothos-prisma-find-query.generator.js.map +1 -1
  33. package/dist/generators/pothos/pothos-prisma-list-query/pothos-prisma-list-query.generator.d.ts +4 -0
  34. package/dist/generators/pothos/pothos-prisma-list-query/pothos-prisma-list-query.generator.d.ts.map +1 -1
  35. package/dist/generators/pothos/pothos-prisma-list-query/pothos-prisma-list-query.generator.js +39 -3
  36. package/dist/generators/pothos/pothos-prisma-list-query/pothos-prisma-list-query.generator.js.map +1 -1
  37. package/dist/generators/pothos/pothos-prisma-object/pothos-prisma-object.generator.d.ts +7 -1
  38. package/dist/generators/pothos/pothos-prisma-object/pothos-prisma-object.generator.d.ts.map +1 -1
  39. package/dist/generators/pothos/pothos-prisma-object/pothos-prisma-object.generator.js +73 -13
  40. package/dist/generators/pothos/pothos-prisma-object/pothos-prisma-object.generator.js.map +1 -1
  41. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.d.ts +20 -0
  42. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.d.ts.map +1 -0
  43. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.js +28 -0
  44. package/dist/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.js.map +1 -0
  45. package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.d.ts +48 -55
  46. package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.d.ts.map +1 -1
  47. package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.js +130 -67
  48. package/dist/generators/prisma/_shared/build-data-helpers/generate-operation-callbacks.js.map +1 -1
  49. package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.d.ts +2 -0
  50. package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.d.ts.map +1 -1
  51. package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.js +3 -3
  52. package/dist/generators/prisma/_shared/build-data-helpers/generate-relation-build-data.js.map +1 -1
  53. package/dist/generators/prisma/_shared/build-data-helpers/index.d.ts +1 -0
  54. package/dist/generators/prisma/_shared/build-data-helpers/index.d.ts.map +1 -1
  55. package/dist/generators/prisma/_shared/build-data-helpers/index.js +1 -0
  56. package/dist/generators/prisma/_shared/build-data-helpers/index.js.map +1 -1
  57. package/dist/generators/prisma/data-utils/data-utils.generator.d.ts +25 -6
  58. package/dist/generators/prisma/data-utils/data-utils.generator.d.ts.map +1 -1
  59. package/dist/generators/prisma/data-utils/generated/index.d.ts +78 -23
  60. package/dist/generators/prisma/data-utils/generated/index.d.ts.map +1 -1
  61. package/dist/generators/prisma/data-utils/generated/template-paths.d.ts +3 -1
  62. package/dist/generators/prisma/data-utils/generated/template-paths.d.ts.map +1 -1
  63. package/dist/generators/prisma/data-utils/generated/template-paths.js +3 -1
  64. package/dist/generators/prisma/data-utils/generated/template-paths.js.map +1 -1
  65. package/dist/generators/prisma/data-utils/generated/ts-import-providers.d.ts +75 -18
  66. package/dist/generators/prisma/data-utils/generated/ts-import-providers.d.ts.map +1 -1
  67. package/dist/generators/prisma/data-utils/generated/ts-import-providers.js +26 -8
  68. package/dist/generators/prisma/data-utils/generated/ts-import-providers.js.map +1 -1
  69. package/dist/generators/prisma/data-utils/generated/typed-templates.d.ts +106 -34
  70. package/dist/generators/prisma/data-utils/generated/typed-templates.d.ts.map +1 -1
  71. package/dist/generators/prisma/data-utils/generated/typed-templates.js +61 -14
  72. package/dist/generators/prisma/data-utils/generated/typed-templates.js.map +1 -1
  73. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/commit-operations.ts +366 -0
  74. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/compose-operations.ts +131 -0
  75. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/field-definitions.ts +26 -30
  76. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/field-utils.ts +201 -0
  77. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/prisma-types.ts +24 -20
  78. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/prisma-utils.ts +14 -6
  79. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/relation-helpers.ts +21 -26
  80. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/types.ts +374 -25
  81. package/dist/generators/prisma/index.d.ts +2 -0
  82. package/dist/generators/prisma/index.d.ts.map +1 -1
  83. package/dist/generators/prisma/index.js +2 -0
  84. package/dist/generators/prisma/index.js.map +1 -1
  85. package/dist/generators/prisma/prisma-authorizer-utils/generated/index.d.ts +50 -12
  86. package/dist/generators/prisma/prisma-authorizer-utils/generated/index.d.ts.map +1 -1
  87. package/dist/generators/prisma/prisma-authorizer-utils/generated/template-renderers.d.ts +25 -6
  88. package/dist/generators/prisma/prisma-authorizer-utils/generated/template-renderers.d.ts.map +1 -1
  89. package/dist/generators/prisma/prisma-authorizer-utils/generated/typed-templates.d.ts +50 -12
  90. package/dist/generators/prisma/prisma-authorizer-utils/generated/typed-templates.d.ts.map +1 -1
  91. package/dist/generators/prisma/prisma-authorizer-utils/prisma-authorizer-utils.generator.d.ts +25 -6
  92. package/dist/generators/prisma/prisma-authorizer-utils/prisma-authorizer-utils.generator.d.ts.map +1 -1
  93. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.d.ts +26 -6
  94. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.d.ts.map +1 -1
  95. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.js +53 -25
  96. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.js.map +1 -1
  97. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.d.ts +31 -6
  98. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.d.ts.map +1 -1
  99. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.js +52 -15
  100. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.js.map +1 -1
  101. package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.d.ts +25 -6
  102. package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.d.ts.map +1 -1
  103. package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.d.ts +25 -6
  104. package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.d.ts.map +1 -1
  105. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.d.ts +31 -6
  106. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.d.ts.map +1 -1
  107. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.js +65 -23
  108. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.js.map +1 -1
  109. package/dist/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.d.ts +2 -0
  110. package/dist/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.d.ts.map +1 -1
  111. package/dist/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.js +86 -53
  112. package/dist/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.js.map +1 -1
  113. package/dist/generators/prisma/prisma-model-query-filter/index.d.ts +2 -0
  114. package/dist/generators/prisma/prisma-model-query-filter/index.d.ts.map +1 -0
  115. package/dist/generators/prisma/prisma-model-query-filter/index.js +2 -0
  116. package/dist/generators/prisma/prisma-model-query-filter/index.js.map +1 -0
  117. package/dist/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.d.ts +60 -0
  118. package/dist/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.d.ts.map +1 -0
  119. package/dist/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.js +124 -0
  120. package/dist/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.js.map +1 -0
  121. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.d.ts +364 -0
  122. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.d.ts.map +1 -0
  123. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.js +13 -0
  124. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.js.map +1 -0
  125. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-paths.d.ts +13 -0
  126. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-paths.d.ts.map +1 -0
  127. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-paths.js +25 -0
  128. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-paths.js.map +1 -0
  129. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.d.ts +131 -0
  130. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.d.ts.map +1 -0
  131. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.js +49 -0
  132. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.js.map +1 -0
  133. package/dist/generators/prisma/prisma-query-filter-utils/generated/ts-import-providers.d.ts +66 -0
  134. package/dist/generators/prisma/prisma-query-filter-utils/generated/ts-import-providers.d.ts.map +1 -0
  135. package/dist/generators/prisma/prisma-query-filter-utils/generated/ts-import-providers.js +40 -0
  136. package/dist/generators/prisma/prisma-query-filter-utils/generated/ts-import-providers.js.map +1 -0
  137. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.d.ts +411 -0
  138. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.d.ts.map +1 -0
  139. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.js +46 -0
  140. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.js.map +1 -0
  141. package/dist/generators/prisma/prisma-query-filter-utils/index.d.ts +4 -0
  142. package/dist/generators/prisma/prisma-query-filter-utils/index.d.ts.map +1 -0
  143. package/dist/generators/prisma/prisma-query-filter-utils/index.js +3 -0
  144. package/dist/generators/prisma/prisma-query-filter-utils/index.js.map +1 -0
  145. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.d.ts +156 -0
  146. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.d.ts.map +1 -0
  147. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.js +32 -0
  148. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.js.map +1 -0
  149. package/dist/generators/prisma/prisma-query-filter-utils/templates/src/utils/query-filters.ts +209 -0
  150. package/dist/generators/prisma/prisma-query-filter-utils/templates/src/utils/query-helpers.ts +70 -0
  151. package/dist/generators/vitest/prisma-vitest/generated/index.d.ts +0 -6
  152. package/dist/generators/vitest/prisma-vitest/generated/index.d.ts.map +1 -1
  153. package/dist/generators/vitest/prisma-vitest/generated/template-renderers.d.ts.map +1 -1
  154. package/dist/generators/vitest/prisma-vitest/generated/template-renderers.js +0 -1
  155. package/dist/generators/vitest/prisma-vitest/generated/template-renderers.js.map +1 -1
  156. package/dist/generators/vitest/prisma-vitest/generated/typed-templates.d.ts +0 -6
  157. package/dist/generators/vitest/prisma-vitest/generated/typed-templates.d.ts.map +1 -1
  158. package/dist/generators/vitest/prisma-vitest/generated/typed-templates.js +1 -4
  159. package/dist/generators/vitest/prisma-vitest/generated/typed-templates.js.map +1 -1
  160. package/dist/generators/vitest/prisma-vitest/templates/src/tests/helpers/prisma.test-helper.ts +2 -10
  161. package/dist/types/service-dto-kinds.d.ts +0 -6
  162. package/dist/types/service-dto-kinds.d.ts.map +1 -1
  163. package/dist/types/service-dto-kinds.js +0 -6
  164. package/dist/types/service-dto-kinds.js.map +1 -1
  165. package/dist/writers/pothos/helpers.d.ts +1 -0
  166. package/dist/writers/pothos/helpers.d.ts.map +1 -1
  167. package/dist/writers/pothos/helpers.js +1 -0
  168. package/dist/writers/pothos/helpers.js.map +1 -1
  169. package/dist/writers/pothos/scalar-fields.d.ts +3 -1
  170. package/dist/writers/pothos/scalar-fields.d.ts.map +1 -1
  171. package/dist/writers/pothos/scalar-fields.js +1 -0
  172. package/dist/writers/pothos/scalar-fields.js.map +1 -1
  173. package/dist/writers/prisma-schema/fields.d.ts +1 -1
  174. package/dist/writers/prisma-schema/fields.js +2 -2
  175. package/dist/writers/prisma-schema/fields.js.map +1 -1
  176. package/package.json +8 -8
  177. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/define-operations.ts +0 -1134
@@ -2,6 +2,9 @@ export declare const pothosPrismaFindQueryGenerator: import("@baseplate-dev/sync
2
2
  modelName: string;
3
3
  order: number;
4
4
  hasPrimaryKeyInputType: boolean;
5
+ queryFilterRef?: string | undefined;
6
+ queryFilterRoles?: string[] | undefined;
7
+ queryFilterBypassRoles?: string[] | undefined;
5
8
  }, {
6
9
  main: import("@baseplate-dev/sync").GeneratorTask<{
7
10
  pothosField: import("@baseplate-dev/sync").ProviderExport<import("#src/generators/pothos/_providers/index.js").PothosFieldProvider>;
@@ -10,6 +13,7 @@ export declare const pothosPrismaFindQueryGenerator: import("@baseplate-dev/sync
10
13
  pothosTypesFile: import("@baseplate-dev/sync").ProviderType<import("../pothos-types-file/pothos-types-file.generator.js").PothosTypesFileProvider>;
11
14
  pothosSchemaBaseTypes: import("@baseplate-dev/sync").ProviderType<import("../pothos/pothos.generator.js").PothosSchemaBaseTypesProvider>;
12
15
  pothosPrimaryKeyInputType: import("@baseplate-dev/sync").ProviderDependency<import("#src/generators/pothos/_providers/index.js").PothosTypeOutputProvider | undefined>;
16
+ queryFilter: import("@baseplate-dev/sync").ProviderDependency<import("#src/generators/prisma/prisma-model-query-filter/index.js").PrismaModelQueryFilterProvider | undefined>;
13
17
  }, any>;
14
18
  }>;
15
19
  //# sourceMappingURL=pothos-prisma-find-query.generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pothos-prisma-find-query.generator.d.ts","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-find-query/pothos-prisma-find-query.generator.ts"],"names":[],"mappings":"AA6CA,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;EAgHzC,CAAC"}
1
+ {"version":3,"file":"pothos-prisma-find-query.generator.d.ts","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-find-query/pothos-prisma-find-query.generator.ts"],"names":[],"mappings":"AA2DA,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;EA8JzC,CAAC"}
@@ -4,6 +4,7 @@ import { quot, sortObjectKeys } from '@baseplate-dev/utils';
4
4
  import { z } from 'zod';
5
5
  import { pothosFieldProvider, pothosTypeOutputProvider, } from '#src/generators/pothos/_providers/index.js';
6
6
  import { getModelIdFieldName, getPrimaryKeyDefinition, } from '#src/generators/prisma/_shared/crud-method/primary-key-input.js';
7
+ import { prismaModelQueryFilterProvider } from '#src/generators/prisma/prisma-model-query-filter/index.js';
7
8
  import { prismaOutputProvider } from '#src/generators/prisma/prisma/index.js';
8
9
  import { lowerCaseFirst } from '#src/utils/case.js';
9
10
  import { writePothosArgsFromDtoFields } from '#src/writers/pothos/index.js';
@@ -24,13 +25,26 @@ const descriptorSchema = z.object({
24
25
  * Whether the model has a primary key input type.
25
26
  */
26
27
  hasPrimaryKeyInputType: z.boolean(),
28
+ /**
29
+ * Model name key to look up the query filter provider. When set,
30
+ * the resolve function will spread `queryFilter.buildWhere(ctx, roles)`.
31
+ */
32
+ queryFilterRef: z.string().optional(),
33
+ /**
34
+ * Role names to pass to `queryFilter.buildWhere()`.
35
+ */
36
+ queryFilterRoles: z.array(z.string()).optional(),
37
+ /**
38
+ * Global role names that bypass the query filter entirely.
39
+ */
40
+ queryFilterBypassRoles: z.array(z.string()).optional(),
27
41
  });
28
42
  export const pothosPrismaFindQueryGenerator = createGenerator({
29
43
  name: 'pothos/pothos-prisma-find-query',
30
44
  generatorFileUrl: import.meta.url,
31
45
  descriptorSchema,
32
46
  scopes: [pothosFieldScope],
33
- buildTasks: ({ modelName, order, hasPrimaryKeyInputType }) => ({
47
+ buildTasks: ({ modelName, order, hasPrimaryKeyInputType, queryFilterRef, queryFilterRoles, queryFilterBypassRoles, }) => ({
34
48
  main: createGeneratorTask({
35
49
  dependencies: {
36
50
  prismaOutput: prismaOutputProvider,
@@ -41,11 +55,14 @@ export const pothosPrismaFindQueryGenerator = createGenerator({
41
55
  .optionalReference(hasPrimaryKeyInputType
42
56
  ? getPothosPrismaPrimaryKeyTypeOutputName(modelName)
43
57
  : undefined),
58
+ queryFilter: prismaModelQueryFilterProvider
59
+ .dependency()
60
+ .optionalReference(queryFilterRef),
44
61
  },
45
62
  exports: {
46
63
  pothosField: pothosFieldProvider.export(pothosFieldScope),
47
64
  },
48
- run({ prismaOutput, pothosSchemaBaseTypes, pothosTypesFile, pothosPrimaryKeyInputType, }) {
65
+ run({ prismaOutput, pothosSchemaBaseTypes, pothosTypesFile, pothosPrimaryKeyInputType, queryFilter, }) {
49
66
  const modelOutput = prismaOutput.getPrismaModel(modelName);
50
67
  const { idFields } = modelOutput;
51
68
  if (!idFields) {
@@ -73,20 +90,45 @@ export const pothosPrismaFindQueryGenerator = createGenerator({
73
90
  build: () => {
74
91
  const pothosArgs = writePothosArgsFromDtoFields([primaryKeyDefinition], writerOptions);
75
92
  const primaryKeyFieldName = getModelIdFieldName(modelOutput);
76
- const resolveFunction = TsCodeUtils.formatFragment(`async (query, root, ARG_INPUT) => MODEL.findUniqueOrThrow({...query,where: WHERE_CLAUSE})`, {
77
- ARG_INPUT: `{ ${primaryKeyDefinition.name} }`,
78
- MODEL: prismaOutput.getPrismaModelFragment(modelName),
79
- WHERE_CLAUSE: primaryKeyFieldName === primaryKeyDefinition.name
80
- ? `{ ${primaryKeyFieldName} }`
81
- : `{ ${primaryKeyFieldName}: ${primaryKeyDefinition.name} }`,
82
- });
93
+ let resolveFunction;
94
+ if (queryFilter &&
95
+ queryFilterRoles &&
96
+ queryFilterRoles.length > 0) {
97
+ const rolesArray = queryFilterRoles
98
+ .map((r) => `'${r}'`)
99
+ .join(', ');
100
+ const queryFilterFragment = queryFilter.getQueryFilterFragment();
101
+ const idPart = primaryKeyFieldName === primaryKeyDefinition.name
102
+ ? primaryKeyFieldName
103
+ : `${primaryKeyFieldName}: ${primaryKeyDefinition.name}`;
104
+ const bypassRolesArg = queryFilterBypassRoles && queryFilterBypassRoles.length > 0
105
+ ? `, { bypassRoles: [${queryFilterBypassRoles.map((r) => quot(r)).join(', ')}] }`
106
+ : '';
107
+ resolveFunction = TsCodeUtils.formatFragment(`async (query, _root, ARG_INPUT, ctx) => MODEL.findUniqueOrThrow({...query,where: { ID_PART, ...QUERY_FILTER.buildWhere(ctx, [ROLES]BYPASS_ROLES) }})`, {
108
+ ARG_INPUT: `{ ${primaryKeyDefinition.name} }`,
109
+ MODEL: prismaOutput.getPrismaModelFragment(modelName),
110
+ ID_PART: idPart,
111
+ QUERY_FILTER: queryFilterFragment,
112
+ ROLES: rolesArray,
113
+ BYPASS_ROLES: bypassRolesArg,
114
+ });
115
+ }
116
+ else {
117
+ resolveFunction = TsCodeUtils.formatFragment(`async (query, root, ARG_INPUT) => MODEL.findUniqueOrThrow({...query,where: WHERE_CLAUSE})`, {
118
+ ARG_INPUT: `{ ${primaryKeyDefinition.name} }`,
119
+ MODEL: prismaOutput.getPrismaModelFragment(modelName),
120
+ WHERE_CLAUSE: primaryKeyFieldName === primaryKeyDefinition.name
121
+ ? `{ ${primaryKeyFieldName} }`
122
+ : `{ ${primaryKeyFieldName}: ${primaryKeyDefinition.name} }`,
123
+ });
124
+ }
83
125
  const options = {
84
126
  type: quot(modelName),
85
127
  ...sortObjectKeys(customFields.value()),
86
128
  args: pothosArgs,
87
129
  resolve: resolveFunction,
88
130
  };
89
- const block = TsCodeUtils.formatFragment(`BUILDER.queryField(QUERY_NAME, (t) =>
131
+ const block = TsCodeUtils.formatFragment(`BUILDER.queryField(QUERY_NAME, (t) =>
90
132
  t.prismaField(OPTIONS)
91
133
  );`, {
92
134
  QUERY_EXPORT: `${lowerFirstModelName}Query`,
@@ -1 +1 @@
1
- {"version":3,"file":"pothos-prisma-find-query.generator.js","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-find-query/pothos-prisma-find-query.generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pothos-prisma-find-query.generator.js","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-find-query/pothos-prisma-find-query.generator.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,16 @@
1
1
  export declare const pothosPrismaListQueryGenerator: import("@baseplate-dev/sync").GeneratorBundleCreator<{
2
2
  modelName: string;
3
3
  order: number;
4
+ queryFilterRef?: string | undefined;
5
+ queryFilterRoles?: string[] | undefined;
6
+ queryFilterBypassRoles?: string[] | undefined;
4
7
  }, {
5
8
  main: import("@baseplate-dev/sync").GeneratorTask<{
6
9
  pothosField: import("@baseplate-dev/sync").ProviderExport<import("#src/generators/pothos/_providers/pothos-field.js").PothosFieldProvider>;
7
10
  }, {
8
11
  prismaOutput: import("@baseplate-dev/sync").ProviderType<import("#src/generators/prisma/prisma/index.js").PrismaOutputProvider>;
9
12
  pothosTypesFile: import("@baseplate-dev/sync").ProviderType<import("../pothos-types-file/pothos-types-file.generator.js").PothosTypesFileProvider>;
13
+ queryFilter: import("@baseplate-dev/sync").ProviderDependency<import("#src/generators/prisma/prisma-model-query-filter/index.js").PrismaModelQueryFilterProvider | undefined>;
10
14
  }, any>;
11
15
  }>;
12
16
  //# sourceMappingURL=pothos-prisma-list-query.generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pothos-prisma-list-query.generator.d.ts","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-list-query/pothos-prisma-list-query.generator.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,8BAA8B;;;;;;;;;;EAgEzC,CAAC"}
1
+ {"version":3,"file":"pothos-prisma-list-query.generator.d.ts","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-list-query/pothos-prisma-list-query.generator.ts"],"names":[],"mappings":"AA2CA,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;EAmGzC,CAAC"}
@@ -4,6 +4,7 @@ import { quot, sortObjectKeys } from '@baseplate-dev/utils';
4
4
  import { pluralize } from 'inflection';
5
5
  import { z } from 'zod';
6
6
  import { pothosFieldProvider } from '#src/generators/pothos/_providers/pothos-field.js';
7
+ import { prismaModelQueryFilterProvider } from '#src/generators/prisma/prisma-model-query-filter/index.js';
7
8
  import { prismaOutputProvider } from '#src/generators/prisma/prisma/index.js';
8
9
  import { lowerCaseFirst } from '#src/utils/case.js';
9
10
  import { pothosFieldScope } from '../_providers/scopes.js';
@@ -17,22 +18,37 @@ const descriptorSchema = z.object({
17
18
  * The order of the type in the types file.
18
19
  */
19
20
  order: z.number(),
21
+ /**
22
+ * Model name key to look up the query filter provider.
23
+ */
24
+ queryFilterRef: z.string().optional(),
25
+ /**
26
+ * Role names to pass to `queryFilter.buildWhere()`.
27
+ */
28
+ queryFilterRoles: z.array(z.string()).optional(),
29
+ /**
30
+ * Global role names that bypass the query filter entirely.
31
+ */
32
+ queryFilterBypassRoles: z.array(z.string()).optional(),
20
33
  });
21
34
  export const pothosPrismaListQueryGenerator = createGenerator({
22
35
  name: 'pothos/pothos-prisma-list-query',
23
36
  generatorFileUrl: import.meta.url,
24
37
  descriptorSchema,
25
38
  scopes: [pothosFieldScope],
26
- buildTasks: ({ modelName, order }) => ({
39
+ buildTasks: ({ modelName, order, queryFilterRef, queryFilterRoles, queryFilterBypassRoles, }) => ({
27
40
  main: createGeneratorTask({
28
41
  dependencies: {
29
42
  prismaOutput: prismaOutputProvider,
30
43
  pothosTypesFile: pothosTypesFileProvider,
44
+ queryFilter: prismaModelQueryFilterProvider
45
+ .dependency()
46
+ .optionalReference(queryFilterRef),
31
47
  },
32
48
  exports: {
33
49
  pothosField: pothosFieldProvider.export(pothosFieldScope),
34
50
  },
35
- run({ prismaOutput, pothosTypesFile }) {
51
+ run({ prismaOutput, pothosTypesFile, queryFilter }) {
36
52
  const modelOutput = prismaOutput.getPrismaModel(modelName);
37
53
  const { idFields } = modelOutput;
38
54
  if (!idFields) {
@@ -50,9 +66,29 @@ export const pothosPrismaListQueryGenerator = createGenerator({
50
66
  },
51
67
  build: () => {
52
68
  const prismaModelFragment = prismaOutput.getPrismaModelFragment(modelName);
53
- const resolveFunction = tsTemplate `async (query) => ${prismaModelFragment}.findMany({ ...query })`;
69
+ const zFragment = TsCodeUtils.importFragment('z', 'zod');
70
+ let resolveFunction;
71
+ if (queryFilter &&
72
+ queryFilterRoles &&
73
+ queryFilterRoles.length > 0) {
74
+ const rolesArray = queryFilterRoles
75
+ .map((r) => `'${r}'`)
76
+ .join(', ');
77
+ const queryFilterFragment = queryFilter.getQueryFilterFragment();
78
+ const bypassRolesArg = queryFilterBypassRoles && queryFilterBypassRoles.length > 0
79
+ ? `, { bypassRoles: [${queryFilterBypassRoles.map((r) => quot(r)).join(', ')}] }`
80
+ : '';
81
+ resolveFunction = tsTemplate `async (query, _root, { skip, take }, ctx) => ${prismaModelFragment}.findMany({ ...query, where: { ...${queryFilterFragment}.buildWhere(ctx, [${rolesArray}]${bypassRolesArg}) }, skip: skip ?? undefined, take: take ?? undefined })`;
82
+ }
83
+ else {
84
+ resolveFunction = tsTemplate `async (query, _root, { skip, take }) => ${prismaModelFragment}.findMany({ ...query, skip: skip ?? undefined, take: take ?? undefined })`;
85
+ }
54
86
  const options = {
55
87
  type: `[${quot(modelName)}]`,
88
+ args: tsTemplate `{
89
+ skip: t.arg.int({ validate: ${zFragment}.int().min(0) }),
90
+ take: t.arg.int({ validate: ${zFragment}.int().min(0) }),
91
+ }`,
56
92
  ...sortObjectKeys(customFields.value()),
57
93
  resolve: resolveFunction,
58
94
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pothos-prisma-list-query.generator.js","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-list-query/pothos-prisma-list-query.generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pothos-prisma-list-query.generator.js","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-list-query/pothos-prisma-list-query.generator.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,11 @@ export declare const pothosPrismaObjectProvider: import("@baseplate-dev/sync").P
6
6
  export declare function createPothosPrismaObjectTypeOutputName(modelName: string): string;
7
7
  export declare const pothosPrismaObjectGenerator: import("@baseplate-dev/sync").GeneratorBundleCreator<{
8
8
  modelName: string;
9
- exposedFields: string[];
9
+ exposedFields: {
10
+ name: string;
11
+ globalRoles?: string[] | undefined;
12
+ instanceRoles?: string[] | undefined;
13
+ }[];
10
14
  order: number;
11
15
  }, {
12
16
  main: import("@baseplate-dev/sync").GeneratorTask<{
@@ -16,6 +20,8 @@ export declare const pothosPrismaObjectGenerator: import("@baseplate-dev/sync").
16
20
  prismaOutput: import("@baseplate-dev/sync").ProviderType<import("#src/generators/prisma/prisma/index.js").PrismaOutputProvider>;
17
21
  pothosTypeFile: import("@baseplate-dev/sync").ProviderType<import("../pothos-types-file/pothos-types-file.generator.js").PothosTypesFileProvider>;
18
22
  pothosSchemaBaseTypes: import("@baseplate-dev/sync").ProviderType<import("../pothos/pothos.generator.js").PothosSchemaBaseTypesProvider>;
23
+ pothosAuth: import("@baseplate-dev/sync").ProviderDependency<import("../pothos-auth/pothos-auth.generator.js").PothosAuthProvider | undefined>;
24
+ modelAuthorizer: import("@baseplate-dev/sync").ProviderDependency<import("#src/generators/prisma/prisma-model-authorizer/index.js").PrismaModelAuthorizerProvider | undefined>;
19
25
  }, any>;
20
26
  }>;
21
27
  //# sourceMappingURL=pothos-prisma-object.generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pothos-prisma-object.generator.d.ts","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-object/pothos-prisma-object.generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AA0CrE,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;CACpE;AAED,eAAO,MAAM,0BAA0B,wEACiC,CAAC;AAEzE,wBAAgB,sCAAsC,CACpD,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;EAgHtC,CAAC"}
1
+ {"version":3,"file":"pothos-prisma-object.generator.d.ts","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-object/pothos-prisma-object.generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAsDrE,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;CACpE;AAED,eAAO,MAAM,0BAA0B,wEACiC,CAAC;AAEzE,wBAAgB,sCAAsC,CACpD,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;EA0LtC,CAAC"}
@@ -1,23 +1,30 @@
1
- import { packageScope, TsCodeUtils } from '@baseplate-dev/core-generators';
1
+ import { packageScope, TsCodeUtils, tsTemplate, } from '@baseplate-dev/core-generators';
2
2
  import { createGenerator, createGeneratorTask, createNonOverwriteableMap, createProviderType, } from '@baseplate-dev/sync';
3
3
  import { quot } from '@baseplate-dev/utils';
4
4
  import { z } from 'zod';
5
+ import { prismaModelAuthorizerProvider } from '#src/generators/prisma/prisma-model-authorizer/index.js';
5
6
  import { prismaOutputProvider } from '#src/generators/prisma/prisma/index.js';
6
7
  import { prismaToServiceOutputDto } from '#src/types/service-output.js';
7
8
  import { lowerCaseFirst } from '#src/utils/case.js';
8
9
  import { createPothosTypeReference, writePothosExposeFieldFromDtoScalarField, } from '#src/writers/pothos/index.js';
9
10
  import { pothosFieldScope, pothosTypeOutputProvider, } from '../_providers/index.js';
11
+ import { pothosAuthProvider } from '../pothos-auth/index.js';
10
12
  import { pothosTypesFileProvider } from '../pothos-types-file/index.js';
11
13
  import { pothosSchemaBaseTypesProvider } from '../pothos/index.js';
14
+ const exposedFieldSchema = z.object({
15
+ name: z.string().min(1),
16
+ globalRoles: z.array(z.string().min(1)).default([]),
17
+ instanceRoles: z.array(z.string().min(1)).default([]),
18
+ });
12
19
  const descriptorSchema = z.object({
13
20
  /**
14
21
  * The name of the model.
15
22
  */
16
23
  modelName: z.string().min(1),
17
24
  /**
18
- * The fields to expose.
25
+ * The fields to expose, with optional per-field auth config.
19
26
  */
20
- exposedFields: z.array(z.string().min(1)),
27
+ exposedFields: z.array(exposedFieldSchema),
21
28
  /**
22
29
  * The order of the type in the types file.
23
30
  */
@@ -38,15 +45,49 @@ export const pothosPrismaObjectGenerator = createGenerator({
38
45
  prismaOutput: prismaOutputProvider,
39
46
  pothosTypeFile: pothosTypesFileProvider,
40
47
  pothosSchemaBaseTypes: pothosSchemaBaseTypesProvider,
48
+ pothosAuth: pothosAuthProvider.dependency().optional(),
49
+ modelAuthorizer: prismaModelAuthorizerProvider
50
+ .dependency()
51
+ .optionalReference(modelName),
41
52
  },
42
53
  exports: {
43
54
  pothosPrismaObject: pothosPrismaObjectProvider.export(pothosFieldScope),
44
55
  pothosTypeOutput: pothosTypeOutputProvider.export(packageScope, createPothosPrismaObjectTypeOutputName(modelName)),
45
56
  },
46
- run({ prismaOutput, pothosTypeFile, pothosSchemaBaseTypes }) {
57
+ run({ prismaOutput, pothosTypeFile, pothosSchemaBaseTypes, pothosAuth, modelAuthorizer, }) {
47
58
  const model = prismaOutput.getPrismaModel(modelName);
48
59
  const variableName = `${lowerCaseFirst(model.name)}ObjectType`;
49
60
  const customFields = createNonOverwriteableMap({});
61
+ // Build lookup: fieldName → auth config
62
+ const fieldAuthMap = new Map(exposedFields
63
+ .filter((f) => f.globalRoles.length > 0 || f.instanceRoles.length > 0)
64
+ .map((f) => [
65
+ f.name,
66
+ { globalRoles: f.globalRoles, instanceRoles: f.instanceRoles },
67
+ ]));
68
+ /**
69
+ * Build an authorize TsCodeFragment for a field, if it has auth config.
70
+ */
71
+ function buildAuthorizeFragment(fieldName) {
72
+ const fieldAuth = fieldAuthMap.get(fieldName);
73
+ if (!fieldAuth || !pothosAuth) {
74
+ return undefined;
75
+ }
76
+ const instanceRoleFragments = fieldAuth.instanceRoles.map((roleName) => {
77
+ if (!modelAuthorizer) {
78
+ throw new Error(`Field '${fieldName}' on model '${modelName}' references instance role '${roleName}' but no authorizer is configured for this model.`);
79
+ }
80
+ return modelAuthorizer.getRoleFragment(roleName);
81
+ });
82
+ if (fieldAuth.globalRoles.length === 0 &&
83
+ instanceRoleFragments.length === 0) {
84
+ return undefined;
85
+ }
86
+ return pothosAuth.formatMixedAuthorizeConfig({
87
+ globalRoles: fieldAuth.globalRoles,
88
+ instanceRoleFragments,
89
+ });
90
+ }
50
91
  return {
51
92
  providers: {
52
93
  pothosPrismaObject: {
@@ -64,23 +105,42 @@ export const pothosPrismaObjectGenerator = createGenerator({
64
105
  },
65
106
  build: () => {
66
107
  const outputDto = prismaToServiceOutputDto(model, (enumName) => prismaOutput.getServiceEnum(enumName));
67
- const missingField = exposedFields.find((exposedFieldName) => !outputDto.fields.some((field) => field.name === exposedFieldName));
108
+ const exposedFieldNames = exposedFields.map((f) => f.name);
109
+ const missingField = exposedFieldNames.find((exposedFieldName) => !outputDto.fields.some((field) => field.name === exposedFieldName));
68
110
  if (missingField) {
69
111
  throw new Error(`Field ${missingField} not found in model ${model.name}`);
70
112
  }
71
113
  const fieldDefinitions = outputDto.fields
72
- .filter((field) => exposedFields.includes(field.name))
73
- .map((field) => ({
74
- name: field.name,
75
- fragment: field.type === 'scalar'
76
- ? writePothosExposeFieldFromDtoScalarField(field, {
114
+ .filter((field) => exposedFieldNames.includes(field.name))
115
+ .map((field) => {
116
+ const authorize = buildAuthorizeFragment(field.name);
117
+ let fragment;
118
+ if (field.type === 'scalar') {
119
+ fragment = writePothosExposeFieldFromDtoScalarField(field, {
77
120
  schemaBuilder: pothosTypeFile.getBuilderFragment(),
78
121
  fieldBuilder: 't',
79
122
  pothosSchemaBaseTypes,
80
123
  typeReferences: [],
81
- })
82
- : `t.relation('${field.name}'${field.isNullable ? ', { nullable: true }' : ''})`,
83
- }));
124
+ authorize,
125
+ });
126
+ }
127
+ else if (authorize || field.isNullable) {
128
+ // Relation with options (nullable and/or authorize)
129
+ const options = {};
130
+ if (field.isNullable) {
131
+ options.nullable = 'true';
132
+ }
133
+ if (authorize) {
134
+ options.authorize = authorize;
135
+ }
136
+ fragment = tsTemplate `t.relation(${quot(field.name)}, ${TsCodeUtils.mergeFragmentsAsObject(options)})`;
137
+ }
138
+ else {
139
+ // Simple relation with no options
140
+ fragment = `t.relation('${field.name}')`;
141
+ }
142
+ return { name: field.name, fragment };
143
+ });
84
144
  const objectTypeBlock = TsCodeUtils.formatFragment(`export const VARIABLE_NAME = BUILDER.prismaObject(MODEL_NAME, {
85
145
  fields: (t) => (FIELDS)
86
146
  });`, {
@@ -1 +1 @@
1
- {"version":3,"file":"pothos-prisma-object.generator.js","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-object/pothos-prisma-object.generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pothos-prisma-object.generator.js","sourceRoot":"","sources":["../../../../src/generators/pothos/pothos-prisma-object/pothos-prisma-object.generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { TsCodeFragment } from '@baseplate-dev/core-generators';
2
+ interface ModelAuthorizerLike {
3
+ getRoleFragment(roleName: string): TsCodeFragment;
4
+ }
5
+ interface GenerateAuthorizeFragmentOptions {
6
+ modelName: string;
7
+ methodType: string;
8
+ globalRoles?: string[];
9
+ instanceRoles?: string[];
10
+ modelAuthorizer: ModelAuthorizerLike | undefined;
11
+ }
12
+ /**
13
+ * Builds a `TsCodeFragment` for the `authorize: [...]` property used in
14
+ * `composeCreate`, `composeUpdate`, and `commitDelete` calls.
15
+ *
16
+ * Returns an empty string when no roles are configured.
17
+ */
18
+ export declare function generateAuthorizeFragment({ modelName, methodType, globalRoles, instanceRoles, modelAuthorizer, }: GenerateAuthorizeFragmentOptions): string | TsCodeFragment;
19
+ export {};
20
+ //# sourceMappingURL=generate-authorize-fragment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-authorize-fragment.d.ts","sourceRoot":"","sources":["../../../../../src/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAKrE,UAAU,mBAAmB;IAC3B,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC;CACnD;AAED,UAAU,gCAAgC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAClD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,EACb,eAAe,GAChB,EAAE,gCAAgC,GAAG,MAAM,GAAG,cAAc,CA2B5D"}
@@ -0,0 +1,28 @@
1
+ import { TsCodeUtils } from '@baseplate-dev/core-generators';
2
+ import { quot } from '@baseplate-dev/utils';
3
+ /**
4
+ * Builds a `TsCodeFragment` for the `authorize: [...]` property used in
5
+ * `composeCreate`, `composeUpdate`, and `commitDelete` calls.
6
+ *
7
+ * Returns an empty string when no roles are configured.
8
+ */
9
+ export function generateAuthorizeFragment({ modelName, methodType, globalRoles, instanceRoles, modelAuthorizer, }) {
10
+ const hasGlobalRoles = globalRoles != null && globalRoles.length > 0;
11
+ const hasInstanceRoles = instanceRoles != null && instanceRoles.length > 0;
12
+ if (!hasGlobalRoles && !hasInstanceRoles) {
13
+ return '';
14
+ }
15
+ const globalRoleItems = (globalRoles ?? []).map((r) => quot(r));
16
+ const instanceRoleFragments = (instanceRoles ?? []).map((roleName) => {
17
+ if (!modelAuthorizer) {
18
+ throw new Error(`${methodType} method on model '${modelName}' references instance role '${roleName}' but no authorizer is configured for this model.`);
19
+ }
20
+ return modelAuthorizer.getRoleFragment(roleName);
21
+ });
22
+ const allItems = [
23
+ ...globalRoleItems,
24
+ ...instanceRoleFragments.map((f) => f.contents),
25
+ ];
26
+ return TsCodeUtils.frag(`\n authorize: [${allItems.join(', ')}],`, instanceRoleFragments.flatMap((f) => f.imports ?? []));
27
+ }
28
+ //# sourceMappingURL=generate-authorize-fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-authorize-fragment.js","sourceRoot":"","sources":["../../../../../src/generators/prisma/_shared/build-data-helpers/generate-authorize-fragment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAc5C;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,EACxC,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,EACb,eAAe,GACkB;IACjC,MAAM,cAAc,GAAG,WAAW,IAAI,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG,aAAa,IAAI,IAAI,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3E,IAAI,CAAC,cAAc,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,qBAAqB,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,qBAAqB,SAAS,+BAA+B,QAAQ,mDAAmD,CACtI,CAAC;QACJ,CAAC;QACD,OAAO,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG;QACf,GAAG,eAAe;QAClB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;KAChD,CAAC;IAEF,OAAO,WAAW,CAAC,IAAI,CACrB,mCAAmC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAC1D,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CACtD,CAAC;AACJ,CAAC"}