@contember/schema-definition 2.1.0-beta.2 → 2.2.0-alpha.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 (428) hide show
  1. package/dist/development/index.cjs +1 -0
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +2 -1
  4. package/dist/development/index.js.map +1 -1
  5. package/dist/development/src/acl/builder/EntityPermissionsBuilder.cjs.map +1 -1
  6. package/dist/development/src/acl/builder/EntityPermissionsBuilder.js.map +1 -1
  7. package/dist/development/src/acl/builder/FieldPermissionsBuilder.cjs.map +1 -1
  8. package/dist/development/src/acl/builder/FieldPermissionsBuilder.js.map +1 -1
  9. package/dist/development/src/acl/builder/PermissionOverrider.cjs.map +1 -1
  10. package/dist/development/src/acl/builder/PermissionOverrider.js.map +1 -1
  11. package/dist/development/src/acl/builder/PermissionsBuilder.cjs.map +1 -1
  12. package/dist/development/src/acl/builder/PermissionsBuilder.js.map +1 -1
  13. package/dist/development/src/acl/definition/aclExtensions.cjs.map +1 -1
  14. package/dist/development/src/acl/definition/aclExtensions.js.map +1 -1
  15. package/dist/development/src/acl/definition/customPrimary.cjs.map +1 -1
  16. package/dist/development/src/acl/definition/customPrimary.js.map +1 -1
  17. package/dist/development/src/acl/definition/index.cjs.map +1 -1
  18. package/dist/development/src/acl/definition/index.js.map +1 -1
  19. package/dist/development/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  20. package/dist/development/src/acl/definition/internal/AclFactory.js.map +1 -1
  21. package/dist/development/src/acl/definition/internal/EntityPredicateResolver.cjs.map +1 -1
  22. package/dist/development/src/acl/definition/internal/EntityPredicateResolver.js.map +1 -1
  23. package/dist/development/src/acl/definition/internal/createPredicateName.cjs.map +1 -1
  24. package/dist/development/src/acl/definition/internal/createPredicateName.js.map +1 -1
  25. package/dist/development/src/acl/definition/internal/stores.cjs.map +1 -1
  26. package/dist/development/src/acl/definition/internal/stores.js.map +1 -1
  27. package/dist/development/src/acl/definition/permissions.cjs.map +1 -1
  28. package/dist/development/src/acl/definition/permissions.js.map +1 -1
  29. package/dist/development/src/acl/definition/variables.cjs.map +1 -1
  30. package/dist/development/src/acl/definition/variables.js.map +1 -1
  31. package/dist/development/src/actions/definition/index.cjs.map +1 -1
  32. package/dist/development/src/actions/definition/index.js.map +1 -1
  33. package/dist/development/src/actions/definition/internal/ActionsFactory.cjs.map +1 -1
  34. package/dist/development/src/actions/definition/internal/ActionsFactory.js.map +1 -1
  35. package/dist/development/src/actions/definition/internal/store.cjs.map +1 -1
  36. package/dist/development/src/actions/definition/internal/store.js.map +1 -1
  37. package/dist/development/src/actions/definition/triggers.cjs.map +1 -1
  38. package/dist/development/src/actions/definition/triggers.js.map +1 -1
  39. package/dist/development/src/createSchema.cjs +2 -1
  40. package/dist/development/src/createSchema.cjs.map +1 -1
  41. package/dist/development/src/createSchema.js +2 -1
  42. package/dist/development/src/createSchema.js.map +1 -1
  43. package/dist/development/src/model/builder/ColumnBuilder.cjs.map +1 -1
  44. package/dist/development/src/model/builder/ColumnBuilder.js.map +1 -1
  45. package/dist/development/src/model/builder/EntityBuilder.cjs.map +1 -1
  46. package/dist/development/src/model/builder/EntityBuilder.js.map +1 -1
  47. package/dist/development/src/model/builder/FieldBuilder.cjs.map +1 -1
  48. package/dist/development/src/model/builder/FieldBuilder.js.map +1 -1
  49. package/dist/development/src/model/builder/ManyHasManyBuilder.cjs.map +1 -1
  50. package/dist/development/src/model/builder/ManyHasManyBuilder.js.map +1 -1
  51. package/dist/development/src/model/builder/ManyHasOneBuilder.cjs.map +1 -1
  52. package/dist/development/src/model/builder/ManyHasOneBuilder.js.map +1 -1
  53. package/dist/development/src/model/builder/OneHasManyBuilder.cjs.map +1 -1
  54. package/dist/development/src/model/builder/OneHasManyBuilder.js.map +1 -1
  55. package/dist/development/src/model/builder/OneHasOneBuilder.cjs.map +1 -1
  56. package/dist/development/src/model/builder/OneHasOneBuilder.js.map +1 -1
  57. package/dist/development/src/model/builder/SchemaBuilder.cjs.map +1 -1
  58. package/dist/development/src/model/builder/SchemaBuilder.js.map +1 -1
  59. package/dist/development/src/model/builder/SchemaBuilderInternal.cjs.map +1 -1
  60. package/dist/development/src/model/builder/SchemaBuilderInternal.js.map +1 -1
  61. package/dist/development/src/model/builder/internal/ColumnProcessor.cjs.map +1 -1
  62. package/dist/development/src/model/builder/internal/ColumnProcessor.js.map +1 -1
  63. package/dist/development/src/model/builder/internal/ManyHasManyProcessor.cjs.map +1 -1
  64. package/dist/development/src/model/builder/internal/ManyHasManyProcessor.js.map +1 -1
  65. package/dist/development/src/model/builder/internal/ManyHasOneProcessor.cjs.map +1 -1
  66. package/dist/development/src/model/builder/internal/ManyHasOneProcessor.js.map +1 -1
  67. package/dist/development/src/model/builder/internal/OneHasManyProcessor.cjs.map +1 -1
  68. package/dist/development/src/model/builder/internal/OneHasManyProcessor.js.map +1 -1
  69. package/dist/development/src/model/builder/internal/OneHasOneProcessor.cjs.map +1 -1
  70. package/dist/development/src/model/builder/internal/OneHasOneProcessor.js.map +1 -1
  71. package/dist/development/src/model/definition/EventLogDefinition.cjs.map +1 -1
  72. package/dist/development/src/model/definition/EventLogDefinition.js.map +1 -1
  73. package/dist/development/src/model/definition/IndexDefinition.cjs +35 -10
  74. package/dist/development/src/model/definition/IndexDefinition.cjs.map +1 -1
  75. package/dist/development/src/model/definition/IndexDefinition.js +35 -10
  76. package/dist/development/src/model/definition/IndexDefinition.js.map +1 -1
  77. package/dist/development/src/model/definition/OrderByDefinition.cjs.map +1 -1
  78. package/dist/development/src/model/definition/OrderByDefinition.js.map +1 -1
  79. package/dist/development/src/model/definition/UniqueDefinition.cjs.map +1 -1
  80. package/dist/development/src/model/definition/UniqueDefinition.js.map +1 -1
  81. package/dist/development/src/model/definition/ViewDefinition.cjs.map +1 -1
  82. package/dist/development/src/model/definition/ViewDefinition.js.map +1 -1
  83. package/dist/development/src/model/definition/extensions.cjs.map +1 -1
  84. package/dist/development/src/model/definition/extensions.js.map +1 -1
  85. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +20 -2
  86. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
  87. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js +20 -2
  88. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
  89. package/dist/development/src/model/definition/fieldDefinitions/FieldDefinition.cjs.map +1 -1
  90. package/dist/development/src/model/definition/fieldDefinitions/FieldDefinition.js.map +1 -1
  91. package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyDefinition.cjs.map +1 -1
  92. package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js.map +1 -1
  93. package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.cjs.map +1 -1
  94. package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js.map +1 -1
  95. package/dist/development/src/model/definition/fieldDefinitions/ManyHasOneDefinition.cjs.map +1 -1
  96. package/dist/development/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js.map +1 -1
  97. package/dist/development/src/model/definition/fieldDefinitions/OneHasManyDefinition.cjs.map +1 -1
  98. package/dist/development/src/model/definition/fieldDefinitions/OneHasManyDefinition.js.map +1 -1
  99. package/dist/development/src/model/definition/fieldDefinitions/OneHasOneDefinition.cjs.map +1 -1
  100. package/dist/development/src/model/definition/fieldDefinitions/OneHasOneDefinition.js.map +1 -1
  101. package/dist/development/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.cjs.map +1 -1
  102. package/dist/development/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js.map +1 -1
  103. package/dist/development/src/model/definition/index.cjs +1 -0
  104. package/dist/development/src/model/definition/index.cjs.map +1 -1
  105. package/dist/development/src/model/definition/index.js +2 -1
  106. package/dist/development/src/model/definition/index.js.map +1 -1
  107. package/dist/development/src/model/definition/internal/EntityRegistry.cjs.map +1 -1
  108. package/dist/development/src/model/definition/internal/EntityRegistry.js.map +1 -1
  109. package/dist/development/src/model/definition/internal/EnumRegistry.cjs.map +1 -1
  110. package/dist/development/src/model/definition/internal/EnumRegistry.js.map +1 -1
  111. package/dist/development/src/model/definition/internal/SchemaBuilder.cjs.map +1 -1
  112. package/dist/development/src/model/definition/internal/SchemaBuilder.js.map +1 -1
  113. package/dist/development/src/strict.cjs +20 -5
  114. package/dist/development/src/strict.cjs.map +1 -1
  115. package/dist/development/src/strict.js +20 -5
  116. package/dist/development/src/strict.js.map +1 -1
  117. package/dist/development/src/utils/filterEntityDefinition.cjs.map +1 -1
  118. package/dist/development/src/utils/filterEntityDefinition.js.map +1 -1
  119. package/dist/development/src/validation/index.cjs.map +1 -1
  120. package/dist/development/src/validation/index.js.map +1 -1
  121. package/dist/production/index.cjs +1 -0
  122. package/dist/production/index.cjs.map +1 -1
  123. package/dist/production/index.js +2 -1
  124. package/dist/production/index.js.map +1 -1
  125. package/dist/production/src/acl/builder/EntityPermissionsBuilder.cjs.map +1 -1
  126. package/dist/production/src/acl/builder/EntityPermissionsBuilder.js.map +1 -1
  127. package/dist/production/src/acl/builder/FieldPermissionsBuilder.cjs.map +1 -1
  128. package/dist/production/src/acl/builder/FieldPermissionsBuilder.js.map +1 -1
  129. package/dist/production/src/acl/builder/PermissionOverrider.cjs.map +1 -1
  130. package/dist/production/src/acl/builder/PermissionOverrider.js.map +1 -1
  131. package/dist/production/src/acl/builder/PermissionsBuilder.cjs.map +1 -1
  132. package/dist/production/src/acl/builder/PermissionsBuilder.js.map +1 -1
  133. package/dist/production/src/acl/definition/aclExtensions.cjs.map +1 -1
  134. package/dist/production/src/acl/definition/aclExtensions.js.map +1 -1
  135. package/dist/production/src/acl/definition/customPrimary.cjs.map +1 -1
  136. package/dist/production/src/acl/definition/customPrimary.js.map +1 -1
  137. package/dist/production/src/acl/definition/index.cjs.map +1 -1
  138. package/dist/production/src/acl/definition/index.js.map +1 -1
  139. package/dist/production/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  140. package/dist/production/src/acl/definition/internal/AclFactory.js.map +1 -1
  141. package/dist/production/src/acl/definition/internal/EntityPredicateResolver.cjs.map +1 -1
  142. package/dist/production/src/acl/definition/internal/EntityPredicateResolver.js.map +1 -1
  143. package/dist/production/src/acl/definition/internal/createPredicateName.cjs.map +1 -1
  144. package/dist/production/src/acl/definition/internal/createPredicateName.js.map +1 -1
  145. package/dist/production/src/acl/definition/internal/stores.cjs.map +1 -1
  146. package/dist/production/src/acl/definition/internal/stores.js.map +1 -1
  147. package/dist/production/src/acl/definition/permissions.cjs.map +1 -1
  148. package/dist/production/src/acl/definition/permissions.js.map +1 -1
  149. package/dist/production/src/acl/definition/variables.cjs.map +1 -1
  150. package/dist/production/src/acl/definition/variables.js.map +1 -1
  151. package/dist/production/src/actions/definition/index.cjs.map +1 -1
  152. package/dist/production/src/actions/definition/index.js.map +1 -1
  153. package/dist/production/src/actions/definition/internal/ActionsFactory.cjs.map +1 -1
  154. package/dist/production/src/actions/definition/internal/ActionsFactory.js.map +1 -1
  155. package/dist/production/src/actions/definition/internal/store.cjs.map +1 -1
  156. package/dist/production/src/actions/definition/internal/store.js.map +1 -1
  157. package/dist/production/src/actions/definition/triggers.cjs.map +1 -1
  158. package/dist/production/src/actions/definition/triggers.js.map +1 -1
  159. package/dist/production/src/createSchema.cjs +2 -1
  160. package/dist/production/src/createSchema.cjs.map +1 -1
  161. package/dist/production/src/createSchema.js +2 -1
  162. package/dist/production/src/createSchema.js.map +1 -1
  163. package/dist/production/src/model/builder/ColumnBuilder.cjs.map +1 -1
  164. package/dist/production/src/model/builder/ColumnBuilder.js.map +1 -1
  165. package/dist/production/src/model/builder/EntityBuilder.cjs.map +1 -1
  166. package/dist/production/src/model/builder/EntityBuilder.js.map +1 -1
  167. package/dist/production/src/model/builder/FieldBuilder.cjs.map +1 -1
  168. package/dist/production/src/model/builder/FieldBuilder.js.map +1 -1
  169. package/dist/production/src/model/builder/ManyHasManyBuilder.cjs.map +1 -1
  170. package/dist/production/src/model/builder/ManyHasManyBuilder.js.map +1 -1
  171. package/dist/production/src/model/builder/ManyHasOneBuilder.cjs.map +1 -1
  172. package/dist/production/src/model/builder/ManyHasOneBuilder.js.map +1 -1
  173. package/dist/production/src/model/builder/OneHasManyBuilder.cjs.map +1 -1
  174. package/dist/production/src/model/builder/OneHasManyBuilder.js.map +1 -1
  175. package/dist/production/src/model/builder/OneHasOneBuilder.cjs.map +1 -1
  176. package/dist/production/src/model/builder/OneHasOneBuilder.js.map +1 -1
  177. package/dist/production/src/model/builder/SchemaBuilder.cjs.map +1 -1
  178. package/dist/production/src/model/builder/SchemaBuilder.js.map +1 -1
  179. package/dist/production/src/model/builder/SchemaBuilderInternal.cjs.map +1 -1
  180. package/dist/production/src/model/builder/SchemaBuilderInternal.js.map +1 -1
  181. package/dist/production/src/model/builder/internal/ColumnProcessor.cjs.map +1 -1
  182. package/dist/production/src/model/builder/internal/ColumnProcessor.js.map +1 -1
  183. package/dist/production/src/model/builder/internal/ManyHasManyProcessor.cjs.map +1 -1
  184. package/dist/production/src/model/builder/internal/ManyHasManyProcessor.js.map +1 -1
  185. package/dist/production/src/model/builder/internal/ManyHasOneProcessor.cjs.map +1 -1
  186. package/dist/production/src/model/builder/internal/ManyHasOneProcessor.js.map +1 -1
  187. package/dist/production/src/model/builder/internal/OneHasManyProcessor.cjs.map +1 -1
  188. package/dist/production/src/model/builder/internal/OneHasManyProcessor.js.map +1 -1
  189. package/dist/production/src/model/builder/internal/OneHasOneProcessor.cjs.map +1 -1
  190. package/dist/production/src/model/builder/internal/OneHasOneProcessor.js.map +1 -1
  191. package/dist/production/src/model/definition/EventLogDefinition.cjs.map +1 -1
  192. package/dist/production/src/model/definition/EventLogDefinition.js.map +1 -1
  193. package/dist/production/src/model/definition/IndexDefinition.cjs +35 -10
  194. package/dist/production/src/model/definition/IndexDefinition.cjs.map +1 -1
  195. package/dist/production/src/model/definition/IndexDefinition.js +35 -10
  196. package/dist/production/src/model/definition/IndexDefinition.js.map +1 -1
  197. package/dist/production/src/model/definition/OrderByDefinition.cjs.map +1 -1
  198. package/dist/production/src/model/definition/OrderByDefinition.js.map +1 -1
  199. package/dist/production/src/model/definition/UniqueDefinition.cjs.map +1 -1
  200. package/dist/production/src/model/definition/UniqueDefinition.js.map +1 -1
  201. package/dist/production/src/model/definition/ViewDefinition.cjs.map +1 -1
  202. package/dist/production/src/model/definition/ViewDefinition.js.map +1 -1
  203. package/dist/production/src/model/definition/extensions.cjs.map +1 -1
  204. package/dist/production/src/model/definition/extensions.js.map +1 -1
  205. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +20 -2
  206. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
  207. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js +20 -2
  208. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
  209. package/dist/production/src/model/definition/fieldDefinitions/FieldDefinition.cjs.map +1 -1
  210. package/dist/production/src/model/definition/fieldDefinitions/FieldDefinition.js.map +1 -1
  211. package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyDefinition.cjs.map +1 -1
  212. package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js.map +1 -1
  213. package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.cjs.map +1 -1
  214. package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js.map +1 -1
  215. package/dist/production/src/model/definition/fieldDefinitions/ManyHasOneDefinition.cjs.map +1 -1
  216. package/dist/production/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js.map +1 -1
  217. package/dist/production/src/model/definition/fieldDefinitions/OneHasManyDefinition.cjs.map +1 -1
  218. package/dist/production/src/model/definition/fieldDefinitions/OneHasManyDefinition.js.map +1 -1
  219. package/dist/production/src/model/definition/fieldDefinitions/OneHasOneDefinition.cjs.map +1 -1
  220. package/dist/production/src/model/definition/fieldDefinitions/OneHasOneDefinition.js.map +1 -1
  221. package/dist/production/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.cjs.map +1 -1
  222. package/dist/production/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js.map +1 -1
  223. package/dist/production/src/model/definition/index.cjs +1 -0
  224. package/dist/production/src/model/definition/index.cjs.map +1 -1
  225. package/dist/production/src/model/definition/index.js +2 -1
  226. package/dist/production/src/model/definition/index.js.map +1 -1
  227. package/dist/production/src/model/definition/internal/EntityRegistry.cjs.map +1 -1
  228. package/dist/production/src/model/definition/internal/EntityRegistry.js.map +1 -1
  229. package/dist/production/src/model/definition/internal/EnumRegistry.cjs.map +1 -1
  230. package/dist/production/src/model/definition/internal/EnumRegistry.js.map +1 -1
  231. package/dist/production/src/model/definition/internal/SchemaBuilder.cjs.map +1 -1
  232. package/dist/production/src/model/definition/internal/SchemaBuilder.js.map +1 -1
  233. package/dist/production/src/strict.cjs +20 -5
  234. package/dist/production/src/strict.cjs.map +1 -1
  235. package/dist/production/src/strict.js +20 -5
  236. package/dist/production/src/strict.js.map +1 -1
  237. package/dist/production/src/utils/filterEntityDefinition.cjs.map +1 -1
  238. package/dist/production/src/utils/filterEntityDefinition.js.map +1 -1
  239. package/dist/production/src/validation/index.cjs.map +1 -1
  240. package/dist/production/src/validation/index.js.map +1 -1
  241. package/dist/tests/cases/unit/numericColumn.test.d.ts +2 -0
  242. package/dist/tests/cases/unit/numericColumn.test.d.ts.map +1 -0
  243. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  244. package/dist/types/acl/builder/EntityPermissionsBuilder.d.ts +5 -5
  245. package/dist/types/acl/builder/EntityPermissionsBuilder.d.ts.map +1 -1
  246. package/dist/types/acl/builder/FieldPermissionsBuilder.d.ts +4 -4
  247. package/dist/types/acl/builder/FieldPermissionsBuilder.d.ts.map +1 -1
  248. package/dist/types/acl/builder/PermissionsBuilder.d.ts +4 -4
  249. package/dist/types/acl/builder/PermissionsBuilder.d.ts.map +1 -1
  250. package/dist/types/acl/definition/aclExtensions.d.ts +2 -2
  251. package/dist/types/acl/definition/aclExtensions.d.ts.map +1 -1
  252. package/dist/types/acl/definition/customPrimary.d.ts +2 -2
  253. package/dist/types/acl/definition/customPrimary.d.ts.map +1 -1
  254. package/dist/types/acl/definition/index.d.ts +5 -5
  255. package/dist/types/acl/definition/index.d.ts.map +1 -1
  256. package/dist/types/acl/definition/internal/AclFactory.d.ts +2 -2
  257. package/dist/types/acl/definition/internal/AclFactory.d.ts.map +1 -1
  258. package/dist/types/acl/definition/internal/EntityPredicateResolver.d.ts +1 -1
  259. package/dist/types/acl/definition/internal/EntityPredicateResolver.d.ts.map +1 -1
  260. package/dist/types/acl/definition/internal/createPredicateName.d.ts +1 -1
  261. package/dist/types/acl/definition/internal/createPredicateName.d.ts.map +1 -1
  262. package/dist/types/acl/definition/internal/stores.d.ts +3 -3
  263. package/dist/types/acl/definition/internal/stores.d.ts.map +1 -1
  264. package/dist/types/acl/definition/permissions.d.ts +4 -4
  265. package/dist/types/acl/definition/permissions.d.ts.map +1 -1
  266. package/dist/types/acl/definition/variables.d.ts +1 -1
  267. package/dist/types/acl/definition/variables.d.ts.map +1 -1
  268. package/dist/types/actions/definition/index.d.ts +2 -2
  269. package/dist/types/actions/definition/index.d.ts.map +1 -1
  270. package/dist/types/actions/definition/internal/store.d.ts +2 -2
  271. package/dist/types/actions/definition/internal/store.d.ts.map +1 -1
  272. package/dist/types/actions/definition/triggers.d.ts +2 -2
  273. package/dist/types/actions/definition/triggers.d.ts.map +1 -1
  274. package/dist/types/createSchema.d.ts +1 -1
  275. package/dist/types/createSchema.d.ts.map +1 -1
  276. package/dist/types/index.d.ts +19 -18
  277. package/dist/types/index.d.ts.map +1 -1
  278. package/dist/types/model/builder/ColumnBuilder.d.ts +1 -1
  279. package/dist/types/model/builder/ColumnBuilder.d.ts.map +1 -1
  280. package/dist/types/model/builder/EntityBuilder.d.ts +7 -7
  281. package/dist/types/model/builder/EntityBuilder.d.ts.map +1 -1
  282. package/dist/types/model/builder/FieldBuilder.d.ts +5 -5
  283. package/dist/types/model/builder/FieldBuilder.d.ts.map +1 -1
  284. package/dist/types/model/builder/ManyHasManyBuilder.d.ts +2 -2
  285. package/dist/types/model/builder/ManyHasManyBuilder.d.ts.map +1 -1
  286. package/dist/types/model/builder/ManyHasOneBuilder.d.ts +2 -2
  287. package/dist/types/model/builder/ManyHasOneBuilder.d.ts.map +1 -1
  288. package/dist/types/model/builder/OneHasManyBuilder.d.ts +2 -2
  289. package/dist/types/model/builder/OneHasManyBuilder.d.ts.map +1 -1
  290. package/dist/types/model/builder/OneHasOneBuilder.d.ts +2 -2
  291. package/dist/types/model/builder/OneHasOneBuilder.d.ts.map +1 -1
  292. package/dist/types/model/builder/SchemaBuilder.d.ts +2 -2
  293. package/dist/types/model/builder/SchemaBuilder.d.ts.map +1 -1
  294. package/dist/types/model/builder/SchemaBuilderInternal.d.ts +2 -2
  295. package/dist/types/model/builder/SchemaBuilderInternal.d.ts.map +1 -1
  296. package/dist/types/model/builder/internal/ColumnProcessor.d.ts +2 -2
  297. package/dist/types/model/builder/internal/ColumnProcessor.d.ts.map +1 -1
  298. package/dist/types/model/builder/internal/ManyHasManyProcessor.d.ts +2 -2
  299. package/dist/types/model/builder/internal/ManyHasManyProcessor.d.ts.map +1 -1
  300. package/dist/types/model/builder/internal/ManyHasOneProcessor.d.ts +2 -2
  301. package/dist/types/model/builder/internal/ManyHasOneProcessor.d.ts.map +1 -1
  302. package/dist/types/model/builder/internal/OneHasManyProcessor.d.ts +2 -2
  303. package/dist/types/model/builder/internal/OneHasManyProcessor.d.ts.map +1 -1
  304. package/dist/types/model/builder/internal/OneHasOneProcessor.d.ts +2 -2
  305. package/dist/types/model/builder/internal/OneHasOneProcessor.d.ts.map +1 -1
  306. package/dist/types/model/builder/types.d.ts +1 -1
  307. package/dist/types/model/builder/types.d.ts.map +1 -1
  308. package/dist/types/model/definition/EventLogDefinition.d.ts +1 -1
  309. package/dist/types/model/definition/EventLogDefinition.d.ts.map +1 -1
  310. package/dist/types/model/definition/IndexDefinition.d.ts +11 -2
  311. package/dist/types/model/definition/IndexDefinition.d.ts.map +1 -1
  312. package/dist/types/model/definition/OrderByDefinition.d.ts +1 -1
  313. package/dist/types/model/definition/OrderByDefinition.d.ts.map +1 -1
  314. package/dist/types/model/definition/UniqueDefinition.d.ts +1 -1
  315. package/dist/types/model/definition/UniqueDefinition.d.ts.map +1 -1
  316. package/dist/types/model/definition/ViewDefinition.d.ts +2 -2
  317. package/dist/types/model/definition/ViewDefinition.d.ts.map +1 -1
  318. package/dist/types/model/definition/context.d.ts +2 -2
  319. package/dist/types/model/definition/context.d.ts.map +1 -1
  320. package/dist/types/model/definition/extensions.d.ts +4 -4
  321. package/dist/types/model/definition/extensions.d.ts.map +1 -1
  322. package/dist/types/model/definition/fieldDefinitions/ColumnDefinition.d.ts +26 -3
  323. package/dist/types/model/definition/fieldDefinitions/ColumnDefinition.d.ts.map +1 -1
  324. package/dist/types/model/definition/fieldDefinitions/FieldDefinition.d.ts +1 -1
  325. package/dist/types/model/definition/fieldDefinitions/FieldDefinition.d.ts.map +1 -1
  326. package/dist/types/model/definition/fieldDefinitions/ManyHasManyDefinition.d.ts +2 -2
  327. package/dist/types/model/definition/fieldDefinitions/ManyHasManyDefinition.d.ts.map +1 -1
  328. package/dist/types/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.d.ts +2 -2
  329. package/dist/types/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.d.ts.map +1 -1
  330. package/dist/types/model/definition/fieldDefinitions/ManyHasOneDefinition.d.ts +2 -2
  331. package/dist/types/model/definition/fieldDefinitions/ManyHasOneDefinition.d.ts.map +1 -1
  332. package/dist/types/model/definition/fieldDefinitions/OneHasManyDefinition.d.ts +2 -2
  333. package/dist/types/model/definition/fieldDefinitions/OneHasManyDefinition.d.ts.map +1 -1
  334. package/dist/types/model/definition/fieldDefinitions/OneHasOneDefinition.d.ts +2 -2
  335. package/dist/types/model/definition/fieldDefinitions/OneHasOneDefinition.d.ts.map +1 -1
  336. package/dist/types/model/definition/fieldDefinitions/OneHasOneInverseDefinition.d.ts +3 -3
  337. package/dist/types/model/definition/fieldDefinitions/OneHasOneInverseDefinition.d.ts.map +1 -1
  338. package/dist/types/model/definition/fieldDefinitions/index.d.ts +8 -8
  339. package/dist/types/model/definition/fieldDefinitions/index.d.ts.map +1 -1
  340. package/dist/types/model/definition/index.d.ts +11 -11
  341. package/dist/types/model/definition/index.d.ts.map +1 -1
  342. package/dist/types/model/definition/internal/EntityRegistry.d.ts +1 -1
  343. package/dist/types/model/definition/internal/EntityRegistry.d.ts.map +1 -1
  344. package/dist/types/model/definition/internal/EnumRegistry.d.ts +1 -1
  345. package/dist/types/model/definition/internal/EnumRegistry.d.ts.map +1 -1
  346. package/dist/types/model/definition/internal/SchemaBuilder.d.ts +3 -3
  347. package/dist/types/model/definition/internal/SchemaBuilder.d.ts.map +1 -1
  348. package/dist/types/model/definition/internal/index.d.ts +3 -3
  349. package/dist/types/model/definition/internal/index.d.ts.map +1 -1
  350. package/dist/types/model/definition/types.d.ts +2 -2
  351. package/dist/types/model/definition/types.d.ts.map +1 -1
  352. package/dist/types/model/index.d.ts +8 -8
  353. package/dist/types/model/index.d.ts.map +1 -1
  354. package/dist/types/strict.d.ts +2 -0
  355. package/dist/types/strict.d.ts.map +1 -1
  356. package/dist/types/tsconfig.tsbuildinfo +1 -1
  357. package/dist/types/utils/filterEntityDefinition.d.ts +1 -1
  358. package/dist/types/utils/filterEntityDefinition.d.ts.map +1 -1
  359. package/dist/types/utils/index.d.ts +5 -5
  360. package/dist/types/utils/index.d.ts.map +1 -1
  361. package/package.json +3 -3
  362. package/src/acl/builder/EntityPermissionsBuilder.ts +6 -6
  363. package/src/acl/builder/FieldPermissionsBuilder.ts +4 -4
  364. package/src/acl/builder/PermissionOverrider.ts +1 -1
  365. package/src/acl/builder/PermissionsBuilder.ts +5 -5
  366. package/src/acl/definition/aclExtensions.ts +2 -2
  367. package/src/acl/definition/customPrimary.ts +3 -3
  368. package/src/acl/definition/index.ts +6 -6
  369. package/src/acl/definition/internal/AclFactory.ts +7 -7
  370. package/src/acl/definition/internal/EntityPredicateResolver.ts +5 -5
  371. package/src/acl/definition/internal/createPredicateName.ts +1 -1
  372. package/src/acl/definition/internal/stores.ts +3 -3
  373. package/src/acl/definition/permissions.ts +5 -5
  374. package/src/acl/definition/variables.ts +1 -1
  375. package/src/actions/definition/index.ts +3 -3
  376. package/src/actions/definition/internal/ActionsFactory.ts +4 -4
  377. package/src/actions/definition/internal/store.ts +2 -2
  378. package/src/actions/definition/triggers.ts +3 -3
  379. package/src/createSchema.ts +7 -6
  380. package/src/index.ts +12 -11
  381. package/src/model/builder/ColumnBuilder.ts +1 -1
  382. package/src/model/builder/EntityBuilder.ts +7 -7
  383. package/src/model/builder/FieldBuilder.ts +5 -5
  384. package/src/model/builder/ManyHasManyBuilder.ts +2 -2
  385. package/src/model/builder/ManyHasOneBuilder.ts +2 -2
  386. package/src/model/builder/OneHasManyBuilder.ts +2 -2
  387. package/src/model/builder/OneHasOneBuilder.ts +2 -2
  388. package/src/model/builder/SchemaBuilder.ts +4 -4
  389. package/src/model/builder/SchemaBuilderInternal.ts +9 -9
  390. package/src/model/builder/internal/ColumnProcessor.ts +2 -2
  391. package/src/model/builder/internal/ManyHasManyProcessor.ts +2 -2
  392. package/src/model/builder/internal/ManyHasOneProcessor.ts +2 -2
  393. package/src/model/builder/internal/OneHasManyProcessor.ts +2 -2
  394. package/src/model/builder/internal/OneHasOneProcessor.ts +2 -2
  395. package/src/model/builder/types.ts +1 -1
  396. package/src/model/definition/EventLogDefinition.ts +1 -1
  397. package/src/model/definition/IndexDefinition.ts +52 -12
  398. package/src/model/definition/OrderByDefinition.ts +2 -2
  399. package/src/model/definition/UniqueDefinition.ts +2 -2
  400. package/src/model/definition/ViewDefinition.ts +3 -3
  401. package/src/model/definition/context.ts +2 -2
  402. package/src/model/definition/extensions.ts +4 -4
  403. package/src/model/definition/fieldDefinitions/ColumnDefinition.ts +34 -3
  404. package/src/model/definition/fieldDefinitions/FieldDefinition.ts +1 -1
  405. package/src/model/definition/fieldDefinitions/ManyHasManyDefinition.ts +2 -2
  406. package/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.ts +2 -2
  407. package/src/model/definition/fieldDefinitions/ManyHasOneDefinition.ts +2 -2
  408. package/src/model/definition/fieldDefinitions/OneHasManyDefinition.ts +2 -2
  409. package/src/model/definition/fieldDefinitions/OneHasOneDefinition.ts +2 -2
  410. package/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.ts +3 -3
  411. package/src/model/definition/fieldDefinitions/index.ts +8 -8
  412. package/src/model/definition/index.ts +13 -13
  413. package/src/model/definition/internal/EntityRegistry.ts +1 -1
  414. package/src/model/definition/internal/EnumRegistry.ts +1 -1
  415. package/src/model/definition/internal/SchemaBuilder.ts +8 -8
  416. package/src/model/definition/internal/index.ts +3 -3
  417. package/src/model/definition/types.ts +2 -2
  418. package/src/model/index.ts +8 -8
  419. package/src/strict.ts +29 -4
  420. package/src/utils/filterEntityDefinition.ts +1 -1
  421. package/src/utils/index.ts +5 -5
  422. package/src/validation/index.ts +3 -3
  423. package/tests/cases/unit/createSchema.test.ts +93 -2
  424. package/tests/cases/unit/extendEntity.test.ts +3 -3
  425. package/tests/cases/unit/numericColumn.test.ts +31 -0
  426. package/tests/cases/unit/orderBy.test.ts +1 -1
  427. package/tests/cases/unit/readAclDefinitions.test.ts +1 -1
  428. package/tests/cases/unit/readActions.test.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"FieldPermissionsBuilder.cjs","sources":["../../../../../../packages/schema-definition/src/acl/builder/FieldPermissionsBuilder.ts"],"sourcesContent":["import FieldSelector from './FieldSelector'\nimport EntityPermissionsBuilder from './EntityPermissionsBuilder'\nimport { Acl, Model, Writable } from '@contember/schema'\nimport EntitySelector from './EntitySelector'\nimport { PermissionsBuilder } from './PermissionsBuilder'\n\nexport default class FieldPermissionsBuilder {\n\tpublic constructor(\n\t\tpublic entityPermissionsBuilder: EntityPermissionsBuilder,\n\t\tprivate readonly fields: [Model.Entity, Model.AnyField][],\n\t) {}\n\n\tget builder(): PermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.builder\n\t}\n\n\tget schema(): Model.Schema {\n\t\treturn this.entityPermissionsBuilder.schema\n\t}\n\n\tget permissions(): Acl.Permissions {\n\t\treturn this.entityPermissionsBuilder.permissions\n\t}\n\n\tpublic allowCreate(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.create], predicate)\n\t}\n\n\tpublic allowRead(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.read], predicate)\n\t}\n\n\tpublic allowUpdate(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.update], predicate)\n\t}\n\n\tpublic allowAll(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.create, Acl.Operation.read, Acl.Operation.update], predicate)\n\t}\n\n\tpublic allow(\n\t\toperations: (Acl.Operation.create | Acl.Operation.read | Acl.Operation.update)[],\n\t\tpredicate: Acl.Predicate = true,\n\t): FieldPermissionsBuilder {\n\t\tconst permissions: Writable<Acl.Permissions> = {}\n\t\tfor (const [entity, field] of this.fields) {\n\t\t\tif (!permissions[entity.name]) {\n\t\t\t\tpermissions[entity.name] = { operations: {}, predicates: {} }\n\t\t\t}\n\t\t\tconst entityOperations: Writable<Acl.EntityOperations> = permissions[entity.name].operations\n\t\t\tfor (const op of operations) {\n\t\t\t\tentityOperations[op] = {\n\t\t\t\t\t...(permissions[entity.name].operations[op] || {}),\n\t\t\t\t\t[field.name]: predicate,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new FieldPermissionsBuilder(this.entityPermissionsBuilder.add(permissions), this.fields)\n\t}\n\n\tpublic onEntity(entitySelector: EntitySelector | string | string[]): EntityPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEntity(entitySelector)\n\t}\n\n\tpublic onEveryEntity(): EntityPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEveryEntity()\n\t}\n\n\tpublic onField(fieldSelector: FieldSelector | string | string[]) {\n\t\treturn this.entityPermissionsBuilder.onField(fieldSelector)\n\t}\n\n\tpublic onEveryField(): FieldPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEveryField()\n\t}\n}\n"],"names":["Acl"],"mappings":";;AAMA,MAAqB,wBAAwB;AAAA,EACrC,YACC,0BACU,QAChB;AAFM,SAAA,2BAAA;AACU,SAAA,SAAA;AAAA,EACf;AAAA,EAEH,IAAI,UAA8B;AACjC,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEA,IAAI,SAAuB;AAC1B,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEA,IAAI,cAA+B;AAClC,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEO,YAAY,YAA2B,MAA+B;AAC5E,WAAO,KAAK,MAAM,CAACA,OAAAA,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EACpD;AAAA,EAEO,UAAU,YAA2B,MAA+B;AAC1E,WAAO,KAAK,MAAM,CAACA,OAAAA,IAAI,UAAU,IAAI,GAAG,SAAS;AAAA,EAClD;AAAA,EAEO,YAAY,YAA2B,MAA+B;AAC5E,WAAO,KAAK,MAAM,CAACA,OAAAA,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EACpD;AAAA,EAEO,SAAS,YAA2B,MAA+B;AACzE,WAAO,KAAK,MAAM,CAACA,OAAAA,IAAI,UAAU,QAAQA,OAAAA,IAAI,UAAU,MAAMA,OAAAA,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EAC9F;AAAA,EAEO,MACN,YACA,YAA2B,MACD;AAC1B,UAAM,cAAyC,CAAA;AAC/C,eAAW,CAAC,QAAQ,KAAK,KAAK,KAAK,QAAQ;AAC1C,UAAI,CAAC,YAAY,OAAO,IAAI,GAAG;AAC9B,oBAAY,OAAO,IAAI,IAAI,EAAE,YAAY,CAAA,GAAI,YAAY,GAAC;AAAA,MAC3D;AACA,YAAM,mBAAmD,YAAY,OAAO,IAAI,EAAE;AAClF,iBAAW,MAAM,YAAY;AAC5B,yBAAiB,EAAE,IAAI;AAAA,UACtB,GAAI,YAAY,OAAO,IAAI,EAAE,WAAW,EAAE,KAAK,CAAA;AAAA,UAC/C,CAAC,MAAM,IAAI,GAAG;AAAA,QAAA;AAAA,MAEhB;AAAA,IACD;AACA,WAAO,IAAI,wBAAwB,KAAK,yBAAyB,IAAI,WAAW,GAAG,KAAK,MAAM;AAAA,EAC/F;AAAA,EAEO,SAAS,gBAA8E;AAC7F,WAAO,KAAK,yBAAyB,SAAS,cAAc;AAAA,EAC7D;AAAA,EAEO,gBAA0C;AAChD,WAAO,KAAK,yBAAyB,cAAA;AAAA,EACtC;AAAA,EAEO,QAAQ,eAAkD;AAChE,WAAO,KAAK,yBAAyB,QAAQ,aAAa;AAAA,EAC3D;AAAA,EAEO,eAAwC;AAC9C,WAAO,KAAK,yBAAyB,aAAA;AAAA,EACtC;AACD;;"}
