@strapi/admin 4.2.0-beta.0 → 4.2.0-beta.3

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 (548) hide show
  1. package/admin/src/assets/images/homepage-logo.png +0 -0
  2. package/admin/src/assets/images/icon_offline-cloud.svg +5 -0
  3. package/admin/src/components/AuthenticatedApp/utils/api.js +1 -1
  4. package/admin/src/components/AutoReloadOverlayBlockerProvider/Blocker.js +3 -7
  5. package/admin/src/components/GuidedTour/Homepage/index.js +1 -2
  6. package/admin/src/components/GuidedTour/Modal/components/Stepper.js +1 -2
  7. package/admin/src/components/LeftMenu/index.js +9 -7
  8. package/admin/src/components/Notifications/Notification/index.js +2 -2
  9. package/admin/src/components/UpgradePlanModal/index.js +6 -2
  10. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +17 -3
  11. package/admin/src/content-manager/components/ComponentInitializer/index.js +9 -4
  12. package/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js +135 -0
  13. package/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js +32 -0
  14. package/admin/src/content-manager/components/DynamicTable/CellContent/RepeatableComponent/index.js +62 -0
  15. package/admin/src/content-manager/components/DynamicTable/CellContent/SingleComponent/index.js +37 -0
  16. package/admin/src/content-manager/components/DynamicTable/CellContent/index.js +52 -27
  17. package/admin/src/content-manager/components/DynamicTable/CellContent/utils/hasContent.js +64 -0
  18. package/admin/src/content-manager/components/DynamicTable/CellContent/utils/isSingleRelation.js +3 -0
  19. package/admin/src/content-manager/components/DynamicTable/TableRows/index.js +1 -1
  20. package/admin/src/content-manager/components/DynamicZone/components/ComponentPicker/Category/ComponentCard/index.js +1 -1
  21. package/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +37 -37
  22. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/getAPIInnerError.js +18 -0
  23. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/handleAPIError.js +15 -0
  24. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/index.js +0 -1
  25. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +9 -7
  26. package/admin/src/content-manager/components/FieldComponent/index.js +0 -1
  27. package/admin/src/content-manager/components/InputUID/index.js +1 -5
  28. package/admin/src/content-manager/components/Inputs/index.js +4 -6
  29. package/admin/src/content-manager/components/RepeatableComponent/AccordionGroupCustom/index.js +3 -1
  30. package/admin/src/content-manager/components/RepeatableComponent/index.js +3 -18
  31. package/admin/src/content-manager/components/RepeatableComponent/utils/getComponentErrorKeys.js +10 -0
  32. package/admin/src/content-manager/components/SelectMany/ListItem.js +1 -2
  33. package/admin/src/content-manager/components/SelectMany/index.js +1 -1
  34. package/admin/src/content-manager/components/SelectOne/index.js +1 -1
  35. package/admin/src/content-manager/components/SelectWrapper/index.js +8 -7
  36. package/admin/src/content-manager/components/SelectWrapper/utils/getSelectStyles.js +1 -1
  37. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +17 -5
  38. package/admin/src/content-manager/components/Wysiwyg/Editor.js +2 -0
  39. package/admin/src/content-manager/components/Wysiwyg/index.js +3 -4
  40. package/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +23 -2
  41. package/admin/src/content-manager/pages/App/LeftMenu/index.js +8 -7
  42. package/admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js +1 -1
  43. package/admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js +1 -1
  44. package/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js +1 -1
  45. package/admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js +1 -2
  46. package/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +6 -1
  47. package/admin/src/content-manager/pages/EditSettingsView/index.js +4 -5
  48. package/admin/src/content-manager/pages/EditSettingsView/utils/layout.js +7 -1
  49. package/admin/src/content-manager/pages/EditView/DeleteLink/index.js +1 -4
  50. package/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js +1 -4
  51. package/admin/src/content-manager/pages/EditView/Header/index.js +4 -4
  52. package/admin/src/content-manager/pages/EditView/index.js +1 -4
  53. package/admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js +1 -1
  54. package/admin/src/content-manager/pages/ListSettingsView/index.js +3 -4
  55. package/admin/src/content-manager/pages/ListView/actions.js +2 -1
  56. package/admin/src/content-manager/pages/ListView/index.js +3 -6
  57. package/admin/src/content-manager/pages/ListView/reducer.js +55 -21
  58. package/admin/src/content-manager/pages/ListView/selectors.js +3 -6
  59. package/admin/src/content-manager/pages/ListViewLayoutManager/index.js +1 -1
  60. package/admin/src/content-manager/pages/NoContentType/index.js +1 -2
  61. package/admin/src/content-manager/testUtils/data.js +5 -1
  62. package/admin/src/content-manager/utils/checkIfAttributeIsDisplayable.js +1 -1
  63. package/admin/src/content-manager/utils/isFieldTypeNumber.js +3 -0
  64. package/admin/src/hooks/useMenu/reducer.js +3 -3
  65. package/admin/src/hooks/useNavigatorOnLine/index.js +31 -0
  66. package/admin/src/hooks/useReleaseNotification/index.js +1 -1
  67. package/admin/src/hooks/useSettingsMenu/init.js +2 -2
  68. package/admin/src/layouts/UnauthenticatedLayout/index.js +1 -1
  69. package/admin/src/pages/Admin/Onboarding/index.js +1 -1
  70. package/admin/src/pages/Admin/index.js +15 -5
  71. package/admin/src/pages/App/constants.js +1 -0
  72. package/admin/src/pages/App/index.js +17 -3
  73. package/admin/src/pages/App/reducer.js +22 -0
  74. package/admin/src/pages/AuthPage/components/ForgotPassword/index.js +1 -2
  75. package/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js +1 -1
  76. package/admin/src/pages/AuthPage/components/Login/BaseLogin.js +2 -3
  77. package/admin/src/pages/AuthPage/components/Oops/index.js +1 -2
  78. package/admin/src/pages/AuthPage/components/Register/index.js +18 -18
  79. package/admin/src/pages/AuthPage/components/ResetPassword/index.js +6 -7
  80. package/admin/src/pages/HomePage/ContentBlocks.js +16 -3
  81. package/admin/src/pages/HomePage/HomeHeader.js +2 -2
  82. package/admin/src/pages/HomePage/SocialLinks.js +4 -6
  83. package/admin/src/pages/InstalledPluginsPage/Plugins.js +3 -3
  84. package/admin/src/pages/InstalledPluginsPage/index.js +1 -1
  85. package/admin/src/pages/InternalErrorPage/index.js +1 -2
  86. package/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js +40 -0
  87. package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +47 -0
  88. package/admin/src/pages/MarketplacePage/components/PluginCard/InstallPluginButton.js +66 -0
  89. package/admin/src/pages/MarketplacePage/components/PluginCard/index.js +17 -39
  90. package/admin/src/pages/MarketplacePage/index.js +65 -27
  91. package/admin/src/pages/NotFoundPage/index.js +1 -2
  92. package/admin/src/pages/ProfilePage/index.js +5 -5
  93. package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +6 -5
  94. package/admin/src/pages/SettingsPage/index.js +1 -1
  95. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/LoadingView/index.js +1 -1
  96. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +4 -4
  97. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DeleteButton/index.js +1 -1
  98. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/UpdateButton/index.js +1 -1
  99. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +1 -1
  100. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +9 -3
  101. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsButton/index.js +1 -1
  102. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js +3 -3
  103. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +3 -3
  104. package/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +6 -6
  105. package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +6 -6
  106. package/admin/src/pages/SettingsPage/pages/Users/EditPage/utils/layout.js +1 -1
  107. package/admin/src/pages/SettingsPage/pages/Users/ListPage/DynamicTable/TableRows/index.js +1 -1
  108. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +1 -1
  109. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/stepper.js +1 -1
  110. package/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +1 -1
  111. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +4 -5
  112. package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +8 -8
  113. package/admin/src/pages/UseCasePage/index.js +2 -2
  114. package/admin/src/reducers.js +4 -2
  115. package/admin/src/translations/ar.json +0 -6
  116. package/admin/src/translations/ca.json +699 -0
  117. package/admin/src/translations/cs.json +0 -8
  118. package/admin/src/translations/de.json +244 -49
  119. package/admin/src/translations/dk.json +0 -53
  120. package/admin/src/translations/en.json +87 -99
  121. package/admin/src/translations/es.json +0 -53
  122. package/admin/src/translations/fr.json +0 -56
  123. package/admin/src/translations/he.json +0 -24
  124. package/admin/src/translations/hu.json +0 -53
  125. package/admin/src/translations/id.json +0 -21
  126. package/admin/src/translations/it.json +0 -22
  127. package/admin/src/translations/ja.json +0 -53
  128. package/admin/src/translations/ko.json +0 -56
  129. package/admin/src/translations/languageNativeNames.js +1 -0
  130. package/admin/src/translations/ms.json +0 -12
  131. package/admin/src/translations/nl.json +0 -53
  132. package/admin/src/translations/no.json +0 -22
  133. package/admin/src/translations/pl.json +0 -26
  134. package/admin/src/translations/pt-BR.json +0 -53
  135. package/admin/src/translations/pt.json +0 -13
  136. package/admin/src/translations/ru.json +34 -25
  137. package/admin/src/translations/sk.json +0 -21
  138. package/admin/src/translations/sv.json +0 -6
  139. package/admin/src/translations/th.json +0 -21
  140. package/admin/src/translations/tr.json +0 -13
  141. package/admin/src/translations/uk.json +0 -12
  142. package/admin/src/translations/vi.json +1 -10
  143. package/admin/src/translations/zh-Hans.json +0 -53
  144. package/admin/src/translations/zh.json +0 -56
  145. package/admin/src/tsconfig.json +10 -0
  146. package/build/1709.ceed0e18.chunk.js +503 -0
  147. package/build/1856.521a99fd.chunk.js +172 -0
  148. package/build/20.cf744c35.chunk.js +308 -0
  149. package/build/2077.51485bfb.chunk.js +194 -0
  150. package/build/210.014495c1.chunk.js +338 -0
  151. package/build/2135.95ee6de1.chunk.js +162 -0
  152. package/build/2524.688d0355.chunk.js +1 -0
  153. package/build/2912.79c2b3c8.chunk.js +253 -0
  154. package/build/4073.41ac1235.chunk.js +1 -0
  155. package/build/4715.77e04177.chunk.js +385 -0
  156. package/build/4761.3eabdf46.chunk.js +101 -0
  157. package/build/6229.a5cca9f2.chunk.js +194 -0
  158. package/build/6281.f10a7e3a.chunk.js +1 -0
  159. package/build/6925.fafef528.chunk.js +761 -0
  160. package/build/7009.79fce86d.chunk.js +164 -0
  161. package/build/7191.3bde3cbf.chunk.js +335 -0
  162. package/build/7841.f0e7d629.chunk.js +253 -0
  163. package/build/7863.bc7a8f3a.chunk.js +112 -0
  164. package/build/8469.3af1823d.chunk.js +1 -0
  165. package/build/9420.cb0b75e8.chunk.js +508 -0
  166. package/build/Admin-authenticatedApp.4ce8d292.chunk.js +80 -0
  167. package/build/Admin_homePage.f157e33e.chunk.js +71 -0
  168. package/build/Admin_marketplace.1e3393c9.chunk.js +11 -0
  169. package/build/Admin_pluginsPage.788fb2f6.chunk.js +1 -0
  170. package/build/Admin_profilePage.62c203ad.chunk.js +15 -0
  171. package/build/Admin_settingsPage.924a7816.chunk.js +170 -0
  172. package/build/a6b842e0b6d2b61135d1.svg +5 -0
  173. package/build/admin-edit-roles-page.94e1403b.chunk.js +1 -0
  174. package/build/admin-edit-users.6c2bf718.chunk.js +10 -0
  175. package/build/admin-users.e03db115.chunk.js +11 -0
  176. package/build/api-tokens-create-page.787ab302.chunk.js +1 -0
  177. package/build/api-tokens-edit-page.e4010c0c.chunk.js +1 -0
  178. package/build/api-tokens-list-page.340750a6.chunk.js +15 -0
  179. package/build/ar-json.d4cb26d9.chunk.js +1 -0
  180. package/build/ca-json.0097e443.chunk.js +1 -0
  181. package/build/codemirror-addon-closebrackets.c0f97916.chunk.js +2 -0
  182. package/build/codemirror-addon-lint-js.7c35dcb0.chunk.js +1 -0
  183. package/build/codemirror-addon-lint.505ff1d4.chunk.js +1 -0
  184. package/build/codemirror-addon-mark-selection.653e904d.chunk.js +1 -0
  185. package/build/codemirror-css.b467b1de.chunk.js +346 -0
  186. package/build/codemirror-javacript.41bdefda.chunk.js +1 -0
  187. package/build/codemirror-theme.cf9f9eb6.chunk.js +34 -0
  188. package/build/content-manager.6cdcfb6e.chunk.js +1204 -0
  189. package/build/content-type-builder-translation-ar-json.142327af.chunk.js +1 -0
  190. package/build/content-type-builder-translation-cs-json.4aafb972.chunk.js +1 -0
  191. package/build/content-type-builder-translation-de-json.0d7696b9.chunk.js +1 -0
  192. package/build/content-type-builder-translation-dk-json.4729f055.chunk.js +1 -0
  193. package/build/content-type-builder-translation-en-json.e5110288.chunk.js +1 -0
  194. package/build/content-type-builder-translation-es-json.333cf47f.chunk.js +1 -0
  195. package/build/content-type-builder-translation-fr-json.aa6eeea8.chunk.js +1 -0
  196. package/build/content-type-builder-translation-id-json.7c00a32a.chunk.js +1 -0
  197. package/build/content-type-builder-translation-it-json.a906b389.chunk.js +1 -0
  198. package/build/content-type-builder-translation-ja-json.87f71930.chunk.js +1 -0
  199. package/build/content-type-builder-translation-ko-json.51201b12.chunk.js +1 -0
  200. package/build/content-type-builder-translation-ms-json.963a1a01.chunk.js +1 -0
  201. package/build/content-type-builder-translation-nl-json.c46c8f30.chunk.js +1 -0
  202. package/build/content-type-builder-translation-pl-json.a866acda.chunk.js +1 -0
  203. package/build/content-type-builder-translation-pt-BR-json.5739a2aa.chunk.js +1 -0
  204. package/build/content-type-builder-translation-pt-json.766bd747.chunk.js +1 -0
  205. package/build/content-type-builder-translation-ru-json.cf8d7c5c.chunk.js +1 -0
  206. package/build/content-type-builder-translation-sk-json.3a6defe0.chunk.js +1 -0
  207. package/build/content-type-builder-translation-th-json.c96a2d3f.chunk.js +1 -0
  208. package/build/content-type-builder-translation-tr-json.2e52bc60.chunk.js +1 -0
  209. package/build/content-type-builder-translation-uk-json.d8c0b6dd.chunk.js +1 -0
  210. package/build/content-type-builder-translation-zh-Hans-json.92a27f59.chunk.js +1 -0
  211. package/build/content-type-builder-translation-zh-json.2cc55621.chunk.js +1 -0
  212. package/build/content-type-builder.e73879b9.chunk.js +141 -0
  213. package/build/cropper-css.ecc0d670.chunk.js +306 -0
  214. package/build/cs-json.c8f28ba8.chunk.js +1 -0
  215. package/build/de-json.0b92acd2.chunk.js +1 -0
  216. package/build/dk-json.9f1bc016.chunk.js +1 -0
  217. package/build/email-settings-page.f67d13b2.chunk.js +103 -0
  218. package/build/{email-translation-de-json.559a7d5f.chunk.js → email-translation-ar-json.c624512d.chunk.js} +1 -1
  219. package/build/{email-translation-ar-json.95d90eb4.chunk.js → email-translation-cs-json.cb18caab.chunk.js} +1 -1
  220. package/build/{email-translation-it-json.3de61cb6.chunk.js → email-translation-de-json.54743260.chunk.js} +1 -1
  221. package/build/{email-translation-dk-json.f8a595bf.chunk.js → email-translation-dk-json.f323fe4e.chunk.js} +1 -1
  222. package/build/{email-translation-en-json.fa0dc92b.chunk.js → email-translation-en-json.6da7e388.chunk.js} +1 -1
  223. package/build/{email-translation-es-json.eb303dea.chunk.js → email-translation-es-json.9021417d.chunk.js} +1 -1
  224. package/build/{email-translation-fr-json.49c3c888.chunk.js → email-translation-fr-json.9f125db0.chunk.js} +1 -1
  225. package/build/email-translation-id-json.3bcae5f5.chunk.js +1 -0
  226. package/build/{email-translation-cs-json.dfd1f3f2.chunk.js → email-translation-it-json.6ffd1774.chunk.js} +1 -1
  227. package/build/email-translation-ja-json.72b3f73c.chunk.js +1 -0
  228. package/build/email-translation-ko-json.e61d4e7a.chunk.js +1 -0
  229. package/build/email-translation-ms-json.b2b11e05.chunk.js +1 -0
  230. package/build/email-translation-nl-json.5349635f.chunk.js +1 -0
  231. package/build/email-translation-pl-json.6da50d0f.chunk.js +1 -0
  232. package/build/email-translation-pt-BR-json.2c98ab20.chunk.js +1 -0
  233. package/build/email-translation-pt-json.959ea070.chunk.js +1 -0
  234. package/build/email-translation-ru-json.d508cf3e.chunk.js +1 -0
  235. package/build/email-translation-sk-json.fa1fd4b3.chunk.js +1 -0
  236. package/build/email-translation-th-json.989cfecc.chunk.js +1 -0
  237. package/build/email-translation-tr-json.87f2feb3.chunk.js +1 -0
  238. package/build/email-translation-uk-json.0396a803.chunk.js +1 -0
  239. package/build/email-translation-vi-json.c0d8c414.chunk.js +1 -0
  240. package/build/email-translation-zh-Hans-json.b463cb25.chunk.js +1 -0
  241. package/build/email-translation-zh-json.3455468b.chunk.js +1 -0
  242. package/build/en-json.3e1a222e.chunk.js +1 -0
  243. package/build/es-json.2a5a9fc1.chunk.js +1 -0
  244. package/build/fb376b132d18bf4522ca.png +0 -0
  245. package/build/fontawesome-css-all.04f33619.chunk.js +4618 -0
  246. package/build/fontawesome-css.477ba714.chunk.js +6 -0
  247. package/build/fontawesome-js.252cc5f3.chunk.js +7 -0
  248. package/build/fr-json.84064a0b.chunk.js +1 -0
  249. package/build/he-json.d40da459.chunk.js +1 -0
  250. package/build/highlight.js.3381ffc3.chunk.js +86 -0
  251. package/build/hu-json.c81ce352.chunk.js +1 -0
  252. package/build/i18n-settings-page.6b67cb75.chunk.js +101 -0
  253. package/build/i18n-translation-de-json.92534555.chunk.js +1 -0
  254. package/build/{i18n-translation-dk-json.ecf02d28.chunk.js → i18n-translation-dk-json.54f410ca.chunk.js} +1 -1
  255. package/build/{i18n-translation-en-json.4d823f62.chunk.js → i18n-translation-en-json.85bc892c.chunk.js} +1 -1
  256. package/build/i18n-translation-es-json.488206ae.chunk.js +1 -0
  257. package/build/i18n-translation-fr-json.0839d68d.chunk.js +1 -0
  258. package/build/i18n-translation-ko-json.d0bc1203.chunk.js +1 -0
  259. package/build/i18n-translation-zh-Hans-json.560a98e3.chunk.js +1 -0
  260. package/build/id-json.fad45d17.chunk.js +1 -0
  261. package/build/index.html +1 -1
  262. package/build/it-json.12df4cdf.chunk.js +1 -0
  263. package/build/ja-json.850237e9.chunk.js +1 -0
  264. package/build/ko-json.2f3d256e.chunk.js +1 -0
  265. package/build/main.45472ea9.js +8404 -0
  266. package/build/ms-json.836ed013.chunk.js +1 -0
  267. package/build/nl-json.465b173f.chunk.js +1 -0
  268. package/build/no-json.e8749dd4.chunk.js +1 -0
  269. package/build/pl-json.94f05d2c.chunk.js +1 -0
  270. package/build/pt-BR-json.6301d49b.chunk.js +1 -0
  271. package/build/pt-json.c23020ab.chunk.js +1 -0
  272. package/build/ru-json.28147733.chunk.js +1 -0
  273. package/build/runtime~main.e7611418.js +2 -0
  274. package/build/sk-json.5b33afc2.chunk.js +1 -0
  275. package/build/sso-settings-page.e9034e22.chunk.js +1 -0
  276. package/build/sv-json.cdcac02d.chunk.js +1 -0
  277. package/build/th-json.3aadaec6.chunk.js +1 -0
  278. package/build/tr-json.276e59fe.chunk.js +1 -0
  279. package/build/uk-json.5b5b9c27.chunk.js +1 -0
  280. package/build/upload-settings.3db55de0.chunk.js +101 -0
  281. package/build/upload-translation-ca-json.79159984.chunk.js +1 -0
  282. package/build/upload-translation-de-json.b642da08.chunk.js +1 -0
  283. package/build/upload-translation-dk-json.fc61df13.chunk.js +1 -0
  284. package/build/upload-translation-en-json.59269508.chunk.js +1 -0
  285. package/build/upload-translation-es-json.8ec935ef.chunk.js +1 -0
  286. package/build/upload-translation-fr-json.eb9b4f84.chunk.js +1 -0
  287. package/build/upload-translation-he-json.c226f2dc.chunk.js +1 -0
  288. package/build/upload-translation-it-json.8e58456e.chunk.js +1 -0
  289. package/build/upload-translation-ja-json.1378a2e7.chunk.js +1 -0
  290. package/build/upload-translation-ko-json.5e06e112.chunk.js +1 -0
  291. package/build/upload-translation-ms-json.dc3bf0d7.chunk.js +1 -0
  292. package/build/upload-translation-pl-json.6071e38c.chunk.js +1 -0
  293. package/build/upload-translation-pt-BR-json.7e8d9550.chunk.js +1 -0
  294. package/build/upload-translation-ru-json.da2529f3.chunk.js +1 -0
  295. package/build/upload-translation-sk-json.bfdf4f09.chunk.js +1 -0
  296. package/build/upload-translation-th-json.6a48b826.chunk.js +1 -0
  297. package/build/upload-translation-uk-json.6fb09148.chunk.js +1 -0
  298. package/build/upload-translation-zh-Hans-json.c9622577.chunk.js +1 -0
  299. package/build/upload-translation-zh-json.711f804b.chunk.js +1 -0
  300. package/build/upload.070c189b.chunk.js +105 -0
  301. package/build/users-advanced-settings-page.a23cda17.chunk.js +101 -0
  302. package/build/users-email-settings-page.0a096388.chunk.js +1 -0
  303. package/build/users-permissions-translation-ar-json.e8123ed2.chunk.js +1 -0
  304. package/build/users-permissions-translation-cs-json.e6649c5f.chunk.js +1 -0
  305. package/build/users-permissions-translation-de-json.c3628843.chunk.js +1 -0
  306. package/build/users-permissions-translation-dk-json.fe39c74b.chunk.js +1 -0
  307. package/build/users-permissions-translation-en-json.3fe86528.chunk.js +1 -0
  308. package/build/users-permissions-translation-es-json.1bb9cde2.chunk.js +1 -0
  309. package/build/users-permissions-translation-fr-json.172aa69f.chunk.js +1 -0
  310. package/build/users-permissions-translation-id-json.5aadd143.chunk.js +1 -0
  311. package/build/users-permissions-translation-it-json.7d377480.chunk.js +1 -0
  312. package/build/users-permissions-translation-ja-json.4967badf.chunk.js +1 -0
  313. package/build/users-permissions-translation-ko-json.3be77775.chunk.js +1 -0
  314. package/build/users-permissions-translation-ms-json.ea8a2baf.chunk.js +1 -0
  315. package/build/users-permissions-translation-nl-json.d638c4ce.chunk.js +1 -0
  316. package/build/users-permissions-translation-pl-json.3c4fe81c.chunk.js +1 -0
  317. package/build/users-permissions-translation-pt-BR-json.f6791a86.chunk.js +1 -0
  318. package/build/users-permissions-translation-pt-json.38afed04.chunk.js +1 -0
  319. package/build/users-permissions-translation-ru-json.319d51ef.chunk.js +1 -0
  320. package/build/users-permissions-translation-sk-json.ba1cd385.chunk.js +1 -0
  321. package/build/users-permissions-translation-sv-json.83c60841.chunk.js +1 -0
  322. package/build/users-permissions-translation-th-json.68873214.chunk.js +1 -0
  323. package/build/users-permissions-translation-tr-json.cdc49a3c.chunk.js +1 -0
  324. package/build/users-permissions-translation-uk-json.63eaa01c.chunk.js +1 -0
  325. package/build/users-permissions-translation-vi-json.dccc02fc.chunk.js +1 -0
  326. package/build/users-permissions-translation-zh-Hans-json.c3fd301b.chunk.js +1 -0
  327. package/build/users-permissions-translation-zh-json.e03ae2a4.chunk.js +1 -0
  328. package/build/users-providers-settings-page.bfe7755a.chunk.js +1 -0
  329. package/build/users-roles-settings-page.988ebc3b.chunk.js +30 -0
  330. package/build/vi-json.3d14e91e.chunk.js +1 -0
  331. package/build/webhook-edit-page.2fa94db3.chunk.js +23 -0
  332. package/build/webhook-list-page.b594db49.chunk.js +133 -0
  333. package/build/zh-Hans-json.c84ce330.chunk.js +1 -0
  334. package/build/zh-json.96bf6019.chunk.js +1 -0
  335. package/ee/admin/pages/AuthPage/components/Providers/SSOProviders.js +1 -1
  336. package/ee/admin/pages/AuthPage/components/Providers/index.js +1 -1
  337. package/ee/admin/pages/SettingsPage/SingleSignOn/index.js +2 -2
  338. package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +6 -6
  339. package/ee/admin/pages/SettingsPage/pages/Roles/ListPage/index.js +6 -6
  340. package/ee/server/controllers/user.js +4 -0
  341. package/index.js +32 -27
  342. package/package.json +12 -14
  343. package/scripts/build.js +32 -4
  344. package/server/bootstrap.js +9 -7
  345. package/server/config/index.js +0 -1
  346. package/server/controllers/admin.js +22 -1
  347. package/server/controllers/user.js +4 -0
  348. package/server/policies/index.js +1 -0
  349. package/server/policies/isTelemetryEnabled.js +16 -0
  350. package/server/routes/admin.js +9 -0
  351. package/server/services/api-token.js +15 -14
  352. package/server/services/permission/permissions-manager/sanitize.js +22 -0
  353. package/server/services/token.js +13 -0
  354. package/server/services/user.js +1 -1
  355. package/server/validation/permission.js +5 -1
  356. package/utils/create-cache-dir.js +57 -15
  357. package/utils/get-custom-app-config-file.js +23 -0
  358. package/utils/get-plugins-path.js +26 -0
  359. package/utils/should-build-admin.js +7 -6
  360. package/utils/watch-admin-files.js +4 -1
  361. package/webpack.config.js +100 -91
  362. package/admin/src/content-manager/components/DynamicComponentCard/index.js +0 -43
  363. package/admin/src/content-manager/components/DynamicTable/CellContent/Relation/PopoverContent.js +0 -87
  364. package/admin/src/content-manager/components/DynamicTable/CellContent/Relation/index.js +0 -107
  365. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/getYupInnerErrors.js +0 -17
  366. package/build/1094.e1db3a1a.chunk.js +0 -1
  367. package/build/1454.f065d92a.chunk.js +0 -2
  368. package/build/1454.f065d92a.chunk.js.LICENSE.txt +0 -7
  369. package/build/1856.a30bd09b.chunk.js +0 -1
  370. package/build/2481.4eae9408.chunk.js +0 -1
  371. package/build/2912.c5f76e65.chunk.js +0 -1
  372. package/build/2a9e9ef5c4c775bb7c7b.png +0 -0
  373. package/build/4362.b3d67035.chunk.js +0 -1
  374. package/build/4715.8a2db02a.chunk.js +0 -1
  375. package/build/4800.f4a1384a.chunk.js +0 -1
  376. package/build/497.3fcf6196.chunk.js +0 -1
  377. package/build/4982.601f6196.chunk.js +0 -1
  378. package/build/6404.3c2d0a81.chunk.js +0 -1
  379. package/build/6925.bd694b04.chunk.js +0 -2
  380. package/build/6925.bd694b04.chunk.js.LICENSE.txt +0 -5
  381. package/build/7841.490dbbf1.chunk.js +0 -1
  382. package/build/8042.1d66811a.chunk.js +0 -2
  383. package/build/8042.1d66811a.chunk.js.LICENSE.txt +0 -4
  384. package/build/8469.8d819a3c.chunk.js +0 -1
  385. package/build/849.17f011e8.chunk.js +0 -1
  386. package/build/9235.ced8aebf.chunk.js +0 -1
  387. package/build/9260.4233fae2.chunk.js +0 -2
  388. package/build/9260.4233fae2.chunk.js.LICENSE.txt +0 -15
  389. package/build/9853.6ff595fa.chunk.js +0 -1
  390. package/build/9988.fe838ba6.chunk.js +0 -2
  391. package/build/9988.fe838ba6.chunk.js.LICENSE.txt +0 -9
  392. package/build/Admin-authenticatedApp.16bed71f.chunk.js +0 -1
  393. package/build/Admin_homePage.fd1fc572.chunk.js +0 -1
  394. package/build/Admin_marketplace.89a0a014.chunk.js +0 -1
  395. package/build/Admin_pluginsPage.97a514db.chunk.js +0 -1
  396. package/build/Admin_profilePage.d7192d06.chunk.js +0 -1
  397. package/build/Admin_settingsPage.a8c7ded5.chunk.js +0 -1
  398. package/build/admin-edit-roles-page.49b6f01d.chunk.js +0 -1
  399. package/build/admin-edit-users.381e4a0d.chunk.js +0 -1
  400. package/build/admin-users.2740c223.chunk.js +0 -1
  401. package/build/api-tokens-create-page.db17bb39.chunk.js +0 -1
  402. package/build/api-tokens-edit-page.c7299a77.chunk.js +0 -1
  403. package/build/api-tokens-list-page.26a05a21.chunk.js +0 -1
  404. package/build/ar-json.6a2565af.chunk.js +0 -1
  405. package/build/codemirror-addon-closebrackets.0cfe64d0.chunk.js +0 -1
  406. package/build/codemirror-addon-lint-js.a6eeef9c.chunk.js +0 -1
  407. package/build/codemirror-addon-lint.91580cda.chunk.js +0 -1
  408. package/build/codemirror-addon-mark-selection.4dca121f.chunk.js +0 -1
  409. package/build/codemirror-css.48b438c9.chunk.js +0 -1
  410. package/build/codemirror-javacript.8c7c015d.chunk.js +0 -1
  411. package/build/codemirror-theme.b5559efc.chunk.js +0 -1
  412. package/build/content-manager.f1c46a88.chunk.js +0 -1
  413. package/build/content-type-builder-translation-ar-json.f1fedc12.chunk.js +0 -1
  414. package/build/content-type-builder-translation-cs-json.89f7272e.chunk.js +0 -1
  415. package/build/content-type-builder-translation-de-json.0205697c.chunk.js +0 -1
  416. package/build/content-type-builder-translation-dk-json.235ff56e.chunk.js +0 -1
  417. package/build/content-type-builder-translation-en-json.8034dab6.chunk.js +0 -1
  418. package/build/content-type-builder-translation-es-json.13b2e2aa.chunk.js +0 -1
  419. package/build/content-type-builder-translation-fr-json.bee621f7.chunk.js +0 -1
  420. package/build/content-type-builder-translation-id-json.2fbf4f8c.chunk.js +0 -1
  421. package/build/content-type-builder-translation-it-json.a1afd7a9.chunk.js +0 -1
  422. package/build/content-type-builder-translation-ja-json.1459fb88.chunk.js +0 -1
  423. package/build/content-type-builder-translation-ko-json.d2080111.chunk.js +0 -1
  424. package/build/content-type-builder-translation-ms-json.048122eb.chunk.js +0 -1
  425. package/build/content-type-builder-translation-nl-json.8d59e86b.chunk.js +0 -1
  426. package/build/content-type-builder-translation-pl-json.01dc068c.chunk.js +0 -1
  427. package/build/content-type-builder-translation-pt-BR-json.d311d056.chunk.js +0 -1
  428. package/build/content-type-builder-translation-pt-json.4893266f.chunk.js +0 -1
  429. package/build/content-type-builder-translation-ru-json.1285874d.chunk.js +0 -1
  430. package/build/content-type-builder-translation-sk-json.0064156b.chunk.js +0 -1
  431. package/build/content-type-builder-translation-th-json.5f690524.chunk.js +0 -1
  432. package/build/content-type-builder-translation-tr-json.696283a5.chunk.js +0 -1
  433. package/build/content-type-builder-translation-uk-json.87496bf9.chunk.js +0 -1
  434. package/build/content-type-builder-translation-zh-Hans-json.283c640e.chunk.js +0 -1
  435. package/build/content-type-builder-translation-zh-json.77aa2275.chunk.js +0 -1
  436. package/build/content-type-builder.cda4ba3c.chunk.js +0 -1
  437. package/build/cropper-css.ace19575.chunk.js +0 -1
  438. package/build/cs-json.8df09876.chunk.js +0 -1
  439. package/build/de-json.6e14f607.chunk.js +0 -1
  440. package/build/dk-json.be388470.chunk.js +0 -1
  441. package/build/email-settings-page.40ee2bda.chunk.js +0 -1
  442. package/build/email-translation-id-json.e3c2101d.chunk.js +0 -1
  443. package/build/email-translation-ja-json.66337e44.chunk.js +0 -1
  444. package/build/email-translation-ko-json.52bbd7b4.chunk.js +0 -1
  445. package/build/email-translation-ms-json.e39256df.chunk.js +0 -1
  446. package/build/email-translation-nl-json.12d28adb.chunk.js +0 -1
  447. package/build/email-translation-pl-json.9585a84e.chunk.js +0 -1
  448. package/build/email-translation-pt-BR-json.6c04b3ef.chunk.js +0 -1
  449. package/build/email-translation-pt-json.0239be04.chunk.js +0 -1
  450. package/build/email-translation-ru-json.f3b4fecc.chunk.js +0 -1
  451. package/build/email-translation-sk-json.76dbaaa6.chunk.js +0 -1
  452. package/build/email-translation-th-json.25ad73e7.chunk.js +0 -1
  453. package/build/email-translation-tr-json.ae04a9f2.chunk.js +0 -1
  454. package/build/email-translation-uk-json.03b27b08.chunk.js +0 -1
  455. package/build/email-translation-vi-json.3e1dd5b3.chunk.js +0 -1
  456. package/build/email-translation-zh-Hans-json.0df4ca59.chunk.js +0 -1
  457. package/build/email-translation-zh-json.82978eb0.chunk.js +0 -1
  458. package/build/en-json.73a610d6.chunk.js +0 -1
  459. package/build/es-json.61553168.chunk.js +0 -1
  460. package/build/fontawesome-css-all.3b89f909.chunk.js +0 -1
  461. package/build/fontawesome-css.36cff9ae.chunk.js +0 -1
  462. package/build/fontawesome-js.2639263c.chunk.js +0 -2
  463. package/build/fontawesome-js.2639263c.chunk.js.LICENSE.txt +0 -4
  464. package/build/fr-json.a9ce0700.chunk.js +0 -1
  465. package/build/he-json.1742494e.chunk.js +0 -1
  466. package/build/highlight.js.6321cb45.chunk.js +0 -1
  467. package/build/hu-json.e667d285.chunk.js +0 -1
  468. package/build/i18n-settings-page.c4018651.chunk.js +0 -1
  469. package/build/i18n-translation-de-json.c5c9054f.chunk.js +0 -1
  470. package/build/i18n-translation-es-json.7049afa2.chunk.js +0 -1
  471. package/build/i18n-translation-fr-json.c6367bc9.chunk.js +0 -1
  472. package/build/i18n-translation-ko-json.aecb7e01.chunk.js +0 -1
  473. package/build/i18n-translation-zh-Hans-json.258b2e1a.chunk.js +0 -1
  474. package/build/id-json.d87ebb20.chunk.js +0 -1
  475. package/build/it-json.a2880b81.chunk.js +0 -1
  476. package/build/ja-json.e13f04e8.chunk.js +0 -1
  477. package/build/ko-json.2200c9c9.chunk.js +0 -1
  478. package/build/main.12d62562.js +0 -2
  479. package/build/main.12d62562.js.LICENSE.txt +0 -91
  480. package/build/ms-json.3a062984.chunk.js +0 -1
  481. package/build/nl-json.30ce02cb.chunk.js +0 -1
  482. package/build/no-json.9af40e9d.chunk.js +0 -1
  483. package/build/pl-json.fd373053.chunk.js +0 -1
  484. package/build/pt-BR-json.30e2d716.chunk.js +0 -1
  485. package/build/pt-json.3aaf9e05.chunk.js +0 -1
  486. package/build/ru-json.78c56e1c.chunk.js +0 -1
  487. package/build/runtime~main.21bf3a67.js +0 -1
  488. package/build/sk-json.c0bf144c.chunk.js +0 -1
  489. package/build/sso-settings-page.121dd0a6.chunk.js +0 -1
  490. package/build/sv-json.aad187b9.chunk.js +0 -1
  491. package/build/th-json.e2b4a0fb.chunk.js +0 -1
  492. package/build/tr-json.0add11cd.chunk.js +0 -1
  493. package/build/uk-json.eb78e77e.chunk.js +0 -1
  494. package/build/upload-settings.4401f36d.chunk.js +0 -1
  495. package/build/upload-translation-de-json.1308dce5.chunk.js +0 -1
  496. package/build/upload-translation-dk-json.0d4e855f.chunk.js +0 -1
  497. package/build/upload-translation-en-json.c334dd82.chunk.js +0 -1
  498. package/build/upload-translation-es-json.81b13eac.chunk.js +0 -1
  499. package/build/upload-translation-fr-json.1bec79ec.chunk.js +0 -1
  500. package/build/upload-translation-he-json.1d28982f.chunk.js +0 -1
  501. package/build/upload-translation-it-json.7d4bdc5a.chunk.js +0 -1
  502. package/build/upload-translation-ja-json.97fcacd8.chunk.js +0 -1
  503. package/build/upload-translation-ko-json.d7345fe1.chunk.js +0 -1
  504. package/build/upload-translation-ms-json.081effd5.chunk.js +0 -1
  505. package/build/upload-translation-pl-json.2dfe78bb.chunk.js +0 -1
  506. package/build/upload-translation-pt-BR-json.65936d7b.chunk.js +0 -1
  507. package/build/upload-translation-ru-json.2d3b6f69.chunk.js +0 -1
  508. package/build/upload-translation-sk-json.f15c7fd6.chunk.js +0 -1
  509. package/build/upload-translation-th-json.6d3c2370.chunk.js +0 -1
  510. package/build/upload-translation-uk-json.a6c38449.chunk.js +0 -1
  511. package/build/upload-translation-zh-Hans-json.f6b26c45.chunk.js +0 -1
  512. package/build/upload-translation-zh-json.06052336.chunk.js +0 -1
  513. package/build/upload.5a2dded7.chunk.js +0 -1
  514. package/build/users-advanced-settings-page.8905d8d8.chunk.js +0 -1
  515. package/build/users-email-settings-page.5abb9575.chunk.js +0 -1
  516. package/build/users-permissions-translation-ar-json.bdddd0d7.chunk.js +0 -1
  517. package/build/users-permissions-translation-cs-json.7881d3ff.chunk.js +0 -1
  518. package/build/users-permissions-translation-de-json.8d53c619.chunk.js +0 -1
  519. package/build/users-permissions-translation-dk-json.89d41c4b.chunk.js +0 -1
  520. package/build/users-permissions-translation-en-json.21b0fd2f.chunk.js +0 -1
  521. package/build/users-permissions-translation-es-json.a4f81eaa.chunk.js +0 -1
  522. package/build/users-permissions-translation-fr-json.a2172545.chunk.js +0 -1
  523. package/build/users-permissions-translation-id-json.8f17982a.chunk.js +0 -1
  524. package/build/users-permissions-translation-it-json.87952a24.chunk.js +0 -1
  525. package/build/users-permissions-translation-ja-json.5915d9ef.chunk.js +0 -1
  526. package/build/users-permissions-translation-ko-json.f1ca6cc4.chunk.js +0 -1
  527. package/build/users-permissions-translation-ms-json.2268324c.chunk.js +0 -1
  528. package/build/users-permissions-translation-nl-json.4e1231dd.chunk.js +0 -1
  529. package/build/users-permissions-translation-pl-json.107638b5.chunk.js +0 -1
  530. package/build/users-permissions-translation-pt-BR-json.8dafc053.chunk.js +0 -1
  531. package/build/users-permissions-translation-pt-json.3322464f.chunk.js +0 -1
  532. package/build/users-permissions-translation-ru-json.5709c5a0.chunk.js +0 -1
  533. package/build/users-permissions-translation-sk-json.fe7cc044.chunk.js +0 -1
  534. package/build/users-permissions-translation-sv-json.e7e1684b.chunk.js +0 -1
  535. package/build/users-permissions-translation-th-json.bb544ee3.chunk.js +0 -1
  536. package/build/users-permissions-translation-tr-json.30f3ca90.chunk.js +0 -1
  537. package/build/users-permissions-translation-uk-json.634f2569.chunk.js +0 -1
  538. package/build/users-permissions-translation-vi-json.605d88bc.chunk.js +0 -1
  539. package/build/users-permissions-translation-zh-Hans-json.85480dab.chunk.js +0 -1
  540. package/build/users-permissions-translation-zh-json.99932731.chunk.js +0 -1
  541. package/build/users-providers-settings-page.368893ed.chunk.js +0 -1
  542. package/build/users-roles-settings-page.a2f6277a.chunk.js +0 -1
  543. package/build/vi-json.1e850069.chunk.js +0 -1
  544. package/build/webhook-edit-page.d170eda1.chunk.js +0 -1
  545. package/build/webhook-list-page.c21b5a9a.chunk.js +0 -1
  546. package/build/zh-Hans-json.55f6475b.chunk.js +0 -1
  547. package/build/zh-json.c3c2b225.chunk.js +0 -1
  548. package/server/config/api-token.js +0 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/admin",
