@strapi/admin 4.2.0-beta.0 → 4.2.0-beta.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 (513) hide show
  1. package/admin/src/assets/images/icon_offline-cloud.svg +5 -0
  2. package/admin/src/components/AuthenticatedApp/utils/api.js +1 -1
  3. package/admin/src/components/AutoReloadOverlayBlockerProvider/Blocker.js +1 -1
  4. package/admin/src/components/LeftMenu/index.js +2 -2
  5. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +17 -3
  6. package/admin/src/content-manager/components/ComponentInitializer/index.js +9 -4
  7. package/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js +135 -0
  8. package/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js +32 -0
  9. package/admin/src/content-manager/components/DynamicTable/CellContent/RepeatableComponent/index.js +62 -0
  10. package/admin/src/content-manager/components/DynamicTable/CellContent/SingleComponent/index.js +37 -0
  11. package/admin/src/content-manager/components/DynamicTable/CellContent/index.js +52 -27
  12. package/admin/src/content-manager/components/DynamicTable/CellContent/utils/hasContent.js +64 -0
  13. package/admin/src/content-manager/components/DynamicTable/CellContent/utils/isSingleRelation.js +3 -0
  14. package/admin/src/content-manager/components/DynamicTable/TableRows/index.js +1 -1
  15. package/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +37 -37
  16. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/getAPIInnerError.js +18 -0
  17. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/handleAPIError.js +15 -0
  18. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/index.js +0 -1
  19. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +9 -7
  20. package/admin/src/content-manager/components/FieldComponent/index.js +0 -1
  21. package/admin/src/content-manager/components/InputUID/index.js +1 -5
  22. package/admin/src/content-manager/components/Inputs/index.js +4 -6
  23. package/admin/src/content-manager/components/RepeatableComponent/AccordionGroupCustom/index.js +3 -1
  24. package/admin/src/content-manager/components/RepeatableComponent/index.js +3 -18
  25. package/admin/src/content-manager/components/RepeatableComponent/utils/getComponentErrorKeys.js +10 -0
  26. package/admin/src/content-manager/components/SelectMany/index.js +1 -1
  27. package/admin/src/content-manager/components/SelectOne/index.js +1 -1
  28. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +15 -3
  29. package/admin/src/content-manager/components/Wysiwyg/index.js +3 -4
  30. package/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +23 -2
  31. package/admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js +1 -1
  32. package/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js +1 -1
  33. package/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +6 -1
  34. package/admin/src/content-manager/pages/EditSettingsView/index.js +3 -3
  35. package/admin/src/content-manager/pages/EditSettingsView/utils/layout.js +7 -1
  36. package/admin/src/content-manager/pages/EditView/DeleteLink/index.js +1 -4
  37. package/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js +1 -4
  38. package/admin/src/content-manager/pages/EditView/Header/index.js +1 -1
  39. package/admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js +1 -1
  40. package/admin/src/content-manager/pages/ListSettingsView/index.js +2 -2
  41. package/admin/src/content-manager/pages/ListView/actions.js +2 -1
  42. package/admin/src/content-manager/pages/ListView/index.js +2 -5
  43. package/admin/src/content-manager/pages/ListView/reducer.js +55 -21
  44. package/admin/src/content-manager/pages/ListView/selectors.js +3 -6
  45. package/admin/src/content-manager/pages/ListViewLayoutManager/index.js +1 -1
  46. package/admin/src/content-manager/testUtils/data.js +5 -1
  47. package/admin/src/content-manager/utils/checkIfAttributeIsDisplayable.js +1 -1
  48. package/admin/src/content-manager/utils/isFieldTypeNumber.js +3 -0
  49. package/admin/src/hooks/useMenu/reducer.js +3 -3
  50. package/admin/src/hooks/useNavigatorOnLine/index.js +31 -0
  51. package/admin/src/hooks/useReleaseNotification/index.js +1 -1
  52. package/admin/src/hooks/useSettingsMenu/init.js +2 -2
  53. package/admin/src/layouts/UnauthenticatedLayout/index.js +1 -1
  54. package/admin/src/pages/Admin/Onboarding/index.js +1 -1
  55. package/admin/src/pages/Admin/index.js +15 -5
  56. package/admin/src/pages/App/constants.js +1 -0
  57. package/admin/src/pages/App/index.js +17 -3
  58. package/admin/src/pages/App/reducer.js +22 -0
  59. package/admin/src/pages/AuthPage/components/Login/BaseLogin.js +1 -1
  60. package/admin/src/pages/AuthPage/components/Register/index.js +6 -6
  61. package/admin/src/pages/AuthPage/components/ResetPassword/index.js +3 -3
  62. package/admin/src/pages/HomePage/ContentBlocks.js +1 -1
  63. package/admin/src/pages/HomePage/SocialLinks.js +1 -4
  64. package/admin/src/pages/InstalledPluginsPage/Plugins.js +3 -3
  65. package/admin/src/pages/InstalledPluginsPage/index.js +1 -1
  66. package/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js +40 -0
  67. package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +46 -0
  68. package/admin/src/pages/MarketplacePage/components/PluginCard/InstallPluginButton.js +66 -0
  69. package/admin/src/pages/MarketplacePage/components/PluginCard/index.js +13 -36
  70. package/admin/src/pages/MarketplacePage/index.js +65 -27
  71. package/admin/src/pages/ProfilePage/index.js +5 -5
  72. package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +1 -1
  73. package/admin/src/pages/SettingsPage/index.js +1 -1
  74. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/LoadingView/index.js +1 -1
  75. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +3 -3
  76. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DeleteButton/index.js +1 -1
  77. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +1 -1
  78. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsButton/index.js +1 -1
  79. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js +3 -3
  80. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +2 -2
  81. package/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +6 -6
  82. package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +5 -5
  83. package/admin/src/pages/SettingsPage/pages/Users/EditPage/utils/layout.js +1 -1
  84. package/admin/src/pages/SettingsPage/pages/Users/ListPage/DynamicTable/TableRows/index.js +1 -1
  85. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +1 -1
  86. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/stepper.js +1 -1
  87. package/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +1 -1
  88. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +3 -3
  89. package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +7 -7
  90. package/admin/src/pages/UseCasePage/index.js +2 -2
  91. package/admin/src/reducers.js +4 -2
  92. package/admin/src/translations/ar.json +0 -6
  93. package/admin/src/translations/cs.json +0 -8
  94. package/admin/src/translations/de.json +244 -49
  95. package/admin/src/translations/dk.json +0 -53
  96. package/admin/src/translations/en.json +87 -99
  97. package/admin/src/translations/es.json +0 -53
  98. package/admin/src/translations/fr.json +0 -56
  99. package/admin/src/translations/he.json +0 -24
  100. package/admin/src/translations/hu.json +0 -53
  101. package/admin/src/translations/id.json +0 -21
  102. package/admin/src/translations/it.json +0 -22
  103. package/admin/src/translations/ja.json +0 -53
  104. package/admin/src/translations/ko.json +0 -56
  105. package/admin/src/translations/ms.json +0 -12
  106. package/admin/src/translations/nl.json +0 -53
  107. package/admin/src/translations/no.json +0 -22
  108. package/admin/src/translations/pl.json +0 -26
  109. package/admin/src/translations/pt-BR.json +0 -53
  110. package/admin/src/translations/pt.json +0 -13
  111. package/admin/src/translations/ru.json +0 -25
  112. package/admin/src/translations/sk.json +0 -21
  113. package/admin/src/translations/sv.json +0 -6
  114. package/admin/src/translations/th.json +0 -21
  115. package/admin/src/translations/tr.json +0 -13
  116. package/admin/src/translations/uk.json +0 -12
  117. package/admin/src/translations/vi.json +1 -10
  118. package/admin/src/translations/zh-Hans.json +0 -53
  119. package/admin/src/translations/zh.json +0 -56
  120. package/admin/src/tsconfig.json +10 -0
  121. package/build/1856.e2bce2e8.chunk.js +171 -0
  122. package/build/2481.5fe150c7.chunk.js +184 -0
  123. package/build/272.d442e5ca.chunk.js +349 -0
  124. package/build/2912.5a7b0406.chunk.js +252 -0
  125. package/build/306.28d21ab8.chunk.js +896 -0
  126. package/build/4073.4765687b.chunk.js +1 -0
  127. package/build/4715.7f616cf6.chunk.js +387 -0
  128. package/build/4800.d3ebc81d.chunk.js +1 -0
  129. package/build/497.2ba35e90.chunk.js +284 -0
  130. package/build/4982.91235074.chunk.js +310 -0
  131. package/build/6229.f558fd19.chunk.js +194 -0
  132. package/build/6404.25d0f0d8.chunk.js +508 -0
  133. package/build/6925.fafef528.chunk.js +761 -0
  134. package/build/7841.0d73dde1.chunk.js +252 -0
  135. package/build/7863.996e70df.chunk.js +112 -0
  136. package/build/8469.3af1823d.chunk.js +1 -0
  137. package/build/9298.dab64a1b.chunk.js +345 -0
  138. package/build/948.d64fb515.chunk.js +2 -0
  139. package/build/9853.6cc1043a.chunk.js +354 -0
  140. package/build/9988.9b6e1d79.chunk.js +161 -0
  141. package/build/Admin-authenticatedApp.d26b3032.chunk.js +80 -0
  142. package/build/Admin_homePage.fc4a8408.chunk.js +71 -0
  143. package/build/Admin_marketplace.c406a140.chunk.js +11 -0
  144. package/build/Admin_pluginsPage.788fb2f6.chunk.js +1 -0
  145. package/build/Admin_profilePage.27191ed2.chunk.js +15 -0
  146. package/build/Admin_settingsPage.c40fdef1.chunk.js +170 -0
  147. package/build/a6b842e0b6d2b61135d1.svg +5 -0
  148. package/build/admin-edit-roles-page.c69fe8ab.chunk.js +1 -0
  149. package/build/admin-edit-users.be232f6b.chunk.js +10 -0
  150. package/build/admin-users.47d06d24.chunk.js +11 -0
  151. package/build/api-tokens-create-page.9774f0fe.chunk.js +1 -0
  152. package/build/api-tokens-edit-page.8f03c9a1.chunk.js +1 -0
  153. package/build/api-tokens-list-page.126fbca6.chunk.js +15 -0
  154. package/build/ar-json.d4cb26d9.chunk.js +1 -0
  155. package/build/codemirror-addon-closebrackets.c0f97916.chunk.js +2 -0
  156. package/build/codemirror-addon-lint-js.7c35dcb0.chunk.js +1 -0
  157. package/build/codemirror-addon-lint.505ff1d4.chunk.js +1 -0
  158. package/build/codemirror-addon-mark-selection.653e904d.chunk.js +1 -0
  159. package/build/codemirror-css.b467b1de.chunk.js +346 -0
  160. package/build/codemirror-javacript.41bdefda.chunk.js +1 -0
  161. package/build/codemirror-theme.cf9f9eb6.chunk.js +34 -0
  162. package/build/content-manager.ca66b566.chunk.js +1204 -0
  163. package/build/content-type-builder-translation-ar-json.142327af.chunk.js +1 -0
  164. package/build/content-type-builder-translation-cs-json.4aafb972.chunk.js +1 -0
  165. package/build/content-type-builder-translation-de-json.0d7696b9.chunk.js +1 -0
  166. package/build/content-type-builder-translation-dk-json.4729f055.chunk.js +1 -0
  167. package/build/content-type-builder-translation-en-json.e5110288.chunk.js +1 -0
  168. package/build/content-type-builder-translation-es-json.333cf47f.chunk.js +1 -0
  169. package/build/content-type-builder-translation-fr-json.aa6eeea8.chunk.js +1 -0
  170. package/build/content-type-builder-translation-id-json.7c00a32a.chunk.js +1 -0
  171. package/build/content-type-builder-translation-it-json.a906b389.chunk.js +1 -0
  172. package/build/content-type-builder-translation-ja-json.87f71930.chunk.js +1 -0
  173. package/build/content-type-builder-translation-ko-json.51201b12.chunk.js +1 -0
  174. package/build/content-type-builder-translation-ms-json.963a1a01.chunk.js +1 -0
  175. package/build/content-type-builder-translation-nl-json.c46c8f30.chunk.js +1 -0
  176. package/build/content-type-builder-translation-pl-json.a866acda.chunk.js +1 -0
  177. package/build/content-type-builder-translation-pt-BR-json.5739a2aa.chunk.js +1 -0
  178. package/build/content-type-builder-translation-pt-json.766bd747.chunk.js +1 -0
  179. package/build/content-type-builder-translation-ru-json.cf8d7c5c.chunk.js +1 -0
  180. package/build/content-type-builder-translation-sk-json.3a6defe0.chunk.js +1 -0
  181. package/build/content-type-builder-translation-th-json.c96a2d3f.chunk.js +1 -0
  182. package/build/content-type-builder-translation-tr-json.2e52bc60.chunk.js +1 -0
  183. package/build/content-type-builder-translation-uk-json.d8c0b6dd.chunk.js +1 -0
  184. package/build/content-type-builder-translation-zh-Hans-json.92a27f59.chunk.js +1 -0
  185. package/build/content-type-builder-translation-zh-json.2cc55621.chunk.js +1 -0
  186. package/build/content-type-builder.d12fd5cd.chunk.js +141 -0
  187. package/build/cropper-css.ecc0d670.chunk.js +306 -0
  188. package/build/cs-json.c8f28ba8.chunk.js +1 -0
  189. package/build/de-json.0b92acd2.chunk.js +1 -0
  190. package/build/dk-json.9f1bc016.chunk.js +1 -0
  191. package/build/email-settings-page.d807edfd.chunk.js +103 -0
  192. package/build/{email-translation-de-json.559a7d5f.chunk.js → email-translation-ar-json.c624512d.chunk.js} +1 -1
  193. package/build/{email-translation-ar-json.95d90eb4.chunk.js → email-translation-cs-json.cb18caab.chunk.js} +1 -1
  194. package/build/{email-translation-it-json.3de61cb6.chunk.js → email-translation-de-json.54743260.chunk.js} +1 -1
  195. package/build/{email-translation-dk-json.f8a595bf.chunk.js → email-translation-dk-json.f323fe4e.chunk.js} +1 -1
  196. package/build/{email-translation-en-json.fa0dc92b.chunk.js → email-translation-en-json.6da7e388.chunk.js} +1 -1
  197. package/build/{email-translation-es-json.eb303dea.chunk.js → email-translation-es-json.9021417d.chunk.js} +1 -1
  198. package/build/{email-translation-fr-json.49c3c888.chunk.js → email-translation-fr-json.9f125db0.chunk.js} +1 -1
  199. package/build/email-translation-id-json.3bcae5f5.chunk.js +1 -0
  200. package/build/{email-translation-cs-json.dfd1f3f2.chunk.js → email-translation-it-json.6ffd1774.chunk.js} +1 -1
  201. package/build/email-translation-ja-json.72b3f73c.chunk.js +1 -0
  202. package/build/email-translation-ko-json.e61d4e7a.chunk.js +1 -0
  203. package/build/email-translation-ms-json.b2b11e05.chunk.js +1 -0
  204. package/build/email-translation-nl-json.5349635f.chunk.js +1 -0
  205. package/build/email-translation-pl-json.6da50d0f.chunk.js +1 -0
  206. package/build/email-translation-pt-BR-json.2c98ab20.chunk.js +1 -0
  207. package/build/email-translation-pt-json.959ea070.chunk.js +1 -0
  208. package/build/email-translation-ru-json.d508cf3e.chunk.js +1 -0
  209. package/build/email-translation-sk-json.fa1fd4b3.chunk.js +1 -0
  210. package/build/email-translation-th-json.989cfecc.chunk.js +1 -0
  211. package/build/email-translation-tr-json.87f2feb3.chunk.js +1 -0
  212. package/build/email-translation-uk-json.0396a803.chunk.js +1 -0
  213. package/build/email-translation-vi-json.c0d8c414.chunk.js +1 -0
  214. package/build/email-translation-zh-Hans-json.b463cb25.chunk.js +1 -0
  215. package/build/email-translation-zh-json.3455468b.chunk.js +1 -0
  216. package/build/en-json.3e1a222e.chunk.js +1 -0
  217. package/build/es-json.2a5a9fc1.chunk.js +1 -0
  218. package/build/fontawesome-css-all.04f33619.chunk.js +4618 -0
  219. package/build/fontawesome-css.477ba714.chunk.js +6 -0
  220. package/build/fontawesome-js.252cc5f3.chunk.js +7 -0
  221. package/build/fr-json.84064a0b.chunk.js +1 -0
  222. package/build/he-json.d40da459.chunk.js +1 -0
  223. package/build/highlight.js.3381ffc3.chunk.js +86 -0
  224. package/build/hu-json.c81ce352.chunk.js +1 -0
  225. package/build/i18n-settings-page.c8f3b78b.chunk.js +101 -0
  226. package/build/i18n-translation-de-json.92534555.chunk.js +1 -0
  227. package/build/{i18n-translation-dk-json.ecf02d28.chunk.js → i18n-translation-dk-json.54f410ca.chunk.js} +1 -1
  228. package/build/{i18n-translation-en-json.4d823f62.chunk.js → i18n-translation-en-json.85bc892c.chunk.js} +1 -1
  229. package/build/i18n-translation-es-json.488206ae.chunk.js +1 -0
  230. package/build/i18n-translation-fr-json.0839d68d.chunk.js +1 -0
  231. package/build/i18n-translation-ko-json.d0bc1203.chunk.js +1 -0
  232. package/build/i18n-translation-zh-Hans-json.560a98e3.chunk.js +1 -0
  233. package/build/id-json.fad45d17.chunk.js +1 -0
  234. package/build/index.html +1 -1
  235. package/build/it-json.12df4cdf.chunk.js +1 -0
  236. package/build/ja-json.850237e9.chunk.js +1 -0
  237. package/build/ko-json.2f3d256e.chunk.js +1 -0
  238. package/build/main.36da7eeb.js +7918 -0
  239. package/build/ms-json.836ed013.chunk.js +1 -0
  240. package/build/nl-json.465b173f.chunk.js +1 -0
  241. package/build/no-json.e8749dd4.chunk.js +1 -0
  242. package/build/pl-json.94f05d2c.chunk.js +1 -0
  243. package/build/pt-BR-json.6301d49b.chunk.js +1 -0
  244. package/build/pt-json.c23020ab.chunk.js +1 -0
  245. package/build/ru-json.4560906c.chunk.js +1 -0
  246. package/build/runtime~main.251e9cca.js +2 -0
  247. package/build/sk-json.5b33afc2.chunk.js +1 -0
  248. package/build/sso-settings-page.dfb0b917.chunk.js +1 -0
  249. package/build/sv-json.cdcac02d.chunk.js +1 -0
  250. package/build/th-json.3aadaec6.chunk.js +1 -0
  251. package/build/tr-json.276e59fe.chunk.js +1 -0
  252. package/build/uk-json.5b5b9c27.chunk.js +1 -0
  253. package/build/upload-settings.17202e3b.chunk.js +101 -0
  254. package/build/upload-translation-de-json.b642da08.chunk.js +1 -0
  255. package/build/upload-translation-dk-json.fc61df13.chunk.js +1 -0
  256. package/build/upload-translation-en-json.59269508.chunk.js +1 -0
  257. package/build/upload-translation-es-json.8ec935ef.chunk.js +1 -0
  258. package/build/upload-translation-fr-json.eb9b4f84.chunk.js +1 -0
  259. package/build/upload-translation-he-json.c226f2dc.chunk.js +1 -0
  260. package/build/upload-translation-it-json.8e58456e.chunk.js +1 -0
  261. package/build/upload-translation-ja-json.1378a2e7.chunk.js +1 -0
  262. package/build/upload-translation-ko-json.5e06e112.chunk.js +1 -0
  263. package/build/upload-translation-ms-json.dc3bf0d7.chunk.js +1 -0
  264. package/build/upload-translation-pl-json.6071e38c.chunk.js +1 -0
  265. package/build/upload-translation-pt-BR-json.7e8d9550.chunk.js +1 -0
  266. package/build/upload-translation-ru-json.da2529f3.chunk.js +1 -0
  267. package/build/upload-translation-sk-json.bfdf4f09.chunk.js +1 -0
  268. package/build/upload-translation-th-json.6a48b826.chunk.js +1 -0
  269. package/build/upload-translation-uk-json.6fb09148.chunk.js +1 -0
  270. package/build/upload-translation-zh-Hans-json.c9622577.chunk.js +1 -0
  271. package/build/upload-translation-zh-json.711f804b.chunk.js +1 -0
  272. package/build/upload.d647d59d.chunk.js +105 -0
  273. package/build/users-advanced-settings-page.22690469.chunk.js +101 -0
  274. package/build/users-email-settings-page.0a096388.chunk.js +1 -0
  275. package/build/users-permissions-translation-ar-json.e8123ed2.chunk.js +1 -0
  276. package/build/users-permissions-translation-cs-json.e6649c5f.chunk.js +1 -0
  277. package/build/users-permissions-translation-de-json.c3628843.chunk.js +1 -0
  278. package/build/users-permissions-translation-dk-json.fe39c74b.chunk.js +1 -0
  279. package/build/users-permissions-translation-en-json.3fe86528.chunk.js +1 -0
  280. package/build/users-permissions-translation-es-json.1bb9cde2.chunk.js +1 -0
  281. package/build/users-permissions-translation-fr-json.172aa69f.chunk.js +1 -0
  282. package/build/users-permissions-translation-id-json.5aadd143.chunk.js +1 -0
  283. package/build/users-permissions-translation-it-json.7d377480.chunk.js +1 -0
  284. package/build/users-permissions-translation-ja-json.4967badf.chunk.js +1 -0
  285. package/build/users-permissions-translation-ko-json.3be77775.chunk.js +1 -0
  286. package/build/users-permissions-translation-ms-json.ea8a2baf.chunk.js +1 -0
  287. package/build/users-permissions-translation-nl-json.d638c4ce.chunk.js +1 -0
  288. package/build/users-permissions-translation-pl-json.3c4fe81c.chunk.js +1 -0
  289. package/build/users-permissions-translation-pt-BR-json.f6791a86.chunk.js +1 -0
  290. package/build/users-permissions-translation-pt-json.38afed04.chunk.js +1 -0
  291. package/build/users-permissions-translation-ru-json.319d51ef.chunk.js +1 -0
  292. package/build/users-permissions-translation-sk-json.ba1cd385.chunk.js +1 -0
  293. package/build/users-permissions-translation-sv-json.83c60841.chunk.js +1 -0
  294. package/build/users-permissions-translation-th-json.68873214.chunk.js +1 -0
  295. package/build/users-permissions-translation-tr-json.cdc49a3c.chunk.js +1 -0
  296. package/build/users-permissions-translation-uk-json.63eaa01c.chunk.js +1 -0
  297. package/build/users-permissions-translation-vi-json.dccc02fc.chunk.js +1 -0
  298. package/build/users-permissions-translation-zh-Hans-json.c3fd301b.chunk.js +1 -0
  299. package/build/users-permissions-translation-zh-json.e03ae2a4.chunk.js +1 -0
  300. package/build/users-providers-settings-page.bfe7755a.chunk.js +1 -0
  301. package/build/users-roles-settings-page.487f3346.chunk.js +30 -0
  302. package/build/vi-json.3d14e91e.chunk.js +1 -0
  303. package/build/webhook-edit-page.043fe03f.chunk.js +23 -0
  304. package/build/webhook-list-page.2d2d71a1.chunk.js +132 -0
  305. package/build/zh-Hans-json.c84ce330.chunk.js +1 -0
  306. package/build/zh-json.96bf6019.chunk.js +1 -0
  307. package/ee/admin/pages/AuthPage/components/Providers/SSOProviders.js +1 -1
  308. package/ee/admin/pages/SettingsPage/SingleSignOn/index.js +2 -2
  309. package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +5 -5
  310. package/ee/admin/pages/SettingsPage/pages/Roles/ListPage/index.js +6 -6
  311. package/index.js +32 -27
  312. package/package.json +10 -12
  313. package/scripts/build.js +32 -4
  314. package/server/bootstrap.js +9 -7
  315. package/server/config/index.js +0 -1
  316. package/server/controllers/admin.js +22 -1
  317. package/server/policies/index.js +1 -0
  318. package/server/policies/isTelemetryEnabled.js +16 -0
  319. package/server/routes/admin.js +9 -0
  320. package/server/services/api-token.js +15 -14
  321. package/server/services/token.js +13 -0
  322. package/server/validation/permission.js +5 -1
  323. package/utils/create-cache-dir.js +60 -15
  324. package/utils/get-custom-app-config-file.js +23 -0
  325. package/utils/get-plugins-path.js +26 -0
  326. package/utils/should-build-admin.js +7 -6
  327. package/utils/watch-admin-files.js +4 -1
  328. package/webpack.config.js +100 -91
  329. package/admin/src/content-manager/components/DynamicTable/CellContent/Relation/PopoverContent.js +0 -87
  330. package/admin/src/content-manager/components/DynamicTable/CellContent/Relation/index.js +0 -107
  331. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/getYupInnerErrors.js +0 -17
  332. package/build/1094.e1db3a1a.chunk.js +0 -1
  333. package/build/1454.f065d92a.chunk.js +0 -2
  334. package/build/1454.f065d92a.chunk.js.LICENSE.txt +0 -7
  335. package/build/1856.a30bd09b.chunk.js +0 -1
  336. package/build/2481.4eae9408.chunk.js +0 -1
  337. package/build/2912.c5f76e65.chunk.js +0 -1
  338. package/build/4362.b3d67035.chunk.js +0 -1
  339. package/build/4715.8a2db02a.chunk.js +0 -1
  340. package/build/4800.f4a1384a.chunk.js +0 -1
  341. package/build/497.3fcf6196.chunk.js +0 -1
  342. package/build/4982.601f6196.chunk.js +0 -1
  343. package/build/6404.3c2d0a81.chunk.js +0 -1
  344. package/build/6925.bd694b04.chunk.js +0 -2
  345. package/build/6925.bd694b04.chunk.js.LICENSE.txt +0 -5
  346. package/build/7841.490dbbf1.chunk.js +0 -1
  347. package/build/8042.1d66811a.chunk.js +0 -2
  348. package/build/8042.1d66811a.chunk.js.LICENSE.txt +0 -4
  349. package/build/8469.8d819a3c.chunk.js +0 -1
  350. package/build/849.17f011e8.chunk.js +0 -1
  351. package/build/9235.ced8aebf.chunk.js +0 -1
  352. package/build/9260.4233fae2.chunk.js +0 -2
  353. package/build/9260.4233fae2.chunk.js.LICENSE.txt +0 -15
  354. package/build/9853.6ff595fa.chunk.js +0 -1
  355. package/build/9988.fe838ba6.chunk.js +0 -2
  356. package/build/9988.fe838ba6.chunk.js.LICENSE.txt +0 -9
  357. package/build/Admin-authenticatedApp.16bed71f.chunk.js +0 -1
  358. package/build/Admin_homePage.fd1fc572.chunk.js +0 -1
  359. package/build/Admin_marketplace.89a0a014.chunk.js +0 -1
  360. package/build/Admin_pluginsPage.97a514db.chunk.js +0 -1
  361. package/build/Admin_profilePage.d7192d06.chunk.js +0 -1
  362. package/build/Admin_settingsPage.a8c7ded5.chunk.js +0 -1
  363. package/build/admin-edit-roles-page.49b6f01d.chunk.js +0 -1
  364. package/build/admin-edit-users.381e4a0d.chunk.js +0 -1
  365. package/build/admin-users.2740c223.chunk.js +0 -1
  366. package/build/api-tokens-create-page.db17bb39.chunk.js +0 -1
  367. package/build/api-tokens-edit-page.c7299a77.chunk.js +0 -1
  368. package/build/api-tokens-list-page.26a05a21.chunk.js +0 -1
  369. package/build/ar-json.6a2565af.chunk.js +0 -1
  370. package/build/codemirror-addon-closebrackets.0cfe64d0.chunk.js +0 -1
  371. package/build/codemirror-addon-lint-js.a6eeef9c.chunk.js +0 -1
  372. package/build/codemirror-addon-lint.91580cda.chunk.js +0 -1
  373. package/build/codemirror-addon-mark-selection.4dca121f.chunk.js +0 -1
  374. package/build/codemirror-css.48b438c9.chunk.js +0 -1
  375. package/build/codemirror-javacript.8c7c015d.chunk.js +0 -1
  376. package/build/codemirror-theme.b5559efc.chunk.js +0 -1
  377. package/build/content-manager.f1c46a88.chunk.js +0 -1
  378. package/build/content-type-builder-translation-ar-json.f1fedc12.chunk.js +0 -1
  379. package/build/content-type-builder-translation-cs-json.89f7272e.chunk.js +0 -1
  380. package/build/content-type-builder-translation-de-json.0205697c.chunk.js +0 -1
  381. package/build/content-type-builder-translation-dk-json.235ff56e.chunk.js +0 -1
  382. package/build/content-type-builder-translation-en-json.8034dab6.chunk.js +0 -1
  383. package/build/content-type-builder-translation-es-json.13b2e2aa.chunk.js +0 -1
  384. package/build/content-type-builder-translation-fr-json.bee621f7.chunk.js +0 -1
  385. package/build/content-type-builder-translation-id-json.2fbf4f8c.chunk.js +0 -1
  386. package/build/content-type-builder-translation-it-json.a1afd7a9.chunk.js +0 -1
  387. package/build/content-type-builder-translation-ja-json.1459fb88.chunk.js +0 -1
  388. package/build/content-type-builder-translation-ko-json.d2080111.chunk.js +0 -1
  389. package/build/content-type-builder-translation-ms-json.048122eb.chunk.js +0 -1
  390. package/build/content-type-builder-translation-nl-json.8d59e86b.chunk.js +0 -1
  391. package/build/content-type-builder-translation-pl-json.01dc068c.chunk.js +0 -1
  392. package/build/content-type-builder-translation-pt-BR-json.d311d056.chunk.js +0 -1
  393. package/build/content-type-builder-translation-pt-json.4893266f.chunk.js +0 -1
  394. package/build/content-type-builder-translation-ru-json.1285874d.chunk.js +0 -1
  395. package/build/content-type-builder-translation-sk-json.0064156b.chunk.js +0 -1
  396. package/build/content-type-builder-translation-th-json.5f690524.chunk.js +0 -1
  397. package/build/content-type-builder-translation-tr-json.696283a5.chunk.js +0 -1
  398. package/build/content-type-builder-translation-uk-json.87496bf9.chunk.js +0 -1
  399. package/build/content-type-builder-translation-zh-Hans-json.283c640e.chunk.js +0 -1
  400. package/build/content-type-builder-translation-zh-json.77aa2275.chunk.js +0 -1
  401. package/build/content-type-builder.cda4ba3c.chunk.js +0 -1
  402. package/build/cropper-css.ace19575.chunk.js +0 -1
  403. package/build/cs-json.8df09876.chunk.js +0 -1
  404. package/build/de-json.6e14f607.chunk.js +0 -1
  405. package/build/dk-json.be388470.chunk.js +0 -1
  406. package/build/email-settings-page.40ee2bda.chunk.js +0 -1
  407. package/build/email-translation-id-json.e3c2101d.chunk.js +0 -1
  408. package/build/email-translation-ja-json.66337e44.chunk.js +0 -1
  409. package/build/email-translation-ko-json.52bbd7b4.chunk.js +0 -1
  410. package/build/email-translation-ms-json.e39256df.chunk.js +0 -1
  411. package/build/email-translation-nl-json.12d28adb.chunk.js +0 -1
  412. package/build/email-translation-pl-json.9585a84e.chunk.js +0 -1
  413. package/build/email-translation-pt-BR-json.6c04b3ef.chunk.js +0 -1
  414. package/build/email-translation-pt-json.0239be04.chunk.js +0 -1
  415. package/build/email-translation-ru-json.f3b4fecc.chunk.js +0 -1
  416. package/build/email-translation-sk-json.76dbaaa6.chunk.js +0 -1
  417. package/build/email-translation-th-json.25ad73e7.chunk.js +0 -1
  418. package/build/email-translation-tr-json.ae04a9f2.chunk.js +0 -1
  419. package/build/email-translation-uk-json.03b27b08.chunk.js +0 -1
  420. package/build/email-translation-vi-json.3e1dd5b3.chunk.js +0 -1
  421. package/build/email-translation-zh-Hans-json.0df4ca59.chunk.js +0 -1
  422. package/build/email-translation-zh-json.82978eb0.chunk.js +0 -1
  423. package/build/en-json.73a610d6.chunk.js +0 -1
  424. package/build/es-json.61553168.chunk.js +0 -1
  425. package/build/fontawesome-css-all.3b89f909.chunk.js +0 -1
  426. package/build/fontawesome-css.36cff9ae.chunk.js +0 -1
  427. package/build/fontawesome-js.2639263c.chunk.js +0 -2
  428. package/build/fontawesome-js.2639263c.chunk.js.LICENSE.txt +0 -4
  429. package/build/fr-json.a9ce0700.chunk.js +0 -1
  430. package/build/he-json.1742494e.chunk.js +0 -1
  431. package/build/highlight.js.6321cb45.chunk.js +0 -1
  432. package/build/hu-json.e667d285.chunk.js +0 -1
  433. package/build/i18n-settings-page.c4018651.chunk.js +0 -1
  434. package/build/i18n-translation-de-json.c5c9054f.chunk.js +0 -1
  435. package/build/i18n-translation-es-json.7049afa2.chunk.js +0 -1
  436. package/build/i18n-translation-fr-json.c6367bc9.chunk.js +0 -1
  437. package/build/i18n-translation-ko-json.aecb7e01.chunk.js +0 -1
  438. package/build/i18n-translation-zh-Hans-json.258b2e1a.chunk.js +0 -1
  439. package/build/id-json.d87ebb20.chunk.js +0 -1
  440. package/build/it-json.a2880b81.chunk.js +0 -1
  441. package/build/ja-json.e13f04e8.chunk.js +0 -1
  442. package/build/ko-json.2200c9c9.chunk.js +0 -1
  443. package/build/main.12d62562.js +0 -2
  444. package/build/main.12d62562.js.LICENSE.txt +0 -91
  445. package/build/ms-json.3a062984.chunk.js +0 -1
  446. package/build/nl-json.30ce02cb.chunk.js +0 -1
  447. package/build/no-json.9af40e9d.chunk.js +0 -1
  448. package/build/pl-json.fd373053.chunk.js +0 -1
  449. package/build/pt-BR-json.30e2d716.chunk.js +0 -1
  450. package/build/pt-json.3aaf9e05.chunk.js +0 -1
  451. package/build/ru-json.78c56e1c.chunk.js +0 -1
  452. package/build/runtime~main.21bf3a67.js +0 -1
  453. package/build/sk-json.c0bf144c.chunk.js +0 -1
  454. package/build/sso-settings-page.121dd0a6.chunk.js +0 -1
  455. package/build/sv-json.aad187b9.chunk.js +0 -1
  456. package/build/th-json.e2b4a0fb.chunk.js +0 -1
  457. package/build/tr-json.0add11cd.chunk.js +0 -1
  458. package/build/uk-json.eb78e77e.chunk.js +0 -1
  459. package/build/upload-settings.4401f36d.chunk.js +0 -1
  460. package/build/upload-translation-de-json.1308dce5.chunk.js +0 -1
  461. package/build/upload-translation-dk-json.0d4e855f.chunk.js +0 -1
  462. package/build/upload-translation-en-json.c334dd82.chunk.js +0 -1
  463. package/build/upload-translation-es-json.81b13eac.chunk.js +0 -1
  464. package/build/upload-translation-fr-json.1bec79ec.chunk.js +0 -1
  465. package/build/upload-translation-he-json.1d28982f.chunk.js +0 -1
  466. package/build/upload-translation-it-json.7d4bdc5a.chunk.js +0 -1
  467. package/build/upload-translation-ja-json.97fcacd8.chunk.js +0 -1
  468. package/build/upload-translation-ko-json.d7345fe1.chunk.js +0 -1
  469. package/build/upload-translation-ms-json.081effd5.chunk.js +0 -1
  470. package/build/upload-translation-pl-json.2dfe78bb.chunk.js +0 -1
  471. package/build/upload-translation-pt-BR-json.65936d7b.chunk.js +0 -1
  472. package/build/upload-translation-ru-json.2d3b6f69.chunk.js +0 -1
  473. package/build/upload-translation-sk-json.f15c7fd6.chunk.js +0 -1
  474. package/build/upload-translation-th-json.6d3c2370.chunk.js +0 -1
  475. package/build/upload-translation-uk-json.a6c38449.chunk.js +0 -1
  476. package/build/upload-translation-zh-Hans-json.f6b26c45.chunk.js +0 -1
  477. package/build/upload-translation-zh-json.06052336.chunk.js +0 -1
  478. package/build/upload.5a2dded7.chunk.js +0 -1
  479. package/build/users-advanced-settings-page.8905d8d8.chunk.js +0 -1
  480. package/build/users-email-settings-page.5abb9575.chunk.js +0 -1
  481. package/build/users-permissions-translation-ar-json.bdddd0d7.chunk.js +0 -1
  482. package/build/users-permissions-translation-cs-json.7881d3ff.chunk.js +0 -1
  483. package/build/users-permissions-translation-de-json.8d53c619.chunk.js +0 -1
  484. package/build/users-permissions-translation-dk-json.89d41c4b.chunk.js +0 -1
  485. package/build/users-permissions-translation-en-json.21b0fd2f.chunk.js +0 -1
  486. package/build/users-permissions-translation-es-json.a4f81eaa.chunk.js +0 -1
  487. package/build/users-permissions-translation-fr-json.a2172545.chunk.js +0 -1
  488. package/build/users-permissions-translation-id-json.8f17982a.chunk.js +0 -1
  489. package/build/users-permissions-translation-it-json.87952a24.chunk.js +0 -1
  490. package/build/users-permissions-translation-ja-json.5915d9ef.chunk.js +0 -1
  491. package/build/users-permissions-translation-ko-json.f1ca6cc4.chunk.js +0 -1
  492. package/build/users-permissions-translation-ms-json.2268324c.chunk.js +0 -1
  493. package/build/users-permissions-translation-nl-json.4e1231dd.chunk.js +0 -1
  494. package/build/users-permissions-translation-pl-json.107638b5.chunk.js +0 -1
  495. package/build/users-permissions-translation-pt-BR-json.8dafc053.chunk.js +0 -1
  496. package/build/users-permissions-translation-pt-json.3322464f.chunk.js +0 -1
  497. package/build/users-permissions-translation-ru-json.5709c5a0.chunk.js +0 -1
  498. package/build/users-permissions-translation-sk-json.fe7cc044.chunk.js +0 -1
  499. package/build/users-permissions-translation-sv-json.e7e1684b.chunk.js +0 -1
  500. package/build/users-permissions-translation-th-json.bb544ee3.chunk.js +0 -1
  501. package/build/users-permissions-translation-tr-json.30f3ca90.chunk.js +0 -1
  502. package/build/users-permissions-translation-uk-json.634f2569.chunk.js +0 -1
  503. package/build/users-permissions-translation-vi-json.605d88bc.chunk.js +0 -1
  504. package/build/users-permissions-translation-zh-Hans-json.85480dab.chunk.js +0 -1
  505. package/build/users-permissions-translation-zh-json.99932731.chunk.js +0 -1
  506. package/build/users-providers-settings-page.368893ed.chunk.js +0 -1
  507. package/build/users-roles-settings-page.a2f6277a.chunk.js +0 -1
  508. package/build/vi-json.1e850069.chunk.js +0 -1
  509. package/build/webhook-edit-page.d170eda1.chunk.js +0 -1
  510. package/build/webhook-list-page.c21b5a9a.chunk.js +0 -1
  511. package/build/zh-Hans-json.55f6475b.chunk.js +0 -1
  512. package/build/zh-json.c3c2b225.chunk.js +0 -1
  513. package/server/config/api-token.js +0 -7
