@strapi/admin 5.55.1 → 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 (388) 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/components/UpsellBanner.js +9 -16
  22. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  23. package/dist/admin/admin/src/components/UpsellBanner.mjs +11 -18
  24. package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
  25. package/dist/admin/admin/src/features/Tracking.js +28 -8
  26. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  27. package/dist/admin/admin/src/features/Tracking.mjs +29 -10
  28. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  29. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +4 -20
  30. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  31. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -20
  32. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  33. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js +59 -0
  34. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js.map +1 -0
  35. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs +37 -0
  36. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs.map +1 -0
  37. package/dist/admin/admin/src/render.js +4 -69
  38. package/dist/admin/admin/src/render.js.map +1 -1
  39. package/dist/admin/admin/src/render.mjs +4 -69
  40. package/dist/admin/admin/src/render.mjs.map +1 -1
  41. package/dist/admin/admin/src/translations/en.json.js +15 -0
  42. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  43. package/dist/admin/admin/src/translations/en.json.mjs +15 -0
  44. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  45. package/dist/admin/admin/src/utils/browserStrapi.js +93 -0
  46. package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -0
  47. package/dist/admin/admin/src/utils/browserStrapi.mjs +91 -0
  48. package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -0
  49. package/dist/admin/admin/src/utils/getFetchClient.js +3 -3
  50. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  51. package/dist/admin/admin/src/utils/getFetchClient.mjs +2 -2
  52. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  53. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js +2 -1
  54. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js.map +1 -1
  55. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs +2 -1
  56. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs.map +1 -1
  57. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +16 -1
  58. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  59. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +16 -1
  60. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  61. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js +3 -1
  62. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
  63. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs +3 -1
  64. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
  65. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.js +64 -0
  66. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.js.map +1 -0
  67. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.mjs +60 -0
  68. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.mjs.map +1 -0
  69. package/dist/admin/ee/admin/src/services/auditLogs.js +2 -1
  70. package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
  71. package/dist/admin/ee/admin/src/services/auditLogs.mjs +2 -1
  72. package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
  73. package/dist/admin/src/components/MediaLibraryBanner.d.ts +10 -1
  74. package/dist/admin/src/components/SubNav.d.ts +2 -2
  75. package/dist/admin/src/components/TopBanners.d.ts +8 -0
  76. package/dist/admin/src/features/Tracking.d.ts +12 -1
  77. package/dist/admin/src/layouts/useAuthenticatedAccessTracking.d.ts +6 -0
  78. package/dist/admin/src/utils/browserStrapi.d.ts +11 -0
  79. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +15 -0
  80. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.d.ts +14 -0
  81. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +10 -1
  82. package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
  83. package/dist/ee/server/src/controllers/admin.d.ts +2 -28
  84. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  85. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +8 -2
  86. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
  87. package/dist/ee/server/src/controllers/authentication.d.ts.map +1 -1
  88. package/dist/ee/server/src/controllers/index.d.ts +1 -28
  89. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  90. package/dist/ee/server/src/controllers/user.d.ts.map +1 -1
  91. package/dist/ee/server/src/index.d.ts +6 -30
  92. package/dist/ee/server/src/index.d.ts.map +1 -1
  93. package/dist/ee/server/src/services/auth.d.ts +1 -1
  94. package/dist/ee/server/src/services/auth.d.ts.map +1 -1
  95. package/dist/ee/server/src/services/index.d.ts +5 -2
  96. package/dist/ee/server/src/services/index.d.ts.map +1 -1
  97. package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
  98. package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
  99. package/dist/ee/server/src/services/seat-enforcement.d.ts +3 -1
  100. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  101. package/dist/ee/server/src/services/user.d.ts.map +1 -1
  102. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +37 -21
  103. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  104. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +37 -21
  105. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  106. package/dist/server/ee/server/src/controllers/admin.js +8 -7
  107. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  108. package/dist/server/ee/server/src/controllers/admin.mjs +8 -7
  109. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  110. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js +2 -2
  111. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
  112. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs +2 -2
  113. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
  114. package/dist/server/ee/server/src/controllers/authentication.js +11 -11
  115. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  116. package/dist/server/ee/server/src/controllers/authentication.mjs +11 -11
  117. package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
  118. package/dist/server/ee/server/src/controllers/user.js +7 -8
  119. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  120. package/dist/server/ee/server/src/controllers/user.mjs +8 -9
  121. package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
  122. package/dist/server/ee/server/src/index.js +4 -0
  123. package/dist/server/ee/server/src/index.js.map +1 -1
  124. package/dist/server/ee/server/src/index.mjs +4 -0
  125. package/dist/server/ee/server/src/index.mjs.map +1 -1
  126. package/dist/server/ee/server/src/services/auth.js +1 -6
  127. package/dist/server/ee/server/src/services/auth.js.map +1 -1
  128. package/dist/server/ee/server/src/services/auth.mjs +2 -7
  129. package/dist/server/ee/server/src/services/auth.mjs.map +1 -1
  130. package/dist/server/ee/server/src/services/metrics.js +9 -7
  131. package/dist/server/ee/server/src/services/metrics.js.map +1 -1
  132. package/dist/server/ee/server/src/services/metrics.mjs +9 -7
  133. package/dist/server/ee/server/src/services/metrics.mjs.map +1 -1
  134. package/dist/server/ee/server/src/services/persist-tables.js +3 -4
  135. package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
  136. package/dist/server/ee/server/src/services/persist-tables.mjs +3 -4
  137. package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
  138. package/dist/server/ee/server/src/services/role.js +2 -2
  139. package/dist/server/ee/server/src/services/role.js.map +1 -1
  140. package/dist/server/ee/server/src/services/role.mjs +1 -1
  141. package/dist/server/ee/server/src/services/role.mjs.map +1 -1
  142. package/dist/server/ee/server/src/services/seat-enforcement.js +20 -20
  143. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  144. package/dist/server/ee/server/src/services/seat-enforcement.mjs +20 -20
  145. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  146. package/dist/server/ee/server/src/services/user.js +37 -6
  147. package/dist/server/ee/server/src/services/user.js.map +1 -1
  148. package/dist/server/ee/server/src/services/user.mjs +38 -7
  149. package/dist/server/ee/server/src/services/user.mjs.map +1 -1
  150. package/dist/server/ee/server/src/utils/sso-lock.js +2 -2
  151. package/dist/server/ee/server/src/utils/sso-lock.js.map +1 -1
  152. package/dist/server/ee/server/src/utils/sso-lock.mjs +1 -1
  153. package/dist/server/ee/server/src/utils/sso-lock.mjs.map +1 -1
  154. package/dist/server/server/src/audit-logs/admin-users.js +169 -0
  155. package/dist/server/server/src/audit-logs/admin-users.js.map +1 -0
  156. package/dist/server/server/src/audit-logs/admin-users.mjs +157 -0
  157. package/dist/server/server/src/audit-logs/admin-users.mjs.map +1 -0
  158. package/dist/server/server/src/audit-logs/tokens.js +3 -3
  159. package/dist/server/server/src/audit-logs/tokens.js.map +1 -1
  160. package/dist/server/server/src/audit-logs/tokens.mjs +2 -2
  161. package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -1
  162. package/dist/server/server/src/audit-logs/webhooks.js +106 -0
  163. package/dist/server/server/src/audit-logs/webhooks.js.map +1 -0
  164. package/dist/server/server/src/audit-logs/webhooks.mjs +100 -0
  165. package/dist/server/server/src/audit-logs/webhooks.mjs.map +1 -0
  166. package/dist/server/server/src/bootstrap.js +6 -4
  167. package/dist/server/server/src/bootstrap.js.map +1 -1
  168. package/dist/server/server/src/bootstrap.mjs +6 -4
  169. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  170. package/dist/server/server/src/controllers/admin-token.js +8 -8
  171. package/dist/server/server/src/controllers/admin-token.js.map +1 -1
  172. package/dist/server/server/src/controllers/admin-token.mjs +4 -4
  173. package/dist/server/server/src/controllers/admin-token.mjs.map +1 -1
  174. package/dist/server/server/src/controllers/admin.js +4 -5
  175. package/dist/server/server/src/controllers/admin.js.map +1 -1
  176. package/dist/server/server/src/controllers/admin.mjs +3 -4
  177. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  178. package/dist/server/server/src/controllers/api-token.js +8 -8
  179. package/dist/server/server/src/controllers/api-token.js.map +1 -1
  180. package/dist/server/server/src/controllers/api-token.mjs +4 -4
  181. package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
  182. package/dist/server/server/src/controllers/authentication.js +8 -1
  183. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  184. package/dist/server/server/src/controllers/authentication.mjs +8 -1
  185. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  186. package/dist/server/server/src/controllers/formatters/conditions.js +2 -2
  187. package/dist/server/server/src/controllers/formatters/conditions.js.map +1 -1
  188. package/dist/server/server/src/controllers/formatters/conditions.mjs +2 -2
  189. package/dist/server/server/src/controllers/formatters/conditions.mjs.map +1 -1
  190. package/dist/server/server/src/controllers/transfer/index.js +2 -2
  191. package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
  192. package/dist/server/server/src/controllers/transfer/index.mjs +2 -2
  193. package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
  194. package/dist/server/server/src/controllers/transfer/token.js +8 -8
  195. package/dist/server/server/src/controllers/transfer/token.js.map +1 -1
  196. package/dist/server/server/src/controllers/transfer/token.mjs +4 -4
  197. package/dist/server/server/src/controllers/transfer/token.mjs.map +1 -1
  198. package/dist/server/server/src/controllers/webhooks.js +26 -0
  199. package/dist/server/server/src/controllers/webhooks.js.map +1 -1
  200. package/dist/server/server/src/controllers/webhooks.mjs +27 -1
  201. package/dist/server/server/src/controllers/webhooks.mjs.map +1 -1
  202. package/dist/server/server/src/domain/action/index.js +18 -16
  203. package/dist/server/server/src/domain/action/index.js.map +1 -1
  204. package/dist/server/server/src/domain/action/index.mjs +16 -14
  205. package/dist/server/server/src/domain/action/index.mjs.map +1 -1
  206. package/dist/server/server/src/domain/action/provider.mjs +4 -4
  207. package/dist/server/server/src/domain/action/provider.mjs.map +1 -1
  208. package/dist/server/server/src/domain/condition/index.js +7 -4
  209. package/dist/server/server/src/domain/condition/index.js.map +1 -1
  210. package/dist/server/server/src/domain/condition/index.mjs +7 -4
  211. package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
  212. package/dist/server/server/src/domain/permission/index.js +24 -15
  213. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  214. package/dist/server/server/src/domain/permission/index.mjs +21 -12
  215. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  216. package/dist/server/server/src/middlewares/rateLimit.js +5 -5
  217. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  218. package/dist/server/server/src/middlewares/rateLimit.mjs +4 -4
  219. package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
  220. package/dist/server/server/src/register.js +6 -0
  221. package/dist/server/server/src/register.js.map +1 -1
  222. package/dist/server/server/src/register.mjs +6 -0
  223. package/dist/server/server/src/register.mjs.map +1 -1
  224. package/dist/server/server/src/services/action.js +1 -2
  225. package/dist/server/server/src/services/action.js.map +1 -1
  226. package/dist/server/server/src/services/action.mjs +1 -2
  227. package/dist/server/server/src/services/action.mjs.map +1 -1
  228. package/dist/server/server/src/services/api-token.js +61 -49
  229. package/dist/server/server/src/services/api-token.js.map +1 -1
  230. package/dist/server/server/src/services/api-token.mjs +53 -41
  231. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  232. package/dist/server/server/src/services/auth.js +27 -6
  233. package/dist/server/server/src/services/auth.js.map +1 -1
  234. package/dist/server/server/src/services/auth.mjs +28 -8
  235. package/dist/server/server/src/services/auth.mjs.map +1 -1
  236. package/dist/server/server/src/services/condition.js +2 -2
  237. package/dist/server/server/src/services/condition.js.map +1 -1
  238. package/dist/server/server/src/services/condition.mjs +1 -1
  239. package/dist/server/server/src/services/condition.mjs.map +1 -1
  240. package/dist/server/server/src/services/content-type.js +5 -4
  241. package/dist/server/server/src/services/content-type.js.map +1 -1
  242. package/dist/server/server/src/services/content-type.mjs +8 -7
  243. package/dist/server/server/src/services/content-type.mjs.map +1 -1
  244. package/dist/server/server/src/services/homepage.js +2 -1
  245. package/dist/server/server/src/services/homepage.js.map +1 -1
  246. package/dist/server/server/src/services/homepage.mjs +2 -1
  247. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  248. package/dist/server/server/src/services/passport/local-strategy.js +2 -2
  249. package/dist/server/server/src/services/passport/local-strategy.js.map +1 -1
  250. package/dist/server/server/src/services/passport/local-strategy.mjs +1 -1
  251. package/dist/server/server/src/services/passport/local-strategy.mjs.map +1 -1
  252. package/dist/server/server/src/services/passport.js +1 -2
  253. package/dist/server/server/src/services/passport.js.map +1 -1
  254. package/dist/server/server/src/services/passport.mjs +1 -2
  255. package/dist/server/server/src/services/passport.mjs.map +1 -1
  256. package/dist/server/server/src/services/permission/engine.js +4 -4
  257. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  258. package/dist/server/server/src/services/permission/engine.mjs +2 -2
  259. package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
  260. package/dist/server/server/src/services/permission/permissions-manager/index.js +2 -3
  261. package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
  262. package/dist/server/server/src/services/permission/permissions-manager/index.mjs +1 -2
  263. package/dist/server/server/src/services/permission/permissions-manager/index.mjs.map +1 -1
  264. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +6 -6
  265. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -1
  266. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +4 -4
  267. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -1
  268. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +47 -41
  269. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  270. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +44 -38
  271. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  272. package/dist/server/server/src/services/permission/permissions-manager/validate.js +30 -26
  273. package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
  274. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +28 -24
  275. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
  276. package/dist/server/server/src/services/permission/queries.js +9 -9
  277. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  278. package/dist/server/server/src/services/permission/queries.mjs +9 -9
  279. package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
  280. package/dist/server/server/src/services/permission/rename-fields.js +118 -0
  281. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -0
  282. package/dist/server/server/src/services/permission/rename-fields.mjs +116 -0
  283. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -0
  284. package/dist/server/server/src/services/permission/sections-builder/index.js +2 -2
  285. package/dist/server/server/src/services/permission/sections-builder/index.js.map +1 -1
  286. package/dist/server/server/src/services/permission/sections-builder/index.mjs +2 -2
  287. package/dist/server/server/src/services/permission/sections-builder/index.mjs.map +1 -1
  288. package/dist/server/server/src/services/permission/sections-builder/section.js +1 -2
  289. package/dist/server/server/src/services/permission/sections-builder/section.js.map +1 -1
  290. package/dist/server/server/src/services/permission/sections-builder/section.mjs +1 -2
  291. package/dist/server/server/src/services/permission/sections-builder/section.mjs.map +1 -1
  292. package/dist/server/server/src/services/permission/sections-builder/utils.js +6 -6
  293. package/dist/server/server/src/services/permission/sections-builder/utils.js.map +1 -1
  294. package/dist/server/server/src/services/permission/sections-builder/utils.mjs +4 -4
  295. package/dist/server/server/src/services/permission/sections-builder/utils.mjs.map +1 -1
  296. package/dist/server/server/src/services/role.js +20 -19
  297. package/dist/server/server/src/services/role.js.map +1 -1
  298. package/dist/server/server/src/services/role.mjs +20 -19
  299. package/dist/server/server/src/services/role.mjs.map +1 -1
  300. package/dist/server/server/src/services/transfer/token.js +20 -16
  301. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  302. package/dist/server/server/src/services/transfer/token.mjs +14 -10
  303. package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
  304. package/dist/server/server/src/services/user.js +50 -12
  305. package/dist/server/server/src/services/user.js.map +1 -1
  306. package/dist/server/server/src/services/user.mjs +52 -14
  307. package/dist/server/server/src/services/user.mjs.map +1 -1
  308. package/dist/server/server/src/strategies/api-token-utils.js +2 -3
  309. package/dist/server/server/src/strategies/api-token-utils.js.map +1 -1
  310. package/dist/server/server/src/strategies/api-token-utils.mjs +2 -3
  311. package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -1
  312. package/dist/server/server/src/strategies/content-api-token.js +3 -3
  313. package/dist/server/server/src/strategies/content-api-token.js.map +1 -1
  314. package/dist/server/server/src/strategies/content-api-token.mjs +1 -1
  315. package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -1
  316. package/dist/server/server/src/strategies/data-transfer.js +4 -4
  317. package/dist/server/server/src/strategies/data-transfer.js.map +1 -1
  318. package/dist/server/server/src/strategies/data-transfer.mjs +3 -3
  319. package/dist/server/server/src/strategies/data-transfer.mjs.map +1 -1
  320. package/dist/server/server/src/validation/common-validators.js +9 -10
  321. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  322. package/dist/server/server/src/validation/common-validators.mjs +13 -14
  323. package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
  324. package/dist/server/server/src/validation/user.js +1 -2
  325. package/dist/server/server/src/validation/user.js.map +1 -1
  326. package/dist/server/server/src/validation/user.mjs +1 -2
  327. package/dist/server/server/src/validation/user.mjs.map +1 -1
  328. package/dist/server/src/audit-logs/admin-users.d.ts +119 -0
  329. package/dist/server/src/audit-logs/admin-users.d.ts.map +1 -0
  330. package/dist/server/src/audit-logs/tokens.d.ts.map +1 -1
  331. package/dist/server/src/audit-logs/webhooks.d.ts +59 -0
  332. package/dist/server/src/audit-logs/webhooks.d.ts.map +1 -0
  333. package/dist/server/src/bootstrap.d.ts.map +1 -1
  334. package/dist/server/src/controllers/admin-token.d.ts.map +1 -1
  335. package/dist/server/src/controllers/admin.d.ts +2 -11
  336. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  337. package/dist/server/src/controllers/api-token.d.ts.map +1 -1
  338. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  339. package/dist/server/src/controllers/formatters/conditions.d.ts +1 -1
  340. package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
  341. package/dist/server/src/controllers/homepage.d.ts +1 -1
  342. package/dist/server/src/controllers/index.d.ts +2 -11
  343. package/dist/server/src/controllers/index.d.ts.map +1 -1
  344. package/dist/server/src/controllers/transfer/index.d.ts.map +1 -1
  345. package/dist/server/src/controllers/transfer/token.d.ts.map +1 -1
  346. package/dist/server/src/controllers/webhooks.d.ts.map +1 -1
  347. package/dist/server/src/domain/action/index.d.ts +1 -0
  348. package/dist/server/src/domain/action/index.d.ts.map +1 -1
  349. package/dist/server/src/domain/condition/index.d.ts +2 -2
  350. package/dist/server/src/domain/condition/index.d.ts.map +1 -1
  351. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  352. package/dist/server/src/domain/user.d.ts +2 -2
  353. package/dist/server/src/index.d.ts +4 -13
  354. package/dist/server/src/index.d.ts.map +1 -1
  355. package/dist/server/src/middlewares/index.d.ts.map +1 -1
  356. package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
  357. package/dist/server/src/register.d.ts.map +1 -1
  358. package/dist/server/src/services/action.d.ts.map +1 -1
  359. package/dist/server/src/services/api-token.d.ts.map +1 -1
  360. package/dist/server/src/services/auth.d.ts +6 -1
  361. package/dist/server/src/services/auth.d.ts.map +1 -1
  362. package/dist/server/src/services/condition.d.ts.map +1 -1
  363. package/dist/server/src/services/content-type.d.ts.map +1 -1
  364. package/dist/server/src/services/homepage.d.ts +1 -1
  365. package/dist/server/src/services/homepage.d.ts.map +1 -1
  366. package/dist/server/src/services/index.d.ts +2 -2
  367. package/dist/server/src/services/index.d.ts.map +1 -1
  368. package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
  369. package/dist/server/src/services/passport.d.ts.map +1 -1
  370. package/dist/server/src/services/permission/engine.d.ts.map +1 -1
  371. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
  372. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  373. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  374. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  375. package/dist/server/src/services/permission/rename-fields.d.ts +21 -0
  376. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -0
  377. package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
  378. package/dist/server/src/services/permission/sections-builder/utils.d.ts +1 -1
  379. package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
  380. package/dist/server/src/services/role.d.ts +1 -1
  381. package/dist/server/src/services/role.d.ts.map +1 -1
  382. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  383. package/dist/server/src/services/user.d.ts.map +1 -1
  384. package/dist/server/src/strategies/content-api-token.d.ts.map +1 -1
  385. package/dist/server/src/validation/user.d.ts.map +1 -1
  386. package/dist/shared/contracts/admin.d.ts +36 -2
  387. package/dist/shared/contracts/admin.d.ts.map +1 -1
  388. package/package.json +13 -13
