@baseplate-dev/project-builder-lib 0.6.3 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/compiler/admin-crud-action-compiler.js +1 -1
  3. package/dist/compiler/admin-crud-action-compiler.js.map +1 -1
  4. package/dist/compiler/admin-crud-column-compiler-spec.js +1 -1
  5. package/dist/compiler/admin-crud-column-compiler-spec.js.map +1 -1
  6. package/dist/compiler/admin-crud-input-spec.js +1 -1
  7. package/dist/compiler/admin-crud-input-spec.js.map +1 -1
  8. package/dist/compiler/app-compiler-spec.js +1 -1
  9. package/dist/compiler/app-compiler-spec.js.map +1 -1
  10. package/dist/compiler/index.d.ts +1 -0
  11. package/dist/compiler/index.d.ts.map +1 -1
  12. package/dist/compiler/index.js +1 -0
  13. package/dist/compiler/index.js.map +1 -1
  14. package/dist/compiler/model-transformer-compiler-spec.js +1 -1
  15. package/dist/compiler/model-transformer-compiler-spec.js.map +1 -1
  16. package/dist/compiler/root-compiler-spec.d.ts +25 -0
  17. package/dist/compiler/root-compiler-spec.d.ts.map +1 -0
  18. package/dist/compiler/root-compiler-spec.js +23 -0
  19. package/dist/compiler/root-compiler-spec.js.map +1 -0
  20. package/dist/constants/theme-colors.d.ts +0 -48
  21. package/dist/constants/theme-colors.d.ts.map +1 -1
  22. package/dist/constants/theme-colors.js +0 -32
  23. package/dist/constants/theme-colors.js.map +1 -1
  24. package/dist/definition/feature/feature-utils.d.ts +9 -3
  25. package/dist/definition/feature/feature-utils.d.ts.map +1 -1
  26. package/dist/definition/feature/feature-utils.js +30 -2
  27. package/dist/definition/feature/feature-utils.js.map +1 -1
  28. package/dist/definition/plugins/plugin-utils.d.ts +15 -0
  29. package/dist/definition/plugins/plugin-utils.d.ts.map +1 -1
  30. package/dist/definition/plugins/plugin-utils.js +50 -1
  31. package/dist/definition/plugins/plugin-utils.js.map +1 -1
  32. package/dist/definition/project-definition-container.d.ts.map +1 -1
  33. package/dist/definition/project-definition-container.js +3 -1
  34. package/dist/definition/project-definition-container.js.map +1 -1
  35. package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-acorn-parser.d.ts +2 -0
  36. package/dist/expression-parsers/authorizer/authorizer-expression-acorn-parser.d.ts.map +1 -0
  37. package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-acorn-parser.js +107 -52
  38. package/dist/expression-parsers/authorizer/authorizer-expression-acorn-parser.js.map +1 -0
  39. package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-ast.d.ts +69 -1
  40. package/dist/expression-parsers/authorizer/authorizer-expression-ast.d.ts.map +1 -0
  41. package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-ast.js +2 -0
  42. package/dist/expression-parsers/authorizer/authorizer-expression-ast.js.map +1 -0
  43. package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-parser.d.ts +13 -14
  44. package/dist/expression-parsers/authorizer/authorizer-expression-parser.d.ts.map +1 -0
  45. package/dist/expression-parsers/authorizer/authorizer-expression-parser.js +292 -0
  46. package/dist/expression-parsers/authorizer/authorizer-expression-parser.js.map +1 -0
  47. package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-validator.d.ts +37 -17
  48. package/dist/expression-parsers/authorizer/authorizer-expression-validator.d.ts.map +1 -0
  49. package/dist/expression-parsers/authorizer/authorizer-expression-validator.js +379 -0
  50. package/dist/expression-parsers/authorizer/authorizer-expression-validator.js.map +1 -0
  51. package/dist/expression-parsers/authorizer/authorizer-expression-visitor.d.ts +54 -0
  52. package/dist/expression-parsers/authorizer/authorizer-expression-visitor.d.ts.map +1 -0
  53. package/dist/expression-parsers/authorizer/authorizer-expression-visitor.js +52 -0
  54. package/dist/expression-parsers/authorizer/authorizer-expression-visitor.js.map +1 -0
  55. package/dist/expression-parsers/authorizer/index.d.ts +6 -0
  56. package/dist/expression-parsers/authorizer/index.d.ts.map +1 -0
  57. package/dist/expression-parsers/authorizer/index.js +6 -0
  58. package/dist/expression-parsers/authorizer/index.js.map +1 -0
  59. package/dist/expression-parsers/register-core-module.d.ts +6 -0
  60. package/dist/expression-parsers/register-core-module.d.ts.map +1 -0
  61. package/dist/expression-parsers/register-core-module.js +29 -0
  62. package/dist/expression-parsers/register-core-module.js.map +1 -0
  63. package/dist/index.d.ts +1 -0
  64. package/dist/index.js +1 -0
  65. package/dist/migrations/index.d.ts.map +1 -1
  66. package/dist/migrations/index.js +6 -0
  67. package/dist/migrations/index.js.map +1 -1
  68. package/dist/migrations/migration-029-admin-role-and-auto-assigned.d.ts +25 -0
  69. package/dist/migrations/migration-029-admin-role-and-auto-assigned.d.ts.map +1 -0
  70. package/dist/migrations/migration-029-admin-role-and-auto-assigned.js +72 -0
  71. package/dist/migrations/migration-029-admin-role-and-auto-assigned.js.map +1 -0
  72. package/dist/migrations/migration-030-remove-theme-hover-colors.d.ts +17 -0
  73. package/dist/migrations/migration-030-remove-theme-hover-colors.d.ts.map +1 -0
  74. package/dist/migrations/migration-030-remove-theme-hover-colors.js +41 -0
  75. package/dist/migrations/migration-030-remove-theme-hover-colors.js.map +1 -0
  76. package/dist/migrations/migration-031-uuid-default-generation.d.ts +24 -0
  77. package/dist/migrations/migration-031-uuid-default-generation.d.ts.map +1 -0
  78. package/dist/migrations/migration-031-uuid-default-generation.js +40 -0
  79. package/dist/migrations/migration-031-uuid-default-generation.js.map +1 -0
  80. package/dist/migrations/transform-json-path.d.ts.map +1 -1
  81. package/dist/migrations/transform-json-path.js +2 -3
  82. package/dist/migrations/transform-json-path.js.map +1 -1
  83. package/dist/parser/collect-definition-issues.d.ts.map +1 -1
  84. package/dist/parser/collect-definition-issues.js +10 -2
  85. package/dist/parser/collect-definition-issues.js.map +1 -1
  86. package/dist/parser/collect-expression-issues.d.ts +17 -9
  87. package/dist/parser/collect-expression-issues.d.ts.map +1 -1
  88. package/dist/parser/collect-expression-issues.js +21 -15
  89. package/dist/parser/collect-expression-issues.js.map +1 -1
  90. package/dist/parser/definition-issue-checkers/plugin-dependency-checker.d.ts +11 -0
  91. package/dist/parser/definition-issue-checkers/plugin-dependency-checker.d.ts.map +1 -0
  92. package/dist/parser/definition-issue-checkers/plugin-dependency-checker.js +41 -0
  93. package/dist/parser/definition-issue-checkers/plugin-dependency-checker.js.map +1 -0
  94. package/dist/parser/definition-issue-checkers/plugin-implementation-checker.d.ts +16 -0
  95. package/dist/parser/definition-issue-checkers/plugin-implementation-checker.d.ts.map +1 -0
  96. package/dist/parser/definition-issue-checkers/plugin-implementation-checker.js +69 -0
  97. package/dist/parser/definition-issue-checkers/plugin-implementation-checker.js.map +1 -0
  98. package/dist/parser/definition-issue-utils.d.ts +28 -1
  99. package/dist/parser/definition-issue-utils.d.ts.map +1 -1
  100. package/dist/parser/definition-issue-utils.js +59 -0
  101. package/dist/parser/definition-issue-utils.js.map +1 -1
  102. package/dist/parser/find-orphaned-union-items.d.ts +30 -0
  103. package/dist/parser/find-orphaned-union-items.d.ts.map +1 -0
  104. package/dist/parser/find-orphaned-union-items.js +47 -0
  105. package/dist/parser/find-orphaned-union-items.js.map +1 -0
  106. package/dist/parser/index.d.ts +3 -1
  107. package/dist/parser/index.d.ts.map +1 -1
  108. package/dist/parser/index.js +3 -1
  109. package/dist/parser/index.js.map +1 -1
  110. package/dist/parser/parser.d.ts.map +1 -1
  111. package/dist/parser/parser.js +3 -0
  112. package/dist/parser/parser.js.map +1 -1
  113. package/dist/parser/transform-data-with-schema.js +1 -1
  114. package/dist/parser/transform-data-with-schema.js.map +1 -1
  115. package/dist/plugins/imports/index.d.ts +1 -0
  116. package/dist/plugins/imports/index.d.ts.map +1 -1
  117. package/dist/plugins/imports/index.js +1 -0
  118. package/dist/plugins/imports/index.js.map +1 -1
  119. package/dist/plugins/imports/validate-plugin-dependencies.d.ts +42 -0
  120. package/dist/plugins/imports/validate-plugin-dependencies.d.ts.map +1 -0
  121. package/dist/plugins/imports/validate-plugin-dependencies.js +80 -0
  122. package/dist/plugins/imports/validate-plugin-dependencies.js.map +1 -0
  123. package/dist/plugins/metadata/types.d.ts +13 -0
  124. package/dist/plugins/metadata/types.d.ts.map +1 -1
  125. package/dist/plugins/metadata/types.js +15 -0
  126. package/dist/plugins/metadata/types.js.map +1 -1
  127. package/dist/plugins/spec/auth-config-spec.d.ts +1 -0
  128. package/dist/plugins/spec/auth-config-spec.d.ts.map +1 -1
  129. package/dist/plugins/spec/auth-config-spec.js.map +1 -1
  130. package/dist/references/definition-ref-builder.d.ts +2 -0
  131. package/dist/references/definition-ref-builder.d.ts.map +1 -1
  132. package/dist/references/definition-ref-registry.d.ts +2 -0
  133. package/dist/references/definition-ref-registry.d.ts.map +1 -1
  134. package/dist/references/definition-ref-registry.js.map +1 -1
  135. package/dist/references/expression-parser-ref.d.ts +51 -0
  136. package/dist/references/expression-parser-ref.d.ts.map +1 -0
  137. package/dist/references/expression-parser-ref.js +14 -0
  138. package/dist/references/expression-parser-ref.js.map +1 -0
  139. package/dist/references/expression-parser-spec.d.ts +29 -0
  140. package/dist/references/expression-parser-spec.d.ts.map +1 -0
  141. package/dist/references/expression-parser-spec.js +29 -0
  142. package/dist/references/expression-parser-spec.js.map +1 -0
  143. package/dist/references/expression-types.d.ts +20 -22
  144. package/dist/references/expression-types.d.ts.map +1 -1
  145. package/dist/references/expression-types.js +1 -2
  146. package/dist/references/expression-types.js.map +1 -1
  147. package/dist/references/extend-parser-context-with-refs.d.ts +7 -2
  148. package/dist/references/extend-parser-context-with-refs.d.ts.map +1 -1
  149. package/dist/references/extend-parser-context-with-refs.js +42 -12
  150. package/dist/references/extend-parser-context-with-refs.js.map +1 -1
  151. package/dist/references/extract-definition-refs.js +1 -1
  152. package/dist/references/extract-definition-refs.js.map +1 -1
  153. package/dist/references/fix-definition-refs.d.ts +22 -0
  154. package/dist/references/fix-definition-refs.d.ts.map +1 -0
  155. package/dist/references/fix-definition-refs.js +29 -0
  156. package/dist/references/fix-definition-refs.js.map +1 -0
  157. package/dist/references/fix-expression-renames.d.ts +20 -0
  158. package/dist/references/fix-expression-renames.d.ts.map +1 -0
  159. package/dist/references/fix-expression-renames.js +87 -0
  160. package/dist/references/fix-expression-renames.js.map +1 -0
  161. package/dist/references/index.d.ts +4 -0
  162. package/dist/references/index.d.ts.map +1 -1
  163. package/dist/references/index.js +4 -0
  164. package/dist/references/index.js.map +1 -1
  165. package/dist/references/parse-schema-with-references.d.ts +2 -1
  166. package/dist/references/parse-schema-with-references.d.ts.map +1 -1
  167. package/dist/references/parse-schema-with-references.js.map +1 -1
  168. package/dist/schema/apps/web/admin/sections/crud.d.ts.map +1 -1
  169. package/dist/schema/apps/web/admin/sections/crud.js +3 -2
  170. package/dist/schema/apps/web/admin/sections/crud.js.map +1 -1
  171. package/dist/schema/creator/definition-issue-checkers.d.ts +15 -0
  172. package/dist/schema/creator/definition-issue-checkers.d.ts.map +1 -1
  173. package/dist/schema/creator/definition-issue-checkers.js +33 -0
  174. package/dist/schema/creator/definition-issue-checkers.js.map +1 -1
  175. package/dist/schema/creator/schema-creator.js +1 -1
  176. package/dist/schema/creator/schema-creator.js.map +1 -1
  177. package/dist/schema/features/feature.js +1 -1
  178. package/dist/schema/features/feature.js.map +1 -1
  179. package/dist/schema/libraries/library.d.ts.map +1 -1
  180. package/dist/schema/libraries/library.js +1 -0
  181. package/dist/schema/libraries/library.js.map +1 -1
  182. package/dist/schema/models/authorizer/authorizer-expression-ref.d.ts +11 -0
  183. package/dist/schema/models/authorizer/authorizer-expression-ref.d.ts.map +1 -0
  184. package/dist/schema/models/authorizer/authorizer-expression-ref.js +10 -0
  185. package/dist/schema/models/authorizer/authorizer-expression-ref.js.map +1 -0
  186. package/dist/schema/models/authorizer/authorizer.js +2 -2
  187. package/dist/schema/models/authorizer/authorizer.js.map +1 -1
  188. package/dist/schema/models/authorizer/index.d.ts +1 -4
  189. package/dist/schema/models/authorizer/index.d.ts.map +1 -1
  190. package/dist/schema/models/authorizer/index.js +1 -4
  191. package/dist/schema/models/authorizer/index.js.map +1 -1
  192. package/dist/schema/models/enums.d.ts +12 -0
  193. package/dist/schema/models/enums.d.ts.map +1 -1
  194. package/dist/schema/models/enums.js +5 -2
  195. package/dist/schema/models/enums.js.map +1 -1
  196. package/dist/schema/models/graphql.js +3 -3
  197. package/dist/schema/models/graphql.js.map +1 -1
  198. package/dist/schema/models/models.d.ts +24 -36
  199. package/dist/schema/models/models.d.ts.map +1 -1
  200. package/dist/schema/models/models.js +7 -5
  201. package/dist/schema/models/models.js.map +1 -1
  202. package/dist/schema/plugins/definition.d.ts.map +1 -1
  203. package/dist/schema/plugins/definition.js +2 -0
  204. package/dist/schema/plugins/definition.js.map +1 -1
  205. package/dist/schema/project-definition.d.ts +14 -22
  206. package/dist/schema/project-definition.d.ts.map +1 -1
  207. package/dist/schema/project-definition.js +5 -1
  208. package/dist/schema/project-definition.js.map +1 -1
  209. package/dist/schema/settings/settings.d.ts +2 -10
  210. package/dist/schema/settings/settings.d.ts.map +1 -1
  211. package/dist/schema/settings/theme.d.ts +3 -15
  212. package/dist/schema/settings/theme.d.ts.map +1 -1
  213. package/dist/schema/utils/validation.d.ts.map +1 -1
  214. package/dist/schema/utils/validation.js +16 -3
  215. package/dist/schema/utils/validation.js.map +1 -1
  216. package/dist/specs/packages/library-type-spec.d.ts +4 -0
  217. package/dist/specs/packages/library-type-spec.d.ts.map +1 -1
  218. package/dist/specs/packages/library-type-spec.js +2 -2
  219. package/dist/specs/packages/library-type-spec.js.map +1 -1
  220. package/dist/testing/definition-helpers.test-helper.js +2 -2
  221. package/dist/testing/definition-helpers.test-helper.js.map +1 -1
  222. package/dist/testing/expression-stub-parser.test-helper.d.ts +2 -4
  223. package/dist/testing/expression-stub-parser.test-helper.d.ts.map +1 -1
  224. package/dist/testing/expression-stub-parser.test-helper.js +2 -10
  225. package/dist/testing/expression-stub-parser.test-helper.js.map +1 -1
  226. package/dist/testing/expression-warning-parser.test-helper.d.ts +2 -4
  227. package/dist/testing/expression-warning-parser.test-helper.d.ts.map +1 -1
  228. package/dist/testing/expression-warning-parser.test-helper.js +2 -8
  229. package/dist/testing/expression-warning-parser.test-helper.js.map +1 -1
  230. package/dist/testing/index.d.ts +1 -0
  231. package/dist/testing/index.d.ts.map +1 -1
  232. package/dist/testing/index.js +1 -0
  233. package/dist/testing/index.js.map +1 -1
  234. package/dist/testing/parser-context.test-helper.d.ts.map +1 -1
  235. package/dist/testing/parser-context.test-helper.js +2 -1
  236. package/dist/testing/parser-context.test-helper.js.map +1 -1
  237. package/dist/testing/plugin-store.test-helper.d.ts +11 -0
  238. package/dist/testing/plugin-store.test-helper.d.ts.map +1 -0
  239. package/dist/testing/plugin-store.test-helper.js +32 -0
  240. package/dist/testing/plugin-store.test-helper.js.map +1 -0
  241. package/dist/testing/project-definition-container.test-helper.d.ts.map +1 -1
  242. package/dist/testing/project-definition-container.test-helper.js +2 -1
  243. package/dist/testing/project-definition-container.test-helper.js.map +1 -1
  244. package/dist/tools/index.d.ts +2 -0
  245. package/dist/tools/index.d.ts.map +1 -1
  246. package/dist/tools/index.js +2 -0
  247. package/dist/tools/index.js.map +1 -1
  248. package/dist/tools/sort-entity-arrays.d.ts +15 -0
  249. package/dist/tools/sort-entity-arrays.d.ts.map +1 -0
  250. package/dist/tools/sort-entity-arrays.js +31 -0
  251. package/dist/tools/sort-entity-arrays.js.map +1 -0
  252. package/dist/utils/color-conversions.d.ts +12 -0
  253. package/dist/utils/color-conversions.d.ts.map +1 -1
  254. package/dist/utils/color-conversions.js +17 -1
  255. package/dist/utils/color-conversions.js.map +1 -1
  256. package/dist/utils/color-names.d.ts.map +1 -1
  257. package/dist/utils/color-names.js +6 -5
  258. package/dist/utils/color-names.js.map +1 -1
  259. package/dist/utils/definition-diff/definition-diff.js +2 -2
  260. package/dist/utils/definition-diff/definition-diff.js.map +1 -1
  261. package/dist/utils/theme.d.ts +1 -0
  262. package/dist/utils/theme.d.ts.map +1 -1
  263. package/dist/utils/theme.js +18 -10
  264. package/dist/utils/theme.js.map +1 -1
  265. package/dist/web/components/definition-diff-alert.js +2 -2
  266. package/dist/web/components/definition-diff-alert.js.map +1 -1
  267. package/dist/web/components/feature-combobox-field.d.ts.map +1 -1
  268. package/dist/web/components/feature-combobox-field.js +5 -3
  269. package/dist/web/components/feature-combobox-field.js.map +1 -1
  270. package/dist/web/specs/admin-crud-action-web-spec.js +1 -1
  271. package/dist/web/specs/admin-crud-action-web-spec.js.map +1 -1
  272. package/dist/web/specs/admin-crud-column-web-spec.js +1 -1
  273. package/dist/web/specs/admin-crud-column-web-spec.js.map +1 -1
  274. package/dist/web/specs/admin-crud-input-web-spec.js +1 -1
  275. package/dist/web/specs/admin-crud-input-web-spec.js.map +1 -1
  276. package/dist/web/specs/model-transformer-web-spec.d.ts +19 -2
  277. package/dist/web/specs/model-transformer-web-spec.d.ts.map +1 -1
  278. package/dist/web/specs/model-transformer-web-spec.js +1 -1
  279. package/dist/web/specs/model-transformer-web-spec.js.map +1 -1
  280. package/package.json +8 -8
  281. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.d.ts.map +0 -1
  282. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.js.map +0 -1
  283. package/dist/schema/models/authorizer/authorizer-expression-ast.d.ts.map +0 -1
  284. package/dist/schema/models/authorizer/authorizer-expression-ast.js.map +0 -1
  285. package/dist/schema/models/authorizer/authorizer-expression-parser.d.ts.map +0 -1
  286. package/dist/schema/models/authorizer/authorizer-expression-parser.js +0 -145
  287. package/dist/schema/models/authorizer/authorizer-expression-parser.js.map +0 -1
  288. package/dist/schema/models/authorizer/authorizer-expression-validator.d.ts.map +0 -1
  289. package/dist/schema/models/authorizer/authorizer-expression-validator.js +0 -284
  290. package/dist/schema/models/authorizer/authorizer-expression-validator.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { createPluginImplementationStoreWithNewPlugins } from '#src/parser/parser.js';