package/index.js CHANGED
@@ -4,7 +4,9 @@ const path = require('path');
4
4
  const fs = require('fs-extra');
5
5
  const webpack = require('webpack');
6
6
  const WebpackDevServer = require('webpack-dev-server');
7
+ const { isUsingTypeScript } = require('@strapi/typescript-utils');
7
8
  const chalk = require('chalk');
9
+
8
10
  const {
9
11
  createCacheDir,
10
12
  getCustomWebpackConfig,
@@ -12,24 +14,20 @@ const {
12
14
  watchAdminFiles,
13
15
  } = require('./utils');
14
16
 
15
- async function build({
16
- appDir,
17
- buildDestDir,
18
- env,
19
- forceBuild,
20
- optimize,
21
- options,
22
- plugins,
23
- useTypeScript,
24
- }) {
25
- const buildAdmin = await shouldBuildAdmin({ appDir, plugins, useTypeScript });
17
+ async function build({ appDir, buildDestDir, env, forceBuild, optimize, options, plugins }) {
18
+ const buildAdmin = await shouldBuildAdmin({ appDir, plugins });
19
+
20
+ const useTypeScript = await isUsingTypeScript(
21
+ path.join(appDir, 'src', 'admin'),
22
+ 'tsconfig.json'
23
+ );
26
24
 
27
25
  if (!buildAdmin && !forceBuild) {
28
26
  return;
29
27
  }
30
28
 
31
29
  // Create the cache dir containing the front-end files.
32
- await createCacheDir({ appDir, plugins, useTypeScript });
30
+ await createCacheDir({ appDir, plugins });
33
31
 
34
32
  const cacheDir = path.resolve(appDir, '.cache');
35
33
  const entry = path.resolve(cacheDir, 'admin', 'src');
@@ -41,7 +39,13 @@ async function build({
41
39
  ceRoot: path.resolve(cacheDir, 'admin', 'src'),
42
40
  };
43
41
 
44
- const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].appPathToPlugin );
42
+ const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].pathToPlugin);
43
+
44
+ // Either use the tsconfig file from the generated app or the one inside the .cache folder
45
+ // so we can develop plugins in TS while being in a JS app
46
+ const tsConfigFilePath = useTypeScript
47
+ ? path.join(appDir, 'src', 'admin', 'tsconfig.json')
48
+ : path.resolve(entry, 'tsconfig.json');
45
49
 
