@strapi/admin 4.15.4 → 4.15.5-alpha.1

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 (200) hide show
  1. package/dist/_chunks/{AuthenticatedApp-5524c90a.mjs → AuthenticatedApp-3dc33451.mjs} +22 -22
  2. package/dist/_chunks/{AuthenticatedApp-5524c90a.mjs.map → AuthenticatedApp-3dc33451.mjs.map} +1 -1
  3. package/dist/_chunks/{AuthenticatedApp-96716173.js → AuthenticatedApp-4f5e9d2f.js} +22 -22
  4. package/dist/_chunks/{AuthenticatedApp-96716173.js.map → AuthenticatedApp-4f5e9d2f.js.map} +1 -1
  5. package/dist/_chunks/{HomePage-419bfd8c.js → HomePage-7f6b292b.js} +4 -4
  6. package/dist/_chunks/{HomePage-419bfd8c.js.map → HomePage-7f6b292b.js.map} +1 -1
  7. package/dist/_chunks/{HomePage-5a37e9c7.js → HomePage-9527f582.js} +4 -4
  8. package/dist/_chunks/{HomePage-5a37e9c7.js.map → HomePage-9527f582.js.map} +1 -1
  9. package/dist/_chunks/{HomePage-af8ae9d9.mjs → HomePage-cd238204.mjs} +4 -4
  10. package/dist/_chunks/{HomePage-af8ae9d9.mjs.map → HomePage-cd238204.mjs.map} +1 -1
  11. package/dist/_chunks/{HomePage-756a9c8e.mjs → HomePage-ffc96143.mjs} +4 -4
  12. package/dist/_chunks/{HomePage-756a9c8e.mjs.map → HomePage-ffc96143.mjs.map} +1 -1
  13. package/dist/_chunks/{InstalledPluginsPage-922ee25b.mjs → InstalledPluginsPage-61332416.mjs} +3 -3
  14. package/dist/_chunks/{InstalledPluginsPage-922ee25b.mjs.map → InstalledPluginsPage-61332416.mjs.map} +1 -1
  15. package/dist/_chunks/{InstalledPluginsPage-733c83cc.js → InstalledPluginsPage-d93fbab1.js} +3 -3
  16. package/dist/_chunks/{InstalledPluginsPage-733c83cc.js.map → InstalledPluginsPage-d93fbab1.js.map} +1 -1
  17. package/dist/_chunks/{Login-54110b81.mjs → Login-48299d05.mjs} +2 -2
  18. package/dist/_chunks/{Login-54110b81.mjs.map → Login-48299d05.mjs.map} +1 -1
  19. package/dist/_chunks/{Login-a9414070.js → Login-8c7b1206.js} +2 -2
  20. package/dist/_chunks/{Login-a9414070.js.map → Login-8c7b1206.js.map} +1 -1
  21. package/dist/_chunks/{MarketplacePage-2bb9f6c8.js → MarketplacePage-7935f8c5.js} +3 -3
  22. package/dist/_chunks/{MarketplacePage-2bb9f6c8.js.map → MarketplacePage-7935f8c5.js.map} +1 -1
  23. package/dist/_chunks/{MarketplacePage-7827f842.mjs → MarketplacePage-ebab9b26.mjs} +3 -3
  24. package/dist/_chunks/{MarketplacePage-7827f842.mjs.map → MarketplacePage-ebab9b26.mjs.map} +1 -1
  25. package/dist/_chunks/{ProfilePage-51b48d52.mjs → ProfilePage-5697e4c6.mjs} +3 -3
  26. package/dist/_chunks/{ProfilePage-51b48d52.mjs.map → ProfilePage-5697e4c6.mjs.map} +1 -1
  27. package/dist/_chunks/{ProfilePage-034b28a3.js → ProfilePage-6914e5ef.js} +3 -3
  28. package/dist/_chunks/{ProfilePage-034b28a3.js.map → ProfilePage-6914e5ef.js.map} +1 -1
  29. package/dist/_chunks/{build-55ba3e68.js → build-b285bccd.js} +4 -4
  30. package/dist/_chunks/{build-55ba3e68.js.map → build-b285bccd.js.map} +1 -1
  31. package/dist/_chunks/{build-b67ecc59.mjs → build-f011d8dc.mjs} +4 -4
  32. package/dist/_chunks/{build-b67ecc59.mjs.map → build-f011d8dc.mjs.map} +1 -1
  33. package/dist/_chunks/{constants-89ae95c6.mjs → constants-021855fe.mjs} +2 -2
  34. package/dist/_chunks/{constants-89ae95c6.mjs.map → constants-021855fe.mjs.map} +1 -1
  35. package/dist/_chunks/{constants-45f7751c.js → constants-27fee9dc.js} +5 -5
  36. package/dist/_chunks/{constants-45f7751c.js.map → constants-27fee9dc.js.map} +1 -1
  37. package/dist/_chunks/{constants-ea0a3cda.mjs → constants-464bf1b5.mjs} +5 -5
  38. package/dist/_chunks/{constants-ea0a3cda.mjs.map → constants-464bf1b5.mjs.map} +1 -1
  39. package/dist/_chunks/{constants-2d656503.js → constants-594069b7.js} +2 -2
  40. package/dist/_chunks/{constants-2d656503.js.map → constants-594069b7.js.map} +1 -1
  41. package/dist/_chunks/{constants-3fe806aa.mjs → constants-5fa6f753.mjs} +6 -6
  42. package/dist/_chunks/{constants-3fe806aa.mjs.map → constants-5fa6f753.mjs.map} +1 -1
  43. package/dist/_chunks/{constants-06e9c997.mjs → constants-ab7805d3.mjs} +3 -3
  44. package/dist/_chunks/{constants-06e9c997.mjs.map → constants-ab7805d3.mjs.map} +1 -1
  45. package/dist/_chunks/{constants-bdccd418.js → constants-c99e549a.js} +6 -6
  46. package/dist/_chunks/{constants-bdccd418.js.map → constants-c99e549a.js.map} +1 -1
  47. package/dist/_chunks/{constants-b19fe3c9.js → constants-de1431ff.js} +3 -3
  48. package/dist/_chunks/{constants-b19fe3c9.js.map → constants-de1431ff.js.map} +1 -1
  49. package/dist/_chunks/{develop-d97e7494.mjs → develop-3c9f7452.mjs} +4 -4
  50. package/dist/_chunks/{develop-d97e7494.mjs.map → develop-3c9f7452.mjs.map} +1 -1
  51. package/dist/_chunks/{develop-69e28e61.js → develop-9765d7ba.js} +4 -4
  52. package/dist/_chunks/{develop-69e28e61.js.map → develop-9765d7ba.js.map} +1 -1
  53. package/dist/_chunks/{index-37e364d9.js → index-16f63601.js} +3 -3
  54. package/dist/_chunks/{index-37e364d9.js.map → index-16f63601.js.map} +1 -1
  55. package/dist/_chunks/{index-99e697a0.js → index-1a101386.js} +3 -3
  56. package/dist/_chunks/{index-99e697a0.js.map → index-1a101386.js.map} +1 -1
  57. package/dist/_chunks/{index-fa1850fa.js → index-1b652ffb.js} +4 -4
  58. package/dist/_chunks/{index-fa1850fa.js.map → index-1b652ffb.js.map} +1 -1
  59. package/dist/_chunks/{index-a985e784.mjs → index-1b68c59f.mjs} +3 -3
  60. package/dist/_chunks/{index-a985e784.mjs.map → index-1b68c59f.mjs.map} +1 -1
  61. package/dist/_chunks/{index-7315d2b7.mjs → index-1d447dd1.mjs} +5 -5
  62. package/dist/_chunks/{index-7315d2b7.mjs.map → index-1d447dd1.mjs.map} +1 -1
  63. package/dist/_chunks/{index-1368779e.js → index-1fad9ce4.js} +3 -3
  64. package/dist/_chunks/{index-1368779e.js.map → index-1fad9ce4.js.map} +1 -1
  65. package/dist/_chunks/{index-dafa7a27.mjs → index-2361b19a.mjs} +4 -4
  66. package/dist/_chunks/{index-dafa7a27.mjs.map → index-2361b19a.mjs.map} +1 -1
  67. package/dist/_chunks/{index-6298ffb7.js → index-25a6d0ba.js} +2 -2
  68. package/dist/_chunks/{index-6298ffb7.js.map → index-25a6d0ba.js.map} +1 -1
  69. package/dist/_chunks/{index-8e785228.js → index-29f725ef.js} +20 -20
  70. package/dist/_chunks/{index-8e785228.js.map → index-29f725ef.js.map} +1 -1
  71. package/dist/_chunks/{index-83e78ac3.js → index-2a513e27.js} +6 -6
  72. package/dist/_chunks/{index-83e78ac3.js.map → index-2a513e27.js.map} +1 -1
  73. package/dist/_chunks/{index-b72c9b09.mjs → index-2afcd90d.mjs} +3 -3
  74. package/dist/_chunks/{index-b72c9b09.mjs.map → index-2afcd90d.mjs.map} +1 -1
  75. package/dist/_chunks/{index-bf66c659.js → index-2d68f91c.js} +4 -4
  76. package/dist/_chunks/{index-bf66c659.js.map → index-2d68f91c.js.map} +1 -1
  77. package/dist/_chunks/{index-ceca4bd1.mjs → index-32a85ff2.mjs} +3 -3
  78. package/dist/_chunks/{index-ceca4bd1.mjs.map → index-32a85ff2.mjs.map} +1 -1
  79. package/dist/_chunks/{index-c7f06c75.js → index-36bc3344.js} +8 -8
  80. package/dist/_chunks/{index-c7f06c75.js.map → index-36bc3344.js.map} +1 -1
  81. package/dist/_chunks/{index-a4d005f4.mjs → index-399bd1d4.mjs} +3 -3
  82. package/dist/_chunks/{index-a4d005f4.mjs.map → index-399bd1d4.mjs.map} +1 -1
  83. package/dist/_chunks/{index-171f253e.js → index-39ddfa9d.js} +4 -4
  84. package/dist/_chunks/{index-171f253e.js.map → index-39ddfa9d.js.map} +1 -1
  85. package/dist/_chunks/{index-131e8a0f.js → index-41123d19.js} +3 -3
  86. package/dist/_chunks/{index-131e8a0f.js.map → index-41123d19.js.map} +1 -1
  87. package/dist/_chunks/{index-04538774.js → index-441a4430.js} +3 -3
  88. package/dist/_chunks/{index-04538774.js.map → index-441a4430.js.map} +1 -1
  89. package/dist/_chunks/{index-1df9f98e.mjs → index-491a644c.mjs} +4 -4
  90. package/dist/_chunks/{index-1df9f98e.mjs.map → index-491a644c.mjs.map} +1 -1
  91. package/dist/_chunks/{index-cfb11e7f.mjs → index-4d908a6a.mjs} +4 -4
  92. package/dist/_chunks/{index-cfb11e7f.mjs.map → index-4d908a6a.mjs.map} +1 -1
  93. package/dist/_chunks/{index-696b3624.mjs → index-4fcc02a8.mjs} +2 -2
  94. package/dist/_chunks/{index-696b3624.mjs.map → index-4fcc02a8.mjs.map} +1 -1
  95. package/dist/_chunks/{index-e6916e51.js → index-597d52e6.js} +5 -5
  96. package/dist/_chunks/{index-e6916e51.js.map → index-597d52e6.js.map} +1 -1
  97. package/dist/_chunks/{index-4b209bd2.js → index-5c450a5d.js} +3 -3
  98. package/dist/_chunks/{index-4b209bd2.js.map → index-5c450a5d.js.map} +1 -1
  99. package/dist/_chunks/{index-d45547fd.mjs → index-628523c3.mjs} +3 -3
  100. package/dist/_chunks/{index-d45547fd.mjs.map → index-628523c3.mjs.map} +1 -1
  101. package/dist/_chunks/{index-cce8ecb6.js → index-62b7bdbe.js} +80 -45
  102. package/dist/_chunks/index-62b7bdbe.js.map +1 -0
  103. package/dist/_chunks/{index-d0efe393.mjs → index-6720b4ee.mjs} +2 -2
  104. package/dist/_chunks/{index-d0efe393.mjs.map → index-6720b4ee.mjs.map} +1 -1
  105. package/dist/_chunks/{index-c73f17d2.js → index-70170c58.js} +5 -5
  106. package/dist/_chunks/{index-c73f17d2.js.map → index-70170c58.js.map} +1 -1
  107. package/dist/_chunks/{index-b2883169.mjs → index-765eaefa.mjs} +5 -5
  108. package/dist/_chunks/{index-b2883169.mjs.map → index-765eaefa.mjs.map} +1 -1
  109. package/dist/_chunks/{index-9d6849bf.js → index-7b4485be.js} +3 -3
  110. package/dist/_chunks/{index-9d6849bf.js.map → index-7b4485be.js.map} +1 -1
  111. package/dist/_chunks/{index-72d81abf.mjs → index-83c96824.mjs} +2 -2
  112. package/dist/_chunks/{index-72d81abf.mjs.map → index-83c96824.mjs.map} +1 -1
  113. package/dist/_chunks/{index-3407e4e6.mjs → index-86e4d4f7.mjs} +6 -6
  114. package/dist/_chunks/{index-3407e4e6.mjs.map → index-86e4d4f7.mjs.map} +1 -1
  115. package/dist/_chunks/{index-90ed6722.mjs → index-88ed5f05.mjs} +8 -8
  116. package/dist/_chunks/{index-90ed6722.mjs.map → index-88ed5f05.mjs.map} +1 -1
  117. package/dist/_chunks/{index-7182ce8e.mjs → index-8f82d8d1.mjs} +4 -4
  118. package/dist/_chunks/{index-7182ce8e.mjs.map → index-8f82d8d1.mjs.map} +1 -1
  119. package/dist/_chunks/{index-fb6f634d.mjs → index-90670cc5.mjs} +3 -3
  120. package/dist/_chunks/{index-fb6f634d.mjs.map → index-90670cc5.mjs.map} +1 -1
  121. package/dist/_chunks/{index-dfdb9e58.mjs → index-9abdeb03.mjs} +3 -3
  122. package/dist/_chunks/{index-dfdb9e58.mjs.map → index-9abdeb03.mjs.map} +1 -1
  123. package/dist/_chunks/{index-10f599c1.js → index-9aeead4f.js} +3 -3
  124. package/dist/_chunks/{index-10f599c1.js.map → index-9aeead4f.js.map} +1 -1
  125. package/dist/_chunks/{index-e0bd1ac1.mjs → index-9eb58279.mjs} +20 -20
  126. package/dist/_chunks/{index-e0bd1ac1.mjs.map → index-9eb58279.mjs.map} +1 -1
  127. package/dist/_chunks/{index-e412fafd.js → index-a06be1eb.js} +6 -6
  128. package/dist/_chunks/{index-e412fafd.js.map → index-a06be1eb.js.map} +1 -1
  129. package/dist/_chunks/{index-02f58272.js → index-a34e5d12.js} +5 -5
  130. package/dist/_chunks/{index-02f58272.js.map → index-a34e5d12.js.map} +1 -1
  131. package/dist/_chunks/{index-8c244057.mjs → index-a4501c11.mjs} +3 -3
  132. package/dist/_chunks/{index-8c244057.mjs.map → index-a4501c11.mjs.map} +1 -1
  133. package/dist/_chunks/{index-a47f4f4e.mjs → index-ad5a8a6c.mjs} +5 -5
  134. package/dist/_chunks/{index-a47f4f4e.mjs.map → index-ad5a8a6c.mjs.map} +1 -1
  135. package/dist/_chunks/{index-6eb4b9c5.mjs → index-ad9874a3.mjs} +3 -3
  136. package/dist/_chunks/{index-6eb4b9c5.mjs.map → index-ad9874a3.mjs.map} +1 -1
  137. package/dist/_chunks/{index-3bfde142.js → index-aea536d3.js} +2 -2
  138. package/dist/_chunks/{index-3bfde142.js.map → index-aea536d3.js.map} +1 -1
  139. package/dist/_chunks/{index-17faf42d.js → index-b5cec828.js} +3 -3
  140. package/dist/_chunks/{index-17faf42d.js.map → index-b5cec828.js.map} +1 -1
  141. package/dist/_chunks/{index-3a75aa07.mjs → index-bb41a0b4.mjs} +5 -5
  142. package/dist/_chunks/{index-3a75aa07.mjs.map → index-bb41a0b4.mjs.map} +1 -1
  143. package/dist/_chunks/{index-44360544.mjs → index-c075b5a1.mjs} +78 -43
  144. package/dist/_chunks/index-c075b5a1.mjs.map +1 -0
  145. package/dist/_chunks/{index-35766285.js → index-c4ab53cb.js} +4 -4
  146. package/dist/_chunks/{index-35766285.js.map → index-c4ab53cb.js.map} +1 -1
  147. package/dist/_chunks/{index-7bb8a3f2.mjs → index-c77e4b9e.mjs} +4 -4
  148. package/dist/_chunks/{index-7bb8a3f2.mjs.map → index-c77e4b9e.mjs.map} +1 -1
  149. package/dist/_chunks/{index-fa82ab34.mjs → index-d015b499.mjs} +3 -3
  150. package/dist/_chunks/{index-fa82ab34.mjs.map → index-d015b499.mjs.map} +1 -1
  151. package/dist/_chunks/{index-b171513f.js → index-d973d4aa.js} +3 -3
  152. package/dist/_chunks/{index-b171513f.js.map → index-d973d4aa.js.map} +1 -1
  153. package/dist/_chunks/{index-f2acdf04.mjs → index-dd7c79dd.mjs} +3 -3
  154. package/dist/_chunks/{index-f2acdf04.mjs.map → index-dd7c79dd.mjs.map} +1 -1
  155. package/dist/_chunks/{index-4fa922cc.mjs → index-ded977f2.mjs} +3 -3
  156. package/dist/_chunks/{index-4fa922cc.mjs.map → index-ded977f2.mjs.map} +1 -1
  157. package/dist/_chunks/{index-37f67695.mjs → index-e69daec5.mjs} +5 -5
  158. package/dist/_chunks/{index-37f67695.mjs.map → index-e69daec5.mjs.map} +1 -1
  159. package/dist/_chunks/{index-2459dded.mjs → index-eaa2c758.mjs} +4 -4
  160. package/dist/_chunks/{index-2459dded.mjs.map → index-eaa2c758.mjs.map} +1 -1
  161. package/dist/_chunks/{index-aa4ede2e.js → index-ed8c4e0c.js} +4 -4
  162. package/dist/_chunks/{index-aa4ede2e.js.map → index-ed8c4e0c.js.map} +1 -1
  163. package/dist/_chunks/{index-fa6a1d8a.js → index-efa54e88.js} +5 -5
  164. package/dist/_chunks/{index-fa6a1d8a.js.map → index-efa54e88.js.map} +1 -1
  165. package/dist/_chunks/{index-a08ce4ed.js → index-f03ae868.js} +5 -5
  166. package/dist/_chunks/{index-a08ce4ed.js.map → index-f03ae868.js.map} +1 -1
  167. package/dist/_chunks/{index-4c3eb885.mjs → index-f1c47f19.mjs} +6 -6
  168. package/dist/_chunks/{index-4c3eb885.mjs.map → index-f1c47f19.mjs.map} +1 -1
  169. package/dist/_chunks/{index-a51a2eb8.mjs → index-f273efd9.mjs} +3 -3
  170. package/dist/_chunks/{index-a51a2eb8.mjs.map → index-f273efd9.mjs.map} +1 -1
  171. package/dist/_chunks/{index-09ae6db3.js → index-f5225f7c.js} +3 -3
  172. package/dist/_chunks/{index-09ae6db3.js.map → index-f5225f7c.js.map} +1 -1
  173. package/dist/_chunks/{index-906e4561.js → index-f9594081.js} +5 -5
  174. package/dist/_chunks/{index-906e4561.js.map → index-f9594081.js.map} +1 -1
  175. package/dist/_chunks/{index-cfe5eadd.js → index-fc1b2e24.js} +2 -2
  176. package/dist/_chunks/{index-cfe5eadd.js.map → index-fc1b2e24.js.map} +1 -1
  177. package/dist/_chunks/{index-15983380.js → index-fd22c729.js} +3 -3
  178. package/dist/_chunks/{index-15983380.js.map → index-fd22c729.js.map} +1 -1
  179. package/dist/_chunks/{index-44c0c7bf.js → index-fd519600.js} +3 -3
  180. package/dist/_chunks/{index-44c0c7bf.js.map → index-fd519600.js.map} +1 -1
  181. package/dist/_chunks/{index-f122bd36.mjs → index-feef2a5d.mjs} +5 -5
  182. package/dist/_chunks/{index-f122bd36.mjs.map → index-feef2a5d.mjs.map} +1 -1
  183. package/dist/_chunks/{index-414cde92.js → index-ff1ccfdf.js} +4 -4
  184. package/dist/_chunks/{index-414cde92.js.map → index-ff1ccfdf.js.map} +1 -1
  185. package/dist/_chunks/{schema-3e2e2e31.mjs → schema-2cfc666b.mjs} +2 -2
  186. package/dist/_chunks/{schema-3e2e2e31.mjs.map → schema-2cfc666b.mjs.map} +1 -1
  187. package/dist/_chunks/{schema-672225f4.js → schema-b443a274.js} +2 -2
  188. package/dist/_chunks/{schema-672225f4.js.map → schema-b443a274.js.map} +1 -1
  189. package/dist/_chunks/{validateWorkflow-f5a93683.mjs → validateWorkflow-02bdade4.mjs} +3 -3
  190. package/dist/_chunks/{validateWorkflow-f5a93683.mjs.map → validateWorkflow-02bdade4.mjs.map} +1 -1
  191. package/dist/_chunks/{validateWorkflow-9445bcae.js → validateWorkflow-3e09b68c.js} +3 -3
  192. package/dist/_chunks/{validateWorkflow-9445bcae.js.map → validateWorkflow-3e09b68c.js.map} +1 -1
  193. package/dist/admin/index.js +1 -1
  194. package/dist/admin/index.mjs +1 -1
  195. package/dist/admin/src/render.d.ts +2 -1
  196. package/dist/cli.js +3 -3
  197. package/dist/cli.mjs +3 -3
  198. package/package.json +13 -13
  199. package/dist/_chunks/index-44360544.mjs.map +0 -1
  200. package/dist/_chunks/index-cce8ecb6.js.map +0 -1
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const helperPlugin = require("@strapi/helper-plugin");
5
5
  const reactRedux = require("react-redux");
