@baseplate-dev/project-builder-server 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 (237) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/actions/__tests__/action-test-utils.d.ts +24 -0
  3. package/dist/actions/__tests__/action-test-utils.d.ts.map +1 -0
  4. package/dist/actions/__tests__/action-test-utils.js +33 -0
  5. package/dist/actions/__tests__/action-test-utils.js.map +1 -0
  6. package/dist/actions/definition/commit-draft.action.d.ts +16 -0
  7. package/dist/actions/definition/commit-draft.action.d.ts.map +1 -0
  8. package/dist/actions/definition/commit-draft.action.js +65 -0
  9. package/dist/actions/definition/commit-draft.action.js.map +1 -0
  10. package/dist/actions/definition/discard-draft.action.d.ts +7 -0
  11. package/dist/actions/definition/discard-draft.action.d.ts.map +1 -0
  12. package/dist/actions/definition/discard-draft.action.js +30 -0
  13. package/dist/actions/definition/discard-draft.action.js.map +1 -0
  14. package/dist/actions/definition/draft-session.d.ts +41 -0
  15. package/dist/actions/definition/draft-session.d.ts.map +1 -0
  16. package/dist/actions/definition/draft-session.js +117 -0
  17. package/dist/actions/definition/draft-session.js.map +1 -0
  18. package/dist/actions/definition/get-entity-schema.action.d.ts +10 -0
  19. package/dist/actions/definition/get-entity-schema.action.d.ts.map +1 -0
  20. package/dist/actions/definition/get-entity-schema.action.js +48 -0
  21. package/dist/actions/definition/get-entity-schema.action.js.map +1 -0
  22. package/dist/actions/definition/get-entity.action.d.ts +8 -0
  23. package/dist/actions/definition/get-entity.action.d.ts.map +1 -0
  24. package/dist/actions/definition/get-entity.action.js +37 -0
  25. package/dist/actions/definition/get-entity.action.js.map +1 -0
  26. package/dist/actions/definition/index.d.ts +11 -0
  27. package/dist/actions/definition/index.d.ts.map +1 -0
  28. package/dist/actions/definition/index.js +11 -0
  29. package/dist/actions/definition/index.js.map +1 -0
  30. package/dist/actions/definition/list-entities.action.d.ts +13 -0
  31. package/dist/actions/definition/list-entities.action.d.ts.map +1 -0
  32. package/dist/actions/definition/list-entities.action.js +43 -0
  33. package/dist/actions/definition/list-entities.action.js.map +1 -0
  34. package/dist/actions/definition/list-entity-types.action.d.ts +10 -0
  35. package/dist/actions/definition/list-entity-types.action.d.ts.map +1 -0
  36. package/dist/actions/definition/list-entity-types.action.js +42 -0
  37. package/dist/actions/definition/list-entity-types.action.js.map +1 -0
  38. package/dist/actions/definition/load-entity-service-context.d.ts +14 -0
  39. package/dist/actions/definition/load-entity-service-context.d.ts.map +1 -0
  40. package/dist/actions/definition/load-entity-service-context.js +18 -0
  41. package/dist/actions/definition/load-entity-service-context.js.map +1 -0
  42. package/dist/actions/definition/show-draft.action.d.ts +18 -0
  43. package/dist/actions/definition/show-draft.action.d.ts.map +1 -0
  44. package/dist/actions/definition/show-draft.action.js +117 -0
  45. package/dist/actions/definition/show-draft.action.js.map +1 -0
  46. package/dist/actions/definition/stage-create-entity.action.d.ts +19 -0
  47. package/dist/actions/definition/stage-create-entity.action.d.ts.map +1 -0
  48. package/dist/actions/definition/stage-create-entity.action.js +60 -0
  49. package/dist/actions/definition/stage-create-entity.action.js.map +1 -0
  50. package/dist/actions/definition/stage-delete-entity.action.d.ts +18 -0
  51. package/dist/actions/definition/stage-delete-entity.action.d.ts.map +1 -0
  52. package/dist/actions/definition/stage-delete-entity.action.js +55 -0
  53. package/dist/actions/definition/stage-delete-entity.action.js.map +1 -0
  54. package/dist/actions/definition/stage-update-entity.action.d.ts +19 -0
  55. package/dist/actions/definition/stage-update-entity.action.d.ts.map +1 -0
  56. package/dist/actions/definition/stage-update-entity.action.js +59 -0
  57. package/dist/actions/definition/stage-update-entity.action.js.map +1 -0
  58. package/dist/actions/definition/validate-draft.d.ts +17 -0
  59. package/dist/actions/definition/validate-draft.d.ts.map +1 -0
  60. package/dist/actions/definition/validate-draft.js +25 -0
  61. package/dist/actions/definition/validate-draft.js.map +1 -0
  62. package/dist/actions/index.d.ts +3 -0
  63. package/dist/actions/index.d.ts.map +1 -1
  64. package/dist/actions/index.js +3 -0
  65. package/dist/actions/index.js.map +1 -1
  66. package/dist/actions/registry.d.ts +169 -92
  67. package/dist/actions/registry.d.ts.map +1 -1
  68. package/dist/actions/registry.js +17 -1
  69. package/dist/actions/registry.js.map +1 -1
  70. package/dist/actions/snapshot/snapshot-add.action.d.ts +0 -1
  71. package/dist/actions/snapshot/snapshot-add.action.d.ts.map +1 -1
  72. package/dist/actions/snapshot/snapshot-add.action.js +3 -7
  73. package/dist/actions/snapshot/snapshot-add.action.js.map +1 -1
  74. package/dist/actions/snapshot/snapshot-remove.action.d.ts +0 -1
  75. package/dist/actions/snapshot/snapshot-remove.action.d.ts.map +1 -1
  76. package/dist/actions/snapshot/snapshot-remove.action.js +3 -7
  77. package/dist/actions/snapshot/snapshot-remove.action.js.map +1 -1
  78. package/dist/actions/snapshot/snapshot-save.action.d.ts +2 -2
  79. package/dist/actions/snapshot/snapshot-save.action.d.ts.map +1 -1
  80. package/dist/actions/snapshot/snapshot-save.action.js +23 -11
  81. package/dist/actions/snapshot/snapshot-save.action.js.map +1 -1
  82. package/dist/actions/snapshot/snapshot-show.action.d.ts +5 -2
  83. package/dist/actions/snapshot/snapshot-show.action.d.ts.map +1 -1
  84. package/dist/actions/snapshot/snapshot-show.action.js +17 -19
  85. package/dist/actions/snapshot/snapshot-show.action.js.map +1 -1
  86. package/dist/actions/sync/sync-all-projects.action.d.ts.map +1 -1
  87. package/dist/actions/sync/sync-all-projects.action.js +3 -2
  88. package/dist/actions/sync/sync-all-projects.action.js.map +1 -1
  89. package/dist/actions/sync/sync-file.action.js +1 -1
  90. package/dist/actions/sync/sync-file.action.js.map +1 -1
  91. package/dist/actions/sync/sync-project.action.d.ts +1 -1
  92. package/dist/actions/sync/sync-project.action.d.ts.map +1 -1
  93. package/dist/actions/sync/sync-project.action.js +20 -6
  94. package/dist/actions/sync/sync-project.action.js.map +1 -1
  95. package/dist/actions/test-project/index.d.ts +2 -0
  96. package/dist/actions/test-project/index.d.ts.map +1 -0
  97. package/dist/actions/test-project/index.js +2 -0
  98. package/dist/actions/test-project/index.js.map +1 -0
  99. package/dist/actions/test-project/test-project-init.action.d.ts +17 -0
  100. package/dist/actions/test-project/test-project-init.action.d.ts.map +1 -0
  101. package/dist/actions/test-project/test-project-init.action.js +97 -0
  102. package/dist/actions/test-project/test-project-init.action.js.map +1 -0
  103. package/dist/actions/types.d.ts +2 -0
  104. package/dist/actions/types.d.ts.map +1 -1
  105. package/dist/actions/types.js.map +1 -1
  106. package/dist/actions/utils/generation-manifest.d.ts +12 -0
  107. package/dist/actions/utils/generation-manifest.d.ts.map +1 -0
  108. package/dist/actions/utils/generation-manifest.js +142 -0
  109. package/dist/actions/utils/generation-manifest.js.map +1 -0
  110. package/dist/actions/utils/index.d.ts +1 -1
  111. package/dist/actions/utils/index.d.ts.map +1 -1
  112. package/dist/actions/utils/index.js +1 -1
  113. package/dist/actions/utils/index.js.map +1 -1
  114. package/dist/actions/utils/project-discovery.d.ts +23 -9
  115. package/dist/actions/utils/project-discovery.d.ts.map +1 -1
  116. package/dist/actions/utils/project-discovery.js +57 -31
  117. package/dist/actions/utils/project-discovery.js.map +1 -1
  118. package/dist/actions/utils/projects.d.ts.map +1 -1
  119. package/dist/actions/utils/projects.js +2 -1
  120. package/dist/actions/utils/projects.js.map +1 -1
  121. package/dist/compiler/backend/{authorizers.d.ts → authorizer-compiler.d.ts} +22 -2
  122. package/dist/compiler/backend/authorizer-compiler.d.ts.map +1 -0
  123. package/dist/compiler/backend/authorizer-compiler.js +165 -0
  124. package/dist/compiler/backend/authorizer-compiler.js.map +1 -0
  125. package/dist/compiler/backend/feature.d.ts.map +1 -1
  126. package/dist/compiler/backend/feature.js +3 -1
  127. package/dist/compiler/backend/feature.js.map +1 -1
  128. package/dist/compiler/backend/graphql.d.ts.map +1 -1
  129. package/dist/compiler/backend/graphql.js +108 -49
  130. package/dist/compiler/backend/graphql.js.map +1 -1
  131. package/dist/compiler/backend/models.d.ts.map +1 -1
  132. package/dist/compiler/backend/models.js +13 -13
  133. package/dist/compiler/backend/models.js.map +1 -1
  134. package/dist/compiler/backend/query-filter-compiler.d.ts +40 -0
  135. package/dist/compiler/backend/query-filter-compiler.d.ts.map +1 -0
  136. package/dist/compiler/backend/query-filter-compiler.js +168 -0
  137. package/dist/compiler/backend/query-filter-compiler.js.map +1 -0
  138. package/dist/compiler/backend/services.d.ts.map +1 -1
  139. package/dist/compiler/backend/services.js +24 -1
  140. package/dist/compiler/backend/services.js.map +1 -1
  141. package/dist/compiler/index.d.ts +1 -0
  142. package/dist/compiler/index.d.ts.map +1 -1
  143. package/dist/compiler/index.js.map +1 -1
  144. package/dist/compiler/root/root-package-compiler.js +6 -6
  145. package/dist/compiler/root/root-package-compiler.js.map +1 -1
  146. package/dist/compiler/web/admin/crud/index.js +1 -1
  147. package/dist/compiler/web/admin/crud/index.js.map +1 -1
  148. package/dist/compiler/web/admin/index.js +1 -1
  149. package/dist/compiler/web/admin/index.js.map +1 -1
  150. package/dist/compiler/web/admin/sections.d.ts.map +1 -1
  151. package/dist/compiler/web/admin/sections.js +2 -2
  152. package/dist/compiler/web/admin/sections.js.map +1 -1
  153. package/dist/compiler/web/web-compiler.d.ts.map +1 -1
  154. package/dist/compiler/web/web-compiler.js +4 -4
  155. package/dist/compiler/web/web-compiler.js.map +1 -1
  156. package/dist/core-modules/admin-crud-column-compiler.js +1 -1
  157. package/dist/core-modules/admin-crud-column-compiler.js.map +1 -1
  158. package/dist/core-modules/admin-crud-input-compiler.d.ts.map +1 -1
  159. package/dist/core-modules/admin-crud-input-compiler.js +13 -3
  160. package/dist/core-modules/admin-crud-input-compiler.js.map +1 -1
  161. package/dist/dev-server/api/router.d.ts +8 -7
  162. package/dist/dev-server/api/router.d.ts.map +1 -1
  163. package/dist/dev-server/mcp/stdio.d.ts +2 -2
  164. package/dist/dev-server/mcp/stdio.d.ts.map +1 -1
  165. package/dist/dev-server/mcp/stdio.js +2 -2
  166. package/dist/dev-server/mcp/stdio.js.map +1 -1
  167. package/dist/diff/diff-project.d.ts.map +1 -1
  168. package/dist/diff/diff-project.js +4 -4
  169. package/dist/diff/diff-project.js.map +1 -1
  170. package/dist/diff/snapshot/apply-diff-to-generator-output.d.ts.map +1 -1
  171. package/dist/diff/snapshot/apply-diff-to-generator-output.js +17 -2
  172. package/dist/diff/snapshot/apply-diff-to-generator-output.js.map +1 -1
  173. package/dist/diff/snapshot/create-snapshot-for-project.d.ts +12 -6
  174. package/dist/diff/snapshot/create-snapshot-for-project.d.ts.map +1 -1
  175. package/dist/diff/snapshot/create-snapshot-for-project.js +58 -26
  176. package/dist/diff/snapshot/create-snapshot-for-project.js.map +1 -1
  177. package/dist/diff/snapshot/index.d.ts +4 -1
  178. package/dist/diff/snapshot/index.d.ts.map +1 -1
  179. package/dist/diff/snapshot/index.js +4 -0
  180. package/dist/diff/snapshot/index.js.map +1 -1
  181. package/dist/diff/snapshot/save-snapshot.d.ts +11 -3
  182. package/dist/diff/snapshot/save-snapshot.d.ts.map +1 -1
  183. package/dist/diff/snapshot/save-snapshot.js +29 -10
  184. package/dist/diff/snapshot/save-snapshot.js.map +1 -1
  185. package/dist/diff/snapshot/snapshot-management.d.ts +7 -6
  186. package/dist/diff/snapshot/snapshot-management.d.ts.map +1 -1
  187. package/dist/diff/snapshot/snapshot-management.js +18 -22
  188. package/dist/diff/snapshot/snapshot-management.js.map +1 -1
  189. package/dist/diff/snapshot/snapshot-manifest.d.ts +1 -1
  190. package/dist/diff/snapshot/snapshot-manifest.d.ts.map +1 -1
  191. package/dist/diff/snapshot/snapshot-manifest.js +7 -7
  192. package/dist/diff/snapshot/snapshot-manifest.js.map +1 -1
  193. package/dist/diff/snapshot/snapshot-types.d.ts +22 -8
  194. package/dist/diff/snapshot/snapshot-types.d.ts.map +1 -1
  195. package/dist/diff/snapshot/snapshot-types.js +6 -2
  196. package/dist/diff/snapshot/snapshot-types.js.map +1 -1
  197. package/dist/diff/snapshot/snapshot-utils.d.ts +14 -5
  198. package/dist/diff/snapshot/snapshot-utils.d.ts.map +1 -1
  199. package/dist/diff/snapshot/snapshot-utils.js +25 -8
  200. package/dist/diff/snapshot/snapshot-utils.js.map +1 -1
  201. package/dist/index.d.ts +1 -0
  202. package/dist/index.js +1 -0
  203. package/dist/plugins/node-plugin-store.d.ts +1 -1
  204. package/dist/plugins/node-plugin-store.d.ts.map +1 -1
  205. package/dist/plugins/node-plugin-store.js +2 -2
  206. package/dist/plugins/node-plugin-store.js.map +1 -1
  207. package/dist/project-definition/load-project-definition.d.ts +2 -2
  208. package/dist/project-definition/load-project-definition.d.ts.map +1 -1
  209. package/dist/project-definition/load-project-definition.js +3 -3
  210. package/dist/project-definition/load-project-definition.js.map +1 -1
  211. package/dist/sync/generate-for-directory.d.ts +3 -2
  212. package/dist/sync/generate-for-directory.d.ts.map +1 -1
  213. package/dist/sync/generate-for-directory.js +24 -11
  214. package/dist/sync/generate-for-directory.js.map +1 -1
  215. package/dist/sync/sync-project.d.ts +3 -3
  216. package/dist/sync/sync-project.d.ts.map +1 -1
  217. package/dist/sync/sync-project.js +9 -3
  218. package/dist/sync/sync-project.js.map +1 -1
  219. package/dist/templates/create/create-generator.d.ts.map +1 -1
  220. package/dist/templates/create/create-generator.js +3 -3
  221. package/dist/templates/create/create-generator.js.map +1 -1
  222. package/dist/user-config/user-config-schema.d.ts +12 -0
  223. package/dist/user-config/user-config-schema.d.ts.map +1 -1
  224. package/dist/user-config/user-config-schema.js +29 -0
  225. package/dist/user-config/user-config-schema.js.map +1 -1
  226. package/package.json +17 -14
  227. package/dist/actions/utils/is-example-project.d.ts +0 -7
  228. package/dist/actions/utils/is-example-project.d.ts.map +0 -1
  229. package/dist/actions/utils/is-example-project.js +0 -22
  230. package/dist/actions/utils/is-example-project.js.map +0 -1
  231. package/dist/compiler/backend/authorizers.d.ts.map +0 -1
  232. package/dist/compiler/backend/authorizers.js +0 -75
  233. package/dist/compiler/backend/authorizers.js.map +0 -1
  234. package/dist/project-definition/get-single-app-directory-for-project.d.ts +0 -11
  235. package/dist/project-definition/get-single-app-directory-for-project.d.ts.map +0 -1
  236. package/dist/project-definition/get-single-app-directory-for-project.js +0 -19
  237. package/dist/project-definition/get-single-app-directory-for-project.js.map +0 -1