@@ -0,0 +1,116 @@
1
+ import { isEmpty, uniq, xor, invert } from 'lodash';
2
+ import { getNestedFieldsWithIntermediate } from '../content-type.mjs';
3
+
4
+ const PERMISSION_UID = 'admin::permission';
5
+ /**
6
+ * Carries attribute renames to the `properties.fields` of admin permissions
7
+ * (roles and admin API tokens).
8
+ *
9
+ * Runs from the generated rename migration, inside its transaction, before the
10
+ * admin bootstrap cleans permission fields against the new schema. Without it,
11
+ * the cleanup drops every renamed field from every role but the super admin.
12
+ *
13
+ * `strapi.contentTypes` / `strapi.components` already hold the new schema at
14
+ * that point, so every new field path is mapped back to the path it had before
15
+ * the renames, segment by segment (a component field path goes through its
16
+ * parent's component). This also composes a parent rename with a rename inside
17
+ * its component in the same save.
18
+ */ const createPermissionFieldRenamer = ({ strapi })=>{
19
+ const getOldPath = (subject, path, originsOf)=>{
20
+ let ownerUid = subject;
21
+ let owner = strapi.contentTypes[subject];
22
+ return path.split('.').map((segment)=>{
23
+ const origin = originsOf[ownerUid]?.[segment] ?? segment;
24
+ const attribute = owner?.attributes?.[segment];
25
+ if (attribute?.type === 'component' && attribute.component) {
26
+ ownerUid = attribute.component;
27
+ owner = strapi.components[attribute.component];
28
+ } else {
29
+ owner = undefined;
30
+ }
31
+ return origin;
32
+ }).join('.');
33
+ };
34
+ /**
35
+ * `old path -> new path` per subject, for the subjects with at least one
36
+ * renamed path.
37
+ */ const getRenamedPaths = (renames)=>{
38
+ // Per model: final name -> origin name.
39
+ const originsOf = {};
40
+ for (const [uid, mapping] of Object.entries(renames)){
41
+ originsOf[uid] = invert(mapping);
42
+ }
43
+ const renamedPaths = new Map();
44
+ for (const [subject, contentType] of Object.entries(strapi.contentTypes)){
45
+ const paths = getNestedFieldsWithIntermediate(contentType, {
46
+ components: strapi.components
47
+ });
48
+ const byOldPath = {};
49
+ for (const path of paths){
50
+ const oldPath = getOldPath(subject, path, originsOf);
51
+ if (oldPath !== path) {
52
+ byOldPath[oldPath] = path;
53
+ }
54
+ }
55
+ if (!isEmpty(byOldPath)) {
56
+ renamedPaths.set(subject, byOldPath);
57
+ }
58
+ }
59
+ return renamedPaths;
60
+ };
61
+ return async (trx, renames)=>{
62
+ if (isEmpty(renames)) {
63
+ return;
64
+ }
65
+ // Fresh database: the table is created by schema sync after the migrations.
66
+ const { tableName } = strapi.db.metadata.get(PERMISSION_UID);
67
+ if (!await strapi.db.getSchemaConnection(trx).hasTable(tableName)) {
68
+ return;
69
+ }
70
+ const renamedPaths = getRenamedPaths(renames);
71
+ if (renamedPaths.size === 0) {
72
+ return;
73
+ }
74
+ // Joins the migration transaction.
75
+ const permissions = await strapi.db.query(PERMISSION_UID).findMany({
76
+ select: [
77
+ 'id',
78
+ 'subject',
79
+ 'properties'
80
+ ],
81
+ where: {
82
+ subject: {
83
+ $in: [
84
+ ...renamedPaths.keys()
85
+ ]
86
+ }
87
+ }
88
+ });
89
+ for (const permission of permissions){
90
+ const fields = permission.properties?.fields;
91
+ const byOldPath = permission.subject ? renamedPaths.get(permission.subject) : undefined;
92
+ if (!Array.isArray(fields) || !byOldPath) {
93
+ continue;
94
+ }
95
+ // One pass over the old paths, so a swap is applied once.
96
+ const newFields = uniq(fields.map((field)=>byOldPath[field] ?? field));
97
+ if (xor(fields, newFields).length === 0) {
98
+ continue;
99
+ }
100
+ await strapi.db.query(PERMISSION_UID).update({
101
+ where: {
102
+ id: permission.id
103
+ },
104
+ data: {
105
+ properties: {
106
+ ...permission.properties,
107
+ fields: newFields
108
+ }
109
+ }
110
+ });
111
+ }
112
+ };
113
+ };
114
+
115
+ export { createPermissionFieldRenamer };
116
+ //# sourceMappingURL=rename-fields.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-fields.mjs","sources":["../../../../../../server/src/services/permission/rename-fields.ts"],"sourcesContent":["import { invert, isEmpty, uniq, xor } from 'lodash';\nimport type { Core, Struct } from '@strapi/types';\n\nimport { getNestedFieldsWithIntermediate } from '../content-type';\n\ntype AttributeRenameHandler = Parameters<\n Core.Strapi['db']['schema']['registerAttributeRenameHandler']\n>[0];\n\ntype AttributeRenames = Parameters<AttributeRenameHandler>[1];\n\ninterface PermissionRow {\n id: number | string;\n subject: string | null;\n properties?: { fields?: unknown } | null;\n}\n\nconst PERMISSION_UID = 'admin::permission';\n\n/**\n * Carries attribute renames to the `properties.fields` of admin permissions\n * (roles and admin API tokens).\n *\n * Runs from the generated rename migration, inside its transaction, before the\n * admin bootstrap cleans permission fields against the new schema. Without it,\n * the cleanup drops every renamed field from every role but the super admin.\n *\n * `strapi.contentTypes` / `strapi.components` already hold the new schema at\n * that point, so every new field path is mapped back to the path it had before\n * the renames, segment by segment (a component field path goes through its\n * parent's component). This also composes a parent rename with a rename inside\n * its component in the same save.\n */\nexport const createPermissionFieldRenamer = ({\n strapi,\n}: {\n strapi: Core.Strapi;\n}): AttributeRenameHandler => {\n const getOldPath = (\n subject: string,\n path: string,\n originsOf: Record<string, Record<string, string>>\n ): string => {\n let ownerUid = subject;\n let owner: Struct.Schema | undefined =\n strapi.contentTypes[subject as keyof typeof strapi.contentTypes];\n\n return path\n .split('.')\n .map((segment) => {\n const origin = originsOf[ownerUid]?.[segment] ?? segment;\n const attribute = owner?.attributes?.[segment] as\n | { type?: string; component?: string }\n | undefined;\n\n if (attribute?.type === 'component' && attribute.component) {\n ownerUid = attribute.component;\n owner = strapi.components[attribute.component as keyof typeof strapi.components];\n } else {\n owner = undefined;\n }\n\n return origin;\n })\n .join('.');\n };\n\n /**\n * `old path -> new path` per subject, for the subjects with at least one\n * renamed path.\n */\n const getRenamedPaths = (renames: AttributeRenames): Map<string, Record<string, string>> => {\n // Per model: final name -> origin name.\n const originsOf: Record<string, Record<string, string>> = {};\n for (const [uid, mapping] of Object.entries(renames)) {\n originsOf[uid] = invert(mapping);\n }\n\n const renamedPaths = new Map<string, Record<string, string>>();\n\n for (const [subject, contentType] of Object.entries(strapi.contentTypes)) {\n const paths = getNestedFieldsWithIntermediate(contentType as Struct.ContentTypeSchema, {\n components: strapi.components,\n });\n\n const byOldPath: Record<string, string> = {};\n for (const path of paths) {\n const oldPath = getOldPath(subject, path, originsOf);\n if (oldPath !== path) {\n byOldPath[oldPath] = path;\n }\n }\n\n if (!isEmpty(byOldPath)) {\n renamedPaths.set(subject, byOldPath);\n }\n }\n\n return renamedPaths;\n };\n\n return async (trx, renames) => {\n if (isEmpty(renames)) {\n return;\n }\n\n // Fresh database: the table is created by schema sync after the migrations.\n const { tableName } = strapi.db.metadata.get(PERMISSION_UID);\n if (!(await strapi.db.getSchemaConnection(trx).hasTable(tableName))) {\n return;\n }\n\n const renamedPaths = getRenamedPaths(renames);\n if (renamedPaths.size === 0) {\n return;\n }\n\n // Joins the migration transaction.\n const permissions = (await strapi.db.query(PERMISSION_UID).findMany({\n select: ['id', 'subject', 'properties'],\n where: { subject: { $in: [...renamedPaths.keys()] } },\n })) as PermissionRow[];\n\n for (const permission of permissions) {\n const fields = permission.properties?.fields;\n const byOldPath = permission.subject ? renamedPaths.get(permission.subject) : undefined;\n\n if (!Array.isArray(fields) || !byOldPath) {\n continue;\n }\n\n // One pass over the old paths, so a swap is applied once.\n const newFields = uniq(fields.map((field: string) => byOldPath[field] ?? field));\n\n if (xor(fields, newFields).length === 0) {\n continue;\n }\n\n await strapi.db.query(PERMISSION_UID).update({\n where: { id: permission.id },\n data: { properties: { ...permission.properties, fields: newFields } },\n });\n }\n };\n};\n"],"names":["PERMISSION_UID","createPermissionFieldRenamer","strapi","getOldPath","subject","path","originsOf","ownerUid","owner","contentTypes","split","map","segment","origin","attribute","attributes","type","component","components","undefined","join","getRenamedPaths","renames","uid","mapping","Object","entries","invert","renamedPaths","Map","contentType","paths","getNestedFieldsWithIntermediate","byOldPath","oldPath","isEmpty","set","trx","tableName","db","metadata","get","getSchemaConnection","hasTable","size","permissions","query","findMany","select","where","$in","keys","permission","fields","properties","Array","isArray","newFields","uniq","field","xor","length","update","id","data"],"mappings":";;;AAiBA,MAAMA,cAAAA,GAAiB,mBAAA;AAEvB;;;;;;;;;;;;;AAaC,IACM,MAAMC,4BAAAA,GAA+B,CAAC,EAC3CC,MAAM,EAGP,GAAA;IACC,MAAMC,UAAAA,GAAa,CACjBC,OAAAA,EACAC,IAAAA,EACAC,SAAAA,GAAAA;AAEA,QAAA,IAAIC,QAAAA,GAAWH,OAAAA;AACf,QAAA,IAAII,KAAAA,GACFN,MAAAA,CAAOO,YAAY,CAACL,OAAAA,CAA4C;AAElE,QAAA,OAAOC,KACJK,KAAK,CAAC,GAAA,CAAA,CACNC,GAAG,CAAC,CAACC,OAAAA,GAAAA;AACJ,YAAA,MAAMC,SAASP,SAAS,CAACC,SAAS,GAAGK,QAAQ,IAAIA,OAAAA;AACjD,YAAA,MAAME,SAAAA,GAAYN,KAAAA,EAAOO,UAAAA,GAAaH,OAAAA,CAAQ;AAI9C,YAAA,IAAIE,SAAAA,EAAWE,IAAAA,KAAS,WAAA,IAAeF,SAAAA,CAAUG,SAAS,EAAE;AAC1DV,gBAAAA,QAAAA,GAAWO,UAAUG,SAAS;AAC9BT,gBAAAA,KAAAA,GAAQN,MAAAA,CAAOgB,UAAU,CAACJ,SAAAA,CAAUG,SAAS,CAAmC;YAClF,CAAA,MAAO;gBACLT,KAAAA,GAAQW,SAAAA;AACV,YAAA;YAEA,OAAON,MAAAA;AACT,QAAA,CAAA,CAAA,CACCO,IAAI,CAAC,GAAA,CAAA;AACV,IAAA,CAAA;AAEA;;;MAIA,MAAMC,kBAAkB,CAACC,OAAAA,GAAAA;;AAEvB,QAAA,MAAMhB,YAAoD,EAAC;QAC3D,KAAK,MAAM,CAACiB,GAAAA,EAAKC,OAAAA,CAAQ,IAAIC,MAAAA,CAAOC,OAAO,CAACJ,OAAAA,CAAAA,CAAU;YACpDhB,SAAS,CAACiB,GAAAA,CAAI,GAAGI,MAAAA,CAAOH,OAAAA,CAAAA;AAC1B,QAAA;AAEA,QAAA,MAAMI,eAAe,IAAIC,GAAAA,EAAAA;QAEzB,KAAK,MAAM,CAACzB,OAAAA,EAAS0B,WAAAA,CAAY,IAAIL,OAAOC,OAAO,CAACxB,MAAAA,CAAOO,YAAY,CAAA,CAAG;YACxE,MAAMsB,KAAAA,GAAQC,gCAAgCF,WAAAA,EAAyC;AACrFZ,gBAAAA,UAAAA,EAAYhB,OAAOgB;AACrB,aAAA,CAAA;AAEA,YAAA,MAAMe,YAAoC,EAAC;YAC3C,KAAK,MAAM5B,QAAQ0B,KAAAA,CAAO;gBACxB,MAAMG,OAAAA,GAAU/B,UAAAA,CAAWC,OAAAA,EAASC,IAAAA,EAAMC,SAAAA,CAAAA;AAC1C,gBAAA,IAAI4B,YAAY7B,IAAAA,EAAM;oBACpB4B,SAAS,CAACC,QAAQ,GAAG7B,IAAAA;AACvB,gBAAA;AACF,YAAA;YAEA,IAAI,CAAC8B,QAAQF,SAAAA,CAAAA,EAAY;gBACvBL,YAAAA,CAAaQ,GAAG,CAAChC,OAAAA,EAAS6B,SAAAA,CAAAA;AAC5B,YAAA;AACF,QAAA;QAEA,OAAOL,YAAAA;AACT,IAAA,CAAA;AAEA,IAAA,OAAO,OAAOS,GAAAA,EAAKf,OAAAA,GAAAA;AACjB,QAAA,IAAIa,QAAQb,OAAAA,CAAAA,EAAU;AACpB,YAAA;AACF,QAAA;;QAGA,MAAM,EAAEgB,SAAS,EAAE,GAAGpC,MAAAA,CAAOqC,EAAE,CAACC,QAAQ,CAACC,GAAG,CAACzC,cAAAA,CAAAA;QAC7C,IAAI,CAAE,MAAME,MAAAA,CAAOqC,EAAE,CAACG,mBAAmB,CAACL,GAAAA,CAAAA,CAAKM,QAAQ,CAACL,SAAAA,CAAAA,EAAa;AACnE,YAAA;AACF,QAAA;AAEA,QAAA,MAAMV,eAAeP,eAAAA,CAAgBC,OAAAA,CAAAA;QACrC,IAAIM,YAAAA,CAAagB,IAAI,KAAK,CAAA,EAAG;AAC3B,YAAA;AACF,QAAA;;QAGA,MAAMC,WAAAA,GAAe,MAAM3C,MAAAA,CAAOqC,EAAE,CAACO,KAAK,CAAC9C,cAAAA,CAAAA,CAAgB+C,QAAQ,CAAC;YAClEC,MAAAA,EAAQ;AAAC,gBAAA,IAAA;AAAM,gBAAA,SAAA;AAAW,gBAAA;AAAa,aAAA;YACvCC,KAAAA,EAAO;gBAAE7C,OAAAA,EAAS;oBAAE8C,GAAAA,EAAK;AAAItB,wBAAAA,GAAAA,YAAAA,CAAauB,IAAI;AAAG;AAAC;AAAE;AACtD,SAAA,CAAA;QAEA,KAAK,MAAMC,cAAcP,WAAAA,CAAa;YACpC,MAAMQ,MAAAA,GAASD,UAAAA,CAAWE,UAAU,EAAED,MAAAA;YACtC,MAAMpB,SAAAA,GAAYmB,WAAWhD,OAAO,GAAGwB,aAAaa,GAAG,CAACW,UAAAA,CAAWhD,OAAO,CAAA,GAAIe,SAAAA;AAE9E,YAAA,IAAI,CAACoC,KAAAA,CAAMC,OAAO,CAACH,MAAAA,CAAAA,IAAW,CAACpB,SAAAA,EAAW;AACxC,gBAAA;AACF,YAAA;;YAGA,MAAMwB,SAAAA,GAAYC,IAAAA,CAAKL,MAAAA,CAAO1C,GAAG,CAAC,CAACgD,KAAAA,GAAkB1B,SAAS,CAAC0B,KAAAA,CAAM,IAAIA,KAAAA,CAAAA,CAAAA;AAEzE,YAAA,IAAIC,GAAAA,CAAIP,MAAAA,EAAQI,SAAAA,CAAAA,CAAWI,MAAM,KAAK,CAAA,EAAG;AACvC,gBAAA;AACF,YAAA;AAEA,YAAA,MAAM3D,OAAOqC,EAAE,CAACO,KAAK,CAAC9C,cAAAA,CAAAA,CAAgB8D,MAAM,CAAC;gBAC3Cb,KAAAA,EAAO;AAAEc,oBAAAA,EAAAA,EAAIX,WAAWW;AAAG,iBAAA;gBAC3BC,IAAAA,EAAM;oBAAEV,UAAAA,EAAY;AAAE,wBAAA,GAAGF,WAAWE,UAAU;wBAAED,MAAAA,EAAQI;AAAU;AAAE;AACtE,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AACF;;;;"}
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
  var builder = require('./builder.js');