6
- const AuthenticatedApp = require("./AuthenticatedApp-96716173.js");
6
+ const AuthenticatedApp = require("./AuthenticatedApp-4f5e9d2f.js");
7
7
  const React = require("react");
8
8
  const designSystem = require("@strapi/design-system");
9
9
  const Icons = require("@strapi/icons");
@@ -15,7 +15,7 @@ const produce = require("immer");
15
15
  require("react-query");
16
16
  require("semver/functions/lt");
17
17
  require("semver/functions/valid");
18
- require("./index-83e78ac3.js");
18
+ require("./index-2a513e27.js");
19
19
  require("react-dom/client");
20
20
  require("invariant");
21
21
  require("lodash/isFunction");
@@ -362,4 +362,4 @@ const ProtectedListPage = () => {
362
362
  return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: permissions.settings.roles.main, children: /* @__PURE__ */ jsxRuntime.jsx(RoleListPage, {}) });
363
363
  };
364
364
  exports.default = ProtectedListPage;
365
- //# sourceMappingURL=index-4b209bd2.js.map
365
+ //# sourceMappingURL=index-5c450a5d.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-4b209bd2.js","sources":["../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/EmptyRole/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/reducer.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js"],"sourcesContent":["export default () => 'todo empty role';\n","import React from 'react';\n\nimport { Box, Flex, IconButton, Td, Tr, Typography } from '@strapi/design-system';\nimport { onRowClick, pxToRem, stopPropagation } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleRow = ({ id, name, description, usersCount, icons, rowIndex, canUpdate }) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n {...(canUpdate\n ? onRowClick({\n fn: editObject.onClick,\n })\n : {})}\n >\n <Td maxWidth={pxToRem(130)}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={pxToRem(250)}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" {...stopPropagation}>\n {icons.map((icon, i) =>\n icon ? (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton onClick={icon.onClick} label={icon.label} noBorder icon={icon.icon} />\n </Box>\n ) : null\n )}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nRoleRow.propTypes = {\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n usersCount: PropTypes.number.isRequired,\n icons: PropTypes.array.isRequired,\n rowIndex: PropTypes.number.isRequired,\n canUpdate: PropTypes.bool,\n};\n\nRoleRow.defaultProps = {\n canUpdate: false,\n};\n\nexport default RoleRow;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nexport const initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { useCallback, useReducer, useState } from 'react';\n\nimport {\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n Main,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n ConfirmDialog,\n getFetchClient,\n LoadingIndicatorPage,\n SearchURLQuery,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useQueryParams,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { selectAdminPermissions } from '../../../../../selectors';\n\nimport EmptyRole from './components/EmptyRole';\nimport BaseRoleRow from './components/RoleRow';\nimport reducer, { initialState } from './reducer';\n\nconst useRoleActions = ({ canCreate, canDelete, canUpdate, refetchRoles }) => {\n const { formatMessage } = useIntl();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = useState(false);\n const { push } = useHistory();\n const [{ selectedRoles, showModalConfirmButtonLoading, roleToDelete }, dispatch] = useReducer(\n reducer,\n initialState\n );\n\n const { post } = getFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n handleToggleModal();\n };\n\n const onRoleDuplicate = useCallback(\n (id) => {\n push(`/settings/roles/duplicate/${id}`);\n },\n [push]\n );\n\n const handleNewRoleClick = () => push('/settings/roles/new');\n\n const onRoleRemove = useCallback((roleId) => {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: roleId,\n });\n\n handleToggleModal();\n }, []);\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleGoTo = useCallback(\n (id) => {\n push(`/settings/roles/${id}`);\n },\n [push]\n );\n\n const handleClickDelete = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: { id: 'Roles.ListPage.notification.delete-not-allowed' },\n });\n } else {\n onRoleRemove(role.id);\n }\n },\n [toggleNotification, onRoleRemove]\n );\n\n const handleClickDuplicate = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n onRoleDuplicate(role.id);\n },\n [onRoleDuplicate]\n );\n\n const getIcons = useCallback(\n (role) => [\n ...(canCreate\n ? [\n {\n onClick: (e) => handleClickDuplicate(e, role),\n label: formatMessage({ id: 'app.utils.duplicate', defaultMessage: 'Duplicate' }),\n icon: <Duplicate />,\n },\n ]\n : []),\n ...(canUpdate\n ? [\n {\n onClick: () => handleGoTo(role.id),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n icon: <Pencil />,\n },\n ]\n : []),\n ...(canDelete\n ? [\n {\n onClick: (e) => handleClickDelete(e, role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n icon: <Trash />,\n },\n ]\n : []),\n ],\n [\n formatMessage,\n handleClickDelete,\n handleClickDuplicate,\n handleGoTo,\n canCreate,\n canUpdate,\n canDelete,\n ]\n );\n\n return {\n handleNewRoleClick,\n getIcons,\n selectedRoles,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n };\n};\n\nconst RoleListPage = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n const permissions = useSelector(selectAdminPermissions);\n const [{ query }] = useQueryParams();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings.roles);\n\n const {\n roles,\n isLoading,\n refetch: refetchRoles,\n } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n cacheTime: 0,\n enabled: !isLoadingForPermissions && canRead,\n }\n );\n\n const {\n handleNewRoleClick,\n getIcons,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n } = useRoleActions({ refetchRoles, canCreate, canDelete, canUpdate });\n\n // ! TODO - Show the search bar only if the user is allowed to read - add the search input\n // canRead\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return (\n <Main>\n <LoadingIndicatorPage />\n </Main>\n );\n }\n\n const title = formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n });\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <HeaderLayout\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\">\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={title}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n as=\"h2\"\n />\n {canRead && (\n <ActionLayout\n startActions={\n <SearchURLQuery\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n }\n />\n )}\n {canRead && (\n <ContentLayout>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <BaseRoleRow\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={getIcons(role)}\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n {!rowCount && !isLoading && <EmptyRole />}\n </ContentLayout>\n )}\n <ConfirmDialog\n isOpen={isWarningDeleteAllOpened}\n onConfirm={handleDeleteData}\n isConfirmButtonLoading={showModalConfirmButtonLoading}\n onToggleDialog={handleToggleModal}\n />\n </Main>\n );\n};\n\nexport default RoleListPage;\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport ListPage from '../ListPage';\n\nconst ProtectedListPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.roles.main}>\n <ListPage />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedListPage;\n"],"names":["useIntl","jsxs","Tr","onRowClick","jsx","Td","pxToRem","Typography","Flex","stopPropagation","Box","IconButton","PropTypes","produce","useAPIErrorHandler","useNotification","useState","useHistory","useReducer","getFetchClient","useCallback","Duplicate","Pencil","Trash","useFocusWhenNavigate","useSelector","selectAdminPermissions","useQueryParams","useRBAC","useAdminRoles","Main","LoadingIndicatorPage","SettingsPageTitle","HeaderLayout","Button","Plus","ActionLayout","SearchURLQuery","ContentLayout","Table","TFooter","Thead","Th","VisuallyHidden","Tbody","BaseRoleRow","ConfirmDialog","CheckPagePermissions","ListPage"],"mappings":"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"}
1
+ {"version":3,"file":"index-5c450a5d.js","sources":["../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/EmptyRole/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/reducer.js","../../admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js","../../admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js"],"sourcesContent":["export default () => 'todo empty role';\n","import React from 'react';\n\nimport { Box, Flex, IconButton, Td, Tr, Typography } from '@strapi/design-system';\nimport { onRowClick, pxToRem, stopPropagation } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst RoleRow = ({ id, name, description, usersCount, icons, rowIndex, canUpdate }) => {\n const { formatMessage } = useIntl();\n const [, editObject] = icons;\n\n const usersCountText = formatMessage(\n {\n id: `Roles.RoleRow.user-count`,\n defaultMessage: '{number, plural, =0 {# user} one {# user} other {# users}}',\n },\n { number: usersCount }\n );\n\n return (\n <Tr\n aria-rowindex={rowIndex}\n key={id}\n {...(canUpdate\n ? onRowClick({\n fn: editObject.onClick,\n })\n : {})}\n >\n <Td maxWidth={pxToRem(130)}>\n <Typography ellipsis textColor=\"neutral800\">\n {name}\n </Typography>\n </Td>\n <Td maxWidth={pxToRem(250)}>\n <Typography ellipsis textColor=\"neutral800\">\n {description}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{usersCountText}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\" {...stopPropagation}>\n {icons.map((icon, i) =>\n icon ? (\n <Box key={icon.label} paddingLeft={i === 0 ? 0 : 1}>\n <IconButton onClick={icon.onClick} label={icon.label} noBorder icon={icon.icon} />\n </Box>\n ) : null\n )}\n </Flex>\n </Td>\n </Tr>\n );\n};\n\nRoleRow.propTypes = {\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n usersCount: PropTypes.number.isRequired,\n icons: PropTypes.array.isRequired,\n rowIndex: PropTypes.number.isRequired,\n canUpdate: PropTypes.bool,\n};\n\nRoleRow.defaultProps = {\n canUpdate: false,\n};\n\nexport default RoleRow;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nexport const initialState = {\n roleToDelete: null,\n showModalConfirmButtonLoading: false,\n shouldRefetchData: false,\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_REMOVE_ROLES': {\n draftState.showModalConfirmButtonLoading = true;\n break;\n }\n case 'ON_REMOVE_ROLES_SUCCEEDED': {\n draftState.shouldRefetchData = true;\n draftState.roleToDelete = null;\n break;\n }\n case 'RESET_DATA_TO_DELETE': {\n draftState.shouldRefetchData = false;\n draftState.roleToDelete = null;\n draftState.showModalConfirmButtonLoading = false;\n break;\n }\n case 'SET_ROLE_TO_DELETE': {\n draftState.roleToDelete = action.id;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { useCallback, useReducer, useState } from 'react';\n\nimport {\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n Main,\n Table,\n Tbody,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n ConfirmDialog,\n getFetchClient,\n LoadingIndicatorPage,\n SearchURLQuery,\n SettingsPageTitle,\n useAPIErrorHandler,\n useFocusWhenNavigate,\n useQueryParams,\n useNotification,\n useRBAC,\n} from '@strapi/helper-plugin';\nimport { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../hooks/useAdminRoles';\nimport { selectAdminPermissions } from '../../../../../selectors';\n\nimport EmptyRole from './components/EmptyRole';\nimport BaseRoleRow from './components/RoleRow';\nimport reducer, { initialState } from './reducer';\n\nconst useRoleActions = ({ canCreate, canDelete, canUpdate, refetchRoles }) => {\n const { formatMessage } = useIntl();\n const { formatAPIError } = useAPIErrorHandler();\n const toggleNotification = useNotification();\n const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = useState(false);\n const { push } = useHistory();\n const [{ selectedRoles, showModalConfirmButtonLoading, roleToDelete }, dispatch] = useReducer(\n reducer,\n initialState\n );\n\n const { post } = getFetchClient();\n\n const handleDeleteData = async () => {\n try {\n dispatch({\n type: 'ON_REMOVE_ROLES',\n });\n\n await post('/admin/roles/batch-delete', {\n ids: [roleToDelete],\n });\n\n await refetchRoles();\n\n dispatch({\n type: 'RESET_DATA_TO_DELETE',\n });\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n }\n handleToggleModal();\n };\n\n const onRoleDuplicate = useCallback(\n (id) => {\n push(`/settings/roles/duplicate/${id}`);\n },\n [push]\n );\n\n const handleNewRoleClick = () => push('/settings/roles/new');\n\n const onRoleRemove = useCallback((roleId) => {\n dispatch({\n type: 'SET_ROLE_TO_DELETE',\n id: roleId,\n });\n\n handleToggleModal();\n }, []);\n\n const handleToggleModal = () => setIsWarningDeleteAllOpenend((prev) => !prev);\n\n const handleGoTo = useCallback(\n (id) => {\n push(`/settings/roles/${id}`);\n },\n [push]\n );\n\n const handleClickDelete = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (role.usersCount) {\n toggleNotification({\n type: 'info',\n message: { id: 'Roles.ListPage.notification.delete-not-allowed' },\n });\n } else {\n onRoleRemove(role.id);\n }\n },\n [toggleNotification, onRoleRemove]\n );\n\n const handleClickDuplicate = useCallback(\n (e, role) => {\n e.preventDefault();\n e.stopPropagation();\n onRoleDuplicate(role.id);\n },\n [onRoleDuplicate]\n );\n\n const getIcons = useCallback(\n (role) => [\n ...(canCreate\n ? [\n {\n onClick: (e) => handleClickDuplicate(e, role),\n label: formatMessage({ id: 'app.utils.duplicate', defaultMessage: 'Duplicate' }),\n icon: <Duplicate />,\n },\n ]\n : []),\n ...(canUpdate\n ? [\n {\n onClick: () => handleGoTo(role.id),\n label: formatMessage({ id: 'app.utils.edit', defaultMessage: 'Edit' }),\n icon: <Pencil />,\n },\n ]\n : []),\n ...(canDelete\n ? [\n {\n onClick: (e) => handleClickDelete(e, role),\n label: formatMessage({ id: 'global.delete', defaultMessage: 'Delete' }),\n icon: <Trash />,\n },\n ]\n : []),\n ],\n [\n formatMessage,\n handleClickDelete,\n handleClickDuplicate,\n handleGoTo,\n canCreate,\n canUpdate,\n canDelete,\n ]\n );\n\n return {\n handleNewRoleClick,\n getIcons,\n selectedRoles,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n };\n};\n\nconst RoleListPage = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n const permissions = useSelector(selectAdminPermissions);\n const [{ query }] = useQueryParams();\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canCreate, canDelete, canRead, canUpdate },\n } = useRBAC(permissions.settings.roles);\n\n const {\n roles,\n isLoading,\n refetch: refetchRoles,\n } = useAdminRoles(\n { filters: query?._q ? { name: { $containsi: query._q } } : undefined },\n {\n cacheTime: 0,\n enabled: !isLoadingForPermissions && canRead,\n }\n );\n\n const {\n handleNewRoleClick,\n getIcons,\n isWarningDeleteAllOpened,\n showModalConfirmButtonLoading,\n handleToggleModal,\n handleDeleteData,\n } = useRoleActions({ refetchRoles, canCreate, canDelete, canUpdate });\n\n // ! TODO - Show the search bar only if the user is allowed to read - add the search input\n // canRead\n\n const rowCount = roles.length + 1;\n const colCount = 6;\n\n if (isLoadingForPermissions) {\n return (\n <Main>\n <LoadingIndicatorPage />\n </Main>\n );\n }\n\n const title = formatMessage({\n id: 'global.roles',\n defaultMessage: 'roles',\n });\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <HeaderLayout\n primaryAction={\n canCreate ? (\n <Button onClick={handleNewRoleClick} startIcon={<Plus />} size=\"S\">\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </Button>\n ) : null\n }\n title={title}\n subtitle={formatMessage({\n id: 'Settings.roles.list.description',\n defaultMessage: 'List of roles',\n })}\n as=\"h2\"\n />\n {canRead && (\n <ActionLayout\n startActions={\n <SearchURLQuery\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n }\n />\n )}\n {canRead && (\n <ContentLayout>\n <Table\n colCount={colCount}\n rowCount={rowCount}\n footer={\n canCreate ? (\n <TFooter onClick={handleNewRoleClick} icon={<Plus />}>\n {formatMessage({\n id: 'Settings.roles.list.button.add',\n defaultMessage: 'Add new role',\n })}\n </TFooter>\n ) : null\n }\n >\n <Thead>\n <Tr aria-rowindex={1}>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({\n id: 'global.actions',\n defaultMessage: 'Actions',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {roles?.map((role, index) => (\n <BaseRoleRow\n key={role.id}\n id={role.id}\n name={role.name}\n description={role.description}\n usersCount={role.usersCount}\n icons={getIcons(role)}\n rowIndex={index + 2}\n canUpdate={canUpdate}\n />\n ))}\n </Tbody>\n </Table>\n {!rowCount && !isLoading && <EmptyRole />}\n </ContentLayout>\n )}\n <ConfirmDialog\n isOpen={isWarningDeleteAllOpened}\n onConfirm={handleDeleteData}\n isConfirmButtonLoading={showModalConfirmButtonLoading}\n onToggleDialog={handleToggleModal}\n />\n </Main>\n );\n};\n\nexport default RoleListPage;\n","import React from 'react';\n\nimport { CheckPagePermissions } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport ListPage from '../ListPage';\n\nconst ProtectedListPage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings.roles.main}>\n <ListPage />\n </CheckPagePermissions>\n );\n};\n\nexport default ProtectedListPage;\n"],"names":["useIntl","jsxs","Tr","onRowClick","jsx","Td","pxToRem","Typography","Flex","stopPropagation","Box","IconButton","PropTypes","produce","useAPIErrorHandler","useNotification","useState","useHistory","useReducer","getFetchClient","useCallback","Duplicate","Pencil","Trash","useFocusWhenNavigate","useSelector","selectAdminPermissions","useQueryParams","useRBAC","useAdminRoles","Main","LoadingIndicatorPage","SettingsPageTitle","HeaderLayout","Button","Plus","ActionLayout","SearchURLQuery","ContentLayout","Table","TFooter","Thead","Th","VisuallyHidden","Tbody","BaseRoleRow","ConfirmDialog","CheckPagePermissions","ListPage"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
- import { a as EventTable } from "./index-ceca4bd1.mjs";
2
+ import { a as EventTable } from "./index-32a85ff2.mjs";
3
3
  import "react";
4
4
  import "@strapi/design-system";
5
5
  import "@strapi/helper-plugin";
@@ -11,7 +11,7 @@ import "@strapi/icons";
11
11
  import "formik";
12
12
  import "prop-types";
13
13
  import "react-intl";
14
- import "./index-4c3eb885.mjs";
14
+ import "./index-f1c47f19.mjs";
15
15
  import "react-dom/client";
16
16
  import "invariant";
17
17
  import "lodash/isFunction";
@@ -48,4 +48,4 @@ function EventTableEE() {
48
48
  export {
49
49
  EventTableEE
50
50
  };
51
- //# sourceMappingURL=index-d45547fd.mjs.map
51
+ //# sourceMappingURL=index-628523c3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-d45547fd.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/EventTableEE.js"],"sourcesContent":["import React from 'react';\n\nimport EventTable from '../../../../../../../../../../admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/Events';\n\nconst events = {\n 'review-workflows': ['review-workflows.updateEntryStage'],\n};\n\nconst getHeaders = () => {\n return [{ id: 'review-workflows.updateEntryStage', defaultMessage: 'Stage Change' }];\n};\n\nexport function EventTableEE() {\n return (\n <EventTable.Root>\n <EventTable.Headers />\n <EventTable.Body />\n <EventTable.Headers getHeaders={getHeaders} />\n <EventTable.Body providedEvents={events} />\n </EventTable.Root>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,SAAS;AAAA,EACb,oBAAoB,CAAC,mCAAmC;AAC1D;AAEA,MAAM,aAAa,MAAM;AACvB,SAAO,CAAC,EAAE,IAAI,qCAAqC,gBAAgB,eAAgB,CAAA;AACrF;AAEO,SAAS,eAAe;AAE3B,SAAA,qBAAC,WAAW,MAAX,EACC,UAAA;AAAA,IAAC,oBAAA,WAAW,SAAX,EAAmB;AAAA,IACpB,oBAAC,WAAW,MAAX,EAAgB;AAAA,IAChB,oBAAA,WAAW,SAAX,EAAmB,WAAwB,CAAA;AAAA,IAC3C,oBAAA,WAAW,MAAX,EAAgB,gBAAgB,OAAQ,CAAA;AAAA,EAC3C,EAAA,CAAA;AAEJ;"}
1
+ {"version":3,"file":"index-628523c3.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/EventTableEE.js"],"sourcesContent":["import React from 'react';\n\nimport EventTable from '../../../../../../../../../../admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/Events';\n\nconst events = {\n 'review-workflows': ['review-workflows.updateEntryStage'],\n};\n\nconst getHeaders = () => {\n return [{ id: 'review-workflows.updateEntryStage', defaultMessage: 'Stage Change' }];\n};\n\nexport function EventTableEE() {\n return (\n <EventTable.Root>\n <EventTable.Headers />\n <EventTable.Body />\n <EventTable.Headers getHeaders={getHeaders} />\n <EventTable.Body providedEvents={events} />\n </EventTable.Root>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,SAAS;AAAA,EACb,oBAAoB,CAAC,mCAAmC;AAC1D;AAEA,MAAM,aAAa,MAAM;AACvB,SAAO,CAAC,EAAE,IAAI,qCAAqC,gBAAgB,eAAgB,CAAA;AACrF;AAEO,SAAS,eAAe;AAE3B,SAAA,qBAAC,WAAW,MAAX,EACC,UAAA;AAAA,IAAC,oBAAA,WAAW,SAAX,EAAmB;AAAA,IACpB,oBAAC,WAAW,MAAX,EAAgB;AAAA,IAChB,oBAAA,WAAW,SAAX,EAAmB,WAAwB,CAAA;AAAA,IAC3C,oBAAA,WAAW,MAAX,EAAgB,gBAAgB,OAAQ,CAAA;AAAA,EAC3C,EAAA,CAAA;AAEJ;"}
@@ -49,12 +49,12 @@ const findRoot = require("find-root");
49
49
  const node = require("esbuild-register/dist/node");
50
50
  const boxen = require("boxen");
51
51
  const chalk = require("chalk");
52
- const syncFs = require("node:fs");
53
- const camelCase = require("lodash/camelCase");
54
52
  const browserslist = require("browserslist");
55
53
  const strapiFactory = require("@strapi/strapi");
56
54
  const utils = require("@strapi/utils");
57
55
  const dotenv = require("dotenv");
56
+ const fs$1 = require("node:fs");
57
+ const camelCase = require("lodash/camelCase");
58
58
  const EE = require("@strapi/strapi/dist/utils/ee");
59
59
  const perf_hooks = require("perf_hooks");
60
60
  const chokidar = require("chokidar");
@@ -102,11 +102,11 @@ const path__default$1 = /* @__PURE__ */ _interopDefault(path$1);
102
102
  const findRoot__default = /* @__PURE__ */ _interopDefault(findRoot);
103
103
  const boxen__default = /* @__PURE__ */ _interopDefault(boxen);
104
104
  const chalk__default = /* @__PURE__ */ _interopDefault(chalk);
105
- const syncFs__default = /* @__PURE__ */ _interopDefault(syncFs);
106
- const camelCase__default = /* @__PURE__ */ _interopDefault(camelCase);
107
105
  const browserslist__default = /* @__PURE__ */ _interopDefault(browserslist);
108
106
  const strapiFactory__default = /* @__PURE__ */ _interopDefault(strapiFactory);
109
107
  const dotenv__default = /* @__PURE__ */ _interopDefault(dotenv);
108
+ const fs__default$1 = /* @__PURE__ */ _interopDefault(fs$1);
109
+ const camelCase__default = /* @__PURE__ */ _interopDefault(camelCase);
110
110
  const EE__default = /* @__PURE__ */ _interopDefault(EE);
111
111
  const chokidar__default = /* @__PURE__ */ _interopDefault(chokidar);
112
112
  const cluster__default = /* @__PURE__ */ _interopDefault(cluster);
@@ -114,7 +114,7 @@ const webpackDevMiddleware__default = /* @__PURE__ */ _interopDefault(webpackDev
114
114
  const webpackHotMiddleware__default = /* @__PURE__ */ _interopDefault(webpackHotMiddleware);
115
115
  const build$2 = ({ command, ctx }) => {
116
116
  command.command("build").option("-d, --debug", "Enable debugging mode with verbose logs", false).option("--ignore-prompts", "Ignore all prompts", false).option("--minify", "Minify the output", true).option("--no-optimization", "[deprecated]: use minify instead").option("--silent", "Don't log anything", false).option("--sourcemap", "Produce sourcemaps", false).option("--stats", "Print build statistics to the console", false).description("Build the strapi admin app").action(async (options) => {
117
- const { build: build2 } = await Promise.resolve().then(() => require("./build-55ba3e68.js"));
117
+ const { build: build2 } = await Promise.resolve().then(() => require("./build-b285bccd.js"));
118
118
  return build2({ ...options, ...ctx });
119
119
  });
120
120
  };
@@ -126,7 +126,7 @@ const develop$1 = ({ command, ctx }) => {
126
126
  "--watch-admin",
127
127
  "[deprecated]: there is now middleware for watching, it is no longer a separate process"
128
128
  ).option("--browser <name>", "[deprecated]: use open instead").option("--open", "Open the admin in your browser", true).description("Start your Strapi application in development mode").action(async (options) => {
129
- const { develop: develop2 } = await Promise.resolve().then(() => require("./develop-69e28e61.js"));
129
+ const { develop: develop2 } = await Promise.resolve().then(() => require("./develop-9765d7ba.js"));
130
130
  return develop2({ ...options, ...ctx });
131
131
  });
132
132
  };
@@ -357,9 +357,9 @@ const DefaultDocument = () => {
357
357
  ] })
358
358
  ] });
