@baseplate-dev/project-builder-server 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 (245) hide show
  1. package/CHANGELOG.md +69 -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 +4 -0
  63. package/dist/actions/index.d.ts.map +1 -1
  64. package/dist/actions/index.js +4 -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/template-extractor/delete-template-by-name.action.d.ts +13 -0
  96. package/dist/actions/template-extractor/delete-template-by-name.action.d.ts.map +1 -0
  97. package/dist/actions/template-extractor/delete-template-by-name.action.js +46 -0
  98. package/dist/actions/template-extractor/delete-template-by-name.action.js.map +1 -0
  99. package/dist/actions/template-extractor/index.d.ts +1 -0
  100. package/dist/actions/template-extractor/index.d.ts.map +1 -1
  101. package/dist/actions/template-extractor/index.js +1 -0
  102. package/dist/actions/template-extractor/index.js.map +1 -1
  103. package/dist/actions/test-project/index.d.ts +2 -0
  104. package/dist/actions/test-project/index.d.ts.map +1 -0
  105. package/dist/actions/test-project/index.js +2 -0
  106. package/dist/actions/test-project/index.js.map +1 -0
  107. package/dist/actions/test-project/test-project-init.action.d.ts +17 -0
  108. package/dist/actions/test-project/test-project-init.action.d.ts.map +1 -0
  109. package/dist/actions/test-project/test-project-init.action.js +97 -0
  110. package/dist/actions/test-project/test-project-init.action.js.map +1 -0
  111. package/dist/actions/types.d.ts +2 -0
  112. package/dist/actions/types.d.ts.map +1 -1
  113. package/dist/actions/types.js.map +1 -1
  114. package/dist/actions/utils/generation-manifest.d.ts +12 -0
  115. package/dist/actions/utils/generation-manifest.d.ts.map +1 -0
  116. package/dist/actions/utils/generation-manifest.js +142 -0
  117. package/dist/actions/utils/generation-manifest.js.map +1 -0
  118. package/dist/actions/utils/index.d.ts +1 -1
  119. package/dist/actions/utils/index.d.ts.map +1 -1
  120. package/dist/actions/utils/index.js +1 -1
  121. package/dist/actions/utils/index.js.map +1 -1
  122. package/dist/actions/utils/project-discovery.d.ts +23 -9
  123. package/dist/actions/utils/project-discovery.d.ts.map +1 -1
  124. package/dist/actions/utils/project-discovery.js +57 -31
  125. package/dist/actions/utils/project-discovery.js.map +1 -1
  126. package/dist/actions/utils/projects.d.ts.map +1 -1
  127. package/dist/actions/utils/projects.js +2 -1
  128. package/dist/actions/utils/projects.js.map +1 -1
  129. package/dist/compiler/backend/{authorizers.d.ts → authorizer-compiler.d.ts} +22 -2
  130. package/dist/compiler/backend/authorizer-compiler.d.ts.map +1 -0
  131. package/dist/compiler/backend/authorizer-compiler.js +165 -0
  132. package/dist/compiler/backend/authorizer-compiler.js.map +1 -0
  133. package/dist/compiler/backend/feature.d.ts.map +1 -1
  134. package/dist/compiler/backend/feature.js +3 -1
  135. package/dist/compiler/backend/feature.js.map +1 -1
  136. package/dist/compiler/backend/graphql.d.ts.map +1 -1
  137. package/dist/compiler/backend/graphql.js +115 -49
  138. package/dist/compiler/backend/graphql.js.map +1 -1
  139. package/dist/compiler/backend/models.d.ts.map +1 -1
  140. package/dist/compiler/backend/models.js +13 -13
  141. package/dist/compiler/backend/models.js.map +1 -1
  142. package/dist/compiler/backend/query-filter-compiler.d.ts +40 -0
  143. package/dist/compiler/backend/query-filter-compiler.d.ts.map +1 -0
  144. package/dist/compiler/backend/query-filter-compiler.js +168 -0
  145. package/dist/compiler/backend/query-filter-compiler.js.map +1 -0
  146. package/dist/compiler/backend/services.d.ts.map +1 -1
  147. package/dist/compiler/backend/services.js +24 -1
  148. package/dist/compiler/backend/services.js.map +1 -1
  149. package/dist/compiler/index.d.ts +1 -0
  150. package/dist/compiler/index.d.ts.map +1 -1
  151. package/dist/compiler/index.js.map +1 -1
  152. package/dist/compiler/root/root-package-compiler.js +6 -6
  153. package/dist/compiler/root/root-package-compiler.js.map +1 -1
  154. package/dist/compiler/web/admin/crud/index.js +1 -1
  155. package/dist/compiler/web/admin/crud/index.js.map +1 -1
  156. package/dist/compiler/web/admin/index.js +1 -1
  157. package/dist/compiler/web/admin/index.js.map +1 -1
  158. package/dist/compiler/web/admin/sections.d.ts.map +1 -1
  159. package/dist/compiler/web/admin/sections.js +2 -2
  160. package/dist/compiler/web/admin/sections.js.map +1 -1
  161. package/dist/compiler/web/web-compiler.d.ts.map +1 -1
  162. package/dist/compiler/web/web-compiler.js +4 -4
  163. package/dist/compiler/web/web-compiler.js.map +1 -1
  164. package/dist/core-modules/admin-crud-column-compiler.js +1 -1
  165. package/dist/core-modules/admin-crud-column-compiler.js.map +1 -1
  166. package/dist/core-modules/admin-crud-input-compiler.d.ts.map +1 -1
  167. package/dist/core-modules/admin-crud-input-compiler.js +13 -3
  168. package/dist/core-modules/admin-crud-input-compiler.js.map +1 -1
  169. package/dist/dev-server/api/router.d.ts +8 -7
  170. package/dist/dev-server/api/router.d.ts.map +1 -1
  171. package/dist/dev-server/mcp/stdio.d.ts +2 -2
  172. package/dist/dev-server/mcp/stdio.d.ts.map +1 -1
  173. package/dist/dev-server/mcp/stdio.js +2 -2
  174. package/dist/dev-server/mcp/stdio.js.map +1 -1
  175. package/dist/diff/diff-project.d.ts.map +1 -1
  176. package/dist/diff/diff-project.js +4 -4
  177. package/dist/diff/diff-project.js.map +1 -1
  178. package/dist/diff/snapshot/apply-diff-to-generator-output.d.ts.map +1 -1
  179. package/dist/diff/snapshot/apply-diff-to-generator-output.js +17 -2
  180. package/dist/diff/snapshot/apply-diff-to-generator-output.js.map +1 -1
  181. package/dist/diff/snapshot/create-snapshot-for-project.d.ts +12 -6
  182. package/dist/diff/snapshot/create-snapshot-for-project.d.ts.map +1 -1
  183. package/dist/diff/snapshot/create-snapshot-for-project.js +58 -26
  184. package/dist/diff/snapshot/create-snapshot-for-project.js.map +1 -1
  185. package/dist/diff/snapshot/index.d.ts +4 -1
  186. package/dist/diff/snapshot/index.d.ts.map +1 -1
  187. package/dist/diff/snapshot/index.js +4 -0
  188. package/dist/diff/snapshot/index.js.map +1 -1
  189. package/dist/diff/snapshot/save-snapshot.d.ts +11 -3
  190. package/dist/diff/snapshot/save-snapshot.d.ts.map +1 -1
  191. package/dist/diff/snapshot/save-snapshot.js +29 -10
  192. package/dist/diff/snapshot/save-snapshot.js.map +1 -1
  193. package/dist/diff/snapshot/snapshot-management.d.ts +7 -6
  194. package/dist/diff/snapshot/snapshot-management.d.ts.map +1 -1
  195. package/dist/diff/snapshot/snapshot-management.js +18 -22
  196. package/dist/diff/snapshot/snapshot-management.js.map +1 -1
  197. package/dist/diff/snapshot/snapshot-manifest.d.ts +1 -1
  198. package/dist/diff/snapshot/snapshot-manifest.d.ts.map +1 -1
  199. package/dist/diff/snapshot/snapshot-manifest.js +7 -7
  200. package/dist/diff/snapshot/snapshot-manifest.js.map +1 -1
  201. package/dist/diff/snapshot/snapshot-types.d.ts +22 -8
  202. package/dist/diff/snapshot/snapshot-types.d.ts.map +1 -1
  203. package/dist/diff/snapshot/snapshot-types.js +6 -2
  204. package/dist/diff/snapshot/snapshot-types.js.map +1 -1
  205. package/dist/diff/snapshot/snapshot-utils.d.ts +14 -5
  206. package/dist/diff/snapshot/snapshot-utils.d.ts.map +1 -1
  207. package/dist/diff/snapshot/snapshot-utils.js +25 -8
  208. package/dist/diff/snapshot/snapshot-utils.js.map +1 -1
  209. package/dist/index.d.ts +1 -0
  210. package/dist/index.js +1 -0
  211. package/dist/plugins/node-plugin-store.d.ts +1 -1
  212. package/dist/plugins/node-plugin-store.d.ts.map +1 -1
  213. package/dist/plugins/node-plugin-store.js +2 -2
  214. package/dist/plugins/node-plugin-store.js.map +1 -1
  215. package/dist/project-definition/load-project-definition.d.ts +2 -2
  216. package/dist/project-definition/load-project-definition.d.ts.map +1 -1
  217. package/dist/project-definition/load-project-definition.js +3 -3
  218. package/dist/project-definition/load-project-definition.js.map +1 -1
  219. package/dist/sync/generate-for-directory.d.ts +3 -2
  220. package/dist/sync/generate-for-directory.d.ts.map +1 -1
  221. package/dist/sync/generate-for-directory.js +24 -11
  222. package/dist/sync/generate-for-directory.js.map +1 -1
  223. package/dist/sync/sync-project.d.ts +3 -3
  224. package/dist/sync/sync-project.d.ts.map +1 -1
  225. package/dist/sync/sync-project.js +9 -3
  226. package/dist/sync/sync-project.js.map +1 -1
  227. package/dist/templates/create/create-generator.d.ts.map +1 -1
  228. package/dist/templates/create/create-generator.js +3 -3
  229. package/dist/templates/create/create-generator.js.map +1 -1
  230. package/dist/user-config/user-config-schema.d.ts +12 -0
  231. package/dist/user-config/user-config-schema.d.ts.map +1 -1
  232. package/dist/user-config/user-config-schema.js +29 -0
  233. package/dist/user-config/user-config-schema.js.map +1 -1
  234. package/package.json +17 -14
  235. package/dist/actions/utils/is-example-project.d.ts +0 -7
  236. package/dist/actions/utils/is-example-project.d.ts.map +0 -1
  237. package/dist/actions/utils/is-example-project.js +0 -22
  238. package/dist/actions/utils/is-example-project.js.map +0 -1
  239. package/dist/compiler/backend/authorizers.d.ts.map +0 -1
  240. package/dist/compiler/backend/authorizers.js +0 -75
  241. package/dist/compiler/backend/authorizers.js.map +0 -1
  242. package/dist/project-definition/get-single-app-directory-for-project.d.ts +0 -11
  243. package/dist/project-definition/get-single-app-directory-for-project.d.ts.map +0 -1
  244. package/dist/project-definition/get-single-app-directory-for-project.js +0 -19
  245. package/dist/project-definition/get-single-app-directory-for-project.js.map +0 -1
