@baseplate-dev/fastify-generators 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/CHANGELOG.md +57 -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 +15 -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 +97 -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 +3 -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 +44 -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 +3 -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 +32 -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 +41 -50
  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 +35 -29
  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 -3
  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 +67 -18
  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 -9
  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 -6
  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 +84 -30
  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 +56 -11
  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 +365 -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/relation-helpers.ts +21 -26
  78. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/types.ts +372 -14
  79. package/dist/generators/prisma/index.d.ts +2 -0
  80. package/dist/generators/prisma/index.d.ts.map +1 -1
  81. package/dist/generators/prisma/index.js +2 -0
  82. package/dist/generators/prisma/index.js.map +1 -1
  83. package/dist/generators/prisma/prisma-authorizer-utils/generated/index.d.ts +50 -6
  84. package/dist/generators/prisma/prisma-authorizer-utils/generated/index.d.ts.map +1 -1
  85. package/dist/generators/prisma/prisma-authorizer-utils/generated/template-renderers.d.ts +25 -3
  86. package/dist/generators/prisma/prisma-authorizer-utils/generated/template-renderers.d.ts.map +1 -1
  87. package/dist/generators/prisma/prisma-authorizer-utils/generated/typed-templates.d.ts +50 -6
  88. package/dist/generators/prisma/prisma-authorizer-utils/generated/typed-templates.d.ts.map +1 -1
  89. package/dist/generators/prisma/prisma-authorizer-utils/prisma-authorizer-utils.generator.d.ts +25 -3
  90. package/dist/generators/prisma/prisma-authorizer-utils/prisma-authorizer-utils.generator.d.ts.map +1 -1
  91. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.d.ts +26 -3
  92. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.d.ts.map +1 -1
  93. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.js +51 -25
  94. package/dist/generators/prisma/prisma-data-create/prisma-data-create.generator.js.map +1 -1
  95. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.d.ts +31 -3
  96. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.d.ts.map +1 -1
  97. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.js +48 -14
  98. package/dist/generators/prisma/prisma-data-delete/prisma-data-delete.generator.js.map +1 -1
  99. package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.d.ts +25 -3
  100. package/dist/generators/prisma/prisma-data-nested-field/prisma-data-nested-field.generator.d.ts.map +1 -1
  101. package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.d.ts +25 -3
  102. package/dist/generators/prisma/prisma-data-service/prisma-data-service.generator.d.ts.map +1 -1
  103. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.d.ts +31 -3
  104. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.d.ts.map +1 -1
  105. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.js +63 -23
  106. package/dist/generators/prisma/prisma-data-update/prisma-data-update.generator.js.map +1 -1
  107. package/dist/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.d.ts +2 -0
  108. package/dist/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.d.ts.map +1 -1
  109. package/dist/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.js +86 -53
  110. package/dist/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.js.map +1 -1
  111. package/dist/generators/prisma/prisma-model-query-filter/index.d.ts +2 -0
  112. package/dist/generators/prisma/prisma-model-query-filter/index.d.ts.map +1 -0
  113. package/dist/generators/prisma/prisma-model-query-filter/index.js +2 -0
  114. package/dist/generators/prisma/prisma-model-query-filter/index.js.map +1 -0
  115. package/dist/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.d.ts +57 -0
  116. package/dist/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.d.ts.map +1 -0
  117. package/dist/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.js +124 -0
  118. package/dist/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.js.map +1 -0
  119. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.d.ts +348 -0
  120. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.d.ts.map +1 -0
  121. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.js +13 -0
  122. package/dist/generators/prisma/prisma-query-filter-utils/generated/index.js.map +1 -0
  123. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-paths.d.ts +13 -0
  124. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-paths.d.ts.map +1 -0
  125. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-paths.js +25 -0
  126. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-paths.js.map +1 -0
  127. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.d.ts +123 -0
  128. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.d.ts.map +1 -0
  129. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.js +46 -0
  130. package/dist/generators/prisma/prisma-query-filter-utils/generated/template-renderers.js.map +1 -0
  131. package/dist/generators/prisma/prisma-query-filter-utils/generated/ts-import-providers.d.ts +57 -0
  132. package/dist/generators/prisma/prisma-query-filter-utils/generated/ts-import-providers.d.ts.map +1 -0
  133. package/dist/generators/prisma/prisma-query-filter-utils/generated/ts-import-providers.js +38 -0
  134. package/dist/generators/prisma/prisma-query-filter-utils/generated/ts-import-providers.js.map +1 -0
  135. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.d.ts +401 -0
  136. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.d.ts.map +1 -0
  137. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.js +43 -0
  138. package/dist/generators/prisma/prisma-query-filter-utils/generated/typed-templates.js.map +1 -0
  139. package/dist/generators/prisma/prisma-query-filter-utils/index.d.ts +4 -0
  140. package/dist/generators/prisma/prisma-query-filter-utils/index.d.ts.map +1 -0
  141. package/dist/generators/prisma/prisma-query-filter-utils/index.js +3 -0
  142. package/dist/generators/prisma/prisma-query-filter-utils/index.js.map +1 -0
  143. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.d.ts +145 -0
  144. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.d.ts.map +1 -0
  145. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.js +32 -0
  146. package/dist/generators/prisma/prisma-query-filter-utils/prisma-query-filter-utils.generator.js.map +1 -0
  147. package/dist/generators/prisma/prisma-query-filter-utils/templates/src/utils/query-filters.ts +185 -0
  148. package/dist/generators/prisma/prisma-query-filter-utils/templates/src/utils/query-helpers.ts +70 -0
  149. package/dist/types/service-dto-kinds.d.ts +0 -6
  150. package/dist/types/service-dto-kinds.d.ts.map +1 -1
  151. package/dist/types/service-dto-kinds.js +0 -6
  152. package/dist/types/service-dto-kinds.js.map +1 -1
  153. package/dist/writers/pothos/helpers.d.ts +1 -0
  154. package/dist/writers/pothos/helpers.d.ts.map +1 -1
  155. package/dist/writers/pothos/helpers.js +1 -0
  156. package/dist/writers/pothos/helpers.js.map +1 -1
  157. package/dist/writers/pothos/scalar-fields.d.ts +3 -1
  158. package/dist/writers/pothos/scalar-fields.d.ts.map +1 -1
  159. package/dist/writers/pothos/scalar-fields.js +1 -0
  160. package/dist/writers/pothos/scalar-fields.js.map +1 -1
  161. package/dist/writers/prisma-schema/fields.d.ts +1 -1
  162. package/dist/writers/prisma-schema/fields.js +2 -2
  163. package/dist/writers/prisma-schema/fields.js.map +1 -1
  164. package/package.json +8 -8
  165. package/dist/generators/prisma/data-utils/templates/src/utils/data-operations/define-operations.ts +0 -1134