5
5
  var handlers = require('./handlers.js');
6
6
 
7
- const sectionPropMatcher = fp.propEq('section');
7
+ const sectionPropMatcher = (section)=>_.matchesProperty('section', section);
8
8
  const createContentTypesInitialState = ()=>({
9
9
  actions: [],
10
10
  subjects: []
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../../server/src/services/permission/sections-builder/index.ts"],"sourcesContent":["import { propEq } from 'lodash/fp';\nimport createSectionBuilder from './builder';\nimport {\n subjectsHandlerFor,\n contentTypesBase,\n fieldsProperty,\n plugins as pluginsHandler,\n settings as settingsHandler,\n} from './handlers';\n\nconst sectionPropMatcher = propEq('section');\n\nconst createContentTypesInitialState = () => ({\n actions: [],\n subjects: [],\n});\n\nconst createDefaultSectionBuilder = () => {\n const builder = createSectionBuilder();\n\n builder.createSection('plugins', {\n initialStateFactory: () => [],\n handlers: [pluginsHandler],\n matchers: [sectionPropMatcher('plugins')],\n });\n\n builder.createSection('settings', {\n initialStateFactory: () => [],\n handlers: [settingsHandler],\n matchers: [sectionPropMatcher('settings')],\n });\n\n builder.createSection('singleTypes', {\n initialStateFactory: createContentTypesInitialState,\n handlers: [contentTypesBase, subjectsHandlerFor('singleType'), fieldsProperty],\n matchers: [sectionPropMatcher('contentTypes')],\n });\n\n builder.createSection('collectionTypes', {\n initialStateFactory: createContentTypesInitialState,\n handlers: [contentTypesBase, subjectsHandlerFor('collectionType'), fieldsProperty],\n matchers: [sectionPropMatcher('contentTypes')],\n });\n\n return builder;\n};\n\nexport default createDefaultSectionBuilder;\n"],"names":["sectionPropMatcher","propEq","createContentTypesInitialState","actions","subjects","createDefaultSectionBuilder","builder","createSectionBuilder","createSection","initialStateFactory","handlers","pluginsHandler","matchers","settingsHandler","contentTypesBase","subjectsHandlerFor","fieldsProperty"],"mappings":";;;;;;AAUA,MAAMA,qBAAqBC,SAAAA,CAAO,SAAA,CAAA;AAElC,MAAMC,8BAAAA,GAAiC,KAAO;AAC5CC,QAAAA,OAAAA,EAAS,EAAE;AACXC,QAAAA,QAAAA,EAAU;KACZ,CAAA;AAEA,MAAMC,2BAAAA,GAA8B,IAAA;AAClC,IAAA,MAAMC,SAAAA,GAAUC,OAAAA,EAAAA;IAEhBD,SAAAA,CAAQE,aAAa,CAAC,SAAA,EAAW;AAC/BC,QAAAA,mBAAAA,EAAqB,IAAM,EAAE;QAC7BC,QAAAA,EAAU;AAACC,YAAAA;AAAe,SAAA;QAC1BC,QAAAA,EAAU;YAACZ,kBAAAA,CAAmB,SAAA;AAAW;AAC3C,KAAA,CAAA;IAEAM,SAAAA,CAAQE,aAAa,CAAC,UAAA,EAAY;AAChCC,QAAAA,mBAAAA,EAAqB,IAAM,EAAE;QAC7BC,QAAAA,EAAU;AAACG,YAAAA;AAAgB,SAAA;QAC3BD,QAAAA,EAAU;YAACZ,kBAAAA,CAAmB,UAAA;AAAY;AAC5C,KAAA,CAAA;IAEAM,SAAAA,CAAQE,aAAa,CAAC,aAAA,EAAe;QACnCC,mBAAAA,EAAqBP,8BAAAA;QACrBQ,QAAAA,EAAU;AAACI,YAAAA,yBAAAA;YAAkBC,2BAAAA,CAAmB,YAAA,CAAA;AAAeC,YAAAA;AAAe,SAAA;QAC9EJ,QAAAA,EAAU;YAACZ,kBAAAA,CAAmB,cAAA;AAAgB;AAChD,KAAA,CAAA;IAEAM,SAAAA,CAAQE,aAAa,CAAC,iBAAA,EAAmB;QACvCC,mBAAAA,EAAqBP,8BAAAA;QACrBQ,QAAAA,EAAU;AAACI,YAAAA,yBAAAA;YAAkBC,2BAAAA,CAAmB,gBAAA,CAAA;AAAmBC,YAAAA;AAAe,SAAA;QAClFJ,QAAAA,EAAU;YAACZ,kBAAAA,CAAmB,cAAA;AAAgB;AAChD,KAAA,CAAA;IAEA,OAAOM,SAAAA;AACT;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../../server/src/services/permission/sections-builder/index.ts"],"sourcesContent":["import { matchesProperty } from 'lodash';\nimport createSectionBuilder from './builder';\nimport {\n subjectsHandlerFor,\n contentTypesBase,\n fieldsProperty,\n plugins as pluginsHandler,\n settings as settingsHandler,\n} from './handlers';\n\nconst sectionPropMatcher = (section: string) => matchesProperty('section', section);\n\nconst createContentTypesInitialState = () => ({\n actions: [],\n subjects: [],\n});\n\nconst createDefaultSectionBuilder = () => {\n const builder = createSectionBuilder();\n\n builder.createSection('plugins', {\n initialStateFactory: () => [],\n handlers: [pluginsHandler],\n matchers: [sectionPropMatcher('plugins')],\n });\n\n builder.createSection('settings', {\n initialStateFactory: () => [],\n handlers: [settingsHandler],\n matchers: [sectionPropMatcher('settings')],\n });\n\n builder.createSection('singleTypes', {\n initialStateFactory: createContentTypesInitialState,\n handlers: [contentTypesBase, subjectsHandlerFor('singleType'), fieldsProperty],\n matchers: [sectionPropMatcher('contentTypes')],\n });\n\n builder.createSection('collectionTypes', {\n initialStateFactory: createContentTypesInitialState,\n handlers: [contentTypesBase, subjectsHandlerFor('collectionType'), fieldsProperty],\n matchers: [sectionPropMatcher('contentTypes')],\n });\n\n return builder;\n};\n\nexport default createDefaultSectionBuilder;\n"],"names":["sectionPropMatcher","section","matchesProperty","createContentTypesInitialState","actions","subjects","createDefaultSectionBuilder","builder","createSectionBuilder","createSection","initialStateFactory","handlers","pluginsHandler","matchers","settingsHandler","contentTypesBase","subjectsHandlerFor","fieldsProperty"],"mappings":";;;;;;AAUA,MAAMA,kBAAAA,GAAqB,CAACC,OAAAA,GAAoBC,iBAAAA,CAAgB,SAAA,EAAWD,OAAAA,CAAAA;AAE3E,MAAME,8BAAAA,GAAiC,KAAO;AAC5CC,QAAAA,OAAAA,EAAS,EAAE;AACXC,QAAAA,QAAAA,EAAU;KACZ,CAAA;AAEA,MAAMC,2BAAAA,GAA8B,IAAA;AAClC,IAAA,MAAMC,SAAAA,GAAUC,OAAAA,EAAAA;IAEhBD,SAAAA,CAAQE,aAAa,CAAC,SAAA,EAAW;AAC/BC,QAAAA,mBAAAA,EAAqB,IAAM,EAAE;QAC7BC,QAAAA,EAAU;AAACC,YAAAA;AAAe,SAAA;QAC1BC,QAAAA,EAAU;YAACb,kBAAAA,CAAmB,SAAA;AAAW;AAC3C,KAAA,CAAA;IAEAO,SAAAA,CAAQE,aAAa,CAAC,UAAA,EAAY;AAChCC,QAAAA,mBAAAA,EAAqB,IAAM,EAAE;QAC7BC,QAAAA,EAAU;AAACG,YAAAA;AAAgB,SAAA;QAC3BD,QAAAA,EAAU;YAACb,kBAAAA,CAAmB,UAAA;AAAY;AAC5C,KAAA,CAAA;IAEAO,SAAAA,CAAQE,aAAa,CAAC,aAAA,EAAe;QACnCC,mBAAAA,EAAqBP,8BAAAA;QACrBQ,QAAAA,EAAU;AAACI,YAAAA,yBAAAA;YAAkBC,2BAAAA,CAAmB,YAAA,CAAA;AAAeC,YAAAA;AAAe,SAAA;QAC9EJ,QAAAA,EAAU;YAACb,kBAAAA,CAAmB,cAAA;AAAgB;AAChD,KAAA,CAAA;IAEAO,SAAAA,CAAQE,aAAa,CAAC,iBAAA,EAAmB;QACvCC,mBAAAA,EAAqBP,8BAAAA;QACrBQ,QAAAA,EAAU;AAACI,YAAAA,yBAAAA;YAAkBC,2BAAAA,CAAmB,gBAAA,CAAA;AAAmBC,YAAAA;AAAe,SAAA;QAClFJ,QAAAA,EAAU;YAACb,kBAAAA,CAAmB,cAAA;AAAgB;AAChD,KAAA,CAAA;IAEA,OAAOO,SAAAA;AACT;;;;"}
@@ -1,8 +1,8 @@
1
- import { propEq } from 'lodash/fp';
1
+ import { matchesProperty } from 'lodash';
2
2
  import createSectionBuilder from './builder.mjs';
3
3
  import { plugins, settings, contentTypesBase, fieldsProperty, subjectsHandlerFor } from './handlers.mjs';
4
4
 
5
- const sectionPropMatcher = propEq('section');
5
+ const sectionPropMatcher = (section)=>matchesProperty('section', section);
6
6
  const createContentTypesInitialState = ()=>({
7
7
  actions: [],
8
8
  subjects: []
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../../server/src/services/permission/sections-builder/index.ts"],"sourcesContent":["import { propEq } from 'lodash/fp';\nimport createSectionBuilder from './builder';\nimport {\n subjectsHandlerFor,\n contentTypesBase,\n fieldsProperty,\n plugins as pluginsHandler,\n settings as settingsHandler,\n} from './handlers';\n\nconst sectionPropMatcher = propEq('section');\n\nconst createContentTypesInitialState = () => ({\n actions: [],\n subjects: [],\n});\n\nconst createDefaultSectionBuilder = () => {\n const builder = createSectionBuilder();\n\n builder.createSection('plugins', {\n initialStateFactory: () => [],\n handlers: [pluginsHandler],\n matchers: [sectionPropMatcher('plugins')],\n });\n\n builder.createSection('settings', {\n initialStateFactory: () => [],\n handlers: [settingsHandler],\n matchers: [sectionPropMatcher('settings')],\n });\n\n builder.createSection('singleTypes', {\n initialStateFactory: createContentTypesInitialState,\n handlers: [contentTypesBase, subjectsHandlerFor('singleType'), fieldsProperty],\n matchers: [sectionPropMatcher('contentTypes')],\n });\n\n builder.createSection('collectionTypes', {\n initialStateFactory: createContentTypesInitialState,\n handlers: [contentTypesBase, subjectsHandlerFor('collectionType'), fieldsProperty],\n matchers: [sectionPropMatcher('contentTypes')],\n });\n\n return builder;\n};\n\nexport default createDefaultSectionBuilder;\n"],"names":["sectionPropMatcher","propEq","createContentTypesInitialState","actions","subjects","createDefaultSectionBuilder","builder","createSectionBuilder","createSection","initialStateFactory","handlers","pluginsHandler","matchers","settingsHandler","contentTypesBase","subjectsHandlerFor","fieldsProperty"],"mappings":";;;;AAUA,MAAMA,qBAAqBC,MAAAA,CAAO,SAAA,CAAA;AAElC,MAAMC,8BAAAA,GAAiC,KAAO;AAC5CC,QAAAA,OAAAA,EAAS,EAAE;AACXC,QAAAA,QAAAA,EAAU;KACZ,CAAA;AAEA,MAAMC,2BAAAA,GAA8B,IAAA;AAClC,IAAA,MAAMC,OAAAA,GAAUC,oBAAAA,EAAAA;IAEhBD,OAAAA,CAAQE,aAAa,CAAC,SAAA,EAAW;AAC/BC,QAAAA,mBAAAA,EAAqB,IAAM,EAAE;QAC7BC,QAAAA,EAAU;AAACC,YAAAA;AAAe,SAAA;QAC1BC,QAAAA,EAAU;YAACZ,kBAAAA,CAAmB,SAAA;AAAW;AAC3C,KAAA,CAAA;IAEAM,OAAAA,CAAQE,aAAa,CAAC,UAAA,EAAY;AAChCC,QAAAA,mBAAAA,EAAqB,IAAM,EAAE;QAC7BC,QAAAA,EAAU;AAACG,YAAAA;AAAgB,SAAA;QAC3BD,QAAAA,EAAU;YAACZ,kBAAAA,CAAmB,UAAA;AAAY;AAC5C,KAAA,CAAA;IAEAM,OAAAA,CAAQE,aAAa,CAAC,aAAA,EAAe;QACnCC,mBAAAA,EAAqBP,8BAAAA;QACrBQ,QAAAA,EAAU;AAACI,YAAAA,gBAAAA;YAAkBC,kBAAAA,CAAmB,YAAA,CAAA;AAAeC,YAAAA;AAAe,SAAA;QAC9EJ,QAAAA,EAAU;YAACZ,kBAAAA,CAAmB,cAAA;AAAgB;AAChD,KAAA,CAAA;IAEAM,OAAAA,CAAQE,aAAa,CAAC,iBAAA,EAAmB;QACvCC,mBAAAA,EAAqBP,8BAAAA;QACrBQ,QAAAA,EAAU;AAACI,YAAAA,gBAAAA;YAAkBC,kBAAAA,CAAmB,gBAAA,CAAA;AAAmBC,YAAAA;AAAe,SAAA;QAClFJ,QAAAA,EAAU;YAACZ,kBAAAA,CAAmB,cAAA;AAAgB;AAChD,KAAA,CAAA;IAEA,OAAOM,OAAAA;AACT;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../../server/src/services/permission/sections-builder/index.ts"],"sourcesContent":["import { matchesProperty } from 'lodash';\nimport createSectionBuilder from './builder';\nimport {\n subjectsHandlerFor,\n contentTypesBase,\n fieldsProperty,\n plugins as pluginsHandler,\n settings as settingsHandler,\n} from './handlers';\n\nconst sectionPropMatcher = (section: string) => matchesProperty('section', section);\n\nconst createContentTypesInitialState = () => ({\n actions: [],\n subjects: [],\n});\n\nconst createDefaultSectionBuilder = () => {\n const builder = createSectionBuilder();\n\n builder.createSection('plugins', {\n initialStateFactory: () => [],\n handlers: [pluginsHandler],\n matchers: [sectionPropMatcher('plugins')],\n });\n\n builder.createSection('settings', {\n initialStateFactory: () => [],\n handlers: [settingsHandler],\n matchers: [sectionPropMatcher('settings')],\n });\n\n builder.createSection('singleTypes', {\n initialStateFactory: createContentTypesInitialState,\n handlers: [contentTypesBase, subjectsHandlerFor('singleType'), fieldsProperty],\n matchers: [sectionPropMatcher('contentTypes')],\n });\n\n builder.createSection('collectionTypes', {\n initialStateFactory: createContentTypesInitialState,\n handlers: [contentTypesBase, subjectsHandlerFor('collectionType'), fieldsProperty],\n matchers: [sectionPropMatcher('contentTypes')],\n });\n\n return builder;\n};\n\nexport default createDefaultSectionBuilder;\n"],"names":["sectionPropMatcher","section","matchesProperty","createContentTypesInitialState","actions","subjects","createDefaultSectionBuilder","builder","createSectionBuilder","createSection","initialStateFactory","handlers","pluginsHandler","matchers","settingsHandler","contentTypesBase","subjectsHandlerFor","fieldsProperty"],"mappings":";;;;AAUA,MAAMA,kBAAAA,GAAqB,CAACC,OAAAA,GAAoBC,eAAAA,CAAgB,SAAA,EAAWD,OAAAA,CAAAA;AAE3E,MAAME,8BAAAA,GAAiC,KAAO;AAC5CC,QAAAA,OAAAA,EAAS,EAAE;AACXC,QAAAA,QAAAA,EAAU;KACZ,CAAA;AAEA,MAAMC,2BAAAA,GAA8B,IAAA;AAClC,IAAA,MAAMC,OAAAA,GAAUC,oBAAAA,EAAAA;IAEhBD,OAAAA,CAAQE,aAAa,CAAC,SAAA,EAAW;AAC/BC,QAAAA,mBAAAA,EAAqB,IAAM,EAAE;QAC7BC,QAAAA,EAAU;AAACC,YAAAA;AAAe,SAAA;QAC1BC,QAAAA,EAAU;YAACb,kBAAAA,CAAmB,SAAA;AAAW;AAC3C,KAAA,CAAA;IAEAO,OAAAA,CAAQE,aAAa,CAAC,UAAA,EAAY;AAChCC,QAAAA,mBAAAA,EAAqB,IAAM,EAAE;QAC7BC,QAAAA,EAAU;AAACG,YAAAA;AAAgB,SAAA;QAC3BD,QAAAA,EAAU;YAACb,kBAAAA,CAAmB,UAAA;AAAY;AAC5C,KAAA,CAAA;IAEAO,OAAAA,CAAQE,aAAa,CAAC,aAAA,EAAe;QACnCC,mBAAAA,EAAqBP,8BAAAA;QACrBQ,QAAAA,EAAU;AAACI,YAAAA,gBAAAA;YAAkBC,kBAAAA,CAAmB,YAAA,CAAA;AAAeC,YAAAA;AAAe,SAAA;QAC9EJ,QAAAA,EAAU;YAACb,kBAAAA,CAAmB,cAAA;AAAgB;AAChD,KAAA,CAAA;IAEAO,OAAAA,CAAQE,aAAa,CAAC,iBAAA,EAAmB;QACvCC,mBAAAA,EAAqBP,8BAAAA;QACrBQ,QAAAA,EAAU;AAACI,YAAAA,gBAAAA;YAAkBC,kBAAAA,CAAmB,gBAAA,CAAA;AAAmBC,YAAAA;AAAe,SAAA;QAClFJ,QAAAA,EAAU;YAACb,kBAAAA,CAAmB,cAAA;AAAgB;AAChD,KAAA,CAAA;IAEA,OAAOO,OAAAA;AACT;;;;"}
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
4
3
  var utils = require('@strapi/utils');
5
4
 
6
5
  const emptyObjectFactory = ()=>({});
@@ -23,7 +22,7 @@ const emptyObjectFactory = ()=>({});
23
22
  * If any of the registered matcher functions returns true, then the condition applies.
24
23
  */ async appliesToAction (action) {
25
24
  const results = await state.hooks.matchers.call(action);
26
- return results.some(fp.eq(true));
25
+ return results.some((result)=>result === true);
27
26
  },
28
27
  /**
29
28
  * Init, build and returns a section object based on the given actions
@@ -1 +1 @@
1
- {"version":3,"file":"section.js","sources":["../../../../../../../server/src/services/permission/sections-builder/section.ts"],"sourcesContent":["import { eq } from 'lodash/fp';\nimport { hooks } from '@strapi/utils';\nimport type { Action } from '../../../domain/action';\n\nexport type SectionOptions = {\n initialStateFactory?: (...args: any) => unknown; // A factory function that returns the default shape of the section\n handlers?: ((...args: any) => unknown)[]; // An initial collection of handlers which will be registered in the handlers hook\n matchers?: ((...args: any) => unknown)[]; // An initial collection of matchers which will be registered in the matchers hook\n};\n\nconst emptyObjectFactory = () => ({});\n\n/**\n * Upon call, creates a new section object\n */\nconst createSection = (\n { initialStateFactory = emptyObjectFactory, handlers = [], matchers = [] } = {} as SectionOptions\n) => {\n const state = {\n hooks: {\n handlers: hooks.createAsyncSeriesHook(),\n matchers: hooks.createAsyncParallelHook(),\n },\n };\n\n // Register initial hooks\n handlers.forEach((handler) => state.hooks.handlers.register(handler));\n matchers.forEach((matcher) => state.hooks.matchers.register(matcher));\n\n return {\n hooks: state.hooks,\n\n /**\n * Verifies if an action can be applied to the section by running the matchers hook.\n * If any of the registered matcher functions returns true, then the condition applies.\n */\n async appliesToAction(action: Action): Promise<boolean> {\n const results = await state.hooks.matchers.call(action);\n\n return results.some(eq(true));\n },\n\n /**\n * Init, build and returns a section object based on the given actions\n * @param actions - A list of actions used to populate the section\n */\n async build(actions = [] as Action[]) {\n const section = initialStateFactory();\n\n for (const action of actions) {\n const applies = await this.appliesToAction(action);\n\n if (applies) {\n await state.hooks.handlers.call({ action, section });\n }\n }\n\n return section;\n },\n };\n};\n\nexport default createSection;\n"],"names":["emptyObjectFactory","createSection","initialStateFactory","handlers","matchers","state","hooks","createAsyncSeriesHook","createAsyncParallelHook","forEach","handler","register","matcher","appliesToAction","action","results","call","some","eq","build","actions","section","applies"],"mappings":";;;;;AAUA,MAAMA,kBAAAA,GAAqB,KAAO,EAAC,CAAA;AAEnC;;AAEC,IACD,MAAMC,aAAAA,GAAgB,CACpB,EAAEC,sBAAsBF,kBAAkB,EAAEG,QAAAA,GAAW,EAAE,EAAEC,QAAAA,GAAW,EAAE,EAAE,GAAG,EAAoB,GAAA;AAEjG,IAAA,MAAMC,KAAAA,GAAQ;QACZC,KAAAA,EAAO;AACLH,YAAAA,QAAAA,EAAUG,YAAMC,qBAAqB,EAAA;AACrCH,YAAAA,QAAAA,EAAUE,YAAME,uBAAuB;AACzC;AACF,KAAA;;IAGAL,QAAAA,CAASM,OAAO,CAAC,CAACC,OAAAA,GAAYL,KAAAA,CAAMC,KAAK,CAACH,QAAQ,CAACQ,QAAQ,CAACD,OAAAA,CAAAA,CAAAA;IAC5DN,QAAAA,CAASK,OAAO,CAAC,CAACG,OAAAA,GAAYP,KAAAA,CAAMC,KAAK,CAACF,QAAQ,CAACO,QAAQ,CAACC,OAAAA,CAAAA,CAAAA;IAE5D,OAAO;AACLN,QAAAA,KAAAA,EAAOD,MAAMC,KAAK;AAElB;;;QAIA,MAAMO,iBAAgBC,MAAc,EAAA;YAClC,MAAMC,OAAAA,GAAU,MAAMV,KAAAA,CAAMC,KAAK,CAACF,QAAQ,CAACY,IAAI,CAACF,MAAAA,CAAAA;YAEhD,OAAOC,OAAAA,CAAQE,IAAI,CAACC,KAAAA,CAAG,IAAA,CAAA,CAAA;AACzB,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMC,KAAAA,CAAAA,CAAMC,OAAAA,GAAU,EAAE,EAAY;AAClC,YAAA,MAAMC,OAAAA,GAAUnB,mBAAAA,EAAAA;YAEhB,KAAK,MAAMY,UAAUM,OAAAA,CAAS;AAC5B,gBAAA,MAAME,OAAAA,GAAU,MAAM,IAAI,CAACT,eAAe,CAACC,MAAAA,CAAAA;AAE3C,gBAAA,IAAIQ,OAAAA,EAAS;AACX,oBAAA,MAAMjB,MAAMC,KAAK,CAACH,QAAQ,CAACa,IAAI,CAAC;AAAEF,wBAAAA,MAAAA;AAAQO,wBAAAA;AAAQ,qBAAA,CAAA;AACpD,gBAAA;AACF,YAAA;YAEA,OAAOA,OAAAA;AACT,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"section.js","sources":["../../../../../../../server/src/services/permission/sections-builder/section.ts"],"sourcesContent":["import { hooks } from '@strapi/utils';\nimport type { Action } from '../../../domain/action';\n\nexport type SectionOptions = {\n initialStateFactory?: (...args: any) => unknown; // A factory function that returns the default shape of the section\n handlers?: ((...args: any) => unknown)[]; // An initial collection of handlers which will be registered in the handlers hook\n matchers?: ((...args: any) => unknown)[]; // An initial collection of matchers which will be registered in the matchers hook\n};\n\nconst emptyObjectFactory = () => ({});\n\n/**\n * Upon call, creates a new section object\n */\nconst createSection = (\n { initialStateFactory = emptyObjectFactory, handlers = [], matchers = [] } = {} as SectionOptions\n) => {\n const state = {\n hooks: {\n handlers: hooks.createAsyncSeriesHook(),\n matchers: hooks.createAsyncParallelHook(),\n },\n };\n\n // Register initial hooks\n handlers.forEach((handler) => state.hooks.handlers.register(handler));\n matchers.forEach((matcher) => state.hooks.matchers.register(matcher));\n\n return {\n hooks: state.hooks,\n\n /**\n * Verifies if an action can be applied to the section by running the matchers hook.\n * If any of the registered matcher functions returns true, then the condition applies.\n */\n async appliesToAction(action: Action): Promise<boolean> {\n const results = await state.hooks.matchers.call(action);\n\n return results.some((result) => result === true);\n },\n\n /**\n * Init, build and returns a section object based on the given actions\n * @param actions - A list of actions used to populate the section\n */\n async build(actions = [] as Action[]) {\n const section = initialStateFactory();\n\n for (const action of actions) {\n const applies = await this.appliesToAction(action);\n\n if (applies) {\n await state.hooks.handlers.call({ action, section });\n }\n }\n\n return section;\n },\n };\n};\n\nexport default createSection;\n"],"names":["emptyObjectFactory","createSection","initialStateFactory","handlers","matchers","state","hooks","createAsyncSeriesHook","createAsyncParallelHook","forEach","handler","register","matcher","appliesToAction","action","results","call","some","result","build","actions","section","applies"],"mappings":";;;;AASA,MAAMA,kBAAAA,GAAqB,KAAO,EAAC,CAAA;AAEnC;;AAEC,IACD,MAAMC,aAAAA,GAAgB,CACpB,EAAEC,sBAAsBF,kBAAkB,EAAEG,QAAAA,GAAW,EAAE,EAAEC,QAAAA,GAAW,EAAE,EAAE,GAAG,EAAoB,GAAA;AAEjG,IAAA,MAAMC,KAAAA,GAAQ;QACZC,KAAAA,EAAO;AACLH,YAAAA,QAAAA,EAAUG,YAAMC,qBAAqB,EAAA;AACrCH,YAAAA,QAAAA,EAAUE,YAAME,uBAAuB;AACzC;AACF,KAAA;;IAGAL,QAAAA,CAASM,OAAO,CAAC,CAACC,OAAAA,GAAYL,KAAAA,CAAMC,KAAK,CAACH,QAAQ,CAACQ,QAAQ,CAACD,OAAAA,CAAAA,CAAAA;IAC5DN,QAAAA,CAASK,OAAO,CAAC,CAACG,OAAAA,GAAYP,KAAAA,CAAMC,KAAK,CAACF,QAAQ,CAACO,QAAQ,CAACC,OAAAA,CAAAA,CAAAA;IAE5D,OAAO;AACLN,QAAAA,KAAAA,EAAOD,MAAMC,KAAK;AAElB;;;QAIA,MAAMO,iBAAgBC,MAAc,EAAA;YAClC,MAAMC,OAAAA,GAAU,MAAMV,KAAAA,CAAMC,KAAK,CAACF,QAAQ,CAACY,IAAI,CAACF,MAAAA,CAAAA;AAEhD,YAAA,OAAOC,OAAAA,CAAQE,IAAI,CAAC,CAACC,SAAWA,MAAAA,KAAW,IAAA,CAAA;AAC7C,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMC,KAAAA,CAAAA,CAAMC,OAAAA,GAAU,EAAE,EAAY;AAClC,YAAA,MAAMC,OAAAA,GAAUnB,mBAAAA,EAAAA;YAEhB,KAAK,MAAMY,UAAUM,OAAAA,CAAS;AAC5B,gBAAA,MAAME,OAAAA,GAAU,MAAM,IAAI,CAACT,eAAe,CAACC,MAAAA,CAAAA;AAE3C,gBAAA,IAAIQ,OAAAA,EAAS;AACX,oBAAA,MAAMjB,MAAMC,KAAK,CAACH,QAAQ,CAACa,IAAI,CAAC;AAAEF,wBAAAA,MAAAA;AAAQO,wBAAAA;AAAQ,qBAAA,CAAA;AACpD,gBAAA;AACF,YAAA;YAEA,OAAOA,OAAAA;AACT,QAAA;AACF,KAAA;AACF;;;;"}
@@ -1,4 +1,3 @@
1
- import { eq } from 'lodash/fp';
2
1
  import { hooks } from '@strapi/utils';
3
2
 
4
3
  const emptyObjectFactory = ()=>({});
@@ -21,7 +20,7 @@ const emptyObjectFactory = ()=>({});
21
20
  * If any of the registered matcher functions returns true, then the condition applies.
22
21
  */ async appliesToAction (action) {
23
22
  const results = await state.hooks.matchers.call(action);
24
- return results.some(eq(true));
23
+ return results.some((result)=>result === true);
25
24
  },
26
25
  /**
27
26
  * Init, build and returns a section object based on the given actions
@@ -1 +1 @@
1
- {"version":3,"file":"section.mjs","sources":["../../../../../../../server/src/services/permission/sections-builder/section.ts"],"sourcesContent":["import { eq } from 'lodash/fp';\nimport { hooks } from '@strapi/utils';\nimport type { Action } from '../../../domain/action';\n\nexport type SectionOptions = {\n initialStateFactory?: (...args: any) => unknown; // A factory function that returns the default shape of the section\n handlers?: ((...args: any) => unknown)[]; // An initial collection of handlers which will be registered in the handlers hook\n matchers?: ((...args: any) => unknown)[]; // An initial collection of matchers which will be registered in the matchers hook\n};\n\nconst emptyObjectFactory = () => ({});\n\n/**\n * Upon call, creates a new section object\n */\nconst createSection = (\n { initialStateFactory = emptyObjectFactory, handlers = [], matchers = [] } = {} as SectionOptions\n) => {\n const state = {\n hooks: {\n handlers: hooks.createAsyncSeriesHook(),\n matchers: hooks.createAsyncParallelHook(),\n },\n };\n\n // Register initial hooks\n handlers.forEach((handler) => state.hooks.handlers.register(handler));\n matchers.forEach((matcher) => state.hooks.matchers.register(matcher));\n\n return {\n hooks: state.hooks,\n\n /**\n * Verifies if an action can be applied to the section by running the matchers hook.\n * If any of the registered matcher functions returns true, then the condition applies.\n */\n async appliesToAction(action: Action): Promise<boolean> {\n const results = await state.hooks.matchers.call(action);\n\n return results.some(eq(true));\n },\n\n /**\n * Init, build and returns a section object based on the given actions\n * @param actions - A list of actions used to populate the section\n */\n async build(actions = [] as Action[]) {\n const section = initialStateFactory();\n\n for (const action of actions) {\n const applies = await this.appliesToAction(action);\n\n if (applies) {\n await state.hooks.handlers.call({ action, section });\n }\n }\n\n return section;\n },\n };\n};\n\nexport default createSection;\n"],"names":["emptyObjectFactory","createSection","initialStateFactory","handlers","matchers","state","hooks","createAsyncSeriesHook","createAsyncParallelHook","forEach","handler","register","matcher","appliesToAction","action","results","call","some","eq","build","actions","section","applies"],"mappings":";;;AAUA,MAAMA,kBAAAA,GAAqB,KAAO,EAAC,CAAA;AAEnC;;AAEC,IACD,MAAMC,aAAAA,GAAgB,CACpB,EAAEC,sBAAsBF,kBAAkB,EAAEG,QAAAA,GAAW,EAAE,EAAEC,QAAAA,GAAW,EAAE,EAAE,GAAG,EAAoB,GAAA;AAEjG,IAAA,MAAMC,KAAAA,GAAQ;QACZC,KAAAA,EAAO;AACLH,YAAAA,QAAAA,EAAUG,MAAMC,qBAAqB,EAAA;AACrCH,YAAAA,QAAAA,EAAUE,MAAME,uBAAuB;AACzC;AACF,KAAA;;IAGAL,QAAAA,CAASM,OAAO,CAAC,CAACC,OAAAA,GAAYL,KAAAA,CAAMC,KAAK,CAACH,QAAQ,CAACQ,QAAQ,CAACD,OAAAA,CAAAA,CAAAA;IAC5DN,QAAAA,CAASK,OAAO,CAAC,CAACG,OAAAA,GAAYP,KAAAA,CAAMC,KAAK,CAACF,QAAQ,CAACO,QAAQ,CAACC,OAAAA,CAAAA,CAAAA;IAE5D,OAAO;AACLN,QAAAA,KAAAA,EAAOD,MAAMC,KAAK;AAElB;;;QAIA,MAAMO,iBAAgBC,MAAc,EAAA;YAClC,MAAMC,OAAAA,GAAU,MAAMV,KAAAA,CAAMC,KAAK,CAACF,QAAQ,CAACY,IAAI,CAACF,MAAAA,CAAAA;YAEhD,OAAOC,OAAAA,CAAQE,IAAI,CAACC,EAAAA,CAAG,IAAA,CAAA,CAAA;AACzB,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMC,KAAAA,CAAAA,CAAMC,OAAAA,GAAU,EAAE,EAAY;AAClC,YAAA,MAAMC,OAAAA,GAAUnB,mBAAAA,EAAAA;YAEhB,KAAK,MAAMY,UAAUM,OAAAA,CAAS;AAC5B,gBAAA,MAAME,OAAAA,GAAU,MAAM,IAAI,CAACT,eAAe,CAACC,MAAAA,CAAAA;AAE3C,gBAAA,IAAIQ,OAAAA,EAAS;AACX,oBAAA,MAAMjB,MAAMC,KAAK,CAACH,QAAQ,CAACa,IAAI,CAAC;AAAEF,wBAAAA,MAAAA;AAAQO,wBAAAA;AAAQ,qBAAA,CAAA;AACpD,gBAAA;AACF,YAAA;YAEA,OAAOA,OAAAA;AACT,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"section.mjs","sources":["../../../../../../../server/src/services/permission/sections-builder/section.ts"],"sourcesContent":["import { hooks } from '@strapi/utils';\nimport type { Action } from '../../../domain/action';\n\nexport type SectionOptions = {\n initialStateFactory?: (...args: any) => unknown; // A factory function that returns the default shape of the section\n handlers?: ((...args: any) => unknown)[]; // An initial collection of handlers which will be registered in the handlers hook\n matchers?: ((...args: any) => unknown)[]; // An initial collection of matchers which will be registered in the matchers hook\n};\n\nconst emptyObjectFactory = () => ({});\n\n/**\n * Upon call, creates a new section object\n */\nconst createSection = (\n { initialStateFactory = emptyObjectFactory, handlers = [], matchers = [] } = {} as SectionOptions\n) => {\n const state = {\n hooks: {\n handlers: hooks.createAsyncSeriesHook(),\n matchers: hooks.createAsyncParallelHook(),\n },\n };\n\n // Register initial hooks\n handlers.forEach((handler) => state.hooks.handlers.register(handler));\n matchers.forEach((matcher) => state.hooks.matchers.register(matcher));\n\n return {\n hooks: state.hooks,\n\n /**\n * Verifies if an action can be applied to the section by running the matchers hook.\n * If any of the registered matcher functions returns true, then the condition applies.\n */\n async appliesToAction(action: Action): Promise<boolean> {\n const results = await state.hooks.matchers.call(action);\n\n return results.some((result) => result === true);\n },\n\n /**\n * Init, build and returns a section object based on the given actions\n * @param actions - A list of actions used to populate the section\n */\n async build(actions = [] as Action[]) {\n const section = initialStateFactory();\n\n for (const action of actions) {\n const applies = await this.appliesToAction(action);\n\n if (applies) {\n await state.hooks.handlers.call({ action, section });\n }\n }\n\n return section;\n },\n };\n};\n\nexport default createSection;\n"],"names":["emptyObjectFactory","createSection","initialStateFactory","handlers","matchers","state","hooks","createAsyncSeriesHook","createAsyncParallelHook","forEach","handler","register","matcher","appliesToAction","action","results","call","some","result","build","actions","section","applies"],"mappings":";;AASA,MAAMA,kBAAAA,GAAqB,KAAO,EAAC,CAAA;AAEnC;;AAEC,IACD,MAAMC,aAAAA,GAAgB,CACpB,EAAEC,sBAAsBF,kBAAkB,EAAEG,QAAAA,GAAW,EAAE,EAAEC,QAAAA,GAAW,EAAE,EAAE,GAAG,EAAoB,GAAA;AAEjG,IAAA,MAAMC,KAAAA,GAAQ;QACZC,KAAAA,EAAO;AACLH,YAAAA,QAAAA,EAAUG,MAAMC,qBAAqB,EAAA;AACrCH,YAAAA,QAAAA,EAAUE,MAAME,uBAAuB;AACzC;AACF,KAAA;;IAGAL,QAAAA,CAASM,OAAO,CAAC,CAACC,OAAAA,GAAYL,KAAAA,CAAMC,KAAK,CAACH,QAAQ,CAACQ,QAAQ,CAACD,OAAAA,CAAAA,CAAAA;IAC5DN,QAAAA,CAASK,OAAO,CAAC,CAACG,OAAAA,GAAYP,KAAAA,CAAMC,KAAK,CAACF,QAAQ,CAACO,QAAQ,CAACC,OAAAA,CAAAA,CAAAA;IAE5D,OAAO;AACLN,QAAAA,KAAAA,EAAOD,MAAMC,KAAK;AAElB;;;QAIA,MAAMO,iBAAgBC,MAAc,EAAA;YAClC,MAAMC,OAAAA,GAAU,MAAMV,KAAAA,CAAMC,KAAK,CAACF,QAAQ,CAACY,IAAI,CAACF,MAAAA,CAAAA;AAEhD,YAAA,OAAOC,OAAAA,CAAQE,IAAI,CAAC,CAACC,SAAWA,MAAAA,KAAW,IAAA,CAAA;AAC7C,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMC,KAAAA,CAAAA,CAAMC,OAAAA,GAAU,EAAE,EAAY;AAClC,YAAA,MAAMC,OAAAA,GAAUnB,mBAAAA,EAAAA;YAEhB,KAAK,MAAMY,UAAUM,OAAAA,CAAS;AAC5B,gBAAA,MAAME,OAAAA,GAAU,MAAM,IAAI,CAACT,eAAe,CAACC,MAAAA,CAAAA;AAE3C,gBAAA,IAAIQ,OAAAA,EAAS;AACX,oBAAA,MAAMjB,MAAMC,KAAK,CAACH,QAAQ,CAACa,IAAI,CAAC;AAAEF,wBAAAA,MAAAA;AAAQO,wBAAAA;AAAQ,qBAAA,CAAA;AACpD,gBAAA;AACF,YAAA;YAEA,OAAOA,OAAAA;AACT,QAAA;AACF,KAAA;AACF;;;;"}
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
 
5
- const isOfKind = (kind)=>fp.matchesProperty('kind', kind);
5
+ const isOfKind = (kind)=>_.matchesProperty('kind', kind);
6
6
  const resolveContentType = (uid)=>{
7
7
  return strapi.contentTypes[uid];
8
8
  };
9
9
  const isNotInSubjects = (subjects)=>(uid)=>!subjects.find((subject)=>subject.uid === uid);
10
- const hasProperty = fp.curry((property, subject)=>{
10
+ const hasProperty = _.curry((property, subject)=>{
11
11
  return !!subject.properties.find((prop)=>prop.value === property);
12
12
  });
13
- const getValidOptions = fp.pick([
14
- 'applyToProperties'
15
- ]);
13
+ const getValidOptions = (options)=>_.pick(options, [
14
+ 'applyToProperties'
15
+ ]);
16
16
  const toSubjectTemplate = (ct)=>({
17
17
  uid: ct.uid,
18
18
  label: ct.info.singularName,
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../../server/src/services/permission/sections-builder/utils.ts"],"sourcesContent":["import { curry, matchesProperty, pick } from 'lodash/fp';\nimport type { Internal, Struct } from '@strapi/types';\n\nconst isOfKind = (kind: unknown) => matchesProperty('kind', kind);\n\nconst resolveContentType = (uid: Internal.UID.ContentType): Struct.ContentTypeSchema => {\n return strapi.contentTypes[uid];\n};\n\nconst isNotInSubjects = (subjects: any) => (uid: unknown) =>\n !subjects.find((subject: any) => subject.uid === uid);\n\nconst hasProperty = curry((property: unknown, subject: any) => {\n return !!subject.properties.find((prop: any) => prop.value === property);\n});\n\nconst getValidOptions = pick(['applyToProperties']);\n\nconst toSubjectTemplate = (ct: any) => ({\n uid: ct.uid,\n label: ct.info.singularName,\n properties: [],\n});\n\nexport {\n isOfKind,\n resolveContentType,\n isNotInSubjects,\n hasProperty,\n getValidOptions,\n toSubjectTemplate,\n};\n"],"names":["isOfKind","kind","matchesProperty","resolveContentType","uid","strapi","contentTypes","isNotInSubjects","subjects","find","subject","hasProperty","curry","property","properties","prop","value","getValidOptions","pick","toSubjectTemplate","ct","label","info","singularName"],"mappings":";;;;AAGA,MAAMA,QAAAA,GAAW,CAACC,IAAAA,GAAkBC,kBAAAA,CAAgB,MAAA,EAAQD,IAAAA;AAE5D,MAAME,qBAAqB,CAACC,GAAAA,GAAAA;IAC1B,OAAOC,MAAAA,CAAOC,YAAY,CAACF,GAAAA,CAAI;AACjC;AAEA,MAAMG,eAAAA,GAAkB,CAACC,QAAAA,GAAkB,CAACJ,GAAAA,GAC1C,CAACI,QAAAA,CAASC,IAAI,CAAC,CAACC,OAAAA,GAAiBA,OAAAA,CAAQN,GAAG,KAAKA,GAAAA;AAEnD,MAAMO,WAAAA,GAAcC,QAAAA,CAAM,CAACC,QAAAA,EAAmBH,OAAAA,GAAAA;IAC5C,OAAO,CAAC,CAACA,OAAAA,CAAQI,UAAU,CAACL,IAAI,CAAC,CAACM,IAAAA,GAAcA,IAAAA,CAAKC,KAAK,KAAKH,QAAAA,CAAAA;AACjE,CAAA;AAEA,MAAMI,kBAAkBC,OAAAA,CAAK;AAAC,IAAA;AAAoB,CAAA;AAElD,MAAMC,iBAAAA,GAAoB,CAACC,EAAAA,IAAa;AACtChB,QAAAA,GAAAA,EAAKgB,GAAGhB,GAAG;QACXiB,KAAAA,EAAOD,EAAAA,CAAGE,IAAI,CAACC,YAAY;AAC3BT,QAAAA,UAAAA,EAAY;KACd;;;;;;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../../server/src/services/permission/sections-builder/utils.ts"],"sourcesContent":["import { pick, curry, matchesProperty } from 'lodash';\n\nimport type { Internal, Struct } from '@strapi/types';\n\nconst isOfKind = (kind: unknown) => matchesProperty('kind', kind);\n\nconst resolveContentType = (uid: Internal.UID.ContentType): Struct.ContentTypeSchema => {\n return strapi.contentTypes[uid];\n};\n\nconst isNotInSubjects = (subjects: any) => (uid: unknown) =>\n !subjects.find((subject: any) => subject.uid === uid);\n\nconst hasProperty = curry((property: unknown, subject: any) => {\n return !!subject.properties.find((prop: any) => prop.value === property);\n});\n\nconst getValidOptions = (options: object) => pick(options, ['applyToProperties']);\n\nconst toSubjectTemplate = (ct: any) => ({\n uid: ct.uid,\n label: ct.info.singularName,\n properties: [],\n});\n\nexport {\n isOfKind,\n resolveContentType,\n isNotInSubjects,\n hasProperty,\n getValidOptions,\n toSubjectTemplate,\n};\n"],"names":["isOfKind","kind","matchesProperty","resolveContentType","uid","strapi","contentTypes","isNotInSubjects","subjects","find","subject","hasProperty","curry","property","properties","prop","value","getValidOptions","options","pick","toSubjectTemplate","ct","label","info","singularName"],"mappings":";;;;AAIA,MAAMA,QAAAA,GAAW,CAACC,IAAAA,GAAkBC,iBAAAA,CAAgB,MAAA,EAAQD,IAAAA;AAE5D,MAAME,qBAAqB,CAACC,GAAAA,GAAAA;IAC1B,OAAOC,MAAAA,CAAOC,YAAY,CAACF,GAAAA,CAAI;AACjC;AAEA,MAAMG,eAAAA,GAAkB,CAACC,QAAAA,GAAkB,CAACJ,GAAAA,GAC1C,CAACI,QAAAA,CAASC,IAAI,CAAC,CAACC,OAAAA,GAAiBA,OAAAA,CAAQN,GAAG,KAAKA,GAAAA;AAEnD,MAAMO,WAAAA,GAAcC,OAAAA,CAAM,CAACC,QAAAA,EAAmBH,OAAAA,GAAAA;IAC5C,OAAO,CAAC,CAACA,OAAAA,CAAQI,UAAU,CAACL,IAAI,CAAC,CAACM,IAAAA,GAAcA,IAAAA,CAAKC,KAAK,KAAKH,QAAAA,CAAAA;AACjE,CAAA;AAEA,MAAMI,eAAAA,GAAkB,CAACC,OAAAA,GAAoBC,MAAAA,CAAKD,OAAAA,EAAS;AAAC,QAAA;AAAoB,KAAA;AAEhF,MAAME,iBAAAA,GAAoB,CAACC,EAAAA,IAAa;AACtCjB,QAAAA,GAAAA,EAAKiB,GAAGjB,GAAG;QACXkB,KAAAA,EAAOD,EAAAA,CAAGE,IAAI,CAACC,YAAY;AAC3BV,QAAAA,UAAAA,EAAY;KACd;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { curry, pick, matchesProperty } from 'lodash/fp';
1
+ import { curry, pick, matchesProperty } from 'lodash';
2
2
 
3
3
  const isOfKind = (kind)=>matchesProperty('kind', kind);
4
4
  const resolveContentType = (uid)=>{
@@ -8,9 +8,9 @@ const isNotInSubjects = (subjects)=>(uid)=>!subjects.find((subject)=>subject.uid
8
8
  const hasProperty = curry((property, subject)=>{
9
9
  return !!subject.properties.find((prop)=>prop.value === property);
10
10
  });
11
- const getValidOptions = pick([
12
- 'applyToProperties'
13
- ]);
11
+ const getValidOptions = (options)=>pick(options, [
12
+ 'applyToProperties'
13
+ ]);
14
14
  const toSubjectTemplate = (ct)=>({
15
15
  uid: ct.uid,
16
16
  label: ct.info.singularName,
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../../../../../server/src/services/permission/sections-builder/utils.ts"],"sourcesContent":["import { curry, matchesProperty, pick } from 'lodash/fp';\nimport type { Internal, Struct } from '@strapi/types';\n\nconst isOfKind = (kind: unknown) => matchesProperty('kind', kind);\n\nconst resolveContentType = (uid: Internal.UID.ContentType): Struct.ContentTypeSchema => {\n return strapi.contentTypes[uid];\n};\n\nconst isNotInSubjects = (subjects: any) => (uid: unknown) =>\n !subjects.find((subject: any) => subject.uid === uid);\n\nconst hasProperty = curry((property: unknown, subject: any) => {\n return !!subject.properties.find((prop: any) => prop.value === property);\n});\n\nconst getValidOptions = pick(['applyToProperties']);\n\nconst toSubjectTemplate = (ct: any) => ({\n uid: ct.uid,\n label: ct.info.singularName,\n properties: [],\n});\n\nexport {\n isOfKind,\n resolveContentType,\n isNotInSubjects,\n hasProperty,\n getValidOptions,\n toSubjectTemplate,\n};\n"],"names":["isOfKind","kind","matchesProperty","resolveContentType","uid","strapi","contentTypes","isNotInSubjects","subjects","find","subject","hasProperty","curry","property","properties","prop","value","getValidOptions","pick","toSubjectTemplate","ct","label","info","singularName"],"mappings":";;AAGA,MAAMA,QAAAA,GAAW,CAACC,IAAAA,GAAkBC,eAAAA,CAAgB,MAAA,EAAQD,IAAAA;AAE5D,MAAME,qBAAqB,CAACC,GAAAA,GAAAA;IAC1B,OAAOC,MAAAA,CAAOC,YAAY,CAACF,GAAAA,CAAI;AACjC;AAEA,MAAMG,eAAAA,GAAkB,CAACC,QAAAA,GAAkB,CAACJ,GAAAA,GAC1C,CAACI,QAAAA,CAASC,IAAI,CAAC,CAACC,OAAAA,GAAiBA,OAAAA,CAAQN,GAAG,KAAKA,GAAAA;AAEnD,MAAMO,WAAAA,GAAcC,KAAAA,CAAM,CAACC,QAAAA,EAAmBH,OAAAA,GAAAA;IAC5C,OAAO,CAAC,CAACA,OAAAA,CAAQI,UAAU,CAACL,IAAI,CAAC,CAACM,IAAAA,GAAcA,IAAAA,CAAKC,KAAK,KAAKH,QAAAA,CAAAA;AACjE,CAAA;AAEA,MAAMI,kBAAkBC,IAAAA,CAAK;AAAC,IAAA;AAAoB,CAAA;AAElD,MAAMC,iBAAAA,GAAoB,CAACC,EAAAA,IAAa;AACtChB,QAAAA,GAAAA,EAAKgB,GAAGhB,GAAG;QACXiB,KAAAA,EAAOD,EAAAA,CAAGE,IAAI,CAACC,YAAY;AAC3BT,QAAAA,UAAAA,EAAY;KACd;;;;"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../../../../../server/src/services/permission/sections-builder/utils.ts"],"sourcesContent":["import { pick, curry, matchesProperty } from 'lodash';\n\nimport type { Internal, Struct } from '@strapi/types';\n\nconst isOfKind = (kind: unknown) => matchesProperty('kind', kind);\n\nconst resolveContentType = (uid: Internal.UID.ContentType): Struct.ContentTypeSchema => {\n return strapi.contentTypes[uid];\n};\n\nconst isNotInSubjects = (subjects: any) => (uid: unknown) =>\n !subjects.find((subject: any) => subject.uid === uid);\n\nconst hasProperty = curry((property: unknown, subject: any) => {\n return !!subject.properties.find((prop: any) => prop.value === property);\n});\n\nconst getValidOptions = (options: object) => pick(options, ['applyToProperties']);\n\nconst toSubjectTemplate = (ct: any) => ({\n uid: ct.uid,\n label: ct.info.singularName,\n properties: [],\n});\n\nexport {\n isOfKind,\n resolveContentType,\n isNotInSubjects,\n hasProperty,\n getValidOptions,\n toSubjectTemplate,\n};\n"],"names":["isOfKind","kind","matchesProperty","resolveContentType","uid","strapi","contentTypes","isNotInSubjects","subjects","find","subject","hasProperty","curry","property","properties","prop","value","getValidOptions","options","pick","toSubjectTemplate","ct","label","info","singularName"],"mappings":";;AAIA,MAAMA,QAAAA,GAAW,CAACC,IAAAA,GAAkBC,eAAAA,CAAgB,MAAA,EAAQD,IAAAA;AAE5D,MAAME,qBAAqB,CAACC,GAAAA,GAAAA;IAC1B,OAAOC,MAAAA,CAAOC,YAAY,CAACF,GAAAA,CAAI;AACjC;AAEA,MAAMG,eAAAA,GAAkB,CAACC,QAAAA,GAAkB,CAACJ,GAAAA,GAC1C,CAACI,QAAAA,CAASC,IAAI,CAAC,CAACC,OAAAA,GAAiBA,OAAAA,CAAQN,GAAG,KAAKA,GAAAA;AAEnD,MAAMO,WAAAA,GAAcC,KAAAA,CAAM,CAACC,QAAAA,EAAmBH,OAAAA,GAAAA;IAC5C,OAAO,CAAC,CAACA,OAAAA,CAAQI,UAAU,CAACL,IAAI,CAAC,CAACM,IAAAA,GAAcA,IAAAA,CAAKC,KAAK,KAAKH,QAAAA,CAAAA;AACjE,CAAA;AAEA,MAAMI,eAAAA,GAAkB,CAACC,OAAAA,GAAoBC,IAAAA,CAAKD,OAAAA,EAAS;AAAC,QAAA;AAAoB,KAAA;AAEhF,MAAME,iBAAAA,GAAoB,CAACC,EAAAA,IAAa;AACtCjB,QAAAA,GAAAA,EAAKiB,GAAGjB,GAAG;QACXkB,KAAAA,EAAOD,EAAAA,CAAGE,IAAI,CAACC,YAAY;AAC3BV,QAAAA,UAAAA,EAAY;KACd;;;;"}
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var _ = require('lodash');
4
- var fp = require('lodash/fp');
5
4
  var utils = require('@strapi/utils');
6
5
  var index$1 = require('../domain/permission/index.js');
7
6
  var permission = require('../validation/permission.js');
@@ -12,7 +11,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
11
 
13
12
  var ___default = /*#__PURE__*/_interopDefault(_);
14
13
 
15
- /* eslint-disable @typescript-eslint/no-explicit-any */ // TODO: TS - Use database parameters interface when they are ready
16
14
  const { SUPER_ADMIN_CODE, CONTENT_TYPE_SECTION } = constants$1;
17
15
  const { createAsyncSeriesWaterfallHook } = utils.hooks;
18
16
  const { ApplicationError } = utils.errors;
@@ -23,11 +21,10 @@ const hooks = {
23
21
  const ACTIONS = {
24
22
  publish: 'plugin::content-manager.explorer.publish'
25
23
  };
26
- // @ts-expect-error lodash types
27
- const sanitizeRole = fp.omit([
28
- 'users',
29
- 'permissions'
30
- ]);
24
+ const sanitizeRole = (role)=>_.omit(role, [
25
+ 'users',
26
+ 'permissions'
27
+ ]);
31
28
  const COMPARABLE_FIELDS = [
32
29
  'conditions',
33
30
  'properties',
@@ -35,13 +32,13 @@ const COMPARABLE_FIELDS = [
35
32
  'action',
36
33
  'actionParameters'
37
34
  ];
38
- const pickComparableFields = fp.pick(COMPARABLE_FIELDS);
35
+ const pickComparableFields = (permission)=>_.pick(permission, COMPARABLE_FIELDS);
39
36
  const jsonClean = (data)=>JSON.parse(JSON.stringify(data));
40
37
  /**
41
38
  * Compare two permissions
42
39
  */ const arePermissionsEqual = (p1, p2)=>{
43
40
  if (p1.action === p2.action) {
44
- return fp.isEqual(jsonClean(pickComparableFields(p1)), jsonClean(pickComparableFields(p2)));
41
+ return _.isEqual(jsonClean(pickComparableFields(p1)), jsonClean(pickComparableFields(p2)));
45
42
  }
46
43
  return false;
47
44
  };
@@ -310,10 +307,12 @@ const getDefaultPluginPermissions = ({ isAuthor = false } = {})=>{
310
307
  const internalActions = index.getService('permission').actionProvider.values().filter((action)=>action.section === 'internal').map((action)=>action.actionId);
311
308
  const superAdmin = await index.getService('role').getSuperAdmin();
312
309
  const isSuperAdmin = superAdmin && superAdmin.id === roleId;
313
- const assignRole = fp.set('role', roleId);
310
+ const assignRole = (permission)=>({
311
+ ...permission,
312
+ role: roleId
313
+ });
314
314
  const permissionsWithRole = permissions// Add the role attribute to every permission
315
315
  .map(assignRole)// Transform each permission into a Permission instance
316
- // @ts-expect-error - lodash set doesn't resolve the type appropriately
317
316
  .map(index$1.default.create);
318
317
  const existingPermissions = await index.getService('permission').findMany({
319
318
  where: {
@@ -325,12 +324,11 @@ const getDefaultPluginPermissions = ({ isAuthor = false } = {})=>{
325
324
  'role'
326
325
  ]
327
326
  });
328
- const permissionsToAdd = fp.differenceWith(arePermissionsEqual, permissionsWithRole, existingPermissions).filter((permission)=>!internalActions.includes(permission.action));
329
- const permissionsToDelete = fp.differenceWith(arePermissionsEqual, existingPermissions, permissionsWithRole).filter((permission)=>!internalActions.includes(permission.action));
330
- const permissionsToReturn = fp.differenceBy('id', permissionsToDelete, existingPermissions);
327
+ const permissionsToAdd = _.differenceWith(permissionsWithRole, existingPermissions, arePermissionsEqual).filter((permission)=>!internalActions.includes(permission.action));
328
+ const permissionsToDelete = _.differenceWith(existingPermissions, permissionsWithRole, arePermissionsEqual).filter((permission)=>!internalActions.includes(permission.action));
329
+ const permissionsToReturn = _.differenceBy(permissionsToDelete, existingPermissions, 'id');
331
330
  if (permissionsToDelete.length > 0) {
332
- // @ts-expect-error - lodash prop doesn't resolve the type appropriately
333
- await index.getService('permission').deleteByIds(permissionsToDelete.map(fp.prop('id')));
331
+ await index.getService('permission').deleteByIds(permissionsToDelete.map((permission)=>permission?.id));
334
332
  }
335
333
  if (permissionsToAdd.length > 0) {
336
334
  const newPermissions = await addPermissions(roleId, permissionsToAdd);
@@ -347,7 +345,10 @@ const getDefaultPluginPermissions = ({ isAuthor = false } = {})=>{
347
345
  const addPermissions = async (roleId, permissions)=>{
348
346
  const { conditionProvider, createMany } = index.getService('permission');
349
347
  const { sanitizeConditions } = index$1.default;
350
- const permissionsWithRole = permissions.map(fp.set('role', roleId))// @ts-expect-error - refactor domain/permission Condition type, as it's now expecting
348
+ const permissionsWithRole = permissions.map((permission)=>({
349
+ ...permission,
350
+ role: roleId
351
+ }))// @ts-expect-error - refactor domain/permission Condition type, as it's now expecting
351
352
  // a string but it should be a Condition interface
352
353
  .map(sanitizeConditions(conditionProvider)).map(index$1.default.create);
353
354
  return createMany(permissionsWithRole);
@@ -370,7 +371,7 @@ const isContentTypeAction = (action)=>action.section === CONTENT_TYPE_SECTION;
370
371
  // Then add every other permission
371
372
  const otherPermissions = otherActions.reduce((acc, action)=>{
372
373
  const { actionId, subjects } = action;
373
- if (fp.isArray(subjects)) {
374
+ if (Array.isArray(subjects)) {
374
375
  acc.push(...subjects.map((subject)=>index$1.default.create({
375
376
  action: actionId,
376
377
  subject
@@ -390,7 +391,7 @@ const isContentTypeAction = (action)=>action.section === CONTENT_TYPE_SECTION;
390
391
  * Check if a user object includes the super admin role
391
392
  */ const hasSuperAdminRole = (user)=>{
392
393
  const roles = ___default.default.get(user, 'roles', []);
393
- return roles.map(fp.prop('code')).includes(SUPER_ADMIN_CODE);
394
+ return roles.map((role)=>role?.code).includes(SUPER_ADMIN_CODE);
394
395
  };
395
396
  const constants = {
396
397
  superAdminCode: SUPER_ADMIN_CODE