@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.
Files changed (396) hide show
  1. package/LICENSE +18 -3
  2. package/README.md +2 -2
  3. package/dist/admin/components/SettingsForm.js +203 -0
  4. package/dist/admin/components/SettingsForm.js.map +1 -0
  5. package/dist/admin/components/SettingsForm.mjs +180 -0
  6. package/dist/admin/components/SettingsForm.mjs.map +1 -0
  7. package/dist/admin/constants.js +47 -0
  8. package/dist/admin/constants.js.map +1 -0
  9. package/dist/admin/constants.mjs +45 -0
  10. package/dist/admin/constants.mjs.map +1 -0
  11. package/dist/admin/index.js +96 -4
  12. package/dist/admin/index.js.map +1 -1
  13. package/dist/admin/index.mjs +91 -4
  14. package/dist/admin/index.mjs.map +1 -1
  15. package/dist/admin/pages/App.js +254 -0
  16. package/dist/admin/pages/App.js.map +1 -0
  17. package/dist/admin/pages/App.mjs +232 -0
  18. package/dist/admin/pages/App.mjs.map +1 -0
  19. package/dist/admin/pages/Settings.js +54 -0
  20. package/dist/admin/pages/Settings.js.map +1 -0
  21. package/dist/admin/pages/Settings.mjs +52 -0
  22. package/dist/admin/pages/Settings.mjs.map +1 -0
  23. package/dist/admin/pluginId.js +6 -0
  24. package/dist/admin/pluginId.js.map +1 -0
  25. package/dist/admin/pluginId.mjs +4 -0
  26. package/dist/admin/pluginId.mjs.map +1 -0
  27. package/dist/admin/services/api.js +55 -0
  28. package/dist/admin/services/api.js.map +1 -0
  29. package/dist/admin/services/api.mjs +50 -0
  30. package/dist/admin/services/api.mjs.map +1 -0
  31. package/dist/admin/src/index.d.ts +3 -2
  32. package/dist/admin/src/pages/tests/App.test.d.ts +1 -0
  33. package/dist/admin/src/pages/tests/Settings.test.d.ts +1 -0
  34. package/dist/admin/src/services/api.d.ts +4 -4
  35. package/dist/admin/translations/ar.json.js +25 -0
  36. package/dist/admin/translations/ar.json.js.map +1 -0
  37. package/dist/admin/translations/ar.json.mjs +23 -0
  38. package/dist/admin/translations/ar.json.mjs.map +1 -0
  39. package/dist/admin/translations/cs.json.js +47 -0
  40. package/dist/admin/translations/cs.json.js.map +1 -0
  41. package/dist/admin/translations/cs.json.mjs +45 -0
  42. package/dist/admin/translations/cs.json.mjs.map +1 -0
  43. package/dist/admin/translations/da.json.js +44 -0
  44. package/dist/admin/translations/da.json.js.map +1 -0
  45. package/dist/admin/translations/da.json.mjs +42 -0
  46. package/dist/admin/translations/da.json.mjs.map +1 -0
  47. package/dist/admin/translations/de.json.js +47 -0
  48. package/dist/admin/translations/de.json.js.map +1 -0
  49. package/dist/admin/translations/de.json.mjs +45 -0
  50. package/dist/admin/translations/de.json.mjs.map +1 -0
  51. package/dist/admin/translations/en.json.js +47 -0
  52. package/dist/admin/translations/en.json.js.map +1 -0
  53. package/dist/admin/translations/en.json.mjs +45 -0
  54. package/dist/admin/translations/en.json.mjs.map +1 -0
  55. package/dist/admin/translations/es.json.js +47 -0
  56. package/dist/admin/translations/es.json.js.map +1 -0
  57. package/dist/admin/translations/es.json.mjs +45 -0
  58. package/dist/admin/translations/es.json.mjs.map +1 -0
  59. package/dist/admin/translations/fr.json.js +31 -0
  60. package/dist/admin/translations/fr.json.js.map +1 -0
  61. package/dist/admin/translations/fr.json.mjs +29 -0
  62. package/dist/admin/translations/fr.json.mjs.map +1 -0
  63. package/dist/admin/translations/id.json.js +29 -0
  64. package/dist/admin/translations/id.json.js.map +1 -0
  65. package/dist/admin/translations/id.json.mjs +27 -0
  66. package/dist/admin/translations/id.json.mjs.map +1 -0
  67. package/dist/admin/translations/it.json.js +31 -0
  68. package/dist/admin/translations/it.json.js.map +1 -0
  69. package/dist/admin/translations/it.json.mjs +29 -0
  70. package/dist/admin/translations/it.json.mjs.map +1 -0
  71. package/dist/admin/translations/ko.json.js +44 -0
  72. package/dist/admin/translations/ko.json.js.map +1 -0
  73. package/dist/admin/translations/ko.json.mjs +42 -0
  74. package/dist/admin/translations/ko.json.mjs.map +1 -0
  75. package/dist/admin/translations/ms.json.js +28 -0
  76. package/dist/admin/translations/ms.json.js.map +1 -0
  77. package/dist/admin/translations/ms.json.mjs +26 -0
  78. package/dist/admin/translations/ms.json.mjs.map +1 -0
  79. package/dist/admin/translations/nl.json.js +26 -0
  80. package/dist/admin/translations/nl.json.js.map +1 -0
  81. package/dist/admin/translations/nl.json.mjs +24 -0
  82. package/dist/admin/translations/nl.json.mjs.map +1 -0
  83. package/dist/admin/translations/pl.json.js +47 -0
  84. package/dist/admin/translations/pl.json.js.map +1 -0
  85. package/dist/admin/translations/pl.json.mjs +45 -0
  86. package/dist/admin/translations/pl.json.mjs.map +1 -0
  87. package/dist/admin/translations/pt-BR.json.js +26 -0
  88. package/dist/admin/translations/pt-BR.json.js.map +1 -0
  89. package/dist/admin/translations/pt-BR.json.mjs +24 -0
  90. package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
  91. package/dist/admin/translations/pt.json.js +26 -0
  92. package/dist/admin/translations/pt.json.js.map +1 -0
  93. package/dist/admin/translations/pt.json.mjs +24 -0
  94. package/dist/admin/translations/pt.json.mjs.map +1 -0
  95. package/dist/admin/translations/ru.json.js +47 -0
  96. package/dist/admin/translations/ru.json.js.map +1 -0
  97. package/dist/admin/translations/ru.json.mjs +45 -0
  98. package/dist/admin/translations/ru.json.mjs.map +1 -0
  99. package/dist/admin/translations/sk.json.js +47 -0
  100. package/dist/admin/translations/sk.json.js.map +1 -0
  101. package/dist/admin/translations/sk.json.mjs +45 -0
  102. package/dist/admin/translations/sk.json.mjs.map +1 -0
  103. package/dist/admin/translations/sv.json.js +44 -0
  104. package/dist/admin/translations/sv.json.js.map +1 -0
  105. package/dist/admin/translations/sv.json.mjs +42 -0
  106. package/dist/admin/translations/sv.json.mjs.map +1 -0
  107. package/dist/admin/translations/th.json.js +29 -0
  108. package/dist/admin/translations/th.json.js.map +1 -0
  109. package/dist/admin/translations/th.json.mjs +27 -0
  110. package/dist/admin/translations/th.json.mjs.map +1 -0
  111. package/dist/admin/translations/tr.json.js +44 -0
  112. package/dist/admin/translations/tr.json.js.map +1 -0
  113. package/dist/admin/translations/tr.json.mjs +42 -0
  114. package/dist/admin/translations/tr.json.mjs.map +1 -0
  115. package/dist/admin/translations/uk.json.js +47 -0
  116. package/dist/admin/translations/uk.json.js.map +1 -0
  117. package/dist/admin/translations/uk.json.mjs +45 -0
  118. package/dist/admin/translations/uk.json.mjs.map +1 -0
  119. package/dist/admin/translations/vi.json.js +29 -0
  120. package/dist/admin/translations/vi.json.js.map +1 -0
  121. package/dist/admin/translations/vi.json.mjs +27 -0
  122. package/dist/admin/translations/vi.json.mjs.map +1 -0
  123. package/dist/admin/translations/zh-Hans.json.js +33 -0
  124. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  125. package/dist/admin/translations/zh-Hans.json.mjs +31 -0
  126. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  127. package/dist/admin/translations/zh.json.js +44 -0
  128. package/dist/admin/translations/zh.json.js.map +1 -0
  129. package/dist/admin/translations/zh.json.mjs +42 -0
  130. package/dist/admin/translations/zh.json.mjs.map +1 -0
  131. package/dist/admin/utils/baseQuery.js +8 -0
  132. package/dist/admin/utils/baseQuery.js.map +1 -0
  133. package/dist/admin/utils/baseQuery.mjs +6 -0
  134. package/dist/admin/utils/baseQuery.mjs.map +1 -0
  135. package/dist/admin/utils/getTrad.js +8 -0
  136. package/dist/admin/utils/getTrad.js.map +1 -0
  137. package/dist/admin/utils/getTrad.mjs +6 -0
  138. package/dist/admin/utils/getTrad.mjs.map +1 -0
  139. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  140. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  141. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  142. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  143. package/dist/server/bootstrap.js +57 -0
  144. package/dist/server/bootstrap.js.map +1 -0
  145. package/dist/server/bootstrap.mjs +55 -0
  146. package/dist/server/bootstrap.mjs.map +1 -0
  147. package/dist/server/config/default-plugin-config.js +88 -0
  148. package/dist/server/config/default-plugin-config.js.map +1 -0
  149. package/dist/server/config/default-plugin-config.mjs +86 -0
  150. package/dist/server/config/default-plugin-config.mjs.map +1 -0
  151. package/dist/server/config/index.js +10 -0
  152. package/dist/server/config/index.js.map +1 -0
  153. package/dist/server/config/index.mjs +8 -0
  154. package/dist/server/config/index.mjs.map +1 -0
  155. package/dist/server/controllers/documentation.js +194 -0
  156. package/dist/server/controllers/documentation.js.map +1 -0
  157. package/dist/server/controllers/documentation.mjs +182 -0
  158. package/dist/server/controllers/documentation.mjs.map +1 -0
  159. package/dist/server/controllers/index.js +10 -0
  160. package/dist/server/controllers/index.js.map +1 -0
  161. package/dist/server/controllers/index.mjs +8 -0
  162. package/dist/server/controllers/index.mjs.map +1 -0
  163. package/dist/server/index.js +18 -1261
  164. package/dist/server/index.js.map +1 -1
  165. package/dist/server/index.mjs +17 -1237
  166. package/dist/server/index.mjs.map +1 -1
  167. package/dist/server/middlewares/documentation.js +33 -0
  168. package/dist/server/middlewares/documentation.js.map +1 -0
  169. package/dist/server/middlewares/documentation.mjs +25 -0
  170. package/dist/server/middlewares/documentation.mjs.map +1 -0
  171. package/dist/server/middlewares/restrict-access.js +23 -0
  172. package/dist/server/middlewares/restrict-access.js.map +1 -0
  173. package/dist/server/middlewares/restrict-access.mjs +21 -0
  174. package/dist/server/middlewares/restrict-access.mjs.map +1 -0
  175. package/dist/server/public/index.html.js +6 -0
  176. package/dist/server/public/index.html.js.map +1 -0
  177. package/dist/server/public/index.html.mjs +4 -0
  178. package/dist/server/public/index.html.mjs.map +1 -0
  179. package/dist/server/public/login.html.js +6 -0
  180. package/dist/server/public/login.html.js.map +1 -0
  181. package/dist/server/public/login.html.mjs +4 -0
  182. package/dist/server/public/login.html.mjs.map +1 -0
  183. package/dist/server/register.js +12 -0
  184. package/dist/server/register.js.map +1 -0
  185. package/dist/server/register.mjs +10 -0
  186. package/dist/server/register.mjs.map +1 -0
  187. package/dist/server/routes/index.js +106 -0
  188. package/dist/server/routes/index.js.map +1 -0
  189. package/dist/server/routes/index.mjs +104 -0
  190. package/dist/server/routes/index.mjs.map +1 -0
  191. package/dist/server/services/documentation.js +193 -0
  192. package/dist/server/services/documentation.js.map +1 -0
  193. package/dist/server/services/documentation.mjs +186 -0
  194. package/dist/server/services/documentation.mjs.map +1 -0
  195. package/dist/server/services/helpers/build-api-endpoint-path.js +166 -0
  196. package/dist/server/services/helpers/build-api-endpoint-path.js.map +1 -0
  197. package/dist/server/services/helpers/build-api-endpoint-path.mjs +141 -0
  198. package/dist/server/services/helpers/build-api-endpoint-path.mjs.map +1 -0
  199. package/dist/server/services/helpers/build-component-schema.js +178 -0
  200. package/dist/server/services/helpers/build-component-schema.js.map +1 -0
  201. package/dist/server/services/helpers/build-component-schema.mjs +172 -0
  202. package/dist/server/services/helpers/build-component-schema.mjs.map +1 -0
  203. package/dist/server/services/helpers/utils/clean-schema-attributes.js +315 -0
  204. package/dist/server/services/helpers/utils/clean-schema-attributes.js.map +1 -0
  205. package/dist/server/services/helpers/utils/clean-schema-attributes.mjs +313 -0
  206. package/dist/server/services/helpers/utils/clean-schema-attributes.mjs.map +1 -0
  207. package/dist/server/services/helpers/utils/get-api-responses.js +88 -0
  208. package/dist/server/services/helpers/utils/get-api-responses.js.map +1 -0
  209. package/dist/server/services/helpers/utils/get-api-responses.mjs +86 -0
  210. package/dist/server/services/helpers/utils/get-api-responses.mjs.map +1 -0
  211. package/dist/server/services/helpers/utils/get-schema-data.js +57 -0
  212. package/dist/server/services/helpers/utils/get-schema-data.js.map +1 -0
  213. package/dist/server/services/helpers/utils/get-schema-data.mjs +55 -0
  214. package/dist/server/services/helpers/utils/get-schema-data.mjs.map +1 -0
  215. package/dist/server/services/helpers/utils/loop-content-type-names.js +44 -0
  216. package/dist/server/services/helpers/utils/loop-content-type-names.js.map +1 -0
  217. package/dist/server/services/helpers/utils/loop-content-type-names.mjs +38 -0
  218. package/dist/server/services/helpers/utils/loop-content-type-names.mjs.map +1 -0
  219. package/dist/server/services/helpers/utils/pascal-case.js +14 -0
  220. package/dist/server/services/helpers/utils/pascal-case.js.map +1 -0
  221. package/dist/server/services/helpers/utils/pascal-case.mjs +8 -0
  222. package/dist/server/services/helpers/utils/pascal-case.mjs.map +1 -0
  223. package/dist/server/services/helpers/utils/query-params.js +109 -0
  224. package/dist/server/services/helpers/utils/query-params.js.map +1 -0
  225. package/dist/server/services/helpers/utils/query-params.mjs +107 -0
  226. package/dist/server/services/helpers/utils/query-params.mjs.map +1 -0
  227. package/dist/server/services/helpers/utils/routes.js +11 -0
  228. package/dist/server/services/helpers/utils/routes.js.map +1 -0
  229. package/dist/server/services/helpers/utils/routes.mjs +9 -0
  230. package/dist/server/services/helpers/utils/routes.mjs.map +1 -0
  231. package/dist/server/services/index.js +13 -0
  232. package/dist/server/services/index.js.map +1 -0
  233. package/dist/server/services/index.mjs +11 -0
  234. package/dist/server/services/index.mjs.map +1 -0
  235. package/dist/server/services/override.js +45 -0
  236. package/dist/server/services/override.js.map +1 -0
  237. package/dist/server/services/override.mjs +43 -0
  238. package/dist/server/services/override.mjs.map +1 -0
  239. package/dist/server/services/utils/get-plugins-that-need-documentation.js +24 -0
  240. package/dist/server/services/utils/get-plugins-that-need-documentation.js.map +1 -0
  241. package/dist/server/services/utils/get-plugins-that-need-documentation.mjs +22 -0
  242. package/dist/server/services/utils/get-plugins-that-need-documentation.mjs.map +1 -0
  243. package/dist/server/src/bootstrap.d.ts.map +1 -1
  244. package/dist/server/src/controllers/documentation.d.ts +2 -2
  245. package/dist/server/src/controllers/documentation.d.ts.map +1 -1
  246. package/dist/server/src/controllers/index.d.ts +2 -3
  247. package/dist/server/src/controllers/index.d.ts.map +1 -1
  248. package/dist/server/src/index.d.ts +5 -6
  249. package/dist/server/src/index.d.ts.map +1 -1
  250. package/dist/server/src/middlewares/documentation.d.ts.map +1 -1
  251. package/dist/server/src/middlewares/restrict-access.d.ts.map +1 -1
  252. package/dist/server/src/routes/index.d.ts +0 -1
  253. package/dist/server/src/routes/index.d.ts.map +1 -1
  254. package/dist/server/src/services/documentation.d.ts.map +1 -1
  255. package/dist/server/src/services/helpers/build-api-endpoint-path.d.ts.map +1 -1
  256. package/dist/server/src/services/helpers/build-component-schema.d.ts.map +1 -1
  257. package/dist/server/src/services/helpers/utils/clean-schema-attributes.d.ts +1 -1
  258. package/dist/server/src/services/helpers/utils/clean-schema-attributes.d.ts.map +1 -1
  259. package/dist/server/src/services/helpers/utils/get-api-responses.d.ts.map +1 -1
  260. package/dist/server/src/services/helpers/utils/get-schema-data.d.ts.map +1 -1
  261. package/dist/server/src/services/helpers/utils/loop-content-type-names.d.ts.map +1 -1
  262. package/dist/server/src/services/helpers/utils/pascal-case.d.ts.map +1 -1
  263. package/dist/server/src/services/helpers/utils/query-params.d.ts.map +1 -1
  264. package/dist/server/src/services/helpers/utils/routes.d.ts.map +1 -1
  265. package/dist/server/src/services/index.d.ts +3 -3
  266. package/dist/server/src/services/index.d.ts.map +1 -1
  267. package/dist/server/src/services/override.d.ts.map +1 -1
  268. package/dist/server/src/services/utils/get-plugins-that-need-documentation.d.ts.map +1 -1
  269. package/dist/server/src/utils.d.ts.map +1 -1
  270. package/dist/server/utils.js +10 -0
  271. package/dist/server/utils.js.map +1 -0
  272. package/dist/server/utils.mjs +8 -0
  273. package/dist/server/utils.mjs.map +1 -0
  274. package/dist/tests/server.d.ts +2 -0
  275. package/package.json +35 -31
  276. package/dist/_chunks/App-Cmiagsr-.js +0 -203
  277. package/dist/_chunks/App-Cmiagsr-.js.map +0 -1
  278. package/dist/_chunks/App-pk6g9tYL.mjs +0 -184
  279. package/dist/_chunks/App-pk6g9tYL.mjs.map +0 -1
  280. package/dist/_chunks/Settings-CqLmbMfv.mjs +0 -223
  281. package/dist/_chunks/Settings-CqLmbMfv.mjs.map +0 -1
  282. package/dist/_chunks/Settings-MmkmHoxg.js +0 -243
  283. package/dist/_chunks/Settings-MmkmHoxg.js.map +0 -1
  284. package/dist/_chunks/ar-CkqTE6jh.js +0 -24
  285. package/dist/_chunks/ar-CkqTE6jh.js.map +0 -1
  286. package/dist/_chunks/ar-ckp9T43y.mjs +0 -24
  287. package/dist/_chunks/ar-ckp9T43y.mjs.map +0 -1
  288. package/dist/_chunks/cs-BbyKo6Hc.js +0 -25
  289. package/dist/_chunks/cs-BbyKo6Hc.js.map +0 -1
  290. package/dist/_chunks/cs-ciLYCxgd.mjs +0 -25
  291. package/dist/_chunks/cs-ciLYCxgd.mjs.map +0 -1
  292. package/dist/_chunks/de-CHwC0A85.js +0 -30
  293. package/dist/_chunks/de-CHwC0A85.js.map +0 -1
  294. package/dist/_chunks/de-DqkAUMvP.mjs +0 -30
  295. package/dist/_chunks/de-DqkAUMvP.mjs.map +0 -1
  296. package/dist/_chunks/dk-DgCq8mF-.mjs +0 -43
  297. package/dist/_chunks/dk-DgCq8mF-.mjs.map +0 -1
  298. package/dist/_chunks/dk-qlI2J6S0.js +0 -43
  299. package/dist/_chunks/dk-qlI2J6S0.js.map +0 -1
  300. package/dist/_chunks/en-Cfq2Inmo.js +0 -43
  301. package/dist/_chunks/en-Cfq2Inmo.js.map +0 -1
  302. package/dist/_chunks/en-DfCC9sZn.mjs +0 -43
  303. package/dist/_chunks/en-DfCC9sZn.mjs.map +0 -1
  304. package/dist/_chunks/es-CEiXVnsb.mjs +0 -43
  305. package/dist/_chunks/es-CEiXVnsb.mjs.map +0 -1
  306. package/dist/_chunks/es-DH1GVZe7.js +0 -43
  307. package/dist/_chunks/es-DH1GVZe7.js.map +0 -1
  308. package/dist/_chunks/fr-B1x-Nj5w.js +0 -30
  309. package/dist/_chunks/fr-B1x-Nj5w.js.map +0 -1
  310. package/dist/_chunks/fr-BlX-v4UF.mjs +0 -30
  311. package/dist/_chunks/fr-BlX-v4UF.mjs.map +0 -1
  312. package/dist/_chunks/getTrad-AjYeGjZg.mjs +0 -51
  313. package/dist/_chunks/getTrad-AjYeGjZg.mjs.map +0 -1
  314. package/dist/_chunks/getTrad-CPA7x4Cg.js +0 -50
  315. package/dist/_chunks/getTrad-CPA7x4Cg.js.map +0 -1
  316. package/dist/_chunks/id-CPOl6_EU.mjs +0 -28
  317. package/dist/_chunks/id-CPOl6_EU.mjs.map +0 -1
  318. package/dist/_chunks/id-D3yFE72d.js +0 -28
  319. package/dist/_chunks/id-D3yFE72d.js.map +0 -1
  320. package/dist/_chunks/index-BTFWrNiz.mjs +0 -75
  321. package/dist/_chunks/index-BTFWrNiz.mjs.map +0 -1
  322. package/dist/_chunks/index-Bjeq6z8p.js +0 -100
  323. package/dist/_chunks/index-Bjeq6z8p.js.map +0 -1
  324. package/dist/_chunks/index-CEoG11hQ.mjs +0 -101
  325. package/dist/_chunks/index-CEoG11hQ.mjs.map +0 -1
  326. package/dist/_chunks/index-CYcTK1eg.js +0 -75
  327. package/dist/_chunks/index-CYcTK1eg.js.map +0 -1
  328. package/dist/_chunks/it-DWJI563z.mjs +0 -30
  329. package/dist/_chunks/it-DWJI563z.mjs.map +0 -1
  330. package/dist/_chunks/it-WuNBIqG8.js +0 -30
  331. package/dist/_chunks/it-WuNBIqG8.js.map +0 -1
  332. package/dist/_chunks/ko-CFzSHayG.mjs +0 -43
  333. package/dist/_chunks/ko-CFzSHayG.mjs.map +0 -1
  334. package/dist/_chunks/ko-De5iYa_O.js +0 -43
  335. package/dist/_chunks/ko-De5iYa_O.js.map +0 -1
  336. package/dist/_chunks/login-EQSKn2h7.js +0 -150
  337. package/dist/_chunks/login-EQSKn2h7.js.map +0 -1
  338. package/dist/_chunks/login-KS59cQ6U.mjs +0 -150
  339. package/dist/_chunks/login-KS59cQ6U.mjs.map +0 -1
  340. package/dist/_chunks/ms-CUgPFo4U.mjs +0 -27
  341. package/dist/_chunks/ms-CUgPFo4U.mjs.map +0 -1
  342. package/dist/_chunks/ms-DQfa3FDx.js +0 -27
  343. package/dist/_chunks/ms-DQfa3FDx.js.map +0 -1
  344. package/dist/_chunks/nl-BZHlqphk.js +0 -25
  345. package/dist/_chunks/nl-BZHlqphk.js.map +0 -1
  346. package/dist/_chunks/nl-B_7CHwVD.mjs +0 -25
  347. package/dist/_chunks/nl-B_7CHwVD.mjs.map +0 -1
  348. package/dist/_chunks/pl-DDl5i_mP.js +0 -43
  349. package/dist/_chunks/pl-DDl5i_mP.js.map +0 -1
  350. package/dist/_chunks/pl-DwLr8sw9.mjs +0 -43
  351. package/dist/_chunks/pl-DwLr8sw9.mjs.map +0 -1
  352. package/dist/_chunks/pt-4GQ8ermL.js +0 -25
  353. package/dist/_chunks/pt-4GQ8ermL.js.map +0 -1
  354. package/dist/_chunks/pt-BR-D24CJ0qp.js +0 -25
  355. package/dist/_chunks/pt-BR-D24CJ0qp.js.map +0 -1
  356. package/dist/_chunks/pt-BR-MVXc6V9P.mjs +0 -25
  357. package/dist/_chunks/pt-BR-MVXc6V9P.mjs.map +0 -1
  358. package/dist/_chunks/pt-C2N9fdeh.mjs +0 -25
  359. package/dist/_chunks/pt-C2N9fdeh.mjs.map +0 -1
  360. package/dist/_chunks/ru-BddeNlU0.mjs +0 -43
  361. package/dist/_chunks/ru-BddeNlU0.mjs.map +0 -1
  362. package/dist/_chunks/ru-QwZYcU6K.js +0 -43
  363. package/dist/_chunks/ru-QwZYcU6K.js.map +0 -1
  364. package/dist/_chunks/sk-BmT4uZTG.mjs +0 -28
  365. package/dist/_chunks/sk-BmT4uZTG.mjs.map +0 -1
  366. package/dist/_chunks/sk-DgAXilB1.js +0 -28
  367. package/dist/_chunks/sk-DgAXilB1.js.map +0 -1
  368. package/dist/_chunks/sv-CCLcAo3U.js +0 -43
  369. package/dist/_chunks/sv-CCLcAo3U.js.map +0 -1
  370. package/dist/_chunks/sv-D_-KBtcw.mjs +0 -43
  371. package/dist/_chunks/sv-D_-KBtcw.mjs.map +0 -1
  372. package/dist/_chunks/th-BhgV1BbW.js +0 -28
  373. package/dist/_chunks/th-BhgV1BbW.js.map +0 -1
  374. package/dist/_chunks/th-DkuoSGii.mjs +0 -28
  375. package/dist/_chunks/th-DkuoSGii.mjs.map +0 -1
  376. package/dist/_chunks/tr-BysnAErC.js +0 -43
  377. package/dist/_chunks/tr-BysnAErC.js.map +0 -1
  378. package/dist/_chunks/tr-l-xxK4Yk.mjs +0 -43
  379. package/dist/_chunks/tr-l-xxK4Yk.mjs.map +0 -1
  380. package/dist/_chunks/uk-CNlbntFx.js +0 -27
  381. package/dist/_chunks/uk-CNlbntFx.js.map +0 -1
  382. package/dist/_chunks/uk-Cpmsxyku.mjs +0 -27
  383. package/dist/_chunks/uk-Cpmsxyku.mjs.map +0 -1
  384. package/dist/_chunks/vi-ClWGrFm9.mjs +0 -28
  385. package/dist/_chunks/vi-ClWGrFm9.mjs.map +0 -1
  386. package/dist/_chunks/vi-_ib0GmNl.js +0 -28
  387. package/dist/_chunks/vi-_ib0GmNl.js.map +0 -1
  388. package/dist/_chunks/zh-Glkg1L2g.mjs +0 -43
  389. package/dist/_chunks/zh-Glkg1L2g.mjs.map +0 -1
  390. package/dist/_chunks/zh-Hans-L_5U2KqC.js +0 -32
  391. package/dist/_chunks/zh-Hans-L_5U2KqC.js.map +0 -1
  392. package/dist/_chunks/zh-Hans-XLMwjASk.mjs +0 -32
  393. package/dist/_chunks/zh-Hans-XLMwjASk.mjs.map +0 -1
  394. package/dist/_chunks/zh-aEZZdkOu.js +0 -43
  395. package/dist/_chunks/zh-aEZZdkOu.js.map +0 -1
  396. package/strapi-server.js +0 -3
