@strapi/plugin-documentation 5.12.1 → 5.12.2
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/dist/admin/{chunks/Settings-Cpj-uI9B.js → components/SettingsForm.js} +7 -52
- package/dist/admin/components/SettingsForm.js.map +1 -0
- package/dist/admin/{chunks/Settings-DyLMOJEx.mjs → components/SettingsForm.mjs} +7 -52
- package/dist/admin/components/SettingsForm.mjs.map +1 -0
- package/dist/admin/constants.js +47 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +45 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/index.js +93 -3
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +94 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/{chunks/App-DC2H8bJ5.js → pages/App.js} +8 -8
- package/dist/admin/pages/App.js.map +1 -0
- package/dist/admin/{chunks/App-D6yQIQar.mjs → pages/App.mjs} +4 -4
- package/dist/admin/pages/App.mjs.map +1 -0
- package/dist/admin/pages/Settings.js +54 -0
- package/dist/admin/pages/Settings.js.map +1 -0
- package/dist/admin/pages/Settings.mjs +52 -0
- package/dist/admin/pages/Settings.mjs.map +1 -0
- package/dist/admin/pluginId.js +6 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +4 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/{chunks/getTrad-AvLNMP3V.js → services/api.js} +1 -5
- package/dist/admin/services/api.js.map +1 -0
- package/dist/admin/{chunks/getTrad-D9juLfq6.mjs → services/api.mjs} +2 -5
- package/dist/admin/services/api.mjs.map +1 -0
- package/dist/admin/{chunks/ar-Dix6VU4a.js → translations/ar.json.js} +2 -2
- package/dist/admin/translations/ar.json.js.map +1 -0
- package/dist/admin/{chunks/ar-Bu09tPI1.mjs → translations/ar.json.mjs} +1 -1
- package/dist/admin/translations/ar.json.mjs.map +1 -0
- package/dist/admin/{chunks/cs-C6k-mH5i.js → translations/cs.json.js} +2 -2
- package/dist/admin/translations/cs.json.js.map +1 -0
- package/dist/admin/{chunks/cs-tf-UeGst.mjs → translations/cs.json.mjs} +1 -1
- package/dist/admin/translations/cs.json.mjs.map +1 -0
- package/dist/admin/{chunks/de-DYskRe8j.js → translations/de.json.js} +2 -2
- package/dist/admin/translations/de.json.js.map +1 -0
- package/dist/admin/{chunks/de-CMhqnPQP.mjs → translations/de.json.mjs} +1 -1
- package/dist/admin/translations/de.json.mjs.map +1 -0
- package/dist/admin/{chunks/dk-BYJqzR_M.js → translations/dk.json.js} +2 -2
- package/dist/admin/translations/dk.json.js.map +1 -0
- package/dist/admin/{chunks/dk-BmQOOeIc.mjs → translations/dk.json.mjs} +1 -1
- package/dist/admin/translations/dk.json.mjs.map +1 -0
- package/dist/admin/{chunks/en-B90IBmYB.js → translations/en.json.js} +2 -2
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/{chunks/en-Cx8yPuig.mjs → translations/en.json.mjs} +1 -1
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/{chunks/es-5WsjlhIl.js → translations/es.json.js} +2 -2
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/{chunks/es-DAdgO3Ey.mjs → translations/es.json.mjs} +1 -1
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/{chunks/fr-C-vHEudQ.js → translations/fr.json.js} +2 -2
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/{chunks/fr-B5fjFqKX.mjs → translations/fr.json.mjs} +1 -1
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/{chunks/id-BKiCYOdS.js → translations/id.json.js} +2 -2
- package/dist/admin/translations/id.json.js.map +1 -0
- package/dist/admin/{chunks/id-CLApXj97.mjs → translations/id.json.mjs} +1 -1
- package/dist/admin/translations/id.json.mjs.map +1 -0
- package/dist/admin/{chunks/it-B7SnHLP2.js → translations/it.json.js} +2 -2
- package/dist/admin/translations/it.json.js.map +1 -0
- package/dist/admin/{chunks/it-C7GcWYBa.mjs → translations/it.json.mjs} +1 -1
- package/dist/admin/translations/it.json.mjs.map +1 -0
- package/dist/admin/{chunks/ko-CjOasZmz.js → translations/ko.json.js} +2 -2
- package/dist/admin/translations/ko.json.js.map +1 -0
- package/dist/admin/{chunks/ko-DZvks90a.mjs → translations/ko.json.mjs} +1 -1
- package/dist/admin/translations/ko.json.mjs.map +1 -0
- package/dist/admin/{chunks/ms-C2TEZHkD.js → translations/ms.json.js} +2 -2
- package/dist/admin/translations/ms.json.js.map +1 -0
- package/dist/admin/{chunks/ms-Df9gDB9M.mjs → translations/ms.json.mjs} +1 -1
- package/dist/admin/translations/ms.json.mjs.map +1 -0
- package/dist/admin/{chunks/nl-CLp2dhr9.js → translations/nl.json.js} +2 -2
- package/dist/admin/translations/nl.json.js.map +1 -0
- package/dist/admin/{chunks/nl-BlmTMaTL.mjs → translations/nl.json.mjs} +1 -1
- package/dist/admin/translations/nl.json.mjs.map +1 -0
- package/dist/admin/{chunks/pl-C8WRO2pt.js → translations/pl.json.js} +2 -2
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/{chunks/pl-5iT3b9r4.mjs → translations/pl.json.mjs} +1 -1
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/{chunks/pt-BR-Ds-dLXzD.js → translations/pt-BR.json.js} +2 -2
- package/dist/admin/translations/pt-BR.json.js.map +1 -0
- package/dist/admin/{chunks/pt-BR-De5jokla.mjs → translations/pt-BR.json.mjs} +1 -1
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
- package/dist/admin/{chunks/pt-DL-rrjA1.js → translations/pt.json.js} +2 -2
- package/dist/admin/translations/pt.json.js.map +1 -0
- package/dist/admin/{chunks/pt-BK5YbXpM.mjs → translations/pt.json.mjs} +1 -1
- package/dist/admin/translations/pt.json.mjs.map +1 -0
- package/dist/admin/{chunks/ru-Cqv4k9my.js → translations/ru.json.js} +2 -2
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/{chunks/ru-C_16WuLP.mjs → translations/ru.json.mjs} +1 -1
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/{chunks/sk-D6l_EMOT.js → translations/sk.json.js} +2 -2
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/{chunks/sk-B7RadPe4.mjs → translations/sk.json.mjs} +1 -1
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/{chunks/sv-Xg5gbVO9.js → translations/sv.json.js} +2 -2
- package/dist/admin/translations/sv.json.js.map +1 -0
- package/dist/admin/{chunks/sv-DK5DOsrV.mjs → translations/sv.json.mjs} +1 -1
- package/dist/admin/translations/sv.json.mjs.map +1 -0
- package/dist/admin/{chunks/th-Pci1U3n6.js → translations/th.json.js} +2 -2
- package/dist/admin/translations/th.json.js.map +1 -0
- package/dist/admin/{chunks/th-DNiRgKQH.mjs → translations/th.json.mjs} +1 -1
- package/dist/admin/translations/th.json.mjs.map +1 -0
- package/dist/admin/{chunks/tr-CBlxk5Of.js → translations/tr.json.js} +2 -2
- package/dist/admin/translations/tr.json.js.map +1 -0
- package/dist/admin/{chunks/tr-CWX4cUiB.mjs → translations/tr.json.mjs} +1 -1
- package/dist/admin/translations/tr.json.mjs.map +1 -0
- package/dist/admin/{chunks/uk-BkF_x68T.js → translations/uk.json.js} +2 -2
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/{chunks/uk-CWOtQQic.mjs → translations/uk.json.mjs} +1 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/{chunks/vi-CAG7iDHR.js → translations/vi.json.js} +2 -2
- package/dist/admin/translations/vi.json.js.map +1 -0
- package/dist/admin/{chunks/vi-geadDLtq.mjs → translations/vi.json.mjs} +1 -1
- package/dist/admin/translations/vi.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-Hans-CtXQdJhw.js → translations/zh-Hans.json.js} +2 -2
- package/dist/admin/translations/zh-Hans.json.js.map +1 -0
- package/dist/admin/{chunks/zh-Hans-fcRf-TLx.mjs → translations/zh-Hans.json.mjs} +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-rKHsKNA3.js → translations/zh.json.js} +2 -2
- package/dist/admin/translations/zh.json.js.map +1 -0
- package/dist/admin/{chunks/zh-E4LX--2j.mjs → translations/zh.json.mjs} +1 -1
- package/dist/admin/translations/zh.json.mjs.map +1 -0
- package/dist/admin/utils/baseQuery.js +8 -0
- package/dist/admin/utils/baseQuery.js.map +1 -0
- package/dist/admin/utils/baseQuery.mjs +6 -0
- package/dist/admin/utils/baseQuery.mjs.map +1 -0
- package/dist/admin/utils/getTrad.js +8 -0
- package/dist/admin/utils/getTrad.js.map +1 -0
- package/dist/admin/utils/getTrad.mjs +6 -0
- package/dist/admin/utils/getTrad.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/server/bootstrap.js +57 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +55 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/config/default-plugin-config.js +88 -0
- package/dist/server/config/default-plugin-config.js.map +1 -0
- package/dist/server/config/default-plugin-config.mjs +86 -0
- package/dist/server/config/default-plugin-config.mjs.map +1 -0
- package/dist/server/config/index.js +10 -0
- package/dist/server/config/index.js.map +1 -0
- package/dist/server/config/index.mjs +8 -0
- package/dist/server/config/index.mjs.map +1 -0
- package/dist/server/controllers/documentation.js +185 -0
- package/dist/server/controllers/documentation.js.map +1 -0
- package/dist/server/controllers/documentation.mjs +181 -0
- package/dist/server/controllers/documentation.mjs.map +1 -0
- package/dist/server/controllers/index.js +10 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +8 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/index.js +12 -1586
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +6 -1561
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/documentation.js +27 -0
- package/dist/server/middlewares/documentation.js.map +1 -0
- package/dist/server/middlewares/documentation.mjs +25 -0
- package/dist/server/middlewares/documentation.mjs.map +1 -0
- package/dist/server/middlewares/restrict-access.js +23 -0
- package/dist/server/middlewares/restrict-access.js.map +1 -0
- package/dist/server/middlewares/restrict-access.mjs +21 -0
- package/dist/server/middlewares/restrict-access.mjs.map +1 -0
- package/dist/server/{chunks/index--0fU1WeK.js → public/index.html.js} +2 -2
- package/dist/server/public/index.html.js.map +1 -0
- package/dist/server/{chunks/index-Dz3orHaf.mjs → public/index.html.mjs} +1 -1
- package/dist/server/public/index.html.mjs.map +1 -0
- package/dist/server/{chunks/login-CMPqkCFT.js → public/login.html.js} +2 -2
- package/dist/server/public/login.html.js.map +1 -0
- package/dist/server/{chunks/login-CYdORE5u.mjs → public/login.html.mjs} +1 -1
- package/dist/server/public/login.html.mjs.map +1 -0
- package/dist/server/register.js +12 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +10 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/index.js +106 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +104 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/services/documentation.js +182 -0
- package/dist/server/services/documentation.js.map +1 -0
- package/dist/server/services/documentation.mjs +180 -0
- package/dist/server/services/documentation.mjs.map +1 -0
- package/dist/server/services/helpers/build-api-endpoint-path.js +162 -0
- package/dist/server/services/helpers/build-api-endpoint-path.js.map +1 -0
- package/dist/server/services/helpers/build-api-endpoint-path.mjs +141 -0
- package/dist/server/services/helpers/build-api-endpoint-path.mjs.map +1 -0
- package/dist/server/services/helpers/build-component-schema.js +167 -0
- package/dist/server/services/helpers/build-component-schema.js.map +1 -0
- package/dist/server/services/helpers/build-component-schema.mjs +165 -0
- package/dist/server/services/helpers/build-component-schema.mjs.map +1 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.js +301 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.js.map +1 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.mjs +299 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.mjs.map +1 -0
- package/dist/server/services/helpers/utils/get-api-responses.js +88 -0
- package/dist/server/services/helpers/utils/get-api-responses.js.map +1 -0
- package/dist/server/services/helpers/utils/get-api-responses.mjs +86 -0
- package/dist/server/services/helpers/utils/get-api-responses.mjs.map +1 -0
- package/dist/server/services/helpers/utils/get-schema-data.js +43 -0
- package/dist/server/services/helpers/utils/get-schema-data.js.map +1 -0
- package/dist/server/services/helpers/utils/get-schema-data.mjs +41 -0
- package/dist/server/services/helpers/utils/get-schema-data.mjs.map +1 -0
- package/dist/server/services/helpers/utils/loop-content-type-names.js +40 -0
- package/dist/server/services/helpers/utils/loop-content-type-names.js.map +1 -0
- package/dist/server/services/helpers/utils/loop-content-type-names.mjs +38 -0
- package/dist/server/services/helpers/utils/loop-content-type-names.mjs.map +1 -0
- package/dist/server/services/helpers/utils/pascal-case.js +10 -0
- package/dist/server/services/helpers/utils/pascal-case.js.map +1 -0
- package/dist/server/services/helpers/utils/pascal-case.mjs +8 -0
- package/dist/server/services/helpers/utils/pascal-case.mjs.map +1 -0
- package/dist/server/services/helpers/utils/query-params.js +109 -0
- package/dist/server/services/helpers/utils/query-params.js.map +1 -0
- package/dist/server/services/helpers/utils/query-params.mjs +107 -0
- package/dist/server/services/helpers/utils/query-params.mjs.map +1 -0
- package/dist/server/services/helpers/utils/routes.js +11 -0
- package/dist/server/services/helpers/utils/routes.js.map +1 -0
- package/dist/server/services/helpers/utils/routes.mjs +9 -0
- package/dist/server/services/helpers/utils/routes.mjs.map +1 -0
- package/dist/server/services/index.js +13 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +11 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/override.js +45 -0
- package/dist/server/services/override.js.map +1 -0
- package/dist/server/services/override.mjs +43 -0
- package/dist/server/services/override.mjs.map +1 -0
- package/dist/server/services/utils/get-plugins-that-need-documentation.js +24 -0
- package/dist/server/services/utils/get-plugins-that-need-documentation.js.map +1 -0
- package/dist/server/services/utils/get-plugins-that-need-documentation.mjs +22 -0
- package/dist/server/services/utils/get-plugins-that-need-documentation.mjs.map +1 -0
- package/dist/server/utils.js +10 -0
- package/dist/server/utils.js.map +1 -0
- package/dist/server/utils.mjs +8 -0
- package/dist/server/utils.mjs.map +1 -0
- package/package.json +6 -6
- package/dist/admin/chunks/App-D6yQIQar.mjs.map +0 -1
- package/dist/admin/chunks/App-DC2H8bJ5.js.map +0 -1
- package/dist/admin/chunks/Settings-Cpj-uI9B.js.map +0 -1
- package/dist/admin/chunks/Settings-DyLMOJEx.mjs.map +0 -1
- package/dist/admin/chunks/ar-Bu09tPI1.mjs.map +0 -1
- package/dist/admin/chunks/ar-Dix6VU4a.js.map +0 -1
- package/dist/admin/chunks/cs-C6k-mH5i.js.map +0 -1
- package/dist/admin/chunks/cs-tf-UeGst.mjs.map +0 -1
- package/dist/admin/chunks/de-CMhqnPQP.mjs.map +0 -1
- package/dist/admin/chunks/de-DYskRe8j.js.map +0 -1
- package/dist/admin/chunks/dk-BYJqzR_M.js.map +0 -1
- package/dist/admin/chunks/dk-BmQOOeIc.mjs.map +0 -1
- package/dist/admin/chunks/en-B90IBmYB.js.map +0 -1
- package/dist/admin/chunks/en-Cx8yPuig.mjs.map +0 -1
- package/dist/admin/chunks/es-5WsjlhIl.js.map +0 -1
- package/dist/admin/chunks/es-DAdgO3Ey.mjs.map +0 -1
- package/dist/admin/chunks/fr-B5fjFqKX.mjs.map +0 -1
- package/dist/admin/chunks/fr-C-vHEudQ.js.map +0 -1
- package/dist/admin/chunks/getTrad-AvLNMP3V.js.map +0 -1
- package/dist/admin/chunks/getTrad-D9juLfq6.mjs.map +0 -1
- package/dist/admin/chunks/id-BKiCYOdS.js.map +0 -1
- package/dist/admin/chunks/id-CLApXj97.mjs.map +0 -1
- package/dist/admin/chunks/index-BHy3RKs2.mjs +0 -144
- package/dist/admin/chunks/index-BHy3RKs2.mjs.map +0 -1
- package/dist/admin/chunks/index-BSW-EfNW.js +0 -148
- package/dist/admin/chunks/index-BSW-EfNW.js.map +0 -1
- package/dist/admin/chunks/it-B7SnHLP2.js.map +0 -1
- package/dist/admin/chunks/it-C7GcWYBa.mjs.map +0 -1
- package/dist/admin/chunks/ko-CjOasZmz.js.map +0 -1
- package/dist/admin/chunks/ko-DZvks90a.mjs.map +0 -1
- package/dist/admin/chunks/ms-C2TEZHkD.js.map +0 -1
- package/dist/admin/chunks/ms-Df9gDB9M.mjs.map +0 -1
- package/dist/admin/chunks/nl-BlmTMaTL.mjs.map +0 -1
- package/dist/admin/chunks/nl-CLp2dhr9.js.map +0 -1
- package/dist/admin/chunks/pl-5iT3b9r4.mjs.map +0 -1
- package/dist/admin/chunks/pl-C8WRO2pt.js.map +0 -1
- package/dist/admin/chunks/pt-BK5YbXpM.mjs.map +0 -1
- package/dist/admin/chunks/pt-BR-De5jokla.mjs.map +0 -1
- package/dist/admin/chunks/pt-BR-Ds-dLXzD.js.map +0 -1
- package/dist/admin/chunks/pt-DL-rrjA1.js.map +0 -1
- package/dist/admin/chunks/ru-C_16WuLP.mjs.map +0 -1
- package/dist/admin/chunks/ru-Cqv4k9my.js.map +0 -1
- package/dist/admin/chunks/sk-B7RadPe4.mjs.map +0 -1
- package/dist/admin/chunks/sk-D6l_EMOT.js.map +0 -1
- package/dist/admin/chunks/sv-DK5DOsrV.mjs.map +0 -1
- package/dist/admin/chunks/sv-Xg5gbVO9.js.map +0 -1
- package/dist/admin/chunks/th-DNiRgKQH.mjs.map +0 -1
- package/dist/admin/chunks/th-Pci1U3n6.js.map +0 -1
- package/dist/admin/chunks/tr-CBlxk5Of.js.map +0 -1
- package/dist/admin/chunks/tr-CWX4cUiB.mjs.map +0 -1
- package/dist/admin/chunks/uk-BkF_x68T.js.map +0 -1
- package/dist/admin/chunks/uk-CWOtQQic.mjs.map +0 -1
- package/dist/admin/chunks/vi-CAG7iDHR.js.map +0 -1
- package/dist/admin/chunks/vi-geadDLtq.mjs.map +0 -1
- package/dist/admin/chunks/zh-E4LX--2j.mjs.map +0 -1
- package/dist/admin/chunks/zh-Hans-CtXQdJhw.js.map +0 -1
- package/dist/admin/chunks/zh-Hans-fcRf-TLx.mjs.map +0 -1
- package/dist/admin/chunks/zh-rKHsKNA3.js.map +0 -1
- package/dist/server/chunks/index--0fU1WeK.js.map +0 -1
- package/dist/server/chunks/index-Dz3orHaf.mjs.map +0 -1
- package/dist/server/chunks/login-CMPqkCFT.js.map +0 -1
- package/dist/server/chunks/login-CYdORE5u.mjs.map +0 -1
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import cleanSchemaAttributes from './utils/clean-schema-attributes.mjs';
|
|
3
|
+
import loopContentTypeNames from './utils/loop-content-type-names.mjs';
|
|
4
|
+
import pascalCase from './utils/pascal-case.mjs';
|
|
5
|
+
import { hasFindMethod } from './utils/routes.mjs';
|
|
6
|
+
|
|
7
|
+
const getRequiredAttributes = (allAttributes)=>{
|
|
8
|
+
const requiredAttributes = [];
|
|
9
|
+
for(const key in allAttributes){
|
|
10
|
+
if (allAttributes[key].required) {
|
|
11
|
+
requiredAttributes.push(key);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return requiredAttributes;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* @description Get all open api schema objects for a given content type
|
|
18
|
+
*
|
|
19
|
+
* @param {object} apiInfo
|
|
20
|
+
* @property {string} apiInfo.uniqueName - Api name | Api name + Content type name
|
|
21
|
+
* @property {object} apiInfo.attributes - Attributes on content type
|
|
22
|
+
* @property {object} apiInfo.routeInfo - The routes for the api
|
|
23
|
+
*
|
|
24
|
+
* @returns {object} Open API schemas
|
|
25
|
+
*/ const getAllSchemasForContentType = ({ routeInfo, attributes, uniqueName })=>{
|
|
26
|
+
// Store response and request schemas in an object
|
|
27
|
+
let strapiComponentSchemas = {};
|
|
28
|
+
const schemas = {};
|
|
29
|
+
const typeName = pascalCase(uniqueName);
|
|
30
|
+
// adds a ComponentSchema to the Schemas so it can be used as Ref
|
|
31
|
+
const didAddStrapiComponentsToSchemas = (schemaName, schema)=>{
|
|
32
|
+
if (!Object.keys(schema) || !Object.keys(schema.properties)) return false;
|
|
33
|
+
// Add the Strapi components to the schema
|
|
34
|
+
strapiComponentSchemas = {
|
|
35
|
+
...strapiComponentSchemas,
|
|
36
|
+
[schemaName]: schema
|
|
37
|
+
};
|
|
38
|
+
return true;
|
|
39
|
+
};
|
|
40
|
+
// Get all the route methods
|
|
41
|
+
const routeMethods = routeInfo.routes.map((route)=>route.method);
|
|
42
|
+
const attributesToOmit = [
|
|
43
|
+
'createdAt',
|
|
44
|
+
'updatedAt',
|
|
45
|
+
'publishedAt',
|
|
46
|
+
'publishedBy',
|
|
47
|
+
'updatedBy',
|
|
48
|
+
'createdBy'
|
|
49
|
+
];
|
|
50
|
+
const attributesForRequest = _.omit(attributes, attributesToOmit);
|
|
51
|
+
// Get a list of required attribute names
|
|
52
|
+
const requiredRequestAttributes = getRequiredAttributes(attributesForRequest);
|
|
53
|
+
// Build the request schemas when the route has POST or PUT methods
|
|
54
|
+
if (routeMethods.includes('POST') || routeMethods.includes('PUT')) {
|
|
55
|
+
// Build localization requests schemas
|
|
56
|
+
// Build the request schema
|
|
57
|
+
Object.assign(schemas, {
|
|
58
|
+
[`${typeName}Request`]: {
|
|
59
|
+
type: 'object',
|
|
60
|
+
required: [
|
|
61
|
+
'data'
|
|
62
|
+
],
|
|
63
|
+
properties: {
|
|
64
|
+
data: {
|
|
65
|
+
...requiredRequestAttributes.length && {
|
|
66
|
+
required: requiredRequestAttributes
|
|
67
|
+
},
|
|
68
|
+
type: 'object',
|
|
69
|
+
properties: cleanSchemaAttributes(attributesForRequest, {
|
|
70
|
+
isRequest: true,
|
|
71
|
+
didAddStrapiComponentsToSchemas
|
|
72
|
+
})
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// Check for routes that need to return a list
|
|
79
|
+
const hasListOfEntities = routeInfo.routes.filter((route)=>hasFindMethod(route.handler)).length;
|
|
80
|
+
if (hasListOfEntities) {
|
|
81
|
+
// Build the list response schema
|
|
82
|
+
Object.assign(schemas, {
|
|
83
|
+
[`${typeName}ListResponse`]: {
|
|
84
|
+
type: 'object',
|
|
85
|
+
properties: {
|
|
86
|
+
data: {
|
|
87
|
+
type: 'array',
|
|
88
|
+
items: {
|
|
89
|
+
$ref: `#/components/schemas/${typeName}`
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
meta: {
|
|
93
|
+
type: 'object',
|
|
94
|
+
properties: {
|
|
95
|
+
pagination: {
|
|
96
|
+
type: 'object',
|
|
97
|
+
properties: {
|
|
98
|
+
page: {
|
|
99
|
+
type: 'integer'
|
|
100
|
+
},
|
|
101
|
+
pageSize: {
|
|
102
|
+
type: 'integer',
|
|
103
|
+
minimum: 25
|
|
104
|
+
},
|
|
105
|
+
pageCount: {
|
|
106
|
+
type: 'integer',
|
|
107
|
+
maximum: 1
|
|
108
|
+
},
|
|
109
|
+
total: {
|
|
110
|
+
type: 'integer'
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
const requiredAttributes = getRequiredAttributes(attributes);
|
|
121
|
+
// Build the response schema
|
|
122
|
+
Object.assign(schemas, {
|
|
123
|
+
[`${typeName}`]: {
|
|
124
|
+
type: 'object',
|
|
125
|
+
...requiredAttributes.length && {
|
|
126
|
+
required: requiredAttributes
|
|
127
|
+
},
|
|
128
|
+
properties: {
|
|
129
|
+
id: {
|
|
130
|
+
type: 'number'
|
|
131
|
+
},
|
|
132
|
+
documentId: {
|
|
133
|
+
type: 'string'
|
|
134
|
+
},
|
|
135
|
+
...cleanSchemaAttributes(attributes, {
|
|
136
|
+
didAddStrapiComponentsToSchemas
|
|
137
|
+
})
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
[`${typeName}Response`]: {
|
|
141
|
+
type: 'object',
|
|
142
|
+
properties: {
|
|
143
|
+
data: {
|
|
144
|
+
$ref: `#/components/schemas/${typeName}`
|
|
145
|
+
},
|
|
146
|
+
meta: {
|
|
147
|
+
type: 'object'
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
return {
|
|
153
|
+
...schemas,
|
|
154
|
+
...strapiComponentSchemas
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
const buildComponentSchema = (api)=>{
|
|
158
|
+
// A reusable loop for building paths and component schemas
|
|
159
|
+
// Uses the api param to build a new set of params for each content type
|
|
160
|
+
// Passes these new params to the function provided
|
|
161
|
+
return loopContentTypeNames(api, getAllSchemasForContentType);
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
export { buildComponentSchema as default };
|
|
165
|
+
//# sourceMappingURL=build-component-schema.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-component-schema.mjs","sources":["../../../../server/src/services/helpers/build-component-schema.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { Core, Struct } from '@strapi/types';\n\nimport cleanSchemaAttributes from './utils/clean-schema-attributes';\nimport loopContentTypeNames from './utils/loop-content-type-names';\nimport pascalCase from './utils/pascal-case';\nimport { hasFindMethod } from './utils/routes';\n\nimport type { Api, ApiInfo } from '../../types';\n\nconst getRequiredAttributes = (allAttributes: Struct.SchemaAttributes) => {\n const requiredAttributes: string[] = [];\n\n for (const key in allAttributes) {\n if (allAttributes[key].required) {\n requiredAttributes.push(key);\n }\n }\n\n return requiredAttributes;\n};\n\n/**\n * @description Get all open api schema objects for a given content type\n *\n * @param {object} apiInfo\n * @property {string} apiInfo.uniqueName - Api name | Api name + Content type name\n * @property {object} apiInfo.attributes - Attributes on content type\n * @property {object} apiInfo.routeInfo - The routes for the api\n *\n * @returns {object} Open API schemas\n */\nconst getAllSchemasForContentType = ({ routeInfo, attributes, uniqueName }: ApiInfo) => {\n // Store response and request schemas in an object\n let strapiComponentSchemas = {};\n const schemas: OpenAPIV3.ComponentsObject = {};\n const typeName = pascalCase(uniqueName);\n\n // adds a ComponentSchema to the Schemas so it can be used as Ref\n const didAddStrapiComponentsToSchemas = (schemaName: string, schema: OpenAPIV3.SchemaObject) => {\n if (!Object.keys(schema) || !Object.keys(schema.properties!)) return false;\n\n // Add the Strapi components to the schema\n strapiComponentSchemas = {\n ...strapiComponentSchemas,\n [schemaName]: schema,\n };\n\n return true;\n };\n\n // Get all the route methods\n const routeMethods = routeInfo.routes.map((route: Core.Route) => route.method);\n\n const attributesToOmit = [\n 'createdAt',\n 'updatedAt',\n 'publishedAt',\n 'publishedBy',\n 'updatedBy',\n 'createdBy',\n ];\n\n const attributesForRequest = _.omit(attributes, attributesToOmit);\n // Get a list of required attribute names\n const requiredRequestAttributes = getRequiredAttributes(attributesForRequest);\n // Build the request schemas when the route has POST or PUT methods\n if (routeMethods.includes('POST') || routeMethods.includes('PUT')) {\n // Build localization requests schemas\n\n // Build the request schema\n Object.assign(schemas, {\n [`${typeName}Request`]: {\n type: 'object',\n required: ['data'],\n properties: {\n data: {\n ...(requiredRequestAttributes.length && { required: requiredRequestAttributes }),\n type: 'object',\n properties: cleanSchemaAttributes(attributesForRequest, {\n isRequest: true,\n didAddStrapiComponentsToSchemas,\n }),\n },\n },\n },\n });\n }\n\n // Check for routes that need to return a list\n const hasListOfEntities = routeInfo.routes.filter((route: Core.Route) =>\n hasFindMethod(route.handler)\n ).length;\n\n if (hasListOfEntities) {\n // Build the list response schema\n Object.assign(schemas, {\n [`${typeName}ListResponse`]: {\n type: 'object',\n properties: {\n data: {\n type: 'array',\n items: {\n $ref: `#/components/schemas/${typeName}`,\n },\n },\n meta: {\n type: 'object',\n properties: {\n pagination: {\n type: 'object',\n properties: {\n page: { type: 'integer' },\n pageSize: { type: 'integer', minimum: 25 },\n pageCount: { type: 'integer', maximum: 1 },\n total: { type: 'integer' },\n },\n },\n },\n },\n },\n },\n });\n }\n\n const requiredAttributes = getRequiredAttributes(attributes);\n // Build the response schema\n Object.assign(schemas, {\n [`${typeName}`]: {\n type: 'object',\n ...(requiredAttributes.length && { required: requiredAttributes }),\n properties: {\n id: { type: 'number' },\n documentId: { type: 'string' },\n ...cleanSchemaAttributes(attributes, { didAddStrapiComponentsToSchemas }),\n },\n },\n\n [`${typeName}Response`]: {\n type: 'object',\n properties: {\n data: {\n $ref: `#/components/schemas/${typeName}`,\n },\n meta: { type: 'object' },\n },\n },\n });\n\n return { ...schemas, ...strapiComponentSchemas };\n};\n\nconst buildComponentSchema = (api: Api) => {\n // A reusable loop for building paths and component schemas\n // Uses the api param to build a new set of params for each content type\n // Passes these new params to the function provided\n return loopContentTypeNames(api, getAllSchemasForContentType);\n};\n\nexport default buildComponentSchema;\n"],"names":["getRequiredAttributes","allAttributes","requiredAttributes","key","required","push","getAllSchemasForContentType","routeInfo","attributes","uniqueName","strapiComponentSchemas","schemas","typeName","pascalCase","didAddStrapiComponentsToSchemas","schemaName","schema","Object","keys","properties","routeMethods","routes","map","route","method","attributesToOmit","attributesForRequest","_","omit","requiredRequestAttributes","includes","assign","type","data","length","cleanSchemaAttributes","isRequest","hasListOfEntities","filter","hasFindMethod","handler","items","$ref","meta","pagination","page","pageSize","minimum","pageCount","maximum","total","id","documentId","buildComponentSchema","api","loopContentTypeNames"],"mappings":";;;;;;AAYA,MAAMA,wBAAwB,CAACC,aAAAA,GAAAA;AAC7B,IAAA,MAAMC,qBAA+B,EAAE;IAEvC,IAAK,MAAMC,OAAOF,aAAe,CAAA;AAC/B,QAAA,IAAIA,aAAa,CAACE,GAAI,CAAA,CAACC,QAAQ,EAAE;AAC/BF,YAAAA,kBAAAA,CAAmBG,IAAI,CAACF,GAAAA,CAAAA;AAC1B;AACF;IAEA,OAAOD,kBAAAA;AACT,CAAA;AAEA;;;;;;;;;IAUA,MAAMI,8BAA8B,CAAC,EAAEC,SAAS,EAAEC,UAAU,EAAEC,UAAU,EAAW,GAAA;;AAEjF,IAAA,IAAIC,yBAAyB,EAAC;AAC9B,IAAA,MAAMC,UAAsC,EAAC;AAC7C,IAAA,MAAMC,WAAWC,UAAWJ,CAAAA,UAAAA,CAAAA;;IAG5B,MAAMK,+BAAAA,GAAkC,CAACC,UAAoBC,EAAAA,MAAAA,GAAAA;AAC3D,QAAA,IAAI,CAACC,MAAAA,CAAOC,IAAI,CAACF,MAAW,CAAA,IAAA,CAACC,MAAOC,CAAAA,IAAI,CAACF,MAAAA,CAAOG,UAAU,CAAA,EAAI,OAAO,KAAA;;QAGrET,sBAAyB,GAAA;AACvB,YAAA,GAAGA,sBAAsB;AACzB,YAAA,CAACK,aAAaC;AAChB,SAAA;QAEA,OAAO,IAAA;AACT,KAAA;;IAGA,MAAMI,YAAAA,GAAeb,UAAUc,MAAM,CAACC,GAAG,CAAC,CAACC,KAAsBA,GAAAA,KAAAA,CAAMC,MAAM,CAAA;AAE7E,IAAA,MAAMC,gBAAmB,GAAA;AACvB,QAAA,WAAA;AACA,QAAA,WAAA;AACA,QAAA,aAAA;AACA,QAAA,aAAA;AACA,QAAA,WAAA;AACA,QAAA;AACD,KAAA;AAED,IAAA,MAAMC,oBAAuBC,GAAAA,CAAAA,CAAEC,IAAI,CAACpB,UAAYiB,EAAAA,gBAAAA,CAAAA;;AAEhD,IAAA,MAAMI,4BAA4B7B,qBAAsB0B,CAAAA,oBAAAA,CAAAA;;AAExD,IAAA,IAAIN,aAAaU,QAAQ,CAAC,WAAWV,YAAaU,CAAAA,QAAQ,CAAC,KAAQ,CAAA,EAAA;;;QAIjEb,MAAOc,CAAAA,MAAM,CAACpB,OAAS,EAAA;AACrB,YAAA,CAAC,CAAC,EAAEC,QAAAA,CAAS,OAAO,CAAC,GAAG;gBACtBoB,IAAM,EAAA,QAAA;gBACN5B,QAAU,EAAA;AAAC,oBAAA;AAAO,iBAAA;gBAClBe,UAAY,EAAA;oBACVc,IAAM,EAAA;wBACJ,GAAIJ,yBAAAA,CAA0BK,MAAM,IAAI;4BAAE9B,QAAUyB,EAAAA;yBAA2B;wBAC/EG,IAAM,EAAA,QAAA;AACNb,wBAAAA,UAAAA,EAAYgB,sBAAsBT,oBAAsB,EAAA;4BACtDU,SAAW,EAAA,IAAA;AACXtB,4BAAAA;AACF,yBAAA;AACF;AACF;AACF;AACF,SAAA,CAAA;AACF;;AAGA,IAAA,MAAMuB,iBAAoB9B,GAAAA,SAAAA,CAAUc,MAAM,CAACiB,MAAM,CAAC,CAACf,KAAAA,GACjDgB,aAAchB,CAAAA,KAAAA,CAAMiB,OAAO,CAAA,CAAA,CAC3BN,MAAM;AAER,IAAA,IAAIG,iBAAmB,EAAA;;QAErBpB,MAAOc,CAAAA,MAAM,CAACpB,OAAS,EAAA;AACrB,YAAA,CAAC,CAAC,EAAEC,QAAAA,CAAS,YAAY,CAAC,GAAG;gBAC3BoB,IAAM,EAAA,QAAA;gBACNb,UAAY,EAAA;oBACVc,IAAM,EAAA;wBACJD,IAAM,EAAA,OAAA;wBACNS,KAAO,EAAA;AACLC,4BAAAA,IAAAA,EAAM,CAAC,qBAAqB,EAAE9B,QAAAA,CAAS;AACzC;AACF,qBAAA;oBACA+B,IAAM,EAAA;wBACJX,IAAM,EAAA,QAAA;wBACNb,UAAY,EAAA;4BACVyB,UAAY,EAAA;gCACVZ,IAAM,EAAA,QAAA;gCACNb,UAAY,EAAA;oCACV0B,IAAM,EAAA;wCAAEb,IAAM,EAAA;AAAU,qCAAA;oCACxBc,QAAU,EAAA;wCAAEd,IAAM,EAAA,SAAA;wCAAWe,OAAS,EAAA;AAAG,qCAAA;oCACzCC,SAAW,EAAA;wCAAEhB,IAAM,EAAA,SAAA;wCAAWiB,OAAS,EAAA;AAAE,qCAAA;oCACzCC,KAAO,EAAA;wCAAElB,IAAM,EAAA;AAAU;AAC3B;AACF;AACF;AACF;AACF;AACF;AACF,SAAA,CAAA;AACF;AAEA,IAAA,MAAM9B,qBAAqBF,qBAAsBQ,CAAAA,UAAAA,CAAAA;;IAEjDS,MAAOc,CAAAA,MAAM,CAACpB,OAAS,EAAA;AACrB,QAAA,CAAC,CAAC,EAAEC,QAAS,CAAA,CAAC,GAAG;YACfoB,IAAM,EAAA,QAAA;YACN,GAAI9B,kBAAAA,CAAmBgC,MAAM,IAAI;gBAAE9B,QAAUF,EAAAA;aAAoB;YACjEiB,UAAY,EAAA;gBACVgC,EAAI,EAAA;oBAAEnB,IAAM,EAAA;AAAS,iBAAA;gBACrBoB,UAAY,EAAA;oBAAEpB,IAAM,EAAA;AAAS,iBAAA;AAC7B,gBAAA,GAAGG,sBAAsB3B,UAAY,EAAA;AAAEM,oBAAAA;iBAAkC;AAC3E;AACF,SAAA;AAEA,QAAA,CAAC,CAAC,EAAEF,QAAAA,CAAS,QAAQ,CAAC,GAAG;YACvBoB,IAAM,EAAA,QAAA;YACNb,UAAY,EAAA;gBACVc,IAAM,EAAA;AACJS,oBAAAA,IAAAA,EAAM,CAAC,qBAAqB,EAAE9B,QAAAA,CAAS;AACzC,iBAAA;gBACA+B,IAAM,EAAA;oBAAEX,IAAM,EAAA;AAAS;AACzB;AACF;AACF,KAAA,CAAA;IAEA,OAAO;AAAE,QAAA,GAAGrB,OAAO;AAAE,QAAA,GAAGD;AAAuB,KAAA;AACjD,CAAA;AAEA,MAAM2C,uBAAuB,CAACC,GAAAA,GAAAA;;;;AAI5B,IAAA,OAAOC,qBAAqBD,GAAKhD,EAAAA,2BAAAA,CAAAA;AACnC;;;;"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var getSchemaData = require('./get-schema-data.js');
|
|
4
|
+
var pascalCase = require('./pascal-case.js');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @description - Convert attribute component names to OpenAPI component names
|
|
8
|
+
*
|
|
9
|
+
* @returns OpenAPI component name
|
|
10
|
+
*/ const convertComponentName = (component, isRef = false)=>{
|
|
11
|
+
const cleanComponentName = `${pascalCase(component)}Component`;
|
|
12
|
+
if (isRef) {
|
|
13
|
+
return `#/components/schemas/${cleanComponentName}`;
|
|
14
|
+
}
|
|
15
|
+
return cleanComponentName;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* @description - Converts types found on attributes to OpenAPI acceptable data types
|
|
19
|
+
*
|
|
20
|
+
* @returns Attributes using OpenAPI acceptable data types
|
|
21
|
+
*/ const cleanSchemaAttributes = (attributes, { typeMap = new Map(), isRequest = false, didAddStrapiComponentsToSchemas })=>{
|
|
22
|
+
const schemaAttributes = {};
|
|
23
|
+
for (const prop of Object.keys(attributes)){
|
|
24
|
+
const attribute = attributes[prop];
|
|
25
|
+
switch(attribute.type){
|
|
26
|
+
case 'password':
|
|
27
|
+
{
|
|
28
|
+
if (!isRequest) {
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
schemaAttributes[prop] = {
|
|
32
|
+
type: 'string',
|
|
33
|
+
format: 'password',
|
|
34
|
+
example: '*******'
|
|
35
|
+
};
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
case 'email':
|
|
39
|
+
{
|
|
40
|
+
schemaAttributes[prop] = {
|
|
41
|
+
type: 'string',
|
|
42
|
+
format: 'email'
|
|
43
|
+
};
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case 'string':
|
|
47
|
+
case 'text':
|
|
48
|
+
case 'richtext':
|
|
49
|
+
{
|
|
50
|
+
schemaAttributes[prop] = {
|
|
51
|
+
type: 'string'
|
|
52
|
+
};
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
case 'timestamp':
|
|
56
|
+
{
|
|
57
|
+
schemaAttributes[prop] = {
|
|
58
|
+
type: 'string',
|
|
59
|
+
format: 'timestamp',
|
|
60
|
+
example: Date.now()
|
|
61
|
+
};
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case 'time':
|
|
65
|
+
{
|
|
66
|
+
schemaAttributes[prop] = {
|
|
67
|
+
type: 'string',
|
|
68
|
+
format: 'time',
|
|
69
|
+
example: '12:54.000'
|
|
70
|
+
};
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case 'date':
|
|
74
|
+
{
|
|
75
|
+
schemaAttributes[prop] = {
|
|
76
|
+
type: 'string',
|
|
77
|
+
format: 'date'
|
|
78
|
+
};
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case 'datetime':
|
|
82
|
+
{
|
|
83
|
+
schemaAttributes[prop] = {
|
|
84
|
+
type: 'string',
|
|
85
|
+
format: 'date-time'
|
|
86
|
+
};
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case 'boolean':
|
|
90
|
+
{
|
|
91
|
+
schemaAttributes[prop] = {
|
|
92
|
+
type: 'boolean'
|
|
93
|
+
};
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case 'enumeration':
|
|
97
|
+
{
|
|
98
|
+
schemaAttributes[prop] = {
|
|
99
|
+
type: 'string',
|
|
100
|
+
enum: [
|
|
101
|
+
...attribute.enum
|
|
102
|
+
]
|
|
103
|
+
};
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
case 'decimal':
|
|
107
|
+
case 'float':
|
|
108
|
+
{
|
|
109
|
+
schemaAttributes[prop] = {
|
|
110
|
+
type: 'number',
|
|
111
|
+
format: 'float'
|
|
112
|
+
};
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
case 'integer':
|
|
116
|
+
{
|
|
117
|
+
schemaAttributes[prop] = {
|
|
118
|
+
type: 'integer'
|
|
119
|
+
};
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case 'biginteger':
|
|
123
|
+
{
|
|
124
|
+
schemaAttributes[prop] = {
|
|
125
|
+
type: 'string',
|
|
126
|
+
pattern: '^\\d*$',
|
|
127
|
+
example: '123456789'
|
|
128
|
+
};
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case 'json':
|
|
132
|
+
case 'blocks':
|
|
133
|
+
{
|
|
134
|
+
schemaAttributes[prop] = {};
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
case 'uid':
|
|
138
|
+
{
|
|
139
|
+
schemaAttributes[prop] = {
|
|
140
|
+
type: 'string'
|
|
141
|
+
};
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case 'component':
|
|
145
|
+
{
|
|
146
|
+
const componentAttributes = strapi.components[attribute.component].attributes;
|
|
147
|
+
const rawComponentSchema = {
|
|
148
|
+
type: 'object',
|
|
149
|
+
properties: {
|
|
150
|
+
...isRequest ? {} : {
|
|
151
|
+
id: {
|
|
152
|
+
type: 'number'
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
...cleanSchemaAttributes(componentAttributes, {
|
|
156
|
+
typeMap,
|
|
157
|
+
isRequest,
|
|
158
|
+
didAddStrapiComponentsToSchemas
|
|
159
|
+
})
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
const refComponentSchema = {
|
|
163
|
+
$ref: convertComponentName(attribute.component, true)
|
|
164
|
+
};
|
|
165
|
+
const componentExists = didAddStrapiComponentsToSchemas(convertComponentName(attribute.component), rawComponentSchema);
|
|
166
|
+
const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;
|
|
167
|
+
if (attribute.repeatable) {
|
|
168
|
+
schemaAttributes[prop] = {
|
|
169
|
+
type: 'array',
|
|
170
|
+
items: finalComponentSchema
|
|
171
|
+
};
|
|
172
|
+
} else {
|
|
173
|
+
schemaAttributes[prop] = finalComponentSchema;
|
|
174
|
+
}
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case 'dynamiczone':
|
|
178
|
+
{
|
|
179
|
+
const components = attribute.components.map((component)=>{
|
|
180
|
+
const componentAttributes = strapi.components[component].attributes;
|
|
181
|
+
const rawComponentSchema = {
|
|
182
|
+
type: 'object',
|
|
183
|
+
properties: {
|
|
184
|
+
...isRequest ? {} : {
|
|
185
|
+
id: {
|
|
186
|
+
type: 'number'
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
__component: {
|
|
190
|
+
type: 'string',
|
|
191
|
+
enum: [
|
|
192
|
+
component
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
...cleanSchemaAttributes(componentAttributes, {
|
|
196
|
+
typeMap,
|
|
197
|
+
isRequest,
|
|
198
|
+
didAddStrapiComponentsToSchemas
|
|
199
|
+
})
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
const refComponentSchema = {
|
|
203
|
+
$ref: convertComponentName(component, true)
|
|
204
|
+
};
|
|
205
|
+
const componentExists = didAddStrapiComponentsToSchemas(convertComponentName(component), rawComponentSchema);
|
|
206
|
+
const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;
|
|
207
|
+
return finalComponentSchema;
|
|
208
|
+
});
|
|
209
|
+
let discriminator;
|
|
210
|
+
if (components.every((component)=>Object.hasOwn(component, '$ref'))) {
|
|
211
|
+
discriminator = {
|
|
212
|
+
propertyName: '__component',
|
|
213
|
+
mapping: attribute.components.reduce((acc, component)=>{
|
|
214
|
+
acc[component] = convertComponentName(component, true);
|
|
215
|
+
return acc;
|
|
216
|
+
}, {})
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
schemaAttributes[prop] = {
|
|
220
|
+
type: 'array',
|
|
221
|
+
items: {
|
|
222
|
+
anyOf: components
|
|
223
|
+
},
|
|
224
|
+
discriminator
|
|
225
|
+
};
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
case 'media':
|
|
229
|
+
{
|
|
230
|
+
const imageAttributes = strapi.contentType('plugin::upload.file').attributes;
|
|
231
|
+
const isListOfEntities = attribute.multiple ?? false;
|
|
232
|
+
if (isRequest) {
|
|
233
|
+
const oneOfType = {
|
|
234
|
+
oneOf: [
|
|
235
|
+
{
|
|
236
|
+
type: 'integer'
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
type: 'string'
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
example: 'string or id'
|
|
243
|
+
};
|
|
244
|
+
schemaAttributes[prop] = isListOfEntities ? {
|
|
245
|
+
type: 'array',
|
|
246
|
+
items: oneOfType
|
|
247
|
+
} : oneOfType;
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
schemaAttributes[prop] = getSchemaData(isListOfEntities, cleanSchemaAttributes(imageAttributes, {
|
|
251
|
+
typeMap,
|
|
252
|
+
didAddStrapiComponentsToSchemas
|
|
253
|
+
}));
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
case 'relation':
|
|
257
|
+
{
|
|
258
|
+
const isListOfEntities = attribute.relation.includes('ToMany');
|
|
259
|
+
if (isRequest) {
|
|
260
|
+
const oneOfType = {
|
|
261
|
+
oneOf: [
|
|
262
|
+
{
|
|
263
|
+
type: 'integer'
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
type: 'string'
|
|
267
|
+
}
|
|
268
|
+
],
|
|
269
|
+
example: 'string or id'
|
|
270
|
+
};
|
|
271
|
+
schemaAttributes[prop] = isListOfEntities ? {
|
|
272
|
+
type: 'array',
|
|
273
|
+
items: oneOfType
|
|
274
|
+
} : oneOfType;
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
if (!('target' in attribute) || !attribute.target || typeMap.has(attribute.target)) {
|
|
278
|
+
schemaAttributes[prop] = getSchemaData(isListOfEntities, {});
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
typeMap.set(attribute.target, true);
|
|
282
|
+
const targetAttributes = strapi.contentType(attribute.target).attributes;
|
|
283
|
+
schemaAttributes[prop] = getSchemaData(isListOfEntities, cleanSchemaAttributes(targetAttributes, {
|
|
284
|
+
typeMap,
|
|
285
|
+
isRequest,
|
|
286
|
+
didAddStrapiComponentsToSchemas
|
|
287
|
+
}));
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
default:
|
|
291
|
+
{
|
|
292
|
+
// @ts-expect-error - This is a catch all for any other types
|
|
293
|
+
throw new Error(`Invalid type ${attribute.type} while generating open api schema.`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return schemaAttributes;
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
module.exports = cleanSchemaAttributes;
|
|
301
|
+
//# sourceMappingURL=clean-schema-attributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean-schema-attributes.js","sources":["../../../../../server/src/services/helpers/utils/clean-schema-attributes.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nimport getSchemaData from './get-schema-data';\nimport pascalCase from './pascal-case';\n\ninterface Options {\n typeMap?: Map<string, boolean>;\n isRequest?: boolean;\n didAddStrapiComponentsToSchemas: (name: string, schema: object) => boolean;\n}\n\n/**\n * @description - Convert attribute component names to OpenAPI component names\n *\n * @returns OpenAPI component name\n */\nconst convertComponentName = (component: string, isRef = false): string => {\n const cleanComponentName = `${pascalCase(component)}Component`;\n\n if (isRef) {\n return `#/components/schemas/${cleanComponentName}`;\n }\n return cleanComponentName;\n};\n\n/**\n * @description - Converts types found on attributes to OpenAPI acceptable data types\n *\n * @returns Attributes using OpenAPI acceptable data types\n */\nconst cleanSchemaAttributes = (\n attributes: Struct.SchemaAttributes,\n { typeMap = new Map(), isRequest = false, didAddStrapiComponentsToSchemas }: Options\n) => {\n const schemaAttributes: Record<string, OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject> = {};\n\n for (const prop of Object.keys(attributes)) {\n const attribute = attributes[prop];\n\n switch (attribute.type) {\n case 'password': {\n if (!isRequest) {\n break;\n }\n\n schemaAttributes[prop] = { type: 'string', format: 'password', example: '*******' };\n break;\n }\n case 'email': {\n schemaAttributes[prop] = { type: 'string', format: 'email' };\n break;\n }\n case 'string':\n case 'text':\n case 'richtext': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'timestamp': {\n schemaAttributes[prop] = { type: 'string', format: 'timestamp', example: Date.now() };\n break;\n }\n case 'time': {\n schemaAttributes[prop] = { type: 'string', format: 'time', example: '12:54.000' };\n break;\n }\n case 'date': {\n schemaAttributes[prop] = { type: 'string', format: 'date' };\n break;\n }\n case 'datetime': {\n schemaAttributes[prop] = { type: 'string', format: 'date-time' };\n break;\n }\n case 'boolean': {\n schemaAttributes[prop] = { type: 'boolean' };\n break;\n }\n case 'enumeration': {\n schemaAttributes[prop] = { type: 'string', enum: [...attribute.enum] };\n break;\n }\n case 'decimal':\n case 'float': {\n schemaAttributes[prop] = { type: 'number', format: 'float' };\n break;\n }\n case 'integer': {\n schemaAttributes[prop] = { type: 'integer' };\n break;\n }\n case 'biginteger': {\n schemaAttributes[prop] = { type: 'string', pattern: '^\\\\d*$', example: '123456789' };\n break;\n }\n case 'json':\n case 'blocks': {\n schemaAttributes[prop] = {};\n break;\n }\n case 'uid': {\n schemaAttributes[prop] = { type: 'string' };\n break;\n }\n case 'component': {\n const componentAttributes = strapi.components[attribute.component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { type: 'number' } }),\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(attribute.component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(attribute.component),\n rawComponentSchema\n );\n\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n if (attribute.repeatable) {\n schemaAttributes[prop] = {\n type: 'array',\n items: finalComponentSchema,\n };\n } else {\n schemaAttributes[prop] = finalComponentSchema;\n }\n break;\n }\n case 'dynamiczone': {\n const components = attribute.components.map((component) => {\n const componentAttributes = strapi.components[component].attributes;\n const rawComponentSchema: OpenAPIV3.SchemaObject = {\n type: 'object',\n properties: {\n ...(isRequest ? {} : { id: { type: 'number' } }),\n __component: { type: 'string', enum: [component] },\n ...cleanSchemaAttributes(componentAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n }),\n },\n };\n\n const refComponentSchema: OpenAPIV3.ReferenceObject = {\n $ref: convertComponentName(component, true),\n };\n\n const componentExists = didAddStrapiComponentsToSchemas(\n convertComponentName(component),\n rawComponentSchema\n );\n const finalComponentSchema = componentExists ? refComponentSchema : rawComponentSchema;\n return finalComponentSchema;\n });\n let discriminator: OpenAPIV3.DiscriminatorObject | undefined;\n if (components.every((component) => Object.hasOwn(component, '$ref'))) {\n discriminator = {\n propertyName: '__component',\n mapping: attribute.components.reduce(\n (acc, component) => {\n acc[component] = convertComponentName(component, true);\n return acc;\n },\n {} as {\n [value: string]: string;\n }\n ),\n };\n }\n\n schemaAttributes[prop] = {\n type: 'array',\n items: {\n anyOf: components,\n },\n discriminator,\n };\n break;\n }\n case 'media': {\n const imageAttributes = strapi.contentType('plugin::upload.file').attributes;\n const isListOfEntities = attribute.multiple ?? false;\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n schemaAttributes[prop] = getSchemaData(\n isListOfEntities,\n cleanSchemaAttributes(imageAttributes, { typeMap, didAddStrapiComponentsToSchemas })\n );\n break;\n }\n\n case 'relation': {\n const isListOfEntities = attribute.relation.includes('ToMany');\n\n if (isRequest) {\n const oneOfType: OpenAPIV3.SchemaObject = {\n oneOf: [{ type: 'integer' }, { type: 'string' }],\n example: 'string or id',\n };\n\n schemaAttributes[prop] = isListOfEntities\n ? { type: 'array', items: oneOfType }\n : oneOfType;\n break;\n }\n\n if (!('target' in attribute) || !attribute.target || typeMap.has(attribute.target)) {\n schemaAttributes[prop] = getSchemaData(isListOfEntities, {});\n\n break;\n }\n\n typeMap.set(attribute.target, true);\n const targetAttributes = strapi.contentType(attribute.target).attributes;\n\n schemaAttributes[prop] = getSchemaData(\n isListOfEntities,\n cleanSchemaAttributes(targetAttributes, {\n typeMap,\n isRequest,\n didAddStrapiComponentsToSchemas,\n })\n );\n\n break;\n }\n default: {\n // @ts-expect-error - This is a catch all for any other types\n throw new Error(`Invalid type ${attribute.type} while generating open api schema.`);\n }\n }\n }\n\n return schemaAttributes;\n};\n\nexport default cleanSchemaAttributes;\n"],"names":["convertComponentName","component","isRef","cleanComponentName","pascalCase","cleanSchemaAttributes","attributes","typeMap","Map","isRequest","didAddStrapiComponentsToSchemas","schemaAttributes","prop","Object","keys","attribute","type","format","example","Date","now","enum","pattern","componentAttributes","strapi","components","rawComponentSchema","properties","id","refComponentSchema","$ref","componentExists","finalComponentSchema","repeatable","items","map","__component","discriminator","every","hasOwn","propertyName","mapping","reduce","acc","anyOf","imageAttributes","contentType","isListOfEntities","multiple","oneOfType","oneOf","getSchemaData","relation","includes","target","has","set","targetAttributes","Error"],"mappings":"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"}
|