@strapi/admin 5.56.0 → 5.57.0

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 (311) hide show
  1. package/dist/admin/admin/src/components/Filters.js +1 -1
  2. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  3. package/dist/admin/admin/src/components/Filters.mjs +1 -1
  4. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -2
  6. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -2
  8. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/MediaLibraryBanner.js +38 -2
  10. package/dist/admin/admin/src/components/MediaLibraryBanner.js.map +1 -1
  11. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs +18 -2
  12. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/RelativeTime.js +9 -0
  14. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  15. package/dist/admin/admin/src/components/RelativeTime.mjs +10 -1
  16. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/TopBanners.js +52 -0
  18. package/dist/admin/admin/src/components/TopBanners.js.map +1 -0
  19. package/dist/admin/admin/src/components/TopBanners.mjs +30 -0
  20. package/dist/admin/admin/src/components/TopBanners.mjs.map +1 -0
  21. package/dist/admin/admin/src/features/Tracking.js +28 -8
  22. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  23. package/dist/admin/admin/src/features/Tracking.mjs +29 -10
  24. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  25. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +4 -20
  26. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  27. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -20
  28. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  29. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js +59 -0
  30. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js.map +1 -0
  31. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs +37 -0
  32. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs.map +1 -0
  33. package/dist/admin/admin/src/translations/en.json.js +5 -0
  34. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  35. package/dist/admin/admin/src/translations/en.json.mjs +5 -0
  36. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  37. package/dist/admin/admin/src/utils/getFetchClient.js +3 -3
  38. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  39. package/dist/admin/admin/src/utils/getFetchClient.mjs +2 -2
  40. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  41. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +6 -1
  42. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  43. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +6 -1
  44. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  45. package/dist/admin/src/components/MediaLibraryBanner.d.ts +10 -1
  46. package/dist/admin/src/components/TopBanners.d.ts +8 -0
  47. package/dist/admin/src/features/Tracking.d.ts +12 -1
  48. package/dist/admin/src/layouts/useAuthenticatedAccessTracking.d.ts +6 -0
  49. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +5 -0
  50. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  51. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +8 -2
  52. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
  53. package/dist/ee/server/src/controllers/authentication.d.ts.map +1 -1
  54. package/dist/ee/server/src/controllers/user.d.ts.map +1 -1
  55. package/dist/ee/server/src/index.d.ts +4 -1
  56. package/dist/ee/server/src/index.d.ts.map +1 -1
  57. package/dist/ee/server/src/services/index.d.ts +4 -1
  58. package/dist/ee/server/src/services/index.d.ts.map +1 -1
  59. package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
  60. package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
  61. package/dist/ee/server/src/services/seat-enforcement.d.ts +3 -1
  62. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  63. package/dist/server/ee/server/src/controllers/admin.js +3 -4
  64. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  65. package/dist/server/ee/server/src/controllers/admin.mjs +3 -4
  66. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  67. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js +2 -2
  68. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
  69. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs +2 -2
  70. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
  71. package/dist/server/ee/server/src/controllers/authentication.js +11 -11
  72. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  73. package/dist/server/ee/server/src/controllers/authentication.mjs +11 -11
  74. package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
  75. package/dist/server/ee/server/src/controllers/user.js +7 -8
  76. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  77. package/dist/server/ee/server/src/controllers/user.mjs +8 -9
  78. package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
  79. package/dist/server/ee/server/src/services/metrics.js +9 -7
  80. package/dist/server/ee/server/src/services/metrics.js.map +1 -1
  81. package/dist/server/ee/server/src/services/metrics.mjs +9 -7
  82. package/dist/server/ee/server/src/services/metrics.mjs.map +1 -1
  83. package/dist/server/ee/server/src/services/persist-tables.js +3 -4
  84. package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
  85. package/dist/server/ee/server/src/services/persist-tables.mjs +3 -4
  86. package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
  87. package/dist/server/ee/server/src/services/role.js +2 -2
  88. package/dist/server/ee/server/src/services/role.js.map +1 -1
  89. package/dist/server/ee/server/src/services/role.mjs +1 -1
  90. package/dist/server/ee/server/src/services/role.mjs.map +1 -1
  91. package/dist/server/ee/server/src/services/seat-enforcement.js +20 -20
  92. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  93. package/dist/server/ee/server/src/services/seat-enforcement.mjs +20 -20
  94. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  95. package/dist/server/ee/server/src/services/user.js +1 -2
  96. package/dist/server/ee/server/src/services/user.js.map +1 -1
  97. package/dist/server/ee/server/src/services/user.mjs +2 -3
  98. package/dist/server/ee/server/src/services/user.mjs.map +1 -1
  99. package/dist/server/ee/server/src/utils/sso-lock.js +2 -2
  100. package/dist/server/ee/server/src/utils/sso-lock.js.map +1 -1
  101. package/dist/server/ee/server/src/utils/sso-lock.mjs +1 -1
  102. package/dist/server/ee/server/src/utils/sso-lock.mjs.map +1 -1
  103. package/dist/server/server/src/audit-logs/admin-users.js +3 -3
  104. package/dist/server/server/src/audit-logs/admin-users.js.map +1 -1
  105. package/dist/server/server/src/audit-logs/admin-users.mjs +2 -2
  106. package/dist/server/server/src/audit-logs/admin-users.mjs.map +1 -1
  107. package/dist/server/server/src/audit-logs/tokens.js +3 -3
  108. package/dist/server/server/src/audit-logs/tokens.js.map +1 -1
  109. package/dist/server/server/src/audit-logs/tokens.mjs +2 -2
  110. package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -1
  111. package/dist/server/server/src/audit-logs/webhooks.js +2 -2
  112. package/dist/server/server/src/audit-logs/webhooks.js.map +1 -1
  113. package/dist/server/server/src/audit-logs/webhooks.mjs +1 -1
  114. package/dist/server/server/src/audit-logs/webhooks.mjs.map +1 -1
  115. package/dist/server/server/src/bootstrap.js +6 -4
  116. package/dist/server/server/src/bootstrap.js.map +1 -1
  117. package/dist/server/server/src/bootstrap.mjs +6 -4
  118. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  119. package/dist/server/server/src/controllers/admin-token.js +8 -8
  120. package/dist/server/server/src/controllers/admin-token.js.map +1 -1
  121. package/dist/server/server/src/controllers/admin-token.mjs +4 -4
  122. package/dist/server/server/src/controllers/admin-token.mjs.map +1 -1
  123. package/dist/server/server/src/controllers/admin.js +3 -5
  124. package/dist/server/server/src/controllers/admin.js.map +1 -1
  125. package/dist/server/server/src/controllers/admin.mjs +2 -4
  126. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  127. package/dist/server/server/src/controllers/api-token.js +8 -8
  128. package/dist/server/server/src/controllers/api-token.js.map +1 -1
  129. package/dist/server/server/src/controllers/api-token.mjs +4 -4
  130. package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
  131. package/dist/server/server/src/controllers/formatters/conditions.js +2 -2
  132. package/dist/server/server/src/controllers/formatters/conditions.js.map +1 -1
  133. package/dist/server/server/src/controllers/formatters/conditions.mjs +2 -2
  134. package/dist/server/server/src/controllers/formatters/conditions.mjs.map +1 -1
  135. package/dist/server/server/src/controllers/transfer/index.js +2 -2
  136. package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
  137. package/dist/server/server/src/controllers/transfer/index.mjs +2 -2
  138. package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
  139. package/dist/server/server/src/controllers/transfer/token.js +8 -8
  140. package/dist/server/server/src/controllers/transfer/token.js.map +1 -1
  141. package/dist/server/server/src/controllers/transfer/token.mjs +4 -4
  142. package/dist/server/server/src/controllers/transfer/token.mjs.map +1 -1
  143. package/dist/server/server/src/domain/action/index.js +18 -16
  144. package/dist/server/server/src/domain/action/index.js.map +1 -1
  145. package/dist/server/server/src/domain/action/index.mjs +16 -14
  146. package/dist/server/server/src/domain/action/index.mjs.map +1 -1
  147. package/dist/server/server/src/domain/action/provider.mjs +4 -4
  148. package/dist/server/server/src/domain/action/provider.mjs.map +1 -1
  149. package/dist/server/server/src/domain/condition/index.js +7 -4
  150. package/dist/server/server/src/domain/condition/index.js.map +1 -1
  151. package/dist/server/server/src/domain/condition/index.mjs +7 -4
  152. package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
  153. package/dist/server/server/src/domain/permission/index.js +24 -15
  154. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  155. package/dist/server/server/src/domain/permission/index.mjs +21 -12
  156. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  157. package/dist/server/server/src/middlewares/rateLimit.js +5 -5
  158. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  159. package/dist/server/server/src/middlewares/rateLimit.mjs +4 -4
  160. package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
  161. package/dist/server/server/src/register.js +6 -0
  162. package/dist/server/server/src/register.js.map +1 -1
  163. package/dist/server/server/src/register.mjs +6 -0
  164. package/dist/server/server/src/register.mjs.map +1 -1
  165. package/dist/server/server/src/services/action.js +1 -2
  166. package/dist/server/server/src/services/action.js.map +1 -1
  167. package/dist/server/server/src/services/action.mjs +1 -2
  168. package/dist/server/server/src/services/action.mjs.map +1 -1
  169. package/dist/server/server/src/services/api-token.js +61 -49
  170. package/dist/server/server/src/services/api-token.js.map +1 -1
  171. package/dist/server/server/src/services/api-token.mjs +53 -41
  172. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  173. package/dist/server/server/src/services/condition.js +2 -2
  174. package/dist/server/server/src/services/condition.js.map +1 -1
  175. package/dist/server/server/src/services/condition.mjs +1 -1
  176. package/dist/server/server/src/services/condition.mjs.map +1 -1
  177. package/dist/server/server/src/services/content-type.js +5 -4
  178. package/dist/server/server/src/services/content-type.js.map +1 -1
  179. package/dist/server/server/src/services/content-type.mjs +8 -7
  180. package/dist/server/server/src/services/content-type.mjs.map +1 -1
  181. package/dist/server/server/src/services/homepage.js +2 -1
  182. package/dist/server/server/src/services/homepage.js.map +1 -1
  183. package/dist/server/server/src/services/homepage.mjs +2 -1
  184. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  185. package/dist/server/server/src/services/passport/local-strategy.js +2 -2
  186. package/dist/server/server/src/services/passport/local-strategy.js.map +1 -1
  187. package/dist/server/server/src/services/passport/local-strategy.mjs +1 -1
  188. package/dist/server/server/src/services/passport/local-strategy.mjs.map +1 -1
  189. package/dist/server/server/src/services/passport.js +1 -2
  190. package/dist/server/server/src/services/passport.js.map +1 -1
  191. package/dist/server/server/src/services/passport.mjs +1 -2
  192. package/dist/server/server/src/services/passport.mjs.map +1 -1
  193. package/dist/server/server/src/services/permission/engine.js +4 -4
  194. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  195. package/dist/server/server/src/services/permission/engine.mjs +2 -2
  196. package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
  197. package/dist/server/server/src/services/permission/permissions-manager/index.js +2 -3
  198. package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
  199. package/dist/server/server/src/services/permission/permissions-manager/index.mjs +1 -2
  200. package/dist/server/server/src/services/permission/permissions-manager/index.mjs.map +1 -1
  201. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +6 -6
  202. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -1
  203. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +4 -4
  204. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -1
  205. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +47 -41
  206. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  207. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +44 -38
  208. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  209. package/dist/server/server/src/services/permission/permissions-manager/validate.js +30 -26
  210. package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
  211. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +28 -24
  212. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
  213. package/dist/server/server/src/services/permission/queries.js +9 -9
  214. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  215. package/dist/server/server/src/services/permission/queries.mjs +9 -9
  216. package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
  217. package/dist/server/server/src/services/permission/rename-fields.js +118 -0
  218. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -0
  219. package/dist/server/server/src/services/permission/rename-fields.mjs +116 -0
  220. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -0
  221. package/dist/server/server/src/services/permission/sections-builder/index.js +2 -2
  222. package/dist/server/server/src/services/permission/sections-builder/index.js.map +1 -1
  223. package/dist/server/server/src/services/permission/sections-builder/index.mjs +2 -2
  224. package/dist/server/server/src/services/permission/sections-builder/index.mjs.map +1 -1
  225. package/dist/server/server/src/services/permission/sections-builder/section.js +1 -2
  226. package/dist/server/server/src/services/permission/sections-builder/section.js.map +1 -1
  227. package/dist/server/server/src/services/permission/sections-builder/section.mjs +1 -2
  228. package/dist/server/server/src/services/permission/sections-builder/section.mjs.map +1 -1
  229. package/dist/server/server/src/services/permission/sections-builder/utils.js +6 -6
  230. package/dist/server/server/src/services/permission/sections-builder/utils.js.map +1 -1
  231. package/dist/server/server/src/services/permission/sections-builder/utils.mjs +4 -4
  232. package/dist/server/server/src/services/permission/sections-builder/utils.mjs.map +1 -1
  233. package/dist/server/server/src/services/role.js +20 -19
  234. package/dist/server/server/src/services/role.js.map +1 -1
  235. package/dist/server/server/src/services/role.mjs +20 -19
  236. package/dist/server/server/src/services/role.mjs.map +1 -1
  237. package/dist/server/server/src/services/transfer/token.js +20 -16
  238. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  239. package/dist/server/server/src/services/transfer/token.mjs +14 -10
  240. package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
  241. package/dist/server/server/src/services/user.js +2 -3
  242. package/dist/server/server/src/services/user.js.map +1 -1
  243. package/dist/server/server/src/services/user.mjs +3 -4
  244. package/dist/server/server/src/services/user.mjs.map +1 -1
  245. package/dist/server/server/src/strategies/api-token-utils.js +2 -3
  246. package/dist/server/server/src/strategies/api-token-utils.js.map +1 -1
  247. package/dist/server/server/src/strategies/api-token-utils.mjs +2 -3
  248. package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -1
  249. package/dist/server/server/src/strategies/content-api-token.js +3 -3
  250. package/dist/server/server/src/strategies/content-api-token.js.map +1 -1
  251. package/dist/server/server/src/strategies/content-api-token.mjs +1 -1
  252. package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -1
  253. package/dist/server/server/src/strategies/data-transfer.js +4 -4
  254. package/dist/server/server/src/strategies/data-transfer.js.map +1 -1
  255. package/dist/server/server/src/strategies/data-transfer.mjs +3 -3
  256. package/dist/server/server/src/strategies/data-transfer.mjs.map +1 -1
  257. package/dist/server/server/src/validation/common-validators.js +9 -10
  258. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  259. package/dist/server/server/src/validation/common-validators.mjs +13 -14
  260. package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
  261. package/dist/server/server/src/validation/user.js +1 -2
  262. package/dist/server/server/src/validation/user.js.map +1 -1
  263. package/dist/server/server/src/validation/user.mjs +1 -2
  264. package/dist/server/server/src/validation/user.mjs.map +1 -1
  265. package/dist/server/src/audit-logs/tokens.d.ts.map +1 -1
  266. package/dist/server/src/bootstrap.d.ts.map +1 -1
  267. package/dist/server/src/controllers/admin-token.d.ts.map +1 -1
  268. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  269. package/dist/server/src/controllers/api-token.d.ts.map +1 -1
  270. package/dist/server/src/controllers/formatters/conditions.d.ts +1 -1
  271. package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
  272. package/dist/server/src/controllers/homepage.d.ts +1 -1
  273. package/dist/server/src/controllers/index.d.ts +1 -1
  274. package/dist/server/src/controllers/transfer/index.d.ts.map +1 -1
  275. package/dist/server/src/controllers/transfer/token.d.ts.map +1 -1
  276. package/dist/server/src/domain/action/index.d.ts +1 -0
  277. package/dist/server/src/domain/action/index.d.ts.map +1 -1
  278. package/dist/server/src/domain/condition/index.d.ts +2 -2
  279. package/dist/server/src/domain/condition/index.d.ts.map +1 -1
  280. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  281. package/dist/server/src/index.d.ts +3 -3
  282. package/dist/server/src/index.d.ts.map +1 -1
  283. package/dist/server/src/middlewares/index.d.ts.map +1 -1
  284. package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
  285. package/dist/server/src/register.d.ts.map +1 -1
  286. package/dist/server/src/services/action.d.ts.map +1 -1
  287. package/dist/server/src/services/api-token.d.ts.map +1 -1
  288. package/dist/server/src/services/condition.d.ts.map +1 -1
  289. package/dist/server/src/services/content-type.d.ts.map +1 -1
  290. package/dist/server/src/services/homepage.d.ts +1 -1
  291. package/dist/server/src/services/homepage.d.ts.map +1 -1
  292. package/dist/server/src/services/index.d.ts +2 -2
  293. package/dist/server/src/services/index.d.ts.map +1 -1
  294. package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
  295. package/dist/server/src/services/passport.d.ts.map +1 -1
  296. package/dist/server/src/services/permission/engine.d.ts.map +1 -1
  297. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
  298. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  299. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  300. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  301. package/dist/server/src/services/permission/rename-fields.d.ts +21 -0
  302. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -0
  303. package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
  304. package/dist/server/src/services/permission/sections-builder/utils.d.ts +1 -1
  305. package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
  306. package/dist/server/src/services/role.d.ts +1 -1
  307. package/dist/server/src/services/role.d.ts.map +1 -1
  308. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  309. package/dist/server/src/strategies/content-api-token.d.ts.map +1 -1
  310. package/dist/server/src/validation/user.d.ts.map +1 -1
  311. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sources":["../../../../../../server/src/controllers/transfer/token.ts"],"sourcesContent":["import { Context } from 'koa';\nimport { trim, has } from 'lodash/fp';\nimport { errors, strings } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { token } from '../../validation/transfer';\n\nimport type {\n TokenCreate,\n TokenGetById,\n TokenList,\n TokenRegenerate,\n TokenRevoke,\n TokenUpdate,\n} from '../../../../shared/contracts/transfer';\n\nconst { ApplicationError } = errors;\n\nconst { validateTransferTokenCreationInput, validateTransferTokenUpdateInput } = token;\n\nexport default {\n async list(ctx: Context) {\n const transferService = getService('transfer');\n const transferTokens = await transferService.token.list();\n\n ctx.body = { data: transferTokens } satisfies TokenList.Response;\n },\n\n async getById(ctx: Context) {\n const { id } = ctx.params as TokenGetById.Params;\n const tokenService = getService('transfer').token;\n\n const transferToken = await tokenService.getById(id);\n\n if (!transferToken) {\n ctx.notFound('Transfer token not found');\n return;\n }\n\n ctx.body = { data: transferToken } satisfies TokenGetById.Response;\n },\n\n async create(ctx: Context) {\n const { body } = ctx.request as TokenCreate.Request;\n const { token: tokenService } = getService('transfer');\n\n /**\n * We trim fields to avoid having issues with either:\n * - having a space at the end or start of the value\n * - having only spaces as value (so that an empty field can be caught in validation)\n */\n const attributes = {\n name: trim(body.name),\n description: trim(body.description),\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateTransferTokenCreationInput(attributes);\n\n const alreadyExists = await tokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const transferTokens = await tokenService.create(attributes);\n\n ctx.created({ data: transferTokens } satisfies TokenCreate.Response);\n },\n\n async update(ctx: Context) {\n const { body } = ctx.request as TokenUpdate.Request;\n const { id } = ctx.params as TokenUpdate.Params;\n const { token: tokenService } = getService('transfer');\n\n const attributes = body;\n /**\n * We trim fields to avoid having issues with either:\n * - having a space at the end or start of the value\n * - having only spaces as value (so that an empty field can be caught in validation)\n */\n if (has('name', attributes)) {\n attributes.name = trim(body.name);\n }\n\n if (has('description', attributes) || attributes.description === null) {\n attributes.description = trim(body.description);\n }\n\n await validateTransferTokenUpdateInput(attributes);\n\n const apiTokenExists = await tokenService.getById(id);\n if (!apiTokenExists) {\n return ctx.notFound('Transfer token not found');\n }\n\n if (has('name', attributes)) {\n const nameAlreadyTaken = await tokenService.getByName(attributes.name);\n\n /**\n * We cast the ids as string as the one coming from the ctx isn't cast\n * as a Number in case it is supposed to be an integer. It remains\n * as a string. This way we avoid issues with integers in the db.\n */\n if (!!nameAlreadyTaken && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await tokenService.update(id, attributes);\n\n ctx.body = { data: apiToken } satisfies TokenUpdate.Response;\n },\n\n async revoke(ctx: Context) {\n const { id } = ctx.params as TokenRevoke.Params;\n const { token: tokenService } = getService('transfer');\n\n const transferToken = await tokenService.revoke(id);\n\n ctx.deleted({ data: transferToken } satisfies TokenRevoke.Response);\n },\n\n async regenerate(ctx: Context) {\n const { id } = ctx.params as TokenRegenerate.Params;\n const { token: tokenService } = getService('transfer');\n\n const exists = await tokenService.getById(id);\n if (!exists) {\n ctx.notFound('Transfer token not found');\n return;\n }\n\n const accessToken = await tokenService.regenerate(id);\n\n ctx.created({ data: accessToken } satisfies TokenRegenerate.Response);\n },\n};\n"],"names":["ApplicationError","errors","validateTransferTokenCreationInput","validateTransferTokenUpdateInput","token","list","ctx","transferService","getService","transferTokens","body","data","getById","id","params","tokenService","transferToken","notFound","create","request","attributes","name","trim","description","permissions","lifespan","alreadyExists","exists","created","update","has","apiTokenExists","nameAlreadyTaken","getByName","strings","isEqual","apiToken","revoke","deleted","regenerate","accessToken"],"mappings":"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"}
1
+ {"version":3,"file":"token.js","sources":["../../../../../../server/src/controllers/transfer/token.ts"],"sourcesContent":["import { Context } from 'koa';\nimport { trim, has } from 'lodash';\n\nimport { errors, strings } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { token } from '../../validation/transfer';\n\nimport type {\n TokenCreate,\n TokenGetById,\n TokenList,\n TokenRegenerate,\n TokenRevoke,\n TokenUpdate,\n} from '../../../../shared/contracts/transfer';\n\nconst { ApplicationError } = errors;\n\nconst { validateTransferTokenCreationInput, validateTransferTokenUpdateInput } = token;\n\nexport default {\n async list(ctx: Context) {\n const transferService = getService('transfer');\n const transferTokens = await transferService.token.list();\n\n ctx.body = { data: transferTokens } satisfies TokenList.Response;\n },\n\n async getById(ctx: Context) {\n const { id } = ctx.params as TokenGetById.Params;\n const tokenService = getService('transfer').token;\n\n const transferToken = await tokenService.getById(id);\n\n if (!transferToken) {\n ctx.notFound('Transfer token not found');\n return;\n }\n\n ctx.body = { data: transferToken } satisfies TokenGetById.Response;\n },\n\n async create(ctx: Context) {\n const { body } = ctx.request as TokenCreate.Request;\n const { token: tokenService } = getService('transfer');\n\n /**\n * We trim fields to avoid having issues with either:\n * - having a space at the end or start of the value\n * - having only spaces as value (so that an empty field can be caught in validation)\n */\n const attributes = {\n name: trim(body.name),\n description: trim(body.description),\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateTransferTokenCreationInput(attributes);\n\n const alreadyExists = await tokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const transferTokens = await tokenService.create(attributes);\n\n ctx.created({ data: transferTokens } satisfies TokenCreate.Response);\n },\n\n async update(ctx: Context) {\n const { body } = ctx.request as TokenUpdate.Request;\n const { id } = ctx.params as TokenUpdate.Params;\n const { token: tokenService } = getService('transfer');\n\n const attributes = body;\n /**\n * We trim fields to avoid having issues with either:\n * - having a space at the end or start of the value\n * - having only spaces as value (so that an empty field can be caught in validation)\n */\n if (has(attributes, 'name')) {\n attributes.name = trim(body.name);\n }\n\n if (has(attributes, 'description') || attributes.description === null) {\n attributes.description = trim(body.description);\n }\n\n await validateTransferTokenUpdateInput(attributes);\n\n const apiTokenExists = await tokenService.getById(id);\n if (!apiTokenExists) {\n return ctx.notFound('Transfer token not found');\n }\n\n if (has(attributes, 'name')) {\n const nameAlreadyTaken = await tokenService.getByName(attributes.name);\n\n /**\n * We cast the ids as string as the one coming from the ctx isn't cast\n * as a Number in case it is supposed to be an integer. It remains\n * as a string. This way we avoid issues with integers in the db.\n */\n if (!!nameAlreadyTaken && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await tokenService.update(id, attributes);\n\n ctx.body = { data: apiToken } satisfies TokenUpdate.Response;\n },\n\n async revoke(ctx: Context) {\n const { id } = ctx.params as TokenRevoke.Params;\n const { token: tokenService } = getService('transfer');\n\n const transferToken = await tokenService.revoke(id);\n\n ctx.deleted({ data: transferToken } satisfies TokenRevoke.Response);\n },\n\n async regenerate(ctx: Context) {\n const { id } = ctx.params as TokenRegenerate.Params;\n const { token: tokenService } = getService('transfer');\n\n const exists = await tokenService.getById(id);\n if (!exists) {\n ctx.notFound('Transfer token not found');\n return;\n }\n\n const accessToken = await tokenService.regenerate(id);\n\n ctx.created({ data: accessToken } satisfies TokenRegenerate.Response);\n },\n};\n"],"names":["ApplicationError","errors","validateTransferTokenCreationInput","validateTransferTokenUpdateInput","token","list","ctx","transferService","getService","transferTokens","body","data","getById","id","params","tokenService","transferToken","notFound","create","request","attributes","name","trim","description","permissions","lifespan","alreadyExists","exists","created","update","has","apiTokenExists","nameAlreadyTaken","getByName","strings","isEqual","apiToken","revoke","deleted","regenerate","accessToken"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { has, trim } from 'lodash/fp';
1
+ import { has, trim } from 'lodash';
2
2
  import { errors, strings } from '@strapi/utils';
3
3
  import { getService } from '../../utils/index.mjs';
4
4
  import token$1 from '../../validation/transfer/token.mjs';
@@ -59,10 +59,10 @@ var token = {
59
59
  * We trim fields to avoid having issues with either:
60
60
  * - having a space at the end or start of the value
61
61
  * - having only spaces as value (so that an empty field can be caught in validation)
62
- */ if (has('name', attributes)) {
62
+ */ if (has(attributes, 'name')) {
63
63
  attributes.name = trim(body.name);
64
64
  }
65
- if (has('description', attributes) || attributes.description === null) {
65
+ if (has(attributes, 'description') || attributes.description === null) {
66
66
  attributes.description = trim(body.description);
67
67
  }
68
68
  await validateTransferTokenUpdateInput(attributes);
@@ -70,7 +70,7 @@ var token = {
70
70
  if (!apiTokenExists) {
71
71
  return ctx.notFound('Transfer token not found');
72
72
  }
73
- if (has('name', attributes)) {
73
+ if (has(attributes, 'name')) {
74
74
  const nameAlreadyTaken = await tokenService.getByName(attributes.name);
75
75
  /**
76
76
  * We cast the ids as string as the one coming from the ctx isn't cast
@@ -1 +1 @@
1
- {"version":3,"file":"token.mjs","sources":["../../../../../../server/src/controllers/transfer/token.ts"],"sourcesContent":["import { Context } from 'koa';\nimport { trim, has } from 'lodash/fp';\nimport { errors, strings } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { token } from '../../validation/transfer';\n\nimport type {\n TokenCreate,\n TokenGetById,\n TokenList,\n TokenRegenerate,\n TokenRevoke,\n TokenUpdate,\n} from '../../../../shared/contracts/transfer';\n\nconst { ApplicationError } = errors;\n\nconst { validateTransferTokenCreationInput, validateTransferTokenUpdateInput } = token;\n\nexport default {\n async list(ctx: Context) {\n const transferService = getService('transfer');\n const transferTokens = await transferService.token.list();\n\n ctx.body = { data: transferTokens } satisfies TokenList.Response;\n },\n\n async getById(ctx: Context) {\n const { id } = ctx.params as TokenGetById.Params;\n const tokenService = getService('transfer').token;\n\n const transferToken = await tokenService.getById(id);\n\n if (!transferToken) {\n ctx.notFound('Transfer token not found');\n return;\n }\n\n ctx.body = { data: transferToken } satisfies TokenGetById.Response;\n },\n\n async create(ctx: Context) {\n const { body } = ctx.request as TokenCreate.Request;\n const { token: tokenService } = getService('transfer');\n\n /**\n * We trim fields to avoid having issues with either:\n * - having a space at the end or start of the value\n * - having only spaces as value (so that an empty field can be caught in validation)\n */\n const attributes = {\n name: trim(body.name),\n description: trim(body.description),\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateTransferTokenCreationInput(attributes);\n\n const alreadyExists = await tokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const transferTokens = await tokenService.create(attributes);\n\n ctx.created({ data: transferTokens } satisfies TokenCreate.Response);\n },\n\n async update(ctx: Context) {\n const { body } = ctx.request as TokenUpdate.Request;\n const { id } = ctx.params as TokenUpdate.Params;\n const { token: tokenService } = getService('transfer');\n\n const attributes = body;\n /**\n * We trim fields to avoid having issues with either:\n * - having a space at the end or start of the value\n * - having only spaces as value (so that an empty field can be caught in validation)\n */\n if (has('name', attributes)) {\n attributes.name = trim(body.name);\n }\n\n if (has('description', attributes) || attributes.description === null) {\n attributes.description = trim(body.description);\n }\n\n await validateTransferTokenUpdateInput(attributes);\n\n const apiTokenExists = await tokenService.getById(id);\n if (!apiTokenExists) {\n return ctx.notFound('Transfer token not found');\n }\n\n if (has('name', attributes)) {\n const nameAlreadyTaken = await tokenService.getByName(attributes.name);\n\n /**\n * We cast the ids as string as the one coming from the ctx isn't cast\n * as a Number in case it is supposed to be an integer. It remains\n * as a string. This way we avoid issues with integers in the db.\n */\n if (!!nameAlreadyTaken && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await tokenService.update(id, attributes);\n\n ctx.body = { data: apiToken } satisfies TokenUpdate.Response;\n },\n\n async revoke(ctx: Context) {\n const { id } = ctx.params as TokenRevoke.Params;\n const { token: tokenService } = getService('transfer');\n\n const transferToken = await tokenService.revoke(id);\n\n ctx.deleted({ data: transferToken } satisfies TokenRevoke.Response);\n },\n\n async regenerate(ctx: Context) {\n const { id } = ctx.params as TokenRegenerate.Params;\n const { token: tokenService } = getService('transfer');\n\n const exists = await tokenService.getById(id);\n if (!exists) {\n ctx.notFound('Transfer token not found');\n return;\n }\n\n const accessToken = await tokenService.regenerate(id);\n\n ctx.created({ data: accessToken } satisfies TokenRegenerate.Response);\n },\n};\n"],"names":["ApplicationError","errors","validateTransferTokenCreationInput","validateTransferTokenUpdateInput","token","list","ctx","transferService","getService","transferTokens","body","data","getById","id","params","tokenService","transferToken","notFound","create","request","attributes","name","trim","description","permissions","lifespan","alreadyExists","exists","created","update","has","apiTokenExists","nameAlreadyTaken","getByName","strings","isEqual","apiToken","revoke","deleted","regenerate","accessToken"],"mappings":"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"}
1
+ {"version":3,"file":"token.mjs","sources":["../../../../../../server/src/controllers/transfer/token.ts"],"sourcesContent":["import { Context } from 'koa';\nimport { trim, has } from 'lodash';\n\nimport { errors, strings } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { token } from '../../validation/transfer';\n\nimport type {\n TokenCreate,\n TokenGetById,\n TokenList,\n TokenRegenerate,\n TokenRevoke,\n TokenUpdate,\n} from '../../../../shared/contracts/transfer';\n\nconst { ApplicationError } = errors;\n\nconst { validateTransferTokenCreationInput, validateTransferTokenUpdateInput } = token;\n\nexport default {\n async list(ctx: Context) {\n const transferService = getService('transfer');\n const transferTokens = await transferService.token.list();\n\n ctx.body = { data: transferTokens } satisfies TokenList.Response;\n },\n\n async getById(ctx: Context) {\n const { id } = ctx.params as TokenGetById.Params;\n const tokenService = getService('transfer').token;\n\n const transferToken = await tokenService.getById(id);\n\n if (!transferToken) {\n ctx.notFound('Transfer token not found');\n return;\n }\n\n ctx.body = { data: transferToken } satisfies TokenGetById.Response;\n },\n\n async create(ctx: Context) {\n const { body } = ctx.request as TokenCreate.Request;\n const { token: tokenService } = getService('transfer');\n\n /**\n * We trim fields to avoid having issues with either:\n * - having a space at the end or start of the value\n * - having only spaces as value (so that an empty field can be caught in validation)\n */\n const attributes = {\n name: trim(body.name),\n description: trim(body.description),\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateTransferTokenCreationInput(attributes);\n\n const alreadyExists = await tokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const transferTokens = await tokenService.create(attributes);\n\n ctx.created({ data: transferTokens } satisfies TokenCreate.Response);\n },\n\n async update(ctx: Context) {\n const { body } = ctx.request as TokenUpdate.Request;\n const { id } = ctx.params as TokenUpdate.Params;\n const { token: tokenService } = getService('transfer');\n\n const attributes = body;\n /**\n * We trim fields to avoid having issues with either:\n * - having a space at the end or start of the value\n * - having only spaces as value (so that an empty field can be caught in validation)\n */\n if (has(attributes, 'name')) {\n attributes.name = trim(body.name);\n }\n\n if (has(attributes, 'description') || attributes.description === null) {\n attributes.description = trim(body.description);\n }\n\n await validateTransferTokenUpdateInput(attributes);\n\n const apiTokenExists = await tokenService.getById(id);\n if (!apiTokenExists) {\n return ctx.notFound('Transfer token not found');\n }\n\n if (has(attributes, 'name')) {\n const nameAlreadyTaken = await tokenService.getByName(attributes.name);\n\n /**\n * We cast the ids as string as the one coming from the ctx isn't cast\n * as a Number in case it is supposed to be an integer. It remains\n * as a string. This way we avoid issues with integers in the db.\n */\n if (!!nameAlreadyTaken && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await tokenService.update(id, attributes);\n\n ctx.body = { data: apiToken } satisfies TokenUpdate.Response;\n },\n\n async revoke(ctx: Context) {\n const { id } = ctx.params as TokenRevoke.Params;\n const { token: tokenService } = getService('transfer');\n\n const transferToken = await tokenService.revoke(id);\n\n ctx.deleted({ data: transferToken } satisfies TokenRevoke.Response);\n },\n\n async regenerate(ctx: Context) {\n const { id } = ctx.params as TokenRegenerate.Params;\n const { token: tokenService } = getService('transfer');\n\n const exists = await tokenService.getById(id);\n if (!exists) {\n ctx.notFound('Transfer token not found');\n return;\n }\n\n const accessToken = await tokenService.regenerate(id);\n\n ctx.created({ data: accessToken } satisfies TokenRegenerate.Response);\n },\n};\n"],"names":["ApplicationError","errors","validateTransferTokenCreationInput","validateTransferTokenUpdateInput","token","list","ctx","transferService","getService","transferTokens","body","data","getById","id","params","tokenService","transferToken","notFound","create","request","attributes","name","trim","description","permissions","lifespan","alreadyExists","exists","created","update","has","apiTokenExists","nameAlreadyTaken","getByName","strings","isEqual","apiToken","revoke","deleted","regenerate","accessToken"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
 
5
5
  /**
6
6
  * Return the default attributes of a new {@link Action}
@@ -25,7 +25,7 @@ var fp = require('lodash/fp');
25
25
  ];
26
26
  /**
27
27
  * Remove unwanted attributes from an {@link Action}
28
- */ const sanitizeActionAttributes = fp.pick(actionFields);
28
+ */ const sanitizeActionAttributes = (action)=>_.pick(action, actionFields);
29
29
  /**
30
30
  * Create and return an identifier for an {@link CreateActionPayload}.
31
31
  * The format is based on the action's source ({@link CreateActionPayload.pluginName} or 'application') and {@link CreateActionPayload.uid}.
@@ -44,7 +44,10 @@ const computeActionId = (attributes)=>{
44
44
  };
45
45
  /**
46
46
  * Assign an actionId attribute to an {@link CreateActionPayload} object
47
- */ const assignActionId = (attrs)=>fp.set('actionId', computeActionId(attrs), attrs);
47
+ */ const assignActionId = (attrs)=>({
48
+ ...attrs,
49
+ actionId: computeActionId(attrs)
50
+ });
48
51
  /**
49
52
  * Transform an action by adding or removing the {@link Action.subCategory} attribute
50
53
  * @param {Action} action - The action to process
@@ -54,27 +57,26 @@ const computeActionId = (attributes)=>{
54
57
  'settings',
55
58
  'plugins'
56
59
  ].includes(action.section);
57
- return shouldHaveSubCategory ? fp.set('subCategory', action.subCategory || 'general', action) : fp.omit('subCategory', action);
60
+ return shouldHaveSubCategory ? {
61
+ ...action,
62
+ subCategory: action.subCategory || 'general'
63
+ } : _.omit(action, 'subCategory');
58
64
  };
59
65
  /**
60
66
  * Check if a property can be applied to an {@link Action}
61
- */ const appliesToProperty = fp.curry((property, action)=>{
62
- return fp.pipe(fp.prop('options.applyToProperties'), fp.includes(property))(action);
67
+ */ const appliesToProperty = _.curry((property, action)=>{
68
+ return _.includes(_.get(action, 'options.applyToProperties'), property);
63
69
  });
64
70
  /**
65
71
  * Check if an action applies to a subject
66
- */ const appliesToSubject = fp.curry((subject, action)=>{
67
- return fp.isArray(action.subjects) && fp.includes(subject, action.subjects);
72
+ */ const appliesToSubject = _.curry((subject, action)=>{
73
+ return Array.isArray(action.subjects) && action.subjects.includes(subject);
68
74
  });
69
75
  /**
70
76
  * Transform the given attributes into a domain representation of an Action
71
- */ const create = fp.pipe(// Create and assign an action identifier to the action
72
- // (need to be done before the sanitizeActionAttributes since we need the uid here)
73
- assignActionId, // Add or remove the sub category field based on the pluginName attribute
74
- assignOrOmitSubCategory, // Remove unwanted attributes from the payload
75
- sanitizeActionAttributes, // Complete the action creation by adding default values for some attributes
76
- fp.merge(getDefaultActionAttributes()));
77
- var actionDomain = {
77
+ */ const create = _.flow(// Assign the action identifier before sanitization removes the uid.
78
+ assignActionId, assignOrOmitSubCategory, sanitizeActionAttributes, (action)=>_.merge({}, getDefaultActionAttributes(), action));
79
+ var domain = {
78
80
  actionFields,
79
81
  appliesToProperty,
80
82
  appliesToSubject,
@@ -86,5 +88,5 @@ var actionDomain = {
86
88
  sanitizeActionAttributes
87
89
  };
88
90
 
89
- module.exports = actionDomain;
91
+ module.exports = domain;
90
92
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/action/index.ts"],"sourcesContent":["import type { Utils } from '@strapi/types';\n\nimport { curry, pipe, merge, set, pick, omit, includes, isArray, prop } from 'lodash/fp';\n\nexport interface ActionAlias {\n /**\n * The action ID to alias\n */\n actionId: string;\n\n /**\n * An optional array of subject to restrict the alias usage\n */\n subjects?: string[];\n}\n\nexport type Action = {\n /**\n * The unique identifier of the action\n */\n actionId: string;\n\n /**\n * The section linked to the action - These can be 'contentTypes' | 'plugins' | 'settings' | 'internal'\n */\n section: string;\n\n /**\n * The human readable name of an action\n */\n displayName: string;\n\n /**\n * The main category of an action\n */\n category: string;\n\n /**\n * The secondary category of an action (only for settings and plugins section)\n */\n subCategory?: string;\n\n /**\n * The plugin that provides the action\n */\n pluginName?: string;\n\n /**\n * A list of subjects on which the action can be applied\n */\n subjects?: string[];\n\n /**\n * The options of an action\n */\n options: {\n /**\n * The list of properties that can be associated with an action\n */\n applyToProperties: string[] | null;\n };\n\n /**\n * An optional array of @see {@link ActionAlias}.\n *\n * It represents the possible aliases for the current action.\n *\n * Aliases are unidirectional.\n *\n * Note: This is an internal property and probably shouldn't be used outside Strapi core features.\n * Its behavior might change at any time without notice.\n *\n * @internal\n */\n aliases?: ActionAlias[];\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n * @typedef {Action, { uid: string }} CreateActionPayload\n */\nexport type CreateActionPayload = Utils.Intersect<\n [\n Utils.Object.PartialBy<\n // Action Id is computed from the uid value\n Omit<Action, 'actionId'>,\n // Options is filled with default values\n 'options'\n >,\n { uid: string },\n ]\n>;\n\n/**\n * Return the default attributes of a new {@link Action}\n * @return Partial<Action>\n */\nconst getDefaultActionAttributes = (): Partial<Action> => ({\n options: {\n applyToProperties: null,\n },\n});\n\n/**\n * Get the list of all the valid attributes of an {@link Action}\n */\nconst actionFields = [\n 'section',\n 'displayName',\n 'category',\n 'subCategory',\n 'pluginName',\n 'subjects',\n 'options',\n 'actionId',\n 'aliases',\n] as const;\n\n/**\n * Remove unwanted attributes from an {@link Action}\n */\nconst sanitizeActionAttributes = pick(actionFields) as (\n action: Action | CreateActionPayload\n) => Action;\n\n/**\n * Create and return an identifier for an {@link CreateActionPayload}.\n * The format is based on the action's source ({@link CreateActionPayload.pluginName} or 'application') and {@link CreateActionPayload.uid}.\n * @param {CreateActionPayload} attributes\n * @return {string}\n */\n// TODO: TS - Use Common.UID\nconst computeActionId = (attributes: CreateActionPayload): string => {\n const { pluginName, uid } = attributes;\n\n if (!pluginName) {\n return `api::${uid}`;\n }\n\n if (pluginName === 'admin') {\n return `admin::${uid}`;\n }\n\n return `plugin::${pluginName}.${uid}`;\n};\n\n/**\n * Assign an actionId attribute to an {@link CreateActionPayload} object\n */\nconst assignActionId = (attrs: CreateActionPayload) =>\n set('actionId', computeActionId(attrs), attrs);\n\n/**\n * Transform an action by adding or removing the {@link Action.subCategory} attribute\n * @param {Action} action - The action to process\n * @return {Action}\n */\nconst assignOrOmitSubCategory = (action: Action): Action => {\n const shouldHaveSubCategory = ['settings', 'plugins'].includes(action.section);\n\n return shouldHaveSubCategory\n ? set('subCategory', action.subCategory || 'general', action)\n : omit('subCategory', action);\n};\n\n/**\n * Check if a property can be applied to an {@link Action}\n */\nconst appliesToProperty = curry((property: string, action: Action): boolean => {\n return pipe(prop('options.applyToProperties'), includes(property))(action);\n});\n\n/**\n * Check if an action applies to a subject\n */\nconst appliesToSubject = curry((subject: string, action: Action): boolean => {\n return isArray(action.subjects) && includes(subject, action.subjects);\n});\n\n/**\n * Transform the given attributes into a domain representation of an Action\n */\nconst create: (payload: CreateActionPayload) => Action = pipe(\n // Create and assign an action identifier to the action\n // (need to be done before the sanitizeActionAttributes since we need the uid here)\n assignActionId,\n // Add or remove the sub category field based on the pluginName attribute\n assignOrOmitSubCategory,\n // Remove unwanted attributes from the payload\n sanitizeActionAttributes,\n // Complete the action creation by adding default values for some attributes\n merge(getDefaultActionAttributes())\n);\n\nexport default {\n actionFields,\n appliesToProperty,\n appliesToSubject,\n assignActionId,\n assignOrOmitSubCategory,\n create,\n computeActionId,\n getDefaultActionAttributes,\n sanitizeActionAttributes,\n};\n"],"names":["getDefaultActionAttributes","options","applyToProperties","actionFields","sanitizeActionAttributes","pick","computeActionId","attributes","pluginName","uid","assignActionId","attrs","set","assignOrOmitSubCategory","action","shouldHaveSubCategory","includes","section","subCategory","omit","appliesToProperty","curry","property","pipe","prop","appliesToSubject","subject","isArray","subjects","create","merge"],"mappings":";;;;AA6FA;;;IAIA,MAAMA,0BAAAA,GAA6B,KAAwB;QACzDC,OAAAA,EAAS;YACPC,iBAAAA,EAAmB;AACrB;KACF,CAAA;AAEA;;AAEC,IACD,MAAMC,YAAAA,GAAe;AACnB,IAAA,SAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,aAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;AACD,CAAA;AAED;;IAGA,MAAMC,2BAA2BC,OAAAA,CAAKF,YAAAA,CAAAA;AAItC;;;;;AAKC;AAED,MAAMG,kBAAkB,CAACC,UAAAA,GAAAA;AACvB,IAAA,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE,GAAGF,UAAAA;AAE5B,IAAA,IAAI,CAACC,UAAAA,EAAY;QACf,OAAO,CAAC,KAAK,EAAEC,GAAAA,CAAAA,CAAK;AACtB,IAAA;AAEA,IAAA,IAAID,eAAe,OAAA,EAAS;QAC1B,OAAO,CAAC,OAAO,EAAEC,GAAAA,CAAAA,CAAK;AACxB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAED,UAAAA,CAAW,CAAC,EAAEC,GAAAA,CAAAA,CAAK;AACvC,CAAA;AAEA;;AAEC,IACD,MAAMC,cAAAA,GAAiB,CAACC,QACtBC,MAAAA,CAAI,UAAA,EAAYN,gBAAgBK,KAAAA,CAAAA,EAAQA,KAAAA,CAAAA;AAE1C;;;;IAKA,MAAME,0BAA0B,CAACC,MAAAA,GAAAA;AAC/B,IAAA,MAAMC,qBAAAA,GAAwB;AAAC,QAAA,UAAA;AAAY,QAAA;KAAU,CAACC,QAAQ,CAACF,MAAAA,CAAOG,OAAO,CAAA;IAE7E,OAAOF,qBAAAA,GACHH,OAAI,aAAA,EAAeE,MAAAA,CAAOI,WAAW,IAAI,SAAA,EAAWJ,MAAAA,CAAAA,GACpDK,OAAAA,CAAK,aAAA,EAAeL,MAAAA,CAAAA;AAC1B,CAAA;AAEA;;AAEC,IACD,MAAMM,iBAAAA,GAAoBC,QAAAA,CAAM,CAACC,QAAAA,EAAkBR,MAAAA,GAAAA;AACjD,IAAA,OAAOS,OAAAA,CAAKC,OAAAA,CAAK,2BAAA,CAAA,EAA8BR,WAAAA,CAASM,QAAAA,CAAAA,CAAAA,CAAWR,MAAAA,CAAAA;AACrE,CAAA,CAAA;AAEA;;AAEC,IACD,MAAMW,gBAAAA,GAAmBJ,QAAAA,CAAM,CAACK,OAAAA,EAAiBZ,MAAAA,GAAAA;AAC/C,IAAA,OAAOa,WAAQb,MAAAA,CAAOc,QAAQ,KAAKZ,WAAAA,CAASU,OAAAA,EAASZ,OAAOc,QAAQ,CAAA;AACtE,CAAA,CAAA;AAEA;;IAGA,MAAMC,MAAAA,GAAmDN,OAAAA;AAEvD;AACAb,cAAAA;AAEAG,uBAAAA;AAEAT,wBAAAA;AAEA0B,QAAAA,CAAM9B,0BAAAA,EAAAA,CAAAA,CAAAA;AAGR,mBAAe;AACbG,IAAAA,YAAAA;AACAiB,IAAAA,iBAAAA;AACAK,IAAAA,gBAAAA;AACAf,IAAAA,cAAAA;AACAG,IAAAA,uBAAAA;AACAgB,IAAAA,MAAAA;AACAvB,IAAAA,eAAAA;AACAN,IAAAA,0BAAAA;AACAI,IAAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/action/index.ts"],"sourcesContent":["import { pick, includes, merge, get, curry, flow, omit } from 'lodash';\nimport type { Utils } from '@strapi/types';\n\nexport interface ActionAlias {\n /**\n * The action ID to alias\n */\n actionId: string;\n\n /**\n * An optional array of subject to restrict the alias usage\n */\n subjects?: string[];\n}\n\nexport type Action = {\n /**\n * The unique identifier of the action\n */\n actionId: string;\n\n /**\n * The section linked to the action - These can be 'contentTypes' | 'plugins' | 'settings' | 'internal'\n */\n section: string;\n\n /**\n * The human readable name of an action\n */\n displayName: string;\n\n /**\n * The main category of an action\n */\n category: string;\n\n /**\n * The secondary category of an action (only for settings and plugins section)\n */\n subCategory?: string;\n\n /**\n * The plugin that provides the action\n */\n pluginName?: string;\n\n /**\n * A list of subjects on which the action can be applied\n */\n subjects?: string[];\n\n /**\n * The options of an action\n */\n options: {\n /**\n * The list of properties that can be associated with an action\n */\n applyToProperties: string[] | null;\n };\n\n /**\n * An optional array of @see {@link ActionAlias}.\n *\n * It represents the possible aliases for the current action.\n *\n * Aliases are unidirectional.\n *\n * Note: This is an internal property and probably shouldn't be used outside Strapi core features.\n * Its behavior might change at any time without notice.\n *\n * @internal\n */\n aliases?: ActionAlias[];\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n * @typedef {Action, { uid: string }} CreateActionPayload\n */\nexport type CreateActionPayload = Utils.Intersect<\n [\n Utils.Object.PartialBy<\n // Action Id is computed from the uid value\n Omit<Action, 'actionId'>,\n // Options is filled with default values\n 'options'\n >,\n { uid: string },\n ]\n>;\n\n/**\n * Return the default attributes of a new {@link Action}\n * @return Partial<Action>\n */\nconst getDefaultActionAttributes = (): Partial<Action> => ({\n options: {\n applyToProperties: null,\n },\n});\n\n/**\n * Get the list of all the valid attributes of an {@link Action}\n */\nconst actionFields = [\n 'section',\n 'displayName',\n 'category',\n 'subCategory',\n 'pluginName',\n 'subjects',\n 'options',\n 'actionId',\n 'aliases',\n] as const;\n\n/**\n * Remove unwanted attributes from an {@link Action}\n */\nconst sanitizeActionAttributes = (action: Action | CreateActionPayload): Action =>\n pick(action, actionFields) as Action;\n\n/**\n * Create and return an identifier for an {@link CreateActionPayload}.\n * The format is based on the action's source ({@link CreateActionPayload.pluginName} or 'application') and {@link CreateActionPayload.uid}.\n * @param {CreateActionPayload} attributes\n * @return {string}\n */\n// TODO: TS - Use Common.UID\nconst computeActionId = (attributes: CreateActionPayload): string => {\n const { pluginName, uid } = attributes;\n\n if (!pluginName) {\n return `api::${uid}`;\n }\n\n if (pluginName === 'admin') {\n return `admin::${uid}`;\n }\n\n return `plugin::${pluginName}.${uid}`;\n};\n\n/**\n * Assign an actionId attribute to an {@link CreateActionPayload} object\n */\nconst assignActionId = (attrs: CreateActionPayload) => ({\n ...attrs,\n actionId: computeActionId(attrs),\n});\n\n/**\n * Transform an action by adding or removing the {@link Action.subCategory} attribute\n * @param {Action} action - The action to process\n * @return {Action}\n */\nconst assignOrOmitSubCategory = (action: Action): Action => {\n const shouldHaveSubCategory = ['settings', 'plugins'].includes(action.section);\n\n return shouldHaveSubCategory\n ? { ...action, subCategory: action.subCategory || 'general' }\n : omit(action, 'subCategory');\n};\n\n/**\n * Check if a property can be applied to an {@link Action}\n */\nconst appliesToProperty = curry((property: string, action: Action): boolean => {\n return includes(get(action, 'options.applyToProperties'), property);\n});\n\n/**\n * Check if an action applies to a subject\n */\nconst appliesToSubject = curry((subject: string, action: Action): boolean => {\n return Array.isArray(action.subjects) && action.subjects.includes(subject);\n});\n\n/**\n * Transform the given attributes into a domain representation of an Action\n */\nconst create: (payload: CreateActionPayload) => Action = flow(\n // Assign the action identifier before sanitization removes the uid.\n assignActionId,\n assignOrOmitSubCategory,\n sanitizeActionAttributes,\n (action) => merge({}, getDefaultActionAttributes(), action)\n);\n\nexport default {\n actionFields,\n appliesToProperty,\n appliesToSubject,\n assignActionId,\n assignOrOmitSubCategory,\n create,\n computeActionId,\n getDefaultActionAttributes,\n sanitizeActionAttributes,\n};\n"],"names":["getDefaultActionAttributes","options","applyToProperties","actionFields","sanitizeActionAttributes","action","pick","computeActionId","attributes","pluginName","uid","assignActionId","attrs","actionId","assignOrOmitSubCategory","shouldHaveSubCategory","includes","section","subCategory","omit","appliesToProperty","curry","property","get","appliesToSubject","subject","Array","isArray","subjects","create","flow","merge"],"mappings":";;;;AA4FA;;;IAIA,MAAMA,0BAAAA,GAA6B,KAAwB;QACzDC,OAAAA,EAAS;YACPC,iBAAAA,EAAmB;AACrB;KACF,CAAA;AAEA;;AAEC,IACD,MAAMC,YAAAA,GAAe;AACnB,IAAA,SAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,aAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;AACD,CAAA;AAED;;AAEC,IACD,MAAMC,wBAAAA,GAA2B,CAACC,MAAAA,GAChCC,OAAKD,MAAAA,EAAQF,YAAAA,CAAAA;AAEf;;;;;AAKC;AAED,MAAMI,kBAAkB,CAACC,UAAAA,GAAAA;AACvB,IAAA,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE,GAAGF,UAAAA;AAE5B,IAAA,IAAI,CAACC,UAAAA,EAAY;QACf,OAAO,CAAC,KAAK,EAAEC,GAAAA,CAAAA,CAAK;AACtB,IAAA;AAEA,IAAA,IAAID,eAAe,OAAA,EAAS;QAC1B,OAAO,CAAC,OAAO,EAAEC,GAAAA,CAAAA,CAAK;AACxB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAED,UAAAA,CAAW,CAAC,EAAEC,GAAAA,CAAAA,CAAK;AACvC,CAAA;AAEA;;AAEC,IACD,MAAMC,cAAAA,GAAiB,CAACC,KAAAA,IAAgC;AACtD,QAAA,GAAGA,KAAK;AACRC,QAAAA,QAAAA,EAAUN,eAAAA,CAAgBK,KAAAA;KAC5B,CAAA;AAEA;;;;IAKA,MAAME,0BAA0B,CAACT,MAAAA,GAAAA;AAC/B,IAAA,MAAMU,qBAAAA,GAAwB;AAAC,QAAA,UAAA;AAAY,QAAA;KAAU,CAACC,QAAQ,CAACX,MAAAA,CAAOY,OAAO,CAAA;AAE7E,IAAA,OAAOF,qBAAAA,GACH;AAAE,QAAA,GAAGV,MAAM;QAAEa,WAAAA,EAAab,MAAAA,CAAOa,WAAW,IAAI;AAAU,KAAA,GAC1DC,OAAKd,MAAAA,EAAQ,aAAA,CAAA;AACnB,CAAA;AAEA;;AAEC,IACD,MAAMe,iBAAAA,GAAoBC,OAAAA,CAAM,CAACC,QAAAA,EAAkBjB,MAAAA,GAAAA;IACjD,OAAOW,UAAAA,CAASO,KAAAA,CAAIlB,MAAAA,EAAQ,2BAAA,CAAA,EAA8BiB,QAAAA,CAAAA;AAC5D,CAAA,CAAA;AAEA;;AAEC,IACD,MAAME,gBAAAA,GAAmBH,OAAAA,CAAM,CAACI,OAAAA,EAAiBpB,MAAAA,GAAAA;IAC/C,OAAOqB,KAAAA,CAAMC,OAAO,CAACtB,MAAAA,CAAOuB,QAAQ,KAAKvB,MAAAA,CAAOuB,QAAQ,CAACZ,QAAQ,CAACS,OAAAA,CAAAA;AACpE,CAAA,CAAA;AAEA;;IAGA,MAAMI,MAAAA,GAAmDC,MAAAA;AAEvDnB,cAAAA,EACAG,yBACAV,wBAAAA,EACA,CAACC,SAAW0B,OAAAA,CAAM,IAAI/B,0BAAAA,EAAAA,EAA8BK,MAAAA,CAAAA,CAAAA;AAGtD,aAAe;AACbF,IAAAA,YAAAA;AACAiB,IAAAA,iBAAAA;AACAI,IAAAA,gBAAAA;AACAb,IAAAA,cAAAA;AACAG,IAAAA,uBAAAA;AACAe,IAAAA,MAAAA;AACAtB,IAAAA,eAAAA;AACAP,IAAAA,0BAAAA;AACAI,IAAAA;AACF,CAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { pick, curry, pipe, prop, includes, isArray, merge, set, omit } from 'lodash/fp';
1
+ import { curry, includes, get, flow, merge, omit, pick } from 'lodash';
2
2
 
3
3
  /**
4
4
  * Return the default attributes of a new {@link Action}
@@ -23,7 +23,7 @@ import { pick, curry, pipe, prop, includes, isArray, merge, set, omit } from 'lo
23
23
  ];
24
24
  /**
25
25
  * Remove unwanted attributes from an {@link Action}
26
- */ const sanitizeActionAttributes = pick(actionFields);
26
+ */ const sanitizeActionAttributes = (action)=>pick(action, actionFields);
27
27
  /**
28
28
  * Create and return an identifier for an {@link CreateActionPayload}.
29
29
  * The format is based on the action's source ({@link CreateActionPayload.pluginName} or 'application') and {@link CreateActionPayload.uid}.
@@ -42,7 +42,10 @@ const computeActionId = (attributes)=>{
42
42
  };
43
43
  /**
44
44
  * Assign an actionId attribute to an {@link CreateActionPayload} object
45
- */ const assignActionId = (attrs)=>set('actionId', computeActionId(attrs), attrs);
45
+ */ const assignActionId = (attrs)=>({
46
+ ...attrs,
47
+ actionId: computeActionId(attrs)
48
+ });
46
49
  /**
47
50
  * Transform an action by adding or removing the {@link Action.subCategory} attribute
48
51
  * @param {Action} action - The action to process
@@ -52,27 +55,26 @@ const computeActionId = (attributes)=>{
52
55
  'settings',
53
56
  'plugins'
54
57
  ].includes(action.section);
55
- return shouldHaveSubCategory ? set('subCategory', action.subCategory || 'general', action) : omit('subCategory', action);
58
+ return shouldHaveSubCategory ? {
59
+ ...action,
60
+ subCategory: action.subCategory || 'general'
61
+ } : omit(action, 'subCategory');
56
62
  };
57
63
  /**
58
64
  * Check if a property can be applied to an {@link Action}
59
65
  */ const appliesToProperty = curry((property, action)=>{
60
- return pipe(prop('options.applyToProperties'), includes(property))(action);
66
+ return includes(get(action, 'options.applyToProperties'), property);
61
67
  });
62
68
  /**
63
69
  * Check if an action applies to a subject
64
70
  */ const appliesToSubject = curry((subject, action)=>{
65
- return isArray(action.subjects) && includes(subject, action.subjects);
71
+ return Array.isArray(action.subjects) && action.subjects.includes(subject);
66
72
  });
67
73
  /**
68
74
  * Transform the given attributes into a domain representation of an Action
69
- */ const create = pipe(// Create and assign an action identifier to the action
70
- // (need to be done before the sanitizeActionAttributes since we need the uid here)
71
- assignActionId, // Add or remove the sub category field based on the pluginName attribute
72
- assignOrOmitSubCategory, // Remove unwanted attributes from the payload
73
- sanitizeActionAttributes, // Complete the action creation by adding default values for some attributes
74
- merge(getDefaultActionAttributes()));
75
- var actionDomain = {
75
+ */ const create = flow(// Assign the action identifier before sanitization removes the uid.
76
+ assignActionId, assignOrOmitSubCategory, sanitizeActionAttributes, (action)=>merge({}, getDefaultActionAttributes(), action));
77
+ var domain = {
76
78
  actionFields,
77
79
  appliesToProperty,
78
80
  appliesToSubject,
@@ -84,5 +86,5 @@ var actionDomain = {
84
86
  sanitizeActionAttributes
85
87
  };
86
88
 
87
- export { actionDomain as default };
89
+ export { domain as default };
88
90
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/action/index.ts"],"sourcesContent":["import type { Utils } from '@strapi/types';\n\nimport { curry, pipe, merge, set, pick, omit, includes, isArray, prop } from 'lodash/fp';\n\nexport interface ActionAlias {\n /**\n * The action ID to alias\n */\n actionId: string;\n\n /**\n * An optional array of subject to restrict the alias usage\n */\n subjects?: string[];\n}\n\nexport type Action = {\n /**\n * The unique identifier of the action\n */\n actionId: string;\n\n /**\n * The section linked to the action - These can be 'contentTypes' | 'plugins' | 'settings' | 'internal'\n */\n section: string;\n\n /**\n * The human readable name of an action\n */\n displayName: string;\n\n /**\n * The main category of an action\n */\n category: string;\n\n /**\n * The secondary category of an action (only for settings and plugins section)\n */\n subCategory?: string;\n\n /**\n * The plugin that provides the action\n */\n pluginName?: string;\n\n /**\n * A list of subjects on which the action can be applied\n */\n subjects?: string[];\n\n /**\n * The options of an action\n */\n options: {\n /**\n * The list of properties that can be associated with an action\n */\n applyToProperties: string[] | null;\n };\n\n /**\n * An optional array of @see {@link ActionAlias}.\n *\n * It represents the possible aliases for the current action.\n *\n * Aliases are unidirectional.\n *\n * Note: This is an internal property and probably shouldn't be used outside Strapi core features.\n * Its behavior might change at any time without notice.\n *\n * @internal\n */\n aliases?: ActionAlias[];\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n * @typedef {Action, { uid: string }} CreateActionPayload\n */\nexport type CreateActionPayload = Utils.Intersect<\n [\n Utils.Object.PartialBy<\n // Action Id is computed from the uid value\n Omit<Action, 'actionId'>,\n // Options is filled with default values\n 'options'\n >,\n { uid: string },\n ]\n>;\n\n/**\n * Return the default attributes of a new {@link Action}\n * @return Partial<Action>\n */\nconst getDefaultActionAttributes = (): Partial<Action> => ({\n options: {\n applyToProperties: null,\n },\n});\n\n/**\n * Get the list of all the valid attributes of an {@link Action}\n */\nconst actionFields = [\n 'section',\n 'displayName',\n 'category',\n 'subCategory',\n 'pluginName',\n 'subjects',\n 'options',\n 'actionId',\n 'aliases',\n] as const;\n\n/**\n * Remove unwanted attributes from an {@link Action}\n */\nconst sanitizeActionAttributes = pick(actionFields) as (\n action: Action | CreateActionPayload\n) => Action;\n\n/**\n * Create and return an identifier for an {@link CreateActionPayload}.\n * The format is based on the action's source ({@link CreateActionPayload.pluginName} or 'application') and {@link CreateActionPayload.uid}.\n * @param {CreateActionPayload} attributes\n * @return {string}\n */\n// TODO: TS - Use Common.UID\nconst computeActionId = (attributes: CreateActionPayload): string => {\n const { pluginName, uid } = attributes;\n\n if (!pluginName) {\n return `api::${uid}`;\n }\n\n if (pluginName === 'admin') {\n return `admin::${uid}`;\n }\n\n return `plugin::${pluginName}.${uid}`;\n};\n\n/**\n * Assign an actionId attribute to an {@link CreateActionPayload} object\n */\nconst assignActionId = (attrs: CreateActionPayload) =>\n set('actionId', computeActionId(attrs), attrs);\n\n/**\n * Transform an action by adding or removing the {@link Action.subCategory} attribute\n * @param {Action} action - The action to process\n * @return {Action}\n */\nconst assignOrOmitSubCategory = (action: Action): Action => {\n const shouldHaveSubCategory = ['settings', 'plugins'].includes(action.section);\n\n return shouldHaveSubCategory\n ? set('subCategory', action.subCategory || 'general', action)\n : omit('subCategory', action);\n};\n\n/**\n * Check if a property can be applied to an {@link Action}\n */\nconst appliesToProperty = curry((property: string, action: Action): boolean => {\n return pipe(prop('options.applyToProperties'), includes(property))(action);\n});\n\n/**\n * Check if an action applies to a subject\n */\nconst appliesToSubject = curry((subject: string, action: Action): boolean => {\n return isArray(action.subjects) && includes(subject, action.subjects);\n});\n\n/**\n * Transform the given attributes into a domain representation of an Action\n */\nconst create: (payload: CreateActionPayload) => Action = pipe(\n // Create and assign an action identifier to the action\n // (need to be done before the sanitizeActionAttributes since we need the uid here)\n assignActionId,\n // Add or remove the sub category field based on the pluginName attribute\n assignOrOmitSubCategory,\n // Remove unwanted attributes from the payload\n sanitizeActionAttributes,\n // Complete the action creation by adding default values for some attributes\n merge(getDefaultActionAttributes())\n);\n\nexport default {\n actionFields,\n appliesToProperty,\n appliesToSubject,\n assignActionId,\n assignOrOmitSubCategory,\n create,\n computeActionId,\n getDefaultActionAttributes,\n sanitizeActionAttributes,\n};\n"],"names":["getDefaultActionAttributes","options","applyToProperties","actionFields","sanitizeActionAttributes","pick","computeActionId","attributes","pluginName","uid","assignActionId","attrs","set","assignOrOmitSubCategory","action","shouldHaveSubCategory","includes","section","subCategory","omit","appliesToProperty","curry","property","pipe","prop","appliesToSubject","subject","isArray","subjects","create","merge"],"mappings":";;AA6FA;;;IAIA,MAAMA,0BAAAA,GAA6B,KAAwB;QACzDC,OAAAA,EAAS;YACPC,iBAAAA,EAAmB;AACrB;KACF,CAAA;AAEA;;AAEC,IACD,MAAMC,YAAAA,GAAe;AACnB,IAAA,SAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,aAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;AACD,CAAA;AAED;;IAGA,MAAMC,2BAA2BC,IAAAA,CAAKF,YAAAA,CAAAA;AAItC;;;;;AAKC;AAED,MAAMG,kBAAkB,CAACC,UAAAA,GAAAA;AACvB,IAAA,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE,GAAGF,UAAAA;AAE5B,IAAA,IAAI,CAACC,UAAAA,EAAY;QACf,OAAO,CAAC,KAAK,EAAEC,GAAAA,CAAAA,CAAK;AACtB,IAAA;AAEA,IAAA,IAAID,eAAe,OAAA,EAAS;QAC1B,OAAO,CAAC,OAAO,EAAEC,GAAAA,CAAAA,CAAK;AACxB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAED,UAAAA,CAAW,CAAC,EAAEC,GAAAA,CAAAA,CAAK;AACvC,CAAA;AAEA;;AAEC,IACD,MAAMC,cAAAA,GAAiB,CAACC,QACtBC,GAAAA,CAAI,UAAA,EAAYN,gBAAgBK,KAAAA,CAAAA,EAAQA,KAAAA,CAAAA;AAE1C;;;;IAKA,MAAME,0BAA0B,CAACC,MAAAA,GAAAA;AAC/B,IAAA,MAAMC,qBAAAA,GAAwB;AAAC,QAAA,UAAA;AAAY,QAAA;KAAU,CAACC,QAAQ,CAACF,MAAAA,CAAOG,OAAO,CAAA;IAE7E,OAAOF,qBAAAA,GACHH,IAAI,aAAA,EAAeE,MAAAA,CAAOI,WAAW,IAAI,SAAA,EAAWJ,MAAAA,CAAAA,GACpDK,IAAAA,CAAK,aAAA,EAAeL,MAAAA,CAAAA;AAC1B,CAAA;AAEA;;AAEC,IACD,MAAMM,iBAAAA,GAAoBC,KAAAA,CAAM,CAACC,QAAAA,EAAkBR,MAAAA,GAAAA;AACjD,IAAA,OAAOS,IAAAA,CAAKC,IAAAA,CAAK,2BAAA,CAAA,EAA8BR,QAAAA,CAASM,QAAAA,CAAAA,CAAAA,CAAWR,MAAAA,CAAAA;AACrE,CAAA,CAAA;AAEA;;AAEC,IACD,MAAMW,gBAAAA,GAAmBJ,KAAAA,CAAM,CAACK,OAAAA,EAAiBZ,MAAAA,GAAAA;AAC/C,IAAA,OAAOa,QAAQb,MAAAA,CAAOc,QAAQ,KAAKZ,QAAAA,CAASU,OAAAA,EAASZ,OAAOc,QAAQ,CAAA;AACtE,CAAA,CAAA;AAEA;;IAGA,MAAMC,MAAAA,GAAmDN,IAAAA;AAEvD;AACAb,cAAAA;AAEAG,uBAAAA;AAEAT,wBAAAA;AAEA0B,KAAAA,CAAM9B,0BAAAA,EAAAA,CAAAA,CAAAA;AAGR,mBAAe;AACbG,IAAAA,YAAAA;AACAiB,IAAAA,iBAAAA;AACAK,IAAAA,gBAAAA;AACAf,IAAAA,cAAAA;AACAG,IAAAA,uBAAAA;AACAgB,IAAAA,MAAAA;AACAvB,IAAAA,eAAAA;AACAN,IAAAA,0BAAAA;AACAI,IAAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/action/index.ts"],"sourcesContent":["import { pick, includes, merge, get, curry, flow, omit } from 'lodash';\nimport type { Utils } from '@strapi/types';\n\nexport interface ActionAlias {\n /**\n * The action ID to alias\n */\n actionId: string;\n\n /**\n * An optional array of subject to restrict the alias usage\n */\n subjects?: string[];\n}\n\nexport type Action = {\n /**\n * The unique identifier of the action\n */\n actionId: string;\n\n /**\n * The section linked to the action - These can be 'contentTypes' | 'plugins' | 'settings' | 'internal'\n */\n section: string;\n\n /**\n * The human readable name of an action\n */\n displayName: string;\n\n /**\n * The main category of an action\n */\n category: string;\n\n /**\n * The secondary category of an action (only for settings and plugins section)\n */\n subCategory?: string;\n\n /**\n * The plugin that provides the action\n */\n pluginName?: string;\n\n /**\n * A list of subjects on which the action can be applied\n */\n subjects?: string[];\n\n /**\n * The options of an action\n */\n options: {\n /**\n * The list of properties that can be associated with an action\n */\n applyToProperties: string[] | null;\n };\n\n /**\n * An optional array of @see {@link ActionAlias}.\n *\n * It represents the possible aliases for the current action.\n *\n * Aliases are unidirectional.\n *\n * Note: This is an internal property and probably shouldn't be used outside Strapi core features.\n * Its behavior might change at any time without notice.\n *\n * @internal\n */\n aliases?: ActionAlias[];\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n * @typedef {Action, { uid: string }} CreateActionPayload\n */\nexport type CreateActionPayload = Utils.Intersect<\n [\n Utils.Object.PartialBy<\n // Action Id is computed from the uid value\n Omit<Action, 'actionId'>,\n // Options is filled with default values\n 'options'\n >,\n { uid: string },\n ]\n>;\n\n/**\n * Return the default attributes of a new {@link Action}\n * @return Partial<Action>\n */\nconst getDefaultActionAttributes = (): Partial<Action> => ({\n options: {\n applyToProperties: null,\n },\n});\n\n/**\n * Get the list of all the valid attributes of an {@link Action}\n */\nconst actionFields = [\n 'section',\n 'displayName',\n 'category',\n 'subCategory',\n 'pluginName',\n 'subjects',\n 'options',\n 'actionId',\n 'aliases',\n] as const;\n\n/**\n * Remove unwanted attributes from an {@link Action}\n */\nconst sanitizeActionAttributes = (action: Action | CreateActionPayload): Action =>\n pick(action, actionFields) as Action;\n\n/**\n * Create and return an identifier for an {@link CreateActionPayload}.\n * The format is based on the action's source ({@link CreateActionPayload.pluginName} or 'application') and {@link CreateActionPayload.uid}.\n * @param {CreateActionPayload} attributes\n * @return {string}\n */\n// TODO: TS - Use Common.UID\nconst computeActionId = (attributes: CreateActionPayload): string => {\n const { pluginName, uid } = attributes;\n\n if (!pluginName) {\n return `api::${uid}`;\n }\n\n if (pluginName === 'admin') {\n return `admin::${uid}`;\n }\n\n return `plugin::${pluginName}.${uid}`;\n};\n\n/**\n * Assign an actionId attribute to an {@link CreateActionPayload} object\n */\nconst assignActionId = (attrs: CreateActionPayload) => ({\n ...attrs,\n actionId: computeActionId(attrs),\n});\n\n/**\n * Transform an action by adding or removing the {@link Action.subCategory} attribute\n * @param {Action} action - The action to process\n * @return {Action}\n */\nconst assignOrOmitSubCategory = (action: Action): Action => {\n const shouldHaveSubCategory = ['settings', 'plugins'].includes(action.section);\n\n return shouldHaveSubCategory\n ? { ...action, subCategory: action.subCategory || 'general' }\n : omit(action, 'subCategory');\n};\n\n/**\n * Check if a property can be applied to an {@link Action}\n */\nconst appliesToProperty = curry((property: string, action: Action): boolean => {\n return includes(get(action, 'options.applyToProperties'), property);\n});\n\n/**\n * Check if an action applies to a subject\n */\nconst appliesToSubject = curry((subject: string, action: Action): boolean => {\n return Array.isArray(action.subjects) && action.subjects.includes(subject);\n});\n\n/**\n * Transform the given attributes into a domain representation of an Action\n */\nconst create: (payload: CreateActionPayload) => Action = flow(\n // Assign the action identifier before sanitization removes the uid.\n assignActionId,\n assignOrOmitSubCategory,\n sanitizeActionAttributes,\n (action) => merge({}, getDefaultActionAttributes(), action)\n);\n\nexport default {\n actionFields,\n appliesToProperty,\n appliesToSubject,\n assignActionId,\n assignOrOmitSubCategory,\n create,\n computeActionId,\n getDefaultActionAttributes,\n sanitizeActionAttributes,\n};\n"],"names":["getDefaultActionAttributes","options","applyToProperties","actionFields","sanitizeActionAttributes","action","pick","computeActionId","attributes","pluginName","uid","assignActionId","attrs","actionId","assignOrOmitSubCategory","shouldHaveSubCategory","includes","section","subCategory","omit","appliesToProperty","curry","property","get","appliesToSubject","subject","Array","isArray","subjects","create","flow","merge"],"mappings":";;AA4FA;;;IAIA,MAAMA,0BAAAA,GAA6B,KAAwB;QACzDC,OAAAA,EAAS;YACPC,iBAAAA,EAAmB;AACrB;KACF,CAAA;AAEA;;AAEC,IACD,MAAMC,YAAAA,GAAe;AACnB,IAAA,SAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,aAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;AACD,CAAA;AAED;;AAEC,IACD,MAAMC,wBAAAA,GAA2B,CAACC,MAAAA,GAChCC,KAAKD,MAAAA,EAAQF,YAAAA,CAAAA;AAEf;;;;;AAKC;AAED,MAAMI,kBAAkB,CAACC,UAAAA,GAAAA;AACvB,IAAA,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE,GAAGF,UAAAA;AAE5B,IAAA,IAAI,CAACC,UAAAA,EAAY;QACf,OAAO,CAAC,KAAK,EAAEC,GAAAA,CAAAA,CAAK;AACtB,IAAA;AAEA,IAAA,IAAID,eAAe,OAAA,EAAS;QAC1B,OAAO,CAAC,OAAO,EAAEC,GAAAA,CAAAA,CAAK;AACxB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAED,UAAAA,CAAW,CAAC,EAAEC,GAAAA,CAAAA,CAAK;AACvC,CAAA;AAEA;;AAEC,IACD,MAAMC,cAAAA,GAAiB,CAACC,KAAAA,IAAgC;AACtD,QAAA,GAAGA,KAAK;AACRC,QAAAA,QAAAA,EAAUN,eAAAA,CAAgBK,KAAAA;KAC5B,CAAA;AAEA;;;;IAKA,MAAME,0BAA0B,CAACT,MAAAA,GAAAA;AAC/B,IAAA,MAAMU,qBAAAA,GAAwB;AAAC,QAAA,UAAA;AAAY,QAAA;KAAU,CAACC,QAAQ,CAACX,MAAAA,CAAOY,OAAO,CAAA;AAE7E,IAAA,OAAOF,qBAAAA,GACH;AAAE,QAAA,GAAGV,MAAM;QAAEa,WAAAA,EAAab,MAAAA,CAAOa,WAAW,IAAI;AAAU,KAAA,GAC1DC,KAAKd,MAAAA,EAAQ,aAAA,CAAA;AACnB,CAAA;AAEA;;AAEC,IACD,MAAMe,iBAAAA,GAAoBC,KAAAA,CAAM,CAACC,QAAAA,EAAkBjB,MAAAA,GAAAA;IACjD,OAAOW,QAAAA,CAASO,GAAAA,CAAIlB,MAAAA,EAAQ,2BAAA,CAAA,EAA8BiB,QAAAA,CAAAA;AAC5D,CAAA,CAAA;AAEA;;AAEC,IACD,MAAME,gBAAAA,GAAmBH,KAAAA,CAAM,CAACI,OAAAA,EAAiBpB,MAAAA,GAAAA;IAC/C,OAAOqB,KAAAA,CAAMC,OAAO,CAACtB,MAAAA,CAAOuB,QAAQ,KAAKvB,MAAAA,CAAOuB,QAAQ,CAACZ,QAAQ,CAACS,OAAAA,CAAAA;AACpE,CAAA,CAAA;AAEA;;IAGA,MAAMI,MAAAA,GAAmDC,IAAAA;AAEvDnB,cAAAA,EACAG,yBACAV,wBAAAA,EACA,CAACC,SAAW0B,KAAAA,CAAM,IAAI/B,0BAAAA,EAAAA,EAA8BK,MAAAA,CAAAA,CAAAA;AAGtD,aAAe;AACbF,IAAAA,YAAAA;AACAiB,IAAAA,iBAAAA;AACAI,IAAAA,gBAAAA;AACAb,IAAAA,cAAAA;AACAG,IAAAA,uBAAAA;AACAe,IAAAA,MAAAA;AACAtB,IAAAA,eAAAA;AACAP,IAAAA,0BAAAA;AACAI,IAAAA;AACF,CAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { errors, providerFactory, hooks } from '@strapi/utils';
2
2
  import { validateRegisterProviderAction } from '../../validation/action-provider.mjs';
3
- import actionDomain from './index.mjs';
3
+ import domain from './index.mjs';
4
4
 
5
5
  const { ApplicationError } = errors;
6
6
  /**
@@ -23,7 +23,7 @@ const { ApplicationError } = errors;
23
23
  validateRegisterProviderAction([
24
24
  actionAttributes
25
25
  ]);
26
- const action = actionDomain.create(actionAttributes);
26
+ const action = domain.create(actionAttributes);
27
27
  return provider.register(action.actionId, action);
28
28
  },
29
29
  async registerMany (actionsAttributes) {
@@ -38,7 +38,7 @@ const { ApplicationError } = errors;
38
38
  if (!action) {
39
39
  throw new ApplicationError(`No action found with id "${actionId}"`);
40
40
  }
41
- const appliesToAction = actionDomain.appliesToProperty(property, action);
41
+ const appliesToAction = domain.appliesToProperty(property, action);
42
42
  // If the property isn't valid for this action, ignore the rest of the checks
43
43
  if (!appliesToAction) {
44
44
  return false;
@@ -48,7 +48,7 @@ const { ApplicationError } = errors;
48
48
  return true;
49
49
  }
50
50
  // If the property is valid for this action and the subject is not handled by the action
51
- if (!actionDomain.appliesToSubject(subject, action)) {
51
+ if (!domain.appliesToSubject(subject, action)) {
52
52
  return false;
53
53
  }
54
54
  const results = await actionHooks.appliesPropertyToSubject.call({
@@ -1 +1 @@
1
- {"version":3,"file":"provider.mjs","sources":["../../../../../../server/src/domain/action/provider.ts"],"sourcesContent":["import { providerFactory, hooks, errors } from '@strapi/utils';\nimport { validateRegisterProviderAction } from '../../validation/action-provider';\n\nimport domain from './index';\nimport type { Action, CreateActionPayload } from './index';\nimport type { Permission } from '../../../../shared/contracts/shared';\n\ntype Options = Parameters<typeof providerFactory>['0'];\n\nconst { ApplicationError } = errors;\n\n/**\n * Creates a new instance of an action provider\n */\nconst createActionProvider = (options?: Options) => {\n const provider = providerFactory<Action>(options);\n const actionHooks = {\n appliesPropertyToSubject: hooks.createAsyncParallelHook(),\n };\n\n return {\n ...provider,\n\n hooks: {\n ...provider.hooks,\n ...actionHooks,\n },\n\n async register(actionAttributes: CreateActionPayload) {\n if (strapi.isLoaded) {\n throw new Error(`You can't register new actions outside of the bootstrap function.`);\n }\n\n validateRegisterProviderAction([actionAttributes]);\n\n const action = domain.create(actionAttributes);\n\n return provider.register(action.actionId, action);\n },\n\n async registerMany(actionsAttributes: CreateActionPayload[]) {\n validateRegisterProviderAction(actionsAttributes);\n\n for (const attributes of actionsAttributes) {\n await this.register(attributes);\n }\n\n return this;\n },\n\n async appliesToProperty(property: string, actionId: string, subject: Permission['subject']) {\n const action = provider.get(actionId) as Action | undefined;\n if (!action) {\n throw new ApplicationError(`No action found with id \"${actionId}\"`);\n }\n\n const appliesToAction = domain.appliesToProperty(property, action);\n\n // If the property isn't valid for this action, ignore the rest of the checks\n if (!appliesToAction) {\n return false;\n }\n\n // If the property is valid for this action and there isn't any subject\n if (!subject) {\n return true;\n }\n\n // If the property is valid for this action and the subject is not handled by the action\n if (!domain.appliesToSubject(subject, action)) {\n return false;\n }\n\n const results = await actionHooks.appliesPropertyToSubject.call({\n property,\n action,\n subject,\n });\n\n return results.every((result) => result !== false);\n },\n\n /**\n * @experimental\n */\n unstable_aliases(actionId: string, subject?: string | null): string[] {\n const isRegistered = this.has(actionId);\n\n if (!isRegistered) {\n return [];\n }\n\n return this.values()\n .filter((action) =>\n action.aliases?.some((alias) => {\n // Only look at alias with the correct actionId\n if (alias.actionId !== actionId) {\n return false;\n }\n\n // If the alias don't have a list of required subjects, keep it\n if (!Array.isArray(alias.subjects)) {\n return true;\n }\n\n // If the alias require specific subjects but none is provided, skip it\n if (!subject) {\n return false;\n }\n\n // Else, make sure the given subject is allowed\n return alias.subjects.includes(subject);\n })\n )\n .map((action) => action.actionId);\n },\n };\n};\n\nexport default createActionProvider;\n"],"names":["ApplicationError","errors","createActionProvider","options","provider","providerFactory","actionHooks","appliesPropertyToSubject","hooks","createAsyncParallelHook","register","actionAttributes","strapi","isLoaded","Error","validateRegisterProviderAction","action","domain","create","actionId","registerMany","actionsAttributes","attributes","appliesToProperty","property","subject","get","appliesToAction","appliesToSubject","results","call","every","result","unstable_aliases","isRegistered","has","values","filter","aliases","some","alias","Array","isArray","subjects","includes","map"],"mappings":"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"}
1
+ {"version":3,"file":"provider.mjs","sources":["../../../../../../server/src/domain/action/provider.ts"],"sourcesContent":["import { providerFactory, hooks, errors } from '@strapi/utils';\nimport { validateRegisterProviderAction } from '../../validation/action-provider';\n\nimport domain from './index';\nimport type { Action, CreateActionPayload } from './index';\nimport type { Permission } from '../../../../shared/contracts/shared';\n\ntype Options = Parameters<typeof providerFactory>['0'];\n\nconst { ApplicationError } = errors;\n\n/**\n * Creates a new instance of an action provider\n */\nconst createActionProvider = (options?: Options) => {\n const provider = providerFactory<Action>(options);\n const actionHooks = {\n appliesPropertyToSubject: hooks.createAsyncParallelHook(),\n };\n\n return {\n ...provider,\n\n hooks: {\n ...provider.hooks,\n ...actionHooks,\n },\n\n async register(actionAttributes: CreateActionPayload) {\n if (strapi.isLoaded) {\n throw new Error(`You can't register new actions outside of the bootstrap function.`);\n }\n\n validateRegisterProviderAction([actionAttributes]);\n\n const action = domain.create(actionAttributes);\n\n return provider.register(action.actionId, action);\n },\n\n async registerMany(actionsAttributes: CreateActionPayload[]) {\n validateRegisterProviderAction(actionsAttributes);\n\n for (const attributes of actionsAttributes) {\n await this.register(attributes);\n }\n\n return this;\n },\n\n async appliesToProperty(property: string, actionId: string, subject: Permission['subject']) {\n const action = provider.get(actionId) as Action | undefined;\n if (!action) {\n throw new ApplicationError(`No action found with id \"${actionId}\"`);\n }\n\n const appliesToAction = domain.appliesToProperty(property, action);\n\n // If the property isn't valid for this action, ignore the rest of the checks\n if (!appliesToAction) {\n return false;\n }\n\n // If the property is valid for this action and there isn't any subject\n if (!subject) {\n return true;\n }\n\n // If the property is valid for this action and the subject is not handled by the action\n if (!domain.appliesToSubject(subject, action)) {\n return false;\n }\n\n const results = await actionHooks.appliesPropertyToSubject.call({\n property,\n action,\n subject,\n });\n\n return results.every((result) => result !== false);\n },\n\n /**\n * @experimental\n */\n unstable_aliases(actionId: string, subject?: string | null): string[] {\n const isRegistered = this.has(actionId);\n\n if (!isRegistered) {\n return [];\n }\n\n return this.values()\n .filter((action) =>\n action.aliases?.some((alias) => {\n // Only look at alias with the correct actionId\n if (alias.actionId !== actionId) {\n return false;\n }\n\n // If the alias don't have a list of required subjects, keep it\n if (!Array.isArray(alias.subjects)) {\n return true;\n }\n\n // If the alias require specific subjects but none is provided, skip it\n if (!subject) {\n return false;\n }\n\n // Else, make sure the given subject is allowed\n return alias.subjects.includes(subject);\n })\n )\n .map((action) => action.actionId);\n },\n };\n};\n\nexport default createActionProvider;\n"],"names":["ApplicationError","errors","createActionProvider","options","provider","providerFactory","actionHooks","appliesPropertyToSubject","hooks","createAsyncParallelHook","register","actionAttributes","strapi","isLoaded","Error","validateRegisterProviderAction","action","domain","create","actionId","registerMany","actionsAttributes","attributes","appliesToProperty","property","subject","get","appliesToAction","appliesToSubject","results","call","every","result","unstable_aliases","isRegistered","has","values","filter","aliases","some","alias","Array","isArray","subjects","includes","map"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var fp = require('lodash/fp');
5
+ var _ = require('lodash');
6
6
 
7
7
  const DEFAULT_CATEGORY = 'default';
8
8
  /**
@@ -23,7 +23,7 @@ const DEFAULT_CATEGORY = 'default';
23
23
  ];
24
24
  /**
25
25
  * Remove unwanted attributes from a {@link Condition}
26
- */ const sanitizeConditionAttributes = fp.pick(conditionFields);
26
+ */ const sanitizeConditionAttributes = (condition)=>_.pick(condition, conditionFields);
27
27
  const computeConditionId = (condition)=>{
28
28
  const { name, plugin } = condition;
29
29
  if (!plugin) {
@@ -38,13 +38,16 @@ const computeConditionId = (condition)=>{
38
38
  * Assign an id attribute to a {@link CreateConditionPayload} object
39
39
  * @param attrs - Payload used to create a condition
40
40
  */ const assignConditionId = (attrs)=>{
41
- const condition = fp.set('id', computeConditionId(attrs), attrs);
41
+ const condition = {
42
+ ...attrs,
43
+ id: computeConditionId(attrs)
44
+ };
42
45
  return condition;
43
46
  };
44
47
  /**
45
48
  * Transform the given attributes into a domain representation of a Condition
46
49
  * @param payload - The condition payload containing the attributes needed to create a {@link Condition}
47
- */ const create = fp.pipe(assignConditionId, sanitizeConditionAttributes, fp.merge(getDefaultConditionAttributes()));
50
+ */ const create = _.flow(assignConditionId, sanitizeConditionAttributes, (condition)=>_.merge({}, getDefaultConditionAttributes(), condition));
48
51
  var domain = {
49
52
  assignConditionId,
50
53
  computeConditionId,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/condition/index.ts"],"sourcesContent":["import { pipe, merge, set, pick } from 'lodash/fp';\n\nexport type Condition = {\n id: string;\n displayName: string;\n name: string;\n plugin?: string;\n category?: string;\n /**\n * The handler of a {@link Condition}\n */\n handler: (user: object, options: object) => object | boolean;\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n */\nexport type CreateConditionPayload = Omit<Condition, 'id'>;\n\nconst DEFAULT_CATEGORY = 'default';\n\n/**\n * Get the default value used for every condition\n * @return {Condition}\n */\nexport const getDefaultConditionAttributes = () => ({\n category: DEFAULT_CATEGORY,\n});\n\n/**\n * Get the list of all the valid attributes of a {@link Condition}\n * @return {string[]}\n */\nexport const conditionFields = ['id', 'displayName', 'handler', 'plugin', 'category'] as const;\n\n/**\n * Remove unwanted attributes from a {@link Condition}\n */\nexport const sanitizeConditionAttributes = pick(conditionFields);\n\nexport const computeConditionId = (condition: CreateConditionPayload) => {\n const { name, plugin } = condition;\n\n if (!plugin) {\n return `api::${name}`;\n }\n\n if (plugin === 'admin') {\n return `admin::${name}`;\n }\n\n return `plugin::${plugin}.${name}`;\n};\n\n/**\n * Assign an id attribute to a {@link CreateConditionPayload} object\n * @param attrs - Payload used to create a condition\n */\nexport const assignConditionId = (attrs: CreateConditionPayload): Condition => {\n const condition = set('id', computeConditionId(attrs), attrs) as CreateConditionPayload & {\n id: string;\n };\n return condition;\n};\n\n/**\n * Transform the given attributes into a domain representation of a Condition\n * @param payload - The condition payload containing the attributes needed to create a {@link Condition}\n */\nexport const create = pipe(\n assignConditionId,\n sanitizeConditionAttributes,\n merge(getDefaultConditionAttributes())\n) as (payload: CreateConditionPayload) => Condition;\n\nexport default {\n assignConditionId,\n computeConditionId,\n conditionFields,\n create,\n getDefaultConditionAttributes,\n sanitizeConditionAttributes,\n};\n"],"names":["DEFAULT_CATEGORY","getDefaultConditionAttributes","category","conditionFields","sanitizeConditionAttributes","pick","computeConditionId","condition","name","plugin","assignConditionId","attrs","set","create","pipe","merge"],"mappings":";;;;;;AAmBA,MAAMA,gBAAAA,GAAmB,SAAA;AAEzB;;;AAGC,IACM,MAAMC,6BAAAA,GAAgC,KAAO;QAClDC,QAAAA,EAAUF;AACZ,KAAA;AAEA;;;UAIaG,eAAAA,GAAkB;AAAC,IAAA,IAAA;AAAM,IAAA,aAAA;AAAe,IAAA,SAAA;AAAW,IAAA,QAAA;AAAU,IAAA;;AAE1E;;AAEC,IACM,MAAMC,2BAAAA,GAA8BC,OAAAA,CAAKF,eAAAA;AAEzC,MAAMG,qBAAqB,CAACC,SAAAA,GAAAA;AACjC,IAAA,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAE,GAAGF,SAAAA;AAEzB,IAAA,IAAI,CAACE,MAAAA,EAAQ;QACX,OAAO,CAAC,KAAK,EAAED,IAAAA,CAAAA,CAAM;AACvB,IAAA;AAEA,IAAA,IAAIC,WAAW,OAAA,EAAS;QACtB,OAAO,CAAC,OAAO,EAAED,IAAAA,CAAAA,CAAM;AACzB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAEC,MAAAA,CAAO,CAAC,EAAED,IAAAA,CAAAA,CAAM;AACpC;AAEA;;;IAIO,MAAME,iBAAAA,GAAoB,CAACC,KAAAA,GAAAA;AAChC,IAAA,MAAMJ,SAAAA,GAAYK,MAAAA,CAAI,IAAA,EAAMN,kBAAAA,CAAmBK,KAAAA,CAAAA,EAAQA,KAAAA,CAAAA;IAGvD,OAAOJ,SAAAA;AACT;AAEA;;;AAGC,IACM,MAAMM,MAAAA,GAASC,QACpBJ,iBAAAA,EACAN,2BAAAA,EACAW,SAAMd,6BAAAA,EAAAA,CAAAA;AAGR,aAAe;AACbS,IAAAA,iBAAAA;AACAJ,IAAAA,kBAAAA;AACAH,IAAAA,eAAAA;AACAU,IAAAA,MAAAA;AACAZ,IAAAA,6BAAAA;AACAG,IAAAA;AACF,CAAA;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/condition/index.ts"],"sourcesContent":["import { pick, merge, flow } from 'lodash';\n\nexport type Condition = {\n id: string;\n displayName: string;\n name: string;\n plugin?: string;\n category?: string;\n /**\n * The handler of a {@link Condition}\n */\n handler: (user: object, options: object) => object | boolean;\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n */\nexport type CreateConditionPayload = Omit<Condition, 'id'>;\n\nconst DEFAULT_CATEGORY = 'default';\n\n/**\n * Get the default value used for every condition\n * @return {Condition}\n */\nexport const getDefaultConditionAttributes = () => ({\n category: DEFAULT_CATEGORY,\n});\n\n/**\n * Get the list of all the valid attributes of a {@link Condition}\n * @return {string[]}\n */\nexport const conditionFields = ['id', 'displayName', 'handler', 'plugin', 'category'] as const;\n\n/**\n * Remove unwanted attributes from a {@link Condition}\n */\nexport const sanitizeConditionAttributes = (condition: Partial<Condition>) =>\n pick(condition, conditionFields);\n\nexport const computeConditionId = (condition: CreateConditionPayload) => {\n const { name, plugin } = condition;\n\n if (!plugin) {\n return `api::${name}`;\n }\n\n if (plugin === 'admin') {\n return `admin::${name}`;\n }\n\n return `plugin::${plugin}.${name}`;\n};\n\n/**\n * Assign an id attribute to a {@link CreateConditionPayload} object\n * @param attrs - Payload used to create a condition\n */\nexport const assignConditionId = (attrs: CreateConditionPayload): Condition => {\n const condition = { ...attrs, id: computeConditionId(attrs) } as CreateConditionPayload & {\n id: string;\n };\n return condition;\n};\n\n/**\n * Transform the given attributes into a domain representation of a Condition\n * @param payload - The condition payload containing the attributes needed to create a {@link Condition}\n */\nexport const create = flow(assignConditionId, sanitizeConditionAttributes, (condition) =>\n merge({}, getDefaultConditionAttributes(), condition)\n) as (payload: CreateConditionPayload) => Condition;\n\nexport default {\n assignConditionId,\n computeConditionId,\n conditionFields,\n create,\n getDefaultConditionAttributes,\n sanitizeConditionAttributes,\n};\n"],"names":["DEFAULT_CATEGORY","getDefaultConditionAttributes","category","conditionFields","sanitizeConditionAttributes","condition","pick","computeConditionId","name","plugin","assignConditionId","attrs","id","create","flow","merge"],"mappings":";;;;;;AAmBA,MAAMA,gBAAAA,GAAmB,SAAA;AAEzB;;;AAGC,IACM,MAAMC,6BAAAA,GAAgC,KAAO;QAClDC,QAAAA,EAAUF;AACZ,KAAA;AAEA;;;UAIaG,eAAAA,GAAkB;AAAC,IAAA,IAAA;AAAM,IAAA,aAAA;AAAe,IAAA,SAAA;AAAW,IAAA,QAAA;AAAU,IAAA;;AAE1E;;AAEC,IACM,MAAMC,2BAAAA,GAA8B,CAACC,SAAAA,GAC1CC,MAAAA,CAAKD,WAAWF,eAAAA;AAEX,MAAMI,qBAAqB,CAACF,SAAAA,GAAAA;AACjC,IAAA,MAAM,EAAEG,IAAI,EAAEC,MAAM,EAAE,GAAGJ,SAAAA;AAEzB,IAAA,IAAI,CAACI,MAAAA,EAAQ;QACX,OAAO,CAAC,KAAK,EAAED,IAAAA,CAAAA,CAAM;AACvB,IAAA;AAEA,IAAA,IAAIC,WAAW,OAAA,EAAS;QACtB,OAAO,CAAC,OAAO,EAAED,IAAAA,CAAAA,CAAM;AACzB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAEC,MAAAA,CAAO,CAAC,EAAED,IAAAA,CAAAA,CAAM;AACpC;AAEA;;;IAIO,MAAME,iBAAAA,GAAoB,CAACC,KAAAA,GAAAA;AAChC,IAAA,MAAMN,SAAAA,GAAY;AAAE,QAAA,GAAGM,KAAK;AAAEC,QAAAA,EAAAA,EAAIL,kBAAAA,CAAmBI,KAAAA;AAAO,KAAA;IAG5D,OAAON,SAAAA;AACT;AAEA;;;AAGC,IACM,MAAMQ,MAAAA,GAASC,MAAAA,CAAKJ,iBAAAA,EAAmBN,2BAAAA,EAA6B,CAACC,SAAAA,GAC1EU,OAAAA,CAAM,EAAC,EAAGd,6BAAAA,EAAAA,EAAiCI,SAAAA,CAAAA;AAG7C,aAAe;AACbK,IAAAA,iBAAAA;AACAH,IAAAA,kBAAAA;AACAJ,IAAAA,eAAAA;AACAU,IAAAA,MAAAA;AACAZ,IAAAA,6BAAAA;AACAG,IAAAA;AACF,CAAA;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { pick, pipe, merge, set } from 'lodash/fp';
1
+ import { flow, merge, pick } from 'lodash';
2
2
 
3
3
  const DEFAULT_CATEGORY = 'default';
4
4
  /**
@@ -19,7 +19,7 @@ const DEFAULT_CATEGORY = 'default';
19
19
  ];
20
20
  /**
21
21
  * Remove unwanted attributes from a {@link Condition}
22
- */ const sanitizeConditionAttributes = pick(conditionFields);
22
+ */ const sanitizeConditionAttributes = (condition)=>pick(condition, conditionFields);
23
23
  const computeConditionId = (condition)=>{
24
24
  const { name, plugin } = condition;
25
25
  if (!plugin) {
@@ -34,13 +34,16 @@ const computeConditionId = (condition)=>{
34
34
  * Assign an id attribute to a {@link CreateConditionPayload} object
35
35
  * @param attrs - Payload used to create a condition
36
36
  */ const assignConditionId = (attrs)=>{
37
- const condition = set('id', computeConditionId(attrs), attrs);
37
+ const condition = {
38
+ ...attrs,
39
+ id: computeConditionId(attrs)
40
+ };
38
41
  return condition;
39
42
  };
40
43
  /**
41
44
  * Transform the given attributes into a domain representation of a Condition
42
45
  * @param payload - The condition payload containing the attributes needed to create a {@link Condition}
43
- */ const create = pipe(assignConditionId, sanitizeConditionAttributes, merge(getDefaultConditionAttributes()));
46
+ */ const create = flow(assignConditionId, sanitizeConditionAttributes, (condition)=>merge({}, getDefaultConditionAttributes(), condition));
44
47
  var domain = {
45
48
  assignConditionId,
46
49
  computeConditionId,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/condition/index.ts"],"sourcesContent":["import { pipe, merge, set, pick } from 'lodash/fp';\n\nexport type Condition = {\n id: string;\n displayName: string;\n name: string;\n plugin?: string;\n category?: string;\n /**\n * The handler of a {@link Condition}\n */\n handler: (user: object, options: object) => object | boolean;\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n */\nexport type CreateConditionPayload = Omit<Condition, 'id'>;\n\nconst DEFAULT_CATEGORY = 'default';\n\n/**\n * Get the default value used for every condition\n * @return {Condition}\n */\nexport const getDefaultConditionAttributes = () => ({\n category: DEFAULT_CATEGORY,\n});\n\n/**\n * Get the list of all the valid attributes of a {@link Condition}\n * @return {string[]}\n */\nexport const conditionFields = ['id', 'displayName', 'handler', 'plugin', 'category'] as const;\n\n/**\n * Remove unwanted attributes from a {@link Condition}\n */\nexport const sanitizeConditionAttributes = pick(conditionFields);\n\nexport const computeConditionId = (condition: CreateConditionPayload) => {\n const { name, plugin } = condition;\n\n if (!plugin) {\n return `api::${name}`;\n }\n\n if (plugin === 'admin') {\n return `admin::${name}`;\n }\n\n return `plugin::${plugin}.${name}`;\n};\n\n/**\n * Assign an id attribute to a {@link CreateConditionPayload} object\n * @param attrs - Payload used to create a condition\n */\nexport const assignConditionId = (attrs: CreateConditionPayload): Condition => {\n const condition = set('id', computeConditionId(attrs), attrs) as CreateConditionPayload & {\n id: string;\n };\n return condition;\n};\n\n/**\n * Transform the given attributes into a domain representation of a Condition\n * @param payload - The condition payload containing the attributes needed to create a {@link Condition}\n */\nexport const create = pipe(\n assignConditionId,\n sanitizeConditionAttributes,\n merge(getDefaultConditionAttributes())\n) as (payload: CreateConditionPayload) => Condition;\n\nexport default {\n assignConditionId,\n computeConditionId,\n conditionFields,\n create,\n getDefaultConditionAttributes,\n sanitizeConditionAttributes,\n};\n"],"names":["DEFAULT_CATEGORY","getDefaultConditionAttributes","category","conditionFields","sanitizeConditionAttributes","pick","computeConditionId","condition","name","plugin","assignConditionId","attrs","set","create","pipe","merge"],"mappings":";;AAmBA,MAAMA,gBAAAA,GAAmB,SAAA;AAEzB;;;AAGC,IACM,MAAMC,6BAAAA,GAAgC,KAAO;QAClDC,QAAAA,EAAUF;AACZ,KAAA;AAEA;;;UAIaG,eAAAA,GAAkB;AAAC,IAAA,IAAA;AAAM,IAAA,aAAA;AAAe,IAAA,SAAA;AAAW,IAAA,QAAA;AAAU,IAAA;;AAE1E;;AAEC,IACM,MAAMC,2BAAAA,GAA8BC,IAAAA,CAAKF,eAAAA;AAEzC,MAAMG,qBAAqB,CAACC,SAAAA,GAAAA;AACjC,IAAA,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAE,GAAGF,SAAAA;AAEzB,IAAA,IAAI,CAACE,MAAAA,EAAQ;QACX,OAAO,CAAC,KAAK,EAAED,IAAAA,CAAAA,CAAM;AACvB,IAAA;AAEA,IAAA,IAAIC,WAAW,OAAA,EAAS;QACtB,OAAO,CAAC,OAAO,EAAED,IAAAA,CAAAA,CAAM;AACzB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAEC,MAAAA,CAAO,CAAC,EAAED,IAAAA,CAAAA,CAAM;AACpC;AAEA;;;IAIO,MAAME,iBAAAA,GAAoB,CAACC,KAAAA,GAAAA;AAChC,IAAA,MAAMJ,SAAAA,GAAYK,GAAAA,CAAI,IAAA,EAAMN,kBAAAA,CAAmBK,KAAAA,CAAAA,EAAQA,KAAAA,CAAAA;IAGvD,OAAOJ,SAAAA;AACT;AAEA;;;AAGC,IACM,MAAMM,MAAAA,GAASC,KACpBJ,iBAAAA,EACAN,2BAAAA,EACAW,MAAMd,6BAAAA,EAAAA,CAAAA;AAGR,aAAe;AACbS,IAAAA,iBAAAA;AACAJ,IAAAA,kBAAAA;AACAH,IAAAA,eAAAA;AACAU,IAAAA,MAAAA;AACAZ,IAAAA,6BAAAA;AACAG,IAAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/condition/index.ts"],"sourcesContent":["import { pick, merge, flow } from 'lodash';\n\nexport type Condition = {\n id: string;\n displayName: string;\n name: string;\n plugin?: string;\n category?: string;\n /**\n * The handler of a {@link Condition}\n */\n handler: (user: object, options: object) => object | boolean;\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n */\nexport type CreateConditionPayload = Omit<Condition, 'id'>;\n\nconst DEFAULT_CATEGORY = 'default';\n\n/**\n * Get the default value used for every condition\n * @return {Condition}\n */\nexport const getDefaultConditionAttributes = () => ({\n category: DEFAULT_CATEGORY,\n});\n\n/**\n * Get the list of all the valid attributes of a {@link Condition}\n * @return {string[]}\n */\nexport const conditionFields = ['id', 'displayName', 'handler', 'plugin', 'category'] as const;\n\n/**\n * Remove unwanted attributes from a {@link Condition}\n */\nexport const sanitizeConditionAttributes = (condition: Partial<Condition>) =>\n pick(condition, conditionFields);\n\nexport const computeConditionId = (condition: CreateConditionPayload) => {\n const { name, plugin } = condition;\n\n if (!plugin) {\n return `api::${name}`;\n }\n\n if (plugin === 'admin') {\n return `admin::${name}`;\n }\n\n return `plugin::${plugin}.${name}`;\n};\n\n/**\n * Assign an id attribute to a {@link CreateConditionPayload} object\n * @param attrs - Payload used to create a condition\n */\nexport const assignConditionId = (attrs: CreateConditionPayload): Condition => {\n const condition = { ...attrs, id: computeConditionId(attrs) } as CreateConditionPayload & {\n id: string;\n };\n return condition;\n};\n\n/**\n * Transform the given attributes into a domain representation of a Condition\n * @param payload - The condition payload containing the attributes needed to create a {@link Condition}\n */\nexport const create = flow(assignConditionId, sanitizeConditionAttributes, (condition) =>\n merge({}, getDefaultConditionAttributes(), condition)\n) as (payload: CreateConditionPayload) => Condition;\n\nexport default {\n assignConditionId,\n computeConditionId,\n conditionFields,\n create,\n getDefaultConditionAttributes,\n sanitizeConditionAttributes,\n};\n"],"names":["DEFAULT_CATEGORY","getDefaultConditionAttributes","category","conditionFields","sanitizeConditionAttributes","condition","pick","computeConditionId","name","plugin","assignConditionId","attrs","id","create","flow","merge"],"mappings":";;AAmBA,MAAMA,gBAAAA,GAAmB,SAAA;AAEzB;;;AAGC,IACM,MAAMC,6BAAAA,GAAgC,KAAO;QAClDC,QAAAA,EAAUF;AACZ,KAAA;AAEA;;;UAIaG,eAAAA,GAAkB;AAAC,IAAA,IAAA;AAAM,IAAA,aAAA;AAAe,IAAA,SAAA;AAAW,IAAA,QAAA;AAAU,IAAA;;AAE1E;;AAEC,IACM,MAAMC,2BAAAA,GAA8B,CAACC,SAAAA,GAC1CC,IAAAA,CAAKD,WAAWF,eAAAA;AAEX,MAAMI,qBAAqB,CAACF,SAAAA,GAAAA;AACjC,IAAA,MAAM,EAAEG,IAAI,EAAEC,MAAM,EAAE,GAAGJ,SAAAA;AAEzB,IAAA,IAAI,CAACI,MAAAA,EAAQ;QACX,OAAO,CAAC,KAAK,EAAED,IAAAA,CAAAA,CAAM;AACvB,IAAA;AAEA,IAAA,IAAIC,WAAW,OAAA,EAAS;QACtB,OAAO,CAAC,OAAO,EAAED,IAAAA,CAAAA,CAAM;AACzB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAEC,MAAAA,CAAO,CAAC,EAAED,IAAAA,CAAAA,CAAM;AACpC;AAEA;;;IAIO,MAAME,iBAAAA,GAAoB,CAACC,KAAAA,GAAAA;AAChC,IAAA,MAAMN,SAAAA,GAAY;AAAE,QAAA,GAAGM,KAAK;AAAEC,QAAAA,EAAAA,EAAIL,kBAAAA,CAAmBI,KAAAA;AAAO,KAAA;IAG5D,OAAON,SAAAA;AACT;AAEA;;;AAGC,IACM,MAAMQ,MAAAA,GAASC,IAAAA,CAAKJ,iBAAAA,EAAmBN,2BAAAA,EAA6B,CAACC,SAAAA,GAC1EU,KAAAA,CAAM,EAAC,EAAGd,6BAAAA,EAAAA,EAAiCI,SAAAA,CAAAA;AAG7C,aAAe;AACbK,IAAAA,iBAAAA;AACAH,IAAAA,kBAAAA;AACAJ,IAAAA,eAAAA;AACAU,IAAAA,MAAAA;AACAZ,IAAAA,6BAAAA;AACAG,IAAAA;AACF,CAAA;;;;"}