2
- import { getPluginMetadataByKeyOrThrow, pluginConfigSpec, } from '#src/plugins/index.js';
2
+ import { getPluginMetadataByKey, getPluginMetadataByKeyOrThrow, pluginConfigSpec, } from '#src/plugins/index.js';
3
3
  import { pluginEntityType } from '#src/schema/index.js';
4
4
  function byKey(projectDefinition, key) {
5
5
  const pluginEntityId = pluginEntityType.idFromKey(key);
@@ -69,6 +69,54 @@ function disablePlugin(projectDefinition, pluginKey, context) {
69
69
  }
70
70
  projectDefinition.plugins = projectDefinition.plugins?.filter((p) => p.id !== pluginEntityType.idFromKey(pluginKey));
71
71
  }
72
+ /**
73
+ * Finds all enabled plugins that transitively depend on the given plugin
74
+ * via required (non-optional) dependencies.
75
+ *
76
+ * Uses BFS to discover the full transitive closure: if A requires B and
77
+ * B requires C, disabling C returns both B and A.
78
+ *
79
+ * @param projectDefinition The project definition to check
80
+ * @param pluginKey The key of the plugin being considered for disabling
81
+ * @param pluginStore The plugin store containing available plugin metadata
82
+ * @returns Array of metadata for plugins that transitively depend on the given plugin
83
+ */
84
+ function getDependentPlugins(projectDefinition, pluginKey, pluginStore) {
85
+ const targetMetadata = getPluginMetadataByKey(pluginStore, pluginKey);
86
+ if (!targetMetadata) {
87
+ return [];
88
+ }
89
+ // Build a metadata map for all enabled plugins
90
+ const enabledMetadataMap = new Map();
91
+ for (const plugin of projectDefinition.plugins ?? []) {
92
+ const key = pluginEntityType.keyFromId(plugin.id);
93
+ const metadata = getPluginMetadataByKey(pluginStore, key);
94
+ if (metadata) {
95
+ enabledMetadataMap.set(metadata.fullyQualifiedName, metadata);
96
+ }
97
+ }
98
+ // BFS to find transitive dependents — use index-based iteration
99
+ // since the queue grows during traversal
100
+ const visited = new Set([targetMetadata.fullyQualifiedName]);
101
+ const queue = [targetMetadata.fullyQualifiedName];
102
+ const dependents = [];
103
+ // oxlint-disable-next-line prefer-for-of -- queue grows during iteration
104
+ for (let i = 0; i < queue.length; i++) {
105
+ const currentFqn = queue[i];
106
+ for (const [fqn, metadata] of enabledMetadataMap) {
107
+ if (visited.has(fqn)) {
108
+ continue;
109
+ }
110
+ const hasRequiredDep = metadata.pluginDependencies?.some((dep) => dep.plugin === currentFqn && !dep.optional);
111
+ if (hasRequiredDep) {
112
+ visited.add(fqn);
113
+ dependents.push(metadata);
114
+ queue.push(fqn);
115
+ }
116
+ }
117
+ }
118
+ return dependents;
119
+ }
72
120
  export const PluginUtils = {
73
121
  byKey,
74
122
  byKeyOrThrow,
@@ -76,5 +124,6 @@ export const PluginUtils = {
76
124
  setPluginConfig,
77
125
  configByKeyOrThrow,
78
126
  disablePlugin,
127
+ getDependentPlugins,
79
128
  };
80
129
  //# sourceMappingURL=plugin-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-utils.js","sourceRoot":"","sources":["../../../src/definition/plugins/plugin-utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,6CAA6C,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIxD,SAAS,KAAK,CACZ,iBAAoC,EACpC,GAAW;IAEX,MAAM,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAC/B,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CACnB,iBAAoC,EACpC,EAAU;IAEV,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAClB,iBAAoC,EACpC,GAAW;IAEX,MAAM,GAAG,GAAG,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,MAAM,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CACzB,iBAAoC,EACpC,GAAW;IAEX,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CACtB,iBAAoC,EACpC,MAA+B,EAC/B,YAAqB,EACrB,mBAA+C;IAE/C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,IAAI,EAAE,CAAC;IAChD,MAAM,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;IAElE,IAAI,WAAW,EAAE,CAAC;QAChB,sEAAsE;QACtE,sEAAsE;QACtE,MAAM,eAAe,GAAG,6CAA6C,CACnE,mBAAmB,CAAC,aAAa,CAAC,WAAW,EAC7C,CAAC,MAAM,CAAC,EACR,mBAAmB,CAAC,UAAU,CAC/B,CAAC;QACF,MAAM,mBAAmB,GAAG,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAClE,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,uBAAuB,CACtE,MAAM,CAAC,GAAG,CACX,CAAC;QAEF,iBAAiB,CAAC,OAAO,GAAG;YAC1B,GAAG,OAAO;YACV;gBACE,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,YAAY;gBACpB,mBAAmB,EAAE,oBAAoB;aAC1C;SACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,2DAA2D;QAC3D,iBAAiB,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CACpB,iBAAoC,EACpC,SAAiB,EACjB,OAA4B;IAE5B,qCAAqC;IACrC,MAAM,cAAc,GAAG,6BAA6B,CAClD,OAAO,CAAC,WAAW,EACnB,SAAS,CACV,CAAC;IAEF,mEAAmE;IACnE,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7D,MAAM,aAAa,GAAG,6BAA6B,CACjD,OAAO,CAAC,WAAW,EACnB,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CACjC,CAAC;QACF,OAAO,aAAa,CAAC,SAAS,KAAK,cAAc,CAAC,kBAAkB,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,cAAc;YAC5B,aAAa,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,iBAAiB,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAC3D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK;IACL,YAAY;IACZ,WAAW;IACX,eAAe;IACf,kBAAkB;IAClB,aAAa;CACd,CAAC"}
1
+ {"version":3,"file":"plugin-utils.js","sourceRoot":"","sources":["../../../src/definition/plugins/plugin-utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project-definition-container.d.ts","sourceRoot":"","sources":["../../src/definition/project-definition-container.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,oCAAoC,CAAC;AAe5C;;;;;GAKG;AACH,qBAAa,0BAA0B;IACrC,UAAU,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IACrD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,EAAE,uBAAuB,CAAC;IAEhC,OAAO,CAAC,cAAc,CAA4B;gBAGhD,MAAM,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,EAChD,aAAa,EAAE,mBAAmB,EAClC,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,uBAAuB;IAWjC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS;IAKlE;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAC9B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IAYtD;;;;;OAKG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IAO1D;;;;;OAKG;IACH,eAAe,CACb,MAAM,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI,GAC/C,oBAAoB,CAAC,iBAAiB,CAAC;IAK1C;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAKxB,sBAAsB,IAAI,oBAAoB;IAa9C;;;;OAIG;IACH,oBAAoB,IAAI,MAAM;IAK9B;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CACzB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,mBAAmB,GAC3B,0BAA0B;CAY9B"}
1
+ {"version":3,"file":"project-definition-container.d.ts","sourceRoot":"","sources":["../../src/definition/project-definition-container.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,oCAAoC,CAAC;AAgB5C;;;;;GAKG;AACH,qBAAa,0BAA0B;IACrC,UAAU,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IACrD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,EAAE,uBAAuB,CAAC;IAEhC,OAAO,CAAC,cAAc,CAA4B;gBAGhD,MAAM,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,EAChD,aAAa,EAAE,mBAAmB,EAClC,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,uBAAuB;IAWjC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS;IAKlE;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAC9B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IAYtD;;;;;OAKG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IAO1D;;;;;OAKG;IACH,eAAe,CACb,MAAM,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI,GAC/C,oBAAoB,CAAC,iBAAiB,CAAC;IAK1C;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAKxB,sBAAsB,IAAI,oBAAoB;IAa9C;;;;OAIG;IACH,oBAAoB,IAAI,MAAM;IAM9B;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CACzB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,mBAAmB,GAC3B,0BAA0B;CAY9B"}
@@ -4,6 +4,7 @@ import { createPluginSpecStore } from '#src/parser/parser.js';
4
4
  import { deserializeSchemaWithTransformedReferences, fixRefDeletions, serializeSchema, serializeSchemaFromRefPayload, } from '#src/references/index.js';
5
5
  import { createDefinitionSchemaParserContext, createProjectDefinitionSchema, } from '#src/schema/index.js';
6
6
  import { collectEntityMetadata } from '#src/tools/entity-service/entity-type-map.js';
7
+ import { sortEntityArrays } from '#src/tools/sort-entity-arrays.js';
7
8
  /**
8
9
  * Container for a project definition that includes references and entities.
9
10
  *
@@ -96,7 +97,8 @@ export class ProjectDefinitionContainer {
96
97
  */
97
98
  toSerializedContents() {
98
99
  const serializedContents = serializeSchema(this.schema, this.definition);
99
- return stringifyPrettyStable(serializedContents);
100
+ const sortedContents = sortEntityArrays(this.schema, serializedContents);
101
+ return stringifyPrettyStable(sortedContents);
100
102
  }
101
103
  /**
102
104
  * Creates a new ProjectDefinitionContainer from a serialized configuration.
@@ -1 +1 @@
1
- {"version":3,"file":"project-definition-container.js","sourceRoot":"","sources":["../../src/definition/project-definition-container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-definition-container.js","sourceRoot":"","sources":["../../src/definition/project-definition-container.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@
6
6
  * - `hasRole('admin')`
7
7
  * - `hasSomeRole(['admin', 'moderator'])`
8
8
  * - `model.id === userId || hasRole('admin')`
9
+ * - `exists(model.members, { userId: userId })`
10
+ * - `all(model.tasks, { isCompleted: true })`
9
11
  *
10
12
  * Uses Acorn to parse as JavaScript, then converts the ESTree AST
11
13
  * to our domain-specific AST, rejecting unsupported constructs.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizer-expression-acorn-parser.d.ts","sourceRoot":"","sources":["../../../src/expression-parsers/authorizer/authorizer-expression-acorn-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,OAAO,KAAK,EACV,wBAAwB,EAazB,MAAM,gCAAgC,CAAC;AAMxC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,GACZ,wBAAwB,CA6C1B"}
@@ -6,12 +6,15 @@
6
6
  * - `hasRole('admin')`
7
7
  * - `hasSomeRole(['admin', 'moderator'])`
8
8
  * - `model.id === userId || hasRole('admin')`
9
+ * - `exists(model.members, { userId: userId })`
10
+ * - `all(model.tasks, { isCompleted: true })`
9
11
  *
10
12
  * Uses Acorn to parse as JavaScript, then converts the ESTree AST
11
13
  * to our domain-specific AST, rejecting unsupported constructs.
12
14
  */
13
15
  import { parse } from 'acorn';
14
16
  import { AuthorizerExpressionParseError } from './authorizer-expression-ast.js';
17
+ import { visitAuthorizerExpression } from './authorizer-expression-visitor.js';
15
18
  /**
16
19
  * Parse an authorizer expression string into our domain AST.
17
20
  *
@@ -78,7 +81,7 @@ function convertNode(node) {
78
81
  if (node.name === 'isAuthenticated') {
79
82
  return { type: 'isAuthenticated' };
80
83
  }
81
- throw new AuthorizerExpressionParseError(`Unknown identifier '${node.name}'. Use hasRole(), hasSomeRole(), isAuthenticated, or a comparison like model.id === userId.`, node);
84
+ throw new AuthorizerExpressionParseError(`Unknown identifier '${node.name}'. Use hasRole(), hasSomeRole(), exists(), all(), isAuthenticated, or a comparison like model.id === userId.`, node);
82
85
  }
83
86
  case 'MemberExpression': {
84
87
  // A bare member expression like `model.id` without comparison
@@ -156,15 +159,17 @@ function convertFieldRefOrLiteral(node) {
156
159
  return convertFieldRef(node);
157
160
  }
158
161
  /**
159
- * Convert a CallExpression to HasRoleNode or HasSomeRoleNode.
162
+ * Convert a CallExpression to a role check or relation filter node.
160
163
  * Supports:
161
164
  * - `hasRole('admin')`
162
165
  * - `hasSomeRole(['admin', 'moderator'])`
166
+ * - `exists(model.relation, { field: value })`
167
+ * - `all(model.relation, { field: value })`
163
168
  */
164
169
  function convertCallExpression(node) {
165
170
  // Only support direct calls (e.g., hasRole(...))
166
171
  if (node.callee.type !== 'Identifier') {
167
- throw new AuthorizerExpressionParseError('Function calls must be standalone (hasRole, hasSomeRole)', node.callee);
172
+ throw new AuthorizerExpressionParseError('Function calls must be standalone (hasRole, hasSomeRole, exists, all)', node.callee);
168
173
  }
169
174
  const funcName = node.callee.name;
170
175
  if (funcName === 'hasRole') {
@@ -173,7 +178,13 @@ function convertCallExpression(node) {
173
178
  if (funcName === 'hasSomeRole') {
174
179
  return parseHasSomeRoleArgs(node, 'hasSomeRole()');
175
180
  }
176
- throw new AuthorizerExpressionParseError(`Unknown function '${funcName}'. Use hasRole() or hasSomeRole().`, node.callee);
181
+ if (funcName === 'exists') {
182
+ return parseRelationFilterArgs(node, 'some', 'exists()');
183
+ }
184
+ if (funcName === 'all') {
185
+ return parseRelationFilterArgs(node, 'every', 'all()');
186
+ }
187
+ throw new AuthorizerExpressionParseError(`Unknown function '${funcName}'. Use hasRole(), hasSomeRole(), exists(), or all().`, node.callee);
177
188
  }
178
189
  /**
179
190
  * Parse a `model.X` MemberExpression argument for nested role checks.
@@ -294,6 +305,48 @@ function parseHasSomeRoleArgs(node, funcName) {
294
305
  }
295
306
  throw new AuthorizerExpressionParseError(`${funcName} requires 1 argument (hasSomeRole(['role1'])) or 2 arguments (hasSomeRole(model.relation, ['role1'])), got ${node.arguments.length}`, node);
296
307
  }
308
+ /**
309
+ * Parse exists(model.relation, { field: value }) or all(model.relation, { field: value }) arguments.
310
+ */
311
+ function parseRelationFilterArgs(node, operator, funcName) {
312
+ if (node.arguments.length !== 2) {
313
+ throw new AuthorizerExpressionParseError(`${funcName} requires exactly 2 arguments (e.g., ${funcName.replace('()', '')}(model.relation, { field: value })), got ${node.arguments.length}`, node);
314
+ }
315
+ const relationArg = node.arguments[0];
316
+ const conditionsArg = node.arguments[1];
317
+ const relation = parseModelRelationArg(relationArg, funcName);
318
+ if (conditionsArg.type !== 'ObjectExpression') {
319
+ throw new AuthorizerExpressionParseError(`${funcName} second argument must be an object literal (e.g., { userId: userId })`, conditionsArg);
320
+ }
321
+ if (conditionsArg.properties.length === 0) {
322
+ throw new AuthorizerExpressionParseError(`${funcName} conditions object must have at least one property`, conditionsArg);
323
+ }
324
+ const conditions = [];
325
+ for (const prop of conditionsArg.properties) {
326
+ if (prop.type === 'SpreadElement') {
327
+ throw new AuthorizerExpressionParseError(`${funcName} spread elements are not supported in conditions`, prop);
328
+ }
329
+ if (prop.computed) {
330
+ throw new AuthorizerExpressionParseError(`${funcName} computed property keys are not supported in conditions`, prop);
331
+ }
332
+ if (prop.key.type !== 'Identifier') {
333
+ throw new AuthorizerExpressionParseError(`${funcName} condition keys must be identifiers (e.g., { userId: userId })`, prop.key);
334
+ }
335
+ const field = prop.key.name;
336
+ const fieldStart = prop.key.start;
337
+ const fieldEnd = prop.key.end;
338
+ const value = convertFieldRefOrLiteral(prop.value);
339
+ conditions.push({ field, fieldStart, fieldEnd, value });
340
+ }
341
+ return {
342
+ type: 'relationFilter',
343
+ relationName: relation.relationName,
344
+ relationStart: relation.relationStart,
345
+ relationEnd: relation.relationEnd,
346
+ operator,
347
+ conditions,
348
+ };
349
+ }
297
350
  /**
298
351
  * Convert to FieldRefNode.
299
352
  * Supports:
@@ -353,54 +406,9 @@ function extractInfo(ast) {
353
406
  const authFieldRefs = [];
354
407
  const roleRefs = [];
355
408
  const nestedRoleRefs = [];
409
+ const relationFilterRefs = [];
356
410
  let requiresModel = false;
357
- function walk(node) {
358
- switch (node.type) {
359
- case 'fieldComparison': {
360
- if (node.left.type === 'fieldRef') {
361
- walkFieldRef(node.left);
362
- }
363
- if (node.right.type === 'fieldRef') {
364
- walkFieldRef(node.right);
365
- }
366
- break;
367
- }
368
- case 'hasRole': {
369
- roleRefs.push(node.role);
370
- break;
371
- }
372
- case 'hasSomeRole': {
373
- roleRefs.push(...node.roles);
374
- break;
375
- }
376
- case 'nestedHasRole': {
377
- nestedRoleRefs.push({
378
- relationName: node.relationName,
379
- roles: [node.role],
380
- });
381
- requiresModel = true;
382
- break;
383
- }
384
- case 'nestedHasSomeRole': {
385
- nestedRoleRefs.push({
386
- relationName: node.relationName,
387
- roles: node.roles,
388
- });
389
- requiresModel = true;
390
- break;
391
- }
392
- case 'isAuthenticated': {
393
- // No dependencies to track
394
- break;
395
- }
396
- case 'binaryLogical': {
397
- walk(node.left);
398
- walk(node.right);
399
- break;
400
- }
401
- }
402
- }
403
- function walkFieldRef(node) {
411
+ function collectFieldRef(node) {
404
412
  if (node.source === 'model') {
405
413
  modelFieldRefs.push(node.field);
406
414
  requiresModel = true;
@@ -409,12 +417,59 @@ function extractInfo(ast) {
409
417
  authFieldRefs.push(node.field);
410
418
  }
411
419
  }
412
- walk(ast);
420
+ const infoVisitor = {
421
+ fieldComparison(node) {
422
+ if (node.left.type === 'fieldRef') {
423
+ collectFieldRef(node.left);
424
+ }
425
+ if (node.right.type === 'fieldRef') {
426
+ collectFieldRef(node.right);
427
+ }
428
+ },
429
+ hasRole(node) {
430
+ roleRefs.push(node.role);
431
+ },
432
+ hasSomeRole(node) {
433
+ roleRefs.push(...node.roles);
434
+ },
435
+ nestedHasRole(node) {
436
+ nestedRoleRefs.push({
437
+ relationName: node.relationName,
438
+ roles: [node.role],
439
+ });
440
+ requiresModel = true;
441
+ },
442
+ nestedHasSomeRole(node) {
443
+ nestedRoleRefs.push({
444
+ relationName: node.relationName,
445
+ roles: node.roles,
446
+ });
447
+ requiresModel = true;
448
+ },
449
+ relationFilter(node) {
450
+ for (const condition of node.conditions) {
451
+ if (condition.value.type === 'fieldRef') {
452
+ collectFieldRef(condition.value);
453
+ }
454
+ }
455
+ relationFilterRefs.push({ relationName: node.relationName });
456
+ requiresModel = true;
457
+ },
458
+ isAuthenticated() {
459
+ // No dependencies to track
460
+ },
461
+ binaryLogical(_node, _ctx, visit) {
462
+ visit(_node.left);
463
+ visit(_node.right);
464
+ },
465
+ };
466
+ visitAuthorizerExpression(ast, infoVisitor);
413
467
  return {
414
468
  modelFieldRefs: [...new Set(modelFieldRefs)],
415
469
  authFieldRefs: [...new Set(authFieldRefs)],
416
470
  roleRefs: [...new Set(roleRefs)],
417
471
  nestedRoleRefs,
472
+ relationFilterRefs,
418
473
  requiresModel,
419
474
  };
420
475
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizer-expression-acorn-parser.js","sourceRoot":"","sources":["../../../src/expression-parsers/authorizer/authorizer-expression-acorn-parser.ts"],"names":[],"mappings":"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"}
@@ -6,13 +6,15 @@
6
6
  * - `hasRole('admin')`
7
7
  * - `hasSomeRole(['admin', 'moderator'])`
8
8
  * - `model.id === userId || hasRole('admin')`
9
+ * - `exists(model.members, { userId: userId })`
10
+ * - `all(model.tasks, { isCompleted: true })`
9
11
  *
10
12
  * The AST is produced by parsing with Acorn and converting from ESTree.
11
13
  */
12
14
  /**
13
15
  * Root expression node - the result of parsing an authorizer expression.
14
16
  */
15
- export type AuthorizerExpressionNode = FieldComparisonNode | HasRoleNode | HasSomeRoleNode | NestedHasRoleNode | NestedHasSomeRoleNode | IsAuthenticatedNode | BinaryLogicalNode;
17
+ export type AuthorizerExpressionNode = FieldComparisonNode | HasRoleNode | HasSomeRoleNode | NestedHasRoleNode | NestedHasSomeRoleNode | IsAuthenticatedNode | BinaryLogicalNode | RelationFilterNode;
16
18
  /**
17
19
  * A literal value in a comparison expression.
18
20
  *
@@ -174,6 +176,68 @@ export interface NestedHasSomeRoleNode {
174
176
  /** End positions of each role string literal in the source (for rename tracking) */
175
177
  rolesEnd: number[];
176
178
  }
179
+ /**
180
+ * A condition within a relation filter expression.
181
+ *
182
+ * Pairs a field name on the related model with a value to compare against.
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * // userId: userId in exists(model.members, { userId: userId })
187
+ * { field: 'userId', value: { type: 'fieldRef', source: 'auth', field: 'userId', ... } }
188
+ *
189
+ * // type: "admin" in exists(model.members, { type: "admin" })
190
+ * { field: 'type', value: { type: 'literalValue', value: 'admin', ... } }
191
+ * ```
192
+ */
193
+ export interface RelationFilterCondition {
194
+ /** The field name on the related model */
195
+ field: string;
196
+ /** Start position of the field key in the source */
197
+ fieldStart: number;
198
+ /** End position of the field key in the source */
199
+ fieldEnd: number;
200
+ /** The value to compare — auth field ref or literal value */
201
+ value: FieldRefNode | LiteralValueNode;
202
+ }
203
+ /**
204
+ * A relation filter expression: `exists(model.relation, { ...conditions })` or
205
+ * `all(model.relation, { ...conditions })`
206
+ *
207
+ * Checks if some or all records in a 1:many relation match the given conditions.
208
+ *
209
+ * @example
210
+ * ```typescript
211
+ * // exists(model.members, { userId: userId })
212
+ * {
213
+ * type: 'relationFilter',
214
+ * relationName: 'members',
215
+ * operator: 'some',
216
+ * conditions: [{ field: 'userId', value: { type: 'fieldRef', source: 'auth', field: 'userId', ... } }],
217
+ * }
218
+ *
219
+ * // all(model.tasks, { isCompleted: true })
220
+ * {
221
+ * type: 'relationFilter',
222
+ * relationName: 'tasks',
223
+ * operator: 'every',
224
+ * conditions: [{ field: 'isCompleted', value: { type: 'literalValue', value: true, ... } }],
225
+ * }
226
+ * ```
227
+ */
228
+ export interface RelationFilterNode {
229
+ type: 'relationFilter';
230
+ /** The relation name on the current model (e.g., 'members') */
231
+ relationName: string;
232
+ /** Start position of model.relation in the source */
233
+ relationStart: number;
234
+ /** End position of model.relation in the source */
235
+ relationEnd: number;
236
+ /** 'some' for exists(), 'every' for all() */
237
+ operator: 'some' | 'every';
238
+ /** At least one condition required */
239
+ conditions: RelationFilterCondition[];
240
+ }
177
241
  /**
178
242
  * A boolean indicating whether the user is authenticated.
179
243
  *
@@ -250,6 +314,10 @@ export interface AuthorizerExpressionInfo {
250
314
  relationName: string;
251
315
  roles: string[];
252
316
  }[];
317
+ /** Relation filter references (e.g., exists(model.members, { userId: userId })) */
318
+ relationFilterRefs: {
319
+ relationName: string;
320
+ }[];
253
321
  /** Whether the expression requires the model instance */
254
322
  requiresModel: boolean;
255
323
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizer-expression-ast.d.ts","sourceRoot":"","sources":["../../../src/expression-parsers/authorizer/authorizer-expression-ast.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@
6
6
  * - `hasRole('admin')`
7
7
  * - `hasSomeRole(['admin', 'moderator'])`
8
8
  * - `model.id === userId || hasRole('admin')`
9
+ * - `exists(model.members, { userId: userId })`
10
+ * - `all(model.tasks, { isCompleted: true })`
9
11
  *
10
12
  * The AST is produced by parsing with Acorn and converting from ESTree.
11
13
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizer-expression-ast.js","sourceRoot":"","sources":["../../../src/expression-parsers/authorizer/authorizer-expression-ast.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiVH;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAC9C,aAAa,CAAU;IACvB,WAAW,CAAU;IAI9B,YACE,OAAe,EACf,eAAuC,EACvC,WAAoB;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;QAE7C,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC;YAC3C,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC;YACrC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACjC,CAAC;IACH,CAAC;CACF"}
@@ -1,7 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import type { ExpressionValidationContext, RefExpressionDependency, RefExpressionParseResult, RefExpressionWarning, ResolvedExpressionSlots } from '#src/references/expression-types.js';
3
+ import type { modelEntityType } from '#src/schema/models/types.js';
4
+ import type { ProjectDefinition } from '#src/schema/project-definition.js';
3
5
  import { RefExpressionParser } from '#src/references/expression-types.js';
4
- import type { modelEntityType } from '../types.js';
5
6
  import type { AuthorizerExpressionInfo } from './authorizer-expression-ast.js';
6
7
  /**
7
8
  * Expression parser for model authorizer role expressions.
@@ -50,27 +51,25 @@ export declare class AuthorizerExpressionParser extends RefExpressionParser<stri
50
51
  model: typeof modelEntityType;
51
52
  }>): RefExpressionWarning[];
52
53
  /**
53
- * Get entity/field dependencies from the expression.
54
+ * Get entity references from the expression with their positions.
54
55
  *
55
- * Currently returns empty array as we don't yet track
56
- * entity-level dependencies (just field names).
57
- * Future: could track model field entity references for renames.
56
+ * Walks the AST and resolves each name reference (field, relation, role)
57
+ * to its entity ID by navigating the model definition from the resolved slots.
58
+ * Returns positions marking exactly which text to replace when an entity is renamed.
58
59
  */
59
- getDependencies(): RefExpressionDependency[];
60
+ getReferencedEntities(_value: string, parseResult: RefExpressionParseResult<AuthorizerExpressionInfo>, definition: ProjectDefinition, resolvedSlots: ResolvedExpressionSlots<{
61
+ model: typeof modelEntityType;
62
+ }>): RefExpressionDependency[];
60
63
  /**
61
- * Update the expression when dependencies are renamed.
64
+ * Navigate to the raw model object from the definition using resolved slots.
62
65
  *
63
- * Currently returns value unchanged as we don't yet
64
- * support field renames in expressions.
66
+ * Resolved slot paths point to the entity's ID field (e.g., `['models', 2, 'id']`),
67
+ * so we walk parent paths until we find an object with a string `name` property.
65
68
  */
66
- updateForRename(value: string): string;
69
+ private getRawModel;
67
70
  /**
68
71
  * Extract model context from the project definition using resolved slots.
69
72
  */
70
73
  private getModelContext;
71
74
  }
72
- /**
73
- * Singleton instance of AuthorizerExpressionParser.
74
- */
75
- export declare const authorizerExpressionParser: AuthorizerExpressionParser;
76
75
  //# sourceMappingURL=authorizer-expression-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizer-expression-parser.d.ts","sourceRoot":"","sources":["../../../src/expression-parsers/authorizer/authorizer-expression-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EACV,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAQ1E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAY/E;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,0BAA2B,SAAQ,mBAAmB,CACjE,MAAM,EACN,wBAAwB,EACxB;IAAE,KAAK,EAAE,OAAO,eAAe,CAAA;CAAE,CAClC;IACC,QAAQ,CAAC,IAAI,2BAA2B;IAExC;;;OAGG;IACH,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAIjC;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,wBAAwB,CAAC,wBAAwB,CAAC;IAWxE;;;;;;;;OAQG;IACH,WAAW,CACT,WAAW,EAAE,wBAAwB,EACrC,OAAO,EAAE,2BAA2B,EACpC,aAAa,EAAE,uBAAuB,CAAC;QAAE,KAAK,EAAE,OAAO,eAAe,CAAA;KAAE,CAAC,GACxE,oBAAoB,EAAE;IAgBzB;;;;;;OAMG;IACH,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,wBAAwB,CAAC,wBAAwB,CAAC,EAC/D,UAAU,EAAE,iBAAiB,EAC7B,aAAa,EAAE,uBAAuB,CAAC;QAAE,KAAK,EAAE,OAAO,eAAe,CAAA;KAAE,CAAC,GACxE,uBAAuB,EAAE;IA6L5B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAgCnB;;OAEG;IACH,OAAO,CAAC,eAAe;CA0BxB"}