359
359
  };
360
- const getEntryModule = ({ plugins }) => {
361
- const pluginsObject = plugins.map(({ name, importName }) => `'${name}': ${importName}`).join(",\n");
362
- const pluginsImport = plugins.map(({ importName, path: path2 }) => `import ${importName} from '${path2}';`).join("\n");
360
+ const getEntryModule = (ctx) => {
361
+ const pluginsObject = ctx.plugins.map(({ name, importName }) => `'${name}': ${importName}`).join(",\n");
362
+ const pluginsImport = ctx.plugins.map(({ importName, path: path2 }) => `import ${importName} from '${path2}';`).join("\n");
363
363
  return outdent__default.default`
364
364
  /**
365
365
  * This file was automatically generated by Strapi.
@@ -367,10 +367,16 @@ const getEntryModule = ({ plugins }) => {
367
367
  */
368
368
  ${pluginsImport}
369
369
  import { renderAdmin } from "@strapi/strapi/admin"
370
-
370
+
371
+ ${ctx.customisations?.path ? `import customisations from '${path__default.default.relative(
372
+ ctx.runtimeDir,
373
+ ctx.customisations.path
374
+ )}'` : ""}
375
+
371
376
  renderAdmin(
372
377
  document.getElementById("strapi"),
373
378
  {
379
+ ${ctx.customisations?.path ? "customisations," : ""}
374
380
  plugins: {
375
381
  ${pluginsObject}
376
382
  }
@@ -406,7 +412,7 @@ const writeStaticClientFiles = async (ctx) => {
406
412
  ctx.logger.debug("Wrote the index.html file");
407
413
  await fs__default.default.writeFile(
408
414
  path__default.default.join(ctx.runtimeDir, "app.js"),
409
- prettier.format(getEntryModule({ plugins: ctx.plugins }), {
415
+ prettier.format(getEntryModule(ctx), {
410
416
  parser: "babel"
411
417
  })
412
418
  );
@@ -495,7 +501,9 @@ const pathExists = async (path2) => {
495
501
  };
496
502
  const loadFile = async (path2) => {
497
503
  if (await pathExists(path2)) {
498
- const esbuildOptions = { extensions: [".js", ".mjs", ".ts"] };
504
+ const esbuildOptions = {
505
+ extensions: [".js", ".mjs", ".ts"]
506
+ };
499
507
  const { unregister } = node.register(esbuildOptions);
500
508
  const mod = require(path2);
501
509
  unregister();
@@ -690,8 +698,19 @@ const getUserConfig = async (ctx) => {
690
698
  const mergeConfigWithUserConfig = async (config, ctx) => {
691
699
  const userConfig = await getUserConfig(ctx);
692
700
  if (userConfig) {
693
- const webpack2 = await import("webpack");
694
- return userConfig(config, webpack2);
701
+ if (typeof userConfig === "function") {
702
+ const webpack2 = await import("webpack");
703
+ return userConfig(config, webpack2);
704
+ } else {
705
+ ctx.logger.warn(
706
+ `You've exported something other than a function from ${path__default.default.join(
707
+ ctx.appDir,
708
+ "src",
709
+ "admin",
710
+ "webpack.config"
711
+ )}, this will ignored.`
712
+ );
713
+ }
695
714
  }
696
715
  return config;
697
716
  };
@@ -811,6 +830,49 @@ const loadUserPluginsFile = async (root) => {
811
830
  }
812
831
  return {};
813
832
  };
833
+ const getMapOfPluginsWithAdmin = (plugins, { runtimeDir }) => Object.values(plugins).filter((plugin) => {
834
+ if (!plugin) {
835
+ return false;
836
+ }
837
+ try {
838
+ const isLocalPluginWithLegacyAdminFile = fs__default$1.default.existsSync(
839
+ //@ts-ignore
840
+ path__default.default.resolve(`${plugin.pathToPlugin}/strapi-admin.js`)
841
+ );
842
+ if (!isLocalPluginWithLegacyAdminFile) {
843
+ let pathToPlugin = plugin.pathToPlugin;
844
+ if (process.platform === "win32") {
845
+ pathToPlugin = pathToPlugin.split(path__default.default.sep).join(path__default.default.posix.sep);
846
+ }
847
+ const isModuleWithFE = require.resolve(`${pathToPlugin}/strapi-admin`);
848
+ return isModuleWithFE;
849
+ }
850
+ return isLocalPluginWithLegacyAdminFile;
851
+ } catch (err) {
852
+ if (isError(err) && "code" in err && err.code === "MODULE_NOT_FOUND") {
853
+ return false;
854
+ }
855
+ throw err;
856
+ }
857
+ }).map((plugin) => {
858
+ const systemPath = plugin.isLocal ? path__default.default.relative(runtimeDir, plugin.pathToPlugin.split("/").join(path__default.default.sep)) : void 0;
859
+ const modulePath = systemPath ? systemPath.split(path__default.default.sep).join("/") : void 0;
860
+ return {
861
+ path: !plugin.isLocal ? `${plugin.pathToPlugin}/strapi-admin` : `${modulePath}/strapi-admin`,
862
+ name: plugin.name,
863
+ importName: camelCase__default.default(plugin.name)
864
+ };
865
+ });
866
+ const ADMIN_APP_FILES = ["app.js", "app.mjs", "app.ts", "app.jsx", "app.tsx"];
867
+ const loadUserAppFile = async (appDir) => {
868
+ for (const file of ADMIN_APP_FILES) {
869
+ const filePath = path__default.default.join(appDir, "src", "admin", file);
870
+ if (fs__default$1.default.existsSync(filePath)) {
871
+ return { path: filePath };
872
+ }
873
+ }
874
+ return void 0;
875
+ };
814
876
  const DEFAULT_BROWSERSLIST = [
815
877
  "last 3 major versions",
816
878
  "Firefox ESR",
@@ -861,16 +923,14 @@ const createBuildContext = async ({
861
923
  const entry = path__default.default.relative(cwd, path__default.default.join(runtimeDir, "app.js"));
862
924
  const plugins = await getEnabledPlugins({ cwd, logger, strapi: strapiInstance });
863
925
  logger.debug("Enabled plugins", os__default.default.EOL, plugins);
864
- const pluginsWithFront = Object.values(plugins).filter(filterPluginsByAdminEntry).map((plugin) => ({
865
- path: !plugin.isLocal ? `${plugin.pathToPlugin}/strapi-admin` : `${path__default.default.relative(runtimeDir, plugin.pathToPlugin)}/strapi-admin`,
866
- name: plugin.name,
867
- importName: camelCase__default.default(plugin.name)
868
- }));
926
+ const pluginsWithFront = getMapOfPluginsWithAdmin(plugins, { runtimeDir });
869
927
  logger.debug("Enabled plugins with FE", os__default.default.EOL, plugins);
870
928
  const target = browserslist__default.default.loadConfig({ path: cwd }) ?? DEFAULT_BROWSERSLIST;
929
+ const customisations = await loadUserAppFile(strapiInstance.dirs.app.root);
871
930
  const buildContext = {
872
931
  appDir: strapiInstance.dirs.app.root,
873
932
  basePath: `${adminPath}/`,
933
+ customisations,
874
934
  cwd,
875
935
  distDir,
876
936
  distPath,
@@ -886,31 +946,6 @@ const createBuildContext = async ({
886
946
  };
887
947
  return buildContext;
888
948
  };
889
- const filterPluginsByAdminEntry = (plugin) => {
890
- if (!plugin) {
891
- return false;
892
- }
893
- try {
894
- const isLocalPluginWithLegacyAdminFile = syncFs__default.default.existsSync(
895
- //@ts-ignore
896
- path__default.default.resolve(`${plugin.pathToPlugin}/strapi-admin.js`)
897
- );
898
- if (!isLocalPluginWithLegacyAdminFile) {
899
- let pathToPlugin = plugin.pathToPlugin;
900
- if (process.platform === "win32") {
901
- pathToPlugin = pathToPlugin.split(path__default.default.sep).join(path__default.default.posix.sep);
902
- }
903
- const isModuleWithFE = require.resolve(`${pathToPlugin}/strapi-admin`);
904
- return isModuleWithFE;
905
- }
906
- return isLocalPluginWithLegacyAdminFile;
907
- } catch (err) {
908
- if (isError(err) && "code" in err && err.code === "MODULE_NOT_FOUND") {
909
- return false;
910
- }
911
- throw err;
912
- }
913
- };
914
949
  function getTimer() {
915
950
  const timings = {};
916
951
  const startTimes = {};
@@ -1237,4 +1272,4 @@ exports.build = build;
1237
1272
  exports.develop = develop;
1238
1273
  exports.handleUnexpectedError = handleUnexpectedError;
1239
1274
  exports.index = index;
1240
- //# sourceMappingURL=index-cce8ecb6.js.map
1275
+ //# sourceMappingURL=index-62b7bdbe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-62b7bdbe.js","sources":["../../_internal/cli/index.ts","../../_internal/node/core/managers.ts","../../_internal/node/core/dependencies.ts","../../admin/src/components/NoJavascript.tsx","../../admin/src/components/DefaultDocument.tsx","../../_internal/node/staticFiles.ts","../../_internal/node/webpack/aliases.ts","../../_internal/node/core/monorepo.ts","../../_internal/node/core/files.ts","../../_internal/node/webpack/config.ts","../../_internal/node/core/errors.ts","../../_internal/node/webpack/build.ts","../../_internal/node/core/env.ts","../../_internal/node/core/plugins.ts","../../_internal/node/core/admin-customisations.ts","../../_internal/node/createBuildContext.ts","../../_internal/node/core/timer.ts","../../_internal/node/build.ts","../../_internal/node/webpack/watch.ts","../../_internal/node/develop.ts"],"sourcesContent":["import type { StrapiCommand } from '@strapi/strapi';\nimport type { BuildCLIOptions } from './commands/build';\nimport type { DevelopCLIOptions } from './commands/develop';\n\n/**\n * `$ strapi build`\n */\nconst build: StrapiCommand = ({ command, ctx }) => {\n command\n .command('build')\n .option('-d, --debug', 'Enable debugging mode with verbose logs', false)\n .option('--ignore-prompts', 'Ignore all prompts', false)\n .option('--minify', 'Minify the output', true)\n .option('--no-optimization', '[deprecated]: use minify instead')\n .option('--silent', \"Don't log anything\", false)\n .option('--sourcemap', 'Produce sourcemaps', false)\n .option('--stats', 'Print build statistics to the console', false)\n .description('Build the strapi admin app')\n .action(async (options: BuildCLIOptions) => {\n const { build } = await import('./commands/build');\n\n return build({ ...options, ...ctx });\n });\n};\n\n/**\n * `$ strapi develop`\n */\nconst develop: StrapiCommand = ({ command, ctx }) => {\n command\n .command('develop')\n .alias('dev')\n .option('-d, --debug', 'Enable debugging mode with verbose logs', false)\n .option('--silent', \"Don't log anything\", false)\n .option('--ignore-prompts', 'Ignore all prompts', false)\n .option('--polling', 'Watch for file changes in network directories', false)\n .option('--watch-admin', 'Watch the admin panel for hot changes', false)\n .option(\n '--no-build',\n '[deprecated]: there is middleware for the server, it is no longer a separate process'\n )\n .option(\n '--watch-admin',\n '[deprecated]: there is now middleware for watching, it is no longer a separate process'\n )\n .option('--browser <name>', '[deprecated]: use open instead')\n .option('--open', 'Open the admin in your browser', true)\n .description('Start your Strapi application in development mode')\n .action(async (options: DevelopCLIOptions) => {\n const { develop } = await import('./commands/develop');\n\n return develop({ ...options, ...ctx });\n });\n};\n\nexport { build, develop };\n","/**\n * @description Supports the following managers:\n * – npm\n * – yarn\n * – pnpm\n */\nconst getPackageManager = () => {\n // Yes, the env var is lowercase - it is set by the package managers themselves\n const agent = process.env.npm_config_user_agent || '';\n\n if (agent.includes('yarn')) {\n return 'yarn';\n }\n\n if (agent.includes('pnpm')) {\n return 'pnpm';\n }\n\n // Both yarn and pnpm does a `npm/?` thing, thus the slightly different match here\n // Theoretically not needed since we check for yarn/pnpm above, but in case other\n // package managers do the same thing, we'll (hopefully) catch them here.\n if (/^npm\\/\\d/.test(agent)) {\n return 'npm';\n }\n\n return undefined;\n};\n\nexport { getPackageManager };\n","import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport inquirer from 'inquirer';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\nimport type { BuildOptions } from '../build';\nimport { getPackageManager } from './managers';\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^5.2.0',\n 'styled-components': '^5.2.1',\n};\n\ninterface CheckRequiredDependenciesResult {\n didInstall: boolean;\n}\n\ninterface DepToInstall {\n name: string;\n wantedVersion: string;\n declaredVersion?: never;\n}\n\n/**\n * Checks the user's project that it has declared and installed the required dependencies\n * needed by the Strapi admin project. Whilst generally speaking most modules will be\n * declared by the actual packages there are some packages where you only really want one of\n * and thus they are declared as peer dependencies – react / styled-components / etc.\n *\n * If these deps are not installed or declared, then we prompt the user to correct this. In\n * V4 this is not a hard requirement, but in V5 it will be. Might as well get people started now.\n */\nconst checkRequiredDependencies = async ({\n cwd,\n logger,\n ignorePrompts,\n}: Pick<\n BuildOptions,\n 'cwd' | 'logger' | 'ignorePrompts'\n>): Promise<CheckRequiredDependenciesResult> => {\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n interface DepToReview {\n name: string;\n wantedVersion: string;\n declaredVersion: string;\n }\n\n /**\n * Run through each of the peer deps and figure out if they need to be\n * installed or they need their version checked against.\n */\n const { install, review } = Object.entries(PEER_DEPS).reduce<{\n install: DepToInstall[];\n review: DepToReview[];\n }>(\n (acc, [name, version]) => {\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n const declaredVersion = pkg.packageJson.dependencies[name];\n\n if (!declaredVersion) {\n acc.install.push({\n name,\n wantedVersion: version,\n });\n } else {\n acc.review.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return acc;\n },\n {\n install: [],\n review: [],\n }\n );\n\n if (install.length > 0) {\n logger.info(\n 'The Strapi admin needs to install the following dependencies:',\n os.EOL,\n install.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n\n /**\n * temporary until V5 when we _will_ be enforcing these dependencies as required.\n */\n if (process.env.NODE_ENV !== 'development' || ignorePrompts) {\n return { didInstall: false };\n }\n\n /**\n * This prompt can be removed in V5 & therefore the code underneath can be refactored to\n * only install the deps and return that we installed deps.\n */\n const { install: installAns } = await inquirer.prompt({\n type: 'confirm',\n name: 'install',\n default: true,\n message:\n 'Would you like to install these dependencies now? These are not required but are recommended, from V5 these will be required.',\n });\n\n if (installAns) {\n await installDependencies(install, {\n cwd,\n logger,\n });\n\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n return { didInstall: true };\n } else {\n return { didInstall: false };\n }\n }\n\n if (review.length) {\n const errors: string[] = [];\n\n for (const dep of review) {\n // The version specified in package.json could be incorrect, eg `foo`\n let minDeclaredVersion: SemVer | null = null;\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n /**\n * The delcared version should be semver compatible with our required version\n * of the dependency. If it's not, we should advise the user to change it.\n */\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n /**\n * TODO: when we know the packageManager we can advise the actual install command.\n */\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n }\n\n return { didInstall: false };\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nconst installDependencies = async (\n install: DepToInstall[],\n { cwd, logger }: Pick<BuildOptions, 'cwd' | 'logger'>\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = install.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nexport { checkRequiredDependencies, getModule };\nexport type { CheckRequiredDependenciesResult, PackageJson };\n","const styles = `\n.strapi--root {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #fff;\n}\n\n.strapi--no-js {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n font-family: helvetica, arial, sans-serif;\n}\n`;\n\n/**\n * @internal\n *\n * @description this belongs to our default document that we render.\n */\nconst NoJavascript = () => {\n return (\n <noscript>\n <div className=\"strapi--root\">\n <div className=\"strapi--no-js\">\n <style type=\"text/css\">{styles}</style>\n <h1>JavaScript disabled</h1>\n <p>\n Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n browser and reload the page to proceed.\n </p>\n </div>\n </div>\n </noscript>\n );\n};\n\nexport { NoJavascript };\n","import { NoJavascript } from './NoJavascript';\n\n/**\n * TODO: add favicons.........\n */\n\nconst globalStyles = `\n html,\n body,\n #strapi {\n height: 100%;\n }\n body {\n margin: 0;\n -webkit-font-smoothing: antialiased;\n }\n`;\n\n/**\n * @internal\n */\nconst DefaultDocument = () => {\n return (\n <html lang=\"en\">\n <head>\n <meta charSet=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n <meta name=\"robots\" content=\"noindex\" />\n <meta name=\"referrer\" content=\"same-origin\" />\n\n <title>Strapi Admin</title>\n <style>{globalStyles}</style>\n </head>\n <body>\n <div id=\"strapi\" />\n <NoJavascript />\n </body>\n </html>\n );\n};\n\nexport { DefaultDocument };\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport outdent from 'outdent';\nimport { format } from 'prettier';\nimport { createElement } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { DefaultDocument as Document } from '../../admin/src/components/DefaultDocument';\n\nimport type { BuildContext } from './createBuildContext';\n\nconst getEntryModule = (ctx: BuildContext): string => {\n const pluginsObject = ctx.plugins\n .map(({ name, importName }) => `'${name}': ${importName}`)\n .join(',\\n');\n\n const pluginsImport = ctx.plugins\n .map(({ importName, path }) => `import ${importName} from '${path}';`)\n .join('\\n');\n\n return outdent`\n /**\n * This file was automatically generated by Strapi.\n * Any modifications made will be discarded.\n */\n ${pluginsImport}\n import { renderAdmin } from \"@strapi/strapi/admin\"\n\n ${\n ctx.customisations?.path\n ? `import customisations from '${path.relative(\n ctx.runtimeDir,\n ctx.customisations.path\n )}'`\n : ''\n }\n\n renderAdmin(\n document.getElementById(\"strapi\"),\n {\n ${ctx.customisations?.path ? 'customisations,' : ''}\n plugins: {\n ${pluginsObject}\n }\n })\n `;\n};\n\n/**\n * TODO: Here in the future we could add the ability\n * to load a user's Document component?\n */\nconst getDocumentHTML = async ({ logger }: Pick<BuildContext, 'logger'>) => {\n const result = renderToStaticMarkup(createElement(Document));\n logger.debug('Rendered the HTML');\n\n return outdent`<!DOCTYPE html>${result}`;\n};\n\nconst AUTO_GENERATED_WARNING = `\nThis file was automatically generated by Strapi.\nAny modifications made will be discarded.\n`.trim();\n\n/**\n * Because we now auto-generate the index.html file,\n * we should be clear that people _should not_ modify it.\n *\n * @internal\n */\nconst decorateHTMLWithAutoGeneratedWarning = (htmlTemplate: string): string =>\n htmlTemplate.replace(/<head/, `\\n<!--\\n${AUTO_GENERATED_WARNING}\\n-->\\n<head`);\n\nconst writeStaticClientFiles = async (ctx: BuildContext) => {\n /**\n * For everything to work effectively we create a client folder in `.strapi` at the cwd level.\n * We then use the function we need to \"createAdmin\" as well as generate the Document index.html as well.\n *\n * All this links together an imaginary \"src/index\" that then allows vite to correctly build the admin panel.\n */\n\n await fs.mkdir(ctx.runtimeDir, { recursive: true });\n ctx.logger.debug('Created the runtime directory');\n\n const indexHtml = decorateHTMLWithAutoGeneratedWarning(\n await getDocumentHTML({ logger: ctx.logger })\n );\n\n await fs.writeFile(\n path.join(ctx.runtimeDir, 'index.html'),\n format(indexHtml, {\n parser: 'html',\n })\n );\n ctx.logger.debug('Wrote the index.html file');\n await fs.writeFile(\n path.join(ctx.runtimeDir, 'app.js'),\n format(getEntryModule(ctx), {\n parser: 'babel',\n })\n );\n ctx.logger.debug('Wrote the app.js file');\n};\n\nexport { writeStaticClientFiles };\n","import path from 'path';\nimport findRoot from 'find-root';\nimport type { StrapiMonorepo } from '../core/monorepo';\n\n/**\n * @deprecated we will not support aliasing dependencies from V5.\n */\nconst adminPackageAliases = [\n '@strapi/design-system',\n '@strapi/helper-plugin',\n '@strapi/icons',\n 'date-fns',\n 'formik',\n 'history',\n 'immer',\n 'qs',\n 'lodash',\n 'react',\n 'react-dnd',\n 'react-dnd-html5-backend',\n 'react-dom',\n 'react-error-boundary',\n 'react-helmet',\n 'react-is',\n 'react-intl',\n 'react-query',\n 'react-redux',\n 'react-router-dom',\n 'react-window',\n 'react-select',\n 'redux',\n 'reselect',\n 'styled-components',\n 'yup',\n] as const;\n\n/**\n * @deprecated we will not support aliasing dependencies from V5.\n */\nconst getAdminDependencyAliases = (monorepo?: StrapiMonorepo) =>\n adminPackageAliases\n .filter(\n (moduleName) => !monorepo?.path || (monorepo.path && moduleName !== '@strapi/helper-plugin')\n )\n .reduce((acc, moduleName) => {\n /**\n * We use `findRoot` instead of `resolveFrom` here because we don't want to\n * choose a particular file e.g. the CJS version over the ESM because the\n * bundler should decide this, so insted find-root is more appropriate.\n *\n * When we remove these aliases in V5 we can also remove the `find-root` package.\n */\n acc[`${moduleName}$`] = findRoot(require.resolve(moduleName));\n return acc;\n }, {} as Record<string, string>);\n\n/**\n * The path mappings/aliases used by various tools in the monorepo to map imported modules to\n * source files in order to speed up rebuilding and avoid having a separate watcher process to build\n * from `src` to `lib`.\n *\n * This file is currently read by:\n * - Webpack when running the dev server (only when running in this monorepo)\n */\nconst devAliases: Record<string, string> = {\n '@strapi/admin/strapi-admin': './packages/core/admin/admin/src',\n '@strapi/content-type-builder/strapi-admin': './packages/core/content-type-builder/admin/src',\n '@strapi/email/strapi-admin': './packages/core/email/admin/src',\n '@strapi/upload/strapi-admin': './packages/core/upload/admin/src',\n '@strapi/plugin-color-picker/strapi-admin': './packages/plugins/color-picker/admin/src',\n '@strapi/plugin-documentation/strapi-admin': './packages/plugins/documentation/admin/src',\n '@strapi/plugin-graphql/strapi-admin': './packages/plugins/graphql/admin/src',\n '@strapi/plugin-i18n/strapi-admin': './packages/plugins/i18n/admin/src',\n '@strapi/plugin-sentry/strapi-admin': './packages/plugins/sentry/admin/src',\n '@strapi/plugin-users-permissions/strapi-admin': './packages/plugins/users-permissions/admin/src',\n '@strapi/helper-plugin': './packages/core/helper-plugin/src',\n};\n\nconst getAliases = (cwd: string, monorepo?: StrapiMonorepo) => {\n const adminAliases = getAdminDependencyAliases(monorepo);\n const monorepoAliases = monorepo\n ? Object.fromEntries(\n Object.entries(devAliases).map(([key, modulePath]) => {\n return [key, path.join(monorepo.path, modulePath)];\n })\n )\n : {};\n\n return {\n ...adminAliases,\n ...monorepoAliases,\n };\n};\n\nexport { getAliases };\n","import path from 'path';\nimport readPkgUp from 'read-pkg-up';\n\ninterface StrapiMonorepo {\n path: string;\n}\n\n/**\n * Load information about the strapi CMS monorepo (if applicable)\n *\n * @internal\n */\nasync function loadStrapiMonorepo(cwd: string): Promise<StrapiMonorepo | undefined> {\n let p = cwd;\n\n while (p !== '/') {\n const readResult = await readPkgUp({ cwd: p });\n\n if (!readResult) {\n return undefined;\n }\n\n if (readResult.packageJson.isStrapiMonorepo) {\n return { path: path.dirname(readResult.path) };\n }\n\n p = path.dirname(path.dirname(readResult.path));\n }\n\n return undefined;\n}\n\nexport { loadStrapiMonorepo };\nexport type { StrapiMonorepo };\n","import { access } from 'node:fs/promises';\nimport { register } from 'esbuild-register/dist/node';\n\n/**\n * @internal\n */\nconst pathExists = async (path: string) => {\n try {\n await access(path);\n return true;\n } catch (error) {\n return false;\n }\n};\n\n/**\n * @internal\n */\nconst loadFile = async (path: string): Promise<undefined | any> => {\n if (await pathExists(path)) {\n const esbuildOptions: Parameters<typeof register>[0] = {\n extensions: ['.js', '.mjs', '.ts'],\n };\n\n const { unregister } = register(esbuildOptions);\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require(path);\n\n unregister();\n\n /**\n * handles esm or cjs exporting.\n */\n const file = mod?.default || mod || undefined;\n\n return file;\n }\n\n return undefined;\n};\n\nexport { pathExists, loadFile };\n","import browserslistToEsbuild from 'browserslist-to-esbuild';\nimport { ESBuildMinifyPlugin } from 'esbuild-loader';\nimport HtmlWebpackPlugin from 'html-webpack-plugin';\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin';\nimport ForkTsCheckerPlugin from 'fork-ts-checker-webpack-plugin';\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';\nimport crypto from 'node:crypto';\nimport path from 'node:path';\nimport { Configuration, DefinePlugin, HotModuleReplacementPlugin } from 'webpack';\nimport ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';\n\nimport { getAliases } from './aliases';\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport type { BuildContext } from '../createBuildContext';\nimport { loadFile } from '../core/files';\n\nconst resolveBaseConfig = async (ctx: BuildContext) => {\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n\n const target = browserslistToEsbuild(ctx.target);\n\n return {\n experiments: {\n topLevelAwait: true,\n },\n entry: {\n main: [`./${ctx.entry}`],\n },\n resolve: {\n alias: getAliases(ctx.cwd, monorepo),\n extensions: ['.js', '.jsx', '.react.js', '.ts', '.tsx'],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx)$/,\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'tsx',\n target,\n jsx: 'automatic',\n },\n },\n {\n test: /\\.(js|jsx|mjs)$/,\n use: {\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'jsx',\n target,\n jsx: 'automatic',\n },\n },\n },\n {\n test: /\\.m?js/,\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: /\\.css$/i,\n use: [require.resolve('style-loader'), require.resolve('css-loader')],\n },\n {\n test: /\\.(svg|eot|otf|ttf|woff|woff2)$/,\n type: 'asset/resource',\n },\n {\n test: [/\\.bmp$/, /\\.gif$/, /\\.jpe?g$/, /\\.png$/, /\\.ico$/],\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 1000,\n },\n },\n },\n {\n test: /\\.(mp4|webm)$/,\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 10000,\n },\n },\n },\n ],\n },\n plugins: [\n new HtmlWebpackPlugin({\n inject: true,\n template: path.resolve(ctx.runtimeDir, 'index.html'),\n }),\n new DefinePlugin(\n Object.entries(ctx.env).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`process.env.${key}`] = JSON.stringify(value);\n return acc;\n }, {})\n ),\n ctx.tsconfig &&\n new ForkTsCheckerPlugin({\n typescript: {\n configFile: ctx.tsconfig.path,\n configOverwrite: {\n compilerOptions: {\n sourceMap: ctx.options.sourcemaps,\n },\n },\n },\n }),\n ].filter(Boolean),\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n cache: {\n type: 'filesystem',\n // version cache when there are changes to aliases\n buildDependencies: {\n config: [__filename],\n },\n version: crypto\n .createHash('md5')\n .update(Object.entries(baseConfig.resolve.alias).join())\n .digest('hex'),\n },\n entry: {\n ...baseConfig.entry,\n main: [\n `${require.resolve('webpack-hot-middleware/client')}?path=/__webpack_hmr`,\n ...baseConfig.entry.main,\n ],\n },\n stats: 'errors-warnings',\n mode: 'development',\n devtool: 'inline-source-map',\n output: {\n filename: '[name].js',\n path: ctx.distPath,\n publicPath: ctx.basePath,\n },\n infrastructureLogging: {\n level: 'error',\n },\n plugins: [\n ...baseConfig.plugins,\n new HotModuleReplacementPlugin(),\n new ReactRefreshWebpackPlugin(),\n ],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const target = browserslistToEsbuild(ctx.target);\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n stats: 'errors-only',\n mode: 'production',\n bail: true,\n devtool: ctx.options.sourcemaps ? 'source-map' : false,\n output: {\n path: ctx.distPath,\n publicPath: ctx.basePath,\n // Utilize long-term caching by adding content hashes (not compilation hashes)\n // to compiled assets for production\n filename: '[name].[contenthash:8].js',\n chunkFilename: '[name].[contenthash:8].chunk.js',\n },\n optimization: {\n minimize: ctx.options.minify,\n minimizer: [\n new ESBuildMinifyPlugin({\n target,\n css: true, // Apply minification to CSS assets\n }),\n ],\n moduleIds: 'deterministic',\n runtimeChunk: true,\n },\n // @ts-expect-error\n plugins: [\n ...baseConfig.plugins,\n new MiniCssExtractPlugin({\n filename: '[name].[chunkhash].css',\n chunkFilename: '[name].[chunkhash].chunkhash.css',\n ignoreOrder: true,\n }),\n ctx.options.stats && new BundleAnalyzerPlugin(),\n ].filter(Boolean),\n };\n};\n\nconst USER_CONFIGS = ['webpack.config.js', 'webpack.config.mjs', 'webpack.config.ts'];\n\ntype UserWebpackConfig = (config: Configuration, webpack: unknown) => Configuration;\n\nconst getUserConfig = async (ctx: BuildContext): Promise<UserWebpackConfig | undefined> => {\n for (const file of USER_CONFIGS) {\n const filePath = path.join(ctx.appDir, 'src', 'admin', file);\n const configFile = await loadFile(filePath);\n\n if (configFile) {\n return configFile;\n }\n }\n\n return undefined;\n};\n\nconst mergeConfigWithUserConfig = async (config: Configuration, ctx: BuildContext) => {\n const userConfig = await getUserConfig(ctx);\n\n if (userConfig) {\n if (typeof userConfig === 'function') {\n const webpack = await import('webpack');\n return userConfig(config, webpack);\n } else {\n ctx.logger.warn(\n `You've exported something other than a function from ${path.join(\n ctx.appDir,\n 'src',\n 'admin',\n 'webpack.config'\n )}, this will ignored.`\n );\n }\n }\n\n return config;\n};\n\nexport { resolveProductionConfig, resolveDevelopmentConfig, mergeConfigWithUserConfig };\n","import boxen from 'boxen';\nimport chalk from 'chalk';\nimport os from 'node:os';\n\nconst isError = (err: unknown): err is Error => err instanceof Error;\n\n/**\n * @description Handle unexpected errors. No, but really, your CLI should anticipate error cases.\n * If a user hits an error we don't expect, then we need to flag to them that this is not normal\n * and they should use the `--debug` flag to get more information (assuming you've implemented this\n * in your action).\n */\nconst handleUnexpectedError = (err: unknown) => {\n console.error(\n chalk.red(\n `[ERROR] `,\n 'There seems to be an unexpected error, try again with --debug for more information',\n os.EOL\n )\n );\n\n if (isError(err) && err.stack) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n process.exit(1);\n};\n\nexport { handleUnexpectedError, isError };\n","import webpack from 'webpack';\n\nimport { mergeConfigWithUserConfig, resolveProductionConfig } from './config';\nimport { isError } from '../core/errors';\n\nimport type { BuildContext } from '../createBuildContext';\n\nconst build = async (ctx: BuildContext) =>\n new Promise(async (resolve, reject) => {\n const config = await resolveProductionConfig(ctx);\n const finalConfig = await mergeConfigWithUserConfig(config, ctx);\n\n ctx.logger.debug('Webpack config', finalConfig);\n\n webpack(finalConfig, (err, stats) => {\n if (stats) {\n if (stats.hasErrors()) {\n ctx.logger.error(\n stats.toString({\n chunks: false,\n colors: true,\n })\n );\n\n reject(false);\n } else if (ctx.options.stats) {\n ctx.logger.info(\n stats.toString({\n chunks: false,\n colors: true,\n })\n );\n }\n\n resolve(true);\n }\n\n if (err && isError(err)) {\n ctx.logger.error(err.message);\n reject(false);\n }\n });\n });\n\nexport { build };\n","import path from 'node:path';\nimport dotenv from 'dotenv';\nimport { pathExists } from './files';\n\n/**\n * This is the base of _any_ env set for a strapi project,\n * to build a strapi admin panel we require these env variables.\n */\ninterface DefaultEnv {\n ADMIN_PATH: string;\n STRAPI_ADMIN_BACKEND_URL: string;\n STRAPI_TELEMETRY_DISABLED: string;\n}\n\n/**\n * @internal\n *\n * @description Load the .env file if it exists\n */\nconst loadEnv = async (cwd: string) => {\n const pathToEnv = path.resolve(cwd, '.env');\n\n if (await pathExists(pathToEnv)) {\n dotenv.config({ path: pathToEnv });\n }\n};\n\n/**\n * @internal\n *\n * @description Get all the environment variables that start with `STRAPI_ADMIN_`\n */\nconst getStrapiAdminEnvVars = (defaultEnv: DefaultEnv): Record<string, string> => {\n return Object.keys(process.env)\n .filter((key) => key.toUpperCase().startsWith('STRAPI_ADMIN_'))\n .reduce((acc, key) => {\n acc[key] = process.env[key] as string;\n\n return acc;\n }, defaultEnv as unknown as Record<string, string>);\n};\n\nexport { getStrapiAdminEnvVars, loadEnv };\n","import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport camelCase from 'lodash/camelCase';\nimport { env } from '@strapi/utils';\nimport { getModule, PackageJson } from './dependencies';\nimport { loadFile } from './files';\nimport { BuildContext } from '../createBuildContext';\nimport { isError } from './errors';\n\ninterface PluginMeta {\n name: string;\n pathToPlugin: string;\n isLocal?: boolean;\n}\n\ninterface StrapiPlugin extends PackageJson {\n strapi: {\n description?: string;\n displayName?: string;\n kind: 'plugin';\n name?: string;\n required?: boolean;\n };\n}\n\nconst validatePackageHasStrapi = (\n pkg: PackageJson\n): pkg is PackageJson & { strapi: Record<string, unknown> } =>\n 'strapi' in pkg &&\n typeof pkg.strapi === 'object' &&\n !Array.isArray(pkg.strapi) &&\n pkg.strapi !== null;\n\nconst validatePackageIsPlugin = (pkg: PackageJson): pkg is StrapiPlugin =>\n validatePackageHasStrapi(pkg) && pkg.strapi.kind === 'plugin';\n\nconst getEnabledPlugins = async ({\n strapi,\n cwd,\n logger,\n}: Pick<BuildContext, 'cwd' | 'logger' | 'strapi'>): Promise<Record<string, PluginMeta>> => {\n const plugins: Record<string, PluginMeta> = {};\n\n /**\n * This is the list of dependencies that are installed in the user's project.\n * It will include libraries like \"react\", so we need to collect the ones that\n * are plugins.\n */\n const deps = strapi.config.get('info.dependencies', {});\n\n logger.debug(\"Dependencies from user's project\", os.EOL, deps);\n\n for (const dep of Object.keys(deps)) {\n const pkg = await getModule(dep, cwd);\n\n if (pkg && validatePackageIsPlugin(pkg)) {\n const name = pkg.strapi.name || pkg.name;\n\n if (!name) {\n /**\n * Unlikely to happen, but you never know.\n */\n throw Error(\n \"You're trying to import a plugin that doesn't have a name – check the package.json of that plugin!\"\n );\n }\n\n plugins[name] = {\n name,\n pathToPlugin: dep,\n };\n }\n }\n\n const userPluginsFile = await loadUserPluginsFile(strapi.dirs.app.config);\n\n logger.debug(\"User's plugins file\", os.EOL, userPluginsFile);\n\n for (const [userPluginName, userPluginConfig] of Object.entries(userPluginsFile)) {\n if (userPluginConfig.enabled && userPluginConfig.resolve) {\n plugins[userPluginName] = {\n name: userPluginName,\n isLocal: true,\n /**\n * User plugin paths are resolved from the entry point\n * of the app, because that's how you import them.\n */\n pathToPlugin: userPluginConfig.resolve,\n };\n }\n }\n\n return plugins;\n};\n\nconst PLUGIN_CONFIGS = ['plugins.js', 'plugins.mjs', 'plugins.ts'];\n\ntype UserPluginConfigFile = Record<string, { enabled: boolean; resolve: string }>;\n\nconst loadUserPluginsFile = async (root: string): Promise<UserPluginConfigFile> => {\n for (const file of PLUGIN_CONFIGS) {\n const filePath = path.join(root, file);\n const configFile = await loadFile(filePath);\n\n if (configFile) {\n /**\n * Configs can be a function or they can be just an object!\n */\n return typeof configFile === 'function' ? configFile({ env }) : configFile;\n }\n }\n\n return {};\n};\n\nconst getMapOfPluginsWithAdmin = (\n plugins: Record<string, PluginMeta>,\n { runtimeDir }: { runtimeDir: string }\n) =>\n Object.values(plugins)\n .filter((plugin) => {\n if (!plugin) {\n return false;\n }\n\n /**\n * There are two ways a plugin should be imported, either it's local to the strapi app,\n * or it's an actual npm module that's installed and resolved via node_modules.\n *\n * We first check if the plugin is local to the strapi app, using a regular `resolve` because\n * the pathToPlugin will be relative i.e. `/Users/my-name/strapi-app/src/plugins/my-plugin`.\n *\n * If the file doesn't exist well then it's probably a node_module, so instead we use `require.resolve`\n * which will resolve the path to the module in node_modules. If it fails with the specific code `MODULE_NOT_FOUND`\n * then it doesn't have an admin part to the package.\n */\n try {\n const isLocalPluginWithLegacyAdminFile = fs.existsSync(\n //@ts-ignore\n path.resolve(`${plugin.pathToPlugin}/strapi-admin.js`)\n );\n\n if (!isLocalPluginWithLegacyAdminFile) {\n //@ts-ignore\n let pathToPlugin = plugin.pathToPlugin;\n\n if (process.platform === 'win32') {\n pathToPlugin = pathToPlugin.split(path.sep).join(path.posix.sep);\n }\n\n const isModuleWithFE = require.resolve(`${pathToPlugin}/strapi-admin`);\n\n return isModuleWithFE;\n }\n\n return isLocalPluginWithLegacyAdminFile;\n } catch (err) {\n if (isError(err) && 'code' in err && err.code === 'MODULE_NOT_FOUND') {\n /**\n * the plugin does not contain FE code, so we\n * don't want to import it anyway\n */\n return false;\n }\n\n throw err;\n }\n })\n .map((plugin) => {\n const systemPath = plugin.isLocal\n ? path.relative(runtimeDir, plugin.pathToPlugin.split('/').join(path.sep))\n : undefined;\n const modulePath = systemPath ? systemPath.split(path.sep).join('/') : undefined;\n\n return {\n path: !plugin.isLocal\n ? `${plugin.pathToPlugin}/strapi-admin`\n : `${modulePath}/strapi-admin`,\n name: plugin.name,\n importName: camelCase(plugin.name),\n };\n });\n\nexport { getEnabledPlugins, getMapOfPluginsWithAdmin };\n","import path from 'node:path';\nimport fs from 'node:fs';\n\nconst ADMIN_APP_FILES = ['app.js', 'app.mjs', 'app.ts', 'app.jsx', 'app.tsx'];\n\ninterface AdminCustomisations {\n config?: {\n locales?: string[];\n };\n bootstrap?: Function;\n}\n\ninterface AppFile {\n path: string;\n}\n\nconst loadUserAppFile = async (appDir: string): Promise<AppFile | undefined> => {\n for (const file of ADMIN_APP_FILES) {\n const filePath = path.join(appDir, 'src', 'admin', file);\n\n if (fs.existsSync(filePath)) {\n return { path: filePath };\n }\n }\n\n return undefined;\n};\n\nexport { loadUserAppFile };\nexport type { AdminCustomisations, AppFile };\n","import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport browserslist from 'browserslist';\nimport strapiFactory, { CLIContext } from '@strapi/strapi';\nimport { getConfigUrls } from '@strapi/utils';\n\nimport { getStrapiAdminEnvVars, loadEnv } from './core/env';\n\nimport type { BuildOptions } from './build';\nimport { DevelopOptions } from './develop';\nimport { getEnabledPlugins, getMapOfPluginsWithAdmin } from './core/plugins';\nimport { Strapi } from '@strapi/types';\nimport { AppFile, loadUserAppFile } from './core/admin-customisations';\n\ninterface BuildContext {\n /**\n * The absolute path to the app directory defined by the Strapi instance\n */\n appDir: string;\n /**\n * If a user is deploying the project under a nested public path, we use\n * this path so all asset paths will be rewritten accordingly\n */\n basePath: string;\n /**\n * The customisations defined by the user in their app.js file\n */\n customisations?: AppFile;\n /**\n * The current working directory\n */\n cwd: string;\n /**\n * The absolute path to the dist directory\n */\n distPath: string;\n /**\n * The relative path to the dist directory\n */\n distDir: string;\n /**\n * The absolute path to the entry file\n */\n entry: string;\n /**\n * The environment variables to be included in the JS bundle\n */\n env: Record<string, string>;\n logger: CLIContext['logger'];\n /**\n * The build options\n */\n options: Pick<BuildOptions, 'minify' | 'sourcemaps' | 'stats'> & Pick<DevelopOptions, 'open'>;\n /**\n * The plugins to be included in the JS bundle\n * incl. internal plugins, third party plugins & local plugins\n */\n plugins: Array<{\n path: string;\n name: string;\n importName: string;\n }>;\n /**\n * The absolute path to the runtime directory\n */\n runtimeDir: string;\n /**\n * The Strapi instance\n */\n strapi: Strapi;\n /**\n * The browserslist target either loaded from the user's workspace or falling back to the default\n */\n target: string[];\n tsconfig?: CLIContext['tsconfig'];\n}\n\ninterface CreateBuildContextArgs extends CLIContext {\n strapi?: Strapi;\n options?: BuildContext['options'];\n}\n\nconst DEFAULT_BROWSERSLIST = [\n 'last 3 major versions',\n 'Firefox ESR',\n 'last 2 Opera versions',\n 'not dead',\n];\n\nconst createBuildContext = async ({\n cwd,\n logger,\n tsconfig,\n strapi,\n options = {},\n}: CreateBuildContextArgs) => {\n /**\n * If you make a new strapi instance when one already exists,\n * you will overwrite the global and the app will _most likely_\n * crash and die.\n */\n const strapiInstance =\n strapi ??\n strapiFactory({\n // Directories\n appDir: cwd,\n distDir: tsconfig?.config.options.outDir ?? '',\n // Options\n autoReload: true,\n serveAdminPanel: false,\n });\n\n const { serverUrl, adminPath } = getConfigUrls(strapiInstance.config, true);\n\n await loadEnv(cwd);\n\n const env = getStrapiAdminEnvVars({\n ADMIN_PATH: adminPath,\n STRAPI_ADMIN_BACKEND_URL: serverUrl,\n STRAPI_TELEMETRY_DISABLED: String(strapiInstance.telemetry.isDisabled),\n });\n\n const envKeys = Object.keys(env);\n\n if (envKeys.length > 0) {\n logger.info(\n [\n 'Including the following ENV variables as part of the JS bundle:',\n ...envKeys.map((key) => ` - ${key}`),\n ].join(os.EOL)\n );\n }\n\n const distPath = path.join(strapiInstance.dirs.dist.root, 'build');\n const distDir = path.relative(cwd, distPath);\n\n /**\n * If the distPath already exists, clean it\n */\n try {\n logger.debug(`Cleaning dist folder: ${distPath}`);\n await fs.rm(distPath, { recursive: true, force: true });\n logger.debug('Cleaned dist folder');\n } catch {\n // do nothing, it will fail if the folder does not exist\n logger.debug('There was no dist folder to clean');\n }\n\n const runtimeDir = path.join(cwd, '.strapi', 'client');\n const entry = path.relative(cwd, path.join(runtimeDir, 'app.js'));\n\n const plugins = await getEnabledPlugins({ cwd, logger, strapi: strapiInstance });\n\n logger.debug('Enabled plugins', os.EOL, plugins);\n\n const pluginsWithFront = getMapOfPluginsWithAdmin(plugins, { runtimeDir });\n\n logger.debug('Enabled plugins with FE', os.EOL, plugins);\n\n const target = browserslist.loadConfig({ path: cwd }) ?? DEFAULT_BROWSERSLIST;\n\n const customisations = await loadUserAppFile(strapiInstance.dirs.app.root);\n\n const buildContext = {\n appDir: strapiInstance.dirs.app.root,\n basePath: `${adminPath}/`,\n customisations,\n cwd,\n distDir,\n distPath,\n entry,\n env,\n logger,\n options,\n plugins: pluginsWithFront,\n runtimeDir,\n strapi: strapiInstance,\n target,\n tsconfig,\n } satisfies BuildContext;\n\n return buildContext;\n};\n\nexport { createBuildContext };\nexport type { BuildContext, CreateBuildContextArgs };\n","import { performance } from 'perf_hooks';\n\nexport interface TimeMeasurer {\n start: (name: string) => void;\n end: (name: string) => number;\n getTimings: () => Record<string, number>;\n}\n\nexport function getTimer(): TimeMeasurer {\n const timings: Record<string, number> = {};\n const startTimes: Record<string, number> = {};\n\n function start(name: string): void {\n if (typeof startTimes[name] !== 'undefined') {\n throw new Error(`Timer \"${name}\" already started, cannot overwrite`);\n }\n\n startTimes[name] = performance.now();\n }\n\n function end(name: string): number {\n if (typeof startTimes[name] === 'undefined') {\n throw new Error(`Timer \"${name}\" never started, cannot end`);\n }\n\n timings[name] = performance.now() - startTimes[name];\n return timings[name];\n }\n\n return { start, end, getTimings: () => timings };\n}\n","import * as tsUtils from '@strapi/typescript-utils';\nimport { checkRequiredDependencies } from './core/dependencies';\nimport { writeStaticClientFiles } from './staticFiles';\nimport { build as buildWebpack } from './webpack/build';\nimport { createBuildContext } from './createBuildContext';\n\nimport EE from '@strapi/strapi/dist/utils/ee';\nimport { getTimer } from './core/timer';\n\nimport type { CLIContext } from '@strapi/strapi';\n\ninterface BuildOptions extends CLIContext {\n /**\n * @default false\n */\n ignorePrompts?: boolean;\n /**\n * Minify the output\n *\n * @default true\n */\n minify?: boolean;\n /**\n * Generate sourcemaps – useful for debugging bugs in the admin panel UI.\n */\n sourcemaps?: boolean;\n /**\n * Print stats for build\n */\n stats?: boolean;\n}\n\n/**\n * @example `$ strapi build`\n *\n * @description Builds the admin panel of the strapi application.\n */\nconst build = async ({ logger, cwd, tsconfig, ignorePrompts, ...options }: BuildOptions) => {\n const timer = getTimer();\n\n const { didInstall } = await checkRequiredDependencies({ cwd, logger, ignorePrompts }).catch(\n (err) => {\n logger.error(err.message);\n process.exit(1);\n }\n );\n\n if (didInstall) {\n return;\n }\n\n if (tsconfig?.config) {\n timer.start('compilingTS');\n const compilingTsSpinner = logger.spinner(`Compiling TS`).start();\n\n tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: false } });\n\n const compilingDuration = timer.end('compilingTS');\n compilingTsSpinner.text = `Compiling TS (${compilingDuration}ms)`;\n compilingTsSpinner.succeed();\n }\n\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${contextDuration}ms)`;\n contextSpinner.succeed();\n\n timer.start('buildAdmin');\n const buildingSpinner = logger.spinner(`Building admin panel`).start();\n console.log('');\n\n try {\n EE.init(cwd);\n\n await writeStaticClientFiles(ctx);\n await buildWebpack(ctx);\n\n const buildDuration = timer.end('buildAdmin');\n buildingSpinner.text = `Building admin panel (${buildDuration}ms)`;\n buildingSpinner.succeed();\n } catch (err) {\n buildingSpinner.fail();\n throw err;\n }\n};\n\nexport { build };\nexport type { BuildOptions };\n","import os from 'node:os';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport webpackDevMiddleware from 'webpack-dev-middleware';\nimport webpackHotMiddleware from 'webpack-hot-middleware';\nimport { webpack } from 'webpack';\nimport type { BuildContext } from '../createBuildContext';\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\nimport { Common, Strapi } from '@strapi/types';\n\ninterface WebpackWatcher {\n close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<WebpackWatcher> => {\n const config = await resolveDevelopmentConfig(ctx);\n const finalConfig = await mergeConfigWithUserConfig(config, ctx);\n\n ctx.logger.debug('Final webpack config:', os.EOL, finalConfig);\n\n return new Promise<WebpackWatcher>((res) => {\n const compiler = webpack(finalConfig);\n\n const devMiddleware = webpackDevMiddleware(compiler);\n\n // @ts-ignore\n const hotMiddleware = webpackHotMiddleware(compiler, {\n log: false,\n path: '/__webpack_hmr',\n });\n\n ctx.strapi.server.app.use((ctx, next) => {\n return new Promise((resolve, reject) => {\n hotMiddleware(ctx.req, ctx.res, (err) => {\n if (err) reject(err);\n else resolve(next());\n });\n });\n });\n\n ctx.strapi.server.app.use((context, next) => {\n // wait for webpack-dev-middleware to signal that the build is ready\n const ready = new Promise((resolve, reject) => {\n devMiddleware.waitUntilValid(() => {\n resolve(true);\n });\n });\n // tell webpack-dev-middleware to handle the request\n const init = new Promise((resolve) => {\n devMiddleware(\n context.req,\n {\n // @ts-expect-error\n end: (content) => {\n // eslint-disable-next-line no-param-reassign\n context.body = content;\n resolve(true);\n },\n getHeader: context.get.bind(context),\n // @ts-expect-error\n setHeader: context.set.bind(context),\n locals: context.state,\n },\n () => resolve(next())\n );\n });\n\n return Promise.all([ready, init]);\n });\n\n const serveAdmin: Common.MiddlewareHandler = async (ctx, next) => {\n await next();\n\n if (devMiddleware.context.outputFileSystem.createReadStream) {\n if (ctx.method !== 'HEAD' && ctx.method !== 'GET') {\n return;\n }\n\n if (ctx.body != null || ctx.status !== 404) {\n return;\n }\n\n const filename = path.resolve(finalConfig.output?.path!, 'index.html');\n ctx.type = 'html';\n ctx.body = devMiddleware.context.outputFileSystem.createReadStream(filename);\n }\n };\n\n ctx.strapi.server.routes([\n {\n method: 'GET',\n path: `${ctx.basePath}:path*`,\n handler: serveAdmin,\n config: { auth: false },\n },\n ]);\n\n devMiddleware.waitUntilValid(() => {\n res({\n async close() {\n await Promise.all([\n promisify(devMiddleware.close.bind(devMiddleware))(),\n hotMiddleware.close(),\n promisify(compiler.close.bind(compiler))(),\n ]);\n },\n });\n });\n });\n};\n\nexport { watch };\nexport type { WebpackWatcher };\n","import type { CLIContext } from '@strapi/strapi';\nimport * as tsUtils from '@strapi/typescript-utils';\nimport { joinBy } from '@strapi/utils';\nimport chokidar from 'chokidar';\nimport cluster from 'node:cluster';\n\nimport { getTimer } from './core/timer';\nimport { checkRequiredDependencies } from './core/dependencies';\nimport { createBuildContext } from './createBuildContext';\nimport { WebpackWatcher, watch as watchWebpack } from './webpack/watch';\nimport { build as buildWebpack } from './webpack/build';\n\nimport EE from '@strapi/strapi/dist/utils/ee';\nimport { writeStaticClientFiles } from './staticFiles';\nimport strapiFactory from '@strapi/strapi';\n\ninterface DevelopOptions extends CLIContext {\n /**\n * @default false\n */\n ignorePrompts?: boolean;\n polling?: boolean;\n open?: boolean;\n watchAdmin?: boolean;\n}\n\nconst develop = async ({\n cwd,\n polling,\n logger,\n tsconfig,\n ignorePrompts,\n watchAdmin,\n ...options\n}: DevelopOptions) => {\n const timer = getTimer();\n\n if (cluster.isPrimary) {\n const { didInstall } = await checkRequiredDependencies({ cwd, logger, ignorePrompts }).catch(\n (err) => {\n logger.error(err.message);\n process.exit(1);\n }\n );\n\n if (didInstall) {\n return;\n }\n\n /**\n * IF we're not watching the admin we're going to build it, this makes\n * sure that at least the admin is built for users & they can interact\n * with the application.\n */\n if (!watchAdmin) {\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${contextDuration}ms)`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n const adminSpinner = logger.spinner(`Creating admin`).start();\n\n EE.init(cwd);\n await writeStaticClientFiles(ctx);\n await buildWebpack(ctx);\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${adminDuration}ms)`;\n adminSpinner.succeed();\n }\n\n cluster.on('message', async (worker, message) => {\n switch (message) {\n case 'reload': {\n logger.debug('cluster has the reload message, sending the worker kill message');\n worker.send('kill');\n break;\n }\n case 'killed': {\n logger.debug('cluster has the killed message, forking the cluster');\n cluster.fork();\n break;\n }\n case 'stop': {\n process.exit(1);\n break;\n }\n default:\n break;\n }\n });\n\n cluster.fork();\n }\n\n if (cluster.isWorker) {\n if (tsconfig?.config) {\n timer.start('compilingTS');\n const compilingTsSpinner = logger.spinner(`Compiling TS`).start();\n\n tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: false } });\n\n const compilingDuration = timer.end('compilingTS');\n compilingTsSpinner.text = `Compiling TS (${compilingDuration}ms)`;\n compilingTsSpinner.succeed();\n }\n\n const strapi = strapiFactory({\n appDir: cwd,\n distDir: tsconfig?.config.options.outDir ?? '',\n autoReload: true,\n serveAdminPanel: !watchAdmin,\n });\n\n let webpackWatcher: WebpackWatcher | undefined;\n\n /**\n * If we're watching the admin panel then we're going to attach the watcher\n * as a strapi middleware.\n */\n if (watchAdmin) {\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n strapi,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${contextDuration}ms)`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n const adminSpinner = logger.spinner(`Creating admin`).start();\n\n EE.init(cwd);\n await writeStaticClientFiles(ctx);\n webpackWatcher = await watchWebpack(ctx);\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${adminDuration}ms)`;\n adminSpinner.succeed();\n }\n\n const strapiInstance = await strapi.load();\n\n timer.start('generatingTS');\n const generatingTsSpinner = logger.spinner(`Generating types`).start();\n\n await tsUtils.generators.generate({\n strapi: strapiInstance,\n pwd: cwd,\n rootDir: undefined,\n logger: { silent: true, debug: false },\n artifacts: { contentTypes: true, components: true },\n });\n\n const generatingDuration = timer.end('generatingTS');\n generatingTsSpinner.text = `Generating types (${generatingDuration}ms)`;\n generatingTsSpinner.succeed();\n\n const restart = async () => {\n if (strapiInstance.reload.isWatching && !strapiInstance.reload.isReloading) {\n strapiInstance.reload.isReloading = true;\n strapiInstance.reload();\n }\n };\n\n const watcher = chokidar\n .watch(cwd, {\n ignoreInitial: true,\n usePolling: polling,\n ignored: [\n /(^|[/\\\\])\\../, // dot files\n /tmp/,\n '**/src/admin/**',\n '**/src/plugins/**/admin/**',\n '**/dist/src/plugins/test/admin/**',\n '**/documentation',\n '**/documentation/**',\n '**/node_modules',\n '**/node_modules/**',\n '**/plugins.json',\n '**/build',\n '**/build/**',\n '**/index.html',\n '**/public',\n '**/public/**',\n strapiInstance.dirs.static.public,\n joinBy('/', strapiInstance.dirs.static.public, '**'),\n '**/*.db*',\n '**/exports/**',\n '**/dist/**',\n '**/*.d.ts',\n ...strapiInstance.config.get('admin.watchIgnoreFiles', []),\n ],\n })\n .on('add', (path) => {\n strapiInstance.log.info(`File created: ${path}`);\n restart();\n })\n .on('change', (path) => {\n strapiInstance.log.info(`File changed: ${path}`);\n restart();\n })\n .on('unlink', (path) => {\n strapiInstance.log.info(`File deleted: ${path}`);\n restart();\n });\n\n process.on('message', async (message) => {\n switch (message) {\n case 'kill': {\n logger.debug(\n 'child process has the kill message, destroying the strapi instance and sending the killed process message'\n );\n await watcher.close();\n\n await strapiInstance.destroy();\n\n if (webpackWatcher) {\n webpackWatcher.close();\n }\n process.send?.('killed');\n break;\n }\n default:\n break;\n }\n });\n\n strapiInstance.start();\n }\n};\n\nexport { develop };\nexport type { DevelopOptions };\n"],"names":["build","develop","readPkgUp","os","inquirer","execa","semver","resolveFrom","path","fs","jsx","jsxs","outdent","renderToStaticMarkup","createElement","Document","format","findRoot","access","register","browserslistToEsbuild","HtmlWebpackPlugin","DefinePlugin","ForkTsCheckerPlugin","crypto","HotModuleReplacementPlugin","ReactRefreshWebpackPlugin","ESBuildMinifyPlugin","MiniCssExtractPlugin","BundleAnalyzerPlugin","webpack","chalk","boxen","dotenv","env","camelCase","strapiFactory","getConfigUrls","browserslist","performance","tsUtils","EE","buildWebpack","webpackDevMiddleware","webpackHotMiddleware","ctx","promisify","cluster","watchWebpack","chokidar","joinBy"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import PropTypes from "prop-types";
3
3
  import { useIntl } from "react-intl";
4
- import { T as getBasename } from "./index-4c3eb885.mjs";
4
+ import { T as getBasename } from "./index-f1c47f19.mjs";
5
5
  import { IconButton, Select, Option } from "@strapi/design-system";
6
6
  import { useNotification, useClipboard, ContentBox, getFetchClient } from "@strapi/helper-plugin";
7
7
  import { Duplicate, Loader as Loader$1 } from "@strapi/icons";
@@ -129,4 +129,4 @@ export {
129
129
  SelectRoles as S,
130
130
  MagicLinkWrapper as a
131
131
  };
132
- //# sourceMappingURL=index-d0efe393.mjs.map
132
+ //# sourceMappingURL=index-6720b4ee.mjs.map