@strapi/plugin-documentation 0.0.0-experimental.62ce06180fe9a772eaeb3d43d238b26644f39f7c → 0.0.0-experimental.6340da17068c3bed7fb006e7bcc554c71129e282
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/LICENSE +18 -3
- package/README.md +2 -2
- package/dist/admin/components/SettingsForm.js +203 -0
- package/dist/admin/components/SettingsForm.js.map +1 -0
- package/dist/admin/components/SettingsForm.mjs +180 -0
- 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 +96 -4
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +91 -4
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/App.js +254 -0
- package/dist/admin/pages/App.js.map +1 -0
- package/dist/admin/pages/App.mjs +232 -0
- 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/services/api.js +55 -0
- package/dist/admin/services/api.js.map +1 -0
- package/dist/admin/services/api.mjs +50 -0
- package/dist/admin/services/api.mjs.map +1 -0
- package/dist/admin/src/index.d.ts +3 -2
- package/dist/admin/src/pages/tests/App.test.d.ts +1 -0
- package/dist/admin/src/pages/tests/Settings.test.d.ts +1 -0
- package/dist/admin/src/services/api.d.ts +4 -4
- package/dist/admin/translations/ar.json.js +25 -0
- package/dist/admin/translations/ar.json.js.map +1 -0
- package/dist/admin/translations/ar.json.mjs +23 -0
- package/dist/admin/translations/ar.json.mjs.map +1 -0
- package/dist/admin/translations/cs.json.js +47 -0
- package/dist/admin/translations/cs.json.js.map +1 -0
- package/dist/admin/translations/cs.json.mjs +45 -0
- package/dist/admin/translations/cs.json.mjs.map +1 -0
- package/dist/admin/translations/da.json.js +44 -0
- package/dist/admin/translations/da.json.js.map +1 -0
- package/dist/admin/translations/da.json.mjs +42 -0
- package/dist/admin/translations/da.json.mjs.map +1 -0
- package/dist/admin/translations/de.json.js +47 -0
- package/dist/admin/translations/de.json.js.map +1 -0
- package/dist/admin/translations/de.json.mjs +45 -0
- package/dist/admin/translations/de.json.mjs.map +1 -0
- package/dist/admin/translations/en.json.js +47 -0
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/translations/en.json.mjs +45 -0
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/translations/es.json.js +47 -0
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/translations/es.json.mjs +45 -0
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/translations/fr.json.js +31 -0
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/translations/fr.json.mjs +29 -0
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/translations/id.json.js +29 -0
- package/dist/admin/translations/id.json.js.map +1 -0
- package/dist/admin/translations/id.json.mjs +27 -0
- package/dist/admin/translations/id.json.mjs.map +1 -0
- package/dist/admin/translations/it.json.js +31 -0
- package/dist/admin/translations/it.json.js.map +1 -0
- package/dist/admin/translations/it.json.mjs +29 -0
- package/dist/admin/translations/it.json.mjs.map +1 -0
- package/dist/admin/translations/ko.json.js +44 -0
- package/dist/admin/translations/ko.json.js.map +1 -0
- package/dist/admin/translations/ko.json.mjs +42 -0
- package/dist/admin/translations/ko.json.mjs.map +1 -0
- package/dist/admin/translations/ms.json.js +28 -0
- package/dist/admin/translations/ms.json.js.map +1 -0
- package/dist/admin/translations/ms.json.mjs +26 -0
- package/dist/admin/translations/ms.json.mjs.map +1 -0
- package/dist/admin/translations/nl.json.js +26 -0
- package/dist/admin/translations/nl.json.js.map +1 -0
- package/dist/admin/translations/nl.json.mjs +24 -0
- package/dist/admin/translations/nl.json.mjs.map +1 -0
- package/dist/admin/translations/pl.json.js +47 -0
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/translations/pl.json.mjs +45 -0
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/translations/pt-BR.json.js +26 -0
- package/dist/admin/translations/pt-BR.json.js.map +1 -0
- package/dist/admin/translations/pt-BR.json.mjs +24 -0
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
- package/dist/admin/translations/pt.json.js +26 -0
- package/dist/admin/translations/pt.json.js.map +1 -0
- package/dist/admin/translations/pt.json.mjs +24 -0
- package/dist/admin/translations/pt.json.mjs.map +1 -0
- package/dist/admin/translations/ru.json.js +47 -0
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/translations/ru.json.mjs +45 -0
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/translations/sk.json.js +47 -0
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/translations/sk.json.mjs +45 -0
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/translations/sv.json.js +44 -0
- package/dist/admin/translations/sv.json.js.map +1 -0
- package/dist/admin/translations/sv.json.mjs +42 -0
- package/dist/admin/translations/sv.json.mjs.map +1 -0
- package/dist/admin/translations/th.json.js +29 -0
- package/dist/admin/translations/th.json.js.map +1 -0
- package/dist/admin/translations/th.json.mjs +27 -0
- package/dist/admin/translations/th.json.mjs.map +1 -0
- package/dist/admin/translations/tr.json.js +44 -0
- package/dist/admin/translations/tr.json.js.map +1 -0
- package/dist/admin/translations/tr.json.mjs +42 -0
- package/dist/admin/translations/tr.json.mjs.map +1 -0
- package/dist/admin/translations/uk.json.js +47 -0
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/translations/uk.json.mjs +45 -0
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/translations/vi.json.js +29 -0
- package/dist/admin/translations/vi.json.js.map +1 -0
- package/dist/admin/translations/vi.json.mjs +27 -0
- package/dist/admin/translations/vi.json.mjs.map +1 -0
- package/dist/admin/translations/zh-Hans.json.js +33 -0
- package/dist/admin/translations/zh-Hans.json.js.map +1 -0
- package/dist/admin/translations/zh-Hans.json.mjs +31 -0
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/translations/zh.json.js +44 -0
- package/dist/admin/translations/zh.json.js.map +1 -0
- package/dist/admin/translations/zh.json.mjs +42 -0
- 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 +194 -0
- package/dist/server/controllers/documentation.js.map +1 -0
- package/dist/server/controllers/documentation.mjs +182 -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 +18 -1261
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +17 -1237
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/documentation.js +33 -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/public/index.html.js +6 -0
- package/dist/server/public/index.html.js.map +1 -0
- package/dist/server/public/index.html.mjs +4 -0
- package/dist/server/public/index.html.mjs.map +1 -0
- package/dist/server/public/login.html.js +6 -0
- package/dist/server/public/login.html.js.map +1 -0
- package/dist/server/public/login.html.mjs +4 -0
- 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 +193 -0
- package/dist/server/services/documentation.js.map +1 -0
- package/dist/server/services/documentation.mjs +186 -0
- package/dist/server/services/documentation.mjs.map +1 -0
- package/dist/server/services/helpers/build-api-endpoint-path.js +166 -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 +178 -0
- package/dist/server/services/helpers/build-component-schema.js.map +1 -0
- package/dist/server/services/helpers/build-component-schema.mjs +172 -0
- package/dist/server/services/helpers/build-component-schema.mjs.map +1 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.js +315 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.js.map +1 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.mjs +313 -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 +57 -0
- package/dist/server/services/helpers/utils/get-schema-data.js.map +1 -0
- package/dist/server/services/helpers/utils/get-schema-data.mjs +55 -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 +44 -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 +14 -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/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/documentation.d.ts +2 -2
- package/dist/server/src/controllers/documentation.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +2 -3
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +5 -6
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/documentation.d.ts.map +1 -1
- package/dist/server/src/middlewares/restrict-access.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts +0 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/documentation.d.ts.map +1 -1
- package/dist/server/src/services/helpers/build-api-endpoint-path.d.ts.map +1 -1
- package/dist/server/src/services/helpers/build-component-schema.d.ts.map +1 -1
- package/dist/server/src/services/helpers/utils/clean-schema-attributes.d.ts +1 -1
- package/dist/server/src/services/helpers/utils/clean-schema-attributes.d.ts.map +1 -1
- package/dist/server/src/services/helpers/utils/get-api-responses.d.ts.map +1 -1
- package/dist/server/src/services/helpers/utils/get-schema-data.d.ts.map +1 -1
- package/dist/server/src/services/helpers/utils/loop-content-type-names.d.ts.map +1 -1
- package/dist/server/src/services/helpers/utils/pascal-case.d.ts.map +1 -1
- package/dist/server/src/services/helpers/utils/query-params.d.ts.map +1 -1
- package/dist/server/src/services/helpers/utils/routes.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +3 -3
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/override.d.ts.map +1 -1
- package/dist/server/src/services/utils/get-plugins-that-need-documentation.d.ts.map +1 -1
- package/dist/server/src/utils.d.ts.map +1 -1
- 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/dist/tests/server.d.ts +2 -0
- package/package.json +35 -31
- package/dist/_chunks/App-Cmiagsr-.js +0 -203
- package/dist/_chunks/App-Cmiagsr-.js.map +0 -1
- package/dist/_chunks/App-pk6g9tYL.mjs +0 -184
- package/dist/_chunks/App-pk6g9tYL.mjs.map +0 -1
- package/dist/_chunks/Settings-CqLmbMfv.mjs +0 -223
- package/dist/_chunks/Settings-CqLmbMfv.mjs.map +0 -1
- package/dist/_chunks/Settings-MmkmHoxg.js +0 -243
- package/dist/_chunks/Settings-MmkmHoxg.js.map +0 -1
- package/dist/_chunks/ar-CkqTE6jh.js +0 -24
- package/dist/_chunks/ar-CkqTE6jh.js.map +0 -1
- package/dist/_chunks/ar-ckp9T43y.mjs +0 -24
- package/dist/_chunks/ar-ckp9T43y.mjs.map +0 -1
- package/dist/_chunks/cs-BbyKo6Hc.js +0 -25
- package/dist/_chunks/cs-BbyKo6Hc.js.map +0 -1
- package/dist/_chunks/cs-ciLYCxgd.mjs +0 -25
- package/dist/_chunks/cs-ciLYCxgd.mjs.map +0 -1
- package/dist/_chunks/de-CHwC0A85.js +0 -30
- package/dist/_chunks/de-CHwC0A85.js.map +0 -1
- package/dist/_chunks/de-DqkAUMvP.mjs +0 -30
- package/dist/_chunks/de-DqkAUMvP.mjs.map +0 -1
- package/dist/_chunks/dk-DgCq8mF-.mjs +0 -43
- package/dist/_chunks/dk-DgCq8mF-.mjs.map +0 -1
- package/dist/_chunks/dk-qlI2J6S0.js +0 -43
- package/dist/_chunks/dk-qlI2J6S0.js.map +0 -1
- package/dist/_chunks/en-Cfq2Inmo.js +0 -43
- package/dist/_chunks/en-Cfq2Inmo.js.map +0 -1
- package/dist/_chunks/en-DfCC9sZn.mjs +0 -43
- package/dist/_chunks/en-DfCC9sZn.mjs.map +0 -1
- package/dist/_chunks/es-CEiXVnsb.mjs +0 -43
- package/dist/_chunks/es-CEiXVnsb.mjs.map +0 -1
- package/dist/_chunks/es-DH1GVZe7.js +0 -43
- package/dist/_chunks/es-DH1GVZe7.js.map +0 -1
- package/dist/_chunks/fr-B1x-Nj5w.js +0 -30
- package/dist/_chunks/fr-B1x-Nj5w.js.map +0 -1
- package/dist/_chunks/fr-BlX-v4UF.mjs +0 -30
- package/dist/_chunks/fr-BlX-v4UF.mjs.map +0 -1
- package/dist/_chunks/getTrad-AjYeGjZg.mjs +0 -51
- package/dist/_chunks/getTrad-AjYeGjZg.mjs.map +0 -1
- package/dist/_chunks/getTrad-CPA7x4Cg.js +0 -50
- package/dist/_chunks/getTrad-CPA7x4Cg.js.map +0 -1
- package/dist/_chunks/id-CPOl6_EU.mjs +0 -28
- package/dist/_chunks/id-CPOl6_EU.mjs.map +0 -1
- package/dist/_chunks/id-D3yFE72d.js +0 -28
- package/dist/_chunks/id-D3yFE72d.js.map +0 -1
- package/dist/_chunks/index-BTFWrNiz.mjs +0 -75
- package/dist/_chunks/index-BTFWrNiz.mjs.map +0 -1
- package/dist/_chunks/index-Bjeq6z8p.js +0 -100
- package/dist/_chunks/index-Bjeq6z8p.js.map +0 -1
- package/dist/_chunks/index-CEoG11hQ.mjs +0 -101
- package/dist/_chunks/index-CEoG11hQ.mjs.map +0 -1
- package/dist/_chunks/index-CYcTK1eg.js +0 -75
- package/dist/_chunks/index-CYcTK1eg.js.map +0 -1
- package/dist/_chunks/it-DWJI563z.mjs +0 -30
- package/dist/_chunks/it-DWJI563z.mjs.map +0 -1
- package/dist/_chunks/it-WuNBIqG8.js +0 -30
- package/dist/_chunks/it-WuNBIqG8.js.map +0 -1
- package/dist/_chunks/ko-CFzSHayG.mjs +0 -43
- package/dist/_chunks/ko-CFzSHayG.mjs.map +0 -1
- package/dist/_chunks/ko-De5iYa_O.js +0 -43
- package/dist/_chunks/ko-De5iYa_O.js.map +0 -1
- package/dist/_chunks/login-EQSKn2h7.js +0 -150
- package/dist/_chunks/login-EQSKn2h7.js.map +0 -1
- package/dist/_chunks/login-KS59cQ6U.mjs +0 -150
- package/dist/_chunks/login-KS59cQ6U.mjs.map +0 -1
- package/dist/_chunks/ms-CUgPFo4U.mjs +0 -27
- package/dist/_chunks/ms-CUgPFo4U.mjs.map +0 -1
- package/dist/_chunks/ms-DQfa3FDx.js +0 -27
- package/dist/_chunks/ms-DQfa3FDx.js.map +0 -1
- package/dist/_chunks/nl-BZHlqphk.js +0 -25
- package/dist/_chunks/nl-BZHlqphk.js.map +0 -1
- package/dist/_chunks/nl-B_7CHwVD.mjs +0 -25
- package/dist/_chunks/nl-B_7CHwVD.mjs.map +0 -1
- package/dist/_chunks/pl-DDl5i_mP.js +0 -43
- package/dist/_chunks/pl-DDl5i_mP.js.map +0 -1
- package/dist/_chunks/pl-DwLr8sw9.mjs +0 -43
- package/dist/_chunks/pl-DwLr8sw9.mjs.map +0 -1
- package/dist/_chunks/pt-4GQ8ermL.js +0 -25
- package/dist/_chunks/pt-4GQ8ermL.js.map +0 -1
- package/dist/_chunks/pt-BR-D24CJ0qp.js +0 -25
- package/dist/_chunks/pt-BR-D24CJ0qp.js.map +0 -1
- package/dist/_chunks/pt-BR-MVXc6V9P.mjs +0 -25
- package/dist/_chunks/pt-BR-MVXc6V9P.mjs.map +0 -1
- package/dist/_chunks/pt-C2N9fdeh.mjs +0 -25
- package/dist/_chunks/pt-C2N9fdeh.mjs.map +0 -1
- package/dist/_chunks/ru-BddeNlU0.mjs +0 -43
- package/dist/_chunks/ru-BddeNlU0.mjs.map +0 -1
- package/dist/_chunks/ru-QwZYcU6K.js +0 -43
- package/dist/_chunks/ru-QwZYcU6K.js.map +0 -1
- package/dist/_chunks/sk-BmT4uZTG.mjs +0 -28
- package/dist/_chunks/sk-BmT4uZTG.mjs.map +0 -1
- package/dist/_chunks/sk-DgAXilB1.js +0 -28
- package/dist/_chunks/sk-DgAXilB1.js.map +0 -1
- package/dist/_chunks/sv-CCLcAo3U.js +0 -43
- package/dist/_chunks/sv-CCLcAo3U.js.map +0 -1
- package/dist/_chunks/sv-D_-KBtcw.mjs +0 -43
- package/dist/_chunks/sv-D_-KBtcw.mjs.map +0 -1
- package/dist/_chunks/th-BhgV1BbW.js +0 -28
- package/dist/_chunks/th-BhgV1BbW.js.map +0 -1
- package/dist/_chunks/th-DkuoSGii.mjs +0 -28
- package/dist/_chunks/th-DkuoSGii.mjs.map +0 -1
- package/dist/_chunks/tr-BysnAErC.js +0 -43
- package/dist/_chunks/tr-BysnAErC.js.map +0 -1
- package/dist/_chunks/tr-l-xxK4Yk.mjs +0 -43
- package/dist/_chunks/tr-l-xxK4Yk.mjs.map +0 -1
- package/dist/_chunks/uk-CNlbntFx.js +0 -27
- package/dist/_chunks/uk-CNlbntFx.js.map +0 -1
- package/dist/_chunks/uk-Cpmsxyku.mjs +0 -27
- package/dist/_chunks/uk-Cpmsxyku.mjs.map +0 -1
- package/dist/_chunks/vi-ClWGrFm9.mjs +0 -28
- package/dist/_chunks/vi-ClWGrFm9.mjs.map +0 -1
- package/dist/_chunks/vi-_ib0GmNl.js +0 -28
- package/dist/_chunks/vi-_ib0GmNl.js.map +0 -1
- package/dist/_chunks/zh-Glkg1L2g.mjs +0 -43
- package/dist/_chunks/zh-Glkg1L2g.mjs.map +0 -1
- package/dist/_chunks/zh-Hans-L_5U2KqC.js +0 -32
- package/dist/_chunks/zh-Hans-L_5U2KqC.js.map +0 -1
- package/dist/_chunks/zh-Hans-XLMwjASk.mjs +0 -32
- package/dist/_chunks/zh-Hans-XLMwjASk.mjs.map +0 -1
- package/dist/_chunks/zh-aEZZdkOu.js +0 -43
- package/dist/_chunks/zh-aEZZdkOu.js.map +0 -1
- package/strapi-server.js +0 -3
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const defaultConfig = {
|
|
2
|
+
openapi: '3.0.0',
|
|
3
|
+
info: {
|
|
4
|
+
version: '1.0.0',
|
|
5
|
+
title: 'DOCUMENTATION',
|
|
6
|
+
description: '',
|
|
7
|
+
termsOfService: 'YOUR_TERMS_OF_SERVICE_URL',
|
|
8
|
+
contact: {
|
|
9
|
+
name: 'TEAM',
|
|
10
|
+
email: 'contact-email@something.io',
|
|
11
|
+
url: 'mywebsite.io'
|
|
12
|
+
},
|
|
13
|
+
license: {
|
|
14
|
+
name: 'Apache 2.0',
|
|
15
|
+
url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
'x-strapi-config': {
|
|
19
|
+
plugins: null,
|
|
20
|
+
mutateDocumentation: null
|
|
21
|
+
},
|
|
22
|
+
servers: [],
|
|
23
|
+
externalDocs: {
|
|
24
|
+
description: 'Find out more',
|
|
25
|
+
url: 'https://docs.strapi.io/developer-docs/latest/getting-started/introduction.html'
|
|
26
|
+
},
|
|
27
|
+
security: [
|
|
28
|
+
{
|
|
29
|
+
bearerAuth: []
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
paths: {},
|
|
33
|
+
components: {
|
|
34
|
+
securitySchemes: {
|
|
35
|
+
bearerAuth: {
|
|
36
|
+
type: 'http',
|
|
37
|
+
scheme: 'bearer',
|
|
38
|
+
bearerFormat: 'JWT'
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
schemas: {
|
|
42
|
+
Error: {
|
|
43
|
+
type: 'object',
|
|
44
|
+
required: [
|
|
45
|
+
'error'
|
|
46
|
+
],
|
|
47
|
+
properties: {
|
|
48
|
+
data: {
|
|
49
|
+
nullable: true,
|
|
50
|
+
oneOf: [
|
|
51
|
+
{
|
|
52
|
+
type: 'object'
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'array',
|
|
56
|
+
items: {
|
|
57
|
+
type: 'object'
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
error: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
status: {
|
|
66
|
+
type: 'integer'
|
|
67
|
+
},
|
|
68
|
+
name: {
|
|
69
|
+
type: 'string'
|
|
70
|
+
},
|
|
71
|
+
message: {
|
|
72
|
+
type: 'string'
|
|
73
|
+
},
|
|
74
|
+
details: {
|
|
75
|
+
type: 'object'
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export { defaultConfig };
|
|
86
|
+
//# sourceMappingURL=default-plugin-config.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-plugin-config.mjs","sources":["../../../server/src/config/default-plugin-config.ts"],"sourcesContent":["import type { PluginConfig } from '../types';\n\nexport const defaultConfig: PluginConfig = {\n openapi: '3.0.0',\n info: {\n version: '1.0.0',\n title: 'DOCUMENTATION',\n description: '',\n termsOfService: 'YOUR_TERMS_OF_SERVICE_URL',\n contact: {\n name: 'TEAM',\n email: 'contact-email@something.io',\n url: 'mywebsite.io',\n },\n license: {\n name: 'Apache 2.0',\n url: 'https://www.apache.org/licenses/LICENSE-2.0.html',\n },\n },\n 'x-strapi-config': {\n plugins: null,\n mutateDocumentation: null,\n },\n servers: [],\n externalDocs: {\n description: 'Find out more',\n url: 'https://docs.strapi.io/developer-docs/latest/getting-started/introduction.html',\n },\n security: [\n {\n bearerAuth: [],\n },\n ],\n paths: {},\n components: {\n securitySchemes: {\n bearerAuth: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n },\n },\n schemas: {\n Error: {\n type: 'object',\n required: ['error'],\n properties: {\n data: {\n nullable: true,\n oneOf: [{ type: 'object' }, { type: 'array', items: { type: 'object' } }],\n },\n error: {\n type: 'object',\n properties: {\n status: {\n type: 'integer',\n },\n name: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n details: {\n type: 'object',\n },\n },\n },\n },\n },\n },\n },\n};\n"],"names":["defaultConfig","openapi","info","version","title","description","termsOfService","contact","name","email","url","license","plugins","mutateDocumentation","servers","externalDocs","security","bearerAuth","paths","components","securitySchemes","type","scheme","bearerFormat","schemas","Error","required","properties","data","nullable","oneOf","items","error","status","message","details"],"mappings":"MAEaA,aAAAA,GAA8B;IACzCC,OAAAA,EAAS,OAAA;IACTC,IAAAA,EAAM;QACJC,OAAAA,EAAS,OAAA;QACTC,KAAAA,EAAO,eAAA;QACPC,WAAAA,EAAa,EAAA;QACbC,cAAAA,EAAgB,2BAAA;QAChBC,OAAAA,EAAS;YACPC,IAAAA,EAAM,MAAA;YACNC,KAAAA,EAAO,4BAAA;YACPC,GAAAA,EAAK;AACP,SAAA;QACAC,OAAAA,EAAS;YACPH,IAAAA,EAAM,YAAA;YACNE,GAAAA,EAAK;AACP;AACF,KAAA;IACA,iBAAA,EAAmB;QACjBE,OAAAA,EAAS,IAAA;QACTC,mBAAAA,EAAqB;AACvB,KAAA;AACAC,IAAAA,OAAAA,EAAS,EAAE;IACXC,YAAAA,EAAc;QACZV,WAAAA,EAAa,eAAA;QACbK,GAAAA,EAAK;AACP,KAAA;IACAM,QAAAA,EAAU;AACR,QAAA;AACEC,YAAAA,UAAAA,EAAY;AACd;AACD,KAAA;AACDC,IAAAA,KAAAA,EAAO,EAAC;IACRC,UAAAA,EAAY;QACVC,eAAAA,EAAiB;YACfH,UAAAA,EAAY;gBACVI,IAAAA,EAAM,MAAA;gBACNC,MAAAA,EAAQ,QAAA;gBACRC,YAAAA,EAAc;AAChB;AACF,SAAA;QACAC,OAAAA,EAAS;YACPC,KAAAA,EAAO;gBACLJ,IAAAA,EAAM,QAAA;gBACNK,QAAAA,EAAU;AAAC,oBAAA;AAAQ,iBAAA;gBACnBC,UAAAA,EAAY;oBACVC,IAAAA,EAAM;wBACJC,QAAAA,EAAU,IAAA;wBACVC,KAAAA,EAAO;AAAC,4BAAA;gCAAET,IAAAA,EAAM;AAAS,6BAAA;AAAG,4BAAA;gCAAEA,IAAAA,EAAM,OAAA;gCAASU,KAAAA,EAAO;oCAAEV,IAAAA,EAAM;AAAS;AAAE;AAAE;AAC3E,qBAAA;oBACAW,KAAAA,EAAO;wBACLX,IAAAA,EAAM,QAAA;wBACNM,UAAAA,EAAY;4BACVM,MAAAA,EAAQ;gCACNZ,IAAAA,EAAM;AACR,6BAAA;4BACAb,IAAAA,EAAM;gCACJa,IAAAA,EAAM;AACR,6BAAA;4BACAa,OAAAA,EAAS;gCACPb,IAAAA,EAAM;AACR,6BAAA;4BACAc,OAAAA,EAAS;gCACPd,IAAAA,EAAM;AACR;AACF;AACF;AACF;AACF;AACF;AACF;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/config/index.ts"],"sourcesContent":["import { defaultConfig } from './default-plugin-config';\n\nexport const config = {\n default: defaultConfig,\n};\n"],"names":["config","default","defaultConfig"],"mappings":";;;;MAEaA,MAAAA,GAAS;IACpBC,OAAAA,EAASC;AACX;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/config/index.ts"],"sourcesContent":["import { defaultConfig } from './default-plugin-config';\n\nexport const config = {\n default: defaultConfig,\n};\n"],"names":["config","default","defaultConfig"],"mappings":";;MAEaA,MAAAA,GAAS;IACpBC,OAAAA,EAASC;AACX;;;;"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('path');
|
|
4
|
+
var bcrypt = require('bcryptjs');
|
|
5
|
+
var fs = require('fs-extra');
|
|
6
|
+
var _ = require('lodash');
|
|
7
|
+
var koaStatic = require('koa-static');
|
|
8
|
+
var utils = require('@strapi/utils');
|
|
9
|
+
var utils$1 = require('../utils.js');
|
|
10
|
+
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
|
|
13
|
+
function _interopNamespaceDefaultOnly (e) { return Object.freeze({ __proto__: null, default: e }); }
|
|
14
|
+
|
|
15
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
16
|
+
var bcrypt__default = /*#__PURE__*/_interopDefault(bcrypt);
|
|
17
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
18
|
+
var ___default = /*#__PURE__*/_interopDefault(_);
|
|
19
|
+
var koaStatic__default = /*#__PURE__*/_interopDefault(koaStatic);
|
|
20
|
+
|
|
21
|
+
const validation = {
|
|
22
|
+
validateSettings: utils.validateYupSchema(utils.yup.object().shape({
|
|
23
|
+
restrictedAccess: utils.yup.boolean(),
|
|
24
|
+
password: utils.yup.string().min(8).matches(/[a-z]/, '${path} must contain at least one lowercase character').matches(/[A-Z]/, '${path} must contain at least one uppercase character').matches(/\d/, '${path} must contain at least one number').when('restrictedAccess', (value, initSchema)=>{
|
|
25
|
+
return value ? initSchema.required('password is required') : initSchema;
|
|
26
|
+
})
|
|
27
|
+
}))
|
|
28
|
+
};
|
|
29
|
+
var documentation = {
|
|
30
|
+
async getInfos (ctx) {
|
|
31
|
+
try {
|
|
32
|
+
const docService = utils$1.getService('documentation');
|
|
33
|
+
const docVersions = docService.getDocumentationVersions();
|
|
34
|
+
const documentationAccess = await docService.getDocumentationAccess();
|
|
35
|
+
ctx.send({
|
|
36
|
+
docVersions,
|
|
37
|
+
currentVersion: docService.getDocumentationVersion(),
|
|
38
|
+
prefix: '/documentation',
|
|
39
|
+
documentationAccess
|
|
40
|
+
});
|
|
41
|
+
} catch (err) {
|
|
42
|
+
strapi.log.error(err);
|
|
43
|
+
ctx.badRequest();
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
async index (ctx, next) {
|
|
47
|
+
try {
|
|
48
|
+
/**
|
|
49
|
+
* We don't expose the specs using koa-static or something else due to security reasons.
|
|
50
|
+
* That's why, we need to read the file localy and send the specs through it when we serve the Swagger UI.
|
|
51
|
+
*/ const { major, minor, patch } = ctx.params;
|
|
52
|
+
const version = major && minor && patch ? `${major}.${minor}.${patch}` : utils$1.getService('documentation').getDocumentationVersion();
|
|
53
|
+
const extensionsDir = strapi.config.environment === 'production' ? strapi.dirs.dist.extensions : strapi.dirs.app.extensions;
|
|
54
|
+
const openAPISpecsPath = path__default.default.join(extensionsDir, 'documentation', 'documentation', version, 'full_documentation.json');
|
|
55
|
+
try {
|
|
56
|
+
const documentation = fs__default.default.readFileSync(openAPISpecsPath, 'utf8');
|
|
57
|
+
const layout = (await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('../public/index.html.js')); })).default;
|
|
58
|
+
const filledLayout = ___default.default.template(layout)({
|
|
59
|
+
backendUrl: strapi.config.server.url,
|
|
60
|
+
spec: JSON.stringify(JSON.parse(documentation))
|
|
61
|
+
});
|
|
62
|
+
try {
|
|
63
|
+
const layoutPath = path__default.default.resolve(extensionsDir, 'documentation', 'public', 'index.html');
|
|
64
|
+
await fs__default.default.ensureFile(layoutPath);
|
|
65
|
+
await fs__default.default.writeFile(layoutPath, filledLayout);
|
|
66
|
+
// Serve the file.
|
|
67
|
+
ctx.url = path__default.default.basename(`${ctx.url}/index.html`);
|
|
68
|
+
try {
|
|
69
|
+
const staticFolder = path__default.default.resolve(extensionsDir, 'documentation', 'public');
|
|
70
|
+
return koaStatic__default.default(staticFolder)(ctx, next);
|
|
71
|
+
} catch (e) {
|
|
72
|
+
strapi.log.error(e);
|
|
73
|
+
}
|
|
74
|
+
} catch (e) {
|
|
75
|
+
strapi.log.error(e);
|
|
76
|
+
}
|
|
77
|
+
} catch (e) {
|
|
78
|
+
strapi.log.error(e);
|
|
79
|
+
}
|
|
80
|
+
} catch (e) {
|
|
81
|
+
strapi.log.error(e);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
async loginView (ctx, next) {
|
|
85
|
+
// lazy require cheerio
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
87
|
+
const cheerio = require('cheerio');
|
|
88
|
+
const { error } = ctx.query;
|
|
89
|
+
try {
|
|
90
|
+
const layout = (await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('../public/login.html.js')); })).default;
|
|
91
|
+
const filledLayout = ___default.default.template(layout.toString())({
|
|
92
|
+
actionUrl: `${strapi.config.server.url}/documentation/login`
|
|
93
|
+
});
|
|
94
|
+
const $ = cheerio.load(filledLayout);
|
|
95
|
+
$('.error').text(___default.default.isEmpty(error) ? '' : 'Wrong password...');
|
|
96
|
+
try {
|
|
97
|
+
const layoutPath = path__default.default.resolve(strapi.dirs.app.extensions, 'documentation', 'public', 'login.html');
|
|
98
|
+
await fs__default.default.ensureFile(layoutPath);
|
|
99
|
+
await fs__default.default.writeFile(layoutPath, $.html());
|
|
100
|
+
ctx.url = path__default.default.basename(`${ctx.url}/login.html`);
|
|
101
|
+
try {
|
|
102
|
+
const staticFolder = path__default.default.resolve(strapi.dirs.app.extensions, 'documentation', 'public');
|
|
103
|
+
return koaStatic__default.default(staticFolder)(ctx, next);
|
|
104
|
+
} catch (e) {
|
|
105
|
+
strapi.log.error(e);
|
|
106
|
+
}
|
|
107
|
+
} catch (e) {
|
|
108
|
+
strapi.log.error(e);
|
|
109
|
+
}
|
|
110
|
+
} catch (e) {
|
|
111
|
+
strapi.log.error(e);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
async login (ctx) {
|
|
115
|
+
const { body: { password } } = ctx.request;
|
|
116
|
+
const { password: hash } = await strapi.store({
|
|
117
|
+
type: 'plugin',
|
|
118
|
+
name: 'documentation',
|
|
119
|
+
key: 'config'
|
|
120
|
+
}).get();
|
|
121
|
+
const isValid = await bcrypt__default.default.compare(password, hash);
|
|
122
|
+
let querystring = '?error=password';
|
|
123
|
+
if (isValid && ctx.session) {
|
|
124
|
+
ctx.session.documentation = {
|
|
125
|
+
logged: true
|
|
126
|
+
};
|
|
127
|
+
querystring = '';
|
|
128
|
+
}
|
|
129
|
+
ctx.redirect(`${strapi.config.server.url}/documentation${querystring}`);
|
|
130
|
+
},
|
|
131
|
+
async regenerateDoc (ctx) {
|
|
132
|
+
const { version } = ctx.request.body;
|
|
133
|
+
const service = utils$1.getService('documentation');
|
|
134
|
+
const documentationVersions = service.getDocumentationVersions().map((el)=>el.version);
|
|
135
|
+
if (___default.default.isEmpty(version)) {
|
|
136
|
+
return ctx.badRequest('Please provide a version.');
|
|
137
|
+
}
|
|
138
|
+
if (!documentationVersions.includes(version)) {
|
|
139
|
+
return ctx.badRequest('The version you are trying to generate does not exist.');
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
strapi.reload.isWatching = false;
|
|
143
|
+
await service.generateFullDoc(version);
|
|
144
|
+
ctx.send({
|
|
145
|
+
ok: true
|
|
146
|
+
});
|
|
147
|
+
} finally{
|
|
148
|
+
strapi.reload.isWatching = true;
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
async deleteDoc (ctx) {
|
|
152
|
+
const { version } = ctx.params;
|
|
153
|
+
const service = utils$1.getService('documentation');
|
|
154
|
+
const documentationVersions = service.getDocumentationVersions().map((el)=>el.version);
|
|
155
|
+
if (___default.default.isEmpty(version)) {
|
|
156
|
+
return ctx.badRequest('Please provide a version.');
|
|
157
|
+
}
|
|
158
|
+
if (!documentationVersions.includes(version)) {
|
|
159
|
+
return ctx.badRequest('The version you are trying to delete does not exist.');
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
strapi.reload.isWatching = false;
|
|
163
|
+
await service.deleteDocumentation(version);
|
|
164
|
+
ctx.send({
|
|
165
|
+
ok: true
|
|
166
|
+
});
|
|
167
|
+
} finally{
|
|
168
|
+
strapi.reload.isWatching = true;
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
async updateSettings (ctx) {
|
|
172
|
+
const pluginStore = strapi.store({
|
|
173
|
+
type: 'plugin',
|
|
174
|
+
name: 'documentation'
|
|
175
|
+
});
|
|
176
|
+
const data = await validation.validateSettings(ctx.request.body);
|
|
177
|
+
const config = {
|
|
178
|
+
restrictedAccess: Boolean(data.restrictedAccess)
|
|
179
|
+
};
|
|
180
|
+
if (data.password) {
|
|
181
|
+
config.password = await bcrypt__default.default.hash(data.password, 10);
|
|
182
|
+
}
|
|
183
|
+
await pluginStore.set({
|
|
184
|
+
key: 'config',
|
|
185
|
+
value: config
|
|
186
|
+
});
|
|
187
|
+
return ctx.send({
|
|
188
|
+
ok: true
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
module.exports = documentation;
|
|
194
|
+
//# sourceMappingURL=documentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentation.js","sources":["../../../server/src/controllers/documentation.ts"],"sourcesContent":["import path from 'path';\nimport bcrypt from 'bcryptjs';\nimport fs from 'fs-extra';\nimport _ from 'lodash';\nimport koaStatic from 'koa-static';\nimport { yup, validateYupSchema } from '@strapi/utils';\n\nimport type Koa from 'koa';\nimport type {} from 'koa-body';\n\nimport { getService } from '../utils';\nimport type { Config } from '../types';\n\nconst validation = {\n validateSettings: validateYupSchema(\n yup.object().shape({\n restrictedAccess: yup.boolean(),\n password: yup\n .string()\n .min(8)\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n .matches(/\\d/, '${path} must contain at least one number')\n .when('restrictedAccess', (value, initSchema) => {\n return value ? initSchema.required('password is required') : initSchema;\n }),\n })\n ),\n};\n\nexport default {\n async getInfos(ctx: Koa.Context) {\n try {\n const docService = getService('documentation');\n const docVersions = docService.getDocumentationVersions();\n const documentationAccess = await docService.getDocumentationAccess();\n\n ctx.send({\n docVersions,\n currentVersion: docService.getDocumentationVersion(),\n prefix: '/documentation',\n documentationAccess,\n });\n } catch (err) {\n strapi.log.error(err);\n ctx.badRequest();\n }\n },\n\n async index(ctx: Koa.Context, next: Koa.Next) {\n try {\n /**\n * We don't expose the specs using koa-static or something else due to security reasons.\n * That's why, we need to read the file localy and send the specs through it when we serve the Swagger UI.\n */\n const { major, minor, patch } = ctx.params;\n const version =\n major && minor && patch\n ? `${major}.${minor}.${patch}`\n : getService('documentation').getDocumentationVersion();\n\n const extensionsDir =\n strapi.config.environment === 'production'\n ? strapi.dirs.dist.extensions\n : strapi.dirs.app.extensions;\n\n const openAPISpecsPath = path.join(\n extensionsDir,\n 'documentation',\n 'documentation',\n version,\n 'full_documentation.json'\n );\n\n try {\n const documentation = fs.readFileSync(openAPISpecsPath, 'utf8');\n\n const layout = (await import('../public/index.html')).default;\n\n const filledLayout = _.template(layout)({\n backendUrl: strapi.config.server.url,\n spec: JSON.stringify(JSON.parse(documentation)),\n });\n\n try {\n const layoutPath = path.resolve(extensionsDir, 'documentation', 'public', 'index.html');\n await fs.ensureFile(layoutPath);\n await fs.writeFile(layoutPath, filledLayout);\n\n // Serve the file.\n ctx.url = path.basename(`${ctx.url}/index.html`);\n\n try {\n const staticFolder = path.resolve(extensionsDir, 'documentation', 'public');\n return koaStatic(staticFolder)(ctx, next);\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n },\n\n async loginView(ctx: Koa.Context, next: Koa.Next) {\n // lazy require cheerio\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const cheerio = require('cheerio');\n\n const { error } = ctx.query;\n\n try {\n const layout = (await import('../public/login.html')).default;\n\n const filledLayout = _.template(layout.toString())({\n actionUrl: `${strapi.config.server.url}/documentation/login`,\n });\n\n const $ = cheerio.load(filledLayout);\n\n $('.error').text(_.isEmpty(error) ? '' : 'Wrong password...');\n\n try {\n const layoutPath = path.resolve(\n strapi.dirs.app.extensions,\n 'documentation',\n 'public',\n 'login.html'\n );\n await fs.ensureFile(layoutPath);\n await fs.writeFile(layoutPath, $.html());\n\n ctx.url = path.basename(`${ctx.url}/login.html`);\n\n try {\n const staticFolder = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public');\n return koaStatic(staticFolder)(ctx, next);\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n },\n\n async login(ctx: Koa.Context) {\n const {\n body: { password },\n } = ctx.request;\n\n const { password: hash } = (await strapi\n .store({ type: 'plugin', name: 'documentation', key: 'config' })\n .get()) as { password: string };\n\n const isValid = await bcrypt.compare(password, hash);\n\n let querystring = '?error=password';\n\n if (isValid && ctx.session) {\n ctx.session.documentation = {\n logged: true,\n };\n\n querystring = '';\n }\n\n ctx.redirect(`${strapi.config.server.url}/documentation${querystring}`);\n },\n\n async regenerateDoc(ctx: Koa.Context) {\n const { version } = ctx.request.body;\n\n const service = getService('documentation');\n\n const documentationVersions = service.getDocumentationVersions().map((el) => el.version);\n\n if (_.isEmpty(version)) {\n return ctx.badRequest('Please provide a version.');\n }\n\n if (!documentationVersions.includes(version)) {\n return ctx.badRequest('The version you are trying to generate does not exist.');\n }\n\n try {\n strapi.reload.isWatching = false;\n await service.generateFullDoc(version);\n ctx.send({ ok: true });\n } finally {\n strapi.reload.isWatching = true;\n }\n },\n\n async deleteDoc(ctx: Koa.Context) {\n const { version } = ctx.params;\n\n const service = getService('documentation');\n\n const documentationVersions = service.getDocumentationVersions().map((el) => el.version);\n\n if (_.isEmpty(version)) {\n return ctx.badRequest('Please provide a version.');\n }\n\n if (!documentationVersions.includes(version)) {\n return ctx.badRequest('The version you are trying to delete does not exist.');\n }\n\n try {\n strapi.reload.isWatching = false;\n await service.deleteDocumentation(version);\n ctx.send({ ok: true });\n } finally {\n strapi.reload.isWatching = true;\n }\n },\n\n async updateSettings(ctx: Koa.Context) {\n const pluginStore = strapi.store({ type: 'plugin', name: 'documentation' });\n\n const data = await validation.validateSettings(ctx.request.body);\n\n const config: Config = {\n restrictedAccess: Boolean(data.restrictedAccess),\n };\n\n if (data.password) {\n config.password = await bcrypt.hash(data.password, 10);\n }\n\n await pluginStore.set({ key: 'config', value: config });\n\n return ctx.send({ ok: true });\n },\n};\n"],"names":["validation","validateSettings","validateYupSchema","yup","object","shape","restrictedAccess","boolean","password","string","min","matches","when","value","initSchema","required","getInfos","ctx","docService","getService","docVersions","getDocumentationVersions","documentationAccess","getDocumentationAccess","send","currentVersion","getDocumentationVersion","prefix","err","strapi","log","error","badRequest","index","next","major","minor","patch","params","version","extensionsDir","config","environment","dirs","dist","extensions","app","openAPISpecsPath","path","join","documentation","fs","readFileSync","layout","default","filledLayout","_","template","backendUrl","server","url","spec","JSON","stringify","parse","layoutPath","resolve","ensureFile","writeFile","basename","staticFolder","koaStatic","e","loginView","cheerio","require","query","toString","actionUrl","$","load","text","isEmpty","html","login","body","request","hash","store","type","name","key","get","isValid","bcrypt","compare","querystring","session","logged","redirect","regenerateDoc","service","documentationVersions","map","el","includes","reload","isWatching","generateFullDoc","ok","deleteDoc","deleteDocumentation","updateSettings","pluginStore","data","Boolean","set"],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import bcrypt from 'bcryptjs';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import koaStatic from 'koa-static';
|
|
6
|
+
import { validateYupSchema, yup } from '@strapi/utils';
|
|
7
|
+
import { getService } from '../utils.mjs';
|
|
8
|
+
|
|
9
|
+
const validation = {
|
|
10
|
+
validateSettings: validateYupSchema(yup.object().shape({
|
|
11
|
+
restrictedAccess: yup.boolean(),
|
|
12
|
+
password: yup.string().min(8).matches(/[a-z]/, '${path} must contain at least one lowercase character').matches(/[A-Z]/, '${path} must contain at least one uppercase character').matches(/\d/, '${path} must contain at least one number').when('restrictedAccess', (value, initSchema)=>{
|
|
13
|
+
return value ? initSchema.required('password is required') : initSchema;
|
|
14
|
+
})
|
|
15
|
+
}))
|
|
16
|
+
};
|
|
17
|
+
var documentation = {
|
|
18
|
+
async getInfos (ctx) {
|
|
19
|
+
try {
|
|
20
|
+
const docService = getService('documentation');
|
|
21
|
+
const docVersions = docService.getDocumentationVersions();
|
|
22
|
+
const documentationAccess = await docService.getDocumentationAccess();
|
|
23
|
+
ctx.send({
|
|
24
|
+
docVersions,
|
|
25
|
+
currentVersion: docService.getDocumentationVersion(),
|
|
26
|
+
prefix: '/documentation',
|
|
27
|
+
documentationAccess
|
|
28
|
+
});
|
|
29
|
+
} catch (err) {
|
|
30
|
+
strapi.log.error(err);
|
|
31
|
+
ctx.badRequest();
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
async index (ctx, next) {
|
|
35
|
+
try {
|
|
36
|
+
/**
|
|
37
|
+
* We don't expose the specs using koa-static or something else due to security reasons.
|
|
38
|
+
* That's why, we need to read the file localy and send the specs through it when we serve the Swagger UI.
|
|
39
|
+
*/ const { major, minor, patch } = ctx.params;
|
|
40
|
+
const version = major && minor && patch ? `${major}.${minor}.${patch}` : getService('documentation').getDocumentationVersion();
|
|
41
|
+
const extensionsDir = strapi.config.environment === 'production' ? strapi.dirs.dist.extensions : strapi.dirs.app.extensions;
|
|
42
|
+
const openAPISpecsPath = path.join(extensionsDir, 'documentation', 'documentation', version, 'full_documentation.json');
|
|
43
|
+
try {
|
|
44
|
+
const documentation = fs.readFileSync(openAPISpecsPath, 'utf8');
|
|
45
|
+
const layout = (await import('../public/index.html.mjs')).default;
|
|
46
|
+
const filledLayout = _.template(layout)({
|
|
47
|
+
backendUrl: strapi.config.server.url,
|
|
48
|
+
spec: JSON.stringify(JSON.parse(documentation))
|
|
49
|
+
});
|
|
50
|
+
try {
|
|
51
|
+
const layoutPath = path.resolve(extensionsDir, 'documentation', 'public', 'index.html');
|
|
52
|
+
await fs.ensureFile(layoutPath);
|
|
53
|
+
await fs.writeFile(layoutPath, filledLayout);
|
|
54
|
+
// Serve the file.
|
|
55
|
+
ctx.url = path.basename(`${ctx.url}/index.html`);
|
|
56
|
+
try {
|
|
57
|
+
const staticFolder = path.resolve(extensionsDir, 'documentation', 'public');
|
|
58
|
+
return koaStatic(staticFolder)(ctx, next);
|
|
59
|
+
} catch (e) {
|
|
60
|
+
strapi.log.error(e);
|
|
61
|
+
}
|
|
62
|
+
} catch (e) {
|
|
63
|
+
strapi.log.error(e);
|
|
64
|
+
}
|
|
65
|
+
} catch (e) {
|
|
66
|
+
strapi.log.error(e);
|
|
67
|
+
}
|
|
68
|
+
} catch (e) {
|
|
69
|
+
strapi.log.error(e);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
async loginView (ctx, next) {
|
|
73
|
+
// lazy require cheerio
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
75
|
+
const cheerio = require('cheerio');
|
|
76
|
+
const { error } = ctx.query;
|
|
77
|
+
try {
|
|
78
|
+
const layout = (await import('../public/login.html.mjs')).default;
|
|
79
|
+
const filledLayout = _.template(layout.toString())({
|
|
80
|
+
actionUrl: `${strapi.config.server.url}/documentation/login`
|
|
81
|
+
});
|
|
82
|
+
const $ = cheerio.load(filledLayout);
|
|
83
|
+
$('.error').text(_.isEmpty(error) ? '' : 'Wrong password...');
|
|
84
|
+
try {
|
|
85
|
+
const layoutPath = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public', 'login.html');
|
|
86
|
+
await fs.ensureFile(layoutPath);
|
|
87
|
+
await fs.writeFile(layoutPath, $.html());
|
|
88
|
+
ctx.url = path.basename(`${ctx.url}/login.html`);
|
|
89
|
+
try {
|
|
90
|
+
const staticFolder = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public');
|
|
91
|
+
return koaStatic(staticFolder)(ctx, next);
|
|
92
|
+
} catch (e) {
|
|
93
|
+
strapi.log.error(e);
|
|
94
|
+
}
|
|
95
|
+
} catch (e) {
|
|
96
|
+
strapi.log.error(e);
|
|
97
|
+
}
|
|
98
|
+
} catch (e) {
|
|
99
|
+
strapi.log.error(e);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
async login (ctx) {
|
|
103
|
+
const { body: { password } } = ctx.request;
|
|
104
|
+
const { password: hash } = await strapi.store({
|
|
105
|
+
type: 'plugin',
|
|
106
|
+
name: 'documentation',
|
|
107
|
+
key: 'config'
|
|
108
|
+
}).get();
|
|
109
|
+
const isValid = await bcrypt.compare(password, hash);
|
|
110
|
+
let querystring = '?error=password';
|
|
111
|
+
if (isValid && ctx.session) {
|
|
112
|
+
ctx.session.documentation = {
|
|
113
|
+
logged: true
|
|
114
|
+
};
|
|
115
|
+
querystring = '';
|
|
116
|
+
}
|
|
117
|
+
ctx.redirect(`${strapi.config.server.url}/documentation${querystring}`);
|
|
118
|
+
},
|
|
119
|
+
async regenerateDoc (ctx) {
|
|
120
|
+
const { version } = ctx.request.body;
|
|
121
|
+
const service = getService('documentation');
|
|
122
|
+
const documentationVersions = service.getDocumentationVersions().map((el)=>el.version);
|
|
123
|
+
if (_.isEmpty(version)) {
|
|
124
|
+
return ctx.badRequest('Please provide a version.');
|
|
125
|
+
}
|
|
126
|
+
if (!documentationVersions.includes(version)) {
|
|
127
|
+
return ctx.badRequest('The version you are trying to generate does not exist.');
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
strapi.reload.isWatching = false;
|
|
131
|
+
await service.generateFullDoc(version);
|
|
132
|
+
ctx.send({
|
|
133
|
+
ok: true
|
|
134
|
+
});
|
|
135
|
+
} finally{
|
|
136
|
+
strapi.reload.isWatching = true;
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
async deleteDoc (ctx) {
|
|
140
|
+
const { version } = ctx.params;
|
|
141
|
+
const service = getService('documentation');
|
|
142
|
+
const documentationVersions = service.getDocumentationVersions().map((el)=>el.version);
|
|
143
|
+
if (_.isEmpty(version)) {
|
|
144
|
+
return ctx.badRequest('Please provide a version.');
|
|
145
|
+
}
|
|
146
|
+
if (!documentationVersions.includes(version)) {
|
|
147
|
+
return ctx.badRequest('The version you are trying to delete does not exist.');
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
strapi.reload.isWatching = false;
|
|
151
|
+
await service.deleteDocumentation(version);
|
|
152
|
+
ctx.send({
|
|
153
|
+
ok: true
|
|
154
|
+
});
|
|
155
|
+
} finally{
|
|
156
|
+
strapi.reload.isWatching = true;
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
async updateSettings (ctx) {
|
|
160
|
+
const pluginStore = strapi.store({
|
|
161
|
+
type: 'plugin',
|
|
162
|
+
name: 'documentation'
|
|
163
|
+
});
|
|
164
|
+
const data = await validation.validateSettings(ctx.request.body);
|
|
165
|
+
const config = {
|
|
166
|
+
restrictedAccess: Boolean(data.restrictedAccess)
|
|
167
|
+
};
|
|
168
|
+
if (data.password) {
|
|
169
|
+
config.password = await bcrypt.hash(data.password, 10);
|
|
170
|
+
}
|
|
171
|
+
await pluginStore.set({
|
|
172
|
+
key: 'config',
|
|
173
|
+
value: config
|
|
174
|
+
});
|
|
175
|
+
return ctx.send({
|
|
176
|
+
ok: true
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export { documentation as default };
|
|
182
|
+
//# sourceMappingURL=documentation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentation.mjs","sources":["../../../server/src/controllers/documentation.ts"],"sourcesContent":["import path from 'path';\nimport bcrypt from 'bcryptjs';\nimport fs from 'fs-extra';\nimport _ from 'lodash';\nimport koaStatic from 'koa-static';\nimport { yup, validateYupSchema } from '@strapi/utils';\n\nimport type Koa from 'koa';\nimport type {} from 'koa-body';\n\nimport { getService } from '../utils';\nimport type { Config } from '../types';\n\nconst validation = {\n validateSettings: validateYupSchema(\n yup.object().shape({\n restrictedAccess: yup.boolean(),\n password: yup\n .string()\n .min(8)\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n .matches(/\\d/, '${path} must contain at least one number')\n .when('restrictedAccess', (value, initSchema) => {\n return value ? initSchema.required('password is required') : initSchema;\n }),\n })\n ),\n};\n\nexport default {\n async getInfos(ctx: Koa.Context) {\n try {\n const docService = getService('documentation');\n const docVersions = docService.getDocumentationVersions();\n const documentationAccess = await docService.getDocumentationAccess();\n\n ctx.send({\n docVersions,\n currentVersion: docService.getDocumentationVersion(),\n prefix: '/documentation',\n documentationAccess,\n });\n } catch (err) {\n strapi.log.error(err);\n ctx.badRequest();\n }\n },\n\n async index(ctx: Koa.Context, next: Koa.Next) {\n try {\n /**\n * We don't expose the specs using koa-static or something else due to security reasons.\n * That's why, we need to read the file localy and send the specs through it when we serve the Swagger UI.\n */\n const { major, minor, patch } = ctx.params;\n const version =\n major && minor && patch\n ? `${major}.${minor}.${patch}`\n : getService('documentation').getDocumentationVersion();\n\n const extensionsDir =\n strapi.config.environment === 'production'\n ? strapi.dirs.dist.extensions\n : strapi.dirs.app.extensions;\n\n const openAPISpecsPath = path.join(\n extensionsDir,\n 'documentation',\n 'documentation',\n version,\n 'full_documentation.json'\n );\n\n try {\n const documentation = fs.readFileSync(openAPISpecsPath, 'utf8');\n\n const layout = (await import('../public/index.html')).default;\n\n const filledLayout = _.template(layout)({\n backendUrl: strapi.config.server.url,\n spec: JSON.stringify(JSON.parse(documentation)),\n });\n\n try {\n const layoutPath = path.resolve(extensionsDir, 'documentation', 'public', 'index.html');\n await fs.ensureFile(layoutPath);\n await fs.writeFile(layoutPath, filledLayout);\n\n // Serve the file.\n ctx.url = path.basename(`${ctx.url}/index.html`);\n\n try {\n const staticFolder = path.resolve(extensionsDir, 'documentation', 'public');\n return koaStatic(staticFolder)(ctx, next);\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n },\n\n async loginView(ctx: Koa.Context, next: Koa.Next) {\n // lazy require cheerio\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const cheerio = require('cheerio');\n\n const { error } = ctx.query;\n\n try {\n const layout = (await import('../public/login.html')).default;\n\n const filledLayout = _.template(layout.toString())({\n actionUrl: `${strapi.config.server.url}/documentation/login`,\n });\n\n const $ = cheerio.load(filledLayout);\n\n $('.error').text(_.isEmpty(error) ? '' : 'Wrong password...');\n\n try {\n const layoutPath = path.resolve(\n strapi.dirs.app.extensions,\n 'documentation',\n 'public',\n 'login.html'\n );\n await fs.ensureFile(layoutPath);\n await fs.writeFile(layoutPath, $.html());\n\n ctx.url = path.basename(`${ctx.url}/login.html`);\n\n try {\n const staticFolder = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public');\n return koaStatic(staticFolder)(ctx, next);\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n },\n\n async login(ctx: Koa.Context) {\n const {\n body: { password },\n } = ctx.request;\n\n const { password: hash } = (await strapi\n .store({ type: 'plugin', name: 'documentation', key: 'config' })\n .get()) as { password: string };\n\n const isValid = await bcrypt.compare(password, hash);\n\n let querystring = '?error=password';\n\n if (isValid && ctx.session) {\n ctx.session.documentation = {\n logged: true,\n };\n\n querystring = '';\n }\n\n ctx.redirect(`${strapi.config.server.url}/documentation${querystring}`);\n },\n\n async regenerateDoc(ctx: Koa.Context) {\n const { version } = ctx.request.body;\n\n const service = getService('documentation');\n\n const documentationVersions = service.getDocumentationVersions().map((el) => el.version);\n\n if (_.isEmpty(version)) {\n return ctx.badRequest('Please provide a version.');\n }\n\n if (!documentationVersions.includes(version)) {\n return ctx.badRequest('The version you are trying to generate does not exist.');\n }\n\n try {\n strapi.reload.isWatching = false;\n await service.generateFullDoc(version);\n ctx.send({ ok: true });\n } finally {\n strapi.reload.isWatching = true;\n }\n },\n\n async deleteDoc(ctx: Koa.Context) {\n const { version } = ctx.params;\n\n const service = getService('documentation');\n\n const documentationVersions = service.getDocumentationVersions().map((el) => el.version);\n\n if (_.isEmpty(version)) {\n return ctx.badRequest('Please provide a version.');\n }\n\n if (!documentationVersions.includes(version)) {\n return ctx.badRequest('The version you are trying to delete does not exist.');\n }\n\n try {\n strapi.reload.isWatching = false;\n await service.deleteDocumentation(version);\n ctx.send({ ok: true });\n } finally {\n strapi.reload.isWatching = true;\n }\n },\n\n async updateSettings(ctx: Koa.Context) {\n const pluginStore = strapi.store({ type: 'plugin', name: 'documentation' });\n\n const data = await validation.validateSettings(ctx.request.body);\n\n const config: Config = {\n restrictedAccess: Boolean(data.restrictedAccess),\n };\n\n if (data.password) {\n config.password = await bcrypt.hash(data.password, 10);\n }\n\n await pluginStore.set({ key: 'config', value: config });\n\n return ctx.send({ ok: true });\n },\n};\n"],"names":["validation","validateSettings","validateYupSchema","yup","object","shape","restrictedAccess","boolean","password","string","min","matches","when","value","initSchema","required","getInfos","ctx","docService","getService","docVersions","getDocumentationVersions","documentationAccess","getDocumentationAccess","send","currentVersion","getDocumentationVersion","prefix","err","strapi","log","error","badRequest","index","next","major","minor","patch","params","version","extensionsDir","config","environment","dirs","dist","extensions","app","openAPISpecsPath","path","join","documentation","fs","readFileSync","layout","default","filledLayout","_","template","backendUrl","server","url","spec","JSON","stringify","parse","layoutPath","resolve","ensureFile","writeFile","basename","staticFolder","koaStatic","e","loginView","cheerio","require","query","toString","actionUrl","$","load","text","isEmpty","html","login","body","request","hash","store","type","name","key","get","isValid","bcrypt","compare","querystring","session","logged","redirect","regenerateDoc","service","documentationVersions","map","el","includes","reload","isWatching","generateFullDoc","ok","deleteDoc","deleteDocumentation","updateSettings","pluginStore","data","Boolean","set"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import documentation from './documentation';\n\nexport default {\n documentation,\n};\n"],"names":["documentation"],"mappings":";;;;AAEA,kBAAe;AACbA,IAAAA;AACF,CAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import documentation from './documentation';\n\nexport default {\n documentation,\n};\n"],"names":["documentation"],"mappings":";;AAEA,kBAAe;AACbA,IAAAA;AACF,CAAA;;;;"}
|