46
50
  const config = getCustomWebpackConfig(appDir, {
47
51
  appDir,
@@ -53,7 +57,7 @@ async function build({
53
57
  options,
54
58
  pluginsPath,
55
59
  roots,
56
- useTypeScript,
60
+ tsConfigFilePath,
57
61
  });
58
62
 
59
63
  const compiler = webpack(config);
@@ -94,19 +98,14 @@ async function clean({ appDir, buildDestDir }) {
94
98
  fs.removeSync(cacheDir);
95
99
  }
96
100
 
97
- async function watchAdmin({
98
- appDir,
99
- browser,
100
- buildDestDir,
101
- host,
102
- options,
103
- plugins,
104
- port,
105
- useTypeScript,
106
- }) {
101
+ async function watchAdmin({ appDir, browser, buildDestDir, host, options, plugins, port }) {
102
+ const useTypeScript = await isUsingTypeScript(
103
+ path.join(appDir, 'src', 'admin'),
104
+ 'tsconfig.json'
105
+ );
107
106
  // Create the cache dir containing the front-end files.
108
107
  const cacheDir = path.join(appDir, '.cache');
109
- await createCacheDir({ appDir, plugins, useTypeScript });
108
+ await createCacheDir({ appDir, plugins });
110
109
 
111
110
  const entry = path.join(cacheDir, 'admin', 'src');
112
111
  const dest = path.join(buildDestDir, 'build');
@@ -118,7 +117,13 @@ async function watchAdmin({
118
117
  ceRoot: path.resolve(cacheDir, 'admin', 'src'),
119
118
  };
120
119
 
121
- const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].appPathToPlugin);
120
+ const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].pathToPlugin);
121
+
122
+ // Either use the tsconfig file from the generated app or the one inside the .cache folder
123
+ // so we can develop plugins in TS while being in a JS app
124
+ const tsConfigFilePath = useTypeScript
125
+ ? path.join(appDir, 'src', 'admin', 'tsconfig.json')
126
+ : path.resolve(entry, 'tsconfig.json');
122
127
 
123
128
  const args = {
124
129
  appDir,
@@ -147,7 +152,7 @@ async function watchAdmin({
147
152
  disableDotRule: true,
148
153
  },
149
154
  },
150
- useTypeScript,
155
+ tsConfigFilePath,
151
156
  };
152
157
 
153
158
  const webpackConfig = getCustomWebpackConfig(appDir, args);
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.1",
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",
53
+ "@strapi/babel-plugin-switch-ee-ce": "4.2.0-beta.1",
56
54
  "@strapi/design-system": "0.0.1-alpha.79",
57
- "@strapi/helper-plugin": "4.2.0-beta.0",
55
+ "@strapi/helper-plugin": "4.2.0-beta.1",
58
56
  "@strapi/icons": "0.0.1-alpha.79",
59
- "@strapi/utils": "4.2.0-beta.0",
57
+ "@strapi/typescript-utils": "4.2.0-beta.1",
58
+ "@strapi/utils": "4.2.0-beta.1",
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": "4fa2804f35e15ed72dfd309fb5bb1c4dba18932f"
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);
@@ -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,
@@ -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
  };