@@ -12,11 +12,15 @@ const roleSchema = z.object({
12
12
  name: z.string().min(1),
13
13
  /** Pre-generated role function code (e.g., '(ctx, model) => model.id === ctx.auth.userId') */
14
14
  roleCode: z.string().min(1),
15
+ /** Foreign model names referenced by nested role expressions (e.g., ['TodoList']) */
16
+ foreignAuthorizerRefs: z.array(z.string()).default([]),
15
17
  });
16
18
  const descriptorSchema = z.object({
17
19
  modelName: z.string().min(1),
18
20
  idFieldName: z.string().min(1),
19
21
  roles: z.array(roleSchema).min(1),
22
+ /** Model names of foreign authorizers referenced by nested role expressions */
23
+ foreignAuthorizerModelNames: z.array(z.string().min(1)).default([]),
20
24
  });
21
25
  export const prismaModelAuthorizerProvider = createReadOnlyProviderType('prisma-model-authorizer');
22
26
  // ----- Generator -----
@@ -31,33 +35,61 @@ export const prismaModelAuthorizerGenerator = createGenerator({
31
35
  generatorFileUrl: import.meta.url,
32
36
  descriptorSchema,
33
37
  getInstanceName: (descriptor) => `${descriptor.modelName}Authorizer`,
34
- buildTasks: (descriptor) => ({
35
- main: createGeneratorTask({
36
- dependencies: {
37
- appModule: appModuleProvider,
38
- typescriptFile: typescriptFileProvider,
39
- prismaOutput: prismaOutputProvider,
40
- prismaAuthorizerUtilsImports: prismaAuthorizerUtilsImportsProvider,
41
- },
42
- outputs: {
43
- prismaModelAuthorizer: prismaModelAuthorizerProvider.export(packageScope, descriptor.modelName),
44
- },
45
- run({ appModule, typescriptFile, prismaOutput, prismaAuthorizerUtilsImports, }) {
46
- const { modelName, idFieldName, roles } = descriptor;
47
- const modelVarName = lowercaseFirstChar(modelName);
48
- const authorizerName = `${modelVarName}Authorizer`;
49
- const authorizerFolder = posixJoin(appModule.getModuleFolder(), 'authorizers');
50
- const authorizerPath = posixJoin(authorizerFolder, `${kebabCase(modelName)}.authorizer.ts`);
51
- return {
52
- build: async (builder) => {
53
- const rolesObject = {};
54
- for (const role of roles) {
55
- rolesObject[role.name] = role.roleCode;
56
- }
57
- const rolesFragment = TsCodeUtils.mergeFragmentsAsObject(rolesObject, { disableSort: true });
58
- const prismaModelFragment = prismaOutput.getPrismaModelFragment(modelName);
59
- const idWhere = idFieldName === 'id' ? 'id' : `${idFieldName}: id`;
60
- const fileFragment = tsTemplate `
38
+ buildTasks: (descriptor) => {
39
+ const { foreignAuthorizerModelNames } = descriptor;
40
+ // Build dynamic dependencies for foreign authorizers referenced by nested expressions
41
+ const foreignAuthorizerDeps = Object.fromEntries(foreignAuthorizerModelNames.map((name) => [
42
+ `foreignAuthorizer_${name}`,
43
+ prismaModelAuthorizerProvider.dependency().reference(name),
44
+ ]));
45
+ return {
46
+ main: createGeneratorTask({
47
+ dependencies: {
48
+ appModule: appModuleProvider,
49
+ typescriptFile: typescriptFileProvider,
50
+ prismaOutput: prismaOutputProvider,
51
+ prismaAuthorizerUtilsImports: prismaAuthorizerUtilsImportsProvider,
52
+ ...foreignAuthorizerDeps,
53
+ },
54
+ outputs: {
55
+ prismaModelAuthorizer: prismaModelAuthorizerProvider.export(packageScope, descriptor.modelName),
56
+ },
57
+ run({ appModule, typescriptFile, prismaOutput, prismaAuthorizerUtilsImports, ...dynamicDeps }) {
58
+ const { modelName, idFieldName, roles } = descriptor;
59
+ const modelVarName = lowercaseFirstChar(modelName);
60
+ const authorizerName = `${modelVarName}Authorizer`;
61
+ // Build a map of foreign model name → authorizer provider
62
+ const foreignAuthorizerProviders = new Map();
63
+ for (const name of foreignAuthorizerModelNames) {
64
+ const provider = dynamicDeps[`foreignAuthorizer_${name}`];
65
+ foreignAuthorizerProviders.set(name, provider);
66
+ }
67
+ const authorizerFolder = posixJoin(appModule.getModuleFolder(), 'authorizers');
68
+ const authorizerPath = posixJoin(authorizerFolder, `${kebabCase(modelName)}.authorizer.ts`);
69
+ return {
70
+ build: async (builder) => {
71
+ const rolesObject = {};
72
+ for (const role of roles) {
73
+ // Look up foreign authorizer providers by the metadata refs
74
+ const referencedProviders = role.foreignAuthorizerRefs
75
+ .map((name) => foreignAuthorizerProviders.get(name))
76
+ .filter((p) => p != null);
77
+ if (referencedProviders.length > 0) {
78
+ // Collect all imports from referenced foreign authorizers
79
+ const allImports = referencedProviders.flatMap((provider) => provider.getAuthorizerFragment().imports ?? []);
80
+ rolesObject[role.name] = {
81
+ contents: role.roleCode,
82
+ imports: allImports,
83
+ };
84
+ }
85
+ else {
86
+ rolesObject[role.name] = role.roleCode;
87
+ }
88
+ }
89
+ const rolesFragment = TsCodeUtils.mergeFragmentsAsObject(rolesObject, { disableSort: true });
90
+ const prismaModelFragment = prismaOutput.getPrismaModelFragment(modelName);
91
+ const idWhere = idFieldName === 'id' ? 'id' : `${idFieldName}: id`;
92
+ const fileFragment = tsTemplate `
61
93
  export const ${authorizerName} = ${prismaAuthorizerUtilsImports.createModelAuthorizer.fragment()}({
62
94
  model: '${modelVarName}',
63
95
  idField: '${idFieldName}',
@@ -65,32 +97,33 @@ export const prismaModelAuthorizerGenerator = createGenerator({
65
97
  roles: ${rolesFragment},
66
98
  });
67
99
  `;
68
- await builder.apply(typescriptFile.renderTemplateFragment({
69
- id: `prisma-model-authorizer:${modelName}`,
70
- destination: authorizerPath,
71
- fragment: fileFragment,
72
- }));
73
- return {
74
- prismaModelAuthorizer: {
75
- getAuthorizerName() {
76
- return authorizerName;
100
+ await builder.apply(typescriptFile.renderTemplateFragment({
101
+ id: `prisma-model-authorizer:${modelName}`,
102
+ destination: authorizerPath,
103
+ fragment: fileFragment,
104
+ }));
105
+ return {
106
+ prismaModelAuthorizer: {
107
+ getAuthorizerName() {
108
+ return authorizerName;
109
+ },
110
+ getAuthorizerFragment() {
111
+ return TsCodeUtils.importFragment(authorizerName, authorizerPath);
112
+ },
113
+ getRoleFragment(roleName) {
114
+ const validRoles = roles.map((r) => r.name);
115
+ if (!validRoles.includes(roleName)) {
116
+ throw new Error(`Role '${roleName}' not found on ${modelName} authorizer. Available: ${validRoles.join(', ')}`);
117
+ }
118
+ return tsTemplate `${TsCodeUtils.importFragment(authorizerName, authorizerPath)}.roles.${roleName}`;
119
+ },
77
120
  },
78
- getAuthorizerFragment() {
79
- return TsCodeUtils.importFragment(authorizerName, authorizerPath);
80
- },
81
- getRoleFragment(roleName) {
82
- const validRoles = roles.map((r) => r.name);
83
- if (!validRoles.includes(roleName)) {
84
- throw new Error(`Role '${roleName}' not found on ${modelName} authorizer. Available: ${validRoles.join(', ')}`);
85
- }
86
- return tsTemplate `${TsCodeUtils.importFragment(authorizerName, authorizerPath)}.roles.${roleName}`;
87
- },
88
- },
89
- };
90
- },
91
- };
92
- },
93
- }),
94
- }),
121
+ };
122
+ },
123
+ };
124
+ },
125
+ }),
126
+ };
127
+ },
95
128
  });
96
129
  //# sourceMappingURL=prisma-model-authorizer.generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prisma-model-authorizer.generator.js","sourceRoot":"","sources":["../../../../src/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prisma-model-authorizer.generator.js","sourceRoot":"","sources":["../../../../src/generators/prisma/prisma-model-authorizer/prisma-model-authorizer.generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './prisma-model-query-filter.generator.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/generators/prisma/prisma-model-query-filter/index.ts"],"names":[],"mappings":"AAAA,cAAc,0CAA0C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './prisma-model-query-filter.generator.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/generators/prisma/prisma-model-query-filter/index.ts"],"names":[],"mappings":"AAAA,cAAc,0CAA0C,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { TsCodeFragment } from '@baseplate-dev/core-generators';
2
+ /**
3
+ * Provider interface for the model query filter.
4
+ * Allows other generators (e.g., GraphQL query resolvers) to reference
5
+ * the query filter and build where clauses.
6
+ */
7
+ export interface PrismaModelQueryFilterProvider {
8
+ /**
9
+ * Get the variable name of the query filter (e.g., 'todoListQueryFilter').
10
+ */
11
+ getQueryFilterName(): string;
12
+ /**
13
+ * Get a fragment that imports the query filter from its module path.
14
+ */
15
+ getQueryFilterFragment(): TsCodeFragment;
16
+ }
17
+ export declare const prismaModelQueryFilterProvider: import("@baseplate-dev/sync").ProviderType<PrismaModelQueryFilterProvider>;
18
+ /**
19
+ * Generator for prisma/prisma-model-query-filter
20
+ *
21
+ * Generates `{moduleFolder}/authorizers/{kebab-model}.query-filter.ts` files
22
+ * that create a model query filter with role functions returning where clauses.
23
+ */
24
+ export declare const prismaModelQueryFilterGenerator: import("@baseplate-dev/sync").GeneratorBundleCreator<{
25
+ modelName: string;
26
+ roles: {
27
+ name: string;
28
+ roleCode: string;
29
+ foreignQueryFilterRefs?: string[] | undefined;
30
+ needsQueryHelpers?: boolean | undefined;
31
+ }[];
32
+ foreignQueryFilterModelNames?: string[] | undefined;
33
+ }, {
34
+ main: import("@baseplate-dev/sync").GeneratorTask<any, {
35
+ appModule: import("@baseplate-dev/sync").ProviderType<import("#src/generators/core/app-module/index.js").AppModuleProvider>;
36
+ typescriptFile: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").TypescriptFileProvider>;
37
+ prismaQueryFilterUtilsImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
38
+ createModelQueryFilter: {};
39
+ ModelQueryFilter: {
40
+ isTypeOnly: true;
41
+ };
42
+ ModelQueryFilterConfig: {
43
+ isTypeOnly: true;
44
+ };
45
+ QueryFilterRole: {
46
+ isTypeOnly: true;
47
+ };
48
+ queryHelpers: {};
49
+ WhereResult: {
50
+ isTypeOnly: true;
51
+ };
52
+ }>>;
53
+ }, {
54
+ prismaModelQueryFilter: import("@baseplate-dev/sync").ProviderExport<PrismaModelQueryFilterProvider>;
55
+ }>;
56
+ }>;
57
+ //# sourceMappingURL=prisma-model-query-filter.generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-model-query-filter.generator.d.ts","sourceRoot":"","sources":["../../../../src/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAwCrE;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAAC;IAC7B;;OAEG;IACH,sBAAsB,IAAI,cAAc,CAAC;CAC1C;AAED,eAAO,MAAM,8BAA8B,4EAGxC,CAAC;AAIJ;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0I1C,CAAC"}
@@ -0,0 +1,124 @@
1
+ import { packageScope, TsCodeUtils, tsTemplate, typescriptFileProvider, } from '@baseplate-dev/core-generators';
2
+ import { createGenerator, createGeneratorTask, createReadOnlyProviderType, } from '@baseplate-dev/sync';
3
+ import { lowercaseFirstChar } from '@baseplate-dev/utils';
4
+ import { posixJoin } from '@baseplate-dev/utils/node';
5
+ import { kebabCase } from 'change-case';
6
+ import { z } from 'zod';
7
+ import { appModuleProvider } from '#src/generators/core/app-module/index.js';
8
+ import { prismaQueryFilterUtilsImportsProvider } from '../prisma-query-filter-utils/index.js';
9
+ const roleSchema = z.object({
10
+ /** camelCase role name (e.g., 'owner') */
11
+ name: z.string().min(1),
12
+ /** Pre-generated role function code (e.g., '(ctx) => ({ ownerId: ctx.auth.userId })') */
13
+ roleCode: z.string().min(1),
14
+ /** Foreign model names referenced by nested role expressions (e.g., ['TodoList']) */
15
+ foreignQueryFilterRefs: z.array(z.string()).default([]),
16
+ /** Whether the role code uses queryHelpers (logical operators) */
17
+ needsQueryHelpers: z.boolean().default(false),
18
+ });
19
+ const descriptorSchema = z.object({
20
+ modelName: z.string().min(1),
21
+ roles: z.array(roleSchema).min(1),
22
+ /** Model names of foreign query filters referenced by nested role expressions */
23
+ foreignQueryFilterModelNames: z.array(z.string().min(1)).default([]),
24
+ });
25
+ export const prismaModelQueryFilterProvider = createReadOnlyProviderType('prisma-model-query-filter');
26
+ // ----- Generator -----
27
+ /**
28
+ * Generator for prisma/prisma-model-query-filter
29
+ *
30
+ * Generates `{moduleFolder}/authorizers/{kebab-model}.query-filter.ts` files
31
+ * that create a model query filter with role functions returning where clauses.
32
+ */
33
+ export const prismaModelQueryFilterGenerator = createGenerator({
34
+ name: 'prisma/prisma-model-query-filter',
35
+ generatorFileUrl: import.meta.url,
36
+ descriptorSchema,
37
+ getInstanceName: (descriptor) => `${descriptor.modelName}QueryFilter`,
38
+ buildTasks: (descriptor) => {
39
+ const { foreignQueryFilterModelNames } = descriptor;
40
+ // Build dynamic dependencies for foreign query filters referenced by nested expressions
41
+ const foreignQueryFilterDeps = Object.fromEntries(foreignQueryFilterModelNames.map((name) => [
42
+ `foreignQueryFilter_${name}`,
43
+ prismaModelQueryFilterProvider.dependency().reference(name),
44
+ ]));
45
+ return {
46
+ main: createGeneratorTask({
47
+ dependencies: {
48
+ appModule: appModuleProvider,
49
+ typescriptFile: typescriptFileProvider,
50
+ prismaQueryFilterUtilsImports: prismaQueryFilterUtilsImportsProvider,
51
+ ...foreignQueryFilterDeps,
52
+ },
53
+ outputs: {
54
+ prismaModelQueryFilter: prismaModelQueryFilterProvider.export(packageScope, descriptor.modelName),
55
+ },
56
+ run({ appModule, typescriptFile, prismaQueryFilterUtilsImports, ...dynamicDeps }) {
57
+ const { modelName, roles } = descriptor;
58
+ const modelVarName = lowercaseFirstChar(modelName);
59
+ const queryFilterName = `${modelVarName}QueryFilter`;
60
+ // Build a map of foreign model name → query filter provider
61
+ const foreignQueryFilterProviders = new Map();
62
+ for (const name of foreignQueryFilterModelNames) {
63
+ const provider = dynamicDeps[`foreignQueryFilter_${name}`];
64
+ foreignQueryFilterProviders.set(name, provider);
65
+ }
66
+ const authorizerFolder = posixJoin(appModule.getModuleFolder(), 'authorizers');
67
+ const queryFilterPath = posixJoin(authorizerFolder, `${kebabCase(modelName)}.query-filter.ts`);
68
+ return {
69
+ build: async (builder) => {
70
+ const rolesObject = {};
71
+ for (const role of roles) {
72
+ // Look up foreign query filter providers by the metadata refs
73
+ const referencedProviders = role.foreignQueryFilterRefs
74
+ .map((name) => foreignQueryFilterProviders.get(name))
75
+ .filter((p) => p != null);
76
+ const { needsQueryHelpers } = role;
77
+ if (referencedProviders.length > 0 || needsQueryHelpers) {
78
+ // Collect all imports from referenced foreign query filters
79
+ const allImports = referencedProviders.flatMap((provider) => provider.getQueryFilterFragment().imports ?? []);
80
+ // Add queryHelpers import if needed
81
+ if (needsQueryHelpers) {
82
+ const queryHelpersImports = prismaQueryFilterUtilsImports.queryHelpers.fragment()
83
+ .imports ?? [];
84
+ allImports.push(...queryHelpersImports);
85
+ }
86
+ rolesObject[role.name] = {
87
+ contents: role.roleCode,
88
+ imports: allImports,
89
+ };
90
+ }
91
+ else {
92
+ rolesObject[role.name] = role.roleCode;
93
+ }
94
+ }
95
+ const rolesFragment = TsCodeUtils.mergeFragmentsAsObject(rolesObject, { disableSort: true });
96
+ const fileFragment = tsTemplate `
97
+ export const ${queryFilterName} = ${prismaQueryFilterUtilsImports.createModelQueryFilter.fragment()}({
98
+ model: '${modelVarName}',
99
+ roles: ${rolesFragment},
100
+ });
101
+ `;
102
+ await builder.apply(typescriptFile.renderTemplateFragment({
103
+ id: `prisma-model-query-filter:${modelName}`,
104
+ destination: queryFilterPath,
105
+ fragment: fileFragment,
106
+ }));
107
+ return {
108
+ prismaModelQueryFilter: {
109
+ getQueryFilterName() {
110
+ return queryFilterName;
111
+ },
112
+ getQueryFilterFragment() {
113
+ return TsCodeUtils.importFragment(queryFilterName, queryFilterPath);
114
+ },
115
+ },
116
+ };
117
+ },
118
+ };
119
+ },
120
+ }),
121
+ };
122
+ },
123
+ });
124
+ //# sourceMappingURL=prisma-model-query-filter.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-model-query-filter.generator.js","sourceRoot":"","sources":["../../../../src/generators/prisma/prisma-model-query-filter/prisma-model-query-filter.generator.ts"],"names":[],"mappings":"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"}