@baseplate-dev/project-builder-lib 0.5.0 → 0.5.2

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 (356) hide show
  1. package/CHANGELOG.md +464 -0
  2. package/dist/compiler/admin-crud-action-compiler.d.ts +18 -0
  3. package/dist/compiler/admin-crud-action-compiler.d.ts.map +1 -0
  4. package/dist/compiler/admin-crud-action-compiler.js +6 -0
  5. package/dist/compiler/admin-crud-action-compiler.js.map +1 -0
  6. package/dist/compiler/admin-crud-column-compiler-spec.d.ts +6 -12
  7. package/dist/compiler/admin-crud-column-compiler-spec.d.ts.map +1 -1
  8. package/dist/compiler/admin-crud-column-compiler-spec.js +6 -29
  9. package/dist/compiler/admin-crud-column-compiler-spec.js.map +1 -1
  10. package/dist/compiler/admin-crud-input-spec.d.ts +6 -11
  11. package/dist/compiler/admin-crud-input-spec.d.ts.map +1 -1
  12. package/dist/compiler/admin-crud-input-spec.js +6 -26
  13. package/dist/compiler/admin-crud-input-spec.js.map +1 -1
  14. package/dist/compiler/app-compiler-spec.d.ts +8 -12
  15. package/dist/compiler/app-compiler-spec.d.ts.map +1 -1
  16. package/dist/compiler/app-compiler-spec.js +11 -18
  17. package/dist/compiler/app-compiler-spec.js.map +1 -1
  18. package/dist/compiler/index.d.ts +1 -1
  19. package/dist/compiler/index.d.ts.map +1 -1
  20. package/dist/compiler/index.js +1 -1
  21. package/dist/compiler/index.js.map +1 -1
  22. package/dist/compiler/model-transformer-compiler-spec.d.ts +6 -11
  23. package/dist/compiler/model-transformer-compiler-spec.d.ts.map +1 -1
  24. package/dist/compiler/model-transformer-compiler-spec.js +6 -26
  25. package/dist/compiler/model-transformer-compiler-spec.js.map +1 -1
  26. package/dist/definition/model/model-field-utils.js +4 -4
  27. package/dist/definition/model/model-field-utils.js.map +1 -1
  28. package/dist/definition/model/model-transformer-utils.d.ts +4 -6
  29. package/dist/definition/model/model-transformer-utils.d.ts.map +1 -1
  30. package/dist/definition/model/model-transformer-utils.js +8 -10
  31. package/dist/definition/model/model-transformer-utils.js.map +1 -1
  32. package/dist/definition/model/model-utils.js +3 -3
  33. package/dist/definition/model/model-utils.js.map +1 -1
  34. package/dist/definition/packages/package-utils.d.ts +11 -9
  35. package/dist/definition/packages/package-utils.d.ts.map +1 -1
  36. package/dist/definition/packages/package-utils.js +22 -11
  37. package/dist/definition/packages/package-utils.js.map +1 -1
  38. package/dist/definition/plugins/plugin-utils.d.ts.map +1 -1
  39. package/dist/definition/plugins/plugin-utils.js +2 -2
  40. package/dist/definition/plugins/plugin-utils.js.map +1 -1
  41. package/dist/definition/project-definition-container.d.ts +3 -3
  42. package/dist/definition/project-definition-container.d.ts.map +1 -1
  43. package/dist/definition/project-definition-container.js +2 -2
  44. package/dist/definition/project-definition-container.js.map +1 -1
  45. package/dist/definition/project-definition-container.test-utils.d.ts.map +1 -1
  46. package/dist/definition/project-definition-container.test-utils.js +8 -5
  47. package/dist/definition/project-definition-container.test-utils.js.map +1 -1
  48. package/dist/index.d.ts +1 -0
  49. package/dist/index.js +1 -0
  50. package/dist/migrations/index.d.ts.map +1 -1
  51. package/dist/migrations/index.js +5 -1
  52. package/dist/migrations/index.js.map +1 -1
  53. package/dist/migrations/migration-007-model-graphql.js +1 -1
  54. package/dist/migrations/migration-007-model-graphql.js.map +1 -1
  55. package/dist/migrations/migration-020-move-redis-to-infrastructure.js +1 -1
  56. package/dist/migrations/migration-020-move-redis-to-infrastructure.js.map +1 -1
  57. package/dist/migrations/migration-021-migrate-bullmq-to-plugin.js +1 -1
  58. package/dist/migrations/migration-021-migrate-bullmq-to-plugin.js.map +1 -1
  59. package/dist/migrations/migration-022-rename-packages-to-libraries.d.ts +37 -0
  60. package/dist/migrations/migration-022-rename-packages-to-libraries.d.ts.map +1 -0
  61. package/dist/migrations/migration-022-rename-packages-to-libraries.js +45 -0
  62. package/dist/migrations/migration-022-rename-packages-to-libraries.js.map +1 -0
  63. package/dist/migrations/migration-023-assign-app-ports.d.ts +34 -0
  64. package/dist/migrations/migration-023-assign-app-ports.d.ts.map +1 -0
  65. package/dist/migrations/migration-023-assign-app-ports.js +49 -0
  66. package/dist/migrations/migration-023-assign-app-ports.js.map +1 -0
  67. package/dist/parser/parser.d.ts +4 -4
  68. package/dist/parser/parser.d.ts.map +1 -1
  69. package/dist/parser/parser.js +17 -42
  70. package/dist/parser/parser.js.map +1 -1
  71. package/dist/plugins/context/index.d.ts +2 -0
  72. package/dist/plugins/context/index.d.ts.map +1 -0
  73. package/dist/plugins/context/index.js +2 -0
  74. package/dist/plugins/context/index.js.map +1 -0
  75. package/dist/plugins/context/plugin-context.d.ts +30 -0
  76. package/dist/plugins/context/plugin-context.d.ts.map +1 -0
  77. package/dist/plugins/context/plugin-context.js +38 -0
  78. package/dist/plugins/context/plugin-context.js.map +1 -0
  79. package/dist/plugins/imports/loader.d.ts +11 -20
  80. package/dist/plugins/imports/loader.d.ts.map +1 -1
  81. package/dist/plugins/imports/loader.js +28 -69
  82. package/dist/plugins/imports/loader.js.map +1 -1
  83. package/dist/plugins/imports/types.d.ts +72 -13
  84. package/dist/plugins/imports/types.d.ts.map +1 -1
  85. package/dist/plugins/imports/types.js +17 -1
  86. package/dist/plugins/imports/types.js.map +1 -1
  87. package/dist/plugins/index.d.ts +3 -1
  88. package/dist/plugins/index.d.ts.map +1 -1
  89. package/dist/plugins/index.js +3 -1
  90. package/dist/plugins/index.js.map +1 -1
  91. package/dist/plugins/migrations/run-migrations.d.ts +2 -2
  92. package/dist/plugins/migrations/run-migrations.d.ts.map +1 -1
  93. package/dist/plugins/migrations/run-migrations.js +2 -2
  94. package/dist/plugins/migrations/run-migrations.js.map +1 -1
  95. package/dist/plugins/spec/auth-config-spec.d.ts +13 -9
  96. package/dist/plugins/spec/auth-config-spec.d.ts.map +1 -1
  97. package/dist/plugins/spec/auth-config-spec.js +16 -3
  98. package/dist/plugins/spec/auth-config-spec.js.map +1 -1
  99. package/dist/plugins/spec/auth-models-spec.d.ts +16 -0
  100. package/dist/plugins/spec/auth-models-spec.d.ts.map +1 -0
  101. package/dist/plugins/spec/auth-models-spec.js +16 -0
  102. package/dist/plugins/spec/auth-models-spec.js.map +1 -0
  103. package/dist/plugins/spec/config-spec.d.ts +8 -13
  104. package/dist/plugins/spec/config-spec.d.ts.map +1 -1
  105. package/dist/plugins/spec/config-spec.js +21 -36
  106. package/dist/plugins/spec/config-spec.js.map +1 -1
  107. package/dist/plugins/spec/index.d.ts +1 -1
  108. package/dist/plugins/spec/index.d.ts.map +1 -1
  109. package/dist/plugins/spec/index.js +1 -1
  110. package/dist/plugins/spec/index.js.map +1 -1
  111. package/dist/plugins/spec/types.d.ts +66 -25
  112. package/dist/plugins/spec/types.d.ts.map +1 -1
  113. package/dist/plugins/spec/types.js +27 -10
  114. package/dist/plugins/spec/types.js.map +1 -1
  115. package/dist/plugins/spec/web-config-spec.d.ts +7 -10
  116. package/dist/plugins/spec/web-config-spec.d.ts.map +1 -1
  117. package/dist/plugins/spec/web-config-spec.js +6 -19
  118. package/dist/plugins/spec/web-config-spec.js.map +1 -1
  119. package/dist/plugins/store/index.d.ts.map +1 -0
  120. package/dist/plugins/store/index.js.map +1 -0
  121. package/dist/plugins/store/store.d.ts +23 -0
  122. package/dist/plugins/store/store.d.ts.map +1 -0
  123. package/dist/plugins/store/store.js +36 -0
  124. package/dist/plugins/store/store.js.map +1 -0
  125. package/dist/plugins/utils/create-field-map-spec.d.ts +17 -0
  126. package/dist/plugins/utils/create-field-map-spec.d.ts.map +1 -0
  127. package/dist/plugins/utils/create-field-map-spec.js +27 -0
  128. package/dist/plugins/utils/create-field-map-spec.js.map +1 -0
  129. package/dist/plugins/utils/create-plugin-field-map.d.ts +24 -0
  130. package/dist/plugins/utils/create-plugin-field-map.d.ts.map +1 -0
  131. package/dist/plugins/utils/create-plugin-field-map.js +29 -0
  132. package/dist/plugins/utils/create-plugin-field-map.js.map +1 -0
  133. package/dist/plugins/utils/index.d.ts +3 -0
  134. package/dist/plugins/utils/index.d.ts.map +1 -0
  135. package/dist/plugins/utils/index.js +3 -0
  136. package/dist/plugins/utils/index.js.map +1 -0
  137. package/dist/references/collect-refs.d.ts +5 -1
  138. package/dist/references/collect-refs.d.ts.map +1 -1
  139. package/dist/references/collect-refs.js +20 -1
  140. package/dist/references/collect-refs.js.map +1 -1
  141. package/dist/references/definition-ref-builder.d.ts.map +1 -1
  142. package/dist/references/expression-types.d.ts +152 -0
  143. package/dist/references/expression-types.d.ts.map +1 -0
  144. package/dist/references/expression-types.js +46 -0
  145. package/dist/references/expression-types.js.map +1 -0
  146. package/dist/references/extend-parser-context-with-refs.d.ts +13 -0
  147. package/dist/references/extend-parser-context-with-refs.d.ts.map +1 -1
  148. package/dist/references/extend-parser-context-with-refs.js +39 -1
  149. package/dist/references/extend-parser-context-with-refs.js.map +1 -1
  150. package/dist/references/extract-definition-refs.d.ts +6 -3
  151. package/dist/references/extract-definition-refs.d.ts.map +1 -1
  152. package/dist/references/extract-definition-refs.js +25 -4
  153. package/dist/references/extract-definition-refs.js.map +1 -1
  154. package/dist/references/index.d.ts +1 -0
  155. package/dist/references/index.d.ts.map +1 -1
  156. package/dist/references/index.js +1 -0
  157. package/dist/references/index.js.map +1 -1
  158. package/dist/references/markers.d.ts +23 -0
  159. package/dist/references/markers.d.ts.map +1 -1
  160. package/dist/references/markers.js +16 -0
  161. package/dist/references/markers.js.map +1 -1
  162. package/dist/references/resolve-zod-ref-payload-names.d.ts.map +1 -1
  163. package/dist/references/resolve-zod-ref-payload-names.js +1 -0
  164. package/dist/references/resolve-zod-ref-payload-names.js.map +1 -1
  165. package/dist/references/strip-ref-markers.d.ts +3 -3
  166. package/dist/references/strip-ref-markers.d.ts.map +1 -1
  167. package/dist/references/strip-ref-markers.js +7 -4
  168. package/dist/references/strip-ref-markers.js.map +1 -1
  169. package/dist/references/types.d.ts +5 -0
  170. package/dist/references/types.d.ts.map +1 -1
  171. package/dist/references/types.js.map +1 -1
  172. package/dist/schema/apps/backend/index.d.ts +2 -2
  173. package/dist/schema/apps/backend/index.js +1 -1
  174. package/dist/schema/apps/backend/index.js.map +1 -1
  175. package/dist/schema/apps/base.d.ts +2 -0
  176. package/dist/schema/apps/base.d.ts.map +1 -1
  177. package/dist/schema/apps/base.js +1 -0
  178. package/dist/schema/apps/base.js.map +1 -1
  179. package/dist/schema/apps/web/admin/sections/crud-actions/admin-action-spec.d.ts +6 -13
  180. package/dist/schema/apps/web/admin/sections/crud-actions/admin-action-spec.d.ts.map +1 -1
  181. package/dist/schema/apps/web/admin/sections/crud-actions/admin-action-spec.js +5 -26
  182. package/dist/schema/apps/web/admin/sections/crud-actions/admin-action-spec.js.map +1 -1
  183. package/dist/schema/apps/web/admin/sections/crud-actions/admin-crud-action.d.ts.map +1 -1
  184. package/dist/schema/apps/web/admin/sections/crud-actions/admin-crud-action.js +1 -3
  185. package/dist/schema/apps/web/admin/sections/crud-actions/admin-crud-action.js.map +1 -1
  186. package/dist/schema/apps/web/admin/sections/crud-actions/types.d.ts.map +1 -1
  187. package/dist/schema/apps/web/admin/sections/crud-columns/admin-column-spec.d.ts +6 -12
  188. package/dist/schema/apps/web/admin/sections/crud-columns/admin-column-spec.d.ts.map +1 -1
  189. package/dist/schema/apps/web/admin/sections/crud-columns/admin-column-spec.js +5 -26
  190. package/dist/schema/apps/web/admin/sections/crud-columns/admin-column-spec.js.map +1 -1
  191. package/dist/schema/apps/web/admin/sections/crud-columns/admin-crud-column.d.ts.map +1 -1
  192. package/dist/schema/apps/web/admin/sections/crud-columns/admin-crud-column.js +1 -3
  193. package/dist/schema/apps/web/admin/sections/crud-columns/admin-crud-column.js.map +1 -1
  194. package/dist/schema/apps/web/admin/sections/crud-form/admin-crud-input.d.ts.map +1 -1
  195. package/dist/schema/apps/web/admin/sections/crud-form/admin-crud-input.js +1 -3
  196. package/dist/schema/apps/web/admin/sections/crud-form/admin-crud-input.js.map +1 -1
  197. package/dist/schema/apps/web/admin/sections/crud-form/admin-input-spec.d.ts +7 -13
  198. package/dist/schema/apps/web/admin/sections/crud-form/admin-input-spec.d.ts.map +1 -1
  199. package/dist/schema/apps/web/admin/sections/crud-form/admin-input-spec.js +5 -26
  200. package/dist/schema/apps/web/admin/sections/crud-form/admin-input-spec.js.map +1 -1
  201. package/dist/schema/apps/web/web-app.d.ts +2 -0
  202. package/dist/schema/apps/web/web-app.d.ts.map +1 -1
  203. package/dist/schema/apps/web/web-app.js +1 -0
  204. package/dist/schema/apps/web/web-app.js.map +1 -1
  205. package/dist/schema/creator/types.d.ts +9 -4
  206. package/dist/schema/creator/types.d.ts.map +1 -1
  207. package/dist/schema/index.d.ts +1 -1
  208. package/dist/schema/index.d.ts.map +1 -1
  209. package/dist/schema/index.js +1 -1
  210. package/dist/schema/index.js.map +1 -1
  211. package/dist/schema/{packages → libraries}/base.d.ts +3 -3
  212. package/dist/schema/libraries/base.d.ts.map +1 -0
  213. package/dist/schema/libraries/base.js +10 -0
  214. package/dist/schema/libraries/base.js.map +1 -0
  215. package/dist/schema/libraries/index.d.ts +3 -0
  216. package/dist/schema/libraries/index.d.ts.map +1 -0
  217. package/dist/schema/libraries/index.js +3 -0
  218. package/dist/schema/libraries/index.js.map +1 -0
  219. package/dist/schema/libraries/library.d.ts +19 -0
  220. package/dist/schema/libraries/library.d.ts.map +1 -0
  221. package/dist/schema/libraries/library.js +13 -0
  222. package/dist/schema/libraries/library.js.map +1 -0
  223. package/dist/schema/libraries/types.d.ts +2 -0
  224. package/dist/schema/libraries/types.d.ts.map +1 -0
  225. package/dist/schema/libraries/types.js +3 -0
  226. package/dist/schema/libraries/types.js.map +1 -0
  227. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.d.ts +30 -0
  228. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.d.ts.map +1 -0
  229. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.js +291 -0
  230. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.js.map +1 -0
  231. package/dist/schema/models/authorizer/authorizer-expression-ast.d.ts +159 -0
  232. package/dist/schema/models/authorizer/authorizer-expression-ast.d.ts.map +1 -0
  233. package/dist/schema/models/authorizer/authorizer-expression-ast.js +31 -0
  234. package/dist/schema/models/authorizer/authorizer-expression-ast.js.map +1 -0
  235. package/dist/schema/models/authorizer/authorizer-expression-parser.d.ts +77 -0
  236. package/dist/schema/models/authorizer/authorizer-expression-parser.d.ts.map +1 -0
  237. package/dist/schema/models/authorizer/authorizer-expression-parser.js +147 -0
  238. package/dist/schema/models/authorizer/authorizer-expression-parser.js.map +1 -0
  239. package/dist/schema/models/authorizer/authorizer-expression-validator.d.ts +51 -0
  240. package/dist/schema/models/authorizer/authorizer-expression-validator.d.ts.map +1 -0
  241. package/dist/schema/models/authorizer/authorizer-expression-validator.js +125 -0
  242. package/dist/schema/models/authorizer/authorizer-expression-validator.js.map +1 -0
  243. package/dist/schema/models/authorizer/authorizer.d.ts +59 -0
  244. package/dist/schema/models/authorizer/authorizer.d.ts.map +1 -0
  245. package/dist/schema/models/authorizer/authorizer.js +56 -0
  246. package/dist/schema/models/authorizer/authorizer.js.map +1 -0
  247. package/dist/schema/models/authorizer/index.d.ts +7 -0
  248. package/dist/schema/models/authorizer/index.d.ts.map +1 -0
  249. package/dist/schema/models/authorizer/index.js +7 -0
  250. package/dist/schema/models/authorizer/index.js.map +1 -0
  251. package/dist/schema/models/authorizer/types.d.ts +6 -0
  252. package/dist/schema/models/authorizer/types.d.ts.map +1 -0
  253. package/dist/schema/models/authorizer/types.js +8 -0
  254. package/dist/schema/models/authorizer/types.js.map +1 -0
  255. package/dist/schema/models/index.d.ts +2 -860
  256. package/dist/schema/models/index.d.ts.map +1 -1
  257. package/dist/schema/models/index.js +2 -222
  258. package/dist/schema/models/index.js.map +1 -1
  259. package/dist/schema/models/models.d.ts +914 -0
  260. package/dist/schema/models/models.d.ts.map +1 -0
  261. package/dist/schema/models/models.js +225 -0
  262. package/dist/schema/models/models.js.map +1 -0
  263. package/dist/schema/models/transformers/model-transformer-spec.d.ts +5 -11
  264. package/dist/schema/models/transformers/model-transformer-spec.d.ts.map +1 -1
  265. package/dist/schema/models/transformers/model-transformer-spec.js +5 -30
  266. package/dist/schema/models/transformers/model-transformer-spec.js.map +1 -1
  267. package/dist/schema/models/transformers/transformers.d.ts.map +1 -1
  268. package/dist/schema/models/transformers/transformers.js +2 -4
  269. package/dist/schema/models/transformers/transformers.js.map +1 -1
  270. package/dist/schema/plugins/definition.js +1 -1
  271. package/dist/schema/plugins/definition.js.map +1 -1
  272. package/dist/schema/project-definition.d.ts +52 -34
  273. package/dist/schema/project-definition.d.ts.map +1 -1
  274. package/dist/schema/project-definition.js +2 -10
  275. package/dist/schema/project-definition.js.map +1 -1
  276. package/dist/schema/settings/monorepo.d.ts +2 -2
  277. package/dist/schema/settings/monorepo.js +8 -8
  278. package/dist/schema/settings/monorepo.js.map +1 -1
  279. package/dist/schema/settings/settings.d.ts +3 -3
  280. package/dist/schema/settings/theme.d.ts +3 -3
  281. package/dist/specs/index.d.ts +2 -0
  282. package/dist/specs/index.d.ts.map +1 -0
  283. package/dist/specs/index.js +2 -0
  284. package/dist/specs/index.js.map +1 -0
  285. package/dist/specs/packages/index.d.ts +3 -0
  286. package/dist/specs/packages/index.d.ts.map +1 -0
  287. package/dist/specs/packages/index.js +3 -0
  288. package/dist/specs/packages/index.js.map +1 -0
  289. package/dist/specs/packages/library-type-spec.d.ts +76 -0
  290. package/dist/specs/packages/library-type-spec.d.ts.map +1 -0
  291. package/dist/specs/packages/library-type-spec.js +31 -0
  292. package/dist/specs/packages/library-type-spec.js.map +1 -0
  293. package/dist/specs/packages/package-compiler-types.d.ts +111 -0
  294. package/dist/specs/packages/package-compiler-types.d.ts.map +1 -0
  295. package/dist/specs/packages/package-compiler-types.js +85 -0
  296. package/dist/specs/packages/package-compiler-types.js.map +1 -0
  297. package/dist/tools/model-merger/model-merger.js +1 -1
  298. package/dist/tools/model-merger/model-merger.js.map +1 -1
  299. package/dist/utils/color-conversions.js +1 -1
  300. package/dist/utils/color-conversions.js.map +1 -1
  301. package/dist/web/components/feature-combobox-field.d.ts.map +1 -1
  302. package/dist/web/components/feature-combobox-field.js +1 -1
  303. package/dist/web/components/feature-combobox-field.js.map +1 -1
  304. package/dist/web/components/model-combobox-field.d.ts.map +1 -1
  305. package/dist/web/components/model-combobox-field.js +1 -1
  306. package/dist/web/components/model-combobox-field.js.map +1 -1
  307. package/dist/web/hooks/use-project-definition.d.ts +2 -2
  308. package/dist/web/hooks/use-project-definition.d.ts.map +1 -1
  309. package/dist/web/specs/admin-crud-action-web-spec.d.ts +6 -12
  310. package/dist/web/specs/admin-crud-action-web-spec.d.ts.map +1 -1
  311. package/dist/web/specs/admin-crud-action-web-spec.js +6 -29
  312. package/dist/web/specs/admin-crud-action-web-spec.js.map +1 -1
  313. package/dist/web/specs/admin-crud-column-web-spec.d.ts +6 -12
  314. package/dist/web/specs/admin-crud-column-web-spec.d.ts.map +1 -1
  315. package/dist/web/specs/admin-crud-column-web-spec.js +6 -29
  316. package/dist/web/specs/admin-crud-column-web-spec.js.map +1 -1
  317. package/dist/web/specs/admin-crud-input-web-spec.d.ts +6 -12
  318. package/dist/web/specs/admin-crud-input-web-spec.d.ts.map +1 -1
  319. package/dist/web/specs/admin-crud-input-web-spec.js +6 -29
  320. package/dist/web/specs/admin-crud-input-web-spec.js.map +1 -1
  321. package/dist/web/specs/model-transformer-web-spec.d.ts +8 -13
  322. package/dist/web/specs/model-transformer-web-spec.d.ts.map +1 -1
  323. package/dist/web/specs/model-transformer-web-spec.js +16 -28
  324. package/dist/web/specs/model-transformer-web-spec.js.map +1 -1
  325. package/package.json +10 -9
  326. package/dist/compiler/admin-crud-action-spec.d.ts +0 -26
  327. package/dist/compiler/admin-crud-action-spec.d.ts.map +0 -1
  328. package/dist/compiler/admin-crud-action-spec.js +0 -29
  329. package/dist/compiler/admin-crud-action-spec.js.map +0 -1
  330. package/dist/plugins/schema/index.d.ts.map +0 -1
  331. package/dist/plugins/schema/index.js.map +0 -1
  332. package/dist/plugins/schema/store.d.ts +0 -8
  333. package/dist/plugins/schema/store.d.ts.map +0 -1
  334. package/dist/plugins/schema/store.js +0 -17
  335. package/dist/plugins/schema/store.js.map +0 -1
  336. package/dist/plugins/spec/auth-model-config-spec.d.ts +0 -14
  337. package/dist/plugins/spec/auth-model-config-spec.d.ts.map +0 -1
  338. package/dist/plugins/spec/auth-model-config-spec.js +0 -6
  339. package/dist/plugins/spec/auth-model-config-spec.js.map +0 -1
  340. package/dist/schema/packages/base.d.ts.map +0 -1
  341. package/dist/schema/packages/base.js +0 -10
  342. package/dist/schema/packages/base.js.map +0 -1
  343. package/dist/schema/packages/index.d.ts +0 -4
  344. package/dist/schema/packages/index.d.ts.map +0 -1
  345. package/dist/schema/packages/index.js +0 -4
  346. package/dist/schema/packages/index.js.map +0 -1
  347. package/dist/schema/packages/node-library/index.d.ts +0 -16
  348. package/dist/schema/packages/node-library/index.d.ts.map +0 -1
  349. package/dist/schema/packages/node-library/index.js +0 -10
  350. package/dist/schema/packages/node-library/index.js.map +0 -1
  351. package/dist/schema/packages/types.d.ts +0 -6
  352. package/dist/schema/packages/types.d.ts.map +0 -1
  353. package/dist/schema/packages/types.js +0 -6
  354. package/dist/schema/packages/types.js.map +0 -1
  355. /package/dist/plugins/{schema → store}/index.d.ts +0 -0
  356. /package/dist/plugins/{schema → store}/index.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/schema/creator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACZ,MAAM,oDAAoD,CAAC;AAC5D,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,OAAO,EAAE,yBAAyB,CAAC;IACnC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;CACjD;AAED,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,OAAO,EAAE,yBAAyB,CAAC;IACnC;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC;IACrB;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC;IACrB;;;;;OAKG;IACH,WAAW,EAAE,eAAe,CAAC;IAC7B;;;OAGG;IACH,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CACrE,GAAG,EAAE,6BAA6B,KAC/B,CAAC,CAAC;AAEP,MAAM,MAAM,gCAAgC,CAC1C,iBAAiB,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAC/C,eAAe,SAAS,wBAAwB,GAAG,wBAAwB,IACzE,CAAC,CACH,GAAG,EAAE,6BAA6B,EAClC,KAAK,EAAE,iBAAiB,CAAC,eAAe,CAAC,KACtC,iBAAiB,CAAC,GAAG;IACxB,cAAc,EAAE,eAAe,CAAC;CACjC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/schema/creator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,WAAW,EACZ,MAAM,oDAAoD,CAAC;AAC5D,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC;IACzB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;CACjD;AAED,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC;IACzB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC;IACrB;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC;IACrB;;;;;OAKG;IACH,WAAW,EAAE,eAAe,CAAC;IAC7B;;;OAGG;IACH,UAAU,EAAE,cAAc,CAAC;IAC3B;;;OAGG;IACH,cAAc,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CACrE,GAAG,EAAE,6BAA6B,KAC/B,CAAC,CAAC;AAEP,MAAM,MAAM,gCAAgC,CAC1C,iBAAiB,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAC/C,eAAe,SAAS,wBAAwB,GAAG,wBAAwB,IACzE,CAAC,CACH,GAAG,EAAE,6BAA6B,EAClC,KAAK,EAAE,iBAAiB,CAAC,eAAe,CAAC,KACtC,iBAAiB,CAAC,GAAG;IACxB,cAAc,EAAE,eAAe,CAAC;CACjC,CAAC"}