1
+ {"version":3,"file":"FieldPermissionsBuilder.cjs","sources":["../../../../../../packages/schema-definition/src/acl/builder/FieldPermissionsBuilder.ts"],"sourcesContent":["import FieldSelector from './FieldSelector.js'\nimport EntityPermissionsBuilder from './EntityPermissionsBuilder.js'\nimport { Acl, Model, Writable } from '@contember/schema'\nimport EntitySelector from './EntitySelector.js'\nimport { PermissionsBuilder } from './PermissionsBuilder.js'\n\nexport default class FieldPermissionsBuilder {\n\tpublic constructor(\n\t\tpublic entityPermissionsBuilder: EntityPermissionsBuilder,\n\t\tprivate readonly fields: [Model.Entity, Model.AnyField][],\n\t) {}\n\n\tget builder(): PermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.builder\n\t}\n\n\tget schema(): Model.Schema {\n\t\treturn this.entityPermissionsBuilder.schema\n\t}\n\n\tget permissions(): Acl.Permissions {\n\t\treturn this.entityPermissionsBuilder.permissions\n\t}\n\n\tpublic allowCreate(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.create], predicate)\n\t}\n\n\tpublic allowRead(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.read], predicate)\n\t}\n\n\tpublic allowUpdate(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.update], predicate)\n\t}\n\n\tpublic allowAll(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.create, Acl.Operation.read, Acl.Operation.update], predicate)\n\t}\n\n\tpublic allow(\n\t\toperations: (Acl.Operation.create | Acl.Operation.read | Acl.Operation.update)[],\n\t\tpredicate: Acl.Predicate = true,\n\t): FieldPermissionsBuilder {\n\t\tconst permissions: Writable<Acl.Permissions> = {}\n\t\tfor (const [entity, field] of this.fields) {\n\t\t\tif (!permissions[entity.name]) {\n\t\t\t\tpermissions[entity.name] = { operations: {}, predicates: {} }\n\t\t\t}\n\t\t\tconst entityOperations: Writable<Acl.EntityOperations> = permissions[entity.name].operations\n\t\t\tfor (const op of operations) {\n\t\t\t\tentityOperations[op] = {\n\t\t\t\t\t...(permissions[entity.name].operations[op] || {}),\n\t\t\t\t\t[field.name]: predicate,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new FieldPermissionsBuilder(this.entityPermissionsBuilder.add(permissions), this.fields)\n\t}\n\n\tpublic onEntity(entitySelector: EntitySelector | string | string[]): EntityPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEntity(entitySelector)\n\t}\n\n\tpublic onEveryEntity(): EntityPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEveryEntity()\n\t}\n\n\tpublic onField(fieldSelector: FieldSelector | string | string[]) {\n\t\treturn this.entityPermissionsBuilder.onField(fieldSelector)\n\t}\n\n\tpublic onEveryField(): FieldPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEveryField()\n\t}\n}\n"],"names":["Acl"],"mappings":";;AAMA,MAAqB,wBAAwB;AAAA,EACrC,YACC,0BACU,QAChB;AAFM,SAAA,2BAAA;AACU,SAAA,SAAA;AAAA,EACf;AAAA,EAEH,IAAI,UAA8B;AACjC,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEA,IAAI,SAAuB;AAC1B,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEA,IAAI,cAA+B;AAClC,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEO,YAAY,YAA2B,MAA+B;AAC5E,WAAO,KAAK,MAAM,CAACA,OAAAA,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EACpD;AAAA,EAEO,UAAU,YAA2B,MAA+B;AAC1E,WAAO,KAAK,MAAM,CAACA,OAAAA,IAAI,UAAU,IAAI,GAAG,SAAS;AAAA,EAClD;AAAA,EAEO,YAAY,YAA2B,MAA+B;AAC5E,WAAO,KAAK,MAAM,CAACA,OAAAA,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EACpD;AAAA,EAEO,SAAS,YAA2B,MAA+B;AACzE,WAAO,KAAK,MAAM,CAACA,OAAAA,IAAI,UAAU,QAAQA,OAAAA,IAAI,UAAU,MAAMA,OAAAA,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EAC9F;AAAA,EAEO,MACN,YACA,YAA2B,MACD;AAC1B,UAAM,cAAyC,CAAA;AAC/C,eAAW,CAAC,QAAQ,KAAK,KAAK,KAAK,QAAQ;AAC1C,UAAI,CAAC,YAAY,OAAO,IAAI,GAAG;AAC9B,oBAAY,OAAO,IAAI,IAAI,EAAE,YAAY,CAAA,GAAI,YAAY,GAAC;AAAA,MAC3D;AACA,YAAM,mBAAmD,YAAY,OAAO,IAAI,EAAE;AAClF,iBAAW,MAAM,YAAY;AAC5B,yBAAiB,EAAE,IAAI;AAAA,UACtB,GAAI,YAAY,OAAO,IAAI,EAAE,WAAW,EAAE,KAAK,CAAA;AAAA,UAC/C,CAAC,MAAM,IAAI,GAAG;AAAA,QAAA;AAAA,MAEhB;AAAA,IACD;AACA,WAAO,IAAI,wBAAwB,KAAK,yBAAyB,IAAI,WAAW,GAAG,KAAK,MAAM;AAAA,EAC/F;AAAA,EAEO,SAAS,gBAA8E;AAC7F,WAAO,KAAK,yBAAyB,SAAS,cAAc;AAAA,EAC7D;AAAA,EAEO,gBAA0C;AAChD,WAAO,KAAK,yBAAyB,cAAA;AAAA,EACtC;AAAA,EAEO,QAAQ,eAAkD;AAChE,WAAO,KAAK,yBAAyB,QAAQ,aAAa;AAAA,EAC3D;AAAA,EAEO,eAAwC;AAC9C,WAAO,KAAK,yBAAyB,aAAA;AAAA,EACtC;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FieldPermissionsBuilder.js","sources":["../../../../../../packages/schema-definition/src/acl/builder/FieldPermissionsBuilder.ts"],"sourcesContent":["import FieldSelector from './FieldSelector'\nimport EntityPermissionsBuilder from './EntityPermissionsBuilder'\nimport { Acl, Model, Writable } from '@contember/schema'\nimport EntitySelector from './EntitySelector'\nimport { PermissionsBuilder } from './PermissionsBuilder'\n\nexport default class FieldPermissionsBuilder {\n\tpublic constructor(\n\t\tpublic entityPermissionsBuilder: EntityPermissionsBuilder,\n\t\tprivate readonly fields: [Model.Entity, Model.AnyField][],\n\t) {}\n\n\tget builder(): PermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.builder\n\t}\n\n\tget schema(): Model.Schema {\n\t\treturn this.entityPermissionsBuilder.schema\n\t}\n\n\tget permissions(): Acl.Permissions {\n\t\treturn this.entityPermissionsBuilder.permissions\n\t}\n\n\tpublic allowCreate(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.create], predicate)\n\t}\n\n\tpublic allowRead(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.read], predicate)\n\t}\n\n\tpublic allowUpdate(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.update], predicate)\n\t}\n\n\tpublic allowAll(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.create, Acl.Operation.read, Acl.Operation.update], predicate)\n\t}\n\n\tpublic allow(\n\t\toperations: (Acl.Operation.create | Acl.Operation.read | Acl.Operation.update)[],\n\t\tpredicate: Acl.Predicate = true,\n\t): FieldPermissionsBuilder {\n\t\tconst permissions: Writable<Acl.Permissions> = {}\n\t\tfor (const [entity, field] of this.fields) {\n\t\t\tif (!permissions[entity.name]) {\n\t\t\t\tpermissions[entity.name] = { operations: {}, predicates: {} }\n\t\t\t}\n\t\t\tconst entityOperations: Writable<Acl.EntityOperations> = permissions[entity.name].operations\n\t\t\tfor (const op of operations) {\n\t\t\t\tentityOperations[op] = {\n\t\t\t\t\t...(permissions[entity.name].operations[op] || {}),\n\t\t\t\t\t[field.name]: predicate,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new FieldPermissionsBuilder(this.entityPermissionsBuilder.add(permissions), this.fields)\n\t}\n\n\tpublic onEntity(entitySelector: EntitySelector | string | string[]): EntityPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEntity(entitySelector)\n\t}\n\n\tpublic onEveryEntity(): EntityPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEveryEntity()\n\t}\n\n\tpublic onField(fieldSelector: FieldSelector | string | string[]) {\n\t\treturn this.entityPermissionsBuilder.onField(fieldSelector)\n\t}\n\n\tpublic onEveryField(): FieldPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEveryField()\n\t}\n}\n"],"names":[],"mappings":";AAMA,MAAqB,wBAAwB;AAAA,EACrC,YACC,0BACU,QAChB;AAFM,SAAA,2BAAA;AACU,SAAA,SAAA;AAAA,EACf;AAAA,EAEH,IAAI,UAA8B;AACjC,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEA,IAAI,SAAuB;AAC1B,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEA,IAAI,cAA+B;AAClC,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEO,YAAY,YAA2B,MAA+B;AAC5E,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EACpD;AAAA,EAEO,UAAU,YAA2B,MAA+B;AAC1E,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,IAAI,GAAG,SAAS;AAAA,EAClD;AAAA,EAEO,YAAY,YAA2B,MAA+B;AAC5E,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EACpD;AAAA,EAEO,SAAS,YAA2B,MAA+B;AACzE,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,QAAQ,IAAI,UAAU,MAAM,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EAC9F;AAAA,EAEO,MACN,YACA,YAA2B,MACD;AAC1B,UAAM,cAAyC,CAAA;AAC/C,eAAW,CAAC,QAAQ,KAAK,KAAK,KAAK,QAAQ;AAC1C,UAAI,CAAC,YAAY,OAAO,IAAI,GAAG;AAC9B,oBAAY,OAAO,IAAI,IAAI,EAAE,YAAY,CAAA,GAAI,YAAY,GAAC;AAAA,MAC3D;AACA,YAAM,mBAAmD,YAAY,OAAO,IAAI,EAAE;AAClF,iBAAW,MAAM,YAAY;AAC5B,yBAAiB,EAAE,IAAI;AAAA,UACtB,GAAI,YAAY,OAAO,IAAI,EAAE,WAAW,EAAE,KAAK,CAAA;AAAA,UAC/C,CAAC,MAAM,IAAI,GAAG;AAAA,QAAA;AAAA,MAEhB;AAAA,IACD;AACA,WAAO,IAAI,wBAAwB,KAAK,yBAAyB,IAAI,WAAW,GAAG,KAAK,MAAM;AAAA,EAC/F;AAAA,EAEO,SAAS,gBAA8E;AAC7F,WAAO,KAAK,yBAAyB,SAAS,cAAc;AAAA,EAC7D;AAAA,EAEO,gBAA0C;AAChD,WAAO,KAAK,yBAAyB,cAAA;AAAA,EACtC;AAAA,EAEO,QAAQ,eAAkD;AAChE,WAAO,KAAK,yBAAyB,QAAQ,aAAa;AAAA,EAC3D;AAAA,EAEO,eAAwC;AAC9C,WAAO,KAAK,yBAAyB,aAAA;AAAA,EACtC;AACD;"}
1
+ {"version":3,"file":"FieldPermissionsBuilder.js","sources":["../../../../../../packages/schema-definition/src/acl/builder/FieldPermissionsBuilder.ts"],"sourcesContent":["import FieldSelector from './FieldSelector.js'\nimport EntityPermissionsBuilder from './EntityPermissionsBuilder.js'\nimport { Acl, Model, Writable } from '@contember/schema'\nimport EntitySelector from './EntitySelector.js'\nimport { PermissionsBuilder } from './PermissionsBuilder.js'\n\nexport default class FieldPermissionsBuilder {\n\tpublic constructor(\n\t\tpublic entityPermissionsBuilder: EntityPermissionsBuilder,\n\t\tprivate readonly fields: [Model.Entity, Model.AnyField][],\n\t) {}\n\n\tget builder(): PermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.builder\n\t}\n\n\tget schema(): Model.Schema {\n\t\treturn this.entityPermissionsBuilder.schema\n\t}\n\n\tget permissions(): Acl.Permissions {\n\t\treturn this.entityPermissionsBuilder.permissions\n\t}\n\n\tpublic allowCreate(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.create], predicate)\n\t}\n\n\tpublic allowRead(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.read], predicate)\n\t}\n\n\tpublic allowUpdate(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.update], predicate)\n\t}\n\n\tpublic allowAll(predicate: Acl.Predicate = true): FieldPermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.create, Acl.Operation.read, Acl.Operation.update], predicate)\n\t}\n\n\tpublic allow(\n\t\toperations: (Acl.Operation.create | Acl.Operation.read | Acl.Operation.update)[],\n\t\tpredicate: Acl.Predicate = true,\n\t): FieldPermissionsBuilder {\n\t\tconst permissions: Writable<Acl.Permissions> = {}\n\t\tfor (const [entity, field] of this.fields) {\n\t\t\tif (!permissions[entity.name]) {\n\t\t\t\tpermissions[entity.name] = { operations: {}, predicates: {} }\n\t\t\t}\n\t\t\tconst entityOperations: Writable<Acl.EntityOperations> = permissions[entity.name].operations\n\t\t\tfor (const op of operations) {\n\t\t\t\tentityOperations[op] = {\n\t\t\t\t\t...(permissions[entity.name].operations[op] || {}),\n\t\t\t\t\t[field.name]: predicate,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new FieldPermissionsBuilder(this.entityPermissionsBuilder.add(permissions), this.fields)\n\t}\n\n\tpublic onEntity(entitySelector: EntitySelector | string | string[]): EntityPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEntity(entitySelector)\n\t}\n\n\tpublic onEveryEntity(): EntityPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEveryEntity()\n\t}\n\n\tpublic onField(fieldSelector: FieldSelector | string | string[]) {\n\t\treturn this.entityPermissionsBuilder.onField(fieldSelector)\n\t}\n\n\tpublic onEveryField(): FieldPermissionsBuilder {\n\t\treturn this.entityPermissionsBuilder.onEveryField()\n\t}\n}\n"],"names":[],"mappings":";AAMA,MAAqB,wBAAwB;AAAA,EACrC,YACC,0BACU,QAChB;AAFM,SAAA,2BAAA;AACU,SAAA,SAAA;AAAA,EACf;AAAA,EAEH,IAAI,UAA8B;AACjC,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEA,IAAI,SAAuB;AAC1B,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEA,IAAI,cAA+B;AAClC,WAAO,KAAK,yBAAyB;AAAA,EACtC;AAAA,EAEO,YAAY,YAA2B,MAA+B;AAC5E,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EACpD;AAAA,EAEO,UAAU,YAA2B,MAA+B;AAC1E,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,IAAI,GAAG,SAAS;AAAA,EAClD;AAAA,EAEO,YAAY,YAA2B,MAA+B;AAC5E,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EACpD;AAAA,EAEO,SAAS,YAA2B,MAA+B;AACzE,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,QAAQ,IAAI,UAAU,MAAM,IAAI,UAAU,MAAM,GAAG,SAAS;AAAA,EAC9F;AAAA,EAEO,MACN,YACA,YAA2B,MACD;AAC1B,UAAM,cAAyC,CAAA;AAC/C,eAAW,CAAC,QAAQ,KAAK,KAAK,KAAK,QAAQ;AAC1C,UAAI,CAAC,YAAY,OAAO,IAAI,GAAG;AAC9B,oBAAY,OAAO,IAAI,IAAI,EAAE,YAAY,CAAA,GAAI,YAAY,GAAC;AAAA,MAC3D;AACA,YAAM,mBAAmD,YAAY,OAAO,IAAI,EAAE;AAClF,iBAAW,MAAM,YAAY;AAC5B,yBAAiB,EAAE,IAAI;AAAA,UACtB,GAAI,YAAY,OAAO,IAAI,EAAE,WAAW,EAAE,KAAK,CAAA;AAAA,UAC/C,CAAC,MAAM,IAAI,GAAG;AAAA,QAAA;AAAA,MAEhB;AAAA,IACD;AACA,WAAO,IAAI,wBAAwB,KAAK,yBAAyB,IAAI,WAAW,GAAG,KAAK,MAAM;AAAA,EAC/F;AAAA,EAEO,SAAS,gBAA8E;AAC7F,WAAO,KAAK,yBAAyB,SAAS,cAAc;AAAA,EAC7D;AAAA,EAEO,gBAA0C;AAChD,WAAO,KAAK,yBAAyB,cAAA;AAAA,EACtC;AAAA,EAEO,QAAQ,eAAkD;AAChE,WAAO,KAAK,yBAAyB,QAAQ,aAAa;AAAA,EAC3D;AAAA,EAEO,eAAwC;AAC9C,WAAO,KAAK,yBAAyB,aAAA;AAAA,EACtC;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionOverrider.cjs","sources":["../../../../../../packages/schema-definition/src/acl/builder/PermissionOverrider.ts"],"sourcesContent":["import { Acl } from '@contember/schema'\nimport { tuple } from '../../utils'\n\nexport default class PermissionOverrider {\n\tpublic override(original: Acl.Permissions, overrides: Acl.Permissions): Acl.Permissions {\n\t\treturn Object.entries({ ...overrides, ...original })\n\t\t\t.map(([key, value]) => {\n\t\t\t\tif (overrides[key]) {\n\t\t\t\t\treturn tuple(key, this.overrideEntityPermissions(value, overrides[key]))\n\t\t\t\t}\n\t\t\t\treturn tuple(key, value)\n\t\t\t})\n\t\t\t.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n\t}\n\n\tprivate overrideEntityPermissions(\n\t\toriginal: Acl.EntityPermissions,\n\t\toverrides: Acl.EntityPermissions,\n\t): Acl.EntityPermissions {\n\t\treturn {\n\t\t\tpredicates: { ...original.predicates, ...overrides.predicates },\n\t\t\toperations: {\n\t\t\t\tcreate: { ...(original.operations.create || {}), ...(overrides.operations.create || {}) },\n\t\t\t\tread: { ...(original.operations.read || {}), ...(overrides.operations.read || {}) },\n\t\t\t\tupdate: { ...(original.operations.update || {}), ...(overrides.operations.update || {}) },\n\t\t\t\t...(original.operations.delete === undefined && overrides.operations.delete === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\tdelete: overrides.operations.delete ?? original.operations.delete,\n\t\t\t\t\t}),\n\t\t\t\t...(original.operations.customPrimary === undefined && overrides.operations.customPrimary === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\tcustomPrimary: overrides.operations.customPrimary ?? original.operations.customPrimary,\n\t\t\t\t\t}),\n\t\t\t\t...(original.operations.noRoot || overrides.operations.noRoot\n\t\t\t\t\t? {\n\t\t\t\t\t\tnoRoot: [\n\t\t\t\t\t\t\t...(original.operations.noRoot || []),\n\t\t\t\t\t\t\t...(overrides.operations.noRoot || []),\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["tuple"],"mappings":";;;AAGA,MAAqB,oBAAoB;AAAA,EACjC,SAAS,UAA2B,WAA6C;AACvF,WAAO,OAAO,QAAQ,EAAE,GAAG,WAAW,GAAG,UAAU,EACjD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACtB,UAAI,UAAU,GAAG,GAAG;AACnB,eAAOA,MAAAA,MAAM,KAAK,KAAK,0BAA0B,OAAO,UAAU,GAAG,CAAC,CAAC;AAAA,MACxE;AACA,aAAOA,MAAAA,MAAM,KAAK,KAAK;AAAA,IACxB,CAAC,EACA,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAA,IAAU,CAAA,CAAE;AAAA,EAC/D;AAAA,EAEQ,0BACP,UACA,WACwB;AACxB,WAAO;AAAA,MACN,YAAY,EAAE,GAAG,SAAS,YAAY,GAAG,UAAU,WAAA;AAAA,MACnD,YAAY;AAAA,QACX,QAAQ,EAAE,GAAI,SAAS,WAAW,UAAU,IAAK,GAAI,UAAU,WAAW,UAAU,GAAC;AAAA,QACrF,MAAM,EAAE,GAAI,SAAS,WAAW,QAAQ,IAAK,GAAI,UAAU,WAAW,QAAQ,GAAC;AAAA,QAC/E,QAAQ,EAAE,GAAI,SAAS,WAAW,UAAU,IAAK,GAAI,UAAU,WAAW,UAAU,GAAC;AAAA,QACrF,GAAI,SAAS,WAAW,WAAW,UAAa,UAAU,WAAW,WAAW,SAC7E,KACA;AAAA,UACD,QAAQ,UAAU,WAAW,UAAU,SAAS,WAAW;AAAA,QAAA;AAAA,QAE7D,GAAI,SAAS,WAAW,kBAAkB,UAAa,UAAU,WAAW,kBAAkB,SAC3F,KACA;AAAA,UACD,eAAe,UAAU,WAAW,iBAAiB,SAAS,WAAW;AAAA,QAAA;AAAA,QAE3E,GAAI,SAAS,WAAW,UAAU,UAAU,WAAW,SACpD;AAAA,UACD,QAAQ;AAAA,YACP,GAAI,SAAS,WAAW,UAAU,CAAA;AAAA,YAClC,GAAI,UAAU,WAAW,UAAU,CAAA;AAAA,UAAC;AAAA,QACrC,IAEC,CAAA;AAAA,MAAC;AAAA,IACL;AAAA,EAEF;AACD;;"}
1
+ {"version":3,"file":"PermissionOverrider.cjs","sources":["../../../../../../packages/schema-definition/src/acl/builder/PermissionOverrider.ts"],"sourcesContent":["import { Acl } from '@contember/schema'\nimport { tuple } from '../../utils/index.js'\n\nexport default class PermissionOverrider {\n\tpublic override(original: Acl.Permissions, overrides: Acl.Permissions): Acl.Permissions {\n\t\treturn Object.entries({ ...overrides, ...original })\n\t\t\t.map(([key, value]) => {\n\t\t\t\tif (overrides[key]) {\n\t\t\t\t\treturn tuple(key, this.overrideEntityPermissions(value, overrides[key]))\n\t\t\t\t}\n\t\t\t\treturn tuple(key, value)\n\t\t\t})\n\t\t\t.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n\t}\n\n\tprivate overrideEntityPermissions(\n\t\toriginal: Acl.EntityPermissions,\n\t\toverrides: Acl.EntityPermissions,\n\t): Acl.EntityPermissions {\n\t\treturn {\n\t\t\tpredicates: { ...original.predicates, ...overrides.predicates },\n\t\t\toperations: {\n\t\t\t\tcreate: { ...(original.operations.create || {}), ...(overrides.operations.create || {}) },\n\t\t\t\tread: { ...(original.operations.read || {}), ...(overrides.operations.read || {}) },\n\t\t\t\tupdate: { ...(original.operations.update || {}), ...(overrides.operations.update || {}) },\n\t\t\t\t...(original.operations.delete === undefined && overrides.operations.delete === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\tdelete: overrides.operations.delete ?? original.operations.delete,\n\t\t\t\t\t}),\n\t\t\t\t...(original.operations.customPrimary === undefined && overrides.operations.customPrimary === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\tcustomPrimary: overrides.operations.customPrimary ?? original.operations.customPrimary,\n\t\t\t\t\t}),\n\t\t\t\t...(original.operations.noRoot || overrides.operations.noRoot\n\t\t\t\t\t? {\n\t\t\t\t\t\tnoRoot: [\n\t\t\t\t\t\t\t...(original.operations.noRoot || []),\n\t\t\t\t\t\t\t...(overrides.operations.noRoot || []),\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["tuple"],"mappings":";;;AAGA,MAAqB,oBAAoB;AAAA,EACjC,SAAS,UAA2B,WAA6C;AACvF,WAAO,OAAO,QAAQ,EAAE,GAAG,WAAW,GAAG,UAAU,EACjD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACtB,UAAI,UAAU,GAAG,GAAG;AACnB,eAAOA,MAAAA,MAAM,KAAK,KAAK,0BAA0B,OAAO,UAAU,GAAG,CAAC,CAAC;AAAA,MACxE;AACA,aAAOA,MAAAA,MAAM,KAAK,KAAK;AAAA,IACxB,CAAC,EACA,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAA,IAAU,CAAA,CAAE;AAAA,EAC/D;AAAA,EAEQ,0BACP,UACA,WACwB;AACxB,WAAO;AAAA,MACN,YAAY,EAAE,GAAG,SAAS,YAAY,GAAG,UAAU,WAAA;AAAA,MACnD,YAAY;AAAA,QACX,QAAQ,EAAE,GAAI,SAAS,WAAW,UAAU,IAAK,GAAI,UAAU,WAAW,UAAU,GAAC;AAAA,QACrF,MAAM,EAAE,GAAI,SAAS,WAAW,QAAQ,IAAK,GAAI,UAAU,WAAW,QAAQ,GAAC;AAAA,QAC/E,QAAQ,EAAE,GAAI,SAAS,WAAW,UAAU,IAAK,GAAI,UAAU,WAAW,UAAU,GAAC;AAAA,QACrF,GAAI,SAAS,WAAW,WAAW,UAAa,UAAU,WAAW,WAAW,SAC7E,KACA;AAAA,UACD,QAAQ,UAAU,WAAW,UAAU,SAAS,WAAW;AAAA,QAAA;AAAA,QAE7D,GAAI,SAAS,WAAW,kBAAkB,UAAa,UAAU,WAAW,kBAAkB,SAC3F,KACA;AAAA,UACD,eAAe,UAAU,WAAW,iBAAiB,SAAS,WAAW;AAAA,QAAA;AAAA,QAE3E,GAAI,SAAS,WAAW,UAAU,UAAU,WAAW,SACpD;AAAA,UACD,QAAQ;AAAA,YACP,GAAI,SAAS,WAAW,UAAU,CAAA;AAAA,YAClC,GAAI,UAAU,WAAW,UAAU,CAAA;AAAA,UAAC;AAAA,QACrC,IAEC,CAAA;AAAA,MAAC;AAAA,IACL;AAAA,EAEF;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionOverrider.js","sources":["../../../../../../packages/schema-definition/src/acl/builder/PermissionOverrider.ts"],"sourcesContent":["import { Acl } from '@contember/schema'\nimport { tuple } from '../../utils'\n\nexport default class PermissionOverrider {\n\tpublic override(original: Acl.Permissions, overrides: Acl.Permissions): Acl.Permissions {\n\t\treturn Object.entries({ ...overrides, ...original })\n\t\t\t.map(([key, value]) => {\n\t\t\t\tif (overrides[key]) {\n\t\t\t\t\treturn tuple(key, this.overrideEntityPermissions(value, overrides[key]))\n\t\t\t\t}\n\t\t\t\treturn tuple(key, value)\n\t\t\t})\n\t\t\t.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n\t}\n\n\tprivate overrideEntityPermissions(\n\t\toriginal: Acl.EntityPermissions,\n\t\toverrides: Acl.EntityPermissions,\n\t): Acl.EntityPermissions {\n\t\treturn {\n\t\t\tpredicates: { ...original.predicates, ...overrides.predicates },\n\t\t\toperations: {\n\t\t\t\tcreate: { ...(original.operations.create || {}), ...(overrides.operations.create || {}) },\n\t\t\t\tread: { ...(original.operations.read || {}), ...(overrides.operations.read || {}) },\n\t\t\t\tupdate: { ...(original.operations.update || {}), ...(overrides.operations.update || {}) },\n\t\t\t\t...(original.operations.delete === undefined && overrides.operations.delete === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\tdelete: overrides.operations.delete ?? original.operations.delete,\n\t\t\t\t\t}),\n\t\t\t\t...(original.operations.customPrimary === undefined && overrides.operations.customPrimary === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\tcustomPrimary: overrides.operations.customPrimary ?? original.operations.customPrimary,\n\t\t\t\t\t}),\n\t\t\t\t...(original.operations.noRoot || overrides.operations.noRoot\n\t\t\t\t\t? {\n\t\t\t\t\t\tnoRoot: [\n\t\t\t\t\t\t\t...(original.operations.noRoot || []),\n\t\t\t\t\t\t\t...(overrides.operations.noRoot || []),\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;AAGA,MAAqB,oBAAoB;AAAA,EACjC,SAAS,UAA2B,WAA6C;AACvF,WAAO,OAAO,QAAQ,EAAE,GAAG,WAAW,GAAG,UAAU,EACjD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACtB,UAAI,UAAU,GAAG,GAAG;AACnB,eAAO,MAAM,KAAK,KAAK,0BAA0B,OAAO,UAAU,GAAG,CAAC,CAAC;AAAA,MACxE;AACA,aAAO,MAAM,KAAK,KAAK;AAAA,IACxB,CAAC,EACA,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAA,IAAU,CAAA,CAAE;AAAA,EAC/D;AAAA,EAEQ,0BACP,UACA,WACwB;AACxB,WAAO;AAAA,MACN,YAAY,EAAE,GAAG,SAAS,YAAY,GAAG,UAAU,WAAA;AAAA,MACnD,YAAY;AAAA,QACX,QAAQ,EAAE,GAAI,SAAS,WAAW,UAAU,IAAK,GAAI,UAAU,WAAW,UAAU,GAAC;AAAA,QACrF,MAAM,EAAE,GAAI,SAAS,WAAW,QAAQ,IAAK,GAAI,UAAU,WAAW,QAAQ,GAAC;AAAA,QAC/E,QAAQ,EAAE,GAAI,SAAS,WAAW,UAAU,IAAK,GAAI,UAAU,WAAW,UAAU,GAAC;AAAA,QACrF,GAAI,SAAS,WAAW,WAAW,UAAa,UAAU,WAAW,WAAW,SAC7E,KACA;AAAA,UACD,QAAQ,UAAU,WAAW,UAAU,SAAS,WAAW;AAAA,QAAA;AAAA,QAE7D,GAAI,SAAS,WAAW,kBAAkB,UAAa,UAAU,WAAW,kBAAkB,SAC3F,KACA;AAAA,UACD,eAAe,UAAU,WAAW,iBAAiB,SAAS,WAAW;AAAA,QAAA;AAAA,QAE3E,GAAI,SAAS,WAAW,UAAU,UAAU,WAAW,SACpD;AAAA,UACD,QAAQ;AAAA,YACP,GAAI,SAAS,WAAW,UAAU,CAAA;AAAA,YAClC,GAAI,UAAU,WAAW,UAAU,CAAA;AAAA,UAAC;AAAA,QACrC,IAEC,CAAA;AAAA,MAAC;AAAA,IACL;AAAA,EAEF;AACD;"}
1
+ {"version":3,"file":"PermissionOverrider.js","sources":["../../../../../../packages/schema-definition/src/acl/builder/PermissionOverrider.ts"],"sourcesContent":["import { Acl } from '@contember/schema'\nimport { tuple } from '../../utils/index.js'\n\nexport default class PermissionOverrider {\n\tpublic override(original: Acl.Permissions, overrides: Acl.Permissions): Acl.Permissions {\n\t\treturn Object.entries({ ...overrides, ...original })\n\t\t\t.map(([key, value]) => {\n\t\t\t\tif (overrides[key]) {\n\t\t\t\t\treturn tuple(key, this.overrideEntityPermissions(value, overrides[key]))\n\t\t\t\t}\n\t\t\t\treturn tuple(key, value)\n\t\t\t})\n\t\t\t.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n\t}\n\n\tprivate overrideEntityPermissions(\n\t\toriginal: Acl.EntityPermissions,\n\t\toverrides: Acl.EntityPermissions,\n\t): Acl.EntityPermissions {\n\t\treturn {\n\t\t\tpredicates: { ...original.predicates, ...overrides.predicates },\n\t\t\toperations: {\n\t\t\t\tcreate: { ...(original.operations.create || {}), ...(overrides.operations.create || {}) },\n\t\t\t\tread: { ...(original.operations.read || {}), ...(overrides.operations.read || {}) },\n\t\t\t\tupdate: { ...(original.operations.update || {}), ...(overrides.operations.update || {}) },\n\t\t\t\t...(original.operations.delete === undefined && overrides.operations.delete === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\tdelete: overrides.operations.delete ?? original.operations.delete,\n\t\t\t\t\t}),\n\t\t\t\t...(original.operations.customPrimary === undefined && overrides.operations.customPrimary === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\tcustomPrimary: overrides.operations.customPrimary ?? original.operations.customPrimary,\n\t\t\t\t\t}),\n\t\t\t\t...(original.operations.noRoot || overrides.operations.noRoot\n\t\t\t\t\t? {\n\t\t\t\t\t\tnoRoot: [\n\t\t\t\t\t\t\t...(original.operations.noRoot || []),\n\t\t\t\t\t\t\t...(overrides.operations.noRoot || []),\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;AAGA,MAAqB,oBAAoB;AAAA,EACjC,SAAS,UAA2B,WAA6C;AACvF,WAAO,OAAO,QAAQ,EAAE,GAAG,WAAW,GAAG,UAAU,EACjD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACtB,UAAI,UAAU,GAAG,GAAG;AACnB,eAAO,MAAM,KAAK,KAAK,0BAA0B,OAAO,UAAU,GAAG,CAAC,CAAC;AAAA,MACxE;AACA,aAAO,MAAM,KAAK,KAAK;AAAA,IACxB,CAAC,EACA,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,MAAA,IAAU,CAAA,CAAE;AAAA,EAC/D;AAAA,EAEQ,0BACP,UACA,WACwB;AACxB,WAAO;AAAA,MACN,YAAY,EAAE,GAAG,SAAS,YAAY,GAAG,UAAU,WAAA;AAAA,MACnD,YAAY;AAAA,QACX,QAAQ,EAAE,GAAI,SAAS,WAAW,UAAU,IAAK,GAAI,UAAU,WAAW,UAAU,GAAC;AAAA,QACrF,MAAM,EAAE,GAAI,SAAS,WAAW,QAAQ,IAAK,GAAI,UAAU,WAAW,QAAQ,GAAC;AAAA,QAC/E,QAAQ,EAAE,GAAI,SAAS,WAAW,UAAU,IAAK,GAAI,UAAU,WAAW,UAAU,GAAC;AAAA,QACrF,GAAI,SAAS,WAAW,WAAW,UAAa,UAAU,WAAW,WAAW,SAC7E,KACA;AAAA,UACD,QAAQ,UAAU,WAAW,UAAU,SAAS,WAAW;AAAA,QAAA;AAAA,QAE7D,GAAI,SAAS,WAAW,kBAAkB,UAAa,UAAU,WAAW,kBAAkB,SAC3F,KACA;AAAA,UACD,eAAe,UAAU,WAAW,iBAAiB,SAAS,WAAW;AAAA,QAAA;AAAA,QAE3E,GAAI,SAAS,WAAW,UAAU,UAAU,WAAW,SACpD;AAAA,UACD,QAAQ;AAAA,YACP,GAAI,SAAS,WAAW,UAAU,CAAA;AAAA,YAClC,GAAI,UAAU,WAAW,UAAU,CAAA;AAAA,UAAC;AAAA,QACrC,IAEC,CAAA;AAAA,MAAC;AAAA,IACL;AAAA,EAEF;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionsBuilder.cjs","sources":["../../../../../../packages/schema-definition/src/acl/builder/PermissionsBuilder.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { AllowAllPermissionFactory } from '@contember/schema-utils'\nimport PermissionOverrider from './PermissionOverrider'\nimport EntitySelector from './EntitySelector'\nimport EntityPermissionsBuilder from './EntityPermissionsBuilder'\nimport FieldSelector from './FieldSelector'\nimport Reference from './PredicateReference'\n\nclass PermissionsBuilder {\n\tconstructor(public readonly schema: Model.Schema, public readonly permissions: Acl.Permissions) {}\n\n\tpublic static create(model: Model.Schema): PermissionsBuilder {\n\t\treturn new PermissionsBuilder(model, {})\n\t}\n\n\tpublic allowAll(): PermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.read, Acl.Operation.update, Acl.Operation.delete, Acl.Operation.create])\n\t}\n\n\tpublic allow(operations: Acl.Operation[]): PermissionsBuilder {\n\t\tconst allowAllFactory = new AllowAllPermissionFactory(operations)\n\t\treturn this.add(allowAllFactory.create(this.schema))\n\t}\n\n\tpublic allowCustomPrimary(): PermissionsBuilder {\n\t\treturn this.onEveryEntity().allowCustomPrimary().builder\n\t}\n\n\tpublic add(permissions: Acl.Permissions): PermissionsBuilder {\n\t\tconst overrider = new PermissionOverrider()\n\t\treturn new PermissionsBuilder(this.schema, overrider.override(this.permissions, permissions))\n\t}\n\n\tpublic onEntity(entitySelector: EntitySelector | string | string[]): EntityPermissionsBuilder {\n\t\tif (typeof entitySelector === 'string') {\n\t\t\tentitySelector = EntitySelector.named(entitySelector)\n\t\t} else if (Array.isArray(entitySelector)) {\n\t\t\tentitySelector = EntitySelector.named(...entitySelector)\n\t\t}\n\t\tconst entitySelectorWithType = entitySelector\n\t\tconst entities = Object.values(this.schema.entities).filter(entity => entitySelectorWithType.matches(this.schema, entity))\n\t\treturn new EntityPermissionsBuilder(this, entities)\n\t}\n\n\tpublic onEveryEntity(): EntityPermissionsBuilder {\n\t\treturn this.onEntity(EntitySelector.every())\n\t}\n}\n\nnamespace PermissionsBuilder {\n\texport const everyEntity = () => {\n\t\treturn EntitySelector.every()\n\t}\n\texport const everyField = () => {\n\t\treturn FieldSelector.every()\n\t}\n\texport const predicateReference = (name: Acl.PredicateReference) => new Reference(name)\n}\nexport { PermissionsBuilder }\n"],"names":["schema","Acl","AllowAllPermissionFactory","PermissionsBuilder","Reference"],"mappings":";;;;;;;;;AAQA,MAAM,mBAAmB;AAAA,EACxB,YAA4BA,SAAsC,aAA8B;AAApE,SAAA,SAAAA;AAAsC,SAAA,cAAA;AAAA,EAA+B;AAAA,EAEjG,OAAc,OAAO,OAAyC;AAC7D,WAAO,IAAI,mBAAmB,OAAO,EAAE;AAAA,EACxC;AAAA,EAEO,WAA+B;AACrC,WAAO,KAAK,MAAM,CAACC,OAAAA,IAAI,UAAU,MAAMA,WAAI,UAAU,QAAQA,OAAAA,IAAI,UAAU,QAAQA,OAAAA,IAAI,UAAU,MAAM,CAAC;AAAA,EACzG;AAAA,EAEO,MAAM,YAAiD;AAC7D,UAAM,kBAAkB,IAAIC,YAAAA,0BAA0B,UAAU;AAChE,WAAO,KAAK,IAAI,gBAAgB,OAAO,KAAK,MAAM,CAAC;AAAA,EACpD;AAAA,EAEO,qBAAyC;AAC/C,WAAO,KAAK,gBAAgB,mBAAA,EAAqB;AAAA,EAClD;AAAA,EAEO,IAAI,aAAkD;AAC5D,UAAM,YAAY,IAAI,oBAAA;AACtB,WAAO,IAAI,mBAAmB,KAAK,QAAQ,UAAU,SAAS,KAAK,aAAa,WAAW,CAAC;AAAA,EAC7F;AAAA,EAEO,SAAS,gBAA8E;AAC7F,QAAI,OAAO,mBAAmB,UAAU;AACvC,uBAAiB,eAAe,MAAM,cAAc;AAAA,IACrD,WAAW,MAAM,QAAQ,cAAc,GAAG;AACzC,uBAAiB,eAAe,MAAM,GAAG,cAAc;AAAA,IACxD;AACA,UAAM,yBAAyB;AAC/B,UAAM,WAAW,OAAO,OAAO,KAAK,OAAO,QAAQ,EAAE,OAAO,CAAA,WAAU,uBAAuB,QAAQ,KAAK,QAAQ,MAAM,CAAC;AACzH,WAAO,IAAI,yBAAyB,MAAM,QAAQ;AAAA,EACnD;AAAA,EAEO,gBAA0C;AAChD,WAAO,KAAK,SAAS,eAAe,MAAA,CAAO;AAAA,EAC5C;AACD;AAAA,CAEA,CAAUC,wBAAV;AACcA,sBAAA,cAAc,MAAM;AAChC,WAAO,eAAe,MAAA;AAAA,EACvB;AACaA,sBAAA,aAAa,MAAM;AAC/B,WAAO,cAAc,MAAA;AAAA,EACtB;AACaA,sBAAA,qBAAqB,CAAC,SAAiC,IAAIC,mBAAAA,QAAU,IAAI;AAAA,GAP7E,uBAAA,qBAAA,CAAA,EAAA;;"}
1
+ {"version":3,"file":"PermissionsBuilder.cjs","sources":["../../../../../../packages/schema-definition/src/acl/builder/PermissionsBuilder.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { AllowAllPermissionFactory } from '@contember/schema-utils'\nimport PermissionOverrider from './PermissionOverrider.js'\nimport EntitySelector from './EntitySelector.js'\nimport EntityPermissionsBuilder from './EntityPermissionsBuilder.js'\nimport FieldSelector from './FieldSelector.js'\nimport Reference from './PredicateReference.js'\n\nclass PermissionsBuilder {\n\tconstructor(public readonly schema: Model.Schema, public readonly permissions: Acl.Permissions) {}\n\n\tpublic static create(model: Model.Schema): PermissionsBuilder {\n\t\treturn new PermissionsBuilder(model, {})\n\t}\n\n\tpublic allowAll(): PermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.read, Acl.Operation.update, Acl.Operation.delete, Acl.Operation.create])\n\t}\n\n\tpublic allow(operations: Acl.Operation[]): PermissionsBuilder {\n\t\tconst allowAllFactory = new AllowAllPermissionFactory(operations)\n\t\treturn this.add(allowAllFactory.create(this.schema))\n\t}\n\n\tpublic allowCustomPrimary(): PermissionsBuilder {\n\t\treturn this.onEveryEntity().allowCustomPrimary().builder\n\t}\n\n\tpublic add(permissions: Acl.Permissions): PermissionsBuilder {\n\t\tconst overrider = new PermissionOverrider()\n\t\treturn new PermissionsBuilder(this.schema, overrider.override(this.permissions, permissions))\n\t}\n\n\tpublic onEntity(entitySelector: EntitySelector | string | string[]): EntityPermissionsBuilder {\n\t\tif (typeof entitySelector === 'string') {\n\t\t\tentitySelector = EntitySelector.named(entitySelector)\n\t\t} else if (Array.isArray(entitySelector)) {\n\t\t\tentitySelector = EntitySelector.named(...entitySelector)\n\t\t}\n\t\tconst entitySelectorWithType = entitySelector\n\t\tconst entities = Object.values(this.schema.entities).filter(entity => entitySelectorWithType.matches(this.schema, entity))\n\t\treturn new EntityPermissionsBuilder(this, entities)\n\t}\n\n\tpublic onEveryEntity(): EntityPermissionsBuilder {\n\t\treturn this.onEntity(EntitySelector.every())\n\t}\n}\n\nnamespace PermissionsBuilder {\n\texport const everyEntity = () => {\n\t\treturn EntitySelector.every()\n\t}\n\texport const everyField = () => {\n\t\treturn FieldSelector.every()\n\t}\n\texport const predicateReference = (name: Acl.PredicateReference) => new Reference(name)\n}\nexport { PermissionsBuilder }\n"],"names":["schema","Acl","AllowAllPermissionFactory","PermissionsBuilder","Reference"],"mappings":";;;;;;;;;AAQA,MAAM,mBAAmB;AAAA,EACxB,YAA4BA,SAAsC,aAA8B;AAApE,SAAA,SAAAA;AAAsC,SAAA,cAAA;AAAA,EAA+B;AAAA,EAEjG,OAAc,OAAO,OAAyC;AAC7D,WAAO,IAAI,mBAAmB,OAAO,EAAE;AAAA,EACxC;AAAA,EAEO,WAA+B;AACrC,WAAO,KAAK,MAAM,CAACC,OAAAA,IAAI,UAAU,MAAMA,WAAI,UAAU,QAAQA,OAAAA,IAAI,UAAU,QAAQA,OAAAA,IAAI,UAAU,MAAM,CAAC;AAAA,EACzG;AAAA,EAEO,MAAM,YAAiD;AAC7D,UAAM,kBAAkB,IAAIC,YAAAA,0BAA0B,UAAU;AAChE,WAAO,KAAK,IAAI,gBAAgB,OAAO,KAAK,MAAM,CAAC;AAAA,EACpD;AAAA,EAEO,qBAAyC;AAC/C,WAAO,KAAK,gBAAgB,mBAAA,EAAqB;AAAA,EAClD;AAAA,EAEO,IAAI,aAAkD;AAC5D,UAAM,YAAY,IAAI,oBAAA;AACtB,WAAO,IAAI,mBAAmB,KAAK,QAAQ,UAAU,SAAS,KAAK,aAAa,WAAW,CAAC;AAAA,EAC7F;AAAA,EAEO,SAAS,gBAA8E;AAC7F,QAAI,OAAO,mBAAmB,UAAU;AACvC,uBAAiB,eAAe,MAAM,cAAc;AAAA,IACrD,WAAW,MAAM,QAAQ,cAAc,GAAG;AACzC,uBAAiB,eAAe,MAAM,GAAG,cAAc;AAAA,IACxD;AACA,UAAM,yBAAyB;AAC/B,UAAM,WAAW,OAAO,OAAO,KAAK,OAAO,QAAQ,EAAE,OAAO,CAAA,WAAU,uBAAuB,QAAQ,KAAK,QAAQ,MAAM,CAAC;AACzH,WAAO,IAAI,yBAAyB,MAAM,QAAQ;AAAA,EACnD;AAAA,EAEO,gBAA0C;AAChD,WAAO,KAAK,SAAS,eAAe,MAAA,CAAO;AAAA,EAC5C;AACD;AAAA,CAEA,CAAUC,wBAAV;AACcA,sBAAA,cAAc,MAAM;AAChC,WAAO,eAAe,MAAA;AAAA,EACvB;AACaA,sBAAA,aAAa,MAAM;AAC/B,WAAO,cAAc,MAAA;AAAA,EACtB;AACaA,sBAAA,qBAAqB,CAAC,SAAiC,IAAIC,mBAAAA,QAAU,IAAI;AAAA,GAP7E,uBAAA,qBAAA,CAAA,EAAA;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionsBuilder.js","sources":["../../../../../../packages/schema-definition/src/acl/builder/PermissionsBuilder.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { AllowAllPermissionFactory } from '@contember/schema-utils'\nimport PermissionOverrider from './PermissionOverrider'\nimport EntitySelector from './EntitySelector'\nimport EntityPermissionsBuilder from './EntityPermissionsBuilder'\nimport FieldSelector from './FieldSelector'\nimport Reference from './PredicateReference'\n\nclass PermissionsBuilder {\n\tconstructor(public readonly schema: Model.Schema, public readonly permissions: Acl.Permissions) {}\n\n\tpublic static create(model: Model.Schema): PermissionsBuilder {\n\t\treturn new PermissionsBuilder(model, {})\n\t}\n\n\tpublic allowAll(): PermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.read, Acl.Operation.update, Acl.Operation.delete, Acl.Operation.create])\n\t}\n\n\tpublic allow(operations: Acl.Operation[]): PermissionsBuilder {\n\t\tconst allowAllFactory = new AllowAllPermissionFactory(operations)\n\t\treturn this.add(allowAllFactory.create(this.schema))\n\t}\n\n\tpublic allowCustomPrimary(): PermissionsBuilder {\n\t\treturn this.onEveryEntity().allowCustomPrimary().builder\n\t}\n\n\tpublic add(permissions: Acl.Permissions): PermissionsBuilder {\n\t\tconst overrider = new PermissionOverrider()\n\t\treturn new PermissionsBuilder(this.schema, overrider.override(this.permissions, permissions))\n\t}\n\n\tpublic onEntity(entitySelector: EntitySelector | string | string[]): EntityPermissionsBuilder {\n\t\tif (typeof entitySelector === 'string') {\n\t\t\tentitySelector = EntitySelector.named(entitySelector)\n\t\t} else if (Array.isArray(entitySelector)) {\n\t\t\tentitySelector = EntitySelector.named(...entitySelector)\n\t\t}\n\t\tconst entitySelectorWithType = entitySelector\n\t\tconst entities = Object.values(this.schema.entities).filter(entity => entitySelectorWithType.matches(this.schema, entity))\n\t\treturn new EntityPermissionsBuilder(this, entities)\n\t}\n\n\tpublic onEveryEntity(): EntityPermissionsBuilder {\n\t\treturn this.onEntity(EntitySelector.every())\n\t}\n}\n\nnamespace PermissionsBuilder {\n\texport const everyEntity = () => {\n\t\treturn EntitySelector.every()\n\t}\n\texport const everyField = () => {\n\t\treturn FieldSelector.every()\n\t}\n\texport const predicateReference = (name: Acl.PredicateReference) => new Reference(name)\n}\nexport { PermissionsBuilder }\n"],"names":["PermissionsBuilder","Reference"],"mappings":";;;;;;;AAQA,MAAM,mBAAmB;AAAA,EACxB,YAA4B,QAAsC,aAA8B;AAApE,SAAA,SAAA;AAAsC,SAAA,cAAA;AAAA,EAA+B;AAAA,EAEjG,OAAc,OAAO,OAAyC;AAC7D,WAAO,IAAI,mBAAmB,OAAO,EAAE;AAAA,EACxC;AAAA,EAEO,WAA+B;AACrC,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,MAAM,IAAI,UAAU,QAAQ,IAAI,UAAU,QAAQ,IAAI,UAAU,MAAM,CAAC;AAAA,EACzG;AAAA,EAEO,MAAM,YAAiD;AAC7D,UAAM,kBAAkB,IAAI,0BAA0B,UAAU;AAChE,WAAO,KAAK,IAAI,gBAAgB,OAAO,KAAK,MAAM,CAAC;AAAA,EACpD;AAAA,EAEO,qBAAyC;AAC/C,WAAO,KAAK,gBAAgB,mBAAA,EAAqB;AAAA,EAClD;AAAA,EAEO,IAAI,aAAkD;AAC5D,UAAM,YAAY,IAAI,oBAAA;AACtB,WAAO,IAAI,mBAAmB,KAAK,QAAQ,UAAU,SAAS,KAAK,aAAa,WAAW,CAAC;AAAA,EAC7F;AAAA,EAEO,SAAS,gBAA8E;AAC7F,QAAI,OAAO,mBAAmB,UAAU;AACvC,uBAAiB,eAAe,MAAM,cAAc;AAAA,IACrD,WAAW,MAAM,QAAQ,cAAc,GAAG;AACzC,uBAAiB,eAAe,MAAM,GAAG,cAAc;AAAA,IACxD;AACA,UAAM,yBAAyB;AAC/B,UAAM,WAAW,OAAO,OAAO,KAAK,OAAO,QAAQ,EAAE,OAAO,CAAA,WAAU,uBAAuB,QAAQ,KAAK,QAAQ,MAAM,CAAC;AACzH,WAAO,IAAI,yBAAyB,MAAM,QAAQ;AAAA,EACnD;AAAA,EAEO,gBAA0C;AAChD,WAAO,KAAK,SAAS,eAAe,MAAA,CAAO;AAAA,EAC5C;AACD;AAAA,CAEA,CAAUA,wBAAV;AACcA,sBAAA,cAAc,MAAM;AAChC,WAAO,eAAe,MAAA;AAAA,EACvB;AACaA,sBAAA,aAAa,MAAM;AAC/B,WAAO,cAAc,MAAA;AAAA,EACtB;AACaA,sBAAA,qBAAqB,CAAC,SAAiC,IAAIC,mBAAU,IAAI;AAAA,GAP7E,uBAAA,qBAAA,CAAA,EAAA;"}
1
+ {"version":3,"file":"PermissionsBuilder.js","sources":["../../../../../../packages/schema-definition/src/acl/builder/PermissionsBuilder.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { AllowAllPermissionFactory } from '@contember/schema-utils'\nimport PermissionOverrider from './PermissionOverrider.js'\nimport EntitySelector from './EntitySelector.js'\nimport EntityPermissionsBuilder from './EntityPermissionsBuilder.js'\nimport FieldSelector from './FieldSelector.js'\nimport Reference from './PredicateReference.js'\n\nclass PermissionsBuilder {\n\tconstructor(public readonly schema: Model.Schema, public readonly permissions: Acl.Permissions) {}\n\n\tpublic static create(model: Model.Schema): PermissionsBuilder {\n\t\treturn new PermissionsBuilder(model, {})\n\t}\n\n\tpublic allowAll(): PermissionsBuilder {\n\t\treturn this.allow([Acl.Operation.read, Acl.Operation.update, Acl.Operation.delete, Acl.Operation.create])\n\t}\n\n\tpublic allow(operations: Acl.Operation[]): PermissionsBuilder {\n\t\tconst allowAllFactory = new AllowAllPermissionFactory(operations)\n\t\treturn this.add(allowAllFactory.create(this.schema))\n\t}\n\n\tpublic allowCustomPrimary(): PermissionsBuilder {\n\t\treturn this.onEveryEntity().allowCustomPrimary().builder\n\t}\n\n\tpublic add(permissions: Acl.Permissions): PermissionsBuilder {\n\t\tconst overrider = new PermissionOverrider()\n\t\treturn new PermissionsBuilder(this.schema, overrider.override(this.permissions, permissions))\n\t}\n\n\tpublic onEntity(entitySelector: EntitySelector | string | string[]): EntityPermissionsBuilder {\n\t\tif (typeof entitySelector === 'string') {\n\t\t\tentitySelector = EntitySelector.named(entitySelector)\n\t\t} else if (Array.isArray(entitySelector)) {\n\t\t\tentitySelector = EntitySelector.named(...entitySelector)\n\t\t}\n\t\tconst entitySelectorWithType = entitySelector\n\t\tconst entities = Object.values(this.schema.entities).filter(entity => entitySelectorWithType.matches(this.schema, entity))\n\t\treturn new EntityPermissionsBuilder(this, entities)\n\t}\n\n\tpublic onEveryEntity(): EntityPermissionsBuilder {\n\t\treturn this.onEntity(EntitySelector.every())\n\t}\n}\n\nnamespace PermissionsBuilder {\n\texport const everyEntity = () => {\n\t\treturn EntitySelector.every()\n\t}\n\texport const everyField = () => {\n\t\treturn FieldSelector.every()\n\t}\n\texport const predicateReference = (name: Acl.PredicateReference) => new Reference(name)\n}\nexport { PermissionsBuilder }\n"],"names":["PermissionsBuilder","Reference"],"mappings":";;;;;;;AAQA,MAAM,mBAAmB;AAAA,EACxB,YAA4B,QAAsC,aAA8B;AAApE,SAAA,SAAA;AAAsC,SAAA,cAAA;AAAA,EAA+B;AAAA,EAEjG,OAAc,OAAO,OAAyC;AAC7D,WAAO,IAAI,mBAAmB,OAAO,EAAE;AAAA,EACxC;AAAA,EAEO,WAA+B;AACrC,WAAO,KAAK,MAAM,CAAC,IAAI,UAAU,MAAM,IAAI,UAAU,QAAQ,IAAI,UAAU,QAAQ,IAAI,UAAU,MAAM,CAAC;AAAA,EACzG;AAAA,EAEO,MAAM,YAAiD;AAC7D,UAAM,kBAAkB,IAAI,0BAA0B,UAAU;AAChE,WAAO,KAAK,IAAI,gBAAgB,OAAO,KAAK,MAAM,CAAC;AAAA,EACpD;AAAA,EAEO,qBAAyC;AAC/C,WAAO,KAAK,gBAAgB,mBAAA,EAAqB;AAAA,EAClD;AAAA,EAEO,IAAI,aAAkD;AAC5D,UAAM,YAAY,IAAI,oBAAA;AACtB,WAAO,IAAI,mBAAmB,KAAK,QAAQ,UAAU,SAAS,KAAK,aAAa,WAAW,CAAC;AAAA,EAC7F;AAAA,EAEO,SAAS,gBAA8E;AAC7F,QAAI,OAAO,mBAAmB,UAAU;AACvC,uBAAiB,eAAe,MAAM,cAAc;AAAA,IACrD,WAAW,MAAM,QAAQ,cAAc,GAAG;AACzC,uBAAiB,eAAe,MAAM,GAAG,cAAc;AAAA,IACxD;AACA,UAAM,yBAAyB;AAC/B,UAAM,WAAW,OAAO,OAAO,KAAK,OAAO,QAAQ,EAAE,OAAO,CAAA,WAAU,uBAAuB,QAAQ,KAAK,QAAQ,MAAM,CAAC;AACzH,WAAO,IAAI,yBAAyB,MAAM,QAAQ;AAAA,EACnD;AAAA,EAEO,gBAA0C;AAChD,WAAO,KAAK,SAAS,eAAe,MAAA,CAAO;AAAA,EAC5C;AACD;AAAA,CAEA,CAAUA,wBAAV;AACcA,sBAAA,cAAc,MAAM;AAChC,WAAO,eAAe,MAAA;AAAA,EACvB;AACaA,sBAAA,aAAa,MAAM;AAC/B,WAAO,cAAc,MAAA;AAAA,EACtB;AACaA,sBAAA,qBAAqB,CAAC,SAAiC,IAAIC,mBAAU,IAAI;AAAA,GAP7E,uBAAA,qBAAA,CAAA,EAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"aclExtensions.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/aclExtensions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { createMetadataStore, DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Role } from './roles'\n\nexport type EntityAclExtensionArgs = {\n\tentity: Model.Entity\n\trole: Role\n\tpermissions: Acl.EntityPermissions\n}\n\nconst entityAclExtensionsStore = createMetadataStore<EntityAclExtension[]>([])\n\nexport type EntityAclExtension = (args: EntityAclExtensionArgs) => Acl.EntityPermissions\nexport const extendEntityAcl = <T>(extension: EntityAclExtension): DecoratorFunction<T> => {\n\treturn function(cls: EntityConstructor, context?: ClassDecoratorContext) {\n\t\tentityAclExtensionsStore.update(cls, current => [...current, extension], context)\n\t}\n}\n\nexport const applyEntityAclExtensions = (\n\tcls: EntityConstructor,\n\targs: EntityAclExtensionArgs,\n): Acl.EntityPermissions =>\n\tentityAclExtensionsStore.get(cls).reduce(\n\t\t(permissions, ext) => ext({ ...args, permissions }),\n\t\targs.permissions,\n\t)\n"],"names":["createMetadataStore"],"mappings":";;;AAUA,MAAM,2BAA2BA,cAAAA,oBAA0C,EAAE;AAGtE,MAAM,kBAAkB,CAAI,cAAwD;AAC1F,SAAO,SAAS,KAAwB,SAAiC;AACxE,6BAAyB,OAAO,KAAK,CAAA,YAAW,CAAC,GAAG,SAAS,SAAS,GAAG,OAAO;AAAA,EACjF;AACD;AAEO,MAAM,2BAA2B,CACvC,KACA,SAEA,yBAAyB,IAAI,GAAG,EAAE;AAAA,EACjC,CAAC,aAAa,QAAQ,IAAI,EAAE,GAAG,MAAM,aAAa;AAAA,EAClD,KAAK;AACN;;;"}
1
+ {"version":3,"file":"aclExtensions.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/aclExtensions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { createMetadataStore, DecoratorFunction, EntityConstructor } from '../../utils/index.js'\nimport { Role } from './roles.js'\n\nexport type EntityAclExtensionArgs = {\n\tentity: Model.Entity\n\trole: Role\n\tpermissions: Acl.EntityPermissions\n}\n\nconst entityAclExtensionsStore = createMetadataStore<EntityAclExtension[]>([])\n\nexport type EntityAclExtension = (args: EntityAclExtensionArgs) => Acl.EntityPermissions\nexport const extendEntityAcl = <T>(extension: EntityAclExtension): DecoratorFunction<T> => {\n\treturn function(cls: EntityConstructor, context?: ClassDecoratorContext) {\n\t\tentityAclExtensionsStore.update(cls, current => [...current, extension], context)\n\t}\n}\n\nexport const applyEntityAclExtensions = (\n\tcls: EntityConstructor,\n\targs: EntityAclExtensionArgs,\n): Acl.EntityPermissions =>\n\tentityAclExtensionsStore.get(cls).reduce(\n\t\t(permissions, ext) => ext({ ...args, permissions }),\n\t\targs.permissions,\n\t)\n"],"names":["createMetadataStore"],"mappings":";;;AAUA,MAAM,2BAA2BA,cAAAA,oBAA0C,EAAE;AAGtE,MAAM,kBAAkB,CAAI,cAAwD;AAC1F,SAAO,SAAS,KAAwB,SAAiC;AACxE,6BAAyB,OAAO,KAAK,CAAA,YAAW,CAAC,GAAG,SAAS,SAAS,GAAG,OAAO;AAAA,EACjF;AACD;AAEO,MAAM,2BAA2B,CACvC,KACA,SAEA,yBAAyB,IAAI,GAAG,EAAE;AAAA,EACjC,CAAC,aAAa,QAAQ,IAAI,EAAE,GAAG,MAAM,aAAa;AAAA,EAClD,KAAK;AACN;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"aclExtensions.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/aclExtensions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { createMetadataStore, DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Role } from './roles'\n\nexport type EntityAclExtensionArgs = {\n\tentity: Model.Entity\n\trole: Role\n\tpermissions: Acl.EntityPermissions\n}\n\nconst entityAclExtensionsStore = createMetadataStore<EntityAclExtension[]>([])\n\nexport type EntityAclExtension = (args: EntityAclExtensionArgs) => Acl.EntityPermissions\nexport const extendEntityAcl = <T>(extension: EntityAclExtension): DecoratorFunction<T> => {\n\treturn function(cls: EntityConstructor, context?: ClassDecoratorContext) {\n\t\tentityAclExtensionsStore.update(cls, current => [...current, extension], context)\n\t}\n}\n\nexport const applyEntityAclExtensions = (\n\tcls: EntityConstructor,\n\targs: EntityAclExtensionArgs,\n): Acl.EntityPermissions =>\n\tentityAclExtensionsStore.get(cls).reduce(\n\t\t(permissions, ext) => ext({ ...args, permissions }),\n\t\targs.permissions,\n\t)\n"],"names":[],"mappings":";AAUA,MAAM,2BAA2B,oBAA0C,EAAE;AAGtE,MAAM,kBAAkB,CAAI,cAAwD;AAC1F,SAAO,SAAS,KAAwB,SAAiC;AACxE,6BAAyB,OAAO,KAAK,CAAA,YAAW,CAAC,GAAG,SAAS,SAAS,GAAG,OAAO;AAAA,EACjF;AACD;AAEO,MAAM,2BAA2B,CACvC,KACA,SAEA,yBAAyB,IAAI,GAAG,EAAE;AAAA,EACjC,CAAC,aAAa,QAAQ,IAAI,EAAE,GAAG,MAAM,aAAa;AAAA,EAClD,KAAK;AACN;"}
1
+ {"version":3,"file":"aclExtensions.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/aclExtensions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { createMetadataStore, DecoratorFunction, EntityConstructor } from '../../utils/index.js'\nimport { Role } from './roles.js'\n\nexport type EntityAclExtensionArgs = {\n\tentity: Model.Entity\n\trole: Role\n\tpermissions: Acl.EntityPermissions\n}\n\nconst entityAclExtensionsStore = createMetadataStore<EntityAclExtension[]>([])\n\nexport type EntityAclExtension = (args: EntityAclExtensionArgs) => Acl.EntityPermissions\nexport const extendEntityAcl = <T>(extension: EntityAclExtension): DecoratorFunction<T> => {\n\treturn function(cls: EntityConstructor, context?: ClassDecoratorContext) {\n\t\tentityAclExtensionsStore.update(cls, current => [...current, extension], context)\n\t}\n}\n\nexport const applyEntityAclExtensions = (\n\tcls: EntityConstructor,\n\targs: EntityAclExtensionArgs,\n): Acl.EntityPermissions =>\n\tentityAclExtensionsStore.get(cls).reduce(\n\t\t(permissions, ext) => ext({ ...args, permissions }),\n\t\targs.permissions,\n\t)\n"],"names":[],"mappings":";AAUA,MAAM,2BAA2B,oBAA0C,EAAE;AAGtE,MAAM,kBAAkB,CAAI,cAAwD;AAC1F,SAAO,SAAS,KAAwB,SAAiC;AACxE,6BAAyB,OAAO,KAAK,CAAA,YAAW,CAAC,GAAG,SAAS,SAAS,GAAG,OAAO;AAAA,EACjF;AACD;AAEO,MAAM,2BAA2B,CACvC,KACA,SAEA,yBAAyB,IAAI,GAAG,EAAE;AAAA,EACjC,CAAC,aAAa,QAAQ,IAAI,EAAE,GAAG,MAAM,aAAa;AAAA,EAClD,KAAK;AACN;"}
@@ -1 +1 @@
1
- {"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { ...permissions.operations, customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":["extendEntityAcl"],"mappings":";;;AAIO,MAAM,qBAAqB,CAAC,SAAiD;AACnF,SAAOA,cAAAA,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC9D,QAAI,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,GAAG,YAAY,YAAY,eAAe,OAAK;AAAA,IACvF;AACA,WAAO;AAAA,EACR,CAAC;AACF;;"}
1
+ {"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles.js'\nimport { DecoratorFunction } from '../../utils/index.js'\nimport { extendEntityAcl } from './aclExtensions.js'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { ...permissions.operations, customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":["extendEntityAcl"],"mappings":";;;AAIO,MAAM,qBAAqB,CAAC,SAAiD;AACnF,SAAOA,cAAAA,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC9D,QAAI,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,GAAG,YAAY,YAAY,eAAe,OAAK;AAAA,IACvF;AACA,WAAO;AAAA,EACR,CAAC;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { ...permissions.operations, customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":[],"mappings":";AAIO,MAAM,qBAAqB,CAAC,SAAiD;AACnF,SAAO,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC9D,QAAI,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,GAAG,YAAY,YAAY,eAAe,OAAK;AAAA,IACvF;AACA,WAAO;AAAA,EACR,CAAC;AACF;"}
1
+ {"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles.js'\nimport { DecoratorFunction } from '../../utils/index.js'\nimport { extendEntityAcl } from './aclExtensions.js'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { ...permissions.operations, customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":[],"mappings":";AAIO,MAAM,qBAAqB,CAAC,SAAiD;AACnF,SAAO,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC9D,QAAI,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,GAAG,YAAY,YAAY,eAAe,OAAK;AAAA,IACvF;AACA,WAAO;AAAA,EACR,CAAC;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/index.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { AclFactory } from './internal/AclFactory'\n\nexport * from './customPrimary'\nexport * from './permissions'\nexport * from './references'\nexport * from './roles'\nexport * from './variables'\n\nexport const createAcl = (\n\texportedDefinitions: Record<string, any>,\n\tmodel: Model.Schema,\n): Acl.Schema => {\n\tconst aclFactory = new AclFactory(model)\n\treturn aclFactory.create(exportedDefinitions)\n}\n"],"names":["AclFactory"],"mappings":";;;;;;;;AASO,MAAM,YAAY,CACxB,qBACA,UACgB;AAChB,QAAM,aAAa,IAAIA,WAAAA,WAAW,KAAK;AACvC,SAAO,WAAW,OAAO,mBAAmB;AAC7C;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/index.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { AclFactory } from './internal/AclFactory.js'\n\nexport * from './customPrimary.js'\nexport * from './permissions.js'\nexport * from './references.js'\nexport * from './roles.js'\nexport * from './variables.js'\n\nexport const createAcl = (\n\texportedDefinitions: Record<string, any>,\n\tmodel: Model.Schema,\n): Acl.Schema => {\n\tconst aclFactory = new AclFactory(model)\n\treturn aclFactory.create(exportedDefinitions)\n}\n"],"names":["AclFactory"],"mappings":";;;;;;;;AASO,MAAM,YAAY,CACxB,qBACA,UACgB;AAChB,QAAM,aAAa,IAAIA,WAAAA,WAAW,KAAK;AACvC,SAAO,WAAW,OAAO,mBAAmB;AAC7C;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/index.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { AclFactory } from './internal/AclFactory'\n\nexport * from './customPrimary'\nexport * from './permissions'\nexport * from './references'\nexport * from './roles'\nexport * from './variables'\n\nexport const createAcl = (\n\texportedDefinitions: Record<string, any>,\n\tmodel: Model.Schema,\n): Acl.Schema => {\n\tconst aclFactory = new AclFactory(model)\n\treturn aclFactory.create(exportedDefinitions)\n}\n"],"names":[],"mappings":";;;;;;AASO,MAAM,YAAY,CACxB,qBACA,UACgB;AAChB,QAAM,aAAa,IAAI,WAAW,KAAK;AACvC,SAAO,WAAW,OAAO,mBAAmB;AAC7C;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/index.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { AclFactory } from './internal/AclFactory.js'\n\nexport * from './customPrimary.js'\nexport * from './permissions.js'\nexport * from './references.js'\nexport * from './roles.js'\nexport * from './variables.js'\n\nexport const createAcl = (\n\texportedDefinitions: Record<string, any>,\n\tmodel: Model.Schema,\n): Acl.Schema => {\n\tconst aclFactory = new AclFactory(model)\n\treturn aclFactory.create(exportedDefinitions)\n}\n"],"names":[],"mappings":";;;;;;AASO,MAAM,YAAY,CACxB,qBACA,UACgB;AAChB,QAAM,aAAa,IAAI,WAAW,KAAK;AACvC,SAAO,WAAW,OAAO,mBAAmB;AAC7C;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AclFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport { allowDefinitionsStore, EntityPermissionsDefinition } from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\nimport { applyEntityAclExtensions } from '../aclExtensions'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = this.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(\n\t\trolePermissions: PermissionsByEntity | undefined,\n\t\tentityLikeDefinition: Record<string, { new(): any }>,\n\t\trole: Role,\n\t): Acl.Permissions {\n\t\treturn Object.fromEntries(\n\t\t\tObject.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\t\tconst isEmpty = !rolePermissions?.has(entity.name)\n\t\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\t\treturn undefined\n\t\t\t\t}\n\t\t\t\treturn [\n\t\t\t\t\tentity.name,\n\t\t\t\t\twithExtensions,\n\t\t\t\t]\n\t\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined),\n\t\t)\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, factory } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tconst entity = getEntity(this.model, name)\n\t\t\t\tentityPermissions.definitions.push(factory({\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t\tentity: getEntity(this.model, name),\n\t\t\t\t\texcept: (...fields) => (Object.keys(entity.fields)).filter(it => !fields.includes(it)),\n\t\t\t\t}))\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":["filterEntityDefinition","roles","Role","variables","VariableDefinition","applyEntityAclExtensions","EntityPredicatesResolver","allowDefinitionsStore","entity","getEntity"],"mappings":"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"}
1
+ {"version":3,"file":"AclFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver.js'\nimport { AllowDefinition } from '../permissions.js'\nimport { allowDefinitionsStore, EntityPermissionsDefinition } from './stores.js'\nimport { Role } from '../roles.js'\nimport { VariableDefinition } from '../variables.js'\nimport { filterEntityDefinition } from '../../../utils/index.js'\nimport { applyEntityAclExtensions } from '../aclExtensions.js'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = this.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(\n\t\trolePermissions: PermissionsByEntity | undefined,\n\t\tentityLikeDefinition: Record<string, { new(): any }>,\n\t\trole: Role,\n\t): Acl.Permissions {\n\t\treturn Object.fromEntries(\n\t\t\tObject.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\t\tconst isEmpty = !rolePermissions?.has(entity.name)\n\t\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\t\treturn undefined\n\t\t\t\t}\n\t\t\t\treturn [\n\t\t\t\t\tentity.name,\n\t\t\t\t\twithExtensions,\n\t\t\t\t]\n\t\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined),\n\t\t)\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, factory } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tconst entity = getEntity(this.model, name)\n\t\t\t\tentityPermissions.definitions.push(factory({\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t\tentity: getEntity(this.model, name),\n\t\t\t\t\texcept: (...fields) => (Object.keys(entity.fields)).filter(it => !fields.includes(it)),\n\t\t\t\t}))\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":["filterEntityDefinition","roles","Role","variables","VariableDefinition","applyEntityAclExtensions","EntityPredicatesResolver","allowDefinitionsStore","entity","getEntity"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AclFactory.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport { allowDefinitionsStore, EntityPermissionsDefinition } from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\nimport { applyEntityAclExtensions } from '../aclExtensions'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = this.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(\n\t\trolePermissions: PermissionsByEntity | undefined,\n\t\tentityLikeDefinition: Record<string, { new(): any }>,\n\t\trole: Role,\n\t): Acl.Permissions {\n\t\treturn Object.fromEntries(\n\t\t\tObject.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\t\tconst isEmpty = !rolePermissions?.has(entity.name)\n\t\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\t\treturn undefined\n\t\t\t\t}\n\t\t\t\treturn [\n\t\t\t\t\tentity.name,\n\t\t\t\t\twithExtensions,\n\t\t\t\t]\n\t\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined),\n\t\t)\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, factory } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tconst entity = getEntity(this.model, name)\n\t\t\t\tentityPermissions.definitions.push(factory({\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t\tentity: getEntity(this.model, name),\n\t\t\t\t\texcept: (...fields) => (Object.keys(entity.fields)).filter(it => !fields.includes(it)),\n\t\t\t\t}))\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":["entity"],"mappings":"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"}
1
+ {"version":3,"file":"AclFactory.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver.js'\nimport { AllowDefinition } from '../permissions.js'\nimport { allowDefinitionsStore, EntityPermissionsDefinition } from './stores.js'\nimport { Role } from '../roles.js'\nimport { VariableDefinition } from '../variables.js'\nimport { filterEntityDefinition } from '../../../utils/index.js'\nimport { applyEntityAclExtensions } from '../aclExtensions.js'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = this.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(\n\t\trolePermissions: PermissionsByEntity | undefined,\n\t\tentityLikeDefinition: Record<string, { new(): any }>,\n\t\trole: Role,\n\t): Acl.Permissions {\n\t\treturn Object.fromEntries(\n\t\t\tObject.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\t\tconst isEmpty = !rolePermissions?.has(entity.name)\n\t\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\t\treturn undefined\n\t\t\t\t}\n\t\t\t\treturn [\n\t\t\t\t\tentity.name,\n\t\t\t\t\twithExtensions,\n\t\t\t\t]\n\t\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined),\n\t\t)\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, factory } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tconst entity = getEntity(this.model, name)\n\t\t\t\tentityPermissions.definitions.push(factory({\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t\tentity: getEntity(this.model, name),\n\t\t\t\t\texcept: (...fields) => (Object.keys(entity.fields)).filter(it => !fields.includes(it)),\n\t\t\t\t}))\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":["entity"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPredicateResolver.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/EntityPredicateResolver.ts"],"sourcesContent":["import deepEqual from 'fast-deep-equal'\n\nimport { Acl, Input, Model, Writable } from '@contember/schema'\nimport { PredicateDefinitionProcessor } from '@contember/schema-utils'\n\nimport { PermissionsByEntity } from './AclFactory'\nimport { createPredicateName } from './createPredicateName'\nimport { AllowDefinition, PredicateExtra, WhenDefinition } from '../permissions'\nimport { PredicateEvaluationReference } from '../references'\nimport { VariableDefinition } from '../variables'\n\nexport class EntityPredicatesResolver {\n\tprivate usedPredicates: string[] = []\n\n\tprivate constructor(\n\t\tprivate aclDefinitions: AllowDefinition<any>[],\n\t\tprivate predicates: Writable<Acl.PredicateMap>,\n\t\tprivate predicateNamesMap: Map<WhenDefinition, string>,\n\t\tprivate generatedNames: Set<string>,\n\t) {\n\t}\n\n\tpublic static create(\n\t\trolePermissions: PermissionsByEntity,\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t): EntityPredicatesResolver {\n\t\tconst predicates: Writable<Acl.PredicateMap> = {}\n\t\tconst predicateNamesMap = new Map<WhenDefinition, string>()\n\t\tconst aclDefinitions = rolePermissions.get(entity.name)?.definitions ?? []\n\t\tconst generatedNames = new Set<string>()\n\t\tconst definedNames = new Set<string>(aclDefinitions.map(it => it.name).filter((it): it is string => it !== undefined))\n\t\tfor (const permission of aclDefinitions) {\n\t\t\tif (!permission.when) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst resolvedPredicate = EntityPredicatesResolver.resolvePredicate(model, entity, permission.when, rolePermissions)\n\t\t\tlet predicateName = permission.name ?? createPredicateName(resolvedPredicate)\n\t\t\twhile (predicateName in predicates || definedNames.has(predicateName)) {\n\t\t\t\tpredicateName += '_'\n\t\t\t}\n\t\t\tif (!permission.name) {\n\t\t\t\tgeneratedNames.add(predicateName)\n\t\t\t}\n\t\t\tpredicates[predicateName] = resolvedPredicate\n\t\t\tpredicateNamesMap.set(permission.when, predicateName)\n\t\t}\n\t\tfor (const op of ['read', 'update', 'create'] as const) {\n\t\t\tfor (const definition of aclDefinitions) {\n\t\t\t\tconst fields = definition[op]\n\t\t\t\tif (!Array.isArray(fields)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tif (!(field in entity.fields)) {\n\t\t\t\t\t\tthrow `Field \"${String(field)}\" does not exist on entity \"${entity.name}\" in ${op} ACL definition.`\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new EntityPredicatesResolver(aclDefinitions, predicates, predicateNamesMap, generatedNames)\n\t}\n\n\tcreateFieldPredicate(op: 'create' | 'update' | 'read' | 'delete', field: string, isPrimary: boolean): true | undefined | string {\n\t\tconst fieldWhens = EntityPredicatesResolver.getMatchingWhens(this.aclDefinitions, op, field, isPrimary)\n\t\tif (fieldWhens.length === 0) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (fieldWhens.includes(true)) {\n\t\t\treturn true\n\t\t}\n\t\tconst predicateNames = (fieldWhens as WhenDefinition[]).map(it => {\n\t\t\tconst name = this.predicateNamesMap.get(it)\n\t\t\tif (!name) throw new Error('implementation error')\n\t\t\treturn name\n\t\t})\n\t\tif (predicateNames.length === 1) {\n\t\t\tthis.usedPredicates.push(predicateNames[0])\n\t\t\treturn predicateNames[0]\n\t\t}\n\n\t\tconst predicate = { or: predicateNames.map(it => this.predicates[it]) }\n\t\tconst origName = predicateNames.every(it => this.generatedNames.has(it)) ? createPredicateName(predicate) : predicateNames.join('_or_')\n\t\tlet predicateName = origName\n\t\tfor (let i = 1;; i++) {\n\t\t\tif (!(predicateName in this.predicates)) {\n\t\t\t\tthis.predicates[predicateName] = predicate\n\t\t\t\tbreak\n\t\t\t} else if (deepEqual(predicate, this.predicates[predicateName])) {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\tpredicateName = `${origName}_${i}`\n\t\t\t}\n\t\t}\n\t\tthis.usedPredicates.push(predicateName)\n\t\treturn predicateName\n\t}\n\n\tgetUsedPredicates(): Acl.PredicateMap {\n\t\treturn Object.fromEntries(Object.entries(this.predicates).filter(([name]) => this.usedPredicates.includes(name)))\n\t}\n\n\tprivate static resolvePredicate(\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t\twhen: WhenDefinition,\n\t\trolePermissionsByEntity: PermissionsByEntity,\n\t): Acl.PredicateDefinition {\n\t\tconst processor = new PredicateDefinitionProcessor(model)\n\t\treturn processor.process<Acl.PredicateReference | Input.Condition, PredicateExtra>(entity, when, {\n\t\t\thandleColumn(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn ctx.value.name\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tthrow `Predicate references are allowed only on relations. \\nYou cannot use \"can${upperCaseFirst(ctx.value.operation)}(${\n\t\t\t\t\t\tctx.value.field ? JSON.stringify(ctx.value.field) : ''\n\t\t\t\t\t})\" on a column \"${ctx.column.name}\" of entity \"${ctx.entity.name}\".`\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleRelation(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn { [ctx.targetEntity.primary]: ctx.value.name }\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tconst targetPermissions = rolePermissionsByEntity.get(ctx.targetEntity.name)\n\t\t\t\t\tif (!targetPermissions) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tconst ref = ctx.value\n\t\t\t\t\tconst whens = EntityPredicatesResolver.getMatchingWhens(targetPermissions.definitions, ref.operation, ref.field ?? '', false)\n\t\t\t\t\tif (whens.length === 0) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tif (whens.includes(true)) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { isNull: false } }\n\t\t\t\t\t}\n\t\t\t\t\tconst predicates = (whens as WhenDefinition[]).map(it =>\n\t\t\t\t\t\tEntityPredicatesResolver.resolvePredicate(model, ctx.targetEntity, it, rolePermissionsByEntity)\n\t\t\t\t\t)\n\t\t\t\t\tif (predicates.length > 1) {\n\t\t\t\t\t\treturn { or: predicates }\n\t\t\t\t\t}\n\t\t\t\t\treturn predicates[0]\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t})\n\t}\n\n\tprivate static getMatchingWhens(\n\t\tpermissions: AllowDefinition<any>[],\n\t\toperation: 'delete' | 'read' | 'update' | 'create',\n\t\tfield: string,\n\t\tisPrimary: boolean,\n\t) {\n\t\treturn permissions\n\t\t\t.filter(it => {\n\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\treturn !!it.delete\n\t\t\t\t}\n\t\t\t\tconst op = it[operation]\n\t\t\t\tif (!op) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (op === true) {\n\t\t\t\t\treturn !isPrimary\n\t\t\t\t}\n\t\t\t\treturn op.includes(field)\n\t\t\t})\n\t\t\t.map(it => it.when ?? true)\n\t}\n}\n\nconst upperCaseFirst = (string: string) => `${string.charAt(0).toUpperCase()}${string.substring(1)}`\n"],"names":["createPredicateName","PredicateDefinitionProcessor","VariableDefinition","PredicateEvaluationReference"],"mappings":"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"}
1
+ {"version":3,"file":"EntityPredicateResolver.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/EntityPredicateResolver.ts"],"sourcesContent":["import deepEqual from 'fast-deep-equal'\n\nimport { Acl, Input, Model, Writable } from '@contember/schema'\nimport { PredicateDefinitionProcessor } from '@contember/schema-utils'\n\nimport { PermissionsByEntity } from './AclFactory.js'\nimport { createPredicateName } from './createPredicateName.js'\nimport { AllowDefinition, PredicateExtra, WhenDefinition } from '../permissions.js'\nimport { PredicateEvaluationReference } from '../references.js'\nimport { VariableDefinition } from '../variables.js'\n\nexport class EntityPredicatesResolver {\n\tprivate usedPredicates: string[] = []\n\n\tprivate constructor(\n\t\tprivate aclDefinitions: AllowDefinition<any>[],\n\t\tprivate predicates: Writable<Acl.PredicateMap>,\n\t\tprivate predicateNamesMap: Map<WhenDefinition, string>,\n\t\tprivate generatedNames: Set<string>,\n\t) {\n\t}\n\n\tpublic static create(\n\t\trolePermissions: PermissionsByEntity,\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t): EntityPredicatesResolver {\n\t\tconst predicates: Writable<Acl.PredicateMap> = {}\n\t\tconst predicateNamesMap = new Map<WhenDefinition, string>()\n\t\tconst aclDefinitions = rolePermissions.get(entity.name)?.definitions ?? []\n\t\tconst generatedNames = new Set<string>()\n\t\tconst definedNames = new Set<string>(aclDefinitions.map(it => it.name).filter((it): it is string => it !== undefined))\n\t\tfor (const permission of aclDefinitions) {\n\t\t\tif (!permission.when) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst resolvedPredicate = EntityPredicatesResolver.resolvePredicate(model, entity, permission.when, rolePermissions)\n\t\t\tlet predicateName = permission.name ?? createPredicateName(resolvedPredicate)\n\t\t\twhile (predicateName in predicates || definedNames.has(predicateName)) {\n\t\t\t\tpredicateName += '_'\n\t\t\t}\n\t\t\tif (!permission.name) {\n\t\t\t\tgeneratedNames.add(predicateName)\n\t\t\t}\n\t\t\tpredicates[predicateName] = resolvedPredicate\n\t\t\tpredicateNamesMap.set(permission.when, predicateName)\n\t\t}\n\t\tfor (const op of ['read', 'update', 'create'] as const) {\n\t\t\tfor (const definition of aclDefinitions) {\n\t\t\t\tconst fields = definition[op]\n\t\t\t\tif (!Array.isArray(fields)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tif (!(field in entity.fields)) {\n\t\t\t\t\t\tthrow `Field \"${String(field)}\" does not exist on entity \"${entity.name}\" in ${op} ACL definition.`\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new EntityPredicatesResolver(aclDefinitions, predicates, predicateNamesMap, generatedNames)\n\t}\n\n\tcreateFieldPredicate(op: 'create' | 'update' | 'read' | 'delete', field: string, isPrimary: boolean): true | undefined | string {\n\t\tconst fieldWhens = EntityPredicatesResolver.getMatchingWhens(this.aclDefinitions, op, field, isPrimary)\n\t\tif (fieldWhens.length === 0) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (fieldWhens.includes(true)) {\n\t\t\treturn true\n\t\t}\n\t\tconst predicateNames = (fieldWhens as WhenDefinition[]).map(it => {\n\t\t\tconst name = this.predicateNamesMap.get(it)\n\t\t\tif (!name) throw new Error('implementation error')\n\t\t\treturn name\n\t\t})\n\t\tif (predicateNames.length === 1) {\n\t\t\tthis.usedPredicates.push(predicateNames[0])\n\t\t\treturn predicateNames[0]\n\t\t}\n\n\t\tconst predicate = { or: predicateNames.map(it => this.predicates[it]) }\n\t\tconst origName = predicateNames.every(it => this.generatedNames.has(it)) ? createPredicateName(predicate) : predicateNames.join('_or_')\n\t\tlet predicateName = origName\n\t\tfor (let i = 1;; i++) {\n\t\t\tif (!(predicateName in this.predicates)) {\n\t\t\t\tthis.predicates[predicateName] = predicate\n\t\t\t\tbreak\n\t\t\t} else if (deepEqual(predicate, this.predicates[predicateName])) {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\tpredicateName = `${origName}_${i}`\n\t\t\t}\n\t\t}\n\t\tthis.usedPredicates.push(predicateName)\n\t\treturn predicateName\n\t}\n\n\tgetUsedPredicates(): Acl.PredicateMap {\n\t\treturn Object.fromEntries(Object.entries(this.predicates).filter(([name]) => this.usedPredicates.includes(name)))\n\t}\n\n\tprivate static resolvePredicate(\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t\twhen: WhenDefinition,\n\t\trolePermissionsByEntity: PermissionsByEntity,\n\t): Acl.PredicateDefinition {\n\t\tconst processor = new PredicateDefinitionProcessor(model)\n\t\treturn processor.process<Acl.PredicateReference | Input.Condition, PredicateExtra>(entity, when, {\n\t\t\thandleColumn(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn ctx.value.name\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tthrow `Predicate references are allowed only on relations. \\nYou cannot use \"can${upperCaseFirst(ctx.value.operation)}(${\n\t\t\t\t\t\tctx.value.field ? JSON.stringify(ctx.value.field) : ''\n\t\t\t\t\t})\" on a column \"${ctx.column.name}\" of entity \"${ctx.entity.name}\".`\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleRelation(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn { [ctx.targetEntity.primary]: ctx.value.name }\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tconst targetPermissions = rolePermissionsByEntity.get(ctx.targetEntity.name)\n\t\t\t\t\tif (!targetPermissions) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tconst ref = ctx.value\n\t\t\t\t\tconst whens = EntityPredicatesResolver.getMatchingWhens(targetPermissions.definitions, ref.operation, ref.field ?? '', false)\n\t\t\t\t\tif (whens.length === 0) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tif (whens.includes(true)) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { isNull: false } }\n\t\t\t\t\t}\n\t\t\t\t\tconst predicates = (whens as WhenDefinition[]).map(it =>\n\t\t\t\t\t\tEntityPredicatesResolver.resolvePredicate(model, ctx.targetEntity, it, rolePermissionsByEntity)\n\t\t\t\t\t)\n\t\t\t\t\tif (predicates.length > 1) {\n\t\t\t\t\t\treturn { or: predicates }\n\t\t\t\t\t}\n\t\t\t\t\treturn predicates[0]\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t})\n\t}\n\n\tprivate static getMatchingWhens(\n\t\tpermissions: AllowDefinition<any>[],\n\t\toperation: 'delete' | 'read' | 'update' | 'create',\n\t\tfield: string,\n\t\tisPrimary: boolean,\n\t) {\n\t\treturn permissions\n\t\t\t.filter(it => {\n\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\treturn !!it.delete\n\t\t\t\t}\n\t\t\t\tconst op = it[operation]\n\t\t\t\tif (!op) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (op === true) {\n\t\t\t\t\treturn !isPrimary\n\t\t\t\t}\n\t\t\t\treturn op.includes(field)\n\t\t\t})\n\t\t\t.map(it => it.when ?? true)\n\t}\n}\n\nconst upperCaseFirst = (string: string) => `${string.charAt(0).toUpperCase()}${string.substring(1)}`\n"],"names":["createPredicateName","PredicateDefinitionProcessor","VariableDefinition","PredicateEvaluationReference"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPredicateResolver.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/EntityPredicateResolver.ts"],"sourcesContent":["import deepEqual from 'fast-deep-equal'\n\nimport { Acl, Input, Model, Writable } from '@contember/schema'\nimport { PredicateDefinitionProcessor } from '@contember/schema-utils'\n\nimport { PermissionsByEntity } from './AclFactory'\nimport { createPredicateName } from './createPredicateName'\nimport { AllowDefinition, PredicateExtra, WhenDefinition } from '../permissions'\nimport { PredicateEvaluationReference } from '../references'\nimport { VariableDefinition } from '../variables'\n\nexport class EntityPredicatesResolver {\n\tprivate usedPredicates: string[] = []\n\n\tprivate constructor(\n\t\tprivate aclDefinitions: AllowDefinition<any>[],\n\t\tprivate predicates: Writable<Acl.PredicateMap>,\n\t\tprivate predicateNamesMap: Map<WhenDefinition, string>,\n\t\tprivate generatedNames: Set<string>,\n\t) {\n\t}\n\n\tpublic static create(\n\t\trolePermissions: PermissionsByEntity,\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t): EntityPredicatesResolver {\n\t\tconst predicates: Writable<Acl.PredicateMap> = {}\n\t\tconst predicateNamesMap = new Map<WhenDefinition, string>()\n\t\tconst aclDefinitions = rolePermissions.get(entity.name)?.definitions ?? []\n\t\tconst generatedNames = new Set<string>()\n\t\tconst definedNames = new Set<string>(aclDefinitions.map(it => it.name).filter((it): it is string => it !== undefined))\n\t\tfor (const permission of aclDefinitions) {\n\t\t\tif (!permission.when) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst resolvedPredicate = EntityPredicatesResolver.resolvePredicate(model, entity, permission.when, rolePermissions)\n\t\t\tlet predicateName = permission.name ?? createPredicateName(resolvedPredicate)\n\t\t\twhile (predicateName in predicates || definedNames.has(predicateName)) {\n\t\t\t\tpredicateName += '_'\n\t\t\t}\n\t\t\tif (!permission.name) {\n\t\t\t\tgeneratedNames.add(predicateName)\n\t\t\t}\n\t\t\tpredicates[predicateName] = resolvedPredicate\n\t\t\tpredicateNamesMap.set(permission.when, predicateName)\n\t\t}\n\t\tfor (const op of ['read', 'update', 'create'] as const) {\n\t\t\tfor (const definition of aclDefinitions) {\n\t\t\t\tconst fields = definition[op]\n\t\t\t\tif (!Array.isArray(fields)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tif (!(field in entity.fields)) {\n\t\t\t\t\t\tthrow `Field \"${String(field)}\" does not exist on entity \"${entity.name}\" in ${op} ACL definition.`\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new EntityPredicatesResolver(aclDefinitions, predicates, predicateNamesMap, generatedNames)\n\t}\n\n\tcreateFieldPredicate(op: 'create' | 'update' | 'read' | 'delete', field: string, isPrimary: boolean): true | undefined | string {\n\t\tconst fieldWhens = EntityPredicatesResolver.getMatchingWhens(this.aclDefinitions, op, field, isPrimary)\n\t\tif (fieldWhens.length === 0) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (fieldWhens.includes(true)) {\n\t\t\treturn true\n\t\t}\n\t\tconst predicateNames = (fieldWhens as WhenDefinition[]).map(it => {\n\t\t\tconst name = this.predicateNamesMap.get(it)\n\t\t\tif (!name) throw new Error('implementation error')\n\t\t\treturn name\n\t\t})\n\t\tif (predicateNames.length === 1) {\n\t\t\tthis.usedPredicates.push(predicateNames[0])\n\t\t\treturn predicateNames[0]\n\t\t}\n\n\t\tconst predicate = { or: predicateNames.map(it => this.predicates[it]) }\n\t\tconst origName = predicateNames.every(it => this.generatedNames.has(it)) ? createPredicateName(predicate) : predicateNames.join('_or_')\n\t\tlet predicateName = origName\n\t\tfor (let i = 1;; i++) {\n\t\t\tif (!(predicateName in this.predicates)) {\n\t\t\t\tthis.predicates[predicateName] = predicate\n\t\t\t\tbreak\n\t\t\t} else if (deepEqual(predicate, this.predicates[predicateName])) {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\tpredicateName = `${origName}_${i}`\n\t\t\t}\n\t\t}\n\t\tthis.usedPredicates.push(predicateName)\n\t\treturn predicateName\n\t}\n\n\tgetUsedPredicates(): Acl.PredicateMap {\n\t\treturn Object.fromEntries(Object.entries(this.predicates).filter(([name]) => this.usedPredicates.includes(name)))\n\t}\n\n\tprivate static resolvePredicate(\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t\twhen: WhenDefinition,\n\t\trolePermissionsByEntity: PermissionsByEntity,\n\t): Acl.PredicateDefinition {\n\t\tconst processor = new PredicateDefinitionProcessor(model)\n\t\treturn processor.process<Acl.PredicateReference | Input.Condition, PredicateExtra>(entity, when, {\n\t\t\thandleColumn(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn ctx.value.name\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tthrow `Predicate references are allowed only on relations. \\nYou cannot use \"can${upperCaseFirst(ctx.value.operation)}(${\n\t\t\t\t\t\tctx.value.field ? JSON.stringify(ctx.value.field) : ''\n\t\t\t\t\t})\" on a column \"${ctx.column.name}\" of entity \"${ctx.entity.name}\".`\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleRelation(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn { [ctx.targetEntity.primary]: ctx.value.name }\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tconst targetPermissions = rolePermissionsByEntity.get(ctx.targetEntity.name)\n\t\t\t\t\tif (!targetPermissions) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tconst ref = ctx.value\n\t\t\t\t\tconst whens = EntityPredicatesResolver.getMatchingWhens(targetPermissions.definitions, ref.operation, ref.field ?? '', false)\n\t\t\t\t\tif (whens.length === 0) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tif (whens.includes(true)) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { isNull: false } }\n\t\t\t\t\t}\n\t\t\t\t\tconst predicates = (whens as WhenDefinition[]).map(it =>\n\t\t\t\t\t\tEntityPredicatesResolver.resolvePredicate(model, ctx.targetEntity, it, rolePermissionsByEntity)\n\t\t\t\t\t)\n\t\t\t\t\tif (predicates.length > 1) {\n\t\t\t\t\t\treturn { or: predicates }\n\t\t\t\t\t}\n\t\t\t\t\treturn predicates[0]\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t})\n\t}\n\n\tprivate static getMatchingWhens(\n\t\tpermissions: AllowDefinition<any>[],\n\t\toperation: 'delete' | 'read' | 'update' | 'create',\n\t\tfield: string,\n\t\tisPrimary: boolean,\n\t) {\n\t\treturn permissions\n\t\t\t.filter(it => {\n\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\treturn !!it.delete\n\t\t\t\t}\n\t\t\t\tconst op = it[operation]\n\t\t\t\tif (!op) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (op === true) {\n\t\t\t\t\treturn !isPrimary\n\t\t\t\t}\n\t\t\t\treturn op.includes(field)\n\t\t\t})\n\t\t\t.map(it => it.when ?? true)\n\t}\n}\n\nconst upperCaseFirst = (string: string) => `${string.charAt(0).toUpperCase()}${string.substring(1)}`\n"],"names":[],"mappings":";;;;;;;;AAWO,MAAM,yBAAyB;AAAA,EAG7B,YACC,gBACA,YACA,mBACA,gBACP;AAJO,SAAA,iBAAA;AACA,SAAA,aAAA;AACA,SAAA,oBAAA;AACA,SAAA,iBAAA;AANT,kBAAA,MAAQ,kBAA2B,EAAC;AAAA,EAQpC;AAAA,EAEA,OAAc,OACb,iBACA,OACA,QAC2B;AAC3B,UAAM,aAAyC,CAAA;AAC/C,UAAM,wCAAwB,IAAA;AAC9B,UAAM,iBAAiB,gBAAgB,IAAI,OAAO,IAAI,GAAG,eAAe,CAAA;AACxE,UAAM,qCAAqB,IAAA;AAC3B,UAAM,eAAe,IAAI,IAAY,eAAe,IAAI,CAAA,OAAM,GAAG,IAAI,EAAE,OAAO,CAAC,OAAqB,OAAO,MAAS,CAAC;AACrH,eAAW,cAAc,gBAAgB;AACxC,UAAI,CAAC,WAAW,MAAM;AACrB;AAAA,MACD;AACA,YAAM,oBAAoB,yBAAyB,iBAAiB,OAAO,QAAQ,WAAW,MAAM,eAAe;AACnH,UAAI,gBAAgB,WAAW,QAAQ,oBAAoB,iBAAiB;AAC5E,aAAO,iBAAiB,cAAc,aAAa,IAAI,aAAa,GAAG;AACtE,yBAAiB;AAAA,MAClB;AACA,UAAI,CAAC,WAAW,MAAM;AACrB,uBAAe,IAAI,aAAa;AAAA,MACjC;AACA,iBAAW,aAAa,IAAI;AAC5B,wBAAkB,IAAI,WAAW,MAAM,aAAa;AAAA,IACrD;AACA,eAAW,MAAM,CAAC,QAAQ,UAAU,QAAQ,GAAY;AACvD,iBAAW,cAAc,gBAAgB;AACxC,cAAM,SAAS,WAAW,EAAE;AAC5B,YAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC3B;AAAA,QACD;AACA,mBAAW,SAAS,QAAQ;AAC3B,cAAI,EAAE,SAAS,OAAO,SAAS;AAC9B,kBAAM,UAAU,OAAO,KAAK,CAAC,+BAA+B,OAAO,IAAI,QAAQ,EAAE;AAAA,UAClF;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,IAAI,yBAAyB,gBAAgB,YAAY,mBAAmB,cAAc;AAAA,EAClG;AAAA,EAEA,qBAAqB,IAA6C,OAAe,WAA+C;AAC/H,UAAM,aAAa,yBAAyB,iBAAiB,KAAK,gBAAgB,IAAI,OAAO,SAAS;AACtG,QAAI,WAAW,WAAW,GAAG;AAC5B,aAAO;AAAA,IACR;AACA,QAAI,WAAW,SAAS,IAAI,GAAG;AAC9B,aAAO;AAAA,IACR;AACA,UAAM,iBAAkB,WAAgC,IAAI,CAAA,OAAM;AACjE,YAAM,OAAO,KAAK,kBAAkB,IAAI,EAAE;AAC1C,UAAI,CAAC,KAAM,OAAM,IAAI,MAAM,sBAAsB;AACjD,aAAO;AAAA,IACR,CAAC;AACD,QAAI,eAAe,WAAW,GAAG;AAChC,WAAK,eAAe,KAAK,eAAe,CAAC,CAAC;AAC1C,aAAO,eAAe,CAAC;AAAA,IACxB;AAEA,UAAM,YAAY,EAAE,IAAI,eAAe,IAAI,QAAM,KAAK,WAAW,EAAE,CAAC,EAAA;AACpE,UAAM,WAAW,eAAe,MAAM,CAAA,OAAM,KAAK,eAAe,IAAI,EAAE,CAAC,IAAI,oBAAoB,SAAS,IAAI,eAAe,KAAK,MAAM;AACtI,QAAI,gBAAgB;AACpB,aAAS,IAAI,KAAI,KAAK;AACrB,UAAI,EAAE,iBAAiB,KAAK,aAAa;AACxC,aAAK,WAAW,aAAa,IAAI;AACjC;AAAA,MACD,WAAW,UAAU,WAAW,KAAK,WAAW,aAAa,CAAC,GAAG;AAChE;AAAA,MACD,OAAO;AACN,wBAAgB,GAAG,QAAQ,IAAI,CAAC;AAAA,MACjC;AAAA,IACD;AACA,SAAK,eAAe,KAAK,aAAa;AACtC,WAAO;AAAA,EACR;AAAA,EAEA,oBAAsC;AACrC,WAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,MAAM,KAAK,eAAe,SAAS,IAAI,CAAC,CAAC;AAAA,EACjH;AAAA,EAEA,OAAe,iBACd,OACA,QACA,MACA,yBAC0B;AAC1B,UAAM,YAAY,IAAI,6BAA6B,KAAK;AACxD,WAAO,UAAU,QAAkE,QAAQ,MAAM;AAAA,MAChG,aAAa,KAAK;AACjB,YAAI,IAAI,iBAAiB,oBAAoB;AAC5C,iBAAO,IAAI,MAAM;AAAA,QAClB;AACA,YAAI,IAAI,iBAAiB,8BAA8B;AACtD,gBAAM;AAAA,qBAA4E,eAAe,IAAI,MAAM,SAAS,CAAC,IACpH,IAAI,MAAM,QAAQ,KAAK,UAAU,IAAI,MAAM,KAAK,IAAI,EACrD,mBAAmB,IAAI,OAAO,IAAI,gBAAgB,IAAI,OAAO,IAAI;AAAA,QAClE;AACA,eAAO,IAAI;AAAA,MACZ;AAAA,MACA,eAAe,KAAK;AACnB,YAAI,IAAI,iBAAiB,oBAAoB;AAC5C,iBAAO,EAAE,CAAC,IAAI,aAAa,OAAO,GAAG,IAAI,MAAM,KAAA;AAAA,QAChD;AACA,YAAI,IAAI,iBAAiB,8BAA8B;AACtD,gBAAM,oBAAoB,wBAAwB,IAAI,IAAI,aAAa,IAAI;AAC3E,cAAI,CAAC,mBAAmB;AACvB,mBAAO,EAAE,CAAC,IAAI,aAAa,OAAO,GAAG,EAAE,OAAO,OAAK;AAAA,UACpD;AACA,gBAAM,MAAM,IAAI;AAChB,gBAAM,QAAQ,yBAAyB,iBAAiB,kBAAkB,aAAa,IAAI,WAAW,IAAI,SAAS,IAAI,KAAK;AAC5H,cAAI,MAAM,WAAW,GAAG;AACvB,mBAAO,EAAE,CAAC,IAAI,aAAa,OAAO,GAAG,EAAE,OAAO,OAAK;AAAA,UACpD;AACA,cAAI,MAAM,SAAS,IAAI,GAAG;AACzB,mBAAO,EAAE,CAAC,IAAI,aAAa,OAAO,GAAG,EAAE,QAAQ,QAAM;AAAA,UACtD;AACA,gBAAM,aAAc,MAA2B;AAAA,YAAI,QAClD,yBAAyB,iBAAiB,OAAO,IAAI,cAAc,IAAI,uBAAuB;AAAA,UAAA;AAE/F,cAAI,WAAW,SAAS,GAAG;AAC1B,mBAAO,EAAE,IAAI,WAAA;AAAA,UACd;AACA,iBAAO,WAAW,CAAC;AAAA,QACpB;AACA,eAAO,IAAI;AAAA,MACZ;AAAA,IAAA,CACA;AAAA,EACF;AAAA,EAEA,OAAe,iBACd,aACA,WACA,OACA,WACC;AACD,WAAO,YACL,OAAO,CAAA,OAAM;AACb,UAAI,cAAc,UAAU;AAC3B,eAAO,CAAC,CAAC,GAAG;AAAA,MACb;AACA,YAAM,KAAK,GAAG,SAAS;AACvB,UAAI,CAAC,IAAI;AACR,eAAO;AAAA,MACR;AACA,UAAI,OAAO,MAAM;AAChB,eAAO,CAAC;AAAA,MACT;AACA,aAAO,GAAG,SAAS,KAAK;AAAA,IACzB,CAAC,EACA,IAAI,CAAA,OAAM,GAAG,QAAQ,IAAI;AAAA,EAC5B;AACD;AAEA,MAAM,iBAAiB,CAAC,WAAmB,GAAG,OAAO,OAAO,CAAC,EAAE,YAAA,CAAa,GAAG,OAAO,UAAU,CAAC,CAAC;"}
1
+ {"version":3,"file":"EntityPredicateResolver.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/EntityPredicateResolver.ts"],"sourcesContent":["import deepEqual from 'fast-deep-equal'\n\nimport { Acl, Input, Model, Writable } from '@contember/schema'\nimport { PredicateDefinitionProcessor } from '@contember/schema-utils'\n\nimport { PermissionsByEntity } from './AclFactory.js'\nimport { createPredicateName } from './createPredicateName.js'\nimport { AllowDefinition, PredicateExtra, WhenDefinition } from '../permissions.js'\nimport { PredicateEvaluationReference } from '../references.js'\nimport { VariableDefinition } from '../variables.js'\n\nexport class EntityPredicatesResolver {\n\tprivate usedPredicates: string[] = []\n\n\tprivate constructor(\n\t\tprivate aclDefinitions: AllowDefinition<any>[],\n\t\tprivate predicates: Writable<Acl.PredicateMap>,\n\t\tprivate predicateNamesMap: Map<WhenDefinition, string>,\n\t\tprivate generatedNames: Set<string>,\n\t) {\n\t}\n\n\tpublic static create(\n\t\trolePermissions: PermissionsByEntity,\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t): EntityPredicatesResolver {\n\t\tconst predicates: Writable<Acl.PredicateMap> = {}\n\t\tconst predicateNamesMap = new Map<WhenDefinition, string>()\n\t\tconst aclDefinitions = rolePermissions.get(entity.name)?.definitions ?? []\n\t\tconst generatedNames = new Set<string>()\n\t\tconst definedNames = new Set<string>(aclDefinitions.map(it => it.name).filter((it): it is string => it !== undefined))\n\t\tfor (const permission of aclDefinitions) {\n\t\t\tif (!permission.when) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst resolvedPredicate = EntityPredicatesResolver.resolvePredicate(model, entity, permission.when, rolePermissions)\n\t\t\tlet predicateName = permission.name ?? createPredicateName(resolvedPredicate)\n\t\t\twhile (predicateName in predicates || definedNames.has(predicateName)) {\n\t\t\t\tpredicateName += '_'\n\t\t\t}\n\t\t\tif (!permission.name) {\n\t\t\t\tgeneratedNames.add(predicateName)\n\t\t\t}\n\t\t\tpredicates[predicateName] = resolvedPredicate\n\t\t\tpredicateNamesMap.set(permission.when, predicateName)\n\t\t}\n\t\tfor (const op of ['read', 'update', 'create'] as const) {\n\t\t\tfor (const definition of aclDefinitions) {\n\t\t\t\tconst fields = definition[op]\n\t\t\t\tif (!Array.isArray(fields)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tif (!(field in entity.fields)) {\n\t\t\t\t\t\tthrow `Field \"${String(field)}\" does not exist on entity \"${entity.name}\" in ${op} ACL definition.`\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new EntityPredicatesResolver(aclDefinitions, predicates, predicateNamesMap, generatedNames)\n\t}\n\n\tcreateFieldPredicate(op: 'create' | 'update' | 'read' | 'delete', field: string, isPrimary: boolean): true | undefined | string {\n\t\tconst fieldWhens = EntityPredicatesResolver.getMatchingWhens(this.aclDefinitions, op, field, isPrimary)\n\t\tif (fieldWhens.length === 0) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (fieldWhens.includes(true)) {\n\t\t\treturn true\n\t\t}\n\t\tconst predicateNames = (fieldWhens as WhenDefinition[]).map(it => {\n\t\t\tconst name = this.predicateNamesMap.get(it)\n\t\t\tif (!name) throw new Error('implementation error')\n\t\t\treturn name\n\t\t})\n\t\tif (predicateNames.length === 1) {\n\t\t\tthis.usedPredicates.push(predicateNames[0])\n\t\t\treturn predicateNames[0]\n\t\t}\n\n\t\tconst predicate = { or: predicateNames.map(it => this.predicates[it]) }\n\t\tconst origName = predicateNames.every(it => this.generatedNames.has(it)) ? createPredicateName(predicate) : predicateNames.join('_or_')\n\t\tlet predicateName = origName\n\t\tfor (let i = 1;; i++) {\n\t\t\tif (!(predicateName in this.predicates)) {\n\t\t\t\tthis.predicates[predicateName] = predicate\n\t\t\t\tbreak\n\t\t\t} else if (deepEqual(predicate, this.predicates[predicateName])) {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\tpredicateName = `${origName}_${i}`\n\t\t\t}\n\t\t}\n\t\tthis.usedPredicates.push(predicateName)\n\t\treturn predicateName\n\t}\n\n\tgetUsedPredicates(): Acl.PredicateMap {\n\t\treturn Object.fromEntries(Object.entries(this.predicates).filter(([name]) => this.usedPredicates.includes(name)))\n\t}\n\n\tprivate static resolvePredicate(\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t\twhen: WhenDefinition,\n\t\trolePermissionsByEntity: PermissionsByEntity,\n\t): Acl.PredicateDefinition {\n\t\tconst processor = new PredicateDefinitionProcessor(model)\n\t\treturn processor.process<Acl.PredicateReference | Input.Condition, PredicateExtra>(entity, when, {\n\t\t\thandleColumn(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn ctx.value.name\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tthrow `Predicate references are allowed only on relations. \\nYou cannot use \"can${upperCaseFirst(ctx.value.operation)}(${\n\t\t\t\t\t\tctx.value.field ? JSON.stringify(ctx.value.field) : ''\n\t\t\t\t\t})\" on a column \"${ctx.column.name}\" of entity \"${ctx.entity.name}\".`\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleRelation(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn { [ctx.targetEntity.primary]: ctx.value.name }\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tconst targetPermissions = rolePermissionsByEntity.get(ctx.targetEntity.name)\n\t\t\t\t\tif (!targetPermissions) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tconst ref = ctx.value\n\t\t\t\t\tconst whens = EntityPredicatesResolver.getMatchingWhens(targetPermissions.definitions, ref.operation, ref.field ?? '', false)\n\t\t\t\t\tif (whens.length === 0) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tif (whens.includes(true)) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { isNull: false } }\n\t\t\t\t\t}\n\t\t\t\t\tconst predicates = (whens as WhenDefinition[]).map(it =>\n\t\t\t\t\t\tEntityPredicatesResolver.resolvePredicate(model, ctx.targetEntity, it, rolePermissionsByEntity)\n\t\t\t\t\t)\n\t\t\t\t\tif (predicates.length > 1) {\n\t\t\t\t\t\treturn { or: predicates }\n\t\t\t\t\t}\n\t\t\t\t\treturn predicates[0]\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t})\n\t}\n\n\tprivate static getMatchingWhens(\n\t\tpermissions: AllowDefinition<any>[],\n\t\toperation: 'delete' | 'read' | 'update' | 'create',\n\t\tfield: string,\n\t\tisPrimary: boolean,\n\t) {\n\t\treturn permissions\n\t\t\t.filter(it => {\n\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\treturn !!it.delete\n\t\t\t\t}\n\t\t\t\tconst op = it[operation]\n\t\t\t\tif (!op) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (op === true) {\n\t\t\t\t\treturn !isPrimary\n\t\t\t\t}\n\t\t\t\treturn op.includes(field)\n\t\t\t})\n\t\t\t.map(it => it.when ?? true)\n\t}\n}\n\nconst upperCaseFirst = (string: string) => `${string.charAt(0).toUpperCase()}${string.substring(1)}`\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"createPredicateName.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/createPredicateName.ts"],"sourcesContent":["import { WhenDefinition } from '../permissions'\n\nexport const createPredicateName = (when: WhenDefinition) => {\n\tconst json = JSON.stringify(when)\n\treturn json.replace(/[^A-Za-z0-9]+/g, '_').slice(0, 30).replace(/^_|_$/g, '')\n}\n"],"names":[],"mappings":";;AAEO,MAAM,sBAAsB,CAAC,SAAyB;AAC5D,QAAM,OAAO,KAAK,UAAU,IAAI;AAChC,SAAO,KAAK,QAAQ,kBAAkB,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,UAAU,EAAE;AAC7E;;"}
1
+ {"version":3,"file":"createPredicateName.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/createPredicateName.ts"],"sourcesContent":["import { WhenDefinition } from '../permissions.js'\n\nexport const createPredicateName = (when: WhenDefinition) => {\n\tconst json = JSON.stringify(when)\n\treturn json.replace(/[^A-Za-z0-9]+/g, '_').slice(0, 30).replace(/^_|_$/g, '')\n}\n"],"names":[],"mappings":";;AAEO,MAAM,sBAAsB,CAAC,SAAyB;AAC5D,QAAM,OAAO,KAAK,UAAU,IAAI;AAChC,SAAO,KAAK,QAAQ,kBAAkB,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,UAAU,EAAE;AAC7E;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"createPredicateName.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/createPredicateName.ts"],"sourcesContent":["import { WhenDefinition } from '../permissions'\n\nexport const createPredicateName = (when: WhenDefinition) => {\n\tconst json = JSON.stringify(when)\n\treturn json.replace(/[^A-Za-z0-9]+/g, '_').slice(0, 30).replace(/^_|_$/g, '')\n}\n"],"names":[],"mappings":"AAEO,MAAM,sBAAsB,CAAC,SAAyB;AAC5D,QAAM,OAAO,KAAK,UAAU,IAAI;AAChC,SAAO,KAAK,QAAQ,kBAAkB,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,UAAU,EAAE;AAC7E;"}
1
+ {"version":3,"file":"createPredicateName.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/createPredicateName.ts"],"sourcesContent":["import { WhenDefinition } from '../permissions.js'\n\nexport const createPredicateName = (when: WhenDefinition) => {\n\tconst json = JSON.stringify(when)\n\treturn json.replace(/[^A-Za-z0-9]+/g, '_').slice(0, 30).replace(/^_|_$/g, '')\n}\n"],"names":[],"mappings":"AAEO,MAAM,sBAAsB,CAAC,SAAyB;AAC5D,QAAM,OAAO,KAAK,UAAU,IAAI;AAChC,SAAO,KAAK,QAAQ,kBAAkB,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,UAAU,EAAE;AAC7E;"}
@@ -1 +1 @@
1
- {"version":3,"file":"stores.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { AllowDefinitionFactory } from '../permissions'\nimport { Role } from '../roles'\n\nexport type EntityPermissionsDefinition = {\n\tfactory: AllowDefinitionFactory<any>\n\trole: Role<string>\n}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":["createMetadataStore"],"mappings":";;;AAQO,MAAM,wBAAwBA,cAAAA,oBAAmD,CAAA,CAAE;;"}
1
+ {"version":3,"file":"stores.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore.js'\nimport { AllowDefinitionFactory } from '../permissions.js'\nimport { Role } from '../roles.js'\n\nexport type EntityPermissionsDefinition = {\n\tfactory: AllowDefinitionFactory<any>\n\trole: Role<string>\n}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":["createMetadataStore"],"mappings":";;;AAQO,MAAM,wBAAwBA,cAAAA,oBAAmD,CAAA,CAAE;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"stores.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { AllowDefinitionFactory } from '../permissions'\nimport { Role } from '../roles'\n\nexport type EntityPermissionsDefinition = {\n\tfactory: AllowDefinitionFactory<any>\n\trole: Role<string>\n}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":[],"mappings":";AAQO,MAAM,wBAAwB,oBAAmD,CAAA,CAAE;"}
1
+ {"version":3,"file":"stores.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore.js'\nimport { AllowDefinitionFactory } from '../permissions.js'\nimport { Role } from '../roles.js'\n\nexport type EntityPermissionsDefinition = {\n\tfactory: AllowDefinitionFactory<any>\n\trole: Role<string>\n}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":[],"mappings":";AAQO,MAAM,wBAAwB,oBAAmD,CAAA,CAAE;"}
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/permissions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { Role } from './roles'\nimport { VariableDefinition } from './variables'\nimport { PredicateEvaluationReference } from './references'\nimport { allowDefinitionsStore } from './internal/stores'\nimport { DecoratorFunction, EntityConstructor } from '../../utils'\n\nexport type PredicateExtra = PredicateEvaluationReference | VariableDefinition\nexport type WhenDefinition = Acl.PredicateDefinition<PredicateExtra>\n\nexport interface AllowDefinition<E> {\n\twhen?: WhenDefinition\n\tthrough?: true\n\tname?: string\n\tcreate?: true | ('id' | keyof E)[]\n\tupdate?: true | ('id' | keyof E)[]\n\tread?: true | ('id' | keyof E)[]\n\tdelete?: true\n}\n\nexport type AllowDefinitionFactory<E> = (args: {\n\tmodel: Model.Schema\n\tentity: Model.Entity<(keyof E) & string>\n\texcept: (...fields: (keyof E)[]) => (keyof E)[]\n}) => AllowDefinition<E>\n\nexport const allow = <E, R extends Role<string>>(role: R | R[], args: AllowDefinition<E> | AllowDefinitionFactory<E>): DecoratorFunction<E> => {\n\treturn (entity: EntityConstructor<E>, context?: ClassDecoratorContext) => {\n\t\t;(Array.isArray(role) ? role : [role]).forEach(role => {\n\t\t\tallowDefinitionsStore.update(entity, val => [...val, {\n\t\t\t\tfactory: typeof args === 'function' ? args : () => args,\n\t\t\t\trole,\n\t\t\t}], context)\n\t\t})\n\t}\n}\n"],"names":["role","allowDefinitionsStore"],"mappings":";;;AA0BO,MAAM,QAAQ,CAA4B,MAAe,SAA+E;AAC9I,SAAO,CAAC,QAA8B,YAAoC;AACxE,KAAC,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAAA,UAAQ;AACtDC,aAAAA,sBAAsB,OAAO,QAAQ,CAAA,QAAO,CAAC,GAAG,KAAK;AAAA,QACpD,SAAS,OAAO,SAAS,aAAa,OAAO,MAAM;AAAA,QACnD,MAAAD;AAAAA,MAAA,CACA,GAAG,OAAO;AAAA,IACZ,CAAC;AAAA,EACF;AACD;;"}
1
+ {"version":3,"file":"permissions.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/permissions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { Role } from './roles.js'\nimport { VariableDefinition } from './variables.js'\nimport { PredicateEvaluationReference } from './references.js'\nimport { allowDefinitionsStore } from './internal/stores.js'\nimport { DecoratorFunction, EntityConstructor } from '../../utils/index.js'\n\nexport type PredicateExtra = PredicateEvaluationReference | VariableDefinition\nexport type WhenDefinition = Acl.PredicateDefinition<PredicateExtra>\n\nexport interface AllowDefinition<E> {\n\twhen?: WhenDefinition\n\tthrough?: true\n\tname?: string\n\tcreate?: true | ('id' | keyof E)[]\n\tupdate?: true | ('id' | keyof E)[]\n\tread?: true | ('id' | keyof E)[]\n\tdelete?: true\n}\n\nexport type AllowDefinitionFactory<E> = (args: {\n\tmodel: Model.Schema\n\tentity: Model.Entity<(keyof E) & string>\n\texcept: (...fields: (keyof E)[]) => (keyof E)[]\n}) => AllowDefinition<E>\n\nexport const allow = <E, R extends Role<string>>(role: R | R[], args: AllowDefinition<E> | AllowDefinitionFactory<E>): DecoratorFunction<E> => {\n\treturn (entity: EntityConstructor<E>, context?: ClassDecoratorContext) => {\n\t\t;(Array.isArray(role) ? role : [role]).forEach(role => {\n\t\t\tallowDefinitionsStore.update(entity, val => [...val, {\n\t\t\t\tfactory: typeof args === 'function' ? args : () => args,\n\t\t\t\trole,\n\t\t\t}], context)\n\t\t})\n\t}\n}\n"],"names":["role","allowDefinitionsStore"],"mappings":";;;AA0BO,MAAM,QAAQ,CAA4B,MAAe,SAA+E;AAC9I,SAAO,CAAC,QAA8B,YAAoC;AACxE,KAAC,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAAA,UAAQ;AACtDC,aAAAA,sBAAsB,OAAO,QAAQ,CAAA,QAAO,CAAC,GAAG,KAAK;AAAA,QACpD,SAAS,OAAO,SAAS,aAAa,OAAO,MAAM;AAAA,QACnD,MAAAD;AAAAA,MAAA,CACA,GAAG,OAAO;AAAA,IACZ,CAAC;AAAA,EACF;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/permissions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { Role } from './roles'\nimport { VariableDefinition } from './variables'\nimport { PredicateEvaluationReference } from './references'\nimport { allowDefinitionsStore } from './internal/stores'\nimport { DecoratorFunction, EntityConstructor } from '../../utils'\n\nexport type PredicateExtra = PredicateEvaluationReference | VariableDefinition\nexport type WhenDefinition = Acl.PredicateDefinition<PredicateExtra>\n\nexport interface AllowDefinition<E> {\n\twhen?: WhenDefinition\n\tthrough?: true\n\tname?: string\n\tcreate?: true | ('id' | keyof E)[]\n\tupdate?: true | ('id' | keyof E)[]\n\tread?: true | ('id' | keyof E)[]\n\tdelete?: true\n}\n\nexport type AllowDefinitionFactory<E> = (args: {\n\tmodel: Model.Schema\n\tentity: Model.Entity<(keyof E) & string>\n\texcept: (...fields: (keyof E)[]) => (keyof E)[]\n}) => AllowDefinition<E>\n\nexport const allow = <E, R extends Role<string>>(role: R | R[], args: AllowDefinition<E> | AllowDefinitionFactory<E>): DecoratorFunction<E> => {\n\treturn (entity: EntityConstructor<E>, context?: ClassDecoratorContext) => {\n\t\t;(Array.isArray(role) ? role : [role]).forEach(role => {\n\t\t\tallowDefinitionsStore.update(entity, val => [...val, {\n\t\t\t\tfactory: typeof args === 'function' ? args : () => args,\n\t\t\t\trole,\n\t\t\t}], context)\n\t\t})\n\t}\n}\n"],"names":["role"],"mappings":";AA0BO,MAAM,QAAQ,CAA4B,MAAe,SAA+E;AAC9I,SAAO,CAAC,QAA8B,YAAoC;AACxE,KAAC,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAAA,UAAQ;AACtD,4BAAsB,OAAO,QAAQ,CAAA,QAAO,CAAC,GAAG,KAAK;AAAA,QACpD,SAAS,OAAO,SAAS,aAAa,OAAO,MAAM;AAAA,QACnD,MAAAA;AAAAA,MAAA,CACA,GAAG,OAAO;AAAA,IACZ,CAAC;AAAA,EACF;AACD;"}
1
+ {"version":3,"file":"permissions.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/permissions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { Role } from './roles.js'\nimport { VariableDefinition } from './variables.js'\nimport { PredicateEvaluationReference } from './references.js'\nimport { allowDefinitionsStore } from './internal/stores.js'\nimport { DecoratorFunction, EntityConstructor } from '../../utils/index.js'\n\nexport type PredicateExtra = PredicateEvaluationReference | VariableDefinition\nexport type WhenDefinition = Acl.PredicateDefinition<PredicateExtra>\n\nexport interface AllowDefinition<E> {\n\twhen?: WhenDefinition\n\tthrough?: true\n\tname?: string\n\tcreate?: true | ('id' | keyof E)[]\n\tupdate?: true | ('id' | keyof E)[]\n\tread?: true | ('id' | keyof E)[]\n\tdelete?: true\n}\n\nexport type AllowDefinitionFactory<E> = (args: {\n\tmodel: Model.Schema\n\tentity: Model.Entity<(keyof E) & string>\n\texcept: (...fields: (keyof E)[]) => (keyof E)[]\n}) => AllowDefinition<E>\n\nexport const allow = <E, R extends Role<string>>(role: R | R[], args: AllowDefinition<E> | AllowDefinitionFactory<E>): DecoratorFunction<E> => {\n\treturn (entity: EntityConstructor<E>, context?: ClassDecoratorContext) => {\n\t\t;(Array.isArray(role) ? role : [role]).forEach(role => {\n\t\t\tallowDefinitionsStore.update(entity, val => [...val, {\n\t\t\t\tfactory: typeof args === 'function' ? args : () => args,\n\t\t\t\trole,\n\t\t\t}], context)\n\t\t})\n\t}\n}\n"],"names":["role"],"mappings":";AA0BO,MAAM,QAAQ,CAA4B,MAAe,SAA+E;AAC9I,SAAO,CAAC,QAA8B,YAAoC;AACxE,KAAC,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAAA,UAAQ;AACtD,4BAAsB,OAAO,QAAQ,CAAA,QAAO,CAAC,GAAG,KAAK;AAAA,QACpD,SAAS,OAAO,SAAS,aAAa,OAAO,MAAM;AAAA,QACnD,MAAAA;AAAAA,MAAA,CACA,GAAG,OAAO;AAAA,IACZ,CAAC;AAAA,EACF;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"variables.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/variables.ts"],"sourcesContent":["import { Role } from './roles'\nimport { Acl, Input } from '@contember/schema'\n\nexport class VariableDefinition<\n\tName extends string = string,\n\tRoles extends Role<string> = Role<string>,\n\tVariable extends Acl.Variable = Acl.Variable,\n> {\n\tconstructor(\n\t\tpublic readonly name: Name,\n\t\tpublic readonly roles: Roles[],\n\t\tpublic readonly variable: Acl.Variable,\n\t) {\n\t}\n}\n\nexport const createEntityVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\tentityName: string,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.EntityVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.entity, entityName, ...(fallback ? { fallback } : {}) },\n\t)\n}\n\nexport const createPredefinedVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\tvalue: Acl.PredefinedVariableValue,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.EntityVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.predefined, value },\n\t)\n}\n\nexport const createConditionVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.ConditionVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.condition, ...(fallback ? { fallback } : {}) },\n\t)\n}\n"],"names":["Acl"],"mappings":";;;AAGO,MAAM,mBAIX;AAAA,EACD,YACiB,MACA,OACA,UACf;AAHe,SAAA,OAAA;AACA,SAAA,QAAA;AACA,SAAA,WAAA;AAAA,EAEjB;AACD;AAEO,MAAM,uBAAuB,CACnC,MACA,YACA,OACA,aACqD;AACrD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAMA,WAAI,aAAa,QAAQ,YAAY,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA,EAAC;AAAA,EAAG;AAEjF;AAEO,MAAM,2BAA2B,CACvC,MACA,OACA,OACA,aACqD;AACrD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAMA,OAAAA,IAAI,aAAa,YAAY,MAAA;AAAA,EAAM;AAE7C;AAEO,MAAM,0BAA0B,CACtC,MACA,OACA,aACwD;AACxD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAMA,OAAAA,IAAI,aAAa,WAAW,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA,EAAC;AAAA,EAAG;AAExE;;;;;"}
1
+ {"version":3,"file":"variables.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/variables.ts"],"sourcesContent":["import { Role } from './roles.js'\nimport { Acl, Input } from '@contember/schema'\n\nexport class VariableDefinition<\n\tName extends string = string,\n\tRoles extends Role<string> = Role<string>,\n\tVariable extends Acl.Variable = Acl.Variable,\n> {\n\tconstructor(\n\t\tpublic readonly name: Name,\n\t\tpublic readonly roles: Roles[],\n\t\tpublic readonly variable: Acl.Variable,\n\t) {\n\t}\n}\n\nexport const createEntityVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\tentityName: string,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.EntityVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.entity, entityName, ...(fallback ? { fallback } : {}) },\n\t)\n}\n\nexport const createPredefinedVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\tvalue: Acl.PredefinedVariableValue,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.EntityVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.predefined, value },\n\t)\n}\n\nexport const createConditionVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.ConditionVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.condition, ...(fallback ? { fallback } : {}) },\n\t)\n}\n"],"names":["Acl"],"mappings":";;;AAGO,MAAM,mBAIX;AAAA,EACD,YACiB,MACA,OACA,UACf;AAHe,SAAA,OAAA;AACA,SAAA,QAAA;AACA,SAAA,WAAA;AAAA,EAEjB;AACD;AAEO,MAAM,uBAAuB,CACnC,MACA,YACA,OACA,aACqD;AACrD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAMA,WAAI,aAAa,QAAQ,YAAY,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA,EAAC;AAAA,EAAG;AAEjF;AAEO,MAAM,2BAA2B,CACvC,MACA,OACA,OACA,aACqD;AACrD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAMA,OAAAA,IAAI,aAAa,YAAY,MAAA;AAAA,EAAM;AAE7C;AAEO,MAAM,0BAA0B,CACtC,MACA,OACA,aACwD;AACxD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAMA,OAAAA,IAAI,aAAa,WAAW,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA,EAAC;AAAA,EAAG;AAExE;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"variables.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/variables.ts"],"sourcesContent":["import { Role } from './roles'\nimport { Acl, Input } from '@contember/schema'\n\nexport class VariableDefinition<\n\tName extends string = string,\n\tRoles extends Role<string> = Role<string>,\n\tVariable extends Acl.Variable = Acl.Variable,\n> {\n\tconstructor(\n\t\tpublic readonly name: Name,\n\t\tpublic readonly roles: Roles[],\n\t\tpublic readonly variable: Acl.Variable,\n\t) {\n\t}\n}\n\nexport const createEntityVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\tentityName: string,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.EntityVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.entity, entityName, ...(fallback ? { fallback } : {}) },\n\t)\n}\n\nexport const createPredefinedVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\tvalue: Acl.PredefinedVariableValue,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.EntityVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.predefined, value },\n\t)\n}\n\nexport const createConditionVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.ConditionVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.condition, ...(fallback ? { fallback } : {}) },\n\t)\n}\n"],"names":[],"mappings":";AAGO,MAAM,mBAIX;AAAA,EACD,YACiB,MACA,OACA,UACf;AAHe,SAAA,OAAA;AACA,SAAA,QAAA;AACA,SAAA,WAAA;AAAA,EAEjB;AACD;AAEO,MAAM,uBAAuB,CACnC,MACA,YACA,OACA,aACqD;AACrD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAM,IAAI,aAAa,QAAQ,YAAY,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA,EAAC;AAAA,EAAG;AAEjF;AAEO,MAAM,2BAA2B,CACvC,MACA,OACA,OACA,aACqD;AACrD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAM,IAAI,aAAa,YAAY,MAAA;AAAA,EAAM;AAE7C;AAEO,MAAM,0BAA0B,CACtC,MACA,OACA,aACwD;AACxD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAM,IAAI,aAAa,WAAW,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA,EAAC;AAAA,EAAG;AAExE;"}
1
+ {"version":3,"file":"variables.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/variables.ts"],"sourcesContent":["import { Role } from './roles.js'\nimport { Acl, Input } from '@contember/schema'\n\nexport class VariableDefinition<\n\tName extends string = string,\n\tRoles extends Role<string> = Role<string>,\n\tVariable extends Acl.Variable = Acl.Variable,\n> {\n\tconstructor(\n\t\tpublic readonly name: Name,\n\t\tpublic readonly roles: Roles[],\n\t\tpublic readonly variable: Acl.Variable,\n\t) {\n\t}\n}\n\nexport const createEntityVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\tentityName: string,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.EntityVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.entity, entityName, ...(fallback ? { fallback } : {}) },\n\t)\n}\n\nexport const createPredefinedVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\tvalue: Acl.PredefinedVariableValue,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.EntityVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.predefined, value },\n\t)\n}\n\nexport const createConditionVariable = <R extends Role<string>, Name extends string>(\n\tname: Name,\n\troles: R | R[],\n\tfallback?: Input.Condition,\n): VariableDefinition<Name, R, Acl.ConditionVariable> => {\n\treturn new VariableDefinition(\n\t\tname,\n\t\tArray.isArray(roles) ? roles : [roles],\n\t\t{ type: Acl.VariableType.condition, ...(fallback ? { fallback } : {}) },\n\t)\n}\n"],"names":[],"mappings":";AAGO,MAAM,mBAIX;AAAA,EACD,YACiB,MACA,OACA,UACf;AAHe,SAAA,OAAA;AACA,SAAA,QAAA;AACA,SAAA,WAAA;AAAA,EAEjB;AACD;AAEO,MAAM,uBAAuB,CACnC,MACA,YACA,OACA,aACqD;AACrD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAM,IAAI,aAAa,QAAQ,YAAY,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA,EAAC;AAAA,EAAG;AAEjF;AAEO,MAAM,2BAA2B,CACvC,MACA,OACA,OACA,aACqD;AACrD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAM,IAAI,aAAa,YAAY,MAAA;AAAA,EAAM;AAE7C;AAEO,MAAM,0BAA0B,CACtC,MACA,OACA,aACwD;AACxD,SAAO,IAAI;AAAA,IACV;AAAA,IACA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAAA,IACrC,EAAE,MAAM,IAAI,aAAa,WAAW,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA,EAAC;AAAA,EAAG;AAExE;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../../packages/schema-definition/src/actions/definition/index.ts"],"sourcesContent":["import { Actions } from '@contember/schema'\nimport { ActionsFactory } from './internal/ActionsFactory'\n\nexport * from './triggers'\nexport * from './targets'\n\nexport const createActions = (\n\texportedDefinitions: Record<string, any>,\n): Actions.Schema => {\n\tconst factory = new ActionsFactory()\n\treturn factory.create(exportedDefinitions)\n}\n"],"names":["ActionsFactory"],"mappings":";;;;;AAMO,MAAM,gBAAgB,CAC5B,wBACoB;AACpB,QAAM,UAAU,IAAIA,8BAAA;AACpB,SAAO,QAAQ,OAAO,mBAAmB;AAC1C;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../../../packages/schema-definition/src/actions/definition/index.ts"],"sourcesContent":["import { Actions } from '@contember/schema'\nimport { ActionsFactory } from './internal/ActionsFactory.js'\n\nexport * from './triggers.js'\nexport * from './targets.js'\n\nexport const createActions = (\n\texportedDefinitions: Record<string, any>,\n): Actions.Schema => {\n\tconst factory = new ActionsFactory()\n\treturn factory.create(exportedDefinitions)\n}\n"],"names":["ActionsFactory"],"mappings":";;;;;AAMO,MAAM,gBAAgB,CAC5B,wBACoB;AACpB,QAAM,UAAU,IAAIA,8BAAA;AACpB,SAAO,QAAQ,OAAO,mBAAmB;AAC1C;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../packages/schema-definition/src/actions/definition/index.ts"],"sourcesContent":["import { Actions } from '@contember/schema'\nimport { ActionsFactory } from './internal/ActionsFactory'\n\nexport * from './triggers'\nexport * from './targets'\n\nexport const createActions = (\n\texportedDefinitions: Record<string, any>,\n): Actions.Schema => {\n\tconst factory = new ActionsFactory()\n\treturn factory.create(exportedDefinitions)\n}\n"],"names":[],"mappings":";;;AAMO,MAAM,gBAAgB,CAC5B,wBACoB;AACpB,QAAM,UAAU,IAAI,eAAA;AACpB,SAAO,QAAQ,OAAO,mBAAmB;AAC1C;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../packages/schema-definition/src/actions/definition/index.ts"],"sourcesContent":["import { Actions } from '@contember/schema'\nimport { ActionsFactory } from './internal/ActionsFactory.js'\n\nexport * from './triggers.js'\nexport * from './targets.js'\n\nexport const createActions = (\n\texportedDefinitions: Record<string, any>,\n): Actions.Schema => {\n\tconst factory = new ActionsFactory()\n\treturn factory.create(exportedDefinitions)\n}\n"],"names":[],"mappings":";;;AAMO,MAAM,gBAAgB,CAC5B,wBACoB;AACpB,QAAM,UAAU,IAAI,eAAA;AACpB,SAAO,QAAQ,OAAO,mBAAmB;AAC1C;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/actions/definition/internal/ActionsFactory.ts"],"sourcesContent":["import { assertNever, filterEntityDefinition } from '../../../utils'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './store'\nimport { BasicTriggerDefinition, TargetDefinition, WatchTriggerDefinition } from '../triggers'\nimport { ActionsTarget } from '../targets'\nimport { Kind, parse, SelectionNode, ValueNode } from 'graphql'\n\nexport class ActionsFactory {\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Actions.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\n\t\tconst targetsRegistry = new ActionsTargetRegistry()\n\t\tfor (const [exportedAs, def] of Object.entries(exportedDefinitions)) {\n\t\t\tif (!(def instanceof ActionsTarget)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst name = def.name ?? exportedAs\n\t\t\ttargetsRegistry.register(name, def.definition)\n\t\t}\n\n\t\tconst triggersDef = entityLikeDefinition.flatMap(([, entity]) =>\n\t\t\ttriggersStore.get(entity).map(it => ({\n\t\t\t\t...it,\n\t\t\t\tentity,\n\t\t\t}))\n\t\t)\n\n\t\tconst triggerNames = triggersDef.map(it => it.definition.name).filter((it): it is string => !!it)\n\t\ttriggerNames.forEach((it, index, arr) => {\n\t\t\tif (arr.indexOf(it) !== index) {\n\t\t\t\tthrow `Duplicate trigger name ${it}.`\n\t\t\t}\n\t\t})\n\n\t\tconst triggers: Record<string, Actions.AnyTrigger> = {}\n\t\tfor (const { definition, entity, type } of triggersDef) {\n\t\t\tconst name = definition.name\n\t\t\tconst target = this.resolveTarget(name, definition, targetsRegistry)\n\t\t\tlet trigger: Actions.AnyTrigger\n\t\t\tif (type === 'basic') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createBasicTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else if (type === 'watch') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createWatchTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(type)\n\t\t\t}\n\t\t\ttriggers[name] = trigger\n\t\t}\n\n\t\treturn { triggers, targets: targetsRegistry.getTargets() }\n\t}\n\n\tprivate resolveTarget(triggerName: string, targetDefinition: TargetDefinition, targetRegistry: ActionsTargetRegistry): string {\n\t\tconst generatedName = `${triggerName}_target`\n\t\tif ('target' in targetDefinition) {\n\t\t\tif (targetDefinition.target instanceof ActionsTarget) {\n\t\t\t\tconst registeredName = targetRegistry.getName(targetDefinition.target.definition)\n\t\t\t\tif (!registeredName) {\n\t\t\t\t\tthrow `Target of ${triggerName} trigger is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\treturn registeredName\n\t\t\t} else {\n\t\t\t\tconst { name, ...def } = targetDefinition.target\n\t\t\t\tconst resolvedName = name ?? generatedName\n\t\t\t\ttargetRegistry.register(resolvedName, { name: generatedName, ...def })\n\t\t\t\treturn resolvedName\n\t\t\t}\n\t\t} else if ('webhook' in targetDefinition) {\n\t\t\tif (typeof targetDefinition.webhook === 'string') {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\turl: targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\t...targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn generatedName\n\t\t}\n\t\treturn assertNever(targetDefinition)\n\t}\n\n\tprivate createWatchTrigger(name: string, entity: string, trigger: WatchTriggerDefinition): Omit<Actions.WatchTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'watch',\n\t\t\tentity,\n\t\t\tname,\n\t\t\twatch: this.parseSelection(trigger.watch),\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t\t...('withNodes' in trigger ? { withNodes: trigger.withNodes } : {}),\n\t\t}\n\t}\n\n\tprivate createBasicTrigger(name: string, entity: string, trigger: BasicTriggerDefinition): Omit<Actions.BasicTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'basic',\n\t\t\tentity,\n\t\t\tname,\n\t\t\tcreate: trigger.create ?? false,\n\t\t\tdelete: trigger.delete ?? false,\n\t\t\tupdate: trigger.update ?? false,\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t}\n\t}\n\n\tprivate parseSelection(selection: Actions.SelectionNode | string): Actions.SelectionNode {\n\t\tif (typeof selection !== 'string') {\n\t\t\treturn selection\n\t\t}\n\t\tconst result = parse(`{\n\t\t\t${selection}\n\t\t}`)\n\t\tfor (const def of result.definitions) {\n\t\t\tif (def.kind === 'OperationDefinition') {\n\t\t\t\treturn this.processSelectionSet(def.selectionSet.selections)\n\t\t\t}\n\t\t}\n\t\tthrow new Error()\n\t}\n\n\tprivate processSelectionSet(selectionSet: readonly SelectionNode[]): Actions.SelectionNode {\n\t\treturn selectionSet.map(it => {\n\t\t\tif (it.kind !== 'Field') {\n\t\t\t\tthrow `${it.kind} is not supported.`\n\t\t\t}\n\t\t\tif (it.arguments?.length === 0 && it.selectionSet === undefined) {\n\t\t\t\treturn it.name.value\n\t\t\t}\n\t\t\tconst args = Object.fromEntries(it.arguments?.map(it => [it.name, parseArguments(it.value)]) ?? [])\n\t\t\treturn [it.name.value, args, it.selectionSet ? this.processSelectionSet(it.selectionSet.selections) : []]\n\t\t})\n\t}\n}\n\nclass ActionsTargetRegistry {\n\tprivate targets: Record<string, Actions.AnyTarget> = {}\n\tprivate targetsInverseMap = new Map<Omit<Actions.AnyTarget, 'name'>, string>()\n\n\tpublic register(name: string, target: Omit<Actions.AnyTarget, 'name'> & { name?: string }): void {\n\t\tif (this.targets[name]) {\n\t\t\tthrow `Duplicate trigger target name ${name}`\n\t\t}\n\t\tthis.targets[name] = { name, ...target }\n\t\tthis.targetsInverseMap.set(target, name)\n\t}\n\n\tpublic getName(target: Omit<Actions.AnyTarget, 'name'>): string | undefined {\n\t\treturn this.targetsInverseMap.get(target)\n\t}\n\n\tpublic getTargets() {\n\t\treturn this.targets\n\t}\n}\n\nconst parseArguments = (ast: ValueNode): any => {\n\tswitch (ast.kind) {\n\t\tcase Kind.STRING:\n\t\t\treturn ast.value\n\t\tcase Kind.BOOLEAN:\n\t\t\treturn ast.value\n\t\tcase Kind.FLOAT:\n\t\t\treturn parseFloat(ast.value)\n\t\tcase Kind.INT:\n\t\t\treturn Number(ast.value)\n\t\tcase Kind.LIST:\n\t\t\treturn ast.values.map(it => parseArguments(it))\n\t\tcase Kind.OBJECT:\n\t\t\treturn Object.fromEntries(ast.fields.map(it => [it.name.value, parseArguments(it.value)]))\n\t\tcase Kind.ENUM:\n\t\t\treturn ast.value\n\t\tcase Kind.NULL:\n\t\t\treturn null\n\t\tcase Kind.VARIABLE:\n\t\t\tthrow `Variables are not supported here.`\n\t}\n}\n"],"names":["filterEntityDefinition","ActionsTarget","triggersStore","assertNever","parse","it","Kind"],"mappings":"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"}
1
+ {"version":3,"file":"ActionsFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/actions/definition/internal/ActionsFactory.ts"],"sourcesContent":["import { assertNever, filterEntityDefinition } from '../../../utils/index.js'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './store.js'\nimport { BasicTriggerDefinition, TargetDefinition, WatchTriggerDefinition } from '../triggers.js'\nimport { ActionsTarget } from '../targets.js'\nimport { Kind, parse, SelectionNode, ValueNode } from 'graphql'\n\nexport class ActionsFactory {\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Actions.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\n\t\tconst targetsRegistry = new ActionsTargetRegistry()\n\t\tfor (const [exportedAs, def] of Object.entries(exportedDefinitions)) {\n\t\t\tif (!(def instanceof ActionsTarget)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst name = def.name ?? exportedAs\n\t\t\ttargetsRegistry.register(name, def.definition)\n\t\t}\n\n\t\tconst triggersDef = entityLikeDefinition.flatMap(([, entity]) =>\n\t\t\ttriggersStore.get(entity).map(it => ({\n\t\t\t\t...it,\n\t\t\t\tentity,\n\t\t\t}))\n\t\t)\n\n\t\tconst triggerNames = triggersDef.map(it => it.definition.name).filter((it): it is string => !!it)\n\t\ttriggerNames.forEach((it, index, arr) => {\n\t\t\tif (arr.indexOf(it) !== index) {\n\t\t\t\tthrow `Duplicate trigger name ${it}.`\n\t\t\t}\n\t\t})\n\n\t\tconst triggers: Record<string, Actions.AnyTrigger> = {}\n\t\tfor (const { definition, entity, type } of triggersDef) {\n\t\t\tconst name = definition.name\n\t\t\tconst target = this.resolveTarget(name, definition, targetsRegistry)\n\t\t\tlet trigger: Actions.AnyTrigger\n\t\t\tif (type === 'basic') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createBasicTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else if (type === 'watch') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createWatchTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(type)\n\t\t\t}\n\t\t\ttriggers[name] = trigger\n\t\t}\n\n\t\treturn { triggers, targets: targetsRegistry.getTargets() }\n\t}\n\n\tprivate resolveTarget(triggerName: string, targetDefinition: TargetDefinition, targetRegistry: ActionsTargetRegistry): string {\n\t\tconst generatedName = `${triggerName}_target`\n\t\tif ('target' in targetDefinition) {\n\t\t\tif (targetDefinition.target instanceof ActionsTarget) {\n\t\t\t\tconst registeredName = targetRegistry.getName(targetDefinition.target.definition)\n\t\t\t\tif (!registeredName) {\n\t\t\t\t\tthrow `Target of ${triggerName} trigger is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\treturn registeredName\n\t\t\t} else {\n\t\t\t\tconst { name, ...def } = targetDefinition.target\n\t\t\t\tconst resolvedName = name ?? generatedName\n\t\t\t\ttargetRegistry.register(resolvedName, { name: generatedName, ...def })\n\t\t\t\treturn resolvedName\n\t\t\t}\n\t\t} else if ('webhook' in targetDefinition) {\n\t\t\tif (typeof targetDefinition.webhook === 'string') {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\turl: targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\t...targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn generatedName\n\t\t}\n\t\treturn assertNever(targetDefinition)\n\t}\n\n\tprivate createWatchTrigger(name: string, entity: string, trigger: WatchTriggerDefinition): Omit<Actions.WatchTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'watch',\n\t\t\tentity,\n\t\t\tname,\n\t\t\twatch: this.parseSelection(trigger.watch),\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t\t...('withNodes' in trigger ? { withNodes: trigger.withNodes } : {}),\n\t\t}\n\t}\n\n\tprivate createBasicTrigger(name: string, entity: string, trigger: BasicTriggerDefinition): Omit<Actions.BasicTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'basic',\n\t\t\tentity,\n\t\t\tname,\n\t\t\tcreate: trigger.create ?? false,\n\t\t\tdelete: trigger.delete ?? false,\n\t\t\tupdate: trigger.update ?? false,\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t}\n\t}\n\n\tprivate parseSelection(selection: Actions.SelectionNode | string): Actions.SelectionNode {\n\t\tif (typeof selection !== 'string') {\n\t\t\treturn selection\n\t\t}\n\t\tconst result = parse(`{\n\t\t\t${selection}\n\t\t}`)\n\t\tfor (const def of result.definitions) {\n\t\t\tif (def.kind === 'OperationDefinition') {\n\t\t\t\treturn this.processSelectionSet(def.selectionSet.selections)\n\t\t\t}\n\t\t}\n\t\tthrow new Error()\n\t}\n\n\tprivate processSelectionSet(selectionSet: readonly SelectionNode[]): Actions.SelectionNode {\n\t\treturn selectionSet.map(it => {\n\t\t\tif (it.kind !== 'Field') {\n\t\t\t\tthrow `${it.kind} is not supported.`\n\t\t\t}\n\t\t\tif (it.arguments?.length === 0 && it.selectionSet === undefined) {\n\t\t\t\treturn it.name.value\n\t\t\t}\n\t\t\tconst args = Object.fromEntries(it.arguments?.map(it => [it.name, parseArguments(it.value)]) ?? [])\n\t\t\treturn [it.name.value, args, it.selectionSet ? this.processSelectionSet(it.selectionSet.selections) : []]\n\t\t})\n\t}\n}\n\nclass ActionsTargetRegistry {\n\tprivate targets: Record<string, Actions.AnyTarget> = {}\n\tprivate targetsInverseMap = new Map<Omit<Actions.AnyTarget, 'name'>, string>()\n\n\tpublic register(name: string, target: Omit<Actions.AnyTarget, 'name'> & { name?: string }): void {\n\t\tif (this.targets[name]) {\n\t\t\tthrow `Duplicate trigger target name ${name}`\n\t\t}\n\t\tthis.targets[name] = { name, ...target }\n\t\tthis.targetsInverseMap.set(target, name)\n\t}\n\n\tpublic getName(target: Omit<Actions.AnyTarget, 'name'>): string | undefined {\n\t\treturn this.targetsInverseMap.get(target)\n\t}\n\n\tpublic getTargets() {\n\t\treturn this.targets\n\t}\n}\n\nconst parseArguments = (ast: ValueNode): any => {\n\tswitch (ast.kind) {\n\t\tcase Kind.STRING:\n\t\t\treturn ast.value\n\t\tcase Kind.BOOLEAN:\n\t\t\treturn ast.value\n\t\tcase Kind.FLOAT:\n\t\t\treturn parseFloat(ast.value)\n\t\tcase Kind.INT:\n\t\t\treturn Number(ast.value)\n\t\tcase Kind.LIST:\n\t\t\treturn ast.values.map(it => parseArguments(it))\n\t\tcase Kind.OBJECT:\n\t\t\treturn Object.fromEntries(ast.fields.map(it => [it.name.value, parseArguments(it.value)]))\n\t\tcase Kind.ENUM:\n\t\t\treturn ast.value\n\t\tcase Kind.NULL:\n\t\t\treturn null\n\t\tcase Kind.VARIABLE:\n\t\t\tthrow `Variables are not supported here.`\n\t}\n}\n"],"names":["filterEntityDefinition","ActionsTarget","triggersStore","assertNever","parse","it","Kind"],"mappings":";;;;;;;;;;;AAOO,MAAM,eAAe;AAAA,EACpB,OACN,qBACiB;AACjB,UAAM,uBAAuBA,uBAAAA,uBAAuB,mBAAmB;AAEvE,UAAM,kBAAkB,IAAI,sBAAA;AAC5B,eAAW,CAAC,YAAY,GAAG,KAAK,OAAO,QAAQ,mBAAmB,GAAG;AACpE,UAAI,EAAE,eAAeC,QAAAA,gBAAgB;AACpC;AAAA,MACD;AACA,YAAM,OAAO,IAAI,QAAQ;AACzB,sBAAgB,SAAS,MAAM,IAAI,UAAU;AAAA,IAC9C;AAEA,UAAM,cAAc,qBAAqB;AAAA,MAAQ,CAAC,CAAA,EAAG,MAAM,MAC1DC,oBAAc,IAAI,MAAM,EAAE,IAAI,CAAA,QAAO;AAAA,QACpC,GAAG;AAAA,QACH;AAAA,MAAA,EACC;AAAA,IAAA;AAGH,UAAM,eAAe,YAAY,IAAI,CAAA,OAAM,GAAG,WAAW,IAAI,EAAE,OAAO,CAAC,OAAqB,CAAC,CAAC,EAAE;AAChG,iBAAa,QAAQ,CAAC,IAAI,OAAO,QAAQ;AACxC,UAAI,IAAI,QAAQ,EAAE,MAAM,OAAO;AAC9B,cAAM,0BAA0B,EAAE;AAAA,MACnC;AAAA,IACD,CAAC;AAED,UAAM,WAA+C,CAAA;AACrD,eAAW,EAAE,YAAY,QAAQ,KAAA,KAAU,aAAa;AACvD,YAAM,OAAO,WAAW;AACxB,YAAM,SAAS,KAAK,cAAc,MAAM,YAAY,eAAe;AACnE,UAAI;AACJ,UAAI,SAAS,SAAS;AACrB,kBAAU;AAAA,UACT;AAAA,UACA,GAAG,KAAK,mBAAmB,MAAM,OAAO,MAAM,UAAU;AAAA,QAAA;AAAA,MAE1D,WAAW,SAAS,SAAS;AAC5B,kBAAU;AAAA,UACT;AAAA,UACA,GAAG,KAAK,mBAAmB,MAAM,OAAO,MAAM,UAAU;AAAA,QAAA;AAAA,MAE1D,OAAO;AACNC,oBAAAA,YAAgB;AAAA,MACjB;AACA,eAAS,IAAI,IAAI;AAAA,IAClB;AAEA,WAAO,EAAE,UAAU,SAAS,gBAAgB,aAAW;AAAA,EACxD;AAAA,EAEQ,cAAc,aAAqB,kBAAoC,gBAA+C;AAC7H,UAAM,gBAAgB,GAAG,WAAW;AACpC,QAAI,YAAY,kBAAkB;AACjC,UAAI,iBAAiB,kBAAkBF,uBAAe;AACrD,cAAM,iBAAiB,eAAe,QAAQ,iBAAiB,OAAO,UAAU;AAChF,YAAI,CAAC,gBAAgB;AACpB,gBAAM,aAAa,WAAW;AAAA,QAC/B;AACA,eAAO;AAAA,MACR,OAAO;AACN,cAAM,EAAE,MAAM,GAAG,IAAA,IAAQ,iBAAiB;AAC1C,cAAM,eAAe,QAAQ;AAC7B,uBAAe,SAAS,cAAc,EAAE,MAAM,eAAe,GAAG,KAAK;AACrE,eAAO;AAAA,MACR;AAAA,IACD,WAAW,aAAa,kBAAkB;AACzC,UAAI,OAAO,iBAAiB,YAAY,UAAU;AACjD,uBAAe,SAAS,eAAe;AAAA,UACtC,MAAM;AAAA,UACN,KAAK,iBAAiB;AAAA,QAAA,CACtB;AAAA,MACF,OAAO;AACN,uBAAe,SAAS,eAAe;AAAA,UACtC,MAAM;AAAA,UACN,GAAG,iBAAiB;AAAA,QAAA,CACpB;AAAA,MACF;AACA,aAAO;AAAA,IACR;AACA,WAAOE,YAAAA,YAA4B;AAAA,EACpC;AAAA,EAEQ,mBAAmB,MAAc,QAAgB,SAAuE;AAC/H,WAAO;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,OAAO,KAAK,eAAe,QAAQ,KAAK;AAAA,MACxC,WAAW,QAAQ,YAAY,KAAK,eAAe,QAAQ,SAAS,IAAI;AAAA,MACxE,UAAU,QAAQ;AAAA,MAClB,GAAI,eAAe,UAAU,EAAE,WAAW,QAAQ,UAAA,IAAc,CAAA;AAAA,IAAC;AAAA,EAEnE;AAAA,EAEQ,mBAAmB,MAAc,QAAgB,SAAuE;AAC/H,WAAO;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,QAAQ,QAAQ,UAAU;AAAA,MAC1B,QAAQ,QAAQ,UAAU;AAAA,MAC1B,QAAQ,QAAQ,UAAU;AAAA,MAC1B,WAAW,QAAQ,YAAY,KAAK,eAAe,QAAQ,SAAS,IAAI;AAAA,MACxE,UAAU,QAAQ;AAAA,IAAA;AAAA,EAEpB;AAAA,EAEQ,eAAe,WAAkE;AACxF,QAAI,OAAO,cAAc,UAAU;AAClC,aAAO;AAAA,IACR;AACA,UAAM,SAASC,QAAAA,MAAM;AAAA,KAClB,SAAS;AAAA,IACV;AACF,eAAW,OAAO,OAAO,aAAa;AACrC,UAAI,IAAI,SAAS,uBAAuB;AACvC,eAAO,KAAK,oBAAoB,IAAI,aAAa,UAAU;AAAA,MAC5D;AAAA,IACD;AACA,UAAM,IAAI,MAAA;AAAA,EACX;AAAA,EAEQ,oBAAoB,cAA+D;AAC1F,WAAO,aAAa,IAAI,CAAA,OAAM;AAC7B,UAAI,GAAG,SAAS,SAAS;AACxB,cAAM,GAAG,GAAG,IAAI;AAAA,MACjB;AACA,UAAI,GAAG,WAAW,WAAW,KAAK,GAAG,iBAAiB,QAAW;AAChE,eAAO,GAAG,KAAK;AAAA,MAChB;AACA,YAAM,OAAO,OAAO,YAAY,GAAG,WAAW,IAAI,CAAAC,QAAM,CAACA,IAAG,MAAM,eAAeA,IAAG,KAAK,CAAC,CAAC,KAAK,EAAE;AAClG,aAAO,CAAC,GAAG,KAAK,OAAO,MAAM,GAAG,eAAe,KAAK,oBAAoB,GAAG,aAAa,UAAU,IAAI,CAAA,CAAE;AAAA,IACzG,CAAC;AAAA,EACF;AACD;AAEA,MAAM,sBAAsB;AAAA,EAA5B,cAAA;AACC,kBAAA,MAAQ,WAA6C,EAAC;AACtD,kBAAA,MAAQ,yCAAwB,IAAA,CAA6C;AAAA,EAAA;AAAA,EAEtE,SAAS,MAAc,QAAmE;AAChG,QAAI,KAAK,QAAQ,IAAI,GAAG;AACvB,YAAM,iCAAiC,IAAI;AAAA,IAC5C;AACA,SAAK,QAAQ,IAAI,IAAI,EAAE,MAAM,GAAG,OAAA;AAChC,SAAK,kBAAkB,IAAI,QAAQ,IAAI;AAAA,EACxC;AAAA,EAEO,QAAQ,QAA6D;AAC3E,WAAO,KAAK,kBAAkB,IAAI,MAAM;AAAA,EACzC;AAAA,EAEO,aAAa;AACnB,WAAO,KAAK;AAAA,EACb;AACD;AAEA,MAAM,iBAAiB,CAAC,QAAwB;AAC/C,UAAQ,IAAI,MAAA;AAAA,IACX,KAAKC,QAAAA,KAAK;AACT,aAAO,IAAI;AAAA,IACZ,KAAKA,QAAAA,KAAK;AACT,aAAO,IAAI;AAAA,IACZ,KAAKA,QAAAA,KAAK;AACT,aAAO,WAAW,IAAI,KAAK;AAAA,IAC5B,KAAKA,QAAAA,KAAK;AACT,aAAO,OAAO,IAAI,KAAK;AAAA,IACxB,KAAKA,QAAAA,KAAK;AACT,aAAO,IAAI,OAAO,IAAI,CAAA,OAAM,eAAe,EAAE,CAAC;AAAA,IAC/C,KAAKA,QAAAA,KAAK;AACT,aAAO,OAAO,YAAY,IAAI,OAAO,IAAI,CAAA,OAAM,CAAC,GAAG,KAAK,OAAO,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC;AAAA,IAC1F,KAAKA,QAAAA,KAAK;AACT,aAAO,IAAI;AAAA,IACZ,KAAKA,QAAAA,KAAK;AACT,aAAO;AAAA,IACR,KAAKA,QAAAA,KAAK;AACT,YAAM;AAAA,EAAA;AAET;;"}