@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,166 @@
1
+ 'use strict';
2
+
3
+ var _ = require('lodash');
4
+ var pathToRegexp = require('path-to-regexp');
5
+ var pascalCase = require('./utils/pascal-case.js');
6
+ var queryParams = require('./utils/query-params.js');
7
+ var loopContentTypeNames = require('./utils/loop-content-type-names.js');
8
+ var getApiResponses = require('./utils/get-api-responses.js');
9
+ var routes = require('./utils/routes.js');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ function _interopNamespace(e) {
14
+ if (e && e.__esModule) return e;
15
+ var n = Object.create(null);
16
+ if (e) {
17
+ Object.keys(e).forEach(function (k) {
18
+ if (k !== 'default') {
19
+ var d = Object.getOwnPropertyDescriptor(e, k);
20
+ Object.defineProperty(n, k, d.get ? d : {
21
+ enumerable: true,
22
+ get: function () { return e[k]; }
23
+ });
24
+ }
25
+ });
26
+ }
27
+ n.default = e;
28
+ return Object.freeze(n);
29
+ }
30
+
31
+ var ___default = /*#__PURE__*/_interopDefault(_);
32
+ var pathToRegexp__namespace = /*#__PURE__*/_interopNamespace(pathToRegexp);
33
+
34
+ /**
35
+ * @description Parses a route with ':variable'
36
+ *
37
+ * @param {string} routePath - The route's path property
38
+ * @returns {string}
39
+ */ const parsePathWithVariables = (routePath)=>{
40
+ const { tokens } = pathToRegexp__namespace.parse(routePath);
41
+ return tokens.map((token)=>{
42
+ switch(token.type){
43
+ case 'text':
44
+ return token.value;
45
+ case 'param':
46
+ return `{${token.name}}`;
47
+ case 'wildcard':
48
+ return `{${token.name}}`;
49
+ case 'group':
50
+ // Handle group tokens by mapping them within the same function context
51
+ return `(${parsePathWithVariables(token.tokens.map((t)=>t).join(''))})`;
52
+ default:
53
+ throw new Error(`Unknown token type: ${token.type}`);
54
+ }
55
+ }).join('');
56
+ };
57
+ /**
58
+ * @description Builds the required object for a path parameter
59
+ *
60
+ * @param {string} routePath - The route's path property
61
+ *
62
+ * @returns {object } Swagger path params object
63
+ */ const getPathParams = (routePath)=>{
64
+ const { tokens } = pathToRegexp__namespace.parse(routePath);
65
+ return tokens.reduce((acc, param)=>{
66
+ // Skip non-parameter tokens
67
+ if (param.type !== 'param') {
68
+ return acc;
69
+ }
70
+ acc.push({
71
+ name: `${param.name}`,
72
+ in: 'path',
73
+ description: '',
74
+ deprecated: false,
75
+ required: true,
76
+ schema: {
77
+ type: param.name === 'id' ? 'string' : 'number'
78
+ }
79
+ });
80
+ return acc;
81
+ }, []);
82
+ };
83
+ const getPathWithPrefix = (prefix, route)=>{
84
+ // When the prefix is set on the routes and
85
+ // the current route is not trying to remove it
86
+ if (prefix && !___default.default.has(route.config, 'prefix')) {
87
+ // Add the prefix to the path
88
+ return prefix.concat(route.path);
89
+ }
90
+ // Otherwise just return path
91
+ return route.path;
92
+ };
93
+ /**
94
+ * @description Gets all paths based on routes
95
+ *
96
+ * @param {object} apiInfo
97
+ * @property {object} apiInfo.routeInfo - The api routes object
98
+ * @property {string} apiInfo.uniqueName - Content type name | Api name + Content type name
99
+ * @property {object} apiInfo.contentTypeInfo - The info object found on content type schemas
100
+ *
101
+ * @returns {object}
102
+ */ const getPaths = ({ routeInfo, uniqueName, contentTypeInfo, kind })=>{
103
+ // Get the routes for the current content type
104
+ const contentTypeRoutes = routeInfo.routes.filter((route)=>{
105
+ return route.path.includes(contentTypeInfo.pluralName) || route.path.includes(contentTypeInfo.singularName);
106
+ });
107
+ const paths = contentTypeRoutes.reduce((acc, route)=>{
108
+ // TODO: Find a more reliable way to determine list of entities vs a single entity
109
+ const isListOfEntities = routes.hasFindMethod(route.handler);
110
+ const methodVerb = route.method.toLowerCase();
111
+ const hasPathParams = route.path.includes('/:');
112
+ const pathWithPrefix = getPathWithPrefix(routeInfo.prefix, route);
113
+ const routePath = hasPathParams ? parsePathWithVariables(pathWithPrefix) : pathWithPrefix;
114
+ const responses = getApiResponses({
115
+ uniqueName,
116
+ route,
117
+ isListOfEntities: kind !== 'singleType' && isListOfEntities
118
+ });
119
+ const swaggerConfig = {
120
+ responses,
121
+ tags: [
122
+ ___default.default.upperFirst(uniqueName)
123
+ ],
124
+ parameters: [],
125
+ operationId: `${methodVerb}${routePath}`
126
+ };
127
+ if (isListOfEntities) {
128
+ swaggerConfig.parameters?.push(...queryParams);
129
+ }
130
+ if (hasPathParams) {
131
+ const pathParams = getPathParams(route.path);
132
+ swaggerConfig.parameters?.push(...pathParams);
133
+ }
134
+ if ([
135
+ 'post',
136
+ 'put'
137
+ ].includes(methodVerb)) {
138
+ const refName = 'Request';
139
+ const requestBody = {
140
+ required: true,
141
+ content: {
142
+ 'application/json': {
143
+ schema: {
144
+ $ref: `#/components/schemas/${pascalCase(uniqueName)}${refName}`
145
+ }
146
+ }
147
+ }
148
+ };
149
+ swaggerConfig.requestBody = requestBody;
150
+ }
151
+ ___default.default.set(acc, `${routePath}.${methodVerb}`, swaggerConfig);
152
+ return acc;
153
+ }, {});
154
+ return paths;
155
+ };
156
+ /**
157
+ * @description - Builds the Swagger paths object for each api
158
+ */ const buildApiEndpointPath = (api)=>{
159
+ // A reusable loop for building paths and component schemas
160
+ // Uses the api param to build a new set of params for each content type
161
+ // Passes these new params to the function provided
162
+ return loopContentTypeNames(api, getPaths);
163
+ };
164
+
165
+ module.exports = buildApiEndpointPath;
166
+ //# sourceMappingURL=build-api-endpoint-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-api-endpoint-path.js","sources":["../../../../server/src/services/helpers/build-api-endpoint-path.ts"],"sourcesContent":["import _ from 'lodash';\nimport * as pathToRegexp from 'path-to-regexp';\n\nimport type { Core } from '@strapi/types';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nimport pascalCase from './utils/pascal-case';\nimport queryParams from './utils/query-params';\nimport loopContentTypeNames from './utils/loop-content-type-names';\nimport getApiResponses from './utils/get-api-responses';\nimport { hasFindMethod } from './utils/routes';\n\nimport type { Api, ApiInfo } from '../../types';\n\n/**\n * @description Parses a route with ':variable'\n *\n * @param {string} routePath - The route's path property\n * @returns {string}\n */\nconst parsePathWithVariables = (routePath: string): string => {\n const { tokens } = pathToRegexp.parse(routePath);\n\n return tokens\n .map((token) => {\n switch (token.type) {\n case 'text':\n return token.value;\n case 'param':\n return `{${token.name}}`;\n case 'wildcard':\n return `{${token.name}}`;\n case 'group':\n // Handle group tokens by mapping them within the same function context\n return `(${parsePathWithVariables(token.tokens.map((t) => t satisfies pathToRegexp.Token).join(''))})`;\n default:\n throw new Error(`Unknown token type: ${(token as any).type}`);\n }\n })\n .join('');\n};\n\n/**\n * @description Builds the required object for a path parameter\n *\n * @param {string} routePath - The route's path property\n *\n * @returns {object } Swagger path params object\n */\nconst getPathParams = (routePath: string): OpenAPIV3.ParameterObject[] => {\n const { tokens } = pathToRegexp.parse(routePath);\n\n return tokens.reduce((acc, param) => {\n // Skip non-parameter tokens\n if (param.type !== 'param') {\n return acc;\n }\n\n acc.push({\n name: `${param.name}`,\n in: 'path',\n description: '',\n deprecated: false,\n required: true,\n schema: { type: param.name === 'id' ? 'string' : 'number' },\n });\n\n return acc;\n }, [] as OpenAPIV3.ParameterObject[]);\n};\n\nconst getPathWithPrefix = (prefix: string | undefined, route: Core.Route) => {\n // When the prefix is set on the routes and\n // the current route is not trying to remove it\n if (prefix && !_.has(route.config, 'prefix')) {\n // Add the prefix to the path\n return prefix.concat(route.path);\n }\n\n // Otherwise just return path\n return route.path;\n};\n\n/**\n * @description Gets all paths based on routes\n *\n * @param {object} apiInfo\n * @property {object} apiInfo.routeInfo - The api routes object\n * @property {string} apiInfo.uniqueName - Content type name | Api name + Content type name\n * @property {object} apiInfo.contentTypeInfo - The info object found on content type schemas\n *\n * @returns {object}\n */\nconst getPaths = ({ routeInfo, uniqueName, contentTypeInfo, kind }: ApiInfo) => {\n // Get the routes for the current content type\n const contentTypeRoutes = routeInfo.routes.filter((route) => {\n return (\n route.path.includes(contentTypeInfo.pluralName) ||\n route.path.includes(contentTypeInfo.singularName)\n );\n });\n\n const paths = contentTypeRoutes.reduce((acc: any, route: Core.Route) => {\n // TODO: Find a more reliable way to determine list of entities vs a single entity\n const isListOfEntities = hasFindMethod(route.handler);\n const methodVerb = route.method.toLowerCase();\n const hasPathParams = route.path.includes('/:');\n const pathWithPrefix = getPathWithPrefix(routeInfo.prefix, route);\n const routePath = hasPathParams ? parsePathWithVariables(pathWithPrefix) : pathWithPrefix;\n\n const responses = getApiResponses({\n uniqueName,\n route,\n isListOfEntities: kind !== 'singleType' && isListOfEntities,\n });\n\n const swaggerConfig: OpenAPIV3.OperationObject = {\n responses,\n tags: [_.upperFirst(uniqueName)],\n parameters: [],\n operationId: `${methodVerb}${routePath}`,\n };\n\n if (isListOfEntities) {\n swaggerConfig.parameters?.push(...queryParams);\n }\n\n if (hasPathParams) {\n const pathParams = getPathParams(route.path);\n swaggerConfig.parameters?.push(...pathParams);\n }\n\n if (['post', 'put'].includes(methodVerb)) {\n const refName = 'Request';\n const requestBody = {\n required: true,\n content: {\n 'application/json': {\n schema: {\n $ref: `#/components/schemas/${pascalCase(uniqueName)}${refName}`,\n },\n },\n },\n };\n\n swaggerConfig.requestBody = requestBody;\n }\n\n _.set(acc, `${routePath}.${methodVerb}`, swaggerConfig);\n\n return acc;\n }, {});\n\n return paths;\n};\n\n/**\n * @description - Builds the Swagger paths object for each api\n */\nconst buildApiEndpointPath = (api: Api) => {\n // A reusable loop for building paths and component schemas\n // Uses the api param to build a new set of params for each content type\n // Passes these new params to the function provided\n return loopContentTypeNames(api, getPaths);\n};\n\nexport default buildApiEndpointPath;\n"],"names":["parsePathWithVariables","routePath","tokens","pathToRegexp","parse","map","token","type","value","name","t","join","Error","getPathParams","reduce","acc","param","push","in","description","deprecated","required","schema","getPathWithPrefix","prefix","route","_","has","config","concat","path","getPaths","routeInfo","uniqueName","contentTypeInfo","kind","contentTypeRoutes","routes","filter","includes","pluralName","singularName","paths","isListOfEntities","hasFindMethod","handler","methodVerb","method","toLowerCase","hasPathParams","pathWithPrefix","responses","getApiResponses","swaggerConfig","tags","upperFirst","parameters","operationId","queryParams","pathParams","refName","requestBody","content","$ref","pascalCase","set","buildApiEndpointPath","api","loopContentTypeNames"],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import _ from 'lodash';
2
+ import * as pathToRegexp from 'path-to-regexp';
3
+ import pascalCase from './utils/pascal-case.mjs';
4
+ import params from './utils/query-params.mjs';
5
+ import loopContentTypeNames from './utils/loop-content-type-names.mjs';
6
+ import getApiResponse from './utils/get-api-responses.mjs';
7
+ import { hasFindMethod } from './utils/routes.mjs';
8
+
9
+ /**
10
+ * @description Parses a route with ':variable'
11
+ *
12
+ * @param {string} routePath - The route's path property
13
+ * @returns {string}
14
+ */ const parsePathWithVariables = (routePath)=>{
15
+ const { tokens } = pathToRegexp.parse(routePath);
16
+ return tokens.map((token)=>{
17
+ switch(token.type){
18
+ case 'text':
19
+ return token.value;
20
+ case 'param':
21
+ return `{${token.name}}`;
22
+ case 'wildcard':
23
+ return `{${token.name}}`;
24
+ case 'group':
25
+ // Handle group tokens by mapping them within the same function context
26
+ return `(${parsePathWithVariables(token.tokens.map((t)=>t).join(''))})`;
27
+ default:
28
+ throw new Error(`Unknown token type: ${token.type}`);
29
+ }
30
+ }).join('');
31
+ };
32
+ /**
33
+ * @description Builds the required object for a path parameter
34
+ *
35
+ * @param {string} routePath - The route's path property
36
+ *
37
+ * @returns {object } Swagger path params object
38
+ */ const getPathParams = (routePath)=>{
39
+ const { tokens } = pathToRegexp.parse(routePath);
40
+ return tokens.reduce((acc, param)=>{
41
+ // Skip non-parameter tokens
42
+ if (param.type !== 'param') {
43
+ return acc;
44
+ }
45
+ acc.push({
46
+ name: `${param.name}`,
47
+ in: 'path',
48
+ description: '',
49
+ deprecated: false,
50
+ required: true,
51
+ schema: {
52
+ type: param.name === 'id' ? 'string' : 'number'
53
+ }
54
+ });
55
+ return acc;
56
+ }, []);
57
+ };
58
+ const getPathWithPrefix = (prefix, route)=>{
59
+ // When the prefix is set on the routes and
60
+ // the current route is not trying to remove it
61
+ if (prefix && !_.has(route.config, 'prefix')) {
62
+ // Add the prefix to the path
63
+ return prefix.concat(route.path);
64
+ }
65
+ // Otherwise just return path
66
+ return route.path;
67
+ };
68
+ /**
69
+ * @description Gets all paths based on routes
70
+ *
71
+ * @param {object} apiInfo
72
+ * @property {object} apiInfo.routeInfo - The api routes object
73
+ * @property {string} apiInfo.uniqueName - Content type name | Api name + Content type name
74
+ * @property {object} apiInfo.contentTypeInfo - The info object found on content type schemas
75
+ *
76
+ * @returns {object}
77
+ */ const getPaths = ({ routeInfo, uniqueName, contentTypeInfo, kind })=>{
78
+ // Get the routes for the current content type
79
+ const contentTypeRoutes = routeInfo.routes.filter((route)=>{
80
+ return route.path.includes(contentTypeInfo.pluralName) || route.path.includes(contentTypeInfo.singularName);
81
+ });
82
+ const paths = contentTypeRoutes.reduce((acc, route)=>{
83
+ // TODO: Find a more reliable way to determine list of entities vs a single entity
84
+ const isListOfEntities = hasFindMethod(route.handler);
85
+ const methodVerb = route.method.toLowerCase();
86
+ const hasPathParams = route.path.includes('/:');
87
+ const pathWithPrefix = getPathWithPrefix(routeInfo.prefix, route);
88
+ const routePath = hasPathParams ? parsePathWithVariables(pathWithPrefix) : pathWithPrefix;
89
+ const responses = getApiResponse({
90
+ uniqueName,
91
+ route,
92
+ isListOfEntities: kind !== 'singleType' && isListOfEntities
93
+ });
94
+ const swaggerConfig = {
95
+ responses,
96
+ tags: [
97
+ _.upperFirst(uniqueName)
98
+ ],
99
+ parameters: [],
100
+ operationId: `${methodVerb}${routePath}`
101
+ };
102
+ if (isListOfEntities) {
103
+ swaggerConfig.parameters?.push(...params);
104
+ }
105
+ if (hasPathParams) {
106
+ const pathParams = getPathParams(route.path);
107
+ swaggerConfig.parameters?.push(...pathParams);
108
+ }
109
+ if ([
110
+ 'post',
111
+ 'put'
112
+ ].includes(methodVerb)) {
113
+ const refName = 'Request';
114
+ const requestBody = {
115
+ required: true,
116
+ content: {
117
+ 'application/json': {
118
+ schema: {
119
+ $ref: `#/components/schemas/${pascalCase(uniqueName)}${refName}`
120
+ }
121
+ }
122
+ }
123
+ };
124
+ swaggerConfig.requestBody = requestBody;
125
+ }
126
+ _.set(acc, `${routePath}.${methodVerb}`, swaggerConfig);
127
+ return acc;
128
+ }, {});
129
+ return paths;
130
+ };
131
+ /**
132
+ * @description - Builds the Swagger paths object for each api
133
+ */ const buildApiEndpointPath = (api)=>{
134
+ // A reusable loop for building paths and component schemas
135
+ // Uses the api param to build a new set of params for each content type
136
+ // Passes these new params to the function provided
137
+ return loopContentTypeNames(api, getPaths);
138
+ };
139
+
140
+ export { buildApiEndpointPath as default };
141
+ //# sourceMappingURL=build-api-endpoint-path.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-api-endpoint-path.mjs","sources":["../../../../server/src/services/helpers/build-api-endpoint-path.ts"],"sourcesContent":["import _ from 'lodash';\nimport * as pathToRegexp from 'path-to-regexp';\n\nimport type { Core } from '@strapi/types';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nimport pascalCase from './utils/pascal-case';\nimport queryParams from './utils/query-params';\nimport loopContentTypeNames from './utils/loop-content-type-names';\nimport getApiResponses from './utils/get-api-responses';\nimport { hasFindMethod } from './utils/routes';\n\nimport type { Api, ApiInfo } from '../../types';\n\n/**\n * @description Parses a route with ':variable'\n *\n * @param {string} routePath - The route's path property\n * @returns {string}\n */\nconst parsePathWithVariables = (routePath: string): string => {\n const { tokens } = pathToRegexp.parse(routePath);\n\n return tokens\n .map((token) => {\n switch (token.type) {\n case 'text':\n return token.value;\n case 'param':\n return `{${token.name}}`;\n case 'wildcard':\n return `{${token.name}}`;\n case 'group':\n // Handle group tokens by mapping them within the same function context\n return `(${parsePathWithVariables(token.tokens.map((t) => t satisfies pathToRegexp.Token).join(''))})`;\n default:\n throw new Error(`Unknown token type: ${(token as any).type}`);\n }\n })\n .join('');\n};\n\n/**\n * @description Builds the required object for a path parameter\n *\n * @param {string} routePath - The route's path property\n *\n * @returns {object } Swagger path params object\n */\nconst getPathParams = (routePath: string): OpenAPIV3.ParameterObject[] => {\n const { tokens } = pathToRegexp.parse(routePath);\n\n return tokens.reduce((acc, param) => {\n // Skip non-parameter tokens\n if (param.type !== 'param') {\n return acc;\n }\n\n acc.push({\n name: `${param.name}`,\n in: 'path',\n description: '',\n deprecated: false,\n required: true,\n schema: { type: param.name === 'id' ? 'string' : 'number' },\n });\n\n return acc;\n }, [] as OpenAPIV3.ParameterObject[]);\n};\n\nconst getPathWithPrefix = (prefix: string | undefined, route: Core.Route) => {\n // When the prefix is set on the routes and\n // the current route is not trying to remove it\n if (prefix && !_.has(route.config, 'prefix')) {\n // Add the prefix to the path\n return prefix.concat(route.path);\n }\n\n // Otherwise just return path\n return route.path;\n};\n\n/**\n * @description Gets all paths based on routes\n *\n * @param {object} apiInfo\n * @property {object} apiInfo.routeInfo - The api routes object\n * @property {string} apiInfo.uniqueName - Content type name | Api name + Content type name\n * @property {object} apiInfo.contentTypeInfo - The info object found on content type schemas\n *\n * @returns {object}\n */\nconst getPaths = ({ routeInfo, uniqueName, contentTypeInfo, kind }: ApiInfo) => {\n // Get the routes for the current content type\n const contentTypeRoutes = routeInfo.routes.filter((route) => {\n return (\n route.path.includes(contentTypeInfo.pluralName) ||\n route.path.includes(contentTypeInfo.singularName)\n );\n });\n\n const paths = contentTypeRoutes.reduce((acc: any, route: Core.Route) => {\n // TODO: Find a more reliable way to determine list of entities vs a single entity\n const isListOfEntities = hasFindMethod(route.handler);\n const methodVerb = route.method.toLowerCase();\n const hasPathParams = route.path.includes('/:');\n const pathWithPrefix = getPathWithPrefix(routeInfo.prefix, route);\n const routePath = hasPathParams ? parsePathWithVariables(pathWithPrefix) : pathWithPrefix;\n\n const responses = getApiResponses({\n uniqueName,\n route,\n isListOfEntities: kind !== 'singleType' && isListOfEntities,\n });\n\n const swaggerConfig: OpenAPIV3.OperationObject = {\n responses,\n tags: [_.upperFirst(uniqueName)],\n parameters: [],\n operationId: `${methodVerb}${routePath}`,\n };\n\n if (isListOfEntities) {\n swaggerConfig.parameters?.push(...queryParams);\n }\n\n if (hasPathParams) {\n const pathParams = getPathParams(route.path);\n swaggerConfig.parameters?.push(...pathParams);\n }\n\n if (['post', 'put'].includes(methodVerb)) {\n const refName = 'Request';\n const requestBody = {\n required: true,\n content: {\n 'application/json': {\n schema: {\n $ref: `#/components/schemas/${pascalCase(uniqueName)}${refName}`,\n },\n },\n },\n };\n\n swaggerConfig.requestBody = requestBody;\n }\n\n _.set(acc, `${routePath}.${methodVerb}`, swaggerConfig);\n\n return acc;\n }, {});\n\n return paths;\n};\n\n/**\n * @description - Builds the Swagger paths object for each api\n */\nconst buildApiEndpointPath = (api: Api) => {\n // A reusable loop for building paths and component schemas\n // Uses the api param to build a new set of params for each content type\n // Passes these new params to the function provided\n return loopContentTypeNames(api, getPaths);\n};\n\nexport default buildApiEndpointPath;\n"],"names":["parsePathWithVariables","routePath","tokens","pathToRegexp","parse","map","token","type","value","name","t","join","Error","getPathParams","reduce","acc","param","push","in","description","deprecated","required","schema","getPathWithPrefix","prefix","route","_","has","config","concat","path","getPaths","routeInfo","uniqueName","contentTypeInfo","kind","contentTypeRoutes","routes","filter","includes","pluralName","singularName","paths","isListOfEntities","hasFindMethod","handler","methodVerb","method","toLowerCase","hasPathParams","pathWithPrefix","responses","getApiResponses","swaggerConfig","tags","upperFirst","parameters","operationId","queryParams","pathParams","refName","requestBody","content","$ref","pascalCase","set","buildApiEndpointPath","api","loopContentTypeNames"],"mappings":";;;;;;;;AAcA;;;;;IAMA,MAAMA,yBAAyB,CAACC,SAAAA,GAAAA;AAC9B,IAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,YAAAA,CAAaC,KAAK,CAACH,SAAAA,CAAAA;IAEtC,OAAOC,MAAAA,CACJG,GAAG,CAAC,CAACC,KAAAA,GAAAA;AACJ,QAAA,OAAQA,MAAMC,IAAI;YAChB,KAAK,MAAA;AACH,gBAAA,OAAOD,MAAME,KAAK;YACpB,KAAK,OAAA;AACH,gBAAA,OAAO,CAAC,CAAC,EAAEF,MAAMG,IAAI,CAAC,CAAC,CAAC;YAC1B,KAAK,UAAA;AACH,gBAAA,OAAO,CAAC,CAAC,EAAEH,MAAMG,IAAI,CAAC,CAAC,CAAC;YAC1B,KAAK,OAAA;;AAEH,gBAAA,OAAO,CAAC,CAAC,EAAET,sBAAAA,CAAuBM,KAAAA,CAAMJ,MAAM,CAACG,GAAG,CAAC,CAACK,IAAMA,CAAAA,CAAAA,CAAgCC,IAAI,CAAC,EAAA,CAAA,CAAA,CAAK,CAAC,CAAC;AACxG,YAAA;gBACE,MAAM,IAAIC,MAAM,CAAC,oBAAoB,EAAE,KAACN,CAAcC,IAAI,CAAA,CAAE,CAAA;AAChE;AACF,IAAA,CAAA,CAAA,CACCI,IAAI,CAAC,EAAA,CAAA;AACV,CAAA;AAEA;;;;;;IAOA,MAAME,gBAAgB,CAACZ,SAAAA,GAAAA;AACrB,IAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,YAAAA,CAAaC,KAAK,CAACH,SAAAA,CAAAA;AAEtC,IAAA,OAAOC,MAAAA,CAAOY,MAAM,CAAC,CAACC,GAAAA,EAAKC,KAAAA,GAAAA;;QAEzB,IAAIA,KAAAA,CAAMT,IAAI,KAAK,OAAA,EAAS;YAC1B,OAAOQ,GAAAA;AACT,QAAA;AAEAA,QAAAA,GAAAA,CAAIE,IAAI,CAAC;YACPR,IAAAA,EAAM,CAAA,EAAGO,KAAAA,CAAMP,IAAI,CAAA,CAAE;YACrBS,EAAAA,EAAI,MAAA;YACJC,WAAAA,EAAa,EAAA;YACbC,UAAAA,EAAY,KAAA;YACZC,QAAAA,EAAU,IAAA;YACVC,MAAAA,EAAQ;AAAEf,gBAAAA,IAAAA,EAAMS,KAAAA,CAAMP,IAAI,KAAK,IAAA,GAAO,QAAA,GAAW;AAAS;AAC5D,SAAA,CAAA;QAEA,OAAOM,GAAAA;AACT,IAAA,CAAA,EAAG,EAAE,CAAA;AACP,CAAA;AAEA,MAAMQ,iBAAAA,GAAoB,CAACC,MAAAA,EAA4BC,KAAAA,GAAAA;;;IAGrD,IAAID,MAAAA,IAAU,CAACE,CAAAA,CAAEC,GAAG,CAACF,KAAAA,CAAMG,MAAM,EAAE,QAAA,CAAA,EAAW;;AAE5C,QAAA,OAAOJ,MAAAA,CAAOK,MAAM,CAACJ,KAAAA,CAAMK,IAAI,CAAA;AACjC,IAAA;;AAGA,IAAA,OAAOL,MAAMK,IAAI;AACnB,CAAA;AAEA;;;;;;;;;IAUA,MAAMC,QAAAA,GAAW,CAAC,EAAEC,SAAS,EAAEC,UAAU,EAAEC,eAAe,EAAEC,IAAI,EAAW,GAAA;;AAEzE,IAAA,MAAMC,oBAAoBJ,SAAAA,CAAUK,MAAM,CAACC,MAAM,CAAC,CAACb,KAAAA,GAAAA;AACjD,QAAA,OACEA,KAAAA,CAAMK,IAAI,CAACS,QAAQ,CAACL,eAAAA,CAAgBM,UAAU,CAAA,IAC9Cf,KAAAA,CAAMK,IAAI,CAACS,QAAQ,CAACL,gBAAgBO,YAAY,CAAA;AAEpD,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMC,KAAAA,GAAQN,iBAAAA,CAAkBtB,MAAM,CAAC,CAACC,GAAAA,EAAUU,KAAAA,GAAAA;;QAEhD,MAAMkB,gBAAAA,GAAmBC,aAAAA,CAAcnB,KAAAA,CAAMoB,OAAO,CAAA;AACpD,QAAA,MAAMC,UAAAA,GAAarB,KAAAA,CAAMsB,MAAM,CAACC,WAAW,EAAA;AAC3C,QAAA,MAAMC,aAAAA,GAAgBxB,KAAAA,CAAMK,IAAI,CAACS,QAAQ,CAAC,IAAA,CAAA;AAC1C,QAAA,MAAMW,cAAAA,GAAiB3B,iBAAAA,CAAkBS,SAAAA,CAAUR,MAAM,EAAEC,KAAAA,CAAAA;QAC3D,MAAMxB,SAAAA,GAAYgD,aAAAA,GAAgBjD,sBAAAA,CAAuBkD,cAAAA,CAAAA,GAAkBA,cAAAA;AAE3E,QAAA,MAAMC,YAAYC,cAAAA,CAAgB;AAChCnB,YAAAA,UAAAA;AACAR,YAAAA,KAAAA;AACAkB,YAAAA,gBAAAA,EAAkBR,SAAS,YAAA,IAAgBQ;AAC7C,SAAA,CAAA;AAEA,QAAA,MAAMU,aAAAA,GAA2C;AAC/CF,YAAAA,SAAAA;YACAG,IAAAA,EAAM;AAAC5B,gBAAAA,CAAAA,CAAE6B,UAAU,CAACtB,UAAAA;AAAY,aAAA;AAChCuB,YAAAA,UAAAA,EAAY,EAAE;YACdC,WAAAA,EAAa,CAAA,EAAGX,aAAa7C,SAAAA,CAAAA;AAC/B,SAAA;AAEA,QAAA,IAAI0C,gBAAAA,EAAkB;YACpBU,aAAAA,CAAcG,UAAU,EAAEvC,IAAAA,CAAAA,GAAQyC,MAAAA,CAAAA;AACpC,QAAA;AAEA,QAAA,IAAIT,aAAAA,EAAe;YACjB,MAAMU,UAAAA,GAAa9C,aAAAA,CAAcY,KAAAA,CAAMK,IAAI,CAAA;YAC3CuB,aAAAA,CAAcG,UAAU,EAAEvC,IAAAA,CAAAA,GAAQ0C,UAAAA,CAAAA;AACpC,QAAA;QAEA,IAAI;AAAC,YAAA,MAAA;AAAQ,YAAA;SAAM,CAACpB,QAAQ,CAACO,UAAAA,CAAAA,EAAa;AACxC,YAAA,MAAMc,OAAAA,GAAU,SAAA;AAChB,YAAA,MAAMC,WAAAA,GAAc;gBAClBxC,QAAAA,EAAU,IAAA;gBACVyC,OAAAA,EAAS;oBACP,kBAAA,EAAoB;wBAClBxC,MAAAA,EAAQ;AACNyC,4BAAAA,IAAAA,EAAM,CAAC,qBAAqB,EAAEC,UAAAA,CAAW/B,cAAc2B,OAAAA,CAAAA;AACzD;AACF;AACF;AACF,aAAA;AAEAP,YAAAA,aAAAA,CAAcQ,WAAW,GAAGA,WAAAA;AAC9B,QAAA;QAEAnC,CAAAA,CAAEuC,GAAG,CAAClD,GAAAA,EAAK,CAAA,EAAGd,UAAU,CAAC,EAAE6C,YAAY,EAAEO,aAAAA,CAAAA;QAEzC,OAAOtC,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;IAEJ,OAAO2B,KAAAA;AACT,CAAA;AAEA;;IAGA,MAAMwB,uBAAuB,CAACC,GAAAA,GAAAA;;;;AAI5B,IAAA,OAAOC,qBAAqBD,GAAAA,EAAKpC,QAAAA,CAAAA;AACnC;;;;"}
@@ -0,0 +1,178 @@
1
+ 'use strict';
2
+
3
+ var _ = require('lodash');
4
+ var cleanSchemaAttributes = require('./utils/clean-schema-attributes.js');
5
+ var loopContentTypeNames = require('./utils/loop-content-type-names.js');
6
+ var pascalCase = require('./utils/pascal-case.js');
7
+ var routes = require('./utils/routes.js');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var ___default = /*#__PURE__*/_interopDefault(_);
12
+
13
+ const getRequiredAttributes = (allAttributes)=>{
14
+ const requiredAttributes = [];
15
+ for(const key in allAttributes){
16
+ if (allAttributes[key].required) {
17
+ requiredAttributes.push(key);
18
+ }
19
+ }
20
+ return requiredAttributes;
21
+ };
22
+ /**
23
+ * @description Get all open api schema objects for a given content type
24
+ *
25
+ * @param {object} apiInfo
26
+ * @property {string} apiInfo.uniqueName - Api name | Api name + Content type name
27
+ * @property {object} apiInfo.attributes - Attributes on content type
28
+ * @property {object} apiInfo.routeInfo - The routes for the api
29
+ *
30
+ * @returns {object} Open API schemas
31
+ */ const getAllSchemasForContentType = ({ routeInfo, attributes, uniqueName })=>{
32
+ // Store response and request schemas in an object
33
+ let strapiComponentSchemas = {};
34
+ const schemas = {};
35
+ const typeName = pascalCase(uniqueName);
36
+ // adds a ComponentSchema to the Schemas so it can be used as Ref
37
+ const didAddStrapiComponentsToSchemas = (schemaName, schema)=>{
38
+ if (!Object.keys(schema) || !Object.keys(schema.properties)) return false;
39
+ // Add the Strapi components to the schema
40
+ strapiComponentSchemas = {
41
+ ...strapiComponentSchemas,
42
+ [schemaName]: schema
43
+ };
44
+ return true;
45
+ };
46
+ // Get all the route methods
47
+ const routeMethods = routeInfo.routes.map((route)=>route.method);
48
+ const attributesToOmit = [
49
+ 'createdAt',
50
+ 'updatedAt',
51
+ 'publishedAt',
52
+ 'publishedBy',
53
+ 'updatedBy',
54
+ 'createdBy'
55
+ ];
56
+ const attributesForRequest = ___default.default.omit(attributes, attributesToOmit);
57
+ // Get a list of required attribute names
58
+ const requiredRequestAttributes = getRequiredAttributes(attributesForRequest);
59
+ // Build the request schemas when the route has POST or PUT methods
60
+ if (routeMethods.includes('POST') || routeMethods.includes('PUT')) {
61
+ // Build localization requests schemas
62
+ // Build the request schema
63
+ Object.assign(schemas, {
64
+ [`${typeName}Request`]: {
65
+ type: 'object',
66
+ required: [
67
+ 'data'
68
+ ],
69
+ properties: {
70
+ data: {
71
+ ...requiredRequestAttributes.length && {
72
+ required: requiredRequestAttributes
73
+ },
74
+ type: 'object',
75
+ properties: cleanSchemaAttributes(attributesForRequest, {
76
+ isRequest: true,
77
+ didAddStrapiComponentsToSchemas
78
+ })
79
+ }
80
+ }
81
+ }
82
+ });
83
+ }
84
+ // Check for routes that need to return a list
85
+ const hasListOfEntities = routeInfo.routes.filter((route)=>routes.hasFindMethod(route.handler)).length;
86
+ if (hasListOfEntities) {
87
+ // Build the list response schema
88
+ Object.assign(schemas, {
89
+ [`${typeName}ListResponse`]: {
90
+ type: 'object',
91
+ properties: {
92
+ data: {
93
+ type: 'array',
94
+ items: {
95
+ $ref: `#/components/schemas/${typeName}`
96
+ }
97
+ },
98
+ meta: {
99
+ type: 'object',
100
+ properties: {
101
+ pagination: {
102
+ type: 'object',
103
+ properties: {
104
+ page: {
105
+ type: 'integer'
106
+ },
107
+ pageSize: {
108
+ type: 'integer',
109
+ minimum: 25
110
+ },
111
+ pageCount: {
112
+ type: 'integer',
113
+ maximum: 1
114
+ },
115
+ total: {
116
+ type: 'integer'
117
+ }
118
+ }
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+ });
125
+ }
126
+ const requiredAttributes = getRequiredAttributes(attributes);
127
+ // Build the response schema
128
+ Object.assign(schemas, {
129
+ [`${typeName}`]: {
130
+ type: 'object',
131
+ ...requiredAttributes.length && {
132
+ required: requiredAttributes
133
+ },
134
+ properties: {
135
+ id: {
136
+ oneOf: [
137
+ {
138
+ type: 'string'
139
+ },
140
+ {
141
+ type: 'number'
142
+ }
143
+ ]
144
+ },
145
+ documentId: {
146
+ type: 'string'
147
+ },
148
+ ...cleanSchemaAttributes(attributes, {
149
+ didAddStrapiComponentsToSchemas
150
+ })
151
+ }
152
+ },
153
+ [`${typeName}Response`]: {
154
+ type: 'object',
155
+ properties: {
156
+ data: {
157
+ $ref: `#/components/schemas/${typeName}`
158
+ },
159
+ meta: {
160
+ type: 'object'
161
+ }
162
+ }
163
+ }
164
+ });
165
+ return {
166
+ ...schemas,
167
+ ...strapiComponentSchemas
168
+ };
169
+ };
170
+ const buildComponentSchema = (api)=>{
171
+ // A reusable loop for building paths and component schemas
172
+ // Uses the api param to build a new set of params for each content type
173
+ // Passes these new params to the function provided
174
+ return loopContentTypeNames(api, getAllSchemasForContentType);
175
+ };
176
+
177
+ module.exports = buildComponentSchema;
178
+ //# sourceMappingURL=build-component-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-component-schema.js","sources":["../../../../server/src/services/helpers/build-component-schema.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { Core, Struct } from '@strapi/types';\n\nimport cleanSchemaAttributes from './utils/clean-schema-attributes';\nimport loopContentTypeNames from './utils/loop-content-type-names';\nimport pascalCase from './utils/pascal-case';\nimport { hasFindMethod } from './utils/routes';\n\nimport type { Api, ApiInfo } from '../../types';\n\nconst getRequiredAttributes = (allAttributes: Struct.SchemaAttributes) => {\n const requiredAttributes: string[] = [];\n\n for (const key in allAttributes) {\n if (allAttributes[key].required) {\n requiredAttributes.push(key);\n }\n }\n\n return requiredAttributes;\n};\n\n/**\n * @description Get all open api schema objects for a given content type\n *\n * @param {object} apiInfo\n * @property {string} apiInfo.uniqueName - Api name | Api name + Content type name\n * @property {object} apiInfo.attributes - Attributes on content type\n * @property {object} apiInfo.routeInfo - The routes for the api\n *\n * @returns {object} Open API schemas\n */\nconst getAllSchemasForContentType = ({ routeInfo, attributes, uniqueName }: ApiInfo) => {\n // Store response and request schemas in an object\n let strapiComponentSchemas = {};\n const schemas: OpenAPIV3.ComponentsObject = {};\n const typeName = pascalCase(uniqueName);\n\n // adds a ComponentSchema to the Schemas so it can be used as Ref\n const didAddStrapiComponentsToSchemas = (schemaName: string, schema: OpenAPIV3.SchemaObject) => {\n if (!Object.keys(schema) || !Object.keys(schema.properties!)) return false;\n\n // Add the Strapi components to the schema\n strapiComponentSchemas = {\n ...strapiComponentSchemas,\n [schemaName]: schema,\n };\n\n return true;\n };\n\n // Get all the route methods\n const routeMethods = routeInfo.routes.map((route: Core.Route) => route.method);\n\n const attributesToOmit = [\n 'createdAt',\n 'updatedAt',\n 'publishedAt',\n 'publishedBy',\n 'updatedBy',\n 'createdBy',\n ];\n\n const attributesForRequest = _.omit(attributes, attributesToOmit);\n // Get a list of required attribute names\n const requiredRequestAttributes = getRequiredAttributes(attributesForRequest);\n // Build the request schemas when the route has POST or PUT methods\n if (routeMethods.includes('POST') || routeMethods.includes('PUT')) {\n // Build localization requests schemas\n\n // Build the request schema\n Object.assign(schemas, {\n [`${typeName}Request`]: {\n type: 'object',\n required: ['data'],\n properties: {\n data: {\n ...(requiredRequestAttributes.length && { required: requiredRequestAttributes }),\n type: 'object',\n properties: cleanSchemaAttributes(attributesForRequest, {\n isRequest: true,\n didAddStrapiComponentsToSchemas,\n }),\n },\n },\n },\n });\n }\n\n // Check for routes that need to return a list\n const hasListOfEntities = routeInfo.routes.filter((route: Core.Route) =>\n hasFindMethod(route.handler)\n ).length;\n\n if (hasListOfEntities) {\n // Build the list response schema\n Object.assign(schemas, {\n [`${typeName}ListResponse`]: {\n type: 'object',\n properties: {\n data: {\n type: 'array',\n items: {\n $ref: `#/components/schemas/${typeName}`,\n },\n },\n meta: {\n type: 'object',\n properties: {\n pagination: {\n type: 'object',\n properties: {\n page: { type: 'integer' },\n pageSize: { type: 'integer', minimum: 25 },\n pageCount: { type: 'integer', maximum: 1 },\n total: { type: 'integer' },\n },\n },\n },\n },\n },\n },\n });\n }\n\n const requiredAttributes = getRequiredAttributes(attributes);\n // Build the response schema\n Object.assign(schemas, {\n [`${typeName}`]: {\n type: 'object',\n ...(requiredAttributes.length && { required: requiredAttributes }),\n properties: {\n id: { oneOf: [{ type: 'string' }, { type: 'number' }] },\n documentId: { type: 'string' },\n ...cleanSchemaAttributes(attributes, { didAddStrapiComponentsToSchemas }),\n },\n },\n\n [`${typeName}Response`]: {\n type: 'object',\n properties: {\n data: {\n $ref: `#/components/schemas/${typeName}`,\n },\n meta: { type: 'object' },\n },\n },\n });\n\n return { ...schemas, ...strapiComponentSchemas };\n};\n\nconst buildComponentSchema = (api: Api) => {\n // A reusable loop for building paths and component schemas\n // Uses the api param to build a new set of params for each content type\n // Passes these new params to the function provided\n return loopContentTypeNames(api, getAllSchemasForContentType);\n};\n\nexport default buildComponentSchema;\n"],"names":["getRequiredAttributes","allAttributes","requiredAttributes","key","required","push","getAllSchemasForContentType","routeInfo","attributes","uniqueName","strapiComponentSchemas","schemas","typeName","pascalCase","didAddStrapiComponentsToSchemas","schemaName","schema","Object","keys","properties","routeMethods","routes","map","route","method","attributesToOmit","attributesForRequest","_","omit","requiredRequestAttributes","includes","assign","type","data","length","cleanSchemaAttributes","isRequest","hasListOfEntities","filter","hasFindMethod","handler","items","$ref","meta","pagination","page","pageSize","minimum","pageCount","maximum","total","id","oneOf","documentId","buildComponentSchema","api","loopContentTypeNames"],"mappings":"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"}