@@ -1,10 +1,11 @@
1
1
  import { appModuleGenerator } from '@baseplate-dev/fastify-generators';
2
2
  import { FeatureUtils } from '@baseplate-dev/project-builder-lib';
3
3
  import { safeMergeAll } from '@baseplate-dev/utils';
4
- import { buildAuthorizersForFeature } from './authorizers.js';
4
+ import { buildAuthorizersForFeature } from './authorizer-compiler.js';
5
5
  import { buildEnumsForFeature } from './enums.js';
6
6
  import { buildGraphqlForFeature } from './graphql.js';
7
7
  import { buildModelsForFeature } from './models.js';
8
+ import { buildQueryFiltersForFeature } from './query-filter-compiler.js';
8
9
  import { buildServicesForFeature } from './services.js';
9
10
  export function buildFeature(featureId, builder) {
10
11
  const { projectDefinition, appCompiler } = builder;
@@ -17,6 +18,7 @@ export function buildFeature(featureId, builder) {
17
18
  name: featureName,
18
19
  children: safeMergeAll({
19
20
  authorizers: buildAuthorizersForFeature(builder, featureId),
21
+ queryFilters: buildQueryFiltersForFeature(builder, featureId),
20
22
  enums: buildEnumsForFeature(featureId, projectDefinition),
21
23
  models: buildModelsForFeature(builder, featureId),
22
24
  services: buildServicesForFeature(builder, featureId),
@@ -1 +1 @@
1
- {"version":3,"file":"feature.js","sourceRoot":"","sources":["../../../src/compiler/backend/feature.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,OAA+B;IAE/B,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,OAAO,GAAG,YAAY,CAAC,qBAAqB,CAChD,iBAAiB,EACjB,SAAS,CACV,CAAC;IACF,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACzD,oBAAoB;IACpB,MAAM,WAAW,GAAG,YAAY,CAAC,kBAAkB,CACjD,iBAAiB,EACjB,SAAS,CACV,CAAC;IAEF,OAAO,kBAAkB,CAAC;QACxB,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,YAAY,CACpB;YACE,WAAW,EAAE,0BAA0B,CAAC,OAAO,EAAE,SAAS,CAAC;YAC3D,KAAK,EAAE,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC;YACzD,MAAM,EAAE,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC;YACjD,QAAQ,EAAE,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC;YACrD,OAAO,EAAE,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC;YACnD,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CACzC,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CACrC;SACF,EACD,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAC7C;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"feature.js","sourceRoot":"","sources":["../../../src/compiler/backend/feature.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,OAA+B;IAE/B,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,OAAO,GAAG,YAAY,CAAC,qBAAqB,CAChD,iBAAiB,EACjB,SAAS,CACV,CAAC;IACF,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACzD,oBAAoB;IACpB,MAAM,WAAW,GAAG,YAAY,CAAC,kBAAkB,CACjD,iBAAiB,EACjB,SAAS,CACV,CAAC;IAEF,OAAO,kBAAkB,CAAC;QACxB,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,YAAY,CACpB;YACE,WAAW,EAAE,0BAA0B,CAAC,OAAO,EAAE,SAAS,CAAC;YAC3D,YAAY,EAAE,2BAA2B,CAAC,OAAO,EAAE,SAAS,CAAC;YAC7D,KAAK,EAAE,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,CAAC;YACzD,MAAM,EAAE,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC;YACjD,QAAQ,EAAE,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC;YACrD,OAAO,EAAE,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC;YACnD,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CACzC,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CACrC;SACF,EACD,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAC7C;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../../src/compiler/backend/graphql.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAiB3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAkNtE,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,sBAAsB,EAClC,SAAS,EAAE,MAAM,GAChB,eAAe,EAAE,CAmBnB"}
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../../src/compiler/backend/graphql.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkB3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAiTtE,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,sBAAsB,EAClC,SAAS,EAAE,MAAM,GAChB,eAAe,EAAE,CAkBnB"}
@@ -1,18 +1,20 @@
1
- import { pothosAuthorizeFieldGenerator, pothosEnumsFileGenerator, pothosPrismaCrudMutationGenerator, pothosPrismaEnumGenerator, pothosPrismaFindQueryGenerator, pothosPrismaListQueryGenerator, pothosPrismaObjectGenerator, pothosPrismaPrimaryKeyGenerator, pothosTypesFileGenerator, } from '@baseplate-dev/fastify-generators';
1
+ import { pothosAuthorizeFieldGenerator, pothosEnumsFileGenerator, pothosPrismaCountQueryGenerator, pothosPrismaCrudMutationGenerator, pothosPrismaEnumGenerator, pothosPrismaFindQueryGenerator, pothosPrismaListQueryGenerator, pothosPrismaObjectGenerator, pothosPrismaPrimaryKeyGenerator, pothosTypesFileGenerator, } from '@baseplate-dev/fastify-generators';
2
2
  import { authConfigSpec, ModelUtils } from '@baseplate-dev/project-builder-lib';
3
3
  import { notEmpty, uppercaseFirstChar } from '@baseplate-dev/utils';
4
4
  import { kebabCase } from 'change-case';
5
5
  function buildObjectTypeFile(appBuilder, model) {
6
6
  const { graphql } = model;
7
- const { objectType, mutations, queries } = graphql ?? {};
8
- const buildQuery = queries?.get?.enabled ?? queries?.list?.enabled;
9
- const buildMutations = !!mutations?.create?.enabled ||
10
- !!mutations?.update?.enabled ||
11
- !!mutations?.delete?.enabled;
12
- if (!objectType?.enabled) {
7
+ const { objectType, mutations, queries } = graphql;
8
+ const buildQuery = queries.get.enabled || queries.list.enabled;
9
+ const buildMutations = mutations.create.enabled ||
10
+ mutations.update.enabled ||
11
+ mutations.delete.enabled;
12
+ if (!objectType.enabled) {
13
13
  return undefined;
14
14
  }
15
- const { fields = [], localRelations = [], foreignRelations = [], } = objectType;
15
+ const { fields, localRelations, foreignRelations } = objectType;
16
+ const authConfig = appBuilder.definitionContainer.pluginStore.use(authConfigSpec);
17
+ const isAuthEnabled = !!authConfig.getAuthConfig(appBuilder.projectDefinition);
16
18
  return pothosTypesFileGenerator({
17
19
  id: `${model.id}-object-type`,
18
20
  fileName: `${kebabCase(model.name)}.object-type`,
@@ -26,62 +28,131 @@ function buildObjectTypeFile(appBuilder, model) {
26
28
  : undefined,
27
29
  objectType: pothosPrismaObjectGenerator({
28
30
  modelName: model.name,
29
- exposedFields: [...fields, ...foreignRelations, ...localRelations].map((id) => appBuilder.nameFromId(id)),
31
+ exposedFields: [...fields, ...foreignRelations, ...localRelations].map((entry) => ({
32
+ name: appBuilder.nameFromId(entry.ref),
33
+ globalRoles: isAuthEnabled
34
+ ? entry.globalRoles.map((r) => appBuilder.nameFromId(r))
35
+ : [],
36
+ instanceRoles: isAuthEnabled
37
+ ? entry.instanceRoles.map((r) => appBuilder.nameFromId(r))
38
+ : [],
39
+ })),
30
40
  order: 1,
31
41
  }),
32
42
  },
33
43
  });
34
44
  }
45
+ function deriveQueryAuthorize(appBuilder, queries, isAuthEnabled) {
46
+ if (!isAuthEnabled) {
47
+ return undefined;
48
+ }
49
+ const { globalRoles } = queries;
50
+ if (globalRoles.length === 0) {
51
+ return undefined;
52
+ }
53
+ return pothosAuthorizeFieldGenerator({
54
+ roles: globalRoles.map((r) => appBuilder.nameFromId(r)),
55
+ });
56
+ }
35
57
  function buildQueriesFileForModel(appBuilder, model) {
36
58
  const { graphql } = model;
37
- const { queries } = graphql ?? {};
38
- if (!queries?.get?.enabled && !queries?.list?.enabled) {
59
+ const { queries } = graphql;
60
+ if (!queries.get.enabled && !queries.list.enabled) {
39
61
  return undefined;
40
62
  }
41
63
  const { get, list } = queries;
42
64
  const authConfig = appBuilder.definitionContainer.pluginStore.use(authConfigSpec);
43
65
  const isAuthEnabled = !!authConfig.getAuthConfig(appBuilder.projectDefinition);
66
+ const authorize = deriveQueryAuthorize(appBuilder, queries, isAuthEnabled);
67
+ // Query filter config: pass model name reference + role names when instance roles are present
68
+ const hasQueryFilter = queries.instanceRoles.length > 0;
69
+ const queryFilterRoles = hasQueryFilter
70
+ ? queries.instanceRoles.map((roleRef) => {
71
+ const authRole = model.authorizer.roles.find((r) => r.id === roleRef || r.name === roleRef);
72
+ if (!authRole) {
73
+ throw new Error(`Instance role '${roleRef}' not found in model '${model.name}' authorizer roles.`);
74
+ }
75
+ return authRole.name;
76
+ })
77
+ : [];
44
78
  return pothosTypesFileGenerator({
45
79
  id: `${model.id}-queries`,
46
80
  fileName: `${kebabCase(model.name)}.queries`,
47
81
  children: {
48
- findQuery: get?.enabled
82
+ findQuery: get.enabled
49
83
  ? pothosPrismaFindQueryGenerator({
50
84
  order: 0,
51
85
  modelName: model.name,
52
86
  hasPrimaryKeyInputType: ModelUtils.getModelIdFields(model).length > 1,
87
+ queryFilterRef: hasQueryFilter ? model.name : undefined,
88
+ queryFilterRoles,
53
89
  children: {
54
- authorize: !isAuthEnabled || !get.roles?.length
55
- ? undefined
56
- : pothosAuthorizeFieldGenerator({
57
- roles: get.roles.map((r) => appBuilder.nameFromId(r)),
58
- }),
90
+ authorize,
59
91
  },
60
92
  })
61
93
  : undefined,
62
- listQuery: list?.enabled
94
+ listQuery: list.enabled
63
95
  ? pothosPrismaListQueryGenerator({
64
96
  order: 1,
65
97
  modelName: model.name,
98
+ queryFilterRef: hasQueryFilter ? model.name : undefined,
99
+ queryFilterRoles,
100
+ children: {
101
+ authorize,
102
+ },
103
+ })
104
+ : undefined,
105
+ countQuery: list.enabled && list.count.enabled
106
+ ? pothosPrismaCountQueryGenerator({
107
+ order: 2,
108
+ modelName: model.name,
109
+ queryFilterRef: hasQueryFilter ? model.name : undefined,
110
+ queryFilterRoles,
66
111
  children: {
67
- authorize: !isAuthEnabled || !list.roles?.length
68
- ? undefined
69
- : pothosAuthorizeFieldGenerator({
70
- roles: list.roles.map((r) => appBuilder.nameFromId(r)),
71
- }),
112
+ authorize,
72
113
  },
73
114
  })
74
115
  : undefined,
75
116
  },
76
117
  });
77
118
  }
119
+ /**
120
+ * Derives the GraphQL mutation authorize config from service-level roles.
121
+ * - No roles → no auth (public)
122
+ * - Only global roles → pass those roles directly
123
+ * - Instance roles present → use all auth roles as coarse gate
124
+ * (any authenticated user can call, service handles fine-grained auth)
125
+ */
126
+ function deriveMutationAuthorize(appBuilder, serviceMethod, isAuthEnabled) {
127
+ if (!isAuthEnabled) {
128
+ return undefined;
129
+ }
130
+ const { globalRoles, instanceRoles = [] } = serviceMethod;
131
+ if (globalRoles.length === 0 && instanceRoles.length === 0) {
132
+ return undefined;
133
+ }
134
+ if (instanceRoles.length > 0) {
135
+ // Instance roles present → coarse gate with all auth roles
136
+ const authConfig = appBuilder.definitionContainer.pluginStore.use(authConfigSpec);
137
+ const allRoles = authConfig.getAuthConfig(appBuilder.projectDefinition)?.roles ?? [];
138
+ if (allRoles.length === 0) {
139
+ return undefined;
140
+ }
141
+ return pothosAuthorizeFieldGenerator({
142
+ roles: allRoles.map((r) => r.name),
143
+ });
144
+ }
145
+ // Only global roles → pass them through
146
+ return pothosAuthorizeFieldGenerator({
147
+ roles: globalRoles.map((r) => appBuilder.nameFromId(r)),
148
+ });
149
+ }
78
150
  function buildMutationsFileForModel(appBuilder, model) {
79
- const { graphql } = model;
80
- const { mutations } = graphql ?? {};
81
- const buildMutations = !!mutations &&
82
- (!!mutations.create?.enabled ||
83
- !!mutations.update?.enabled ||
84
- !!mutations.delete?.enabled);
151
+ const { graphql, service } = model;
152
+ const { mutations } = graphql;
153
+ const buildMutations = mutations.create.enabled ||
154
+ mutations.update.enabled ||
155
+ mutations.delete.enabled;
85
156
  if (!buildMutations) {
86
157
  return undefined;
87
158
  }
@@ -96,45 +167,33 @@ function buildMutationsFileForModel(appBuilder, model) {
96
167
  id: `${model.id}-mutations`,
97
168
  fileName: `${kebabCase(model.name)}.mutations`,
98
169
  children: {
99
- create: create?.enabled
170
+ create: create.enabled
100
171
  ? pothosPrismaCrudMutationGenerator({
101
172
  ...sharedMutationConfig,
102
173
  order: 0,
103
174
  name: `create${uppercaseFirstChar(model.name)}`,
104
175
  children: {
105
- authorize: isAuthEnabled && create.roles
106
- ? pothosAuthorizeFieldGenerator({
107
- roles: create.roles.map((r) => appBuilder.nameFromId(r)),
108
- })
109
- : undefined,
176
+ authorize: deriveMutationAuthorize(appBuilder, service.create, isAuthEnabled),
110
177
  },
111
178
  })
112
179
  : undefined,
113
- update: update?.enabled
180
+ update: update.enabled
114
181
  ? pothosPrismaCrudMutationGenerator({
115
182
  ...sharedMutationConfig,
116
183
  order: 1,
117
184
  name: `update${uppercaseFirstChar(model.name)}`,
118
185
  children: {
119
- authorize: isAuthEnabled && update.roles
120
- ? pothosAuthorizeFieldGenerator({
121
- roles: update.roles.map((r) => appBuilder.nameFromId(r)),
122
- })
123
- : undefined,
186
+ authorize: deriveMutationAuthorize(appBuilder, service.update, isAuthEnabled),
124
187
  },
125
188
  })
126
189
  : undefined,
127
- delete: del?.enabled
190
+ delete: del.enabled
128
191
  ? pothosPrismaCrudMutationGenerator({
129
192
  ...sharedMutationConfig,
130
193
  order: 2,
131
194
  name: `delete${uppercaseFirstChar(model.name)}`,
132
195
  children: {
133
- authorize: isAuthEnabled && del.roles
134
- ? pothosAuthorizeFieldGenerator({
135
- roles: del.roles.map((r) => appBuilder.nameFromId(r)),
136
- })
137
- : undefined,
196
+ authorize: deriveMutationAuthorize(appBuilder, service.delete, isAuthEnabled),
138
197
  },
139
198
  })
140
199
  : undefined,
@@ -156,8 +215,8 @@ function buildEnumFileForModel(enumFileId, enums) {
156
215
  });
157
216
  }
158
217
  export function buildGraphqlForFeature(appBuilder, featureId) {
159
- const models = ModelUtils.getModelsForFeature(appBuilder.projectDefinition, featureId).filter((m) => m.graphql);
160
- const enums = appBuilder.projectDefinition.enums?.filter((e) => e.featureRef === featureId && e.isExposed) ?? [];
218
+ const models = ModelUtils.getModelsForFeature(appBuilder.projectDefinition, featureId);
219
+ const enums = (appBuilder.projectDefinition.enums ?? []).filter((e) => e.featureRef === featureId && e.isExposed);
161
220
  return [
162
221
  ...models.flatMap((model) => [
163
222
  buildObjectTypeFile(appBuilder, model),
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../../src/compiler/backend/graphql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../../src/compiler/backend/graphql.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/compiler/backend/models.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAc3D,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AAgIjC,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,sBAAsB,EAClC,SAAS,EAAE,MAAM,GAChB,eAAe,EAAE,CAMnB"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/compiler/backend/models.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAc3D,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AAkIjC,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,sBAAsB,EAClC,SAAS,EAAE,MAAM,GAChB,eAAe,EAAE,CAMnB"}
@@ -1,25 +1,25 @@
1
1
  import { prismaFieldGenerator, prismaModelGenerator, prismaModelIdGenerator, prismaModelUniqueGenerator, prismaRelationFieldGenerator, } from '@baseplate-dev/fastify-generators';
2
2
  import { ModelFieldUtils, ModelUtils, } from '@baseplate-dev/project-builder-lib';
3
3
  function buildScalarField(builder, model, field, order) {
4
- const { options } = field;
5
4
  const { primaryKeyFieldRefs, uniqueConstraints } = model.model;
6
5
  const isId = primaryKeyFieldRefs.length === 1 && primaryKeyFieldRefs.includes(field.id);
7
- const isUnique = uniqueConstraints?.some((c) => c.fields.length === 1 && c.fields.some((f) => f.fieldRef === field.id));
6
+ const isUnique = uniqueConstraints.some((c) => c.fields.length === 1 && c.fields.some((f) => f.fieldRef === field.id));
7
+ const generatorOptions = field.type === 'enum'
8
+ ? {
9
+ defaultEnumValue: builder.definitionContainer.nameFromId(field.options.defaultEnumValueRef),
10
+ }
11
+ : field.options;
8
12
  return prismaFieldGenerator({
9
13
  name: field.name,
10
14
  type: field.type,
11
15
  order,
12
16
  id: isId,
13
- options: {
14
- autoGenerate: options.genUuid,
15
- defaultToNow: options.defaultToNow,
16
- updatedAt: options.updatedAt,
17
- default: options.default,
18
- defaultEnumValue: builder.definitionContainer.nameFromId(options.defaultEnumValueRef),
19
- },
17
+ options: generatorOptions,
20
18
  optional: field.isOptional,
21
19
  unique: isUnique,
22
- enumType: options.enumRef && builder.nameFromId(options.enumRef),
20
+ enumType: field.type === 'enum'
21
+ ? builder.nameFromId(field.options.enumRef)
22
+ : undefined,
23
23
  });
24
24
  }
25
25
  function buildRelationField(appBuilder, relationConfig, parentModel) {
@@ -30,7 +30,7 @@ function buildRelationField(appBuilder, relationConfig, parentModel) {
30
30
  const relationshipType = ModelFieldUtils.isRelationOneToOne(parentModel, relationConfig)
31
31
  ? 'oneToOne'
32
32
  : 'oneToMany';
33
- const relations = parentModel.model.relations ?? [];
33
+ const { relations } = parentModel.model;
34
34
  // If there are multiple relations between the same models, we need to specify the
35
35
  // relation name to avoid conflicts in Prisma
36
36
  const foreignRelations = ModelUtils.getRelationsToModel(projectDefinition, parentModel.id).filter(({ model }) => model.id === relationConfig.modelRef);
@@ -56,14 +56,14 @@ function buildModel(appBuilder, model) {
56
56
  name: model.name,
57
57
  children: {
58
58
  fields: model.model.fields.map((field, idx) => buildScalarField(appBuilder, model, field, idx)),
59
- relations: model.model.relations?.map((r) => buildRelationField(appBuilder, r, model)),
59
+ relations: model.model.relations.map((r) => buildRelationField(appBuilder, r, model)),
60
60
  primaryKey: model.model.primaryKeyFieldRefs.length <= 1
61
61
  ? undefined
62
62
  : prismaModelIdGenerator({
63
63
  fields: model.model.primaryKeyFieldRefs.map((f) => appBuilder.nameFromId(f)),
64
64
  }),
65
65
  uniqueConstraints: model.model.uniqueConstraints
66
- ?.filter(({ fields }) => fields.length > 1)
66
+ .filter(({ fields }) => fields.length > 1)
67
67
  .map(({ fields }) => prismaModelUniqueGenerator({
68
68
  fields: fields.map((f) => ({
69
69
  name: appBuilder.nameFromId(f.fieldRef),
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/compiler/backend/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/compiler/backend/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { AuthorizerExpressionNode } from '@baseplate-dev/project-builder-lib';
2
+ import type { GeneratorBundle } from '@baseplate-dev/sync';
3
+ import type { BackendAppEntryBuilder } from '../app-entry-builder.js';
4
+ /**
5
+ * Resolved information about a relation for nested query filter code generation.
6
+ */
7
+ interface ResolvedNestedQueryFilter {
8
+ /** The Prisma relation field name (e.g., 'todoList') */
9
+ relationFieldName: string;
10
+ /** The foreign model name (e.g., 'TodoList') */
11
+ foreignModelName: string;
12
+ /** The foreign query filter variable name (e.g., 'todoListQueryFilter') */
13
+ foreignQueryFilterVar: string;
14
+ }
15
+ /**
16
+ * Context for generating query filter expression code with relation resolution.
17
+ */
18
+ interface QueryFilterCodeContext {
19
+ /** Map of relation name → resolved nested query filter info */
20
+ resolvedFilters: Map<string, ResolvedNestedQueryFilter>;
21
+ }
22
+ /**
23
+ * Generate TypeScript code from an authorizer expression AST node,
24
+ * producing a Prisma where clause instead of a boolean check.
25
+ *
26
+ * - `model.field === userId` → `{ field: ctx.auth.userId }`
27
+ * - `hasRole('admin')` → `ctx.auth.hasRole('admin')` (boolean → true/false)
28
+ * - `hasSomeRole([...])` → `ctx.auth.hasSomeRole([...])` (boolean)
29
+ * - `A || B` → `queryHelpers.or([A, B])`
30
+ * - `A && B` → `queryHelpers.and([A, B])`
31
+ */
32
+ export declare function generateQueryFilterExpressionCode(node: AuthorizerExpressionNode, codeContext?: QueryFilterCodeContext): string;
33
+ /**
34
+ * Build model query filter generators for all models in a feature
35
+ * that have authorizer roles. Every model with authorizer roles gets a query
36
+ * filter so it can be referenced by nested expressions from other models.
37
+ */
38
+ export declare function buildQueryFiltersForFeature(appBuilder: BackendAppEntryBuilder, featureId: string): GeneratorBundle[];
39
+ export {};
40
+ //# sourceMappingURL=query-filter-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-filter-compiler.d.ts","sourceRoot":"","sources":["../../../src/compiler/backend/query-filter-compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAS3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;GAEG;AACH,UAAU,yBAAyB;IACjC,wDAAwD;IACxD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,UAAU,sBAAsB;IAC9B,+DAA+D;IAC/D,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;CACzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,wBAAwB,EAC9B,WAAW,CAAC,EAAE,sBAAsB,GACnC,MAAM,CAgCR;AAwKD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,sBAAsB,EAClC,SAAS,EAAE,MAAM,GAChB,eAAe,EAAE,CAanB"}
@@ -0,0 +1,168 @@
1
+ import { prismaModelQueryFilterGenerator } from '@baseplate-dev/fastify-generators';
2
+ import { ModelUtils, parseAuthorizerExpression, } from '@baseplate-dev/project-builder-lib';
3
+ import { lowercaseFirstChar } from '@baseplate-dev/utils';
4
+ /**
5
+ * Generate TypeScript code from an authorizer expression AST node,
6
+ * producing a Prisma where clause instead of a boolean check.
7
+ *
8
+ * - `model.field === userId` → `{ field: ctx.auth.userId }`
9
+ * - `hasRole('admin')` → `ctx.auth.hasRole('admin')` (boolean → true/false)
10
+ * - `hasSomeRole([...])` → `ctx.auth.hasSomeRole([...])` (boolean)
11
+ * - `A || B` → `queryHelpers.or([A, B])`
12
+ * - `A && B` → `queryHelpers.and([A, B])`
13
+ */
14
+ export function generateQueryFilterExpressionCode(node, codeContext) {
15
+ switch (node.type) {
16
+ case 'fieldComparison': {
17
+ return generateFieldComparisonWhereCode(node.left, node.right);
18
+ }
19
+ case 'hasRole': {
20
+ return `ctx.auth.hasRole('${node.role}')`;
21
+ }
22
+ case 'hasSomeRole': {
23
+ const roles = node.roles.map((r) => `'${r}'`).join(', ');
24
+ return `ctx.auth.hasSomeRole([${roles}])`;
25
+ }
26
+ case 'isAuthenticated': {
27
+ return 'ctx.auth.isAuthenticated';
28
+ }
29
+ case 'nestedHasRole': {
30
+ const resolved = getResolvedQueryFilter(codeContext, node.relationName);
31
+ const roles = `'${node.role}'`;
32
+ return `${resolved.foreignQueryFilterVar}.buildNestedWhere(ctx, '${resolved.relationFieldName}', [${roles}])`;
33
+ }
34
+ case 'nestedHasSomeRole': {
35
+ const resolved = getResolvedQueryFilter(codeContext, node.relationName);
36
+ const roles = node.roles.map((r) => `'${r}'`).join(', ');
37
+ return `${resolved.foreignQueryFilterVar}.buildNestedWhere(ctx, '${resolved.relationFieldName}', [${roles}])`;
38
+ }
39
+ case 'binaryLogical': {
40
+ const left = generateQueryFilterExpressionCode(node.left, codeContext);
41
+ const right = generateQueryFilterExpressionCode(node.right, codeContext);
42
+ const helper = node.operator === '||' ? 'or' : 'and';
43
+ return `queryHelpers.${helper}([${left}, ${right}])`;
44
+ }
45
+ }
46
+ }
47
+ /**
48
+ * Get the resolved query filter info from the code context, throwing if not found.
49
+ */
50
+ function getResolvedQueryFilter(codeContext, relationName) {
51
+ if (!codeContext) {
52
+ throw new Error(`Nested query filter expression references relation '${relationName}' but no code context was provided`);
53
+ }
54
+ const resolved = codeContext.resolvedFilters.get(relationName);
55
+ if (!resolved) {
56
+ throw new Error(`Nested query filter expression references relation '${relationName}' which was not resolved`);
57
+ }
58
+ return resolved;
59
+ }
60
+ /**
61
+ * Generate a Prisma where clause from a field comparison.
62
+ *
63
+ * In a field comparison one side is always a model field and the other
64
+ * is an auth field. We produce `{ modelField: ctx.auth.authField }`.
65
+ */
66
+ function generateFieldComparisonWhereCode(left, right) {
67
+ const modelNode = left.source === 'model' ? left : right;
68
+ const authNode = left.source === 'auth' ? left : right;
69
+ const authExpr = `ctx.auth.${authNode.field}`;
70
+ return `(${authExpr} != null ? { ${modelNode.field}: ${authExpr} } : false)`;
71
+ }
72
+ /**
73
+ * Resolve relation info for nested query filter expressions on a model.
74
+ * Unlike authorizer resolution which needs the local FK field, query filters
75
+ * need the Prisma relation field name for nested where clauses.
76
+ */
77
+ function resolveNestedQueryFilters(appBuilder, model, nestedRoleRefs) {
78
+ const resolvedFilters = new Map();
79
+ const foreignModelNames = [];
80
+ for (const { relationName } of nestedRoleRefs) {
81
+ if (resolvedFilters.has(relationName)) {
82
+ continue;
83
+ }
84
+ const relation = model.model.relations.find((r) => r.name === relationName);
85
+ if (!relation) {
86
+ throw new Error(`Relation '${relationName}' not found on model '${model.name}'`);
87
+ }
88
+ const foreignModel = ModelUtils.byIdOrThrow(appBuilder.projectDefinition, relation.modelRef);
89
+ const foreignModelName = foreignModel.name;
90
+ const foreignQueryFilterVar = `${lowercaseFirstChar(foreignModelName)}QueryFilter`;
91
+ resolvedFilters.set(relationName, {
92
+ relationFieldName: relationName,
93
+ foreignModelName,
94
+ foreignQueryFilterVar,
95
+ });
96
+ if (!foreignModelNames.includes(foreignModelName)) {
97
+ foreignModelNames.push(foreignModelName);
98
+ }
99
+ }
100
+ return { resolvedFilters, foreignModelNames };
101
+ }
102
+ /**
103
+ * Build a query filter generator for a single model given its roles and
104
+ * optional foreign query filter model names.
105
+ */
106
+ function buildQueryFilterForModel(appBuilder, model, roleRefs) {
107
+ const { authorizer } = model;
108
+ // Collect all nested role refs across all referenced roles
109
+ const allNestedRoleRefs = [];
110
+ const parsedRoles = roleRefs.map((roleRef) => {
111
+ const authRole = authorizer.roles.find((r) => r.id === roleRef || r.name === roleRef);
112
+ if (!authRole) {
113
+ throw new Error(`Instance role '${roleRef}' not found in model '${model.name}' authorizer roles.`);
114
+ }
115
+ const parsed = parseAuthorizerExpression(authRole.expression);
116
+ allNestedRoleRefs.push(...parsed.nestedRoleRefs);
117
+ return { authRole, parsed };
118
+ });
119
+ // Resolve relation info if there are nested refs
120
+ const { resolvedFilters, foreignModelNames } = allNestedRoleRefs.length > 0
121
+ ? resolveNestedQueryFilters(appBuilder, model, allNestedRoleRefs)
122
+ : {
123
+ resolvedFilters: new Map(),
124
+ foreignModelNames: [],
125
+ };
126
+ const codeContext = resolvedFilters.size > 0 ? { resolvedFilters } : undefined;
127
+ const roles = parsedRoles.map(({ authRole, parsed }) => {
128
+ const expressionCode = generateQueryFilterExpressionCode(parsed.ast, codeContext);
129
+ // Wrap object literals in parens to avoid arrow function body ambiguity
130
+ const wrappedCode = expressionCode.startsWith('{')
131
+ ? `(${expressionCode})`
132
+ : expressionCode;
133
+ return {
134
+ name: authRole.name,
135
+ roleCode: `(ctx) => ${wrappedCode}`,
136
+ foreignQueryFilterRefs: [
137
+ ...new Set(parsed.nestedRoleRefs
138
+ .map((ref) => resolvedFilters.get(ref.relationName)?.foreignModelName)
139
+ .filter((n) => n != null)),
140
+ ],
141
+ needsQueryHelpers: parsed.ast.type === 'binaryLogical',
142
+ };
143
+ });
144
+ return {
145
+ bundle: prismaModelQueryFilterGenerator({
146
+ modelName: model.name,
147
+ foreignQueryFilterModelNames: foreignModelNames,
148
+ roles,
149
+ }),
150
+ foreignModelNames,
151
+ };
152
+ }
153
+ /**
154
+ * Build model query filter generators for all models in a feature
155
+ * that have authorizer roles. Every model with authorizer roles gets a query
156
+ * filter so it can be referenced by nested expressions from other models.
157
+ */
158
+ export function buildQueryFiltersForFeature(appBuilder, featureId) {
159
+ const models = ModelUtils.getModelsForFeature(appBuilder.projectDefinition, featureId);
160
+ return models
161
+ .filter((model) => model.authorizer.roles.length > 0)
162
+ .map((model) => {
163
+ const roleRefs = model.authorizer.roles.map((r) => r.name);
164
+ const { bundle } = buildQueryFilterForModel(appBuilder, model, roleRefs);
165
+ return bundle;
166
+ });
167
+ }
168
+ //# sourceMappingURL=query-filter-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-filter-compiler.js","sourceRoot":"","sources":["../../../src/compiler/backend/query-filter-compiler.ts"],"names":[],"mappings":"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"}