@@ -0,0 +1,165 @@
1
+ import { prismaModelAuthorizerGenerator } 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
+ *
7
+ * Transforms the implicit-context DSL into explicit context code:
8
+ * - `model.field` stays as `model.field`
9
+ * - `userId` (auth field) becomes `ctx.auth.userId`
10
+ * - `hasRole('admin')` becomes `ctx.auth.hasRole('admin')`
11
+ * - `hasSomeRole(['a', 'b'])` becomes `ctx.auth.hasSomeRole(['a', 'b'])`
12
+ * - `hasRole(model.relation, 'role')` becomes `await foreignAuthorizer.hasRoleById(ctx, model.fkField, 'role')`
13
+ * - `A || B` becomes `(A) || (B)`
14
+ */
15
+ export function generateAuthorizerExpressionCode(node, codeContext) {
16
+ switch (node.type) {
17
+ case 'fieldComparison': {
18
+ const left = generateFieldRefCode(node.left);
19
+ const right = generateFieldRefCode(node.right);
20
+ return `${left} ${node.operator} ${right}`;
21
+ }
22
+ case 'hasRole': {
23
+ return `ctx.auth.hasRole('${node.role}')`;
24
+ }
25
+ case 'hasSomeRole': {
26
+ const roles = node.roles.map((r) => `'${r}'`).join(', ');
27
+ return `ctx.auth.hasSomeRole([${roles}])`;
28
+ }
29
+ case 'nestedHasRole': {
30
+ const resolved = getResolvedRelation(codeContext, node.relationName);
31
+ return `await ${resolved.foreignAuthorizerVar}.hasRoleById(ctx, model.${resolved.localFkFieldName}, '${node.role}')`;
32
+ }
33
+ case 'nestedHasSomeRole': {
34
+ const resolved = getResolvedRelation(codeContext, node.relationName);
35
+ // Generate individual hasRoleById calls joined with ||
36
+ const checks = node.roles.map((role) => `await ${resolved.foreignAuthorizerVar}.hasRoleById(ctx, model.${resolved.localFkFieldName}, '${role}')`);
37
+ return checks.length === 1 ? checks[0] : `(${checks.join(' || ')})`;
38
+ }
39
+ case 'isAuthenticated': {
40
+ return 'ctx.auth.isAuthenticated';
41
+ }
42
+ case 'binaryLogical': {
43
+ const left = generateAuthorizerExpressionCode(node.left, codeContext);
44
+ const right = generateAuthorizerExpressionCode(node.right, codeContext);
45
+ return `(${left}) ${node.operator} (${right})`;
46
+ }
47
+ }
48
+ }
49
+ /**
50
+ * Get the resolved relation info from the code context, throwing if not found.
51
+ */
52
+ function getResolvedRelation(codeContext, relationName) {
53
+ if (!codeContext) {
54
+ throw new Error(`Nested authorizer expression references relation '${relationName}' but no code context was provided`);
55
+ }
56
+ const resolved = codeContext.resolvedRelations.get(relationName);
57
+ if (!resolved) {
58
+ throw new Error(`Nested authorizer expression references relation '${relationName}' which was not resolved`);
59
+ }
60
+ return resolved;
61
+ }
62
+ function generateFieldRefCode(node) {
63
+ if (node.source === 'model') {
64
+ return `model.${node.field}`;
65
+ }
66
+ return `ctx.auth.${node.field}`;
67
+ }
68
+ /**
69
+ * Resolve relation info for nested authorizer expressions on a model.
70
+ */
71
+ function resolveNestedRelations(appBuilder, model, nestedRoleRefs) {
72
+ const resolvedRelations = new Map();
73
+ const foreignModelNames = [];
74
+ for (const { relationName } of nestedRoleRefs) {
75
+ if (resolvedRelations.has(relationName)) {
76
+ continue;
77
+ }
78
+ const relation = model.model.relations.find((r) => r.name === relationName);
79
+ if (!relation) {
80
+ throw new Error(`Relation '${relationName}' not found on model '${model.name}'`);
81
+ }
82
+ if (relation.references.length !== 1) {
83
+ throw new Error(`Relation '${relationName}' on model '${model.name}' has ${relation.references.length} foreign key references. Nested authorizer checks only support single-key relations.`);
84
+ }
85
+ const localFkFieldName = appBuilder.nameFromId(relation.references[0].localRef);
86
+ if (!localFkFieldName) {
87
+ throw new Error(`Could not resolve local FK field for relation '${relationName}' on model '${model.name}'`);
88
+ }
89
+ const foreignModel = ModelUtils.byIdOrThrow(appBuilder.projectDefinition, relation.modelRef);
90
+ const foreignModelName = foreignModel.name;
91
+ const foreignAuthorizerVar = `${lowercaseFirstChar(foreignModelName)}Authorizer`;
92
+ resolvedRelations.set(relationName, {
93
+ localFkFieldName,
94
+ foreignModelName,
95
+ foreignAuthorizerVar,
96
+ });
97
+ if (!foreignModelNames.includes(foreignModelName)) {
98
+ foreignModelNames.push(foreignModelName);
99
+ }
100
+ }
101
+ return { resolvedRelations, foreignModelNames };
102
+ }
103
+ /**
104
+ * Build model authorizer generators for all models in a feature
105
+ * that have non-empty authorizer roles.
106
+ */
107
+ export function buildAuthorizersForFeature(appBuilder, featureId) {
108
+ const models = ModelUtils.getModelsForFeature(appBuilder.projectDefinition, featureId);
109
+ return models
110
+ .filter((model) => model.authorizer.roles.length > 0)
111
+ .map((model) => {
112
+ const { authorizer } = model;
113
+ const primaryKeyFields = ModelUtils.getPrimaryKeyFields(model);
114
+ if (primaryKeyFields.length !== 1) {
115
+ throw new Error(`Model '${model.name}' must have exactly one primary key field to use model authorizer. Found ${primaryKeyFields.length}.`);
116
+ }
117
+ const idFieldName = primaryKeyFields[0].name;
118
+ // Collect all nested role refs across all roles for this model
119
+ const allNestedRoleRefs = [];
120
+ const parsedRoles = authorizer.roles.map((role) => {
121
+ const parsed = parseAuthorizerExpression(role.expression);
122
+ allNestedRoleRefs.push(...parsed.nestedRoleRefs);
123
+ return { role, parsed };
124
+ });
125
+ // Resolve relation info if there are nested refs
126
+ const { resolvedRelations, foreignModelNames } = allNestedRoleRefs.length > 0
127
+ ? resolveNestedRelations(appBuilder, model, allNestedRoleRefs)
128
+ : {
129
+ resolvedRelations: new Map(),
130
+ foreignModelNames: [],
131
+ };
132
+ const codeContext = resolvedRelations.size > 0 ? { resolvedRelations } : undefined;
133
+ return prismaModelAuthorizerGenerator({
134
+ modelName: model.name,
135
+ idFieldName,
136
+ foreignAuthorizerModelNames: foreignModelNames,
137
+ roles: parsedRoles.map(({ role, parsed }) => {
138
+ const hasNestedRefs = parsed.nestedRoleRefs.length > 0;
139
+ const expressionCode = generateAuthorizerExpressionCode(parsed.ast, codeContext);
140
+ let roleCode;
141
+ if (hasNestedRefs) {
142
+ // Nested refs are async (hasRoleById returns Promise)
143
+ roleCode = parsed.requiresModel
144
+ ? `async (ctx, model) => ${expressionCode}`
145
+ : `async (ctx) => ${expressionCode}`;
146
+ }
147
+ else {
148
+ roleCode = parsed.requiresModel
149
+ ? `(ctx, model) => ${expressionCode}`
150
+ : `(ctx) => ${expressionCode}`;
151
+ }
152
+ return {
153
+ name: role.name,
154
+ roleCode,
155
+ foreignAuthorizerRefs: [
156
+ ...new Set(parsed.nestedRoleRefs
157
+ .map((ref) => resolvedRelations.get(ref.relationName)?.foreignModelName)
158
+ .filter((n) => n != null)),
159
+ ],
160
+ };
161
+ }),
162
+ });
163
+ });
164
+ }
165
+ //# sourceMappingURL=authorizer-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizer-compiler.js","sourceRoot":"","sources":["../../../src/compiler/backend/authorizer-compiler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../src/compiler/backend/feature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAQtE,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CA8BjB"}
1
+ {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../src/compiler/backend/feature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAStE,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CA+BjB"}
@@ -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;AA0TtE,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,138 @@ 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
+ : [];
78
+ // Global roles that bypass the query filter entirely (e.g., admin sees all records)
79
+ const queryFilterBypassRoles = isAuthEnabled && hasQueryFilter
80
+ ? queries.globalRoles.map((r) => appBuilder.nameFromId(r))
81
+ : [];
44
82
  return pothosTypesFileGenerator({
45
83
  id: `${model.id}-queries`,
46
84
  fileName: `${kebabCase(model.name)}.queries`,
47
85
  children: {
48
- findQuery: get?.enabled
86
+ findQuery: get.enabled
49
87
  ? pothosPrismaFindQueryGenerator({
50
88
  order: 0,
51
89
  modelName: model.name,
52
90
  hasPrimaryKeyInputType: ModelUtils.getModelIdFields(model).length > 1,
91
+ queryFilterRef: hasQueryFilter ? model.name : undefined,
92
+ queryFilterRoles,
93
+ queryFilterBypassRoles,
53
94
  children: {
54
- authorize: !isAuthEnabled || !get.roles?.length
55
- ? undefined
56
- : pothosAuthorizeFieldGenerator({
57
- roles: get.roles.map((r) => appBuilder.nameFromId(r)),
58
- }),
95
+ authorize,
59
96
  },
60
97
  })
61
98
  : undefined,
62
- listQuery: list?.enabled
99
+ listQuery: list.enabled
63
100
  ? pothosPrismaListQueryGenerator({
64
101
  order: 1,
65
102
  modelName: model.name,
103
+ queryFilterRef: hasQueryFilter ? model.name : undefined,
104
+ queryFilterRoles,
105
+ queryFilterBypassRoles,
106
+ children: {
107
+ authorize,
108
+ },
109
+ })
110
+ : undefined,
111
+ countQuery: list.enabled && list.count.enabled
112
+ ? pothosPrismaCountQueryGenerator({
113
+ order: 2,
114
+ modelName: model.name,
115
+ queryFilterRef: hasQueryFilter ? model.name : undefined,
116
+ queryFilterRoles,
117
+ queryFilterBypassRoles,
66
118
  children: {
67
- authorize: !isAuthEnabled || !list.roles?.length
68
- ? undefined
69
- : pothosAuthorizeFieldGenerator({
70
- roles: list.roles.map((r) => appBuilder.nameFromId(r)),
71
- }),
119
+ authorize,
72
120
  },
73
121
  })
74
122
  : undefined,
75
123
  },
76
124
  });
77
125
  }
