@strapi/plugin-documentation 0.0.0-experimental.62ebf57bb35846666febb5ee2078fe02fe990f57 → 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 (500) hide show
  1. package/README.md +2 -3
  2. package/dist/admin/components/SettingsForm.js +203 -0
  3. package/dist/admin/components/SettingsForm.js.map +1 -0
  4. package/dist/admin/components/SettingsForm.mjs +180 -0
  5. package/dist/admin/components/SettingsForm.mjs.map +1 -0
  6. package/dist/admin/constants.js +47 -0
  7. package/dist/admin/constants.js.map +1 -0
  8. package/dist/admin/constants.mjs +45 -0
  9. package/dist/admin/constants.mjs.map +1 -0
  10. package/dist/admin/index.js +96 -5
  11. package/dist/admin/index.js.map +1 -1
  12. package/dist/admin/index.mjs +91 -5
  13. package/dist/admin/index.mjs.map +1 -1
  14. package/dist/admin/pages/App.js +254 -0
  15. package/dist/admin/pages/App.js.map +1 -0
  16. package/dist/admin/pages/App.mjs +232 -0
  17. package/dist/admin/pages/App.mjs.map +1 -0
  18. package/dist/admin/pages/Settings.js +54 -0
  19. package/dist/admin/pages/Settings.js.map +1 -0
  20. package/dist/admin/pages/Settings.mjs +52 -0
  21. package/dist/admin/pages/Settings.mjs.map +1 -0
  22. package/dist/admin/pluginId.js +6 -0
  23. package/dist/admin/pluginId.js.map +1 -0
  24. package/dist/admin/pluginId.mjs +4 -0
  25. package/dist/admin/pluginId.mjs.map +1 -0
  26. package/dist/admin/services/api.js +55 -0
  27. package/dist/admin/services/api.js.map +1 -0
  28. package/dist/admin/services/api.mjs +50 -0
  29. package/dist/admin/services/api.mjs.map +1 -0
  30. package/dist/admin/src/components/SettingsForm.d.ts +8 -0
  31. package/dist/admin/src/constants.d.ts +18 -0
  32. package/dist/admin/src/index.d.ts +15 -0
  33. package/dist/admin/src/pages/App.d.ts +2 -0
  34. package/dist/admin/src/pages/Settings.d.ts +2 -0
  35. package/dist/admin/src/pages/tests/App.test.d.ts +1 -0
  36. package/dist/admin/src/pages/tests/Settings.test.d.ts +1 -0
  37. package/dist/admin/src/pluginId.d.ts +1 -0
  38. package/dist/admin/src/services/api.d.ts +13 -0
  39. package/dist/admin/src/types.d.ts +16 -0
  40. package/dist/admin/src/utils/baseQuery.d.ts +5 -0
  41. package/dist/admin/src/utils/getTrad.d.ts +1 -0
  42. package/dist/admin/src/utils/index.d.ts +2 -0
  43. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +2 -0
  44. package/dist/admin/translations/ar.json.js +25 -0
  45. package/dist/admin/translations/ar.json.js.map +1 -0
  46. package/dist/admin/translations/ar.json.mjs +23 -0
  47. package/dist/admin/translations/ar.json.mjs.map +1 -0
  48. package/dist/admin/translations/cs.json.js +47 -0
  49. package/dist/admin/translations/cs.json.js.map +1 -0
  50. package/dist/admin/translations/cs.json.mjs +45 -0
  51. package/dist/admin/translations/cs.json.mjs.map +1 -0
  52. package/dist/admin/translations/da.json.js +44 -0
  53. package/dist/admin/translations/da.json.js.map +1 -0
  54. package/dist/admin/translations/da.json.mjs +42 -0
  55. package/dist/admin/translations/da.json.mjs.map +1 -0
  56. package/dist/admin/translations/de.json.js +47 -0
  57. package/dist/admin/translations/de.json.js.map +1 -0
  58. package/dist/admin/translations/de.json.mjs +45 -0
  59. package/dist/admin/translations/de.json.mjs.map +1 -0
  60. package/dist/admin/translations/en.json.js +47 -0
  61. package/dist/admin/translations/en.json.js.map +1 -0
  62. package/dist/admin/translations/en.json.mjs +45 -0
  63. package/dist/admin/translations/en.json.mjs.map +1 -0
  64. package/dist/admin/translations/es.json.js +47 -0
  65. package/dist/admin/translations/es.json.js.map +1 -0
  66. package/dist/admin/translations/es.json.mjs +45 -0
  67. package/dist/admin/translations/es.json.mjs.map +1 -0
  68. package/dist/admin/translations/fr.json.js +31 -0
  69. package/dist/admin/translations/fr.json.js.map +1 -0
  70. package/dist/admin/translations/fr.json.mjs +29 -0
  71. package/dist/admin/translations/fr.json.mjs.map +1 -0
  72. package/dist/admin/translations/id.json.js +29 -0
  73. package/dist/admin/translations/id.json.js.map +1 -0
  74. package/dist/admin/translations/id.json.mjs +27 -0
  75. package/dist/admin/translations/id.json.mjs.map +1 -0
  76. package/dist/admin/translations/it.json.js +31 -0
  77. package/dist/admin/translations/it.json.js.map +1 -0
  78. package/dist/admin/translations/it.json.mjs +29 -0
  79. package/dist/admin/translations/it.json.mjs.map +1 -0
  80. package/dist/admin/translations/ko.json.js +44 -0
  81. package/dist/admin/translations/ko.json.js.map +1 -0
  82. package/dist/admin/translations/ko.json.mjs +42 -0
  83. package/dist/admin/translations/ko.json.mjs.map +1 -0
  84. package/dist/admin/translations/ms.json.js +28 -0
  85. package/dist/admin/translations/ms.json.js.map +1 -0
  86. package/dist/admin/translations/ms.json.mjs +26 -0
  87. package/dist/admin/translations/ms.json.mjs.map +1 -0
  88. package/dist/admin/translations/nl.json.js +26 -0
  89. package/dist/admin/translations/nl.json.js.map +1 -0
  90. package/dist/admin/translations/nl.json.mjs +24 -0
  91. package/dist/admin/translations/nl.json.mjs.map +1 -0
  92. package/dist/admin/translations/pl.json.js +47 -0
  93. package/dist/admin/translations/pl.json.js.map +1 -0
  94. package/dist/admin/translations/pl.json.mjs +45 -0
  95. package/dist/admin/translations/pl.json.mjs.map +1 -0
  96. package/dist/admin/translations/pt-BR.json.js +26 -0
  97. package/dist/admin/translations/pt-BR.json.js.map +1 -0
  98. package/dist/admin/translations/pt-BR.json.mjs +24 -0
  99. package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
  100. package/dist/admin/translations/pt.json.js +26 -0
  101. package/dist/admin/translations/pt.json.js.map +1 -0
  102. package/dist/admin/translations/pt.json.mjs +24 -0
  103. package/dist/admin/translations/pt.json.mjs.map +1 -0
  104. package/dist/admin/translations/ru.json.js +47 -0
  105. package/dist/admin/translations/ru.json.js.map +1 -0
  106. package/dist/admin/translations/ru.json.mjs +45 -0
  107. package/dist/admin/translations/ru.json.mjs.map +1 -0
  108. package/dist/admin/translations/sk.json.js +47 -0
  109. package/dist/admin/translations/sk.json.js.map +1 -0
  110. package/dist/admin/translations/sk.json.mjs +45 -0
  111. package/dist/admin/translations/sk.json.mjs.map +1 -0
  112. package/dist/admin/translations/sv.json.js +44 -0
  113. package/dist/admin/translations/sv.json.js.map +1 -0
  114. package/dist/admin/translations/sv.json.mjs +42 -0
  115. package/dist/admin/translations/sv.json.mjs.map +1 -0
  116. package/dist/admin/translations/th.json.js +29 -0
  117. package/dist/admin/translations/th.json.js.map +1 -0
  118. package/dist/admin/translations/th.json.mjs +27 -0
  119. package/dist/admin/translations/th.json.mjs.map +1 -0
  120. package/dist/admin/translations/tr.json.js +44 -0
  121. package/dist/admin/translations/tr.json.js.map +1 -0
  122. package/dist/admin/translations/tr.json.mjs +42 -0
  123. package/dist/admin/translations/tr.json.mjs.map +1 -0
  124. package/dist/admin/translations/uk.json.js +47 -0
  125. package/dist/admin/translations/uk.json.js.map +1 -0
  126. package/dist/admin/translations/uk.json.mjs +45 -0
  127. package/dist/admin/translations/uk.json.mjs.map +1 -0
  128. package/dist/admin/translations/vi.json.js +29 -0
  129. package/dist/admin/translations/vi.json.js.map +1 -0
  130. package/dist/admin/translations/vi.json.mjs +27 -0
  131. package/dist/admin/translations/vi.json.mjs.map +1 -0
  132. package/dist/admin/translations/zh-Hans.json.js +33 -0
  133. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  134. package/dist/admin/translations/zh-Hans.json.mjs +31 -0
  135. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  136. package/dist/admin/translations/zh.json.js +44 -0
  137. package/dist/admin/translations/zh.json.js.map +1 -0
  138. package/dist/admin/translations/zh.json.mjs +42 -0
  139. package/dist/admin/translations/zh.json.mjs.map +1 -0
  140. package/dist/admin/utils/baseQuery.js +8 -0
  141. package/dist/admin/utils/baseQuery.js.map +1 -0
  142. package/dist/admin/utils/baseQuery.mjs +6 -0
  143. package/dist/admin/utils/baseQuery.mjs.map +1 -0
  144. package/dist/admin/utils/getTrad.js +8 -0
  145. package/dist/admin/utils/getTrad.js.map +1 -0
  146. package/dist/admin/utils/getTrad.mjs +6 -0
  147. package/dist/admin/utils/getTrad.mjs.map +1 -0
  148. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  149. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  150. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  151. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  152. package/dist/server/bootstrap.js +57 -0
  153. package/dist/server/bootstrap.js.map +1 -0
  154. package/dist/server/bootstrap.mjs +55 -0
  155. package/dist/server/bootstrap.mjs.map +1 -0
  156. package/dist/server/config/default-plugin-config.js +88 -0
  157. package/dist/server/config/default-plugin-config.js.map +1 -0
  158. package/dist/server/config/default-plugin-config.mjs +86 -0
  159. package/dist/server/config/default-plugin-config.mjs.map +1 -0
  160. package/dist/server/config/index.js +10 -0
  161. package/dist/server/config/index.js.map +1 -0
  162. package/dist/server/config/index.mjs +8 -0
  163. package/dist/server/config/index.mjs.map +1 -0
  164. package/dist/server/controllers/documentation.js +194 -0
  165. package/dist/server/controllers/documentation.js.map +1 -0
  166. package/dist/server/controllers/documentation.mjs +182 -0
  167. package/dist/server/controllers/documentation.mjs.map +1 -0
  168. package/dist/server/controllers/index.js +10 -0
  169. package/dist/server/controllers/index.js.map +1 -0
  170. package/dist/server/controllers/index.mjs +8 -0
  171. package/dist/server/controllers/index.mjs.map +1 -0
  172. package/dist/server/index.js +20 -0
  173. package/dist/server/index.js.map +1 -0
  174. package/dist/server/index.mjs +18 -0
  175. package/dist/server/index.mjs.map +1 -0
  176. package/dist/server/middlewares/documentation.js +33 -0
  177. package/dist/server/middlewares/documentation.js.map +1 -0
  178. package/dist/server/middlewares/documentation.mjs +25 -0
  179. package/dist/server/middlewares/documentation.mjs.map +1 -0
  180. package/dist/server/middlewares/restrict-access.js +23 -0
  181. package/dist/server/middlewares/restrict-access.js.map +1 -0
  182. package/dist/server/middlewares/restrict-access.mjs +21 -0
  183. package/dist/server/middlewares/restrict-access.mjs.map +1 -0
  184. package/dist/server/public/index.html.js +6 -0
  185. package/dist/server/public/index.html.js.map +1 -0
  186. package/dist/server/public/index.html.mjs +4 -0
  187. package/dist/server/public/index.html.mjs.map +1 -0
  188. package/dist/server/public/login.html.js +6 -0
  189. package/dist/server/public/login.html.js.map +1 -0
  190. package/dist/server/public/login.html.mjs +4 -0
  191. package/dist/server/public/login.html.mjs.map +1 -0
  192. package/dist/server/register.js +12 -0
  193. package/dist/server/register.js.map +1 -0
  194. package/dist/server/register.mjs +10 -0
  195. package/dist/server/register.mjs.map +1 -0
  196. package/dist/server/routes/index.js +106 -0
  197. package/dist/server/routes/index.js.map +1 -0
  198. package/dist/server/routes/index.mjs +104 -0
  199. package/dist/server/routes/index.mjs.map +1 -0
  200. package/dist/server/services/documentation.js +193 -0
  201. package/dist/server/services/documentation.js.map +1 -0
  202. package/dist/server/services/documentation.mjs +186 -0
  203. package/dist/server/services/documentation.mjs.map +1 -0
  204. package/dist/server/services/helpers/build-api-endpoint-path.js +166 -0
  205. package/dist/server/services/helpers/build-api-endpoint-path.js.map +1 -0
  206. package/dist/server/services/helpers/build-api-endpoint-path.mjs +141 -0
  207. package/dist/server/services/helpers/build-api-endpoint-path.mjs.map +1 -0
  208. package/dist/server/services/helpers/build-component-schema.js +178 -0
  209. package/dist/server/services/helpers/build-component-schema.js.map +1 -0
  210. package/dist/server/services/helpers/build-component-schema.mjs +172 -0
  211. package/dist/server/services/helpers/build-component-schema.mjs.map +1 -0
  212. package/dist/server/services/helpers/utils/clean-schema-attributes.js +315 -0
  213. package/dist/server/services/helpers/utils/clean-schema-attributes.js.map +1 -0
  214. package/dist/server/services/helpers/utils/clean-schema-attributes.mjs +313 -0
  215. package/dist/server/services/helpers/utils/clean-schema-attributes.mjs.map +1 -0
  216. package/dist/server/services/helpers/utils/get-api-responses.js +88 -0
  217. package/dist/server/services/helpers/utils/get-api-responses.js.map +1 -0
  218. package/dist/server/services/helpers/utils/get-api-responses.mjs +86 -0
  219. package/dist/server/services/helpers/utils/get-api-responses.mjs.map +1 -0
  220. package/dist/server/services/helpers/utils/get-schema-data.js +57 -0
  221. package/dist/server/services/helpers/utils/get-schema-data.js.map +1 -0
  222. package/dist/server/services/helpers/utils/get-schema-data.mjs +55 -0
  223. package/dist/server/services/helpers/utils/get-schema-data.mjs.map +1 -0
  224. package/dist/server/services/helpers/utils/loop-content-type-names.js +44 -0
  225. package/dist/server/services/helpers/utils/loop-content-type-names.js.map +1 -0
  226. package/dist/server/services/helpers/utils/loop-content-type-names.mjs +38 -0
  227. package/dist/server/services/helpers/utils/loop-content-type-names.mjs.map +1 -0
  228. package/dist/server/services/helpers/utils/pascal-case.js +14 -0
  229. package/dist/server/services/helpers/utils/pascal-case.js.map +1 -0
  230. package/dist/server/services/helpers/utils/pascal-case.mjs +8 -0
  231. package/dist/server/services/helpers/utils/pascal-case.mjs.map +1 -0
  232. package/dist/server/services/helpers/utils/query-params.js +109 -0
  233. package/dist/server/services/helpers/utils/query-params.js.map +1 -0
  234. package/dist/server/services/helpers/utils/query-params.mjs +107 -0
  235. package/dist/server/services/helpers/utils/query-params.mjs.map +1 -0
  236. package/dist/server/services/helpers/utils/routes.js +11 -0
  237. package/dist/server/services/helpers/utils/routes.js.map +1 -0
  238. package/dist/server/services/helpers/utils/routes.mjs +9 -0
  239. package/dist/server/services/helpers/utils/routes.mjs.map +1 -0
  240. package/dist/server/services/index.js +13 -0
  241. package/dist/server/services/index.js.map +1 -0
  242. package/dist/server/services/index.mjs +11 -0
  243. package/dist/server/services/index.mjs.map +1 -0
  244. package/dist/server/services/override.js +45 -0
  245. package/dist/server/services/override.js.map +1 -0
  246. package/dist/server/services/override.mjs +43 -0
  247. package/dist/server/services/override.mjs.map +1 -0
  248. package/dist/server/services/utils/get-plugins-that-need-documentation.js +24 -0
  249. package/dist/server/services/utils/get-plugins-that-need-documentation.js.map +1 -0
  250. package/dist/server/services/utils/get-plugins-that-need-documentation.mjs +22 -0
  251. package/dist/server/services/utils/get-plugins-that-need-documentation.mjs.map +1 -0
  252. package/dist/server/src/bootstrap.d.ts +5 -0
  253. package/dist/server/src/bootstrap.d.ts.map +1 -0
  254. package/dist/server/src/config/default-plugin-config.d.ts +3 -0
  255. package/dist/server/src/config/default-plugin-config.d.ts.map +1 -0
  256. package/dist/server/src/config/index.d.ts +4 -0
  257. package/dist/server/src/config/index.d.ts.map +1 -0
  258. package/dist/server/src/controllers/documentation.d.ts +12 -0
  259. package/dist/server/src/controllers/documentation.d.ts.map +1 -0
  260. package/dist/server/src/controllers/index.d.ts +13 -0
  261. package/dist/server/src/controllers/index.d.ts.map +1 -0
  262. package/dist/server/src/index.d.ts +90 -0
  263. package/dist/server/src/index.d.ts.map +1 -0
  264. package/dist/server/src/middlewares/documentation.d.ts +5 -0
  265. package/dist/server/src/middlewares/documentation.d.ts.map +1 -0
  266. package/dist/server/src/middlewares/restrict-access.d.ts +4 -0
  267. package/dist/server/src/middlewares/restrict-access.d.ts.map +1 -0
  268. package/dist/server/src/register.d.ts +5 -0
  269. package/dist/server/src/register.d.ts.map +1 -0
  270. package/dist/server/src/routes/index.d.ts +35 -0
  271. package/dist/server/src/routes/index.d.ts.map +1 -0
  272. package/dist/server/src/services/__mocks__/mock-content-types.d.ts +449 -0
  273. package/dist/server/src/services/__mocks__/mock-content-types.d.ts.map +1 -0
  274. package/dist/server/src/services/__mocks__/mock-strapi-data.d.ts +592 -0
  275. package/dist/server/src/services/__mocks__/mock-strapi-data.d.ts.map +1 -0
  276. package/dist/server/src/services/documentation.d.ts +36 -0
  277. package/dist/server/src/services/documentation.d.ts.map +1 -0
  278. package/dist/server/src/services/helpers/build-api-endpoint-path.d.ts +7 -0
  279. package/dist/server/src/services/helpers/build-api-endpoint-path.d.ts.map +1 -0
  280. package/dist/server/src/services/helpers/build-component-schema.d.ts +4 -0
  281. package/dist/server/src/services/helpers/build-component-schema.d.ts.map +1 -0
  282. package/dist/server/src/services/helpers/index.d.ts +4 -0
  283. package/dist/server/src/services/helpers/index.d.ts.map +1 -0
  284. package/dist/server/src/services/helpers/utils/clean-schema-attributes.d.ts +15 -0
  285. package/dist/server/src/services/helpers/utils/clean-schema-attributes.d.ts.map +1 -0
  286. package/dist/server/src/services/helpers/utils/get-api-responses.d.ts +15 -0
  287. package/dist/server/src/services/helpers/utils/get-api-responses.d.ts.map +1 -0
  288. package/dist/server/src/services/helpers/utils/get-schema-data.d.ts +12 -0
  289. package/dist/server/src/services/helpers/utils/get-schema-data.d.ts.map +1 -0
  290. package/dist/server/src/services/helpers/utils/loop-content-type-names.d.ts +7 -0
  291. package/dist/server/src/services/helpers/utils/loop-content-type-names.d.ts.map +1 -0
  292. package/dist/server/src/services/helpers/utils/pascal-case.d.ts +3 -0
  293. package/dist/server/src/services/helpers/utils/pascal-case.d.ts.map +1 -0
  294. package/dist/server/src/services/helpers/utils/query-params.d.ts +4 -0
  295. package/dist/server/src/services/helpers/utils/query-params.d.ts.map +1 -0
  296. package/dist/server/src/services/helpers/utils/routes.d.ts +3 -0
  297. package/dist/server/src/services/helpers/utils/routes.d.ts.map +1 -0
  298. package/dist/server/src/services/index.d.ts +43 -0
  299. package/dist/server/src/services/index.d.ts.map +1 -0
  300. package/dist/server/src/services/override.d.ts +21 -0
  301. package/dist/server/src/services/override.d.ts.map +1 -0
  302. package/dist/server/src/services/utils/get-plugins-that-need-documentation.d.ts +4 -0
  303. package/dist/server/src/services/utils/get-plugins-that-need-documentation.d.ts.map +1 -0
  304. package/dist/server/src/types.d.ts +28 -0
  305. package/dist/server/src/types.d.ts.map +1 -0
  306. package/dist/server/src/utils.d.ts +12 -0
  307. package/dist/server/src/utils.d.ts.map +1 -0
  308. package/dist/server/utils.js +10 -0
  309. package/dist/server/utils.js.map +1 -0
  310. package/dist/server/utils.mjs +8 -0
  311. package/dist/server/utils.mjs.map +1 -0
  312. package/dist/tests/server.d.ts +2 -0
  313. package/package.json +61 -38
  314. package/.eslintignore +0 -1
  315. package/.eslintrc +0 -17
  316. package/admin/src/constants.js +0 -17
  317. package/admin/src/hooks/useDocumentation.js +0 -77
  318. package/admin/src/index.js +0 -76
  319. package/admin/src/pages/PluginPage/index.jsx +0 -230
  320. package/admin/src/pages/PluginPage/tests/index.test.jsx +0 -206
  321. package/admin/src/pages/SettingsPage/index.jsx +0 -211
  322. package/admin/src/pages/SettingsPage/tests/index.test.jsx +0 -124
  323. package/admin/src/pluginId.js +0 -5
  324. package/admin/src/translations/ar.json +0 -20
  325. package/admin/src/translations/cs.json +0 -21
  326. package/admin/src/translations/de.json +0 -26
  327. package/admin/src/translations/dk.json +0 -39
  328. package/admin/src/translations/en.json +0 -39
  329. package/admin/src/translations/es.json +0 -39
  330. package/admin/src/translations/fr.json +0 -26
  331. package/admin/src/translations/id.json +0 -24
  332. package/admin/src/translations/it.json +0 -26
  333. package/admin/src/translations/ko.json +0 -39
  334. package/admin/src/translations/ms.json +0 -23
  335. package/admin/src/translations/nl.json +0 -21
  336. package/admin/src/translations/pl.json +0 -39
  337. package/admin/src/translations/pt-BR.json +0 -21
  338. package/admin/src/translations/pt.json +0 -21
  339. package/admin/src/translations/ru.json +0 -39
  340. package/admin/src/translations/sk.json +0 -24
  341. package/admin/src/translations/sv.json +0 -39
  342. package/admin/src/translations/th.json +0 -24
  343. package/admin/src/translations/tr.json +0 -39
  344. package/admin/src/translations/uk.json +0 -23
  345. package/admin/src/translations/vi.json +0 -24
  346. package/admin/src/translations/zh-Hans.json +0 -28
  347. package/admin/src/translations/zh.json +0 -39
  348. package/admin/src/utils/getTrad.js +0 -5
  349. package/admin/src/utils/index.js +0 -2
  350. package/dist/_chunks/ar-4yWQcJB-.js +0 -24
  351. package/dist/_chunks/ar-4yWQcJB-.js.map +0 -1
  352. package/dist/_chunks/ar-dlnabvQE.mjs +0 -24
  353. package/dist/_chunks/ar-dlnabvQE.mjs.map +0 -1
  354. package/dist/_chunks/cs-knLCHelx.js +0 -25
  355. package/dist/_chunks/cs-knLCHelx.js.map +0 -1
  356. package/dist/_chunks/cs-x2Pr-Y38.mjs +0 -25
  357. package/dist/_chunks/cs-x2Pr-Y38.mjs.map +0 -1
  358. package/dist/_chunks/de-10J3uf4y.mjs +0 -30
  359. package/dist/_chunks/de-10J3uf4y.mjs.map +0 -1
  360. package/dist/_chunks/de-D0HJjv1r.js +0 -30
  361. package/dist/_chunks/de-D0HJjv1r.js.map +0 -1
  362. package/dist/_chunks/dk-OGCIxZ4f.js +0 -43
  363. package/dist/_chunks/dk-OGCIxZ4f.js.map +0 -1
  364. package/dist/_chunks/dk-_8JEfZdj.mjs +0 -43
  365. package/dist/_chunks/dk-_8JEfZdj.mjs.map +0 -1
  366. package/dist/_chunks/en-V4ac9UMW.mjs +0 -43
  367. package/dist/_chunks/en-V4ac9UMW.mjs.map +0 -1
  368. package/dist/_chunks/en-YgFnjikD.js +0 -43
  369. package/dist/_chunks/en-YgFnjikD.js.map +0 -1
  370. package/dist/_chunks/es-5fRDaTSK.js +0 -43
  371. package/dist/_chunks/es-5fRDaTSK.js.map +0 -1
  372. package/dist/_chunks/es-f_rfLY5r.mjs +0 -43
  373. package/dist/_chunks/es-f_rfLY5r.mjs.map +0 -1
  374. package/dist/_chunks/fr-L2xRpd2l.mjs +0 -30
  375. package/dist/_chunks/fr-L2xRpd2l.mjs.map +0 -1
  376. package/dist/_chunks/fr-qviymkcR.js +0 -30
  377. package/dist/_chunks/fr-qviymkcR.js.map +0 -1
  378. package/dist/_chunks/id-caKGgafZ.js +0 -28
  379. package/dist/_chunks/id-caKGgafZ.js.map +0 -1
  380. package/dist/_chunks/id-l-r-lPDE.mjs +0 -28
  381. package/dist/_chunks/id-l-r-lPDE.mjs.map +0 -1
  382. package/dist/_chunks/index-0Psmd6mH.js +0 -169
  383. package/dist/_chunks/index-0Psmd6mH.js.map +0 -1
  384. package/dist/_chunks/index-4A--h4wV.mjs +0 -200
  385. package/dist/_chunks/index-4A--h4wV.mjs.map +0 -1
  386. package/dist/_chunks/index-4Lb4OA-2.mjs +0 -173
  387. package/dist/_chunks/index-4Lb4OA-2.mjs.map +0 -1
  388. package/dist/_chunks/index-KO2LyVtS.js +0 -199
  389. package/dist/_chunks/index-KO2LyVtS.js.map +0 -1
  390. package/dist/_chunks/index-U-tAamSt.js +0 -194
  391. package/dist/_chunks/index-U-tAamSt.js.map +0 -1
  392. package/dist/_chunks/index-rLNpelbE.mjs +0 -167
  393. package/dist/_chunks/index-rLNpelbE.mjs.map +0 -1
  394. package/dist/_chunks/it-e3T319Va.js +0 -30
  395. package/dist/_chunks/it-e3T319Va.js.map +0 -1
  396. package/dist/_chunks/it-nCSZoaet.mjs +0 -30
  397. package/dist/_chunks/it-nCSZoaet.mjs.map +0 -1
  398. package/dist/_chunks/ko-nWCOH-TF.js +0 -43
  399. package/dist/_chunks/ko-nWCOH-TF.js.map +0 -1
  400. package/dist/_chunks/ko-pUwRxmfG.mjs +0 -43
  401. package/dist/_chunks/ko-pUwRxmfG.mjs.map +0 -1
  402. package/dist/_chunks/ms-8e8SEhhY.mjs +0 -27
  403. package/dist/_chunks/ms-8e8SEhhY.mjs.map +0 -1
  404. package/dist/_chunks/ms-CSGAOmvV.js +0 -27
  405. package/dist/_chunks/ms-CSGAOmvV.js.map +0 -1
  406. package/dist/_chunks/nl-82NK6g7v.js +0 -25
  407. package/dist/_chunks/nl-82NK6g7v.js.map +0 -1
  408. package/dist/_chunks/nl-RjdbZWuM.mjs +0 -25
  409. package/dist/_chunks/nl-RjdbZWuM.mjs.map +0 -1
  410. package/dist/_chunks/pl-UMuW3iDh.js +0 -43
  411. package/dist/_chunks/pl-UMuW3iDh.js.map +0 -1
  412. package/dist/_chunks/pl-sh4sAKA8.mjs +0 -43
  413. package/dist/_chunks/pl-sh4sAKA8.mjs.map +0 -1
  414. package/dist/_chunks/pt-2sEtQifY.js +0 -25
  415. package/dist/_chunks/pt-2sEtQifY.js.map +0 -1
  416. package/dist/_chunks/pt-BR-G0-nWgFV.js +0 -25
  417. package/dist/_chunks/pt-BR-G0-nWgFV.js.map +0 -1
  418. package/dist/_chunks/pt-BR-uX3O_t0X.mjs +0 -25
  419. package/dist/_chunks/pt-BR-uX3O_t0X.mjs.map +0 -1
  420. package/dist/_chunks/pt-GqKRRnNe.mjs +0 -25
  421. package/dist/_chunks/pt-GqKRRnNe.mjs.map +0 -1
  422. package/dist/_chunks/ru-dQr7xFOb.mjs +0 -43
  423. package/dist/_chunks/ru-dQr7xFOb.mjs.map +0 -1
  424. package/dist/_chunks/ru-wJyWus4I.js +0 -43
  425. package/dist/_chunks/ru-wJyWus4I.js.map +0 -1
  426. package/dist/_chunks/sk-mcEz1PMW.js +0 -28
  427. package/dist/_chunks/sk-mcEz1PMW.js.map +0 -1
  428. package/dist/_chunks/sk-nreoyD6V.mjs +0 -28
  429. package/dist/_chunks/sk-nreoyD6V.mjs.map +0 -1
  430. package/dist/_chunks/sv-V86KaP9y.js +0 -43
  431. package/dist/_chunks/sv-V86KaP9y.js.map +0 -1
  432. package/dist/_chunks/sv-kIUD_46v.mjs +0 -43
  433. package/dist/_chunks/sv-kIUD_46v.mjs.map +0 -1
  434. package/dist/_chunks/th-IcmZ0Yif.mjs +0 -28
  435. package/dist/_chunks/th-IcmZ0Yif.mjs.map +0 -1
  436. package/dist/_chunks/th-pZN4HdUY.js +0 -28
  437. package/dist/_chunks/th-pZN4HdUY.js.map +0 -1
  438. package/dist/_chunks/tr-CkXew0gQ.mjs +0 -43
  439. package/dist/_chunks/tr-CkXew0gQ.mjs.map +0 -1
  440. package/dist/_chunks/tr-fCijT6nA.js +0 -43
  441. package/dist/_chunks/tr-fCijT6nA.js.map +0 -1
  442. package/dist/_chunks/uk-E8Js7gDb.mjs +0 -27
  443. package/dist/_chunks/uk-E8Js7gDb.mjs.map +0 -1
  444. package/dist/_chunks/uk-TEHpQuls.js +0 -27
  445. package/dist/_chunks/uk-TEHpQuls.js.map +0 -1
  446. package/dist/_chunks/useDocumentation-0Rztpbjg.mjs +0 -66
  447. package/dist/_chunks/useDocumentation-0Rztpbjg.mjs.map +0 -1
  448. package/dist/_chunks/useDocumentation-ffVG-mHB.js +0 -65
  449. package/dist/_chunks/useDocumentation-ffVG-mHB.js.map +0 -1
  450. package/dist/_chunks/vi-Nxtm0xZz.js +0 -28
  451. package/dist/_chunks/vi-Nxtm0xZz.js.map +0 -1
  452. package/dist/_chunks/vi-k1R3Y3mS.mjs +0 -28
  453. package/dist/_chunks/vi-k1R3Y3mS.mjs.map +0 -1
  454. package/dist/_chunks/zh-Hans-FdUTcggu.mjs +0 -32
  455. package/dist/_chunks/zh-Hans-FdUTcggu.mjs.map +0 -1
  456. package/dist/_chunks/zh-Hans-tFSnVett.js +0 -32
  457. package/dist/_chunks/zh-Hans-tFSnVett.js.map +0 -1
  458. package/dist/_chunks/zh-Vd3mfBR-.mjs +0 -43
  459. package/dist/_chunks/zh-Vd3mfBR-.mjs.map +0 -1
  460. package/dist/_chunks/zh-bgauBZz8.js +0 -43
  461. package/dist/_chunks/zh-bgauBZz8.js.map +0 -1
  462. package/jest.config.front.js +0 -7
  463. package/jest.config.js +0 -6
  464. package/packup.config.ts +0 -22
  465. package/server/bootstrap.js +0 -54
  466. package/server/config/default-plugin-config.js +0 -35
  467. package/server/config/index.js +0 -7
  468. package/server/controllers/documentation.js +0 -241
  469. package/server/controllers/index.js +0 -7
  470. package/server/index.js +0 -17
  471. package/server/middlewares/documentation.js +0 -25
  472. package/server/middlewares/index.js +0 -7
  473. package/server/middlewares/restrict-access.js +0 -24
  474. package/server/public/index.html +0 -70
  475. package/server/public/login.html +0 -145
  476. package/server/register.js +0 -11
  477. package/server/routes/index.js +0 -84
  478. package/server/services/__mocks__/mock-content-types.js +0 -269
  479. package/server/services/__mocks__/mock-strapi-data.js +0 -183
  480. package/server/services/__tests__/build-component-schema.test.js +0 -761
  481. package/server/services/__tests__/documentation.test.js +0 -481
  482. package/server/services/__tests__/override.test.js +0 -85
  483. package/server/services/documentation.js +0 -247
  484. package/server/services/helpers/build-api-endpoint-path.js +0 -186
  485. package/server/services/helpers/build-component-schema.js +0 -254
  486. package/server/services/helpers/index.js +0 -9
  487. package/server/services/helpers/utils/clean-schema-attributes.js +0 -246
  488. package/server/services/helpers/utils/get-api-responses.js +0 -105
  489. package/server/services/helpers/utils/get-schema-data.js +0 -32
  490. package/server/services/helpers/utils/loop-content-type-names.js +0 -55
  491. package/server/services/helpers/utils/pascal-case.js +0 -9
  492. package/server/services/helpers/utils/query-params.js +0 -106
  493. package/server/services/helpers/utils/routes.js +0 -10
  494. package/server/services/index.js +0 -9
  495. package/server/services/override.js +0 -52
  496. package/server/services/utils/default-openapi-components.js +0 -40
  497. package/server/services/utils/get-plugins-that-need-documentation.js +0 -24
  498. package/strapi-server.js +0 -3
  499. package/tests/server.js +0 -37
  500. package/tests/setup.js +0 -15
