@baseplate-dev/project-builder-lib 0.6.4 → 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 (287) hide show
  1. package/CHANGELOG.md +43 -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 +2 -2
  25. package/dist/definition/feature/feature-utils.d.ts.map +1 -1
  26. package/dist/definition/feature/feature-utils.js +3 -3
  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 +12 -24
  199. package/dist/schema/models/models.d.ts.map +1 -1
  200. package/dist/schema/models/models.js +6 -4
  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 +10 -18
  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/specs/admin-crud-action-web-spec.js +1 -1
  268. package/dist/web/specs/admin-crud-action-web-spec.js.map +1 -1
  269. package/dist/web/specs/admin-crud-column-web-spec.js +1 -1
  270. package/dist/web/specs/admin-crud-column-web-spec.js.map +1 -1
  271. package/dist/web/specs/admin-crud-input-web-spec.js +1 -1
  272. package/dist/web/specs/admin-crud-input-web-spec.js.map +1 -1
  273. package/dist/web/specs/model-transformer-web-spec.d.ts +19 -2
  274. package/dist/web/specs/model-transformer-web-spec.d.ts.map +1 -1
  275. package/dist/web/specs/model-transformer-web-spec.js +1 -1
  276. package/dist/web/specs/model-transformer-web-spec.js.map +1 -1
  277. package/package.json +8 -8
  278. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.d.ts.map +0 -1
  279. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.js.map +0 -1
  280. package/dist/schema/models/authorizer/authorizer-expression-ast.d.ts.map +0 -1
  281. package/dist/schema/models/authorizer/authorizer-expression-ast.js.map +0 -1
  282. package/dist/schema/models/authorizer/authorizer-expression-parser.d.ts.map +0 -1
  283. package/dist/schema/models/authorizer/authorizer-expression-parser.js +0 -145
  284. package/dist/schema/models/authorizer/authorizer-expression-parser.js.map +0 -1
  285. package/dist/schema/models/authorizer/authorizer-expression-validator.d.ts.map +0 -1
  286. package/dist/schema/models/authorizer/authorizer-expression-validator.js +0 -284
  287. package/dist/schema/models/authorizer/authorizer-expression-validator.js.map +0 -1
@@ -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"}