126
+ /**
127
+ * Derives the GraphQL mutation authorize config from service-level roles.
128
+ * - No roles → no auth (public)
129
+ * - Only global roles → pass those roles directly
130
+ * - Instance roles present → use all auth roles as coarse gate
131
+ * (any authenticated user can call, service handles fine-grained auth)
132
+ */
133
+ function deriveMutationAuthorize(appBuilder, serviceMethod, isAuthEnabled) {
134
+ if (!isAuthEnabled) {
135
+ return undefined;
136
+ }
137
+ const { globalRoles, instanceRoles = [] } = serviceMethod;
138
+ if (globalRoles.length === 0 && instanceRoles.length === 0) {
139
+ return undefined;
140
+ }
141
+ if (instanceRoles.length > 0) {
142
+ // Instance roles present → coarse gate with all auth roles
143
+ const authConfig = appBuilder.definitionContainer.pluginStore.use(authConfigSpec);
144
+ const allRoles = authConfig.getAuthConfig(appBuilder.projectDefinition)?.roles ?? [];
145
+ if (allRoles.length === 0) {
146
+ return undefined;
147
+ }
148
+ return pothosAuthorizeFieldGenerator({
149
+ roles: allRoles.map((r) => r.name),
150
+ });
151
+ }
152
+ // Only global roles → pass them through
153
+ return pothosAuthorizeFieldGenerator({
154
+ roles: globalRoles.map((r) => appBuilder.nameFromId(r)),
155
+ });
156
+ }
78
157
  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);