@@ -2,8 +2,8 @@ export * from './apps/index.js';
2
2
  export * from './auth/index.js';
3
3
  export * from './creator/index.js';
4
4
  export * from './features/index.js';
5
+ export * from './libraries/index.js';
5
6
  export * from './models/index.js';
6
- export * from './packages/index.js';
7
7
  export * from './plugins/index.js';
8
8
  export * from './project-definition.js';
9
9
  export * from './settings/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
@@ -2,8 +2,8 @@ export * from './apps/index.js';
2
2
  export * from './auth/index.js';
3
3
  export * from './creator/index.js';
4
4
  export * from './features/index.js';
5
+ export * from './libraries/index.js';
5
6
  export * from './models/index.js';
6
- export * from './packages/index.js';
7
7
  export * from './plugins/index.js';
8
8
  export * from './project-definition.js';
9
9
  export * from './settings/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
@@ -1,13 +1,13 @@
1
1
  import { z } from 'zod';
2
- export declare const basePackageValidators: {
2
+ export declare const baseLibraryValidators: {
3
3
  readonly id: z.ZodDefault<z.ZodString>;
4
4
  readonly name: z.ZodString;
5
5
  readonly type: z.ZodString;
6
6
  };
7
- export declare const basePackageSchema: z.ZodObject<{
7
+ export declare const baseLibrarySchema: z.ZodObject<{
8
8
  id: z.ZodDefault<z.ZodString>;
9
9
  name: z.ZodString;
10
10
  type: z.ZodString;
11
11
  }, z.core.$strip>;
12
- export type BasePackageConfig = z.infer<typeof basePackageSchema>;
12
+ export type BaseLibraryDefinition = z.infer<typeof baseLibrarySchema>;
13
13
  //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/schema/libraries/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC;AAEX,eAAO,MAAM,iBAAiB;;;;iBAAkC,CAAC;AAEjE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { CASE_VALIDATORS } from '@baseplate-dev/utils';
2
+ import { z } from 'zod';
3
+ import { libraryEntityType } from './types.js';
4
+ export const baseLibraryValidators = {
5
+ id: z.string().default(libraryEntityType.generateNewId()),
6
+ name: CASE_VALIDATORS.KEBAB_CASE,
7
+ type: z.string(),
8
+ };
9
+ export const baseLibrarySchema = z.object(baseLibraryValidators);
10
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/schema/libraries/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;IACzD,IAAI,EAAE,eAAe,CAAC,UAAU;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './base.js';
2
+ export * from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schema/libraries/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './base.js';
2
+ export * from './types.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schema/libraries/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,19 @@
1
+ import z from 'zod';
2
+ export declare const createLibrarySchema: (context: import("../index.js").DefinitionSchemaParserContext) => z.ZodType<{
3
+ id: string;
4
+ name: string;
5
+ type: string;
6
+ }, {
7
+ name: string;
8
+ type: string;
9
+ id?: string | undefined;
10
+ }, z.z.core.$ZodTypeInternals<{
11
+ id: string;
12
+ name: string;
13
+ type: string;
14
+ }, {
15
+ name: string;
16
+ type: string;
17
+ id?: string | undefined;
18
+ }>>;
19
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../src/schema/libraries/library.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AASpB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;GAiB/B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import z from 'zod';
2
+ import { libraryTypeSpec } from '#src/specs/packages/library-type-spec.js';
3
+ import { definitionSchema } from '../creator/schema-creator.js';
4
+ import { libraryEntityType } from './types.js';
5
+ export const createLibrarySchema = definitionSchema((ctx) => ctx.refContext({ librarySlot: libraryEntityType }, ({ librarySlot }) => {
6
+ const packageTypes = ctx.plugins.use(libraryTypeSpec);
7
+ const schemas = [...packageTypes.schemaCreators.values()].map((entry) => entry.definitionSchema(ctx, { librarySlot }));
8
+ return ctx.withEnt(z.discriminatedUnion('type', schemas), {
9
+ type: libraryEntityType,
10
+ provides: librarySlot,
11
+ });
12
+ }));
13
+ //# sourceMappingURL=library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/schema/libraries/library.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAI3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,CAAC,GAAG,EAAE,EAAE,CAC1D,GAAG,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IACrE,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,CAAC,GAAG,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACtE,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAC7C,CAAC;IACF,OAAO,GAAG,CAAC,OAAO,CAChB,CAAC,CAAC,kBAAkB,CAClB,MAAM,EACN,OAAsE,CACvE,EACD;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,WAAW;KACtB,CACF,CAAC;AACJ,CAAC,CAAC,CACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const libraryEntityType: import("#src/references/types.js").DefinitionEntityType<false>;
2
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/schema/libraries/types.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,gEAA8B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createEntityType } from '#src/references/types.js';
2
+ export const libraryEntityType = createEntityType('library');
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/schema/libraries/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Parser for authorizer expressions using Acorn.
3
+ *
4
+ * Parses expressions with implicit auth context:
5
+ * - `model.id === userId`
6
+ * - `hasRole('admin')`
7
+ * - `hasSomeRole(['admin', 'moderator'])`
8
+ * - `model.id === userId || hasRole('admin')`
9
+ *
10
+ * Uses Acorn to parse as JavaScript, then converts the ESTree AST
11
+ * to our domain-specific AST, rejecting unsupported constructs.
12
+ */
13
+ import type { AuthorizerExpressionInfo } from './authorizer-expression-ast.js';
14
+ /**
15
+ * Parse an authorizer expression string into our domain AST.
16
+ *
17
+ * @param input - The expression string to parse
18
+ * @returns The parsed expression info including AST and dependencies
19
+ * @throws {AuthorizerExpressionParseError} If the expression is invalid
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const result = parseAuthorizerExpression("model.id === auth.userId");
24
+ * // result.ast = { type: 'fieldComparison', ... }
25
+ * // result.modelFieldRefs = ['id']
26
+ * // result.authFieldRefs = ['userId']
27
+ * ```
28
+ */
29
+ export declare function parseAuthorizerExpression(input: string): AuthorizerExpressionInfo;
30
+ //# sourceMappingURL=authorizer-expression-acorn-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizer-expression-acorn-parser.d.ts","sourceRoot":"","sources":["../../../../src/schema/models/authorizer/authorizer-expression-acorn-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,OAAO,KAAK,EACV,wBAAwB,EAOzB,MAAM,gCAAgC,CAAC;AAIxC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,GACZ,wBAAwB,CA6C1B"}
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Parser for authorizer expressions using Acorn.
3
+ *
4
+ * Parses expressions with implicit auth context:
5
+ * - `model.id === userId`
6
+ * - `hasRole('admin')`
7
+ * - `hasSomeRole(['admin', 'moderator'])`
8
+ * - `model.id === userId || hasRole('admin')`
9
+ *
10
+ * Uses Acorn to parse as JavaScript, then converts the ESTree AST
11
+ * to our domain-specific AST, rejecting unsupported constructs.
12
+ */
13
+ import { parse } from 'acorn';
14
+ import { AuthorizerExpressionParseError } from './authorizer-expression-ast.js';
15
+ /**
16
+ * Parse an authorizer expression string into our domain AST.
17
+ *
18
+ * @param input - The expression string to parse
19
+ * @returns The parsed expression info including AST and dependencies
20
+ * @throws {AuthorizerExpressionParseError} If the expression is invalid
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const result = parseAuthorizerExpression("model.id === auth.userId");
25
+ * // result.ast = { type: 'fieldComparison', ... }
26
+ * // result.modelFieldRefs = ['id']
27
+ * // result.authFieldRefs = ['userId']
28
+ * ```
29
+ */
30
+ export function parseAuthorizerExpression(input) {
31
+ // Parse with Acorn
32
+ let program;
33
+ try {
34
+ program = parse(input, {
35
+ ecmaVersion: 2020,
36
+ });
37
+ }
38
+ catch (error) {
39
+ if (error instanceof SyntaxError) {
40
+ throw new AuthorizerExpressionParseError(`Invalid expression syntax: ${error.message}`,
41
+ // SyntaxError thrown by Acorn have a pos property
42
+ error.pos);
43
+ }
44
+ throw error;
45
+ }
46
+ // Check body is an expression
47
+ if (program.body.length !== 1) {
48
+ throw new AuthorizerExpressionParseError('Expression must be a single expression statement, e.g. model.id === auth.userId', 0, input.length);
49
+ }
50
+ const expressionStatement = program.body[0];
51
+ if (expressionStatement.type !== 'ExpressionStatement') {
52
+ throw new AuthorizerExpressionParseError('Line must be an expression statement, e.g. model.id === auth.userId', expressionStatement);
53
+ }
54
+ // Convert ESTree to our domain AST
55
+ const ast = convertNode(expressionStatement.expression);
56
+ // Extract dependency information
57
+ const info = extractInfo(ast);
58
+ return {
59
+ ast,
60
+ ...info,
61
+ };
62
+ }
63
+ /**
64
+ * Convert an ESTree expression node to our domain AST.
65
+ */
66
+ function convertNode(node) {
67
+ switch (node.type) {
68
+ case 'LogicalExpression': {
69
+ return convertLogicalExpression(node);
70
+ }
71
+ case 'BinaryExpression': {
72
+ return convertBinaryExpression(node);
73
+ }
74
+ case 'CallExpression': {
75
+ return convertCallExpression(node);
76
+ }
77
+ case 'MemberExpression': {
78
+ // A bare member expression like `model.id` without comparison
79
+ throw new AuthorizerExpressionParseError('Field reference must be part of a comparison (e.g., model.id === auth.userId)', node);
80
+ }
81
+ default: {
82
+ throw new AuthorizerExpressionParseError(`Unsupported expression type: ${node.type}`, node);
83
+ }
84
+ }
85
+ }
86
+ /**
87
+ * Convert a LogicalExpression (|| or &&) to BinaryLogicalNode.
88
+ */
89
+ function convertLogicalExpression(node) {
90
+ if (node.operator !== '||' && node.operator !== '&&') {
91
+ throw new AuthorizerExpressionParseError(`Unsupported logical operator: ${node.operator}. Only || and && are supported.`, node.left.end, node.right.start);
92
+ }
93
+ return {
94
+ type: 'binaryLogical',
95
+ operator: node.operator,
96
+ left: convertNode(node.left),
97
+ right: convertNode(node.right),
98
+ };
99
+ }
100
+ /**
101
+ * Convert a BinaryExpression (===) to FieldComparisonNode.
102
+ */
103
+ function convertBinaryExpression(node) {
104
+ if (node.operator !== '===') {
105
+ throw new AuthorizerExpressionParseError(`Unsupported comparison operator: ${node.operator}. Only === is supported.`, node.left.end, node.right.start);
106
+ }
107
+ // Acorn's BinaryExpression allows PrivateIdentifier for ES2022+, but we only
108
+ // support MemberExpression field refs. convertFieldRef will throw if given
109
+ // anything other than MemberExpression.
110
+ return {
111
+ type: 'fieldComparison',
112
+ operator: '===',
113
+ left: convertFieldRef(node.left),
114
+ right: convertFieldRef(node.right),
115
+ };
116
+ }
117
+ /**
118
+ * Convert a CallExpression to HasRoleNode or HasSomeRoleNode.
119
+ * Supports:
120
+ * - `hasRole('admin')`
121
+ * - `hasSomeRole(['admin', 'moderator'])`
122
+ */
123
+ function convertCallExpression(node) {
124
+ // Only support direct calls (e.g., hasRole(...))
125
+ if (node.callee.type !== 'Identifier') {
126
+ throw new AuthorizerExpressionParseError('Function calls must be standalone (hasRole, hasSomeRole)', node.callee);
127
+ }
128
+ const funcName = node.callee.name;
129
+ if (funcName === 'hasRole') {
130
+ return parseHasRoleArgs(node, 'hasRole()');
131
+ }
132
+ if (funcName === 'hasSomeRole') {
133
+ return parseHasSomeRoleArgs(node, 'hasSomeRole()');
134
+ }
135
+ throw new AuthorizerExpressionParseError(`Unknown function '${funcName}'. Use hasRole() or hasSomeRole().`, node.callee);
136
+ }
137
+ /**
138
+ * Parse hasRole('role') arguments.
139
+ */
140
+ function parseHasRoleArgs(node, funcName) {
141
+ // Must have exactly one string argument
142
+ if (node.arguments.length !== 1) {
143
+ throw new AuthorizerExpressionParseError(`${funcName} requires exactly one argument, got ${node.arguments.length}`, node);
144
+ }
145
+ const arg = node.arguments[0];
146
+ if (arg.type !== 'Literal' || typeof arg.value !== 'string') {
147
+ throw new AuthorizerExpressionParseError(`${funcName} argument must be a string literal`, arg);
148
+ }
149
+ const role = arg.value;
150
+ return {
151
+ type: 'hasRole',
152
+ role,
153
+ roleStart: arg.start,
154
+ roleEnd: arg.end,
155
+ };
156
+ }
157
+ /**
158
+ * Parse hasSomeRole(['role1', 'role2']) arguments.
159
+ */
160
+ function parseHasSomeRoleArgs(node, funcName) {
161
+ // Must have exactly one array argument
162
+ if (node.arguments.length !== 1) {
163
+ throw new AuthorizerExpressionParseError(`${funcName} requires exactly one argument, got ${node.arguments.length}`, node);
164
+ }
165
+ const arg = node.arguments[0];
166
+ if (arg.type !== 'ArrayExpression') {
167
+ throw new AuthorizerExpressionParseError(`${funcName} argument must be an array literal (e.g., ['admin', 'moderator'])`, arg);
168
+ }
169
+ const roles = [];
170
+ const rolesStart = [];
171
+ const rolesEnd = [];
172
+ for (const element of arg.elements) {
173
+ if (!element) {
174
+ throw new AuthorizerExpressionParseError(`${funcName} array cannot have empty elements`, arg);
175
+ }
176
+ if (element.type !== 'Literal' || typeof element.value !== 'string') {
177
+ throw new AuthorizerExpressionParseError(`${funcName} array elements must be string literals`, element);
178
+ }
179
+ roles.push(element.value);
180
+ rolesStart.push(element.start);
181
+ rolesEnd.push(element.end);
182
+ }
183
+ if (roles.length === 0) {
184
+ throw new AuthorizerExpressionParseError(`${funcName} requires at least one role`, arg);
185
+ }
186
+ return {
187
+ type: 'hasSomeRole',
188
+ roles,
189
+ rolesStart,
190
+ rolesEnd,
191
+ };
192
+ }
193
+ /**
194
+ * Convert to FieldRefNode.
195
+ * Supports:
196
+ * - Standalone identifier for implicit auth context: `userId`
197
+ * - Member expressions: `model.field`
198
+ */
199
+ function convertFieldRef(node) {
200
+ // Handle standalone identifier (implicit auth context)
201
+ if (node.type === 'Identifier') {
202
+ const identifier = node;
203
+ const { name } = identifier;
204
+ // Only userId is valid as a standalone identifier (implicit auth context)
205
+ if (name === 'userId') {
206
+ return {
207
+ type: 'fieldRef',
208
+ source: 'auth',
209
+ field: 'userId',
210
+ start: node.start,
211
+ end: node.end,
212
+ };
213
+ }
214
+ throw new AuthorizerExpressionParseError(`Unknown identifier '${name}'. Did you mean 'model.${name}' or use 'userId' for auth context?`, node);
215
+ }
216
+ if (node.type !== 'MemberExpression') {
217
+ throw new AuthorizerExpressionParseError('Expected field reference (model.field or userId)', node);
218
+ }
219
+ const memberExpr = node;
220
+ // Object must be an identifier
221
+ if (memberExpr.object.type !== 'Identifier') {
222
+ throw new AuthorizerExpressionParseError('Field reference must start with model', memberExpr.object);
223
+ }
224
+ const source = memberExpr.object.name;
225
+ if (source !== 'model') {
226
+ throw new AuthorizerExpressionParseError(`Field reference must start with 'model', not '${source}'`, memberExpr.object);
227
+ }
228
+ // Property must be a simple identifier (not computed)
229
+ if (memberExpr.computed) {
230
+ throw new AuthorizerExpressionParseError('Computed property access (e.g., model["field"]) is not supported', memberExpr.property);
231
+ }
232
+ if (memberExpr.property.type !== 'Identifier') {
233
+ throw new AuthorizerExpressionParseError('Expected field name identifier', memberExpr.property);
234
+ }
235
+ const field = memberExpr.property.name;
236
+ return {
237
+ type: 'fieldRef',
238
+ source: 'model',
239
+ field,
240
+ start: node.start,
241
+ end: node.end,
242
+ };
243
+ }
244
+ /**
245
+ * Extract dependency information from the parsed AST.
246
+ */
247
+ function extractInfo(ast) {
248
+ const modelFieldRefs = [];
249
+ const authFieldRefs = [];
250
+ const roleRefs = [];
251
+ let requiresModel = false;
252
+ function walk(node) {
253
+ switch (node.type) {
254
+ case 'fieldComparison': {
255
+ walkFieldRef(node.left);
256
+ walkFieldRef(node.right);
257
+ break;
258
+ }
259
+ case 'hasRole': {
260
+ roleRefs.push(node.role);
261
+ break;
262
+ }
263
+ case 'hasSomeRole': {
264
+ roleRefs.push(...node.roles);
265
+ break;
266
+ }
267
+ case 'binaryLogical': {
268
+ walk(node.left);
269
+ walk(node.right);
270
+ break;
271
+ }
272
+ }
273
+ }
274
+ function walkFieldRef(node) {
275
+ if (node.source === 'model') {
276
+ modelFieldRefs.push(node.field);
277
+ requiresModel = true;
278
+ }
279
+ else {
280
+ authFieldRefs.push(node.field);
281
+ }
282
+ }
283
+ walk(ast);
284
+ return {
285
+ modelFieldRefs: [...new Set(modelFieldRefs)],
286
+ authFieldRefs: [...new Set(authFieldRefs)],
287
+ roleRefs: [...new Set(roleRefs)],
288
+ requiresModel,
289
+ };
290
+ }
291
+ //# sourceMappingURL=authorizer-expression-acorn-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizer-expression-acorn-parser.js","sourceRoot":"","sources":["../../../../src/schema/models/authorizer/authorizer-expression-acorn-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * AST node types for authorizer expressions.
3
+ *
4
+ * These represent the semantic structure of expressions like:
5
+ * - `model.id === userId`
6
+ * - `hasRole('admin')`
7
+ * - `hasSomeRole(['admin', 'moderator'])`
8
+ * - `model.id === userId || hasRole('admin')`
9
+ *
10
+ * The AST is produced by parsing with Acorn and converting from ESTree.
11
+ */
12
+ /**
13
+ * Root expression node - the result of parsing an authorizer expression.
14
+ */
15
+ export type AuthorizerExpressionNode = FieldComparisonNode | HasRoleNode | HasSomeRoleNode | BinaryLogicalNode;
16
+ /**
17
+ * A field comparison expression: `left === right`
18
+ *
19
+ * Currently only supports strict equality (`===`).
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // model.id === auth.userId
24
+ * {
25
+ * type: 'fieldComparison',
26
+ * operator: '===',
27
+ * left: { type: 'fieldRef', source: 'model', field: 'id', ... },
28
+ * right: { type: 'fieldRef', source: 'auth', field: 'userId', ... },
29
+ * }
30
+ * ```
31
+ */
32
+ export interface FieldComparisonNode {
33
+ type: 'fieldComparison';
34
+ operator: '===';
35
+ left: FieldRefNode;
36
+ right: FieldRefNode;
37
+ }
38
+ /**
39
+ * A role check expression: `hasRole('roleName')`
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // hasRole('admin')
44
+ * {
45
+ * type: 'hasRole',
46
+ * role: 'admin',
47
+ * roleStart: 8,
48
+ * roleEnd: 15,
49
+ * }
50
+ * ```
51
+ */
52
+ export interface HasRoleNode {
53
+ type: 'hasRole';
54
+ /** The role name being checked */
55
+ role: string;
56
+ /** Start position of the role string in the source (for rename tracking) */
57
+ roleStart: number;
58
+ /** End position of the role string in the source (for rename tracking) */
59
+ roleEnd: number;
60
+ }
61
+ /**
62
+ * A role check expression for multiple roles: `hasSomeRole(['role1', 'role2'])`
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * // hasSomeRole(['admin', 'moderator'])
67
+ * {
68
+ * type: 'hasSomeRole',
69
+ * roles: ['admin', 'moderator'],
70
+ * rolesStart: [13, 22],
71
+ * rolesEnd: [20, 33],
72
+ * }
73
+ * ```
74
+ */
75
+ export interface HasSomeRoleNode {
76
+ type: 'hasSomeRole';
77
+ /** The role names being checked */
78
+ roles: string[];
79
+ /** Start positions of each role string in the source (for rename tracking) */
80
+ rolesStart: number[];
81
+ /** End positions of each role string in the source (for rename tracking) */
82
+ rolesEnd: number[];
83
+ }
84
+ /**
85
+ * A binary logical expression: `left || right` or `left && right`
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * // model.id === auth.userId || auth.hasRole('admin')
90
+ * {
91
+ * type: 'binaryLogical',
92
+ * operator: '||',
93
+ * left: { type: 'fieldComparison', ... },
94
+ * right: { type: 'hasRole', ... },
95
+ * }
96
+ * ```
97
+ */
98
+ export interface BinaryLogicalNode {
99
+ type: 'binaryLogical';
100
+ operator: '||' | '&&';
101
+ left: AuthorizerExpressionNode;
102
+ right: AuthorizerExpressionNode;
103
+ }
104
+ /**
105
+ * A reference to a field on either `model` or `auth`.
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * // model.id
110
+ * { type: 'fieldRef', source: 'model', field: 'id', start: 0, end: 8 }
111
+ *
112
+ * // userId - implicit auth context
113
+ * { type: 'fieldRef', source: 'auth', field: 'userId', start: 13, end: 19 }
114
+ * ```
115
+ */
116
+ export interface FieldRefNode {
117
+ type: 'fieldRef';
118
+ /** The source object - either 'model' or 'auth' */
119
+ source: 'model' | 'auth';
120
+ /** The field name being accessed */
121
+ field: string;
122
+ /** Start position in the source (for rename tracking) */
123
+ start: number;
124
+ /** End position in the source (for rename tracking) */
125
+ end: number;
126
+ }
127
+ /**
128
+ * Information extracted from a parsed expression for dependency tracking.
129
+ */
130
+ export interface AuthorizerExpressionInfo {
131
+ /** The parsed AST */
132
+ ast: AuthorizerExpressionNode;
133
+ /** Model field names referenced (e.g., ['id', 'authorId']) */
134
+ modelFieldRefs: string[];
135
+ /** Auth field names referenced (e.g., ['userId']) */
136
+ authFieldRefs: string[];
137
+ /** Role names referenced (e.g., ['admin', 'user']) */
138
+ roleRefs: string[];
139
+ /** Whether the expression requires the model instance */
140
+ requiresModel: boolean;
141
+ }
142
+ /**
143
+ * Position information for error reporting.
144
+ * Compatible with Acorn AST nodes which have start/end properties.
145
+ */
146
+ export interface NodePosition {
147
+ start: number;
148
+ end: number;
149
+ }
150
+ /**
151
+ * Error thrown when parsing an authorizer expression fails.
152
+ */
153
+ export declare class AuthorizerExpressionParseError extends Error {
154
+ readonly startPosition?: number;
155
+ readonly endPosition?: number;
156
+ constructor(message: string, position?: NodePosition);
157
+ constructor(message: string, startPosition?: number, endPosition?: number);
158
+ }
159
+ //# sourceMappingURL=authorizer-expression-ast.d.ts.map