3
- "version": "4.2.0-beta.0",
3
+ "version": "4.2.0-beta.3",
4
4
  "description": "Strapi Admin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,6 +28,7 @@
28
28
  "develop:webpack": "cross-env NODE_ENV=development webpack serve --config webpack.config.dev.js --progress profile",
29
29
  "prepublishOnly": "yarn build",
30
30
  "build": "rimraf build && node ./scripts/build.js",
31
+ "build:mesure": "rimraf build && cross-env MESURE_BUILD_SPEED=true node ./scripts/build.js",
31
32
  "test": "echo \"no tests yet\"",
32
33
  "test:unit": "jest --verbose",
33
34
  "test:front": "cross-env IS_EE=true jest --config ./jest.config.front.js",
@@ -37,11 +38,8 @@
37
38
  },
38
39
  "dependencies": {
39
40
  "@babel/core": "7.16.7",
40
- "@babel/plugin-proposal-async-generator-functions": "7.16.7",
41
- "@babel/plugin-proposal-class-properties": "7.16.7",
42
- "@babel/plugin-syntax-dynamic-import": "7.8.3",
43
- "@babel/plugin-transform-modules-commonjs": "7.16.7",
44
41
  "@babel/plugin-transform-runtime": "7.16.7",
42
+ "@babel/polyfill": "7.12.1",
45
43
  "@babel/preset-env": "7.16.7",
46
44
  "@babel/preset-react": "7.16.7",
47
45
  "@babel/runtime": "7.16.7",
@@ -52,11 +50,12 @@
52
50
  "@fortawesome/free-brands-svg-icons": "^5.15.3",
53
51
  "@fortawesome/free-solid-svg-icons": "^5.15.3",
54
52
  "@fortawesome/react-fontawesome": "^0.1.14",
55
- "@strapi/babel-plugin-switch-ee-ce": "4.2.0-beta.0",
56
- "@strapi/design-system": "0.0.1-alpha.79",
57
- "@strapi/helper-plugin": "4.2.0-beta.0",
58
- "@strapi/icons": "0.0.1-alpha.79",
59
- "@strapi/utils": "4.2.0-beta.0",
53
+ "@strapi/babel-plugin-switch-ee-ce": "4.2.0-beta.3",
54
+ "@strapi/design-system": "1.1.0",
55
+ "@strapi/helper-plugin": "4.2.0-beta.3",
56
+ "@strapi/icons": "1.1.0",
57
+ "@strapi/typescript-utils": "4.2.0-beta.3",
58
+ "@strapi/utils": "4.2.0-beta.3",
60
59
  "axios": "0.24.0",
61
60
  "babel-loader": "8.2.3",
62
61
  "babel-plugin-styled-components": "2.0.2",
@@ -82,7 +81,6 @@
82
81
  "html-webpack-plugin": "5.5.0",
83
82
  "immer": "9.0.6",
84
83
  "invariant": "^2.2.4",
85
- "is-wsl": "2.2.0",
86
84
  "js-cookie": "2.2.1",
87
85
  "jsonwebtoken": "8.5.1",
88
86
  "koa-compose": "4.1.0",
@@ -130,8 +128,7 @@
130
128
  "semver": "7.3.5",
131
129
  "sift": "13.5.0",
132
130
  "style-loader": "3.3.1",
133
- "styled-components": "^5.2.3",
134
- "terser-webpack-plugin": "5.3.0",
131
+ "styled-components": "5.3.3",
135
132
  "webpack": "5.65.0",
136
133
  "webpack-cli": "4.9.1",
137
134
  "webpack-dev-server": "4.7.3",
@@ -140,11 +137,12 @@
140
137
  },