158
+ const { graphql, service } = model;
159
+ const { mutations } = graphql;
160
+ const buildMutations = mutations.create.enabled ||
161
+ mutations.update.enabled ||
162
+ mutations.delete.enabled;
85
163
  if (!buildMutations) {
86
164
  return undefined;
87
165
  }
@@ -96,45 +174,33 @@ function buildMutationsFileForModel(appBuilder, model) {
96
174
  id: `${model.id}-mutations`,
97
175
  fileName: `${kebabCase(model.name)}.mutations`,
98
176
  children: {
99
- create: create?.enabled
177
+ create: create.enabled
100
178
  ? pothosPrismaCrudMutationGenerator({
101
179
  ...sharedMutationConfig,
102
180
  order: 0,
103
181
  name: `create${uppercaseFirstChar(model.name)}`,
104
182
  children: {
105
- authorize: isAuthEnabled && create.roles
106
- ? pothosAuthorizeFieldGenerator({
107
- roles: create.roles.map((r) => appBuilder.nameFromId(r)),
108
- })
109
- : undefined,
183
+ authorize: deriveMutationAuthorize(appBuilder, service.create, isAuthEnabled),
110
184
  },
111
185
  })
112
186
  : undefined,
113
- update: update?.enabled
187
+ update: update.enabled
114
188
  ? pothosPrismaCrudMutationGenerator({
115
189
  ...sharedMutationConfig,
116
190
  order: 1,
117
191
  name: `update${uppercaseFirstChar(model.name)}`,
118
192
  children: {
119
- authorize: isAuthEnabled && update.roles
120
- ? pothosAuthorizeFieldGenerator({
121
- roles: update.roles.map((r) => appBuilder.nameFromId(r)),
122
- })
123
- : undefined,
193
+ authorize: deriveMutationAuthorize(appBuilder, service.update, isAuthEnabled),
124
194
  },
125
195
  })
126
196
  : undefined,
127
- delete: del?.enabled
197
+ delete: del.enabled
128
198
  ? pothosPrismaCrudMutationGenerator({
129
199
  ...sharedMutationConfig,
130
200
  order: 2,
131
201
  name: `delete${uppercaseFirstChar(model.name)}`,
132
202
  children: {
133
- authorize: isAuthEnabled && del.roles
134
- ? pothosAuthorizeFieldGenerator({
135
- roles: del.roles.map((r) => appBuilder.nameFromId(r)),
136
- })
137
- : undefined,
203
+ authorize: deriveMutationAuthorize(appBuilder, service.delete, isAuthEnabled),
138
204
  },
139
205
  })
140
206
  : undefined,
@@ -156,8 +222,8 @@ function buildEnumFileForModel(enumFileId, enums) {
156
222
  });
157
223
  }
158
224
  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) ?? [];
225
+ const models = ModelUtils.getModelsForFeature(appBuilder.projectDefinition, featureId);
226
+ const enums = (appBuilder.projectDefinition.enums ?? []).filter((e) => e.featureRef === featureId && e.isExposed);
161
227
  return [
162
228
  ...models.flatMap((model) => [
163
229
  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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"}