@@ -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":"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"}
@@ -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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"}
@@ -0,0 +1,172 @@
1
+ import _ from 'lodash';
2
+ import cleanSchemaAttributes from './utils/clean-schema-attributes.mjs';
3
+ import loopContentTypeNames from './utils/loop-content-type-names.mjs';
4
+ import pascalCase from './utils/pascal-case.mjs';
5
+ import { hasFindMethod } from './utils/routes.mjs';
6
+
7
+ const getRequiredAttributes = (allAttributes)=>{
8
+ const requiredAttributes = [];
9
+ for(const key in allAttributes){
10
+ if (allAttributes[key].required) {
11
+ requiredAttributes.push(key);
12
+ }
13
+ }
14
+ return requiredAttributes;
15
+ };
16
+ /**
17
+ * @description Get all open api schema objects for a given content type
18
+ *
19
+ * @param {object} apiInfo
20
+ * @property {string} apiInfo.uniqueName - Api name | Api name + Content type name
21
+ * @property {object} apiInfo.attributes - Attributes on content type
22
+ * @property {object} apiInfo.routeInfo - The routes for the api
23
+ *
24
+ * @returns {object} Open API schemas
25
+ */ const getAllSchemasForContentType = ({ routeInfo, attributes, uniqueName })=>{
26
+ // Store response and request schemas in an object
27
+ let strapiComponentSchemas = {};
28
+ const schemas = {};
29
+ const typeName = pascalCase(uniqueName);
30
+ // adds a ComponentSchema to the Schemas so it can be used as Ref
31
+ const didAddStrapiComponentsToSchemas = (schemaName, schema)=>{
32
+ if (!Object.keys(schema) || !Object.keys(schema.properties)) return false;
33
+ // Add the Strapi components to the schema
34
+ strapiComponentSchemas = {
35
+ ...strapiComponentSchemas,
36
+ [schemaName]: schema
37
+ };
38
+ return true;
39
+ };
40
+ // Get all the route methods
41
+ const routeMethods = routeInfo.routes.map((route)=>route.method);
42
+ const attributesToOmit = [
43
+ 'createdAt',
44
+ 'updatedAt',
45
+ 'publishedAt',
46
+ 'publishedBy',
47
+ 'updatedBy',
48
+ 'createdBy'
49
+ ];
50
+ const attributesForRequest = _.omit(attributes, attributesToOmit);
51
+ // Get a list of required attribute names
52
+ const requiredRequestAttributes = getRequiredAttributes(attributesForRequest);
53
+ // Build the request schemas when the route has POST or PUT methods
54
+ if (routeMethods.includes('POST') || routeMethods.includes('PUT')) {
55
+ // Build localization requests schemas
56
+ // Build the request schema
57
+ Object.assign(schemas, {
58
+ [`${typeName}Request`]: {
59
+ type: 'object',
60
+ required: [
61
+ 'data'
62
+ ],
63
+ properties: {
64
+ data: {
65
+ ...requiredRequestAttributes.length && {
66
+ required: requiredRequestAttributes
67
+ },
68
+ type: 'object',
69
+ properties: cleanSchemaAttributes(attributesForRequest, {
70
+ isRequest: true,
71
+ didAddStrapiComponentsToSchemas
72
+ })
73
+ }
74
+ }
75
+ }
76
+ });
77
+ }
78
+ // Check for routes that need to return a list
79
+ const hasListOfEntities = routeInfo.routes.filter((route)=>hasFindMethod(route.handler)).length;
80
+ if (hasListOfEntities) {
81
+ // Build the list response schema
82
+ Object.assign(schemas, {
83
+ [`${typeName}ListResponse`]: {
84
+ type: 'object',
85
+ properties: {
86
+ data: {
87
+ type: 'array',
88
+ items: {
89
+ $ref: `#/components/schemas/${typeName}`
90
+ }
91
+ },
92
+ meta: {
93
+ type: 'object',
94
+ properties: {
95
+ pagination: {
96
+ type: 'object',
97
+ properties: {
98
+ page: {
99
+ type: 'integer'
100
+ },
101
+ pageSize: {
102
+ type: 'integer',
103
+ minimum: 25
104
+ },
105
+ pageCount: {
106
+ type: 'integer',
107
+ maximum: 1
108
+ },
109
+ total: {
110
+ type: 'integer'
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ });
119
+ }
120
+ const requiredAttributes = getRequiredAttributes(attributes);
121
+ // Build the response schema
122
+ Object.assign(schemas, {
123
+ [`${typeName}`]: {
124
+ type: 'object',
125
+ ...requiredAttributes.length && {
126
+ required: requiredAttributes
127
+ },
128
+ properties: {
129
+ id: {
130
+ oneOf: [
131
+ {
132
+ type: 'string'
133
+ },
134
+ {
135
+ type: 'number'
136
+ }
137
+ ]
138
+ },
139
+ documentId: {
140
+ type: 'string'
141
+ },
142
+ ...cleanSchemaAttributes(attributes, {
143
+ didAddStrapiComponentsToSchemas
144
+ })
145
+ }
146
+ },
147
+ [`${typeName}Response`]: {
148
+ type: 'object',
149
+ properties: {
150
+ data: {
151
+ $ref: `#/components/schemas/${typeName}`
152
+ },
153
+ meta: {
154
+ type: 'object'
155
+ }
156
+ }
157
+ }
158
+ });
159
+ return {
160
+ ...schemas,
161
+ ...strapiComponentSchemas
162
+ };
163
+ };
164
+ const buildComponentSchema = (api)=>{
165
+ // A reusable loop for building paths and component schemas
166
+ // Uses the api param to build a new set of params for each content type
167
+ // Passes these new params to the function provided
168
+ return loopContentTypeNames(api, getAllSchemasForContentType);
169
+ };
170
+
171
+ export { buildComponentSchema as default };
172
+ //# sourceMappingURL=build-component-schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-component-schema.mjs","sources":["../../../../server/src/services/helpers/build-component-schema.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport type { OpenAPIV3 } from 'openapi-types';\nimport type { Core, Struct } from '@strapi/types';\n\nimport cleanSchemaAttributes from './utils/clean-schema-attributes';\nimport loopContentTypeNames from './utils/loop-content-type-names';\nimport pascalCase from './utils/pascal-case';\nimport { hasFindMethod } from './utils/routes';\n\nimport type { Api, ApiInfo } from '../../types';\n\nconst getRequiredAttributes = (allAttributes: Struct.SchemaAttributes) => {\n const requiredAttributes: string[] = [];\n\n for (const key in allAttributes) {\n if (allAttributes[key].required) {\n requiredAttributes.push(key);\n }\n }\n\n return requiredAttributes;\n};\n\n/**\n * @description Get all open api schema objects for a given content type\n *\n * @param {object} apiInfo\n * @property {string} apiInfo.uniqueName - Api name | Api name + Content type name\n * @property {object} apiInfo.attributes - Attributes on content type\n * @property {object} apiInfo.routeInfo - The routes for the api\n *\n * @returns {object} Open API schemas\n */\nconst getAllSchemasForContentType = ({ routeInfo, attributes, uniqueName }: ApiInfo) => {\n // Store response and request schemas in an object\n let strapiComponentSchemas = {};\n const schemas: OpenAPIV3.ComponentsObject = {};\n const typeName = pascalCase(uniqueName);\n\n // adds a ComponentSchema to the Schemas so it can be used as Ref\n const didAddStrapiComponentsToSchemas = (schemaName: string, schema: OpenAPIV3.SchemaObject) => {\n if (!Object.keys(schema) || !Object.keys(schema.properties!)) return false;\n\n // Add the Strapi components to the schema\n strapiComponentSchemas = {\n ...strapiComponentSchemas,\n [schemaName]: schema,\n };\n\n return true;\n };\n\n // Get all the route methods\n const routeMethods = routeInfo.routes.map((route: Core.Route) => route.method);\n\n const attributesToOmit = [\n 'createdAt',\n 'updatedAt',\n 'publishedAt',\n 'publishedBy',\n 'updatedBy',\n 'createdBy',\n ];\n\n const attributesForRequest = _.omit(attributes, attributesToOmit);\n // Get a list of required attribute names\n const requiredRequestAttributes = getRequiredAttributes(attributesForRequest);\n // Build the request schemas when the route has POST or PUT methods\n if (routeMethods.includes('POST') || routeMethods.includes('PUT')) {\n // Build localization requests schemas\n\n // Build the request schema\n Object.assign(schemas, {\n [`${typeName}Request`]: {\n type: 'object',\n required: ['data'],\n properties: {\n data: {\n ...(requiredRequestAttributes.length && { required: requiredRequestAttributes }),\n type: 'object',\n properties: cleanSchemaAttributes(attributesForRequest, {\n isRequest: true,\n didAddStrapiComponentsToSchemas,\n }),\n },\n },\n },\n });\n }\n\n // Check for routes that need to return a list\n const hasListOfEntities = routeInfo.routes.filter((route: Core.Route) =>\n hasFindMethod(route.handler)\n ).length;\n\n if (hasListOfEntities) {\n // Build the list response schema\n Object.assign(schemas, {\n [`${typeName}ListResponse`]: {\n type: 'object',\n properties: {\n data: {\n type: 'array',\n items: {\n $ref: `#/components/schemas/${typeName}`,\n },\n },\n meta: {\n type: 'object',\n properties: {\n pagination: {\n type: 'object',\n properties: {\n page: { type: 'integer' },\n pageSize: { type: 'integer', minimum: 25 },\n pageCount: { type: 'integer', maximum: 1 },\n total: { type: 'integer' },\n },\n },\n },\n },\n },\n },\n });\n }\n\n const requiredAttributes = getRequiredAttributes(attributes);\n // Build the response schema\n Object.assign(schemas, {\n [`${typeName}`]: {\n type: 'object',\n ...(requiredAttributes.length && { required: requiredAttributes }),\n properties: {\n id: { 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":";;;;;;AAYA,MAAMA,wBAAwB,CAACC,aAAAA,GAAAA;AAC7B,IAAA,MAAMC,qBAA+B,EAAE;IAEvC,IAAK,MAAMC,OAAOF,aAAAA,CAAe;AAC/B,QAAA,IAAIA,aAAa,CAACE,GAAAA,CAAI,CAACC,QAAQ,EAAE;AAC/BF,YAAAA,kBAAAA,CAAmBG,IAAI,CAACF,GAAAA,CAAAA;AAC1B,QAAA;AACF,IAAA;IAEA,OAAOD,kBAAAA;AACT,CAAA;AAEA;;;;;;;;;IAUA,MAAMI,8BAA8B,CAAC,EAAEC,SAAS,EAAEC,UAAU,EAAEC,UAAU,EAAW,GAAA;;AAEjF,IAAA,IAAIC,yBAAyB,EAAC;AAC9B,IAAA,MAAMC,UAAsC,EAAC;AAC7C,IAAA,MAAMC,WAAWC,UAAAA,CAAWJ,UAAAA,CAAAA;;IAG5B,MAAMK,+BAAAA,GAAkC,CAACC,UAAAA,EAAoBC,MAAAA,GAAAA;AAC3D,QAAA,IAAI,CAACC,MAAAA,CAAOC,IAAI,CAACF,MAAAA,CAAAA,IAAW,CAACC,MAAAA,CAAOC,IAAI,CAACF,MAAAA,CAAOG,UAAU,CAAA,EAAI,OAAO,KAAA;;QAGrET,sBAAAA,GAAyB;AACvB,YAAA,GAAGA,sBAAsB;AACzB,YAAA,CAACK,aAAaC;AAChB,SAAA;QAEA,OAAO,IAAA;AACT,IAAA,CAAA;;IAGA,MAAMI,YAAAA,GAAeb,UAAUc,MAAM,CAACC,GAAG,CAAC,CAACC,KAAAA,GAAsBA,KAAAA,CAAMC,MAAM,CAAA;AAE7E,IAAA,MAAMC,gBAAAA,GAAmB;AACvB,QAAA,WAAA;AACA,QAAA,WAAA;AACA,QAAA,aAAA;AACA,QAAA,aAAA;AACA,QAAA,WAAA;AACA,QAAA;AACD,KAAA;AAED,IAAA,MAAMC,oBAAAA,GAAuBC,CAAAA,CAAEC,IAAI,CAACpB,UAAAA,EAAYiB,gBAAAA,CAAAA;;AAEhD,IAAA,MAAMI,4BAA4B7B,qBAAAA,CAAsB0B,oBAAAA,CAAAA;;AAExD,IAAA,IAAIN,aAAaU,QAAQ,CAAC,WAAWV,YAAAA,CAAaU,QAAQ,CAAC,KAAA,CAAA,EAAQ;;;QAIjEb,MAAAA,CAAOc,MAAM,CAACpB,OAAAA,EAAS;AACrB,YAAA,CAAC,CAAA,EAAGC,QAAAA,CAAS,OAAO,CAAC,GAAG;gBACtBoB,IAAAA,EAAM,QAAA;gBACN5B,QAAAA,EAAU;AAAC,oBAAA;AAAO,iBAAA;gBAClBe,UAAAA,EAAY;oBACVc,IAAAA,EAAM;wBACJ,GAAIJ,yBAAAA,CAA0BK,MAAM,IAAI;4BAAE9B,QAAAA,EAAUyB;yBAA2B;wBAC/EG,IAAAA,EAAM,QAAA;AACNb,wBAAAA,UAAAA,EAAYgB,sBAAsBT,oBAAAA,EAAsB;4BACtDU,SAAAA,EAAW,IAAA;AACXtB,4BAAAA;AACF,yBAAA;AACF;AACF;AACF;AACF,SAAA,CAAA;AACF,IAAA;;AAGA,IAAA,MAAMuB,iBAAAA,GAAoB9B,SAAAA,CAAUc,MAAM,CAACiB,MAAM,CAAC,CAACf,KAAAA,GACjDgB,aAAAA,CAAchB,KAAAA,CAAMiB,OAAO,CAAA,CAAA,CAC3BN,MAAM;AAER,IAAA,IAAIG,iBAAAA,EAAmB;;QAErBpB,MAAAA,CAAOc,MAAM,CAACpB,OAAAA,EAAS;AACrB,YAAA,CAAC,CAAA,EAAGC,QAAAA,CAAS,YAAY,CAAC,GAAG;gBAC3BoB,IAAAA,EAAM,QAAA;gBACNb,UAAAA,EAAY;oBACVc,IAAAA,EAAM;wBACJD,IAAAA,EAAM,OAAA;wBACNS,KAAAA,EAAO;4BACLC,IAAAA,EAAM,CAAC,qBAAqB,EAAE9B,QAAAA,CAAAA;AAChC;AACF,qBAAA;oBACA+B,IAAAA,EAAM;wBACJX,IAAAA,EAAM,QAAA;wBACNb,UAAAA,EAAY;4BACVyB,UAAAA,EAAY;gCACVZ,IAAAA,EAAM,QAAA;gCACNb,UAAAA,EAAY;oCACV0B,IAAAA,EAAM;wCAAEb,IAAAA,EAAM;AAAU,qCAAA;oCACxBc,QAAAA,EAAU;wCAAEd,IAAAA,EAAM,SAAA;wCAAWe,OAAAA,EAAS;AAAG,qCAAA;oCACzCC,SAAAA,EAAW;wCAAEhB,IAAAA,EAAM,SAAA;wCAAWiB,OAAAA,EAAS;AAAE,qCAAA;oCACzCC,KAAAA,EAAO;wCAAElB,IAAAA,EAAM;AAAU;AAC3B;AACF;AACF;AACF;AACF;AACF;AACF,SAAA,CAAA;AACF,IAAA;AAEA,IAAA,MAAM9B,qBAAqBF,qBAAAA,CAAsBQ,UAAAA,CAAAA;;IAEjDS,MAAAA,CAAOc,MAAM,CAACpB,OAAAA,EAAS;QACrB,CAAC,CAAA,EAAGC,QAAAA,CAAAA,CAAU,GAAG;YACfoB,IAAAA,EAAM,QAAA;YACN,GAAI9B,kBAAAA,CAAmBgC,MAAM,IAAI;gBAAE9B,QAAAA,EAAUF;aAAoB;YACjEiB,UAAAA,EAAY;gBACVgC,EAAAA,EAAI;oBAAEC,KAAAA,EAAO;AAAC,wBAAA;4BAAEpB,IAAAA,EAAM;AAAS,yBAAA;AAAG,wBAAA;4BAAEA,IAAAA,EAAM;AAAS;AAAE;AAAC,iBAAA;gBACtDqB,UAAAA,EAAY;oBAAErB,IAAAA,EAAM;AAAS,iBAAA;AAC7B,gBAAA,GAAGG,sBAAsB3B,UAAAA,EAAY;AAAEM,oBAAAA;iBAAgC;AACzE;AACF,SAAA;AAEA,QAAA,CAAC,CAAA,EAAGF,QAAAA,CAAS,QAAQ,CAAC,GAAG;YACvBoB,IAAAA,EAAM,QAAA;YACNb,UAAAA,EAAY;gBACVc,IAAAA,EAAM;oBACJS,IAAAA,EAAM,CAAC,qBAAqB,EAAE9B,QAAAA,CAAAA;AAChC,iBAAA;gBACA+B,IAAAA,EAAM;oBAAEX,IAAAA,EAAM;AAAS;AACzB;AACF;AACF,KAAA,CAAA;IAEA,OAAO;AAAE,QAAA,GAAGrB,OAAO;AAAE,QAAA,GAAGD;AAAuB,KAAA;AACjD,CAAA;AAEA,MAAM4C,uBAAuB,CAACC,GAAAA,GAAAA;;;;AAI5B,IAAA,OAAOC,qBAAqBD,GAAAA,EAAKjD,2BAAAA,CAAAA;AACnC;;;;"}