@@ -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,14 @@ 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(
75
+ path.join(appDir, 'src', 'admin'),
76
+ 'tsconfig.json'
77
+ );
78
+
72
79
  const pluginsWithFront = Object.keys(plugins)
73
80
  .filter(pluginName => {
74
81
  const pluginInfo = plugins[pluginName];
@@ -82,26 +89,26 @@ async function createCacheDir({ appDir, plugins, useTypeScript }) {
82
89
  // copy admin core code
83
90
  await copyAdmin(cacheDir);
84
91
 
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;
92
+ // Retrieve the custom config file extension
93
+ const customAdminAppConfigFile = await getCustomAppConfigFile(appDir, useTypeScript);
91
94
 
92
- if (fs.existsSync(customAdminConfigFilePath)) {
95
+ if (customAdminAppConfigFile) {
93
96
  const defaultAdminConfigFilePath = path.resolve(cacheDir, 'admin', 'src', 'app.js');
97
+ const customAdminAppConfigFilePath = path.join(
98
+ appDir,
99
+ 'src',
100
+ 'admin',
101
+ customAdminAppConfigFile
102
+ );
103
+ const dest = path.resolve(cacheDir, 'admin', 'src', customAdminAppConfigFile);
94
104
 
95
105
  if (useTypeScript) {
96
106
  // Remove the default config file
97
107
  await fs.remove(defaultAdminConfigFilePath);
98
108
  // Copy the custom one
99
- await fs.copy(
100
- customAdminConfigTSXFilePath,
101
- path.resolve(cacheDir, 'admin', 'src', 'app.tsx')
102
- );
109
+ await fs.copy(customAdminAppConfigFilePath, dest);
103
110
  } else {
104
- await fs.copy(customAdminConfigFilePath, path.resolve(cacheDir, 'admin', 'src', 'app.js'));
111
+ await fs.copy(customAdminAppConfigFilePath, dest);
105
112
  }
106
113
  }
107
114
 
@@ -114,6 +121,44 @@ async function createCacheDir({ appDir, plugins, useTypeScript }) {
114
121
 
115
122
  // create plugins.js with plugins requires
116
123
  await createPluginsJs(pluginsWithFront, cacheDir);
124
+
125
+ // create the tsconfig.json file so we can develop plugins in ts while being in a JS project
126
+ if (!useTypeScript) {
127
+ await createTSConfigFile(cacheDir);
128
+ }
129
+ }
130
+
131
+ async function createTSConfigFile(dest) {
132
+ const tsConfig = {
133
+ compilerOptions: {
134
+ lib: ['es2019', 'es2020.promise', 'es2020.bigint', 'es2020.string', 'DOM'],
135
+ noImplicitAny: false,
136
+ module: 'es2020',
137
+ target: 'es5',
138
+ jsx: 'react',
139
+ allowJs: true,
140
+ strict: true,
141
+ moduleResolution: 'node',
142
+ skipLibCheck: true,
143
+ esModuleInterop: true,
144
+ allowSyntheticDefaultImports: true,
145
+ resolveJsonModule: true,
146
+ noEmit: false,
147
+ incremental: true,
148
+ },
149
+ include: ['../../../src/admin/src/*', '../../../src/**/**/admin/src/*'],
150
+ exclude: ['node_modules', '**/*.test.js', '*.js'],
151
+ };
152
+
153
+ const filePath = path.join(dest, 'admin', 'src', 'tsconfig.json');
154
+
155
+ try {
156
+ await fs.ensureFile(filePath);
157
+
158
+ await fs.writeJSON(filePath, tsConfig, { spaces: 2 });
159
+ } catch (err) {
160
+ console.log(err);
161
+ }
117
162
  }
118
163
 
119
164
  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;