@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.
- 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 +1 -1
- package/admin/src/components/LeftMenu/index.js +2 -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/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/index.js +1 -1
- package/admin/src/content-manager/components/SelectOne/index.js +1 -1
- package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +15 -3
- 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/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/ModalForm.js +6 -1
- package/admin/src/content-manager/pages/EditSettingsView/index.js +3 -3
- 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 +1 -1
- package/admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js +1 -1
- package/admin/src/content-manager/pages/ListSettingsView/index.js +2 -2
- package/admin/src/content-manager/pages/ListView/actions.js +2 -1
- package/admin/src/content-manager/pages/ListView/index.js +2 -5
- 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/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/Login/BaseLogin.js +1 -1
- package/admin/src/pages/AuthPage/components/Register/index.js +6 -6
- package/admin/src/pages/AuthPage/components/ResetPassword/index.js +3 -3
- package/admin/src/pages/HomePage/ContentBlocks.js +1 -1
- package/admin/src/pages/HomePage/SocialLinks.js +1 -4
- package/admin/src/pages/InstalledPluginsPage/Plugins.js +3 -3
- package/admin/src/pages/InstalledPluginsPage/index.js +1 -1
- package/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js +40 -0
- package/admin/src/pages/MarketplacePage/components/PageHeader/index.js +46 -0
- package/admin/src/pages/MarketplacePage/components/PluginCard/InstallPluginButton.js +66 -0
- package/admin/src/pages/MarketplacePage/components/PluginCard/index.js +13 -36
- package/admin/src/pages/MarketplacePage/index.js +65 -27
- package/admin/src/pages/ProfilePage/index.js +5 -5
- package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +1 -1
- 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 +3 -3
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DeleteButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +1 -1
- 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 +2 -2
- package/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +6 -6
- package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +5 -5
- 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 +3 -3
- package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +7 -7
- 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/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/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 +0 -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/1856.e2bce2e8.chunk.js +171 -0
- package/build/2481.5fe150c7.chunk.js +184 -0
- package/build/272.d442e5ca.chunk.js +349 -0
- package/build/2912.5a7b0406.chunk.js +252 -0
- package/build/306.28d21ab8.chunk.js +896 -0
- package/build/4073.4765687b.chunk.js +1 -0
- package/build/4715.7f616cf6.chunk.js +387 -0
- package/build/4800.d3ebc81d.chunk.js +1 -0
- package/build/497.2ba35e90.chunk.js +284 -0
- package/build/4982.91235074.chunk.js +310 -0
- package/build/6229.f558fd19.chunk.js +194 -0
- package/build/6404.25d0f0d8.chunk.js +508 -0
- package/build/6925.fafef528.chunk.js +761 -0
- package/build/7841.0d73dde1.chunk.js +252 -0
- package/build/7863.996e70df.chunk.js +112 -0
- package/build/8469.3af1823d.chunk.js +1 -0
- package/build/9298.dab64a1b.chunk.js +345 -0
- package/build/948.d64fb515.chunk.js +2 -0
- package/build/9853.6cc1043a.chunk.js +354 -0
- package/build/9988.9b6e1d79.chunk.js +161 -0
- package/build/Admin-authenticatedApp.d26b3032.chunk.js +80 -0
- package/build/Admin_homePage.fc4a8408.chunk.js +71 -0
- package/build/Admin_marketplace.c406a140.chunk.js +11 -0
- package/build/Admin_pluginsPage.788fb2f6.chunk.js +1 -0
- package/build/Admin_profilePage.27191ed2.chunk.js +15 -0
- package/build/Admin_settingsPage.c40fdef1.chunk.js +170 -0
- package/build/a6b842e0b6d2b61135d1.svg +5 -0
- package/build/admin-edit-roles-page.c69fe8ab.chunk.js +1 -0
- package/build/admin-edit-users.be232f6b.chunk.js +10 -0
- package/build/admin-users.47d06d24.chunk.js +11 -0
- package/build/api-tokens-create-page.9774f0fe.chunk.js +1 -0
- package/build/api-tokens-edit-page.8f03c9a1.chunk.js +1 -0
- package/build/api-tokens-list-page.126fbca6.chunk.js +15 -0
- package/build/ar-json.d4cb26d9.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.ca66b566.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.d12fd5cd.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.d807edfd.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/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.c8f3b78b.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.36da7eeb.js +7918 -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.4560906c.chunk.js +1 -0
- package/build/runtime~main.251e9cca.js +2 -0
- package/build/sk-json.5b33afc2.chunk.js +1 -0
- package/build/sso-settings-page.dfb0b917.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.17202e3b.chunk.js +101 -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.d647d59d.chunk.js +105 -0
- package/build/users-advanced-settings-page.22690469.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.487f3346.chunk.js +30 -0
- package/build/vi-json.3d14e91e.chunk.js +1 -0
- package/build/webhook-edit-page.043fe03f.chunk.js +23 -0
- package/build/webhook-list-page.2d2d71a1.chunk.js +132 -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/SettingsPage/SingleSignOn/index.js +2 -2
- package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +5 -5
- package/ee/admin/pages/SettingsPage/pages/Roles/ListPage/index.js +6 -6
- package/index.js +32 -27
- package/package.json +10 -12
- 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/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/token.js +13 -0
- package/server/validation/permission.js +5 -1
- package/utils/create-cache-dir.js +60 -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/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/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/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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
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].
|
|
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
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
|
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].
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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": "
|
|
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": "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
|
|
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);
|
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,
|
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
|
};
|
|
@@ -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,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
|
|
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
|
-
//
|
|
86
|
-
const
|
|
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 (
|
|
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(
|
|
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;
|