141
138
  "devDependencies": {
142
139
  "duplicate-dependencies-webpack-plugin": "0.2.0",
140
+ "speed-measure-webpack-plugin": "1.5.0",
143
141
  "webpack-bundle-analyzer": "4.4.1"
144
142
  },
145
143
  "engines": {
146
144
  "node": ">=12.22.0 <=16.x.x",
147
145
  "npm": ">=6.0.0"
148
146
  },
149
- "gitHead": "db70f0de7cc73fb469c8a076b89530729cf14142"
147
+ "gitHead": "c4addbad6ecbc8ef7633bbba3806f3b0a2ae5f49"
150
148
  }
package/scripts/build.js CHANGED
@@ -2,7 +2,12 @@
2
2
 
3
3
  const path = require('path');
4
4
  const webpack = require('webpack');
5
+ const { isObject } = require('lodash');
6
+ // eslint-disable-next-line node/no-extraneous-require
7
+ const SpeedMeasurePlugin = require('speed-measure-webpack-plugin');
8
+
5
9
  const webpackConfig = require('../webpack.config');
10
+ const getPluginsPath = require('../utils/get-plugins-path');
6
11
  const {
7
12
  getCorePluginsPath,
8
13
  getPluginToInstallPath,
@@ -11,29 +16,39 @@ const {
11
16
 
12
17
  const PLUGINS_TO_INSTALL = ['i18n', 'users-permissions'];
13
18
 
19
+ // Wrapper that outputs the webpack speed
20
+ const smp = new SpeedMeasurePlugin();
21
+
14
22
  const buildAdmin = async () => {
15
23
  const entry = path.join(__dirname, '..', 'admin', 'src');
16
24
  const dest = path.join(__dirname, '..', 'build');
25
+ const tsConfigFilePath = path.join(__dirname, '..', 'admin', 'src', 'tsconfig.json');
26
+
17
27
  const corePlugins = getCorePluginsPath();
18
28
  const plugins = getPluginToInstallPath(PLUGINS_TO_INSTALL);
19
29
  const allPlugins = { ...corePlugins, ...plugins };
30
+ const pluginsPath = getPluginsPath();
20
31
 
21
32
  await createPluginsFile(allPlugins);
22
33
 
23
34
  const args = {
24
35
  entry,
25
36
  dest,
26
- cacheDir: __dirname,
27
- pluginsPath: [path.resolve(__dirname, '../../../../packages')],
37
+ cacheDir: path.join(__dirname, '..'),
38
+ pluginsPath,
28
39
  env: 'production',
29
40
  optimize: true,
30
41
  options: {
31
42
  backend: 'http://localhost:1337',
32
43
  adminPath: '/admin/',
33
44
  },
45
+ tsConfigFilePath,
34
46
  };
35
47
 
36
- const compiler = webpack(webpackConfig(args));
48
+ const config =
49
+ process.env.MESURE_BUILD_SPEED === 'true' ? smp.wrap(webpackConfig(args)) : webpackConfig(args);
50
+
51
+ const compiler = webpack(config);
37
52
 
38
53
  console.log('Building the admin panel');
39
54
 
@@ -58,7 +73,20 @@ const buildAdmin = async () => {
58
73
  if (messages.errors.length > 1) {
59
74
  messages.errors.length = 1;
60
75
  }
61
- return reject(new Error(messages.errors.join('\n\n')));
76
+
77
+ return reject(
78
+ new Error(
79
+ messages.errors.reduce((acc, error) => {
80
+ if (isObject(error)) {
81
+ acc += error.message;
82
+ } else {
83
+ acc += error.join('\n\n');
84
+ }
85
+
86
+ return acc;
87
+ }, '')
88
+ )
89
+ );
62
90
  }
63
91
 
64
92
  return resolve({
@@ -12,12 +12,12 @@ const defaultAdminAuthSettings = {
12
12
  },
13
13
  };
14
14
 
15
- const registerPermissionActions = () => {
16
- getService('permission').actionProvider.registerMany(adminActions.actions);
15
+ const registerPermissionActions = async () => {
16
+ await getService('permission').actionProvider.registerMany(adminActions.actions);
17
17
  };
18
18
 
19
- const registerAdminConditions = () => {
20
- getService('permission').conditionProvider.registerMany(adminConditions.conditions);
19
+ const registerAdminConditions = async () => {
20
+ await getService('permission').conditionProvider.registerMany(adminConditions.conditions);
21
21
  };
22
22
 
23
23
  const registerModelHooks = () => {
@@ -53,14 +53,15 @@ const syncAuthSettings = async () => {
53
53
  };
54
54
 
55
55
  module.exports = async () => {
56
- registerAdminConditions();
57
- registerPermissionActions();
56
+ await registerAdminConditions();
57
+ await registerPermissionActions();
58
58
  registerModelHooks();
59
59
 
60
60
  const permissionService = getService('permission');
61
61
  const userService = getService('user');
62
62
  const roleService = getService('role');
63
63
  const apiTokenService = getService('api-token');
64
+ const tokenService = getService('token');
64
65
 
65
66
  await roleService.createRolesIfNoneExist();
66
67
  await roleService.resetSuperAdminPermissions();
@@ -73,5 +74,6 @@ module.exports = async () => {
73
74
 
74
75
  await syncAuthSettings();
75
76
 
76
- apiTokenService.createSaltIfNotDefined();
77
+ apiTokenService.checkSaltIsDefined();
78
+ tokenService.checkSecretIsDefined();
77
79
  };
@@ -6,5 +6,4 @@ module.exports = {
6
6
  forgotPassword: {
7
7
  emailTemplate: forgotPasswordTemplate,
8
8
  },
9
- apiToken: require('./api-token'),
10
9
  };
@@ -5,6 +5,7 @@ const execa = require('execa');
5
5
  const _ = require('lodash');
6
6
  const { exists } = require('fs-extra');
7
7
  const { ValidationError } = require('@strapi/utils').errors;
8
+ const { isUsingTypeScript } = require('@strapi/typescript-utils');
8
9
  // eslint-disable-next-line node/no-extraneous-require
9
10
  const ee = require('@strapi/strapi/lib/utils/ee');
10
11
 
@@ -37,12 +38,32 @@ module.exports = {
37
38
  },
38
39
 
39
40
  async init() {
40
- const uuid = strapi.config.get('uuid', false);
41
+ let uuid = strapi.config.get('uuid', false);
41
42
  const hasAdmin = await getService('user').exists();
43
+ // set to null if telemetryDisabled flag not avaialble in package.json
44
+ const telemetryDisabled = strapi.config.get('packageJsonStrapi.telemetryDisabled', null);
45
+
46
+ if (telemetryDisabled !== null && telemetryDisabled === true) {
47
+ uuid = false;
48
+ }
42
49
 
43
50
  return { data: { uuid, hasAdmin } };
44
51
  },
45
52
 
53
+ async telemetryProperties() {
54
+ const useTypescriptOnServer = await isUsingTypeScript(strapi.dirs.app.root);
55
+ const useTypescriptOnAdmin = await isUsingTypeScript(
56
+ path.join(strapi.dirs.app.root, 'src', 'admin')
57
+ );
58
+
59
+ return {
60
+ data: {
61
+ useTypescriptOnServer,
62
+ useTypescriptOnAdmin,
63
+ },
64
+ };
65
+ },
66
+
46
67
  async information() {
47
68
  const currentEnvironment = strapi.config.get('environment');
48
69
  const autoReload = strapi.config.get('autoReload', false);
@@ -36,6 +36,10 @@ module.exports = {
36
36
 
37
37
  const userInfo = getService('user').sanitizeUser(createdUser);
38
38
 
39
+ // Note: We need to assign manually the registrationToken to the
40
+ // final user payload so that it's not removed in the sanitation process.
41
+ Object.assign(userInfo, { registrationToken: createdUser.registrationToken });
42
+
39
43
  // Send 201 created
40
44
  ctx.created({ data: userInfo });
41
45
  },
@@ -3,4 +3,5 @@
3
3
  module.exports = {
4
4
  isAuthenticatedAdmin: require('./isAuthenticatedAdmin'),
5
5
  hasPermissions: require('./hasPermissions'),
6
+ isTelemetryEnabled: require('./isTelemetryEnabled'),
6
7
  };
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ const { createPolicy } = require('@strapi/utils').policy;
4
+
5
+ /**
6
+ * This policy is used for routes dealing with telemetry and analytics content.
7
+ * It will fails when the telemetry has been disabled on the server.
8
+ */
9
+ module.exports = createPolicy({
10
+ name: 'admin::isTelemetryEnabled',
11
+ handler(_ctx, _config, { strapi }) {
12
+ if (strapi.telemetry.isDisabled) {
13
+ return false;
14
+ }
15
+ },
16
+ });
@@ -21,6 +21,15 @@ module.exports = [
21
21
  policies: ['admin::isAuthenticatedAdmin'],
22
22
  },
23
23
  },
24
+ {
25
+ method: 'GET',
26
+ path: '/telemetry-properties',
27
+ handler: 'admin.telemetryProperties',
28
+ config: {
29
+ auth: false,
30
+ policies: ['admin::isTelemetryEnabled'],
31
+ },
32
+ },
24
33
  {
25
34
  method: 'GET',
26
35
  path: '/plugins',
@@ -74,20 +74,21 @@ const create = async attributes => {
74
74
  /**
75
75
  * @returns {void}
76
76
  */
77
- const createSaltIfNotDefined = () => {
78
- if (strapi.config.get('admin.apiToken.salt')) {
79
- return;
77
+ const checkSaltIsDefined = () => {
78
+ if (!strapi.config.get('admin.apiToken.salt')) {
79
+ // TODO V5: stop reading API_TOKEN_SALT
80
+ if (process.env.API_TOKEN_SALT) {
81
+ process.emitWarning(`[deprecated] In future versions, Strapi will stop reading directly from the environment variable API_TOKEN_SALT. Please set apiToken.salt in config/admin.js instead.
82
+ For security reasons, keep storing the secret in an environment variable and use env() to read it in config/admin.js (ex: \`apiToken: { salt: env('API_TOKEN_SALT') }\`). See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`);
83
+
84
+ strapi.config.set('admin.apiToken.salt', process.env.API_TOKEN_SALT);
85
+ } else {
86
+ throw new Error(
87
+ `Missing apiToken.salt. Please set apiToken.salt in config/admin.js (ex: you can generate one using Node with \`crypto.randomBytes(16).toString('base64')\`).
88
+ For security reasons, prefer storing the secret in an environment variable and read it in config/admin.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`
89
+ );
90
+ }
80
91
  }
81
-
82
- if (process.env.API_TOKEN_SALT) {
83
- throw new Error(
84
- `There's something wrong with the configuration of your api-token salt. If you have changed the env variable used in the configuration file, please verify that you have created and set the variable in your .env file.`
85
- );
86
- }
87
-
88
- const salt = crypto.randomBytes(16).toString('hex');
89
- strapi.fs.appendFile(process.env.ENV_PATH || '.env', `API_TOKEN_SALT=${salt}\n`);
90
- strapi.config.set('admin.apiToken.salt', salt);
91
92
  };
92
93
 
93
94
  /**
@@ -162,7 +163,7 @@ const getBy = async (whereParams = {}) => {
162
163
  module.exports = {
163
164
  create,
164
165
  exists,
165
- createSaltIfNotDefined,
166
+ checkSaltIsDefined,
166
167
  hash,
167
168
  list,
168
169
  revoke,
@@ -14,6 +14,7 @@ const {
14
14
  uniq,
15
15
  intersection,
16
16
  pick,
17
+ getOr,
17
18
  } = require('lodash/fp');
18
19
 
19
20
  const { contentTypes, traverseEntity, sanitize, pipeAsync } = require('@strapi/utils');
@@ -46,6 +47,8 @@ module.exports = ({ action, ability, model }) => {
46
47
  const permittedFields = fields.shouldIncludeAll ? null : getOutputFields(fields.permitted);
47
48
 
48
49
  return pipeAsync(
50
+ // Remove fields hidden from the admin
51
+ traverseEntity(omitHiddenFields, { schema }),
49
52
  // Remove unallowed fields from admin::user relations
50
53
  traverseEntity(pickAllowedAdminUserFields, { schema }),
51
54
  // Remove not allowed fields (RBAC)
@@ -61,6 +64,8 @@ module.exports = ({ action, ability, model }) => {
61
64
  const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
62
65
 
63
66
  return pipeAsync(
67
+ // Remove fields hidden from the admin
68
+ traverseEntity(omitHiddenFields, { schema }),
64
69
  // Remove not allowed fields (RBAC)
65
70
  traverseEntity(allowedFields(permittedFields), { schema }),
66
71
  // Remove roles from createdBy & updateBy fields
@@ -107,8 +112,25 @@ module.exports = ({ action, ability, model }) => {
107
112
  return defaults({ subject: asSubject(model, data), action }, options);
108
113
  };
109
114
 
115
+ /**
116
+ * Omit creator fields' (createdBy & updatedBy) roles from the admin API responses
117
+ */
110
118
  const omitCreatorRoles = omit([`${CREATED_BY_ATTRIBUTE}.roles`, `${UPDATED_BY_ATTRIBUTE}.roles`]);
111
119
 
120
+ /**
121
+ * Visitor used to remove hidden fields from the admin API responses
122
+ */
123
+ const omitHiddenFields = ({ key, schema }, { remove }) => {
124
+ const isHidden = getOr(false, ['config', 'attributes', key, 'hidden'], schema);
125
+
126
+ if (isHidden) {
127
+ remove(key);
128
+ }
129
+ };
130
+
131
+ /**
132
+ * Visitor used to only select needed fields from the admin users entities & avoid leaking sensitive information
133
+ */
112
134
  const pickAllowedAdminUserFields = ({ attribute, key, value }, { set }) => {
113
135
  const pickAllowedFields = pick(['id', 'firstname', 'lastname', 'username']);
114
136
 
@@ -49,9 +49,22 @@ const decodeJwtToken = token => {
49
49
  }
50
50
  };
51
51
 
52
+ /**
53
+ * @returns {void}
54
+ */
55
+ const checkSecretIsDefined = () => {
56
+ if (strapi.config.serveAdminPanel && !strapi.config.get('admin.auth.secret')) {
57
+ throw new Error(
58
+ `Missing auth.secret. Please set auth.secret in config/admin.js (ex: you can generate one using Node with \`crypto.randomBytes(16).toString('base64')\`).
59
+ For security reasons, prefer storing the secret in an environment variable and read it in config/admin.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`
60
+ );
61
+ }
62
+ };
63
+
52
64
  module.exports = {
53
65
  createToken,
54
66
  createJwtToken,
55
67
  getTokenOptions,
56
68
  decodeJwtToken,
69
+ checkSecretIsDefined,
57
70
  };
@@ -17,7 +17,7 @@ const sanitizeUserRoles = role => _.pick(role, ['id', 'name', 'description', 'co
17
17
  */
18
18
  const sanitizeUser = user => {
19
19
  return {
20
- ..._.omit(user, ['password', 'resetPasswordToken', 'roles']),
20
+ ..._.omit(user, ['password', 'resetPasswordToken', 'registrationToken', 'roles']),
21
21
  roles: user.roles && user.roles.map(sanitizeUserRoles),
22
22
  };
23
23
  };
@@ -32,7 +32,11 @@ const checkPermissionsAreBound = role =>
32
32
 
33
33
  for (const [subject, perms] of Object.entries(permsBySubject)) {
34
34
  const boundActions = getBoundActionsBySubject(role, subject);
35
- const missingActions = _.xor(perms.map(p => p.action), boundActions).length !== 0;
35
+ const missingActions =
36
+ _.xor(
37
+ perms.map(p => p.action),
38
+ boundActions
39
+ ).length !== 0;
36
40
  if (missingActions) return false;
37
41
 
38
42
  const permsBoundByFields = perms.filter(p => BOUND_ACTIONS_FOR_FIELDS.includes(p.action));
@@ -3,11 +3,13 @@
3
3
  const path = require('path');
4
4
  const _ = require('lodash');
5
5
  const fs = require('fs-extra');
6
+ const { isUsingTypeScript } = require('@strapi/typescript-utils');
7
+ const getCustomAppConfigFile = require('./get-custom-app-config-file');
6
8
 
7
9
  const getPkgPath = name => path.dirname(require.resolve(`${name}/package.json`));
8
10
 
9
11
  async function createPluginsJs(plugins, dest) {
10
- const pluginsArray = plugins.map(({ appPathToPlugin, name }) => {
12
+ const pluginsArray = plugins.map(({ pathToPlugin, name }) => {
11
13
  const shortName = _.camelCase(name);
12
14
 
13
15
  /**
@@ -19,7 +21,7 @@ async function createPluginsJs(plugins, dest) {
19
21
  * Backslash looks to work only for absolute paths with webpack => https://webpack.js.org/concepts/module-resolution/#absolute-paths
20
22
  */
21
23
  const realPath = path
22
- .join(path.relative(path.resolve(dest, 'admin', 'src'), appPathToPlugin), 'strapi-admin.js')
24
+ .join(path.relative(path.resolve(dest, 'admin', 'src'), pathToPlugin), 'strapi-admin.js')
23
25
  .replace(/\\/g, '/');
24
26
 
25
27
  return {
@@ -66,9 +68,11 @@ async function copyAdmin(dest) {
66
68
  await fs.copy(path.resolve(adminPath, 'package.json'), path.resolve(dest, 'package.json'));
67
69
  }
68
70
 
69
- async function createCacheDir({ appDir, plugins, useTypeScript }) {
71
+ async function createCacheDir({ appDir, plugins }) {
70
72
  const cacheDir = path.resolve(appDir, '.cache');
71
73
 
74
+ const useTypeScript = await isUsingTypeScript(path.join(appDir, 'src', 'admin'), 'tsconfig.json');
75
+
72
76
  const pluginsWithFront = Object.keys(plugins)
73
77
  .filter(pluginName => {
74
78
  const pluginInfo = plugins[pluginName];
@@ -82,26 +86,26 @@ async function createCacheDir({ appDir, plugins, useTypeScript }) {
82
86
  // copy admin core code
83
87
  await copyAdmin(cacheDir);
84
88
 
85
- // Copy app.js or app.tsx if typescript is enabled
86
- const customAdminConfigJSFilePath = path.join(appDir, 'src', 'admin', 'app.js');
87
- const customAdminConfigTSXFilePath = path.join(appDir, 'src', 'admin', 'app.tsx');
88
- const customAdminConfigFilePath = useTypeScript
89
- ? customAdminConfigTSXFilePath
90
- : customAdminConfigJSFilePath;
89
+ // Retrieve the custom config file extension
90
+ const customAdminAppConfigFile = await getCustomAppConfigFile(appDir, useTypeScript);
91
91
 
92
- if (fs.existsSync(customAdminConfigFilePath)) {
92
+ if (customAdminAppConfigFile) {
93
93
  const defaultAdminConfigFilePath = path.resolve(cacheDir, 'admin', 'src', 'app.js');
94
+ const customAdminAppConfigFilePath = path.join(
95
+ appDir,
96
+ 'src',
97
+ 'admin',
98
+ customAdminAppConfigFile
99
+ );
100
+ const dest = path.resolve(cacheDir, 'admin', 'src', customAdminAppConfigFile);
94
101
 
95
102
  if (useTypeScript) {
96
103
  // Remove the default config file
97
104
  await fs.remove(defaultAdminConfigFilePath);
98
105
  // Copy the custom one
99
- await fs.copy(
100
- customAdminConfigTSXFilePath,
101
- path.resolve(cacheDir, 'admin', 'src', 'app.tsx')
102
- );
106
+ await fs.copy(customAdminAppConfigFilePath, dest);
103
107
  } else {
104
- await fs.copy(customAdminConfigFilePath, path.resolve(cacheDir, 'admin', 'src', 'app.js'));
108
+ await fs.copy(customAdminAppConfigFilePath, dest);
105
109
  }
106
110
  }
107
111
 
@@ -114,6 +118,44 @@ async function createCacheDir({ appDir, plugins, useTypeScript }) {
114
118
 
115
119
  // create plugins.js with plugins requires
116
120
  await createPluginsJs(pluginsWithFront, cacheDir);
121
+
122
+ // create the tsconfig.json file so we can develop plugins in ts while being in a JS project
123
+ if (!useTypeScript) {
124
+ await createTSConfigFile(cacheDir);
125
+ }
126
+ }
127
+
128
+ async function createTSConfigFile(dest) {
129
+ const tsConfig = {
130
+ compilerOptions: {
131
+ lib: ['es2019', 'es2020.promise', 'es2020.bigint', 'es2020.string', 'DOM'],
132
+ noImplicitAny: false,
133
+ module: 'es2020',
134
+ target: 'es5',
135
+ jsx: 'react',
136
+ allowJs: true,
137
+ strict: true,
138
+ moduleResolution: 'node',
139
+ skipLibCheck: true,
140
+ esModuleInterop: true,
141
+ allowSyntheticDefaultImports: true,
142
+ resolveJsonModule: true,
143
+ noEmit: false,
144
+ incremental: true,
145
+ },
146
+ include: ['../../../src/admin/*', '../../../src/**/**/admin/src/*'],
147
+ exclude: ['node_modules', '**/*.test.js', '*.js'],
148
+ };
149
+
150
+ const filePath = path.join(dest, 'admin', 'src', 'tsconfig.json');
151
+
152
+ try {
153
+ await fs.ensureFile(filePath);
154
+
155
+ await fs.writeJSON(filePath, tsConfig, { spaces: 2 });
156
+ } catch (err) {
157
+ console.log(err);
158
+ }
117
159
  }
118
160
 
119
161
  module.exports = createCacheDir;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ const { join } = require('path');
4
+ const fse = require('fs-extra');
5
+ const { isUsingTypeScript } = require('@strapi/typescript-utils');
6
+
7
+ /**
8
+ * Retrieve the custom admin entry file name
9
+ * @param {String} dir - Directory of the admin panel
10
+ * @returns String
11
+ */
12
+ const getCustomAppConfigFile = async dir => {
13
+ const adminSrcPath = join(dir, 'src', 'admin');
14
+ const useTypeScript = await isUsingTypeScript(adminSrcPath, 'tsconfig.json');
15
+
16
+ const files = await fse.readdir(adminSrcPath);
17
+
18
+ const appRegex = new RegExp(`app.${useTypeScript ? 't' : 'j'}sx?$`);
19
+
20
+ return files.find(file => file.match(appRegex));
21
+ };
22
+
23
+ module.exports = getCustomAppConfigFile;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ const { join, resolve } = require('path');
4
+ const fs = require('fs-extra');
5
+ // eslint-disable-next-line node/no-extraneous-require
6
+ const glob = require('glob');
7
+
8
+ const getPluginsPath = () => {
9
+ const rootPath = resolve(__dirname, '..', join('..', '..', '..', 'packages'));
10
+ const corePath = join(rootPath, 'core', '*');
11
+ const pluginsPath = join(rootPath, 'plugins', '*');
12
+ const corePackageDirs = glob.sync(corePath);
13
+ const pluginsPackageDirs = glob.sync(pluginsPath);
14
+
15
+ const packageDirs = [...corePackageDirs, ...pluginsPackageDirs].filter(dir => {
16
+ const isCoreAdmin = dir.includes('packages/core/admin');
17
+ const pathToEntryPoint = join(dir, 'admin', 'src', 'index.js');
18
+ const doesAdminFolderExist = fs.pathExistsSync(pathToEntryPoint);
19
+
20
+ return !isCoreAdmin && doesAdminFolderExist;
21
+ });
22
+
23
+ return packageDirs.map(dir => resolve(__dirname, '..', join(dir, 'admin', 'src')));
24
+ };
25
+
26
+ module.exports = getPluginsPath;
@@ -2,6 +2,7 @@
2
2
 
3
3
  const path = require('path');
4
4
  const fs = require('fs-extra');
5
+ const getCustomAppConfigFile = require('./get-custom-app-config-file');
5
6
 
6
7
  const DEFAULT_PLUGINS = [
7
8
  'content-type-builder',
@@ -29,20 +30,20 @@ const hasNonDefaultPlugins = plugins => {
29
30
  return diff.length > 0;
30
31
  };
31
32
 
32
- const hasCustomAdminCode = async (dir, useTypeScript) => {
33
+ const hasCustomAdminCode = async dir => {
33
34
  const customAdminPath = path.join(dir, 'src', 'admin');
34
- const customAdminConfigFileExtension = useTypeScript ? 'app.tsx' : 'app.js';
35
- const customAdminConfigFile = path.join(customAdminPath, customAdminConfigFileExtension);
35
+
36
+ const customAdminAppConfigFile = await getCustomAppConfigFile(dir);
36
37
  const customAdminWebpackFile = path.join(customAdminPath, 'webpack.config.js');
37
38
 
38
- const hasCustomConfigFile = await fs.pathExists(customAdminConfigFile);
39
+ const hasCustomConfigFile = !!customAdminAppConfigFile;
39
40
  const hasCustomWebpackFile = await fs.pathExists(customAdminWebpackFile);
40
41
 
41
42
  return hasCustomConfigFile || hasCustomWebpackFile;
42
43
  };
43
44
 
44
- const shouldBuildAdmin = async ({ appDir, plugins, useTypeScript }) => {
45
- const appHasCustomAdminCode = await hasCustomAdminCode(appDir, useTypeScript);
45
+ const shouldBuildAdmin = async ({ appDir, plugins }) => {
46
+ const appHasCustomAdminCode = await hasCustomAdminCode(appDir);
46
47
  const appHasNonDefaultPlugins = hasNonDefaultPlugins(plugins);
47
48
 
48
49
  return appHasCustomAdminCode || appHasNonDefaultPlugins;
@@ -3,13 +3,16 @@
3
3
  const path = require('path');
4
4
  const fs = require('fs-extra');
5
5
  const chokidar = require('chokidar');
6
+ const { isUsingTypeScript } = require('@strapi/typescript-utils');
6
7
 
7
8
  /**
8
9
  * Listen to files change and copy the changed files in the .cache/admin folder
9
10
  * when using the dev mode
10
11
  * @param {string} dir
11
12
  */
12
- async function watchAdminFiles(dir, useTypeScript) {
13
+ async function watchAdminFiles(dir) {
14
+ const useTypeScript = await isUsingTypeScript(path.join(dir, 'src', 'admin'), 'tsconfig.json');
15
+
13
16
  const cacheDir = path.join(dir, '.cache');
14
17
  const targetExtensionFile = useTypeScript ? 'app.tsx' : 'app.js';
15
18
  const appExtensionFile = path.join(dir, 'src', 'admin', targetExtensionFile);