@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.
- package/admin/src/assets/images/homepage-logo.png +0 -0
- package/admin/src/assets/images/icon_offline-cloud.svg +5 -0
- package/admin/src/components/AuthenticatedApp/utils/api.js +1 -1
- package/admin/src/components/AutoReloadOverlayBlockerProvider/Blocker.js +3 -7
- package/admin/src/components/GuidedTour/Homepage/index.js +1 -2
- package/admin/src/components/GuidedTour/Modal/components/Stepper.js +1 -2
- package/admin/src/components/LeftMenu/index.js +9 -7
- package/admin/src/components/Notifications/Notification/index.js +2 -2
- package/admin/src/components/UpgradePlanModal/index.js +6 -2
- package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +17 -3
- package/admin/src/content-manager/components/ComponentInitializer/index.js +9 -4
- package/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js +135 -0
- package/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js +32 -0
- package/admin/src/content-manager/components/DynamicTable/CellContent/RepeatableComponent/index.js +62 -0
- package/admin/src/content-manager/components/DynamicTable/CellContent/SingleComponent/index.js +37 -0
- package/admin/src/content-manager/components/DynamicTable/CellContent/index.js +52 -27
- package/admin/src/content-manager/components/DynamicTable/CellContent/utils/hasContent.js +64 -0
- package/admin/src/content-manager/components/DynamicTable/CellContent/utils/isSingleRelation.js +3 -0
- package/admin/src/content-manager/components/DynamicTable/TableRows/index.js +1 -1
- package/admin/src/content-manager/components/DynamicZone/components/ComponentPicker/Category/ComponentCard/index.js +1 -1
- package/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +37 -37
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/getAPIInnerError.js +18 -0
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/handleAPIError.js +15 -0
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/index.js +0 -1
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +9 -7
- package/admin/src/content-manager/components/FieldComponent/index.js +0 -1
- package/admin/src/content-manager/components/InputUID/index.js +1 -5
- package/admin/src/content-manager/components/Inputs/index.js +4 -6
- package/admin/src/content-manager/components/RepeatableComponent/AccordionGroupCustom/index.js +3 -1
- package/admin/src/content-manager/components/RepeatableComponent/index.js +3 -18
- package/admin/src/content-manager/components/RepeatableComponent/utils/getComponentErrorKeys.js +10 -0
- package/admin/src/content-manager/components/SelectMany/ListItem.js +1 -2
- package/admin/src/content-manager/components/SelectMany/index.js +1 -1
- package/admin/src/content-manager/components/SelectOne/index.js +1 -1
- package/admin/src/content-manager/components/SelectWrapper/index.js +8 -7
- package/admin/src/content-manager/components/SelectWrapper/utils/getSelectStyles.js +1 -1
- package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +17 -5
- package/admin/src/content-manager/components/Wysiwyg/Editor.js +2 -0
- package/admin/src/content-manager/components/Wysiwyg/index.js +3 -4
- package/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +23 -2
- package/admin/src/content-manager/pages/App/LeftMenu/index.js +8 -7
- package/admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js +1 -1
- package/admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js +1 -1
- package/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js +1 -1
- package/admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js +1 -2
- package/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +6 -1
- package/admin/src/content-manager/pages/EditSettingsView/index.js +4 -5
- package/admin/src/content-manager/pages/EditSettingsView/utils/layout.js +7 -1
- package/admin/src/content-manager/pages/EditView/DeleteLink/index.js +1 -4
- package/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js +1 -4
- package/admin/src/content-manager/pages/EditView/Header/index.js +4 -4
- package/admin/src/content-manager/pages/EditView/index.js +1 -4
- package/admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js +1 -1
- package/admin/src/content-manager/pages/ListSettingsView/index.js +3 -4
- package/admin/src/content-manager/pages/ListView/actions.js +2 -1
- package/admin/src/content-manager/pages/ListView/index.js +3 -6
- package/admin/src/content-manager/pages/ListView/reducer.js +55 -21
- package/admin/src/content-manager/pages/ListView/selectors.js +3 -6
- package/admin/src/content-manager/pages/ListViewLayoutManager/index.js +1 -1
- package/admin/src/content-manager/pages/NoContentType/index.js +1 -2
- package/admin/src/content-manager/testUtils/data.js +5 -1
- package/admin/src/content-manager/utils/checkIfAttributeIsDisplayable.js +1 -1
- package/admin/src/content-manager/utils/isFieldTypeNumber.js +3 -0
- package/admin/src/hooks/useMenu/reducer.js +3 -3
- package/admin/src/hooks/useNavigatorOnLine/index.js +31 -0
- package/admin/src/hooks/useReleaseNotification/index.js +1 -1
- package/admin/src/hooks/useSettingsMenu/init.js +2 -2
- package/admin/src/layouts/UnauthenticatedLayout/index.js +1 -1
- package/admin/src/pages/Admin/Onboarding/index.js +1 -1
- package/admin/src/pages/Admin/index.js +15 -5
- package/admin/src/pages/App/constants.js +1 -0
- package/admin/src/pages/App/index.js +17 -3
- package/admin/src/pages/App/reducer.js +22 -0
- package/admin/src/pages/AuthPage/components/ForgotPassword/index.js +1 -2
- package/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js +1 -1
- package/admin/src/pages/AuthPage/components/Login/BaseLogin.js +2 -3
- package/admin/src/pages/AuthPage/components/Oops/index.js +1 -2
- package/admin/src/pages/AuthPage/components/Register/index.js +18 -18
- package/admin/src/pages/AuthPage/components/ResetPassword/index.js +6 -7
- package/admin/src/pages/HomePage/ContentBlocks.js +16 -3
- package/admin/src/pages/HomePage/HomeHeader.js +2 -2
- package/admin/src/pages/HomePage/SocialLinks.js +4 -6
- package/admin/src/pages/InstalledPluginsPage/Plugins.js +3 -3
- package/admin/src/pages/InstalledPluginsPage/index.js +1 -1
- package/admin/src/pages/InternalErrorPage/index.js +1 -2
- package/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js +40 -0
- package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +47 -0
- package/admin/src/pages/MarketplacePage/components/PluginCard/InstallPluginButton.js +66 -0
- package/admin/src/pages/MarketplacePage/components/PluginCard/index.js +17 -39
- package/admin/src/pages/MarketplacePage/index.js +65 -27
- package/admin/src/pages/NotFoundPage/index.js +1 -2
- package/admin/src/pages/ProfilePage/index.js +5 -5
- package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +6 -5
- package/admin/src/pages/SettingsPage/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/LoadingView/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +4 -4
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DeleteButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/UpdateButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +9 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js +3 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +3 -3
- package/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +6 -6
- package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +6 -6
- package/admin/src/pages/SettingsPage/pages/Users/EditPage/utils/layout.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Users/ListPage/DynamicTable/TableRows/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/stepper.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +4 -5
- package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +8 -8
- package/admin/src/pages/UseCasePage/index.js +2 -2
- package/admin/src/reducers.js +4 -2
- package/admin/src/translations/ar.json +0 -6
- package/admin/src/translations/ca.json +699 -0
- package/admin/src/translations/cs.json +0 -8
- package/admin/src/translations/de.json +244 -49
- package/admin/src/translations/dk.json +0 -53
- package/admin/src/translations/en.json +87 -99
- package/admin/src/translations/es.json +0 -53
- package/admin/src/translations/fr.json +0 -56
- package/admin/src/translations/he.json +0 -24
- package/admin/src/translations/hu.json +0 -53
- package/admin/src/translations/id.json +0 -21
- package/admin/src/translations/it.json +0 -22
- package/admin/src/translations/ja.json +0 -53
- package/admin/src/translations/ko.json +0 -56
- package/admin/src/translations/languageNativeNames.js +1 -0
- package/admin/src/translations/ms.json +0 -12
- package/admin/src/translations/nl.json +0 -53
- package/admin/src/translations/no.json +0 -22
- package/admin/src/translations/pl.json +0 -26
- package/admin/src/translations/pt-BR.json +0 -53
- package/admin/src/translations/pt.json +0 -13
- package/admin/src/translations/ru.json +34 -25
- package/admin/src/translations/sk.json +0 -21
- package/admin/src/translations/sv.json +0 -6
- package/admin/src/translations/th.json +0 -21
- package/admin/src/translations/tr.json +0 -13
- package/admin/src/translations/uk.json +0 -12
- package/admin/src/translations/vi.json +1 -10
- package/admin/src/translations/zh-Hans.json +0 -53
- package/admin/src/translations/zh.json +0 -56
- package/admin/src/tsconfig.json +10 -0
- package/build/1709.ceed0e18.chunk.js +503 -0
- package/build/1856.521a99fd.chunk.js +172 -0
- package/build/20.cf744c35.chunk.js +308 -0
- package/build/2077.51485bfb.chunk.js +194 -0
- package/build/210.014495c1.chunk.js +338 -0
- package/build/2135.95ee6de1.chunk.js +162 -0
- package/build/2524.688d0355.chunk.js +1 -0
- package/build/2912.79c2b3c8.chunk.js +253 -0
- package/build/4073.41ac1235.chunk.js +1 -0
- package/build/4715.77e04177.chunk.js +385 -0
- package/build/4761.3eabdf46.chunk.js +101 -0
- package/build/6229.a5cca9f2.chunk.js +194 -0
- package/build/6281.f10a7e3a.chunk.js +1 -0
- package/build/6925.fafef528.chunk.js +761 -0
- package/build/7009.79fce86d.chunk.js +164 -0
- package/build/7191.3bde3cbf.chunk.js +335 -0
- package/build/7841.f0e7d629.chunk.js +253 -0
- package/build/7863.bc7a8f3a.chunk.js +112 -0
- package/build/8469.3af1823d.chunk.js +1 -0
- package/build/9420.cb0b75e8.chunk.js +508 -0
- package/build/Admin-authenticatedApp.4ce8d292.chunk.js +80 -0
- package/build/Admin_homePage.f157e33e.chunk.js +71 -0
- package/build/Admin_marketplace.1e3393c9.chunk.js +11 -0
- package/build/Admin_pluginsPage.788fb2f6.chunk.js +1 -0
- package/build/Admin_profilePage.62c203ad.chunk.js +15 -0
- package/build/Admin_settingsPage.924a7816.chunk.js +170 -0
- package/build/a6b842e0b6d2b61135d1.svg +5 -0
- package/build/admin-edit-roles-page.94e1403b.chunk.js +1 -0
- package/build/admin-edit-users.6c2bf718.chunk.js +10 -0
- package/build/admin-users.e03db115.chunk.js +11 -0
- package/build/api-tokens-create-page.787ab302.chunk.js +1 -0
- package/build/api-tokens-edit-page.e4010c0c.chunk.js +1 -0
- package/build/api-tokens-list-page.340750a6.chunk.js +15 -0
- package/build/ar-json.d4cb26d9.chunk.js +1 -0
- package/build/ca-json.0097e443.chunk.js +1 -0
- package/build/codemirror-addon-closebrackets.c0f97916.chunk.js +2 -0
- package/build/codemirror-addon-lint-js.7c35dcb0.chunk.js +1 -0
- package/build/codemirror-addon-lint.505ff1d4.chunk.js +1 -0
- package/build/codemirror-addon-mark-selection.653e904d.chunk.js +1 -0
- package/build/codemirror-css.b467b1de.chunk.js +346 -0
- package/build/codemirror-javacript.41bdefda.chunk.js +1 -0
- package/build/codemirror-theme.cf9f9eb6.chunk.js +34 -0
- package/build/content-manager.6cdcfb6e.chunk.js +1204 -0
- package/build/content-type-builder-translation-ar-json.142327af.chunk.js +1 -0
- package/build/content-type-builder-translation-cs-json.4aafb972.chunk.js +1 -0
- package/build/content-type-builder-translation-de-json.0d7696b9.chunk.js +1 -0
- package/build/content-type-builder-translation-dk-json.4729f055.chunk.js +1 -0
- package/build/content-type-builder-translation-en-json.e5110288.chunk.js +1 -0
- package/build/content-type-builder-translation-es-json.333cf47f.chunk.js +1 -0
- package/build/content-type-builder-translation-fr-json.aa6eeea8.chunk.js +1 -0
- package/build/content-type-builder-translation-id-json.7c00a32a.chunk.js +1 -0
- package/build/content-type-builder-translation-it-json.a906b389.chunk.js +1 -0
- package/build/content-type-builder-translation-ja-json.87f71930.chunk.js +1 -0
- package/build/content-type-builder-translation-ko-json.51201b12.chunk.js +1 -0
- package/build/content-type-builder-translation-ms-json.963a1a01.chunk.js +1 -0
- package/build/content-type-builder-translation-nl-json.c46c8f30.chunk.js +1 -0
- package/build/content-type-builder-translation-pl-json.a866acda.chunk.js +1 -0
- package/build/content-type-builder-translation-pt-BR-json.5739a2aa.chunk.js +1 -0
- package/build/content-type-builder-translation-pt-json.766bd747.chunk.js +1 -0
- package/build/content-type-builder-translation-ru-json.cf8d7c5c.chunk.js +1 -0
- package/build/content-type-builder-translation-sk-json.3a6defe0.chunk.js +1 -0
- package/build/content-type-builder-translation-th-json.c96a2d3f.chunk.js +1 -0
- package/build/content-type-builder-translation-tr-json.2e52bc60.chunk.js +1 -0
- package/build/content-type-builder-translation-uk-json.d8c0b6dd.chunk.js +1 -0
- package/build/content-type-builder-translation-zh-Hans-json.92a27f59.chunk.js +1 -0
- package/build/content-type-builder-translation-zh-json.2cc55621.chunk.js +1 -0
- package/build/content-type-builder.e73879b9.chunk.js +141 -0
- package/build/cropper-css.ecc0d670.chunk.js +306 -0
- package/build/cs-json.c8f28ba8.chunk.js +1 -0
- package/build/de-json.0b92acd2.chunk.js +1 -0
- package/build/dk-json.9f1bc016.chunk.js +1 -0
- package/build/email-settings-page.f67d13b2.chunk.js +103 -0
- package/build/{email-translation-de-json.559a7d5f.chunk.js → email-translation-ar-json.c624512d.chunk.js} +1 -1
- package/build/{email-translation-ar-json.95d90eb4.chunk.js → email-translation-cs-json.cb18caab.chunk.js} +1 -1
- package/build/{email-translation-it-json.3de61cb6.chunk.js → email-translation-de-json.54743260.chunk.js} +1 -1
- package/build/{email-translation-dk-json.f8a595bf.chunk.js → email-translation-dk-json.f323fe4e.chunk.js} +1 -1
- package/build/{email-translation-en-json.fa0dc92b.chunk.js → email-translation-en-json.6da7e388.chunk.js} +1 -1
- package/build/{email-translation-es-json.eb303dea.chunk.js → email-translation-es-json.9021417d.chunk.js} +1 -1
- package/build/{email-translation-fr-json.49c3c888.chunk.js → email-translation-fr-json.9f125db0.chunk.js} +1 -1
- package/build/email-translation-id-json.3bcae5f5.chunk.js +1 -0
- package/build/{email-translation-cs-json.dfd1f3f2.chunk.js → email-translation-it-json.6ffd1774.chunk.js} +1 -1
- package/build/email-translation-ja-json.72b3f73c.chunk.js +1 -0
- package/build/email-translation-ko-json.e61d4e7a.chunk.js +1 -0
- package/build/email-translation-ms-json.b2b11e05.chunk.js +1 -0
- package/build/email-translation-nl-json.5349635f.chunk.js +1 -0
- package/build/email-translation-pl-json.6da50d0f.chunk.js +1 -0
- package/build/email-translation-pt-BR-json.2c98ab20.chunk.js +1 -0
- package/build/email-translation-pt-json.959ea070.chunk.js +1 -0
- package/build/email-translation-ru-json.d508cf3e.chunk.js +1 -0
- package/build/email-translation-sk-json.fa1fd4b3.chunk.js +1 -0
- package/build/email-translation-th-json.989cfecc.chunk.js +1 -0
- package/build/email-translation-tr-json.87f2feb3.chunk.js +1 -0
- package/build/email-translation-uk-json.0396a803.chunk.js +1 -0
- package/build/email-translation-vi-json.c0d8c414.chunk.js +1 -0
- package/build/email-translation-zh-Hans-json.b463cb25.chunk.js +1 -0
- package/build/email-translation-zh-json.3455468b.chunk.js +1 -0
- package/build/en-json.3e1a222e.chunk.js +1 -0
- package/build/es-json.2a5a9fc1.chunk.js +1 -0
- package/build/fb376b132d18bf4522ca.png +0 -0
- package/build/fontawesome-css-all.04f33619.chunk.js +4618 -0
- package/build/fontawesome-css.477ba714.chunk.js +6 -0
- package/build/fontawesome-js.252cc5f3.chunk.js +7 -0
- package/build/fr-json.84064a0b.chunk.js +1 -0
- package/build/he-json.d40da459.chunk.js +1 -0
- package/build/highlight.js.3381ffc3.chunk.js +86 -0
- package/build/hu-json.c81ce352.chunk.js +1 -0
- package/build/i18n-settings-page.6b67cb75.chunk.js +101 -0
- package/build/i18n-translation-de-json.92534555.chunk.js +1 -0
- package/build/{i18n-translation-dk-json.ecf02d28.chunk.js → i18n-translation-dk-json.54f410ca.chunk.js} +1 -1
- package/build/{i18n-translation-en-json.4d823f62.chunk.js → i18n-translation-en-json.85bc892c.chunk.js} +1 -1
- package/build/i18n-translation-es-json.488206ae.chunk.js +1 -0
- package/build/i18n-translation-fr-json.0839d68d.chunk.js +1 -0
- package/build/i18n-translation-ko-json.d0bc1203.chunk.js +1 -0
- package/build/i18n-translation-zh-Hans-json.560a98e3.chunk.js +1 -0
- package/build/id-json.fad45d17.chunk.js +1 -0
- package/build/index.html +1 -1
- package/build/it-json.12df4cdf.chunk.js +1 -0
- package/build/ja-json.850237e9.chunk.js +1 -0
- package/build/ko-json.2f3d256e.chunk.js +1 -0
- package/build/main.45472ea9.js +8404 -0
- package/build/ms-json.836ed013.chunk.js +1 -0
- package/build/nl-json.465b173f.chunk.js +1 -0
- package/build/no-json.e8749dd4.chunk.js +1 -0
- package/build/pl-json.94f05d2c.chunk.js +1 -0
- package/build/pt-BR-json.6301d49b.chunk.js +1 -0
- package/build/pt-json.c23020ab.chunk.js +1 -0
- package/build/ru-json.28147733.chunk.js +1 -0
- package/build/runtime~main.e7611418.js +2 -0
- package/build/sk-json.5b33afc2.chunk.js +1 -0
- package/build/sso-settings-page.e9034e22.chunk.js +1 -0
- package/build/sv-json.cdcac02d.chunk.js +1 -0
- package/build/th-json.3aadaec6.chunk.js +1 -0
- package/build/tr-json.276e59fe.chunk.js +1 -0
- package/build/uk-json.5b5b9c27.chunk.js +1 -0
- package/build/upload-settings.3db55de0.chunk.js +101 -0
- package/build/upload-translation-ca-json.79159984.chunk.js +1 -0
- package/build/upload-translation-de-json.b642da08.chunk.js +1 -0
- package/build/upload-translation-dk-json.fc61df13.chunk.js +1 -0
- package/build/upload-translation-en-json.59269508.chunk.js +1 -0
- package/build/upload-translation-es-json.8ec935ef.chunk.js +1 -0
- package/build/upload-translation-fr-json.eb9b4f84.chunk.js +1 -0
- package/build/upload-translation-he-json.c226f2dc.chunk.js +1 -0
- package/build/upload-translation-it-json.8e58456e.chunk.js +1 -0
- package/build/upload-translation-ja-json.1378a2e7.chunk.js +1 -0
- package/build/upload-translation-ko-json.5e06e112.chunk.js +1 -0
- package/build/upload-translation-ms-json.dc3bf0d7.chunk.js +1 -0
- package/build/upload-translation-pl-json.6071e38c.chunk.js +1 -0
- package/build/upload-translation-pt-BR-json.7e8d9550.chunk.js +1 -0
- package/build/upload-translation-ru-json.da2529f3.chunk.js +1 -0
- package/build/upload-translation-sk-json.bfdf4f09.chunk.js +1 -0
- package/build/upload-translation-th-json.6a48b826.chunk.js +1 -0
- package/build/upload-translation-uk-json.6fb09148.chunk.js +1 -0
- package/build/upload-translation-zh-Hans-json.c9622577.chunk.js +1 -0
- package/build/upload-translation-zh-json.711f804b.chunk.js +1 -0
- package/build/upload.070c189b.chunk.js +105 -0
- package/build/users-advanced-settings-page.a23cda17.chunk.js +101 -0
- package/build/users-email-settings-page.0a096388.chunk.js +1 -0
- package/build/users-permissions-translation-ar-json.e8123ed2.chunk.js +1 -0
- package/build/users-permissions-translation-cs-json.e6649c5f.chunk.js +1 -0
- package/build/users-permissions-translation-de-json.c3628843.chunk.js +1 -0
- package/build/users-permissions-translation-dk-json.fe39c74b.chunk.js +1 -0
- package/build/users-permissions-translation-en-json.3fe86528.chunk.js +1 -0
- package/build/users-permissions-translation-es-json.1bb9cde2.chunk.js +1 -0
- package/build/users-permissions-translation-fr-json.172aa69f.chunk.js +1 -0
- package/build/users-permissions-translation-id-json.5aadd143.chunk.js +1 -0
- package/build/users-permissions-translation-it-json.7d377480.chunk.js +1 -0
- package/build/users-permissions-translation-ja-json.4967badf.chunk.js +1 -0
- package/build/users-permissions-translation-ko-json.3be77775.chunk.js +1 -0
- package/build/users-permissions-translation-ms-json.ea8a2baf.chunk.js +1 -0
- package/build/users-permissions-translation-nl-json.d638c4ce.chunk.js +1 -0
- package/build/users-permissions-translation-pl-json.3c4fe81c.chunk.js +1 -0
- package/build/users-permissions-translation-pt-BR-json.f6791a86.chunk.js +1 -0
- package/build/users-permissions-translation-pt-json.38afed04.chunk.js +1 -0
- package/build/users-permissions-translation-ru-json.319d51ef.chunk.js +1 -0
- package/build/users-permissions-translation-sk-json.ba1cd385.chunk.js +1 -0
- package/build/users-permissions-translation-sv-json.83c60841.chunk.js +1 -0
- package/build/users-permissions-translation-th-json.68873214.chunk.js +1 -0
- package/build/users-permissions-translation-tr-json.cdc49a3c.chunk.js +1 -0
- package/build/users-permissions-translation-uk-json.63eaa01c.chunk.js +1 -0
- package/build/users-permissions-translation-vi-json.dccc02fc.chunk.js +1 -0
- package/build/users-permissions-translation-zh-Hans-json.c3fd301b.chunk.js +1 -0
- package/build/users-permissions-translation-zh-json.e03ae2a4.chunk.js +1 -0
- package/build/users-providers-settings-page.bfe7755a.chunk.js +1 -0
- package/build/users-roles-settings-page.988ebc3b.chunk.js +30 -0
- package/build/vi-json.3d14e91e.chunk.js +1 -0
- package/build/webhook-edit-page.2fa94db3.chunk.js +23 -0
- package/build/webhook-list-page.b594db49.chunk.js +133 -0
- package/build/zh-Hans-json.c84ce330.chunk.js +1 -0
- package/build/zh-json.96bf6019.chunk.js +1 -0
- package/ee/admin/pages/AuthPage/components/Providers/SSOProviders.js +1 -1
- package/ee/admin/pages/AuthPage/components/Providers/index.js +1 -1
- package/ee/admin/pages/SettingsPage/SingleSignOn/index.js +2 -2
- package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +6 -6
- package/ee/admin/pages/SettingsPage/pages/Roles/ListPage/index.js +6 -6
- package/ee/server/controllers/user.js +4 -0
- package/index.js +32 -27
- package/package.json +12 -14
- package/scripts/build.js +32 -4
- package/server/bootstrap.js +9 -7
- package/server/config/index.js +0 -1
- package/server/controllers/admin.js +22 -1
- package/server/controllers/user.js +4 -0
- package/server/policies/index.js +1 -0
- package/server/policies/isTelemetryEnabled.js +16 -0
- package/server/routes/admin.js +9 -0
- package/server/services/api-token.js +15 -14
- package/server/services/permission/permissions-manager/sanitize.js +22 -0
- package/server/services/token.js +13 -0
- package/server/services/user.js +1 -1
- package/server/validation/permission.js +5 -1
- package/utils/create-cache-dir.js +57 -15
- package/utils/get-custom-app-config-file.js +23 -0
- package/utils/get-plugins-path.js +26 -0
- package/utils/should-build-admin.js +7 -6
- package/utils/watch-admin-files.js +4 -1
- package/webpack.config.js +100 -91
- package/admin/src/content-manager/components/DynamicComponentCard/index.js +0 -43
- package/admin/src/content-manager/components/DynamicTable/CellContent/Relation/PopoverContent.js +0 -87
- package/admin/src/content-manager/components/DynamicTable/CellContent/Relation/index.js +0 -107
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/getYupInnerErrors.js +0 -17
- package/build/1094.e1db3a1a.chunk.js +0 -1
- package/build/1454.f065d92a.chunk.js +0 -2
- package/build/1454.f065d92a.chunk.js.LICENSE.txt +0 -7
- package/build/1856.a30bd09b.chunk.js +0 -1
- package/build/2481.4eae9408.chunk.js +0 -1
- package/build/2912.c5f76e65.chunk.js +0 -1
- package/build/2a9e9ef5c4c775bb7c7b.png +0 -0
- package/build/4362.b3d67035.chunk.js +0 -1
- package/build/4715.8a2db02a.chunk.js +0 -1
- package/build/4800.f4a1384a.chunk.js +0 -1
- package/build/497.3fcf6196.chunk.js +0 -1
- package/build/4982.601f6196.chunk.js +0 -1
- package/build/6404.3c2d0a81.chunk.js +0 -1
- package/build/6925.bd694b04.chunk.js +0 -2
- package/build/6925.bd694b04.chunk.js.LICENSE.txt +0 -5
- package/build/7841.490dbbf1.chunk.js +0 -1
- package/build/8042.1d66811a.chunk.js +0 -2
- package/build/8042.1d66811a.chunk.js.LICENSE.txt +0 -4
- package/build/8469.8d819a3c.chunk.js +0 -1
- package/build/849.17f011e8.chunk.js +0 -1
- package/build/9235.ced8aebf.chunk.js +0 -1
- package/build/9260.4233fae2.chunk.js +0 -2
- package/build/9260.4233fae2.chunk.js.LICENSE.txt +0 -15
- package/build/9853.6ff595fa.chunk.js +0 -1
- package/build/9988.fe838ba6.chunk.js +0 -2
- package/build/9988.fe838ba6.chunk.js.LICENSE.txt +0 -9
- package/build/Admin-authenticatedApp.16bed71f.chunk.js +0 -1
- package/build/Admin_homePage.fd1fc572.chunk.js +0 -1
- package/build/Admin_marketplace.89a0a014.chunk.js +0 -1
- package/build/Admin_pluginsPage.97a514db.chunk.js +0 -1
- package/build/Admin_profilePage.d7192d06.chunk.js +0 -1
- package/build/Admin_settingsPage.a8c7ded5.chunk.js +0 -1
- package/build/admin-edit-roles-page.49b6f01d.chunk.js +0 -1
- package/build/admin-edit-users.381e4a0d.chunk.js +0 -1
- package/build/admin-users.2740c223.chunk.js +0 -1
- package/build/api-tokens-create-page.db17bb39.chunk.js +0 -1
- package/build/api-tokens-edit-page.c7299a77.chunk.js +0 -1
- package/build/api-tokens-list-page.26a05a21.chunk.js +0 -1
- package/build/ar-json.6a2565af.chunk.js +0 -1
- package/build/codemirror-addon-closebrackets.0cfe64d0.chunk.js +0 -1
- package/build/codemirror-addon-lint-js.a6eeef9c.chunk.js +0 -1
- package/build/codemirror-addon-lint.91580cda.chunk.js +0 -1
- package/build/codemirror-addon-mark-selection.4dca121f.chunk.js +0 -1
- package/build/codemirror-css.48b438c9.chunk.js +0 -1
- package/build/codemirror-javacript.8c7c015d.chunk.js +0 -1
- package/build/codemirror-theme.b5559efc.chunk.js +0 -1
- package/build/content-manager.f1c46a88.chunk.js +0 -1
- package/build/content-type-builder-translation-ar-json.f1fedc12.chunk.js +0 -1
- package/build/content-type-builder-translation-cs-json.89f7272e.chunk.js +0 -1
- package/build/content-type-builder-translation-de-json.0205697c.chunk.js +0 -1
- package/build/content-type-builder-translation-dk-json.235ff56e.chunk.js +0 -1
- package/build/content-type-builder-translation-en-json.8034dab6.chunk.js +0 -1
- package/build/content-type-builder-translation-es-json.13b2e2aa.chunk.js +0 -1
- package/build/content-type-builder-translation-fr-json.bee621f7.chunk.js +0 -1
- package/build/content-type-builder-translation-id-json.2fbf4f8c.chunk.js +0 -1
- package/build/content-type-builder-translation-it-json.a1afd7a9.chunk.js +0 -1
- package/build/content-type-builder-translation-ja-json.1459fb88.chunk.js +0 -1
- package/build/content-type-builder-translation-ko-json.d2080111.chunk.js +0 -1
- package/build/content-type-builder-translation-ms-json.048122eb.chunk.js +0 -1
- package/build/content-type-builder-translation-nl-json.8d59e86b.chunk.js +0 -1
- package/build/content-type-builder-translation-pl-json.01dc068c.chunk.js +0 -1
- package/build/content-type-builder-translation-pt-BR-json.d311d056.chunk.js +0 -1
- package/build/content-type-builder-translation-pt-json.4893266f.chunk.js +0 -1
- package/build/content-type-builder-translation-ru-json.1285874d.chunk.js +0 -1
- package/build/content-type-builder-translation-sk-json.0064156b.chunk.js +0 -1
- package/build/content-type-builder-translation-th-json.5f690524.chunk.js +0 -1
- package/build/content-type-builder-translation-tr-json.696283a5.chunk.js +0 -1
- package/build/content-type-builder-translation-uk-json.87496bf9.chunk.js +0 -1
- package/build/content-type-builder-translation-zh-Hans-json.283c640e.chunk.js +0 -1
- package/build/content-type-builder-translation-zh-json.77aa2275.chunk.js +0 -1
- package/build/content-type-builder.cda4ba3c.chunk.js +0 -1
- package/build/cropper-css.ace19575.chunk.js +0 -1
- package/build/cs-json.8df09876.chunk.js +0 -1
- package/build/de-json.6e14f607.chunk.js +0 -1
- package/build/dk-json.be388470.chunk.js +0 -1
- package/build/email-settings-page.40ee2bda.chunk.js +0 -1
- package/build/email-translation-id-json.e3c2101d.chunk.js +0 -1
- package/build/email-translation-ja-json.66337e44.chunk.js +0 -1
- package/build/email-translation-ko-json.52bbd7b4.chunk.js +0 -1
- package/build/email-translation-ms-json.e39256df.chunk.js +0 -1
- package/build/email-translation-nl-json.12d28adb.chunk.js +0 -1
- package/build/email-translation-pl-json.9585a84e.chunk.js +0 -1
- package/build/email-translation-pt-BR-json.6c04b3ef.chunk.js +0 -1
- package/build/email-translation-pt-json.0239be04.chunk.js +0 -1
- package/build/email-translation-ru-json.f3b4fecc.chunk.js +0 -1
- package/build/email-translation-sk-json.76dbaaa6.chunk.js +0 -1
- package/build/email-translation-th-json.25ad73e7.chunk.js +0 -1
- package/build/email-translation-tr-json.ae04a9f2.chunk.js +0 -1
- package/build/email-translation-uk-json.03b27b08.chunk.js +0 -1
- package/build/email-translation-vi-json.3e1dd5b3.chunk.js +0 -1
- package/build/email-translation-zh-Hans-json.0df4ca59.chunk.js +0 -1
- package/build/email-translation-zh-json.82978eb0.chunk.js +0 -1
- package/build/en-json.73a610d6.chunk.js +0 -1
- package/build/es-json.61553168.chunk.js +0 -1
- package/build/fontawesome-css-all.3b89f909.chunk.js +0 -1
- package/build/fontawesome-css.36cff9ae.chunk.js +0 -1
- package/build/fontawesome-js.2639263c.chunk.js +0 -2
- package/build/fontawesome-js.2639263c.chunk.js.LICENSE.txt +0 -4
- package/build/fr-json.a9ce0700.chunk.js +0 -1
- package/build/he-json.1742494e.chunk.js +0 -1
- package/build/highlight.js.6321cb45.chunk.js +0 -1
- package/build/hu-json.e667d285.chunk.js +0 -1
- package/build/i18n-settings-page.c4018651.chunk.js +0 -1
- package/build/i18n-translation-de-json.c5c9054f.chunk.js +0 -1
- package/build/i18n-translation-es-json.7049afa2.chunk.js +0 -1
- package/build/i18n-translation-fr-json.c6367bc9.chunk.js +0 -1
- package/build/i18n-translation-ko-json.aecb7e01.chunk.js +0 -1
- package/build/i18n-translation-zh-Hans-json.258b2e1a.chunk.js +0 -1
- package/build/id-json.d87ebb20.chunk.js +0 -1
- package/build/it-json.a2880b81.chunk.js +0 -1
- package/build/ja-json.e13f04e8.chunk.js +0 -1
- package/build/ko-json.2200c9c9.chunk.js +0 -1
- package/build/main.12d62562.js +0 -2
- package/build/main.12d62562.js.LICENSE.txt +0 -91
- package/build/ms-json.3a062984.chunk.js +0 -1
- package/build/nl-json.30ce02cb.chunk.js +0 -1
- package/build/no-json.9af40e9d.chunk.js +0 -1
- package/build/pl-json.fd373053.chunk.js +0 -1
- package/build/pt-BR-json.30e2d716.chunk.js +0 -1
- package/build/pt-json.3aaf9e05.chunk.js +0 -1
- package/build/ru-json.78c56e1c.chunk.js +0 -1
- package/build/runtime~main.21bf3a67.js +0 -1
- package/build/sk-json.c0bf144c.chunk.js +0 -1
- package/build/sso-settings-page.121dd0a6.chunk.js +0 -1
- package/build/sv-json.aad187b9.chunk.js +0 -1
- package/build/th-json.e2b4a0fb.chunk.js +0 -1
- package/build/tr-json.0add11cd.chunk.js +0 -1
- package/build/uk-json.eb78e77e.chunk.js +0 -1
- package/build/upload-settings.4401f36d.chunk.js +0 -1
- package/build/upload-translation-de-json.1308dce5.chunk.js +0 -1
- package/build/upload-translation-dk-json.0d4e855f.chunk.js +0 -1
- package/build/upload-translation-en-json.c334dd82.chunk.js +0 -1
- package/build/upload-translation-es-json.81b13eac.chunk.js +0 -1
- package/build/upload-translation-fr-json.1bec79ec.chunk.js +0 -1
- package/build/upload-translation-he-json.1d28982f.chunk.js +0 -1
- package/build/upload-translation-it-json.7d4bdc5a.chunk.js +0 -1
- package/build/upload-translation-ja-json.97fcacd8.chunk.js +0 -1
- package/build/upload-translation-ko-json.d7345fe1.chunk.js +0 -1
- package/build/upload-translation-ms-json.081effd5.chunk.js +0 -1
- package/build/upload-translation-pl-json.2dfe78bb.chunk.js +0 -1
- package/build/upload-translation-pt-BR-json.65936d7b.chunk.js +0 -1
- package/build/upload-translation-ru-json.2d3b6f69.chunk.js +0 -1
- package/build/upload-translation-sk-json.f15c7fd6.chunk.js +0 -1
- package/build/upload-translation-th-json.6d3c2370.chunk.js +0 -1
- package/build/upload-translation-uk-json.a6c38449.chunk.js +0 -1
- package/build/upload-translation-zh-Hans-json.f6b26c45.chunk.js +0 -1
- package/build/upload-translation-zh-json.06052336.chunk.js +0 -1
- package/build/upload.5a2dded7.chunk.js +0 -1
- package/build/users-advanced-settings-page.8905d8d8.chunk.js +0 -1
- package/build/users-email-settings-page.5abb9575.chunk.js +0 -1
- package/build/users-permissions-translation-ar-json.bdddd0d7.chunk.js +0 -1
- package/build/users-permissions-translation-cs-json.7881d3ff.chunk.js +0 -1
- package/build/users-permissions-translation-de-json.8d53c619.chunk.js +0 -1
- package/build/users-permissions-translation-dk-json.89d41c4b.chunk.js +0 -1
- package/build/users-permissions-translation-en-json.21b0fd2f.chunk.js +0 -1
- package/build/users-permissions-translation-es-json.a4f81eaa.chunk.js +0 -1
- package/build/users-permissions-translation-fr-json.a2172545.chunk.js +0 -1
- package/build/users-permissions-translation-id-json.8f17982a.chunk.js +0 -1
- package/build/users-permissions-translation-it-json.87952a24.chunk.js +0 -1
- package/build/users-permissions-translation-ja-json.5915d9ef.chunk.js +0 -1
- package/build/users-permissions-translation-ko-json.f1ca6cc4.chunk.js +0 -1
- package/build/users-permissions-translation-ms-json.2268324c.chunk.js +0 -1
- package/build/users-permissions-translation-nl-json.4e1231dd.chunk.js +0 -1
- package/build/users-permissions-translation-pl-json.107638b5.chunk.js +0 -1
- package/build/users-permissions-translation-pt-BR-json.8dafc053.chunk.js +0 -1
- package/build/users-permissions-translation-pt-json.3322464f.chunk.js +0 -1
- package/build/users-permissions-translation-ru-json.5709c5a0.chunk.js +0 -1
- package/build/users-permissions-translation-sk-json.fe7cc044.chunk.js +0 -1
- package/build/users-permissions-translation-sv-json.e7e1684b.chunk.js +0 -1
- package/build/users-permissions-translation-th-json.bb544ee3.chunk.js +0 -1
- package/build/users-permissions-translation-tr-json.30f3ca90.chunk.js +0 -1
- package/build/users-permissions-translation-uk-json.634f2569.chunk.js +0 -1
- package/build/users-permissions-translation-vi-json.605d88bc.chunk.js +0 -1
- package/build/users-permissions-translation-zh-Hans-json.85480dab.chunk.js +0 -1
- package/build/users-permissions-translation-zh-json.99932731.chunk.js +0 -1
- package/build/users-providers-settings-page.368893ed.chunk.js +0 -1
- package/build/users-roles-settings-page.a2f6277a.chunk.js +0 -1
- package/build/vi-json.1e850069.chunk.js +0 -1
- package/build/webhook-edit-page.d170eda1.chunk.js +0 -1
- package/build/webhook-list-page.c21b5a9a.chunk.js +0 -1
- package/build/zh-Hans-json.55f6475b.chunk.js +0 -1
- package/build/zh-json.c3c2b225.chunk.js +0 -1
- 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.
|
|
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.
|
|
56
|
-
"@strapi/design-system": "
|
|
57
|
-
"@strapi/helper-plugin": "4.2.0-beta.
|
|
58
|
-
"@strapi/icons": "
|
|
59
|
-
"@strapi/utils": "4.2.0-beta.
|
|
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": "
|
|
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": "
|
|
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
|
|
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
|
|
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
|
-
|
|
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({
|
package/server/bootstrap.js
CHANGED
|
@@ -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.
|
|
77
|
+
apiTokenService.checkSaltIsDefined();
|
|
78
|
+
tokenService.checkSecretIsDefined();
|
|
77
79
|
};
|
package/server/config/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
},
|
package/server/policies/index.js
CHANGED
|
@@ -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
|
+
});
|
package/server/routes/admin.js
CHANGED
|
@@ -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
|
|
78
|
-
if (strapi.config.get('admin.apiToken.salt')) {
|
|
79
|
-
|
|
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
|
-
|
|
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
|
|
package/server/services/token.js
CHANGED
|
@@ -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
|
};
|
package/server/services/user.js
CHANGED
|
@@ -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 =
|
|
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(({
|
|
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'),
|
|
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
|
|
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
|
-
//
|
|
86
|
-
const
|
|
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 (
|
|
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(
|
|
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
|
|
33
|
+
const hasCustomAdminCode = async dir => {
|
|
33
34
|
const customAdminPath = path.join(dir, 'src', 'admin');
|
|
34
|
-
|
|
35
|
-
const
|
|
35
|
+
|
|
36
|
+
const customAdminAppConfigFile = await getCustomAppConfigFile(dir);
|
|
36
37
|
const customAdminWebpackFile = path.join(customAdminPath, 'webpack.config.js');
|
|
37
38
|
|
|
38
|
-
const hasCustomConfigFile =
|
|
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
|
|
45
|
-
const appHasCustomAdminCode = await hasCustomAdminCode(appDir
|
|
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
|
|
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);
|