@@ -0,0 +1,104 @@
1
+ import restrictAccess from '../middlewares/restrict-access.mjs';
2
+
3
+ var routes = [
4
+ {
5
+ method: 'GET',
6
+ path: '/',
7
+ handler: 'documentation.index',
8
+ config: {
9
+ auth: false,
10
+ middlewares: [
11
+ restrictAccess
12
+ ]
13
+ }
14
+ },
15
+ {
16
+ method: 'GET',
17
+ path: '/v:major(\\d+).:minor(\\d+).:patch(\\d+)',
18
+ handler: 'documentation.index',
19
+ config: {
20
+ auth: false,
21
+ middlewares: [
22
+ restrictAccess
23
+ ]
24
+ }
25
+ },
26
+ {
27
+ method: 'GET',
28
+ path: '/login',
29
+ handler: 'documentation.loginView',
30
+ config: {
31
+ auth: false
32
+ }
33
+ },
34
+ {
35
+ method: 'POST',
36
+ path: '/login',
37
+ handler: 'documentation.login',
38
+ config: {
39
+ auth: false
40
+ }
41
+ },
42
+ {
43
+ method: 'GET',
44
+ path: '/getInfos',
45
+ handler: 'documentation.getInfos',
46
+ config: {
47
+ policies: [
48
+ {
49
+ name: 'admin::hasPermissions',
50
+ config: {
51
+ actions: [
52
+ 'plugin::documentation.read'
53
+ ]
54
+ }
55
+ }
56
+ ]
57
+ }
58
+ },
59
+ {
60
+ method: 'POST',
61
+ path: '/regenerateDoc',
62
+ handler: 'documentation.regenerateDoc',
63
+ config: {
64
+ policies: [
65
+ {
66
+ name: 'admin::hasPermissions',
67
+ config: {
68
+ actions: [
69
+ 'plugin::documentation.settings.regenerate'
70
+ ]
71
+ }
72
+ }
73
+ ]
74
+ }
75
+ },
76
+ {
77
+ method: 'PUT',
78
+ path: '/updateSettings',
79
+ handler: 'documentation.updateSettings',
80
+ config: {
81
+ policies: [
82
+ {
83
+ name: 'admin::hasPermissions',
84
+ config: {
85
+ actions: [
86
+ 'plugin::documentation.settings.update'
87
+ ]
88
+ }
89
+ }
90
+ ]
91
+ }
92
+ },
93
+ {
94
+ method: 'DELETE',
95
+ path: '/deleteDoc/:version',
96
+ handler: 'documentation.deleteDoc',
97
+ config: {
98
+ policies: []
99
+ }
100
+ }
101
+ ];
102
+
103
+ export { routes as default };
104
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import restrictAccess from '../middlewares/restrict-access';\n\nexport default [\n {\n method: 'GET',\n path: '/',\n handler: 'documentation.index',\n config: {\n auth: false,\n middlewares: [restrictAccess],\n },\n },\n {\n method: 'GET',\n path: '/v:major(\\\\d+).:minor(\\\\d+).:patch(\\\\d+)',\n handler: 'documentation.index',\n config: {\n auth: false,\n middlewares: [restrictAccess],\n },\n },\n {\n method: 'GET',\n path: '/login',\n handler: 'documentation.loginView',\n config: {\n auth: false,\n },\n },\n {\n method: 'POST',\n path: '/login',\n handler: 'documentation.login',\n config: {\n auth: false,\n },\n },\n {\n method: 'GET',\n path: '/getInfos',\n handler: 'documentation.getInfos',\n config: {\n policies: [\n { name: 'admin::hasPermissions', config: { actions: ['plugin::documentation.read'] } },\n ],\n },\n },\n {\n method: 'POST',\n path: '/regenerateDoc',\n handler: 'documentation.regenerateDoc',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::documentation.settings.regenerate'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/updateSettings',\n handler: 'documentation.updateSettings',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::documentation.settings.update'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/deleteDoc/:version',\n handler: 'documentation.deleteDoc',\n config: {\n policies: [],\n },\n },\n];\n"],"names":["method","path","handler","config","auth","middlewares","restrictAccess","policies","name","actions"],"mappings":";;AAEA,aAAe;AACb,IAAA;QACEA,MAAAA,EAAQ,KAAA;QACRC,IAAAA,EAAM,GAAA;QACNC,OAAAA,EAAS,qBAAA;QACTC,MAAAA,EAAQ;YACNC,IAAAA,EAAM,KAAA;YACNC,WAAAA,EAAa;AAACC,gBAAAA;AAAe;AAC/B;AACF,KAAA;AACA,IAAA;QACEN,MAAAA,EAAQ,KAAA;QACRC,IAAAA,EAAM,0CAAA;QACNC,OAAAA,EAAS,qBAAA;QACTC,MAAAA,EAAQ;YACNC,IAAAA,EAAM,KAAA;YACNC,WAAAA,EAAa;AAACC,gBAAAA;AAAe;AAC/B;AACF,KAAA;AACA,IAAA;QACEN,MAAAA,EAAQ,KAAA;QACRC,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS,yBAAA;QACTC,MAAAA,EAAQ;YACNC,IAAAA,EAAM;AACR;AACF,KAAA;AACA,IAAA;QACEJ,MAAAA,EAAQ,MAAA;QACRC,IAAAA,EAAM,QAAA;QACNC,OAAAA,EAAS,qBAAA;QACTC,MAAAA,EAAQ;YACNC,IAAAA,EAAM;AACR;AACF,KAAA;AACA,IAAA;QACEJ,MAAAA,EAAQ,KAAA;QACRC,IAAAA,EAAM,WAAA;QACNC,OAAAA,EAAS,wBAAA;QACTC,MAAAA,EAAQ;YACNI,QAAAA,EAAU;AACR,gBAAA;oBAAEC,IAAAA,EAAM,uBAAA;oBAAyBL,MAAAA,EAAQ;wBAAEM,OAAAA,EAAS;AAAC,4BAAA;AAA6B;AAAC;AAAE;AACtF;AACH;AACF,KAAA;AACA,IAAA;QACET,MAAAA,EAAQ,MAAA;QACRC,IAAAA,EAAM,gBAAA;QACNC,OAAAA,EAAS,6BAAA;QACTC,MAAAA,EAAQ;YACNI,QAAAA,EAAU;AACR,gBAAA;oBACEC,IAAAA,EAAM,uBAAA;oBACNL,MAAAA,EAAQ;wBAAEM,OAAAA,EAAS;AAAC,4BAAA;AAA4C;AAAC;AACnE;AACD;AACH;AACF,KAAA;AACA,IAAA;QACET,MAAAA,EAAQ,KAAA;QACRC,IAAAA,EAAM,iBAAA;QACNC,OAAAA,EAAS,8BAAA;QACTC,MAAAA,EAAQ;YACNI,QAAAA,EAAU;AACR,gBAAA;oBACEC,IAAAA,EAAM,uBAAA;oBACNL,MAAAA,EAAQ;wBAAEM,OAAAA,EAAS;AAAC,4BAAA;AAAwC;AAAC;AAC/D;AACD;AACH;AACF,KAAA;AACA,IAAA;QACET,MAAAA,EAAQ,QAAA;QACRC,IAAAA,EAAM,qBAAA;QACNC,OAAAA,EAAS,yBAAA;QACTC,MAAAA,EAAQ;AACNI,YAAAA,QAAAA,EAAU;AACZ;AACF;CACD;;;;"}
@@ -0,0 +1,193 @@
1
+ 'use strict';
2
+
3
+ var path = require('path');
4
+ var fs = require('fs-extra');
5
+ var immer = require('immer');
6
+ var buildApiEndpointPath = require('./helpers/build-api-endpoint-path.js');
7
+ var buildComponentSchema = require('./helpers/build-component-schema.js');
8
+ var getPluginsThatNeedDocumentation = require('./utils/get-plugins-that-need-documentation.js');
9
+ var utils = require('../utils.js');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var path__default = /*#__PURE__*/_interopDefault(path);
14
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
15
+
16
+ const createService = ({ strapi })=>{
17
+ const config = strapi.config.get('plugin::documentation');
18
+ const pluginsThatNeedDocumentation = getPluginsThatNeedDocumentation.getPluginsThatNeedDocumentation(config);
19
+ const overrideService = utils.getService('override');
20
+ return {
21
+ getDocumentationVersion () {
22
+ return config.info.version;
23
+ },
24
+ getFullDocumentationPath () {
25
+ // In production, documentation files live under dist/src/extensions/
26
+ // after the build step. Use dist.extensions for reading.
27
+ const extensionsDir = strapi.config.environment === 'production' ? strapi.dirs.dist.extensions : strapi.dirs.app.extensions;
28
+ return path__default.default.join(extensionsDir, 'documentation', 'documentation');
29
+ },
30
+ getDocumentationVersions () {
31
+ return fs__default.default.readdirSync(this.getFullDocumentationPath()).map((version)=>{
32
+ try {
33
+ const filePath = path__default.default.resolve(this.getFullDocumentationPath(), version, 'full_documentation.json');
34
+ const doc = JSON.parse(fs__default.default.readFileSync(filePath).toString());
35
+ const generatedDate = doc.info['x-generation-date'];
36
+ return {
37
+ version,
38
+ generatedDate,
39
+ url: ''
40
+ };
41
+ } catch (err) {
42
+ return null;
43
+ }
44
+ }).filter((x)=>x);
45
+ },
46
+ /**
47
+ * Returns settings stored in core-store
48
+ */ async getDocumentationAccess () {
49
+ const { restrictedAccess } = await strapi.store({
50
+ environment: '',
51
+ type: 'plugin',
52
+ name: 'documentation',
53
+ key: 'config'
54
+ }).get();
55
+ return {
56
+ restrictedAccess
57
+ };
58
+ },
59
+ getApiDocumentationPath (api) {
60
+ const isProduction = strapi.config.environment === 'production';
61
+ if (api.getter === 'plugin') {
62
+ const extensionsDir = isProduction ? strapi.dirs.dist.extensions : strapi.dirs.app.extensions;
63
+ return path__default.default.join(extensionsDir, api.name, 'documentation');
64
+ }
65
+ const apiDir = isProduction ? strapi.dirs.dist.api : strapi.dirs.app.api;
66
+ return path__default.default.join(apiDir, api.name, 'documentation');
67
+ },
68
+ async deleteDocumentation (version) {
69
+ const apis = this.getPluginAndApiInfo();
70
+ for (const api of apis){
71
+ await fs__default.default.remove(path__default.default.join(this.getApiDocumentationPath(api), version));
72
+ }
73
+ await fs__default.default.remove(path__default.default.join(this.getFullDocumentationPath(), version));
74
+ },
75
+ getPluginAndApiInfo () {
76
+ const pluginsToDocument = pluginsThatNeedDocumentation.map((plugin)=>{
77
+ return {
78
+ name: plugin,
79
+ getter: 'plugin',
80
+ ctNames: Object.keys(strapi.plugin(plugin).contentTypes)
81
+ };
82
+ });
83
+ const apisToDocument = Object.keys(strapi.apis).map((api)=>{
84
+ return {
85
+ name: api,
86
+ getter: 'api',
87
+ ctNames: Object.keys(strapi.api(api).contentTypes)
88
+ };
89
+ });
90
+ return [
91
+ ...apisToDocument,
92
+ ...pluginsToDocument
93
+ ];
94
+ },
95
+ /**
96
+ * @description - Creates the Swagger json files
97
+ */ async generateFullDoc (versionOpt) {
98
+ const version = versionOpt ?? this.getDocumentationVersion();
99
+ const apis = this.getPluginAndApiInfo();
100
+ const apisThatNeedGeneratedDocumentation = apis.filter(({ name })=>!overrideService.isEnabled(name));
101
+ // Initialize the generated documentation with defaults
102
+ const generatedDocumentation = await immer.produce(config, async (draft)=>{
103
+ if (draft.servers?.length === 0) {
104
+ // When no servers found set the defaults
105
+ const serverUrl = strapi.config.get('server.absoluteUrl');
106
+ const apiPath = strapi.config.get('api.rest.prefix');
107
+ draft.servers = [
108
+ {
109
+ url: `${serverUrl}${apiPath}`,
110
+ description: 'Development server'
111
+ }
112
+ ];
113
+ }
114
+ if (!draft.components) {
115
+ draft.components = {};
116
+ }
117
+ // Set the generated date
118
+ draft.info['x-generation-date'] = new Date().toISOString();
119
+ // Set the plugins that need documentation
120
+ draft['x-strapi-config'].plugins = pluginsThatNeedDocumentation;
121
+ // Delete the mutateDocumentation key from the config so it doesn't end up in the spec
122
+ delete draft['x-strapi-config'].mutateDocumentation;
123
+ // Generate the documentation for each api and update the generatedDocumentation
124
+ for (const api of apisThatNeedGeneratedDocumentation){
125
+ const newApiPath = buildApiEndpointPath(api);
126
+ const generatedSchemas = buildComponentSchema(api);
127
+ if (generatedSchemas) {
128
+ draft.components.schemas = {
129
+ ...draft.components.schemas,
130
+ ...generatedSchemas
131
+ };
132
+ }
133
+ if (newApiPath) {
134
+ draft.paths = {
135
+ ...draft.paths,
136
+ ...newApiPath
137
+ };
138
+ }
139
+ }
140
+ // When overrides are present update the generatedDocumentation
141
+ if (overrideService.registeredOverrides.length > 0) {
142
+ overrideService.registeredOverrides.forEach((override)=>{
143
+ // Only run the overrrides when no override version is provided,
144
+ // or when the generated documentation version matches the override version
145
+ if (!override?.info?.version || override.info.version === version) {
146
+ if (override.tags) {
147
+ // Merge override tags with the generated tags
148
+ draft.tags = draft.tags || [];
149
+ draft.tags.push(...override.tags);
150
+ }
151
+ if (override.paths) {
152
+ // Merge override paths with the generated paths
153
+ // The override will add a new path or replace the value of an existing path
154
+ draft.paths = {
155
+ ...draft.paths,
156
+ ...override.paths
157
+ };
158
+ }
159
+ if (override.components) {
160
+ const keys = Object.keys(override.components);
161
+ keys.forEach((overrideKey)=>{
162
+ draft.components = draft.components || {};
163
+ const overrideValue = override.components?.[overrideKey];
164
+ const originalValue = draft.components?.[overrideKey];
165
+ Object.assign(draft.components, {
166
+ [overrideKey]: {
167
+ ...originalValue,
168
+ ...overrideValue
169
+ }
170
+ });
171
+ });
172
+ }
173
+ }
174
+ });
175
+ }
176
+ });
177
+ // Escape hatch, allow the user to provide a mutateDocumentation function that can alter any part of
178
+ // the generated documentation before it is written to the file system
179
+ const userMutatesDocumentation = config['x-strapi-config'].mutateDocumentation;
180
+ const finalDocumentation = userMutatesDocumentation ? immer.produce(generatedDocumentation, userMutatesDocumentation) : generatedDocumentation;
181
+ // Get the file path for the final documentation
182
+ const fullDocJsonPath = path__default.default.join(this.getFullDocumentationPath(), version, 'full_documentation.json');
183
+ // Write the documentation to the file system
184
+ await fs__default.default.ensureFile(fullDocJsonPath);
185
+ await fs__default.default.writeJson(fullDocJsonPath, finalDocumentation, {
186
+ spaces: 2
187
+ });
188
+ }
189
+ };
190
+ };
191
+
192
+ module.exports = createService;
193
+ //# sourceMappingURL=documentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.js","sources":["../../../server/src/services/documentation.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport { produce } from 'immer';\nimport type { Core } from '@strapi/types';\n\nimport { builApiEndpointPath, buildComponentSchema } from './helpers';\nimport { getPluginsThatNeedDocumentation } from './utils/get-plugins-that-need-documentation';\nimport { getService } from '../utils';\n\nimport type { Config, PluginConfig } from '../types';\n\nexport type Version = {\n version: string;\n generatedDate: string;\n url: string;\n};\n\nexport type DocumentationService = ReturnType<typeof createService>;\n\nconst createService = ({ strapi }: { strapi: Core.Strapi }) => {\n const config = strapi.config.get('plugin::documentation') as PluginConfig;\n const pluginsThatNeedDocumentation = getPluginsThatNeedDocumentation(config);\n const overrideService = getService('override');\n\n return {\n getDocumentationVersion() {\n return config.info.version;\n },\n\n getFullDocumentationPath() {\n // In production, documentation files live under dist/src/extensions/\n // after the build step. Use dist.extensions for reading.\n const extensionsDir =\n strapi.config.environment === 'production'\n ? strapi.dirs.dist.extensions\n : strapi.dirs.app.extensions;\n\n return path.join(extensionsDir, 'documentation', 'documentation');\n },\n\n getDocumentationVersions(): Version[] {\n return fs\n .readdirSync(this.getFullDocumentationPath())\n .map((version) => {\n try {\n const filePath = path.resolve(\n this.getFullDocumentationPath(),\n version,\n 'full_documentation.json'\n );\n\n const doc = JSON.parse(fs.readFileSync(filePath).toString());\n\n const generatedDate = doc.info['x-generation-date'];\n\n return { version, generatedDate, url: '' };\n } catch (err) {\n return null;\n }\n })\n .filter((x) => x) as Version[];\n },\n\n /**\n * Returns settings stored in core-store\n */\n async getDocumentationAccess() {\n const { restrictedAccess } = (await strapi.store!({\n environment: '',\n type: 'plugin',\n name: 'documentation',\n key: 'config',\n }).get()) as Config;\n\n return { restrictedAccess };\n },\n\n getApiDocumentationPath(api: { name: string; getter: string }) {\n const isProduction = strapi.config.environment === 'production';\n\n if (api.getter === 'plugin') {\n const extensionsDir = isProduction\n ? strapi.dirs.dist.extensions\n : strapi.dirs.app.extensions;\n return path.join(extensionsDir, api.name, 'documentation');\n }\n\n const apiDir = isProduction ? strapi.dirs.dist.api : strapi.dirs.app.api;\n return path.join(apiDir, api.name, 'documentation');\n },\n\n async deleteDocumentation(version: string) {\n const apis = this.getPluginAndApiInfo();\n for (const api of apis) {\n await fs.remove(path.join(this.getApiDocumentationPath(api), version));\n }\n\n await fs.remove(path.join(this.getFullDocumentationPath(), version));\n },\n\n getPluginAndApiInfo() {\n const pluginsToDocument = pluginsThatNeedDocumentation.map((plugin) => {\n return {\n name: plugin,\n getter: 'plugin',\n ctNames: Object.keys(strapi.plugin(plugin).contentTypes),\n };\n });\n\n const apisToDocument = Object.keys(strapi.apis).map((api) => {\n return {\n name: api,\n getter: 'api',\n ctNames: Object.keys(strapi.api(api).contentTypes),\n };\n });\n\n return [...apisToDocument, ...pluginsToDocument];\n },\n\n /**\n * @description - Creates the Swagger json files\n */\n async generateFullDoc(versionOpt?: string) {\n const version = versionOpt ?? this.getDocumentationVersion();\n\n const apis = this.getPluginAndApiInfo();\n const apisThatNeedGeneratedDocumentation = apis.filter(\n ({ name }) => !overrideService.isEnabled(name)\n );\n\n // Initialize the generated documentation with defaults\n const generatedDocumentation = await produce(config, async (draft) => {\n if (draft.servers?.length === 0) {\n // When no servers found set the defaults\n const serverUrl = strapi.config.get('server.absoluteUrl');\n const apiPath = strapi.config.get('api.rest.prefix');\n draft.servers = [\n {\n url: `${serverUrl}${apiPath}`,\n description: 'Development server',\n },\n ];\n }\n\n if (!draft.components) {\n draft.components = {};\n }\n\n // Set the generated date\n draft.info['x-generation-date'] = new Date().toISOString();\n // Set the plugins that need documentation\n draft['x-strapi-config'].plugins = pluginsThatNeedDocumentation;\n\n // Delete the mutateDocumentation key from the config so it doesn't end up in the spec\n delete draft['x-strapi-config'].mutateDocumentation;\n\n // Generate the documentation for each api and update the generatedDocumentation\n for (const api of apisThatNeedGeneratedDocumentation) {\n const newApiPath = builApiEndpointPath(api);\n const generatedSchemas = buildComponentSchema(api);\n\n if (generatedSchemas) {\n draft.components.schemas = { ...draft.components.schemas, ...generatedSchemas };\n }\n\n if (newApiPath) {\n draft.paths = { ...draft.paths, ...newApiPath };\n }\n }\n\n // When overrides are present update the generatedDocumentation\n if (overrideService.registeredOverrides.length > 0) {\n overrideService.registeredOverrides.forEach((override: Partial<PluginConfig>) => {\n // Only run the overrrides when no override version is provided,\n // or when the generated documentation version matches the override version\n if (!override?.info?.version || override.info.version === version) {\n if (override.tags) {\n // Merge override tags with the generated tags\n draft.tags = draft.tags || [];\n draft.tags.push(...override.tags);\n }\n\n if (override.paths) {\n // Merge override paths with the generated paths\n // The override will add a new path or replace the value of an existing path\n draft.paths = { ...draft.paths, ...override.paths };\n }\n\n if (override.components) {\n const keys = Object.keys(override.components) as Array<\n keyof typeof override.components\n >;\n\n keys.forEach((overrideKey) => {\n draft.components = draft.components || {};\n\n const overrideValue = override.components?.[overrideKey];\n const originalValue = draft.components?.[overrideKey];\n\n Object.assign(draft.components, {\n [overrideKey]: {\n ...originalValue,\n ...overrideValue,\n },\n });\n });\n }\n }\n });\n }\n });\n\n // Escape hatch, allow the user to provide a mutateDocumentation function that can alter any part of\n // the generated documentation before it is written to the file system\n const userMutatesDocumentation = config['x-strapi-config'].mutateDocumentation;\n\n const finalDocumentation = userMutatesDocumentation\n ? produce(generatedDocumentation, userMutatesDocumentation)\n : generatedDocumentation;\n\n // Get the file path for the final documentation\n const fullDocJsonPath = path.join(\n this.getFullDocumentationPath(),\n version,\n 'full_documentation.json'\n );\n // Write the documentation to the file system\n await fs.ensureFile(fullDocJsonPath);\n await fs.writeJson(fullDocJsonPath, finalDocumentation, { spaces: 2 });\n },\n };\n};\n\nexport default createService;\n"],"names":["createService","strapi","config","get","pluginsThatNeedDocumentation","getPluginsThatNeedDocumentation","overrideService","getService","getDocumentationVersion","info","version","getFullDocumentationPath","extensionsDir","environment","dirs","dist","extensions","app","path","join","getDocumentationVersions","fs","readdirSync","map","filePath","resolve","doc","JSON","parse","readFileSync","toString","generatedDate","url","err","filter","x","getDocumentationAccess","restrictedAccess","store","type","name","key","getApiDocumentationPath","api","isProduction","getter","apiDir","deleteDocumentation","apis","getPluginAndApiInfo","remove","pluginsToDocument","plugin","ctNames","Object","keys","contentTypes","apisToDocument","generateFullDoc","versionOpt","apisThatNeedGeneratedDocumentation","isEnabled","generatedDocumentation","produce","draft","servers","length","serverUrl","apiPath","description","components","Date","toISOString","plugins","mutateDocumentation","newApiPath","builApiEndpointPath","generatedSchemas","buildComponentSchema","schemas","paths","registeredOverrides","forEach","override","tags","push","overrideKey","overrideValue","originalValue","assign","userMutatesDocumentation","finalDocumentation","fullDocJsonPath","ensureFile","writeJson","spaces"],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { produce } from 'immer';
4
+ import buildApiEndpointPath from './helpers/build-api-endpoint-path.mjs';
5
+ import buildComponentSchema from './helpers/build-component-schema.mjs';
6
+ import { getPluginsThatNeedDocumentation } from './utils/get-plugins-that-need-documentation.mjs';
7
+ import { getService } from '../utils.mjs';
8
+
9
+ const createService = ({ strapi })=>{
10
+ const config = strapi.config.get('plugin::documentation');
11
+ const pluginsThatNeedDocumentation = getPluginsThatNeedDocumentation(config);
12
+ const overrideService = getService('override');
13
+ return {
14
+ getDocumentationVersion () {
15
+ return config.info.version;
16
+ },
17
+ getFullDocumentationPath () {
18
+ // In production, documentation files live under dist/src/extensions/
19
+ // after the build step. Use dist.extensions for reading.
20
+ const extensionsDir = strapi.config.environment === 'production' ? strapi.dirs.dist.extensions : strapi.dirs.app.extensions;
21
+ return path.join(extensionsDir, 'documentation', 'documentation');
22
+ },
23
+ getDocumentationVersions () {
24
+ return fs.readdirSync(this.getFullDocumentationPath()).map((version)=>{
25
+ try {
26
+ const filePath = path.resolve(this.getFullDocumentationPath(), version, 'full_documentation.json');
27
+ const doc = JSON.parse(fs.readFileSync(filePath).toString());
28
+ const generatedDate = doc.info['x-generation-date'];
29
+ return {
30
+ version,
31
+ generatedDate,
32
+ url: ''
33
+ };
34
+ } catch (err) {
35
+ return null;
36
+ }
37
+ }).filter((x)=>x);
38
+ },
39
+ /**
40
+ * Returns settings stored in core-store
41
+ */ async getDocumentationAccess () {
42
+ const { restrictedAccess } = await strapi.store({
43
+ environment: '',
44
+ type: 'plugin',
45
+ name: 'documentation',
46
+ key: 'config'
47
+ }).get();
48
+ return {
49
+ restrictedAccess
50
+ };
51
+ },
52
+ getApiDocumentationPath (api) {
53
+ const isProduction = strapi.config.environment === 'production';
54
+ if (api.getter === 'plugin') {
55
+ const extensionsDir = isProduction ? strapi.dirs.dist.extensions : strapi.dirs.app.extensions;
56
+ return path.join(extensionsDir, api.name, 'documentation');
57
+ }
58
+ const apiDir = isProduction ? strapi.dirs.dist.api : strapi.dirs.app.api;
59
+ return path.join(apiDir, api.name, 'documentation');
60
+ },
61
+ async deleteDocumentation (version) {
62
+ const apis = this.getPluginAndApiInfo();
63
+ for (const api of apis){
64
+ await fs.remove(path.join(this.getApiDocumentationPath(api), version));
65
+ }
66
+ await fs.remove(path.join(this.getFullDocumentationPath(), version));
67
+ },
68
+ getPluginAndApiInfo () {
69
+ const pluginsToDocument = pluginsThatNeedDocumentation.map((plugin)=>{
70
+ return {
71
+ name: plugin,
72
+ getter: 'plugin',
73
+ ctNames: Object.keys(strapi.plugin(plugin).contentTypes)
74
+ };
75
+ });
76
+ const apisToDocument = Object.keys(strapi.apis).map((api)=>{
77
+ return {
78
+ name: api,
79
+ getter: 'api',
80
+ ctNames: Object.keys(strapi.api(api).contentTypes)
81
+ };
82
+ });
83
+ return [
84
+ ...apisToDocument,
85
+ ...pluginsToDocument
86
+ ];
87
+ },
88
+ /**
89
+ * @description - Creates the Swagger json files
90
+ */ async generateFullDoc (versionOpt) {
91
+ const version = versionOpt ?? this.getDocumentationVersion();
92
+ const apis = this.getPluginAndApiInfo();
93
+ const apisThatNeedGeneratedDocumentation = apis.filter(({ name })=>!overrideService.isEnabled(name));
94
+ // Initialize the generated documentation with defaults
95
+ const generatedDocumentation = await produce(config, async (draft)=>{
96
+ if (draft.servers?.length === 0) {
97
+ // When no servers found set the defaults
98
+ const serverUrl = strapi.config.get('server.absoluteUrl');
99
+ const apiPath = strapi.config.get('api.rest.prefix');
100
+ draft.servers = [
101
+ {
102
+ url: `${serverUrl}${apiPath}`,
103
+ description: 'Development server'
104
+ }
105
+ ];
106
+ }
107
+ if (!draft.components) {
108
+ draft.components = {};
109
+ }
110
+ // Set the generated date
111
+ draft.info['x-generation-date'] = new Date().toISOString();
112
+ // Set the plugins that need documentation
113
+ draft['x-strapi-config'].plugins = pluginsThatNeedDocumentation;
114
+ // Delete the mutateDocumentation key from the config so it doesn't end up in the spec
115
+ delete draft['x-strapi-config'].mutateDocumentation;
116
+ // Generate the documentation for each api and update the generatedDocumentation
117
+ for (const api of apisThatNeedGeneratedDocumentation){
118
+ const newApiPath = buildApiEndpointPath(api);
119
+ const generatedSchemas = buildComponentSchema(api);
120
+ if (generatedSchemas) {
121
+ draft.components.schemas = {
122
+ ...draft.components.schemas,
123
+ ...generatedSchemas
124
+ };
125
+ }
126
+ if (newApiPath) {
127
+ draft.paths = {
128
+ ...draft.paths,
129
+ ...newApiPath
130
+ };
131
+ }
132
+ }
133
+ // When overrides are present update the generatedDocumentation
134
+ if (overrideService.registeredOverrides.length > 0) {
135
+ overrideService.registeredOverrides.forEach((override)=>{
136
+ // Only run the overrrides when no override version is provided,
137
+ // or when the generated documentation version matches the override version
138
+ if (!override?.info?.version || override.info.version === version) {
139
+ if (override.tags) {
140
+ // Merge override tags with the generated tags
141
+ draft.tags = draft.tags || [];
142
+ draft.tags.push(...override.tags);
143
+ }
144
+ if (override.paths) {
145
+ // Merge override paths with the generated paths
146
+ // The override will add a new path or replace the value of an existing path
147
+ draft.paths = {
148
+ ...draft.paths,
149
+ ...override.paths
150
+ };
151
+ }
152
+ if (override.components) {
153
+ const keys = Object.keys(override.components);
154
+ keys.forEach((overrideKey)=>{
155
+ draft.components = draft.components || {};
156
+ const overrideValue = override.components?.[overrideKey];
157
+ const originalValue = draft.components?.[overrideKey];
158
+ Object.assign(draft.components, {
159
+ [overrideKey]: {
160
+ ...originalValue,
161
+ ...overrideValue
162
+ }
163
+ });
164
+ });
165
+ }
166
+ }
167
+ });
168
+ }
169
+ });
170
+ // Escape hatch, allow the user to provide a mutateDocumentation function that can alter any part of
171
+ // the generated documentation before it is written to the file system
172
+ const userMutatesDocumentation = config['x-strapi-config'].mutateDocumentation;
173
+ const finalDocumentation = userMutatesDocumentation ? produce(generatedDocumentation, userMutatesDocumentation) : generatedDocumentation;
174
+ // Get the file path for the final documentation
175
+ const fullDocJsonPath = path.join(this.getFullDocumentationPath(), version, 'full_documentation.json');
176
+ // Write the documentation to the file system
177
+ await fs.ensureFile(fullDocJsonPath);
178
+ await fs.writeJson(fullDocJsonPath, finalDocumentation, {
179
+ spaces: 2
180
+ });
181
+ }
182
+ };
183
+ };
184
+
185
+ export { createService as default };
186
+ //# sourceMappingURL=documentation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.mjs","sources":["../../../server/src/services/documentation.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport { produce } from 'immer';\nimport type { Core } from '@strapi/types';\n\nimport { builApiEndpointPath, buildComponentSchema } from './helpers';\nimport { getPluginsThatNeedDocumentation } from './utils/get-plugins-that-need-documentation';\nimport { getService } from '../utils';\n\nimport type { Config, PluginConfig } from '../types';\n\nexport type Version = {\n version: string;\n generatedDate: string;\n url: string;\n};\n\nexport type DocumentationService = ReturnType<typeof createService>;\n\nconst createService = ({ strapi }: { strapi: Core.Strapi }) => {\n const config = strapi.config.get('plugin::documentation') as PluginConfig;\n const pluginsThatNeedDocumentation = getPluginsThatNeedDocumentation(config);\n const overrideService = getService('override');\n\n return {\n getDocumentationVersion() {\n return config.info.version;\n },\n\n getFullDocumentationPath() {\n // In production, documentation files live under dist/src/extensions/\n // after the build step. Use dist.extensions for reading.\n const extensionsDir =\n strapi.config.environment === 'production'\n ? strapi.dirs.dist.extensions\n : strapi.dirs.app.extensions;\n\n return path.join(extensionsDir, 'documentation', 'documentation');\n },\n\n getDocumentationVersions(): Version[] {\n return fs\n .readdirSync(this.getFullDocumentationPath())\n .map((version) => {\n try {\n const filePath = path.resolve(\n this.getFullDocumentationPath(),\n version,\n 'full_documentation.json'\n );\n\n const doc = JSON.parse(fs.readFileSync(filePath).toString());\n\n const generatedDate = doc.info['x-generation-date'];\n\n return { version, generatedDate, url: '' };\n } catch (err) {\n return null;\n }\n })\n .filter((x) => x) as Version[];\n },\n\n /**\n * Returns settings stored in core-store\n */\n async getDocumentationAccess() {\n const { restrictedAccess } = (await strapi.store!({\n environment: '',\n type: 'plugin',\n name: 'documentation',\n key: 'config',\n }).get()) as Config;\n\n return { restrictedAccess };\n },\n\n getApiDocumentationPath(api: { name: string; getter: string }) {\n const isProduction = strapi.config.environment === 'production';\n\n if (api.getter === 'plugin') {\n const extensionsDir = isProduction\n ? strapi.dirs.dist.extensions\n : strapi.dirs.app.extensions;\n return path.join(extensionsDir, api.name, 'documentation');\n }\n\n const apiDir = isProduction ? strapi.dirs.dist.api : strapi.dirs.app.api;\n return path.join(apiDir, api.name, 'documentation');\n },\n\n async deleteDocumentation(version: string) {\n const apis = this.getPluginAndApiInfo();\n for (const api of apis) {\n await fs.remove(path.join(this.getApiDocumentationPath(api), version));\n }\n\n await fs.remove(path.join(this.getFullDocumentationPath(), version));\n },\n\n getPluginAndApiInfo() {\n const pluginsToDocument = pluginsThatNeedDocumentation.map((plugin) => {\n return {\n name: plugin,\n getter: 'plugin',\n ctNames: Object.keys(strapi.plugin(plugin).contentTypes),\n };\n });\n\n const apisToDocument = Object.keys(strapi.apis).map((api) => {\n return {\n name: api,\n getter: 'api',\n ctNames: Object.keys(strapi.api(api).contentTypes),\n };\n });\n\n return [...apisToDocument, ...pluginsToDocument];\n },\n\n /**\n * @description - Creates the Swagger json files\n */\n async generateFullDoc(versionOpt?: string) {\n const version = versionOpt ?? this.getDocumentationVersion();\n\n const apis = this.getPluginAndApiInfo();\n const apisThatNeedGeneratedDocumentation = apis.filter(\n ({ name }) => !overrideService.isEnabled(name)\n );\n\n // Initialize the generated documentation with defaults\n const generatedDocumentation = await produce(config, async (draft) => {\n if (draft.servers?.length === 0) {\n // When no servers found set the defaults\n const serverUrl = strapi.config.get('server.absoluteUrl');\n const apiPath = strapi.config.get('api.rest.prefix');\n draft.servers = [\n {\n url: `${serverUrl}${apiPath}`,\n description: 'Development server',\n },\n ];\n }\n\n if (!draft.components) {\n draft.components = {};\n }\n\n // Set the generated date\n draft.info['x-generation-date'] = new Date().toISOString();\n // Set the plugins that need documentation\n draft['x-strapi-config'].plugins = pluginsThatNeedDocumentation;\n\n // Delete the mutateDocumentation key from the config so it doesn't end up in the spec\n delete draft['x-strapi-config'].mutateDocumentation;\n\n // Generate the documentation for each api and update the generatedDocumentation\n for (const api of apisThatNeedGeneratedDocumentation) {\n const newApiPath = builApiEndpointPath(api);\n const generatedSchemas = buildComponentSchema(api);\n\n if (generatedSchemas) {\n draft.components.schemas = { ...draft.components.schemas, ...generatedSchemas };\n }\n\n if (newApiPath) {\n draft.paths = { ...draft.paths, ...newApiPath };\n }\n }\n\n // When overrides are present update the generatedDocumentation\n if (overrideService.registeredOverrides.length > 0) {\n overrideService.registeredOverrides.forEach((override: Partial<PluginConfig>) => {\n // Only run the overrrides when no override version is provided,\n // or when the generated documentation version matches the override version\n if (!override?.info?.version || override.info.version === version) {\n if (override.tags) {\n // Merge override tags with the generated tags\n draft.tags = draft.tags || [];\n draft.tags.push(...override.tags);\n }\n\n if (override.paths) {\n // Merge override paths with the generated paths\n // The override will add a new path or replace the value of an existing path\n draft.paths = { ...draft.paths, ...override.paths };\n }\n\n if (override.components) {\n const keys = Object.keys(override.components) as Array<\n keyof typeof override.components\n >;\n\n keys.forEach((overrideKey) => {\n draft.components = draft.components || {};\n\n const overrideValue = override.components?.[overrideKey];\n const originalValue = draft.components?.[overrideKey];\n\n Object.assign(draft.components, {\n [overrideKey]: {\n ...originalValue,\n ...overrideValue,\n },\n });\n });\n }\n }\n });\n }\n });\n\n // Escape hatch, allow the user to provide a mutateDocumentation function that can alter any part of\n // the generated documentation before it is written to the file system\n const userMutatesDocumentation = config['x-strapi-config'].mutateDocumentation;\n\n const finalDocumentation = userMutatesDocumentation\n ? produce(generatedDocumentation, userMutatesDocumentation)\n : generatedDocumentation;\n\n // Get the file path for the final documentation\n const fullDocJsonPath = path.join(\n this.getFullDocumentationPath(),\n version,\n 'full_documentation.json'\n );\n // Write the documentation to the file system\n await fs.ensureFile(fullDocJsonPath);\n await fs.writeJson(fullDocJsonPath, finalDocumentation, { spaces: 2 });\n },\n };\n};\n\nexport default createService;\n"],"names":["createService","strapi","config","get","pluginsThatNeedDocumentation","getPluginsThatNeedDocumentation","overrideService","getService","getDocumentationVersion","info","version","getFullDocumentationPath","extensionsDir","environment","dirs","dist","extensions","app","path","join","getDocumentationVersions","fs","readdirSync","map","filePath","resolve","doc","JSON","parse","readFileSync","toString","generatedDate","url","err","filter","x","getDocumentationAccess","restrictedAccess","store","type","name","key","getApiDocumentationPath","api","isProduction","getter","apiDir","deleteDocumentation","apis","getPluginAndApiInfo","remove","pluginsToDocument","plugin","ctNames","Object","keys","contentTypes","apisToDocument","generateFullDoc","versionOpt","apisThatNeedGeneratedDocumentation","isEnabled","generatedDocumentation","produce","draft","servers","length","serverUrl","apiPath","description","components","Date","toISOString","plugins","mutateDocumentation","newApiPath","builApiEndpointPath","generatedSchemas","buildComponentSchema","schemas","paths","registeredOverrides","forEach","override","tags","push","overrideKey","overrideValue","originalValue","assign","userMutatesDocumentation","finalDocumentation","fullDocJsonPath","ensureFile","writeJson","spaces"],"mappings":"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"}