@strapi/content-manager 5.49.0 → 5.50.1

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 (381) hide show
  1. package/dist/admin/components/ComponentIcon.js.map +1 -1
  2. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/DragLayer.js.map +1 -1
  6. package/dist/admin/components/DragLayer.mjs.map +1 -1
  7. package/dist/admin/components/LeftMenu.js +66 -67
  8. package/dist/admin/components/LeftMenu.js.map +1 -1
  9. package/dist/admin/components/LeftMenu.mjs +68 -69
  10. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  11. package/dist/admin/history/components/VersionInputRenderer.js +3 -3
  12. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  13. package/dist/admin/history/components/VersionInputRenderer.mjs +3 -3
  14. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  15. package/dist/admin/history/routes.js.map +1 -1
  16. package/dist/admin/history/routes.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.js +15 -8
  18. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  19. package/dist/admin/hooks/useDocumentActions.mjs +15 -8
  20. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  21. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  23. package/dist/admin/index.js.map +1 -1
  24. package/dist/admin/index.mjs.map +1 -1
  25. package/dist/admin/layout.js +21 -7
  26. package/dist/admin/layout.js.map +1 -1
  27. package/dist/admin/layout.mjs +23 -9
  28. package/dist/admin/layout.mjs.map +1 -1
  29. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  30. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.js +168 -78
  32. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.mjs +168 -79
  34. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +6 -3
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +6 -3
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +1 -1
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +1 -1
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +1 -1
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +1 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +6 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +6 -2
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +6 -1
  64. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +6 -1
  66. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +8 -5
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +8 -5
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/UID.js +5 -4
  72. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +5 -4
  74. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +2 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +2 -2
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  82. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  84. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  86. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/utils/draftRelationCounts.js +117 -0
  88. package/dist/admin/pages/EditView/utils/draftRelationCounts.js.map +1 -0
  89. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs +109 -0
  90. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs.map +1 -0
  91. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  92. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  93. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  94. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
  95. package/dist/admin/pages/ListView/ListViewPage.js +71 -11
  96. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  97. package/dist/admin/pages/ListView/ListViewPage.mjs +73 -13
  98. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  99. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +2 -1
  100. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  101. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +2 -1
  102. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  103. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +1 -1
  104. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  105. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +1 -1
  106. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  107. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  108. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  109. package/dist/admin/pages/ListView/components/Filters.js +5 -3
  110. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  111. package/dist/admin/pages/ListView/components/Filters.mjs +5 -3
  112. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  113. package/dist/admin/pages/ListView/components/TableActions.js +37 -0
  114. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  115. package/dist/admin/pages/ListView/components/TableActions.mjs +39 -2
  116. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  117. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +28 -3
  118. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  119. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +28 -4
  120. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  121. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +8 -7
  122. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  123. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +8 -7
  124. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -1
  125. package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -1
  126. package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -1
  127. package/dist/admin/pages/ListView/components/TableCells/Relations.js +1 -1
  128. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  129. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +1 -1
  130. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  131. package/dist/admin/preview/pages/Preview.js +40 -11
  132. package/dist/admin/preview/pages/Preview.js.map +1 -1
  133. package/dist/admin/preview/pages/Preview.mjs +41 -12
  134. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  135. package/dist/admin/preview/routes.js.map +1 -1
  136. package/dist/admin/preview/routes.mjs.map +1 -1
  137. package/dist/admin/preview/utils/constants.js +9 -15
  138. package/dist/admin/preview/utils/constants.js.map +1 -1
  139. package/dist/admin/preview/utils/constants.mjs +10 -15
  140. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  141. package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
  142. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
  143. package/dist/admin/router.js.map +1 -1
  144. package/dist/admin/router.mjs.map +1 -1
  145. package/dist/admin/services/documents.js.map +1 -1
  146. package/dist/admin/services/documents.mjs.map +1 -1
  147. package/dist/admin/src/components/ComponentIcon.d.ts +4 -3
  148. package/dist/admin/src/components/DragLayer.d.ts +1 -1
  149. package/dist/admin/src/components/InjectionZone.d.ts +1 -2
  150. package/dist/admin/src/content-manager.d.ts +15 -15
  151. package/dist/admin/src/history/routes.d.ts +2 -2
  152. package/dist/admin/src/history/services/historyVersion.d.ts +3 -3
  153. package/dist/admin/src/hooks/useContentTypeSchema.d.ts +1 -1
  154. package/dist/admin/src/hooks/useDocument.d.ts +8 -9
  155. package/dist/admin/src/hooks/useDocumentActions.d.ts +17 -16
  156. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  157. package/dist/admin/src/hooks/useDocumentLayout.d.ts +3 -3
  158. package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
  159. package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
  160. package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +0 -1
  161. package/dist/admin/src/index.d.ts +1 -1
  162. package/dist/admin/src/modules/app.d.ts +5 -5
  163. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +1 -1
  164. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -1
  165. package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +1 -1
  166. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -1
  167. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +2 -2
  168. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -2
  169. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +4 -4
  170. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -1
  171. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/Editor.d.ts +1 -1
  172. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
  173. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +19 -20
  174. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.d.ts +7 -1
  175. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +12 -12
  176. package/dist/admin/src/pages/EditView/utils/draftRelationCounts.d.ts +26 -0
  177. package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +1 -1
  178. package/dist/admin/src/pages/ListView/components/Filters.d.ts +1 -1
  179. package/dist/admin/src/pages/ListView/components/TableCells/CellContent.d.ts +11 -2
  180. package/dist/admin/src/pages/ListView/components/TableCells/CellValue.d.ts +1 -1
  181. package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +1 -1
  182. package/dist/admin/src/preview/routes.d.ts +2 -2
  183. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  184. package/dist/admin/src/preview/utils/constants.d.ts +1 -7
  185. package/dist/admin/src/preview/utils/getSendMessage.d.ts +0 -1
  186. package/dist/admin/src/router.d.ts +2 -2
  187. package/dist/admin/src/services/api.d.ts +1 -1
  188. package/dist/admin/src/services/components.d.ts +2 -2
  189. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  190. package/dist/admin/src/services/documents.d.ts +49 -89
  191. package/dist/admin/src/services/homepage.d.ts +1 -1
  192. package/dist/admin/src/services/init.d.ts +1 -1
  193. package/dist/admin/src/services/relations.d.ts +8 -22
  194. package/dist/admin/src/services/uid.d.ts +8 -8
  195. package/dist/admin/src/utils/api.d.ts +2 -2
  196. package/dist/admin/src/utils/conditionalFields.d.ts +1 -0
  197. package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +4 -4
  198. package/dist/admin/src/utils/objects.d.ts +7 -4
  199. package/dist/admin/src/utils/users.d.ts +1 -1
  200. package/dist/admin/src/utils/validation.d.ts +2 -1
  201. package/dist/admin/translations/en.json.js +6 -2
  202. package/dist/admin/translations/en.json.js.map +1 -1
  203. package/dist/admin/translations/en.json.mjs +6 -2
  204. package/dist/admin/translations/en.json.mjs.map +1 -1
  205. package/dist/admin/translations/ja.json.js +262 -87
  206. package/dist/admin/translations/ja.json.js.map +1 -1
  207. package/dist/admin/translations/ja.json.mjs +262 -87
  208. package/dist/admin/translations/ja.json.mjs.map +1 -1
  209. package/dist/admin/utils/api.js +6 -1
  210. package/dist/admin/utils/api.js.map +1 -1
  211. package/dist/admin/utils/api.mjs +6 -1
  212. package/dist/admin/utils/api.mjs.map +1 -1
  213. package/dist/admin/utils/conditionalFields.js.map +1 -1
  214. package/dist/admin/utils/conditionalFields.mjs.map +1 -1
  215. package/dist/admin/utils/objects.js +43 -13
  216. package/dist/admin/utils/objects.js.map +1 -1
  217. package/dist/admin/utils/objects.mjs +43 -13
  218. package/dist/admin/utils/objects.mjs.map +1 -1
  219. package/dist/admin/utils/validation.js.map +1 -1
  220. package/dist/admin/utils/validation.mjs.map +1 -1
  221. package/dist/server/controllers/collection-types.js +6 -3
  222. package/dist/server/controllers/collection-types.js.map +1 -1
  223. package/dist/server/controllers/collection-types.mjs +6 -3
  224. package/dist/server/controllers/collection-types.mjs.map +1 -1
  225. package/dist/server/controllers/relations.js +5 -4
  226. package/dist/server/controllers/relations.js.map +1 -1
  227. package/dist/server/controllers/relations.mjs +5 -4
  228. package/dist/server/controllers/relations.mjs.map +1 -1
  229. package/dist/server/controllers/single-types.js +2 -2
  230. package/dist/server/controllers/single-types.js.map +1 -1
  231. package/dist/server/controllers/single-types.mjs +2 -2
  232. package/dist/server/controllers/single-types.mjs.map +1 -1
  233. package/dist/server/controllers/validation/model-configuration.js +3 -1
  234. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  235. package/dist/server/controllers/validation/model-configuration.mjs +3 -1
  236. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  237. package/dist/server/homepage/services/homepage.js +27 -7
  238. package/dist/server/homepage/services/homepage.js.map +1 -1
  239. package/dist/server/homepage/services/homepage.mjs +27 -7
  240. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  241. package/dist/server/preview/controllers/preview.js +9 -0
  242. package/dist/server/preview/controllers/preview.js.map +1 -1
  243. package/dist/server/preview/controllers/preview.mjs +9 -0
  244. package/dist/server/preview/controllers/preview.mjs.map +1 -1
  245. package/dist/server/preview/controllers/previewScript.js +1450 -0
  246. package/dist/server/preview/routes/preview.js +11 -0
  247. package/dist/server/preview/routes/preview.js.map +1 -1
  248. package/dist/server/preview/routes/preview.mjs +11 -0
  249. package/dist/server/preview/routes/preview.mjs.map +1 -1
  250. package/dist/server/services/document-manager.js +13 -19
  251. package/dist/server/services/document-manager.js.map +1 -1
  252. package/dist/server/services/document-manager.mjs +13 -19
  253. package/dist/server/services/document-manager.mjs.map +1 -1
  254. package/dist/server/services/permission.js +4 -3
  255. package/dist/server/services/permission.js.map +1 -1
  256. package/dist/server/services/permission.mjs +4 -3
  257. package/dist/server/services/permission.mjs.map +1 -1
  258. package/dist/server/services/utils/draft-relations.js +9 -0
  259. package/dist/server/services/utils/draft-relations.js.map +1 -0
  260. package/dist/server/services/utils/draft-relations.mjs +7 -0
  261. package/dist/server/services/utils/draft-relations.mjs.map +1 -0
  262. package/dist/server/services/utils/draft.js +118 -25
  263. package/dist/server/services/utils/draft.js.map +1 -1
  264. package/dist/server/services/utils/draft.mjs +118 -25
  265. package/dist/server/services/utils/draft.mjs.map +1 -1
  266. package/dist/server/services/utils/populate.js +15 -1
  267. package/dist/server/services/utils/populate.js.map +1 -1
  268. package/dist/server/services/utils/populate.mjs +15 -1
  269. package/dist/server/services/utils/populate.mjs.map +1 -1
  270. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  271. package/dist/server/src/controllers/index.d.ts +1 -1
  272. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  273. package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
  274. package/dist/server/src/controllers/utils/document-status.d.ts +1 -1
  275. package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -1
  276. package/dist/server/src/controllers/utils/metadata.d.ts +5 -5
  277. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  278. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
  279. package/dist/server/src/controllers/validation/index.d.ts +3 -3
  280. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  281. package/dist/server/src/controllers/validation/model-configuration.d.ts.map +1 -1
  282. package/dist/server/src/controllers/validation/relations.d.ts +2 -2
  283. package/dist/server/src/history/controllers/history-version.d.ts +1 -7
  284. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  285. package/dist/server/src/history/controllers/index.d.ts +2 -1
  286. package/dist/server/src/history/controllers/index.d.ts.map +1 -1
  287. package/dist/server/src/history/controllers/validation/history-version.d.ts +1 -1
  288. package/dist/server/src/history/services/history.d.ts +0 -2
  289. package/dist/server/src/history/services/history.d.ts.map +1 -1
  290. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  291. package/dist/server/src/history/services/utils.d.ts +3 -3
  292. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  293. package/dist/server/src/history/utils.d.ts +1 -18
  294. package/dist/server/src/history/utils.d.ts.map +1 -1
  295. package/dist/server/src/homepage/controllers/homepage.d.ts +0 -1
  296. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  297. package/dist/server/src/homepage/controllers/index.d.ts +2 -1
  298. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
  299. package/dist/server/src/homepage/index.d.ts +4 -8
  300. package/dist/server/src/homepage/index.d.ts.map +1 -1
  301. package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
  302. package/dist/server/src/homepage/services/homepage.d.ts +3 -4
  303. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  304. package/dist/server/src/homepage/services/index.d.ts +4 -8
  305. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  306. package/dist/server/src/index.d.ts +79 -85
  307. package/dist/server/src/index.d.ts.map +1 -1
  308. package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts.map +1 -1
  309. package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
  310. package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
  311. package/dist/server/src/mcp/permissions.d.ts +1 -1
  312. package/dist/server/src/mcp/permissions.d.ts.map +1 -1
  313. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
  314. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -1
  315. package/dist/server/src/mcp/schemas/blocks-schema.d.ts.map +1 -1
  316. package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
  317. package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
  318. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  319. package/dist/server/src/mcp/schemas/sort-schema.d.ts.map +1 -1
  320. package/dist/server/src/mcp/utils.d.ts.map +1 -1
  321. package/dist/server/src/middlewares/routing.d.ts.map +1 -1
  322. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  323. package/dist/server/src/policies/index.d.ts.map +1 -1
  324. package/dist/server/src/preview/controllers/index.d.ts +2 -1
  325. package/dist/server/src/preview/controllers/index.d.ts.map +1 -1
  326. package/dist/server/src/preview/controllers/preview.d.ts +5 -0
  327. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
  328. package/dist/server/src/preview/controllers/validation/preview.d.ts +1 -2
  329. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
  330. package/dist/server/src/preview/routes/preview.d.ts.map +1 -1
  331. package/dist/server/src/preview/services/index.d.ts +1 -1
  332. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  333. package/dist/server/src/preview/services/preview-config.d.ts +1 -1
  334. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  335. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  336. package/dist/server/src/preview/utils.d.ts +1 -16
  337. package/dist/server/src/preview/utils.d.ts.map +1 -1
  338. package/dist/server/src/services/components.d.ts +2 -2
  339. package/dist/server/src/services/components.d.ts.map +1 -1
  340. package/dist/server/src/services/configuration.d.ts.map +1 -1
  341. package/dist/server/src/services/content-types.d.ts.map +1 -1
  342. package/dist/server/src/services/data-mapper.d.ts +5 -5
  343. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  344. package/dist/server/src/services/document-manager.d.ts +14 -14
  345. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  346. package/dist/server/src/services/document-metadata.d.ts +6 -6
  347. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  348. package/dist/server/src/services/field-sizes.d.ts +2 -2
  349. package/dist/server/src/services/field-sizes.d.ts.map +1 -1
  350. package/dist/server/src/services/index.d.ts +78 -84
  351. package/dist/server/src/services/index.d.ts.map +1 -1
  352. package/dist/server/src/services/metrics.d.ts.map +1 -1
  353. package/dist/server/src/services/permission-checker.d.ts +12 -31
  354. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  355. package/dist/server/src/services/permission.d.ts.map +1 -1
  356. package/dist/server/src/services/populate-builder.d.ts +4 -4
  357. package/dist/server/src/services/populate-builder.d.ts.map +1 -1
  358. package/dist/server/src/services/uid.d.ts.map +1 -1
  359. package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
  360. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  361. package/dist/server/src/services/utils/count.d.ts.map +1 -1
  362. package/dist/server/src/services/utils/draft-relations.d.ts +19 -0
  363. package/dist/server/src/services/utils/draft-relations.d.ts.map +1 -0
  364. package/dist/server/src/services/utils/draft.d.ts +8 -7
  365. package/dist/server/src/services/utils/draft.d.ts.map +1 -1
  366. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  367. package/dist/server/src/services/utils/store.d.ts.map +1 -1
  368. package/dist/server/src/utils/index.d.ts.map +1 -1
  369. package/dist/server/src/validation/policies/hasPermissions.d.ts +1 -1
  370. package/dist/server/src/validation/zod.d.ts +1 -1
  371. package/dist/server/src/validation/zod.d.ts.map +1 -1
  372. package/dist/shared/contracts/collection-types.d.ts +4 -1
  373. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  374. package/dist/shared/contracts/single-types.d.ts +4 -1
  375. package/dist/shared/contracts/single-types.d.ts.map +1 -1
  376. package/package.json +9 -9
  377. package/dist/admin/preview/utils/previewScript.js +0 -1068
  378. package/dist/admin/preview/utils/previewScript.js.map +0 -1
  379. package/dist/admin/preview/utils/previewScript.mjs +0 -1066
  380. package/dist/admin/preview/utils/previewScript.mjs.map +0 -1
  381. package/dist/admin/src/preview/utils/previewScript.d.ts +0 -32
@@ -1 +1 @@
1
- {"version":3,"file":"relations.mjs","sources":["../../../server/src/controllers/relations.ts"],"sourcesContent":["import { prop, uniq, uniqBy, concat, flow, isEmpty } from 'lodash/fp';\n\nimport { isOperatorOfType, contentTypes, relations, errors } from '@strapi/utils';\nimport type { Data, Modules, UID } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { validateFindAvailable, validateFindExisting } from './validation/relations';\nimport { isListable } from '../services/utils/configuration/attributes';\nimport { indexByDocumentId } from './utils/document-status';\n\nconst { PUBLISHED_AT_ATTRIBUTE, UPDATED_AT_ATTRIBUTE } = contentTypes.constants;\n\ninterface RelationEntity {\n id: Data.ID;\n documentId: Modules.Documents.ID;\n updatedAt: string | Date;\n publishedAt?: string | Date;\n [key: string]: unknown;\n}\n\nconst addFiltersClause = (params: any, filtersClause: any) => {\n params.filters = params.filters || {};\n params.filters.$and = params.filters.$and || [];\n params.filters.$and.push(filtersClause);\n};\n\nconst sanitizeMainField = (model: any, mainField: any, userAbility: any) => {\n const permissionChecker = getService('permission-checker').create({\n userAbility,\n model: model.uid,\n });\n\n // Whether the main field can be displayed or not, regardless of permissions.\n const isMainFieldListable = isListable(model, mainField);\n // Whether the user has the permission to access the model's main field (using RBAC abilities)\n const canReadMainField = permissionChecker.can.read(null, mainField);\n\n if (!isMainFieldListable || !canReadMainField) {\n // Default to 'documentId' if the actual main field shouldn't be displayed\n return 'documentId';\n }\n\n // Edge cases\n\n // 1. Enforce 'name' as the main field for users and permissions' roles\n if (model.uid === 'plugin::users-permissions.role') {\n return 'name';\n }\n\n return mainField;\n};\n\n/**\n *\n * All relations sent to this function should have the same status or no status\n */\nconst addStatusToRelations = async (targetUid: UID.Schema, relations: RelationEntity[]) => {\n if (!contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {\n return relations;\n }\n\n const documentMetadata = getService('document-metadata');\n\n if (!relations.length) {\n return relations;\n }\n\n const firstRelation = relations[0];\n\n const filters: any = {\n documentId: { $in: relations.map((r) => r.documentId) },\n // NOTE: find the \"opposite\" status\n publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true },\n };\n\n const availableStatus = await strapi.query(targetUid).findMany({\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n filters,\n });\n\n const statusByDocumentId = indexByDocumentId(availableStatus);\n\n return relations.map((relation: RelationEntity) => {\n const candidates = statusByDocumentId.get(relation.documentId as string) || [];\n const availableStatuses = relation.locale\n ? candidates.filter((c) => c.locale === relation.locale)\n : candidates;\n\n return {\n ...relation,\n status: documentMetadata.getStatus(relation, availableStatuses),\n };\n });\n};\n\nconst getPublishedAtClause = (status: string, uid: UID.Schema) => {\n const model = strapi.getModel(uid);\n\n /**\n * If dp is disabled, ignore the filter\n */\n if (!model || !contentTypes.hasDraftAndPublish(model)) {\n return {};\n }\n\n // Prioritize the draft status in case it's not provided\n return status === 'published' ? { $notNull: true } : { $null: true };\n};\n\nconst validateLocale = (sourceUid: UID.Schema, targetUid: UID.ContentType, locale?: string) => {\n const sourceModel = strapi.getModel(sourceUid);\n const targetModel = strapi.getModel(targetUid);\n\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType;\n const isSourceLocalized = isLocalized(sourceModel);\n const isTargetLocalized = isLocalized(targetModel);\n\n return {\n locale,\n isSourceLocalized,\n isTargetLocalized,\n };\n};\n\nconst validateStatus = (\n sourceUid: UID.Schema,\n status?: Modules.Documents.Params.PublicationStatus.Kind\n) => {\n const sourceModel = strapi.getModel(sourceUid);\n\n const isDP = contentTypes.hasDraftAndPublish;\n const isSourceDP = isDP(sourceModel);\n\n // Default to draft if not set\n if (!isSourceDP && sourceModel.modelType === 'contentType') {\n return { status: undefined };\n }\n\n switch (status) {\n case 'published':\n return { status: 'published' };\n default:\n // Assign to draft if the status is not valid\n return { status: 'draft' };\n }\n};\n\nexport default {\n async extractAndValidateRequestInfo(ctx: any, id?: Data.ID) {\n const { userAbility } = ctx.state;\n const { model, targetField } = ctx.params;\n\n const sourceSchema = strapi.getModel(model);\n if (!sourceSchema) {\n throw new errors.ValidationError(`The model ${model} doesn't exist`);\n }\n\n const attribute: any = sourceSchema.attributes[targetField];\n if (!attribute || attribute.type !== 'relation') {\n throw new errors.ValidationError(\n `The relational field ${targetField} doesn't exist on ${model}`\n );\n }\n\n const sourceUid = model;\n const targetUid = attribute.target;\n\n const { locale, isSourceLocalized, isTargetLocalized } = validateLocale(\n sourceUid,\n targetUid,\n ctx.request?.query?.locale\n );\n const { status } = validateStatus(sourceUid, ctx.request?.query?.status);\n\n const permissionChecker = getService('permission-checker').create({\n userAbility,\n model,\n });\n\n const isComponent = sourceSchema.modelType === 'component';\n if (!isComponent) {\n if (permissionChecker.cannot.read(null, targetField)) {\n return ctx.forbidden();\n }\n }\n\n let entryId: string | number | null = null;\n\n if (id) {\n const where: Record<string, any> = {};\n\n if (!isComponent) {\n where.documentId = id;\n\n if (status) {\n where.publishedAt = getPublishedAtClause(status, sourceUid);\n }\n\n if (locale && isSourceLocalized) {\n where.locale = locale;\n }\n } else {\n // If the source is a component, we only need to filter by the\n // component's entity id\n where.id = id;\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const currentEntity = await strapi.db.query(model).findOne({\n where,\n populate,\n });\n\n // We need to check if the entity exists\n // and if the user has the permission to read it in this way\n // There may be multiple entities (publication states) under this\n // documentId + locale. We only need to check if one exists\n if (!currentEntity) {\n throw new errors.NotFoundError();\n }\n\n if (!isComponent) {\n if (permissionChecker.cannot.read(currentEntity, targetField)) {\n throw new errors.ForbiddenError();\n }\n }\n\n entryId = currentEntity.id;\n }\n\n const modelConfig = isComponent\n ? await getService('components').findConfiguration(sourceSchema)\n : await getService('content-types').findConfiguration(sourceSchema);\n\n const targetSchema = strapi.getModel(targetUid);\n\n const mainField = flow(\n prop(`metadatas.${targetField}.edit.mainField`),\n (mainField) => mainField || 'id',\n (mainField) => sanitizeMainField(targetSchema, mainField, userAbility)\n )(modelConfig);\n\n const fieldsToSelect = uniq([\n mainField,\n PUBLISHED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n 'documentId',\n ]);\n\n if (isTargetLocalized) {\n fieldsToSelect.push('locale');\n }\n\n return {\n entryId,\n locale,\n status,\n attribute,\n fieldsToSelect,\n mainField,\n source: { schema: sourceSchema, isLocalized: isSourceLocalized },\n target: { schema: targetSchema, isLocalized: isTargetLocalized },\n sourceSchema,\n targetSchema,\n targetField,\n };\n },\n\n /**\n * Used to find new relations to add in a relational field.\n *\n * Component and document relations are dealt a bit differently (they don't have a document_id).\n */\n async findAvailable(ctx: any) {\n const { id } = ctx.request.query;\n\n await validateFindAvailable(ctx.request.query);\n\n const {\n locale,\n status,\n targetField,\n fieldsToSelect,\n mainField,\n source: {\n schema: { uid: sourceUid, modelType: sourceModelType },\n isLocalized: isSourceLocalized,\n },\n target: {\n schema: { uid: targetUid },\n isLocalized: isTargetLocalized,\n },\n } = await this.extractAndValidateRequestInfo(ctx, id);\n\n const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;\n\n const permissionChecker = getService('permission-checker').create({\n userAbility: ctx.state.userAbility,\n model: targetUid,\n });\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n\n const queryParams = {\n sort: mainField,\n // cannot select other fields as the user may not have the permissions\n fields: fieldsToSelect,\n ...permissionQuery,\n };\n\n // If no status is requested, we find all the draft relations and later update them\n // with the latest available status\n addFiltersClause(queryParams, {\n publishedAt: getPublishedAtClause(status, targetUid),\n });\n\n // We will only filter by locale if the target content type is localized\n const filterByLocale = isTargetLocalized && locale;\n if (filterByLocale) {\n addFiltersClause(queryParams, { locale });\n }\n\n if (id) {\n /**\n * Exclude the relations that are already related to the source\n *\n * We also optionally filter the target relations by the requested\n * status and locale if provided.\n */\n const subQuery = strapi.db.queryBuilder(sourceUid);\n\n // The alias refers to the DB table of the target content type model\n const alias = subQuery.getAlias();\n\n const where: Record<string, any> = {\n [`${alias}.id`]: { $notNull: true },\n [`${alias}.document_id`]: { $notNull: true },\n };\n\n /**\n * Content Types -> Specify document id\n * Components -> Specify entity id (they don't have a document id)\n */\n if (sourceModelType === 'contentType') {\n where.document_id = id;\n } else {\n where.id = id;\n }\n\n // Add the status and locale filters if they are provided\n const publishedAt = getPublishedAtClause(status, targetUid);\n if (!isEmpty(publishedAt)) {\n where[`${alias}.published_at`] = publishedAt;\n }\n\n // If target has localization we need to filter by locale\n if (isTargetLocalized && locale) {\n where[`${alias}.locale`] = locale;\n }\n\n if (isSourceLocalized && locale) {\n where.locale = locale;\n }\n\n /**\n * UI can provide a list of ids to omit,\n * those are the relations user set in the UI but has not persisted.\n * We don't want to include them in the available relations.\n */\n if ((idsToInclude?.length ?? 0) !== 0) {\n where[`${alias}.id`].$notIn = idsToInclude;\n }\n\n const knexSubQuery = subQuery\n .where(where)\n .join({ alias, targetField })\n .select(`${alias}.id`)\n .getKnexQuery();\n\n addFiltersClause(queryParams, {\n id: { $notIn: knexSubQuery },\n });\n }\n\n /**\n * Apply a filter to the mainField based on the search query and filter operator\n * searching should be allowed only on mainField for permission reasons\n */\n if (_q) {\n const _filter = isOperatorOfType('where', query._filter) ? query._filter : '$containsi';\n addFiltersClause(queryParams, { [mainField]: { [_filter]: _q } });\n }\n\n if (idsToOmit?.length > 0) {\n // If we have ids to omit, we should filter them out\n addFiltersClause(queryParams, {\n id: { $notIn: uniq(idsToOmit) },\n });\n }\n\n const dbQuery = strapi.get('query-params').transform(targetUid, queryParams);\n\n const res = await strapi.db.query(targetUid).findPage(dbQuery);\n\n ctx.body = {\n ...res,\n results: await addStatusToRelations(targetUid, res.results),\n };\n },\n\n async findExisting(ctx: any) {\n const { userAbility } = ctx.state;\n const { id } = ctx.params;\n\n await validateFindExisting(ctx.request.query);\n\n const {\n entryId,\n attribute,\n targetField,\n fieldsToSelect,\n status,\n source: { schema: sourceSchema },\n target: { schema: targetSchema },\n } = await this.extractAndValidateRequestInfo(ctx, id);\n\n const { uid: sourceUid } = sourceSchema;\n const { uid: targetUid } = targetSchema;\n\n const permissionQuery = await getService('permission-checker')\n .create({ userAbility, model: targetUid })\n .sanitizedQuery.read({ fields: fieldsToSelect });\n\n /**\n * loadPages can not be used for single relations,\n * this unifies the loading regardless of it's type\n *\n * NOTE: Relations need to be loaded using any db.query method\n * to ensure the proper ordering is applied\n */\n const dbQuery = strapi.db.query(sourceUid);\n const loadRelations = relations.isAnyToMany(attribute)\n ? (...args: Parameters<typeof dbQuery.loadPages>) => dbQuery.loadPages(...args)\n : (...args: Parameters<typeof dbQuery.load>) =>\n dbQuery\n .load(...args)\n // Ensure response is an array\n .then((res) => ({ results: res ? [res] : [] }));\n\n const filters: {\n publishedAt?: Record<string, any>;\n } = {};\n\n if (sourceSchema?.options?.draftAndPublish || sourceSchema?.modelType === 'component') {\n if (targetSchema?.options?.draftAndPublish) {\n if (status === 'published') {\n filters.publishedAt = { $notNull: true };\n } else {\n filters.publishedAt = { $null: true };\n }\n }\n } else if (targetSchema?.options?.draftAndPublish) {\n // NOTE: we must return the drafts as some targets might not have a published version yet\n filters.publishedAt = { $null: true };\n }\n\n /**\n * If user does not have access to specific relations (custom conditions),\n * only the ids of the relations are returned.\n *\n * - First query loads all the ids.\n * - Second one also loads the main field, and excludes forbidden relations.\n *\n * The response contains the union of the two queries.\n */\n const res = await loadRelations({ id: entryId }, targetField, {\n select: ['id', 'documentId', 'locale', 'publishedAt', 'updatedAt'],\n ordering: 'desc',\n page: ctx.request.query.page,\n pageSize: ctx.request.query.pageSize,\n filters,\n });\n\n /**\n * Add all ids to load in permissionQuery\n * If any of the relations are not accessible, the permissionQuery will exclude them\n */\n const loadedIds = res.results.map((item: any) => item.id);\n addFiltersClause(permissionQuery, { id: { $in: loadedIds } });\n\n /**\n * Load the relations with the main field, the sanitized permission query\n * will exclude the relations the user does not have access to.\n *\n * Pagination is not necessary as the permissionQuery contains the ids to load.\n */\n const sanitizedRes = await loadRelations({ id: entryId }, targetField, {\n ...strapi.get('query-params').transform(targetUid, permissionQuery),\n ordering: 'desc',\n });\n\n // NOTE: the order is very important to make sure sanitized relations are kept in priority\n const relationsUnion = uniqBy('id', concat(sanitizedRes.results, res.results));\n\n ctx.body = {\n pagination: res.pagination || {\n page: 1,\n pageCount: 1,\n pageSize: 10,\n total: relationsUnion.length,\n },\n results: await addStatusToRelations(targetUid, relationsUnion),\n };\n },\n};\n"],"names":["PUBLISHED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","contentTypes","constants","addFiltersClause","params","filtersClause","filters","$and","push","sanitizeMainField","model","mainField","userAbility","permissionChecker","getService","create","uid","isMainFieldListable","isListable","canReadMainField","can","read","addStatusToRelations","targetUid","relations","hasDraftAndPublish","strapi","getModel","documentMetadata","length","firstRelation","documentId","$in","map","r","publishedAt","$null","$notNull","availableStatus","query","findMany","select","statusByDocumentId","indexByDocumentId","relation","candidates","get","availableStatuses","locale","filter","c","status","getStatus","getPublishedAtClause","validateLocale","sourceUid","sourceModel","targetModel","isLocalized","plugin","service","isLocalizedContentType","isSourceLocalized","isTargetLocalized","validateStatus","isDP","isSourceDP","modelType","undefined","extractAndValidateRequestInfo","ctx","id","state","targetField","sourceSchema","errors","ValidationError","attribute","attributes","type","target","request","isComponent","cannot","forbidden","entryId","where","permissionQuery","sanitizedQuery","populate","populateFromQuery","build","currentEntity","db","findOne","NotFoundError","ForbiddenError","modelConfig","findConfiguration","targetSchema","flow","prop","fieldsToSelect","uniq","source","schema","findAvailable","validateFindAvailable","sourceModelType","idsToOmit","idsToInclude","_q","queryParams","sort","fields","filterByLocale","subQuery","queryBuilder","alias","getAlias","document_id","isEmpty","$notIn","knexSubQuery","join","getKnexQuery","_filter","isOperatorOfType","dbQuery","transform","res","findPage","body","results","findExisting","validateFindExisting","loadRelations","isAnyToMany","args","loadPages","load","then","options","draftAndPublish","ordering","page","pageSize","loadedIds","item","sanitizedRes","relationsUnion","uniqBy","concat","pagination","pageCount","total"],"mappings":";;;;;;;AAUA,MAAM,EAAEA,sBAAsB,EAAEC,oBAAoB,EAAE,GAAGC,aAAaC,SAAS;AAU/E,MAAMC,gBAAAA,GAAmB,CAACC,MAAAA,EAAaC,aAAAA,GAAAA;AACrCD,IAAAA,MAAAA,CAAOE,OAAO,GAAGF,MAAAA,CAAOE,OAAO,IAAI,EAAC;IACpCF,MAAAA,CAAOE,OAAO,CAACC,IAAI,GAAGH,OAAOE,OAAO,CAACC,IAAI,IAAI,EAAE;AAC/CH,IAAAA,MAAAA,CAAOE,OAAO,CAACC,IAAI,CAACC,IAAI,CAACH,aAAAA,CAAAA;AAC3B,CAAA;AAEA,MAAMI,iBAAAA,GAAoB,CAACC,KAAAA,EAAYC,SAAAA,EAAgBC,WAAAA,GAAAA;AACrD,IAAA,MAAMC,iBAAAA,GAAoBC,UAAAA,CAAW,oBAAA,CAAA,CAAsBC,MAAM,CAAC;AAChEH,QAAAA,WAAAA;AACAF,QAAAA,KAAAA,EAAOA,MAAMM;AACf,KAAA,CAAA;;IAGA,MAAMC,mBAAAA,GAAsBC,WAAWR,KAAAA,EAAOC,SAAAA,CAAAA;;AAE9C,IAAA,MAAMQ,mBAAmBN,iBAAAA,CAAkBO,GAAG,CAACC,IAAI,CAAC,IAAA,EAAMV,SAAAA,CAAAA;IAE1D,IAAI,CAACM,mBAAAA,IAAuB,CAACE,gBAAAA,EAAkB;;QAE7C,OAAO,YAAA;AACT,IAAA;;;IAKA,IAAIT,KAAAA,CAAMM,GAAG,KAAK,gCAAA,EAAkC;QAClD,OAAO,MAAA;AACT,IAAA;IAEA,OAAOL,SAAAA;AACT,CAAA;AAEA;;;IAIA,MAAMW,oBAAAA,GAAuB,OAAOC,SAAAA,EAAuBC,SAAAA,GAAAA;AACzD,IAAA,IAAI,CAACvB,YAAAA,CAAawB,kBAAkB,CAACC,MAAAA,CAAOC,QAAQ,CAACJ,SAAAA,CAAAA,CAAAA,EAAa;QAChE,OAAOC,SAAAA;AACT,IAAA;AAEA,IAAA,MAAMI,mBAAmBd,UAAAA,CAAW,mBAAA,CAAA;IAEpC,IAAI,CAACU,SAAAA,CAAUK,MAAM,EAAE;QACrB,OAAOL,SAAAA;AACT,IAAA;IAEA,MAAMM,aAAAA,GAAgBN,SAAS,CAAC,CAAA,CAAE;AAElC,IAAA,MAAMlB,OAAAA,GAAe;QACnByB,UAAAA,EAAY;AAAEC,YAAAA,GAAAA,EAAKR,UAAUS,GAAG,CAAC,CAACC,CAAAA,GAAMA,EAAEH,UAAU;AAAE,SAAA;;QAEtDI,WAAAA,EAAaL,aAAAA,CAAcK,WAAW,KAAK,IAAA,GAAO;YAAEC,KAAAA,EAAO;SAAK,GAAI;YAAEC,QAAAA,EAAU;AAAK;AACvF,KAAA;AAEA,IAAA,MAAMC,kBAAkB,MAAMZ,MAAAA,CAAOa,KAAK,CAAChB,SAAAA,CAAAA,CAAWiB,QAAQ,CAAC;QAC7DC,MAAAA,EAAQ;AAAC,YAAA,IAAA;AAAM,YAAA,YAAA;AAAc,YAAA,QAAA;AAAU,YAAA,WAAA;AAAa,YAAA,WAAA;AAAa,YAAA;AAAc,SAAA;AAC/EnC,QAAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMoC,qBAAqBC,iBAAAA,CAAkBL,eAAAA,CAAAA;IAE7C,OAAOd,SAAAA,CAAUS,GAAG,CAAC,CAACW,QAAAA,GAAAA;AACpB,QAAA,MAAMC,aAAaH,kBAAAA,CAAmBI,GAAG,CAACF,QAAAA,CAASb,UAAU,KAAe,EAAE;AAC9E,QAAA,MAAMgB,iBAAAA,GAAoBH,QAAAA,CAASI,MAAM,GACrCH,WAAWI,MAAM,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEF,MAAM,KAAKJ,QAAAA,CAASI,MAAM,CAAA,GACrDH,UAAAA;QAEJ,OAAO;AACL,YAAA,GAAGD,QAAQ;YACXO,MAAAA,EAAQvB,gBAAAA,CAAiBwB,SAAS,CAACR,QAAAA,EAAUG,iBAAAA;AAC/C,SAAA;AACF,IAAA,CAAA,CAAA;AACF,CAAA;AAEA,MAAMM,oBAAAA,GAAuB,CAACF,MAAAA,EAAgBnC,GAAAA,GAAAA;IAC5C,MAAMN,KAAAA,GAAQgB,MAAAA,CAAOC,QAAQ,CAACX,GAAAA,CAAAA;AAE9B;;AAEC,MACD,IAAI,CAACN,KAAAA,IAAS,CAACT,YAAAA,CAAawB,kBAAkB,CAACf,KAAAA,CAAAA,EAAQ;AACrD,QAAA,OAAO,EAAC;AACV,IAAA;;AAGA,IAAA,OAAOyC,WAAW,WAAA,GAAc;QAAEd,QAAAA,EAAU;KAAK,GAAI;QAAED,KAAAA,EAAO;AAAK,KAAA;AACrE,CAAA;AAEA,MAAMkB,cAAAA,GAAiB,CAACC,SAAAA,EAAuBhC,SAAAA,EAA4ByB,MAAAA,GAAAA;IACzE,MAAMQ,WAAAA,GAAc9B,MAAAA,CAAOC,QAAQ,CAAC4B,SAAAA,CAAAA;IACpC,MAAME,WAAAA,GAAc/B,MAAAA,CAAOC,QAAQ,CAACJ,SAAAA,CAAAA;IAEpC,MAAMmC,WAAAA,GAAchC,OAAOiC,MAAM,CAAC,QAAQC,OAAO,CAAC,iBAAiBC,sBAAsB;AACzF,IAAA,MAAMC,oBAAoBJ,WAAAA,CAAYF,WAAAA,CAAAA;AACtC,IAAA,MAAMO,oBAAoBL,WAAAA,CAAYD,WAAAA,CAAAA;IAEtC,OAAO;AACLT,QAAAA,MAAAA;AACAc,QAAAA,iBAAAA;AACAC,QAAAA;AACF,KAAA;AACF,CAAA;AAEA,MAAMC,cAAAA,GAAiB,CACrBT,SAAAA,EACAJ,MAAAA,GAAAA;IAEA,MAAMK,WAAAA,GAAc9B,MAAAA,CAAOC,QAAQ,CAAC4B,SAAAA,CAAAA;IAEpC,MAAMU,IAAAA,GAAOhE,aAAawB,kBAAkB;AAC5C,IAAA,MAAMyC,aAAaD,IAAAA,CAAKT,WAAAA,CAAAA;;AAGxB,IAAA,IAAI,CAACU,UAAAA,IAAcV,WAAAA,CAAYW,SAAS,KAAK,aAAA,EAAe;QAC1D,OAAO;YAAEhB,MAAAA,EAAQiB;AAAU,SAAA;AAC7B,IAAA;IAEA,OAAQjB,MAAAA;QACN,KAAK,WAAA;YACH,OAAO;gBAAEA,MAAAA,EAAQ;AAAY,aAAA;AAC/B,QAAA;;YAEE,OAAO;gBAAEA,MAAAA,EAAQ;AAAQ,aAAA;AAC7B;AACF,CAAA;AAEA,gBAAe;IACb,MAAMkB,6BAAAA,CAAAA,CAA8BC,GAAQ,EAAEC,EAAY,EAAA;AACxD,QAAA,MAAM,EAAE3D,WAAW,EAAE,GAAG0D,IAAIE,KAAK;AACjC,QAAA,MAAM,EAAE9D,KAAK,EAAE+D,WAAW,EAAE,GAAGH,IAAIlE,MAAM;QAEzC,MAAMsE,YAAAA,GAAehD,MAAAA,CAAOC,QAAQ,CAACjB,KAAAA,CAAAA;AACrC,QAAA,IAAI,CAACgE,YAAAA,EAAc;YACjB,MAAM,IAAIC,OAAOC,eAAe,CAAC,CAAC,UAAU,EAAElE,KAAAA,CAAM,cAAc,CAAC,CAAA;AACrE,QAAA;AAEA,QAAA,MAAMmE,SAAAA,GAAiBH,YAAAA,CAAaI,UAAU,CAACL,WAAAA,CAAY;AAC3D,QAAA,IAAI,CAACI,SAAAA,IAAaA,SAAAA,CAAUE,IAAI,KAAK,UAAA,EAAY;YAC/C,MAAM,IAAIJ,MAAAA,CAAOC,eAAe,CAC9B,CAAC,qBAAqB,EAAEH,WAAAA,CAAY,kBAAkB,EAAE/D,KAAAA,CAAAA,CAAO,CAAA;AAEnE,QAAA;AAEA,QAAA,MAAM6C,SAAAA,GAAY7C,KAAAA;QAClB,MAAMa,SAAAA,GAAYsD,UAAUG,MAAM;AAElC,QAAA,MAAM,EAAEhC,MAAM,EAAEc,iBAAiB,EAAEC,iBAAiB,EAAE,GAAGT,cAAAA,CACvDC,SAAAA,EACAhC,SAAAA,EACA+C,GAAAA,CAAIW,OAAO,EAAE1C,KAAAA,EAAOS,MAAAA,CAAAA;QAEtB,MAAM,EAAEG,MAAM,EAAE,GAAGa,eAAeT,SAAAA,EAAWe,GAAAA,CAAIW,OAAO,EAAE1C,KAAAA,EAAOY,MAAAA,CAAAA;AAEjE,QAAA,MAAMtC,iBAAAA,GAAoBC,UAAAA,CAAW,oBAAA,CAAA,CAAsBC,MAAM,CAAC;AAChEH,YAAAA,WAAAA;AACAF,YAAAA;AACF,SAAA,CAAA;QAEA,MAAMwE,WAAAA,GAAcR,YAAAA,CAAaP,SAAS,KAAK,WAAA;AAC/C,QAAA,IAAI,CAACe,WAAAA,EAAa;AAChB,YAAA,IAAIrE,kBAAkBsE,MAAM,CAAC9D,IAAI,CAAC,MAAMoD,WAAAA,CAAAA,EAAc;AACpD,gBAAA,OAAOH,IAAIc,SAAS,EAAA;AACtB,YAAA;AACF,QAAA;AAEA,QAAA,IAAIC,OAAAA,GAAkC,IAAA;AAEtC,QAAA,IAAId,EAAAA,EAAI;AACN,YAAA,MAAMe,QAA6B,EAAC;AAEpC,YAAA,IAAI,CAACJ,WAAAA,EAAa;AAChBI,gBAAAA,KAAAA,CAAMvD,UAAU,GAAGwC,EAAAA;AAEnB,gBAAA,IAAIpB,MAAAA,EAAQ;oBACVmC,KAAAA,CAAMnD,WAAW,GAAGkB,oBAAAA,CAAqBF,MAAAA,EAAQI,SAAAA,CAAAA;AACnD,gBAAA;AAEA,gBAAA,IAAIP,UAAUc,iBAAAA,EAAmB;AAC/BwB,oBAAAA,KAAAA,CAAMtC,MAAM,GAAGA,MAAAA;AACjB,gBAAA;YACF,CAAA,MAAO;;;AAGLsC,gBAAAA,KAAAA,CAAMf,EAAE,GAAGA,EAAAA;AACb,YAAA;YAEA,MAAMgB,eAAAA,GAAkB,MAAM1E,iBAAAA,CAAkB2E,cAAc,CAACnE,IAAI,CAACiD,IAAI/B,KAAK,CAAA;YAC7E,MAAMkD,QAAAA,GAAW,MAAM3E,UAAAA,CAAW,kBAAA,CAAA,CAAoBJ,OACnDgF,iBAAiB,CAACH,iBAClBI,KAAK,EAAA;YAER,MAAMC,aAAAA,GAAgB,MAAMlE,MAAAA,CAAOmE,EAAE,CAACtD,KAAK,CAAC7B,KAAAA,CAAAA,CAAOoF,OAAO,CAAC;AACzDR,gBAAAA,KAAAA;AACAG,gBAAAA;AACF,aAAA,CAAA;;;;;AAMA,YAAA,IAAI,CAACG,aAAAA,EAAe;gBAClB,MAAM,IAAIjB,OAAOoB,aAAa,EAAA;AAChC,YAAA;AAEA,YAAA,IAAI,CAACb,WAAAA,EAAa;AAChB,gBAAA,IAAIrE,kBAAkBsE,MAAM,CAAC9D,IAAI,CAACuE,eAAenB,WAAAA,CAAAA,EAAc;oBAC7D,MAAM,IAAIE,OAAOqB,cAAc,EAAA;AACjC,gBAAA;AACF,YAAA;AAEAX,YAAAA,OAAAA,GAAUO,cAAcrB,EAAE;AAC5B,QAAA;AAEA,QAAA,MAAM0B,WAAAA,GAAcf,WAAAA,GAChB,MAAMpE,UAAAA,CAAW,YAAA,CAAA,CAAcoF,iBAAiB,CAACxB,YAAAA,CAAAA,GACjD,MAAM5D,UAAAA,CAAW,eAAA,CAAA,CAAiBoF,iBAAiB,CAACxB,YAAAA,CAAAA;QAExD,MAAMyB,YAAAA,GAAezE,MAAAA,CAAOC,QAAQ,CAACJ,SAAAA,CAAAA;AAErC,QAAA,MAAMZ,YAAYyF,IAAAA,CAChBC,IAAAA,CAAK,CAAC,UAAU,EAAE5B,YAAY,eAAe,CAAC,GAC9C,CAAC9D,SAAAA,GAAcA,aAAa,IAAA,EAC5B,CAACA,YAAcF,iBAAAA,CAAkB0F,YAAAA,EAAcxF,WAAWC,WAAAA,CAAAA,CAAAA,CAC1DqF,WAAAA,CAAAA;AAEF,QAAA,MAAMK,iBAAiBC,IAAAA,CAAK;AAC1B5F,YAAAA,SAAAA;AACAZ,YAAAA,sBAAAA;AACAC,YAAAA,oBAAAA;AACA,YAAA;AACD,SAAA,CAAA;AAED,QAAA,IAAI+D,iBAAAA,EAAmB;AACrBuC,YAAAA,cAAAA,CAAe9F,IAAI,CAAC,QAAA,CAAA;AACtB,QAAA;QAEA,OAAO;AACL6E,YAAAA,OAAAA;AACArC,YAAAA,MAAAA;AACAG,YAAAA,MAAAA;AACA0B,YAAAA,SAAAA;AACAyB,YAAAA,cAAAA;AACA3F,YAAAA,SAAAA;YACA6F,MAAAA,EAAQ;gBAAEC,MAAAA,EAAQ/B,YAAAA;gBAAchB,WAAAA,EAAaI;AAAkB,aAAA;YAC/DkB,MAAAA,EAAQ;gBAAEyB,MAAAA,EAAQN,YAAAA;gBAAczC,WAAAA,EAAaK;AAAkB,aAAA;AAC/DW,YAAAA,YAAAA;AACAyB,YAAAA,YAAAA;AACA1B,YAAAA;AACF,SAAA;AACF,IAAA,CAAA;AAEA;;;;MAKA,MAAMiC,eAAcpC,GAAQ,EAAA;AAC1B,QAAA,MAAM,EAAEC,EAAE,EAAE,GAAGD,GAAAA,CAAIW,OAAO,CAAC1C,KAAK;AAEhC,QAAA,MAAMoE,qBAAAA,CAAsBrC,GAAAA,CAAIW,OAAO,CAAC1C,KAAK,CAAA;QAE7C,MAAM,EACJS,MAAM,EACNG,MAAM,EACNsB,WAAW,EACX6B,cAAc,EACd3F,SAAS,EACT6F,MAAAA,EAAQ,EACNC,QAAQ,EAAEzF,GAAAA,EAAKuC,SAAS,EAAEY,SAAAA,EAAWyC,eAAe,EAAE,EACtDlD,aAAaI,iBAAiB,EAC/B,EACDkB,MAAAA,EAAQ,EACNyB,QAAQ,EAAEzF,GAAAA,EAAKO,SAAS,EAAE,EAC1BmC,aAAaK,iBAAiB,EAC/B,EACF,GAAG,MAAM,IAAI,CAACM,6BAA6B,CAACC,GAAAA,EAAKC,EAAAA,CAAAA;AAElD,QAAA,MAAM,EAAEsC,SAAS,EAAEC,YAAY,EAAEC,EAAE,EAAE,GAAGxE,KAAAA,EAAO,GAAG+B,GAAAA,CAAIW,OAAO,CAAC1C,KAAK;AAEnE,QAAA,MAAM1B,iBAAAA,GAAoBC,UAAAA,CAAW,oBAAA,CAAA,CAAsBC,MAAM,CAAC;YAChEH,WAAAA,EAAa0D,GAAAA,CAAIE,KAAK,CAAC5D,WAAW;YAClCF,KAAAA,EAAOa;AACT,SAAA,CAAA;AACA,QAAA,MAAMgE,kBAAkB,MAAM1E,iBAAAA,CAAkB2E,cAAc,CAACnE,IAAI,CAACkB,KAAAA,CAAAA;AAEpE,QAAA,MAAMyE,WAAAA,GAAc;YAClBC,IAAAA,EAAMtG,SAAAA;;YAENuG,MAAAA,EAAQZ,cAAAA;AACR,YAAA,GAAGf;AACL,SAAA;;;AAIApF,QAAAA,gBAAAA,CAAiB6G,WAAAA,EAAa;AAC5B7E,YAAAA,WAAAA,EAAakB,qBAAqBF,MAAAA,EAAQ5B,SAAAA;AAC5C,SAAA,CAAA;;AAGA,QAAA,MAAM4F,iBAAiBpD,iBAAAA,IAAqBf,MAAAA;AAC5C,QAAA,IAAImE,cAAAA,EAAgB;AAClBhH,YAAAA,gBAAAA,CAAiB6G,WAAAA,EAAa;AAAEhE,gBAAAA;AAAO,aAAA,CAAA;AACzC,QAAA;AAEA,QAAA,IAAIuB,EAAAA,EAAI;AACN;;;;;AAKC,UACD,MAAM6C,QAAAA,GAAW1F,MAAAA,CAAOmE,EAAE,CAACwB,YAAY,CAAC9D,SAAAA,CAAAA;;YAGxC,MAAM+D,KAAAA,GAAQF,SAASG,QAAQ,EAAA;AAE/B,YAAA,MAAMjC,KAAAA,GAA6B;AACjC,gBAAA,CAAC,CAAA,EAAGgC,KAAAA,CAAM,GAAG,CAAC,GAAG;oBAAEjF,QAAAA,EAAU;AAAK,iBAAA;AAClC,gBAAA,CAAC,CAAA,EAAGiF,KAAAA,CAAM,YAAY,CAAC,GAAG;oBAAEjF,QAAAA,EAAU;AAAK;AAC7C,aAAA;AAEA;;;UAIA,IAAIuE,oBAAoB,aAAA,EAAe;AACrCtB,gBAAAA,KAAAA,CAAMkC,WAAW,GAAGjD,EAAAA;YACtB,CAAA,MAAO;AACLe,gBAAAA,KAAAA,CAAMf,EAAE,GAAGA,EAAAA;AACb,YAAA;;YAGA,MAAMpC,WAAAA,GAAckB,qBAAqBF,MAAAA,EAAQ5B,SAAAA,CAAAA;YACjD,IAAI,CAACkG,QAAQtF,WAAAA,CAAAA,EAAc;AACzBmD,gBAAAA,KAAK,CAAC,CAAA,EAAGgC,KAAAA,CAAM,aAAa,CAAC,CAAC,GAAGnF,WAAAA;AACnC,YAAA;;AAGA,YAAA,IAAI4B,qBAAqBf,MAAAA,EAAQ;AAC/BsC,gBAAAA,KAAK,CAAC,CAAA,EAAGgC,KAAAA,CAAM,OAAO,CAAC,CAAC,GAAGtE,MAAAA;AAC7B,YAAA;AAEA,YAAA,IAAIc,qBAAqBd,MAAAA,EAAQ;AAC/BsC,gBAAAA,KAAAA,CAAMtC,MAAM,GAAGA,MAAAA;AACjB,YAAA;AAEA;;;;AAIC,UACD,IAAI,CAAC8D,cAAcjF,MAAAA,IAAU,CAAA,MAAO,CAAA,EAAG;gBACrCyD,KAAK,CAAC,GAAGgC,KAAAA,CAAM,GAAG,CAAC,CAAC,CAACI,MAAM,GAAGZ,YAAAA;AAChC,YAAA;AAEA,YAAA,MAAMa,eAAeP,QAAAA,CAClB9B,KAAK,CAACA,KAAAA,CAAAA,CACNsC,IAAI,CAAC;AAAEN,gBAAAA,KAAAA;AAAO7C,gBAAAA;AAAY,aAAA,CAAA,CAC1BhC,MAAM,CAAC,CAAA,EAAG6E,MAAM,GAAG,CAAC,EACpBO,YAAY,EAAA;AAEf1H,YAAAA,gBAAAA,CAAiB6G,WAAAA,EAAa;gBAC5BzC,EAAAA,EAAI;oBAAEmD,MAAAA,EAAQC;AAAa;AAC7B,aAAA,CAAA;AACF,QAAA;AAEA;;;AAGC,QACD,IAAIZ,EAAAA,EAAI;YACN,MAAMe,OAAAA,GAAUC,iBAAiB,OAAA,EAASxF,KAAAA,CAAMuF,OAAO,CAAA,GAAIvF,KAAAA,CAAMuF,OAAO,GAAG,YAAA;AAC3E3H,YAAAA,gBAAAA,CAAiB6G,WAAAA,EAAa;AAAE,gBAAA,CAACrG,YAAY;AAAE,oBAAA,CAACmH,UAAUf;AAAG;AAAE,aAAA,CAAA;AACjE,QAAA;QAEA,IAAIF,SAAAA,EAAWhF,SAAS,CAAA,EAAG;;AAEzB1B,YAAAA,gBAAAA,CAAiB6G,WAAAA,EAAa;gBAC5BzC,EAAAA,EAAI;AAAEmD,oBAAAA,MAAAA,EAAQnB,IAAAA,CAAKM,SAAAA;AAAW;AAChC,aAAA,CAAA;AACF,QAAA;AAEA,QAAA,MAAMmB,UAAUtG,MAAAA,CAAOoB,GAAG,CAAC,cAAA,CAAA,CAAgBmF,SAAS,CAAC1G,SAAAA,EAAWyF,WAAAA,CAAAA;QAEhE,MAAMkB,GAAAA,GAAM,MAAMxG,MAAAA,CAAOmE,EAAE,CAACtD,KAAK,CAAChB,SAAAA,CAAAA,CAAW4G,QAAQ,CAACH,OAAAA,CAAAA;AAEtD1D,QAAAA,GAAAA,CAAI8D,IAAI,GAAG;AACT,YAAA,GAAGF,GAAG;AACNG,YAAAA,OAAAA,EAAS,MAAM/G,oBAAAA,CAAqBC,SAAAA,EAAW2G,GAAAA,CAAIG,OAAO;AAC5D,SAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMC,cAAahE,GAAQ,EAAA;AACzB,QAAA,MAAM,EAAE1D,WAAW,EAAE,GAAG0D,IAAIE,KAAK;AACjC,QAAA,MAAM,EAAED,EAAE,EAAE,GAAGD,IAAIlE,MAAM;AAEzB,QAAA,MAAMmI,oBAAAA,CAAqBjE,GAAAA,CAAIW,OAAO,CAAC1C,KAAK,CAAA;AAE5C,QAAA,MAAM,EACJ8C,OAAO,EACPR,SAAS,EACTJ,WAAW,EACX6B,cAAc,EACdnD,MAAM,EACNqD,MAAAA,EAAQ,EAAEC,MAAAA,EAAQ/B,YAAY,EAAE,EAChCM,MAAAA,EAAQ,EAAEyB,MAAAA,EAAQN,YAAY,EAAE,EACjC,GAAG,MAAM,IAAI,CAAC9B,6BAA6B,CAACC,GAAAA,EAAKC,EAAAA,CAAAA;AAElD,QAAA,MAAM,EAAEvD,GAAAA,EAAKuC,SAAS,EAAE,GAAGmB,YAAAA;AAC3B,QAAA,MAAM,EAAE1D,GAAAA,EAAKO,SAAS,EAAE,GAAG4E,YAAAA;AAE3B,QAAA,MAAMZ,eAAAA,GAAkB,MAAMzE,UAAAA,CAAW,oBAAA,CAAA,CACtCC,MAAM,CAAC;AAAEH,YAAAA,WAAAA;YAAaF,KAAAA,EAAOa;SAAU,CAAA,CACvCiE,cAAc,CAACnE,IAAI,CAAC;YAAE6F,MAAAA,EAAQZ;AAAe,SAAA,CAAA;AAEhD;;;;;;AAMC,QACD,MAAM0B,OAAAA,GAAUtG,MAAAA,CAAOmE,EAAE,CAACtD,KAAK,CAACgB,SAAAA,CAAAA;AAChC,QAAA,MAAMiF,gBAAgBhH,WAAAA,CAAUiH,WAAW,CAAC5D,SAAAA,CAAAA,GACxC,CAAC,GAAG6D,IAAAA,GAA+CV,OAAAA,CAAQW,SAAS,CAAA,GAAID,IAAAA,CAAAA,GACxE,CAAC,GAAGA,IAAAA,GACFV,QACGY,IAAI,CAAA,GAAIF,KACT;aACCG,IAAI,CAAC,CAACX,GAAAA,IAAS;AAAEG,oBAAAA,OAAAA,EAASH,GAAAA,GAAM;AAACA,wBAAAA;AAAI,qBAAA,GAAG;iBAAG,CAAA,CAAA;AAEpD,QAAA,MAAM5H,UAEF,EAAC;AAEL,QAAA,IAAIoE,YAAAA,EAAcoE,OAAAA,EAASC,eAAAA,IAAmBrE,YAAAA,EAAcP,cAAc,WAAA,EAAa;YACrF,IAAIgC,YAAAA,EAAc2C,SAASC,eAAAA,EAAiB;AAC1C,gBAAA,IAAI5F,WAAW,WAAA,EAAa;AAC1B7C,oBAAAA,OAAAA,CAAQ6B,WAAW,GAAG;wBAAEE,QAAAA,EAAU;AAAK,qBAAA;gBACzC,CAAA,MAAO;AACL/B,oBAAAA,OAAAA,CAAQ6B,WAAW,GAAG;wBAAEC,KAAAA,EAAO;AAAK,qBAAA;AACtC,gBAAA;AACF,YAAA;QACF,CAAA,MAAO,IAAI+D,YAAAA,EAAc2C,OAAAA,EAASC,eAAAA,EAAiB;;AAEjDzI,YAAAA,OAAAA,CAAQ6B,WAAW,GAAG;gBAAEC,KAAAA,EAAO;AAAK,aAAA;AACtC,QAAA;AAEA;;;;;;;;QASA,MAAM8F,GAAAA,GAAM,MAAMM,aAAAA,CAAc;YAAEjE,EAAAA,EAAIc;AAAQ,SAAA,EAAGZ,WAAAA,EAAa;YAC5DhC,MAAAA,EAAQ;AAAC,gBAAA,IAAA;AAAM,gBAAA,YAAA;AAAc,gBAAA,QAAA;AAAU,gBAAA,aAAA;AAAe,gBAAA;AAAY,aAAA;YAClEuG,QAAAA,EAAU,MAAA;AACVC,YAAAA,IAAAA,EAAM3E,GAAAA,CAAIW,OAAO,CAAC1C,KAAK,CAAC0G,IAAI;AAC5BC,YAAAA,QAAAA,EAAU5E,GAAAA,CAAIW,OAAO,CAAC1C,KAAK,CAAC2G,QAAQ;AACpC5I,YAAAA;AACF,SAAA,CAAA;AAEA;;;QAIA,MAAM6I,SAAAA,GAAYjB,GAAAA,CAAIG,OAAO,CAACpG,GAAG,CAAC,CAACmH,IAAAA,GAAcA,IAAAA,CAAK7E,EAAE,CAAA;AACxDpE,QAAAA,gBAAAA,CAAiBoF,eAAAA,EAAiB;YAAEhB,EAAAA,EAAI;gBAAEvC,GAAAA,EAAKmH;AAAU;AAAE,SAAA,CAAA;AAE3D;;;;;QAMA,MAAME,YAAAA,GAAe,MAAMb,aAAAA,CAAc;YAAEjE,EAAAA,EAAIc;AAAQ,SAAA,EAAGZ,WAAAA,EAAa;AACrE,YAAA,GAAG/C,OAAOoB,GAAG,CAAC,gBAAgBmF,SAAS,CAAC1G,WAAWgE,eAAAA,CAAgB;YACnEyD,QAAAA,EAAU;AACZ,SAAA,CAAA;;QAGA,MAAMM,cAAAA,GAAiBC,OAAO,IAAA,EAAMC,MAAAA,CAAOH,aAAahB,OAAO,EAAEH,IAAIG,OAAO,CAAA,CAAA;AAE5E/D,QAAAA,GAAAA,CAAI8D,IAAI,GAAG;YACTqB,UAAAA,EAAYvB,GAAAA,CAAIuB,UAAU,IAAI;gBAC5BR,IAAAA,EAAM,CAAA;gBACNS,SAAAA,EAAW,CAAA;gBACXR,QAAAA,EAAU,EAAA;AACVS,gBAAAA,KAAAA,EAAOL,eAAezH;AACxB,aAAA;YACAwG,OAAAA,EAAS,MAAM/G,qBAAqBC,SAAAA,EAAW+H,cAAAA;AACjD,SAAA;AACF,IAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"relations.mjs","sources":["../../../server/src/controllers/relations.ts"],"sourcesContent":["import { prop, uniq, uniqBy, concat, flow, isEmpty } from 'lodash/fp';\n\nimport { isOperatorOfType, contentTypes, relations, errors } from '@strapi/utils';\nimport type { Data, Modules, UID } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { validateFindAvailable, validateFindExisting } from './validation/relations';\nimport { isListable } from '../services/utils/configuration/attributes';\nimport { indexByDocumentId } from './utils/document-status';\n\nconst { PUBLISHED_AT_ATTRIBUTE, UPDATED_AT_ATTRIBUTE } = contentTypes.constants;\n\ninterface RelationEntity {\n id: Data.ID;\n documentId: Modules.Documents.ID;\n updatedAt: string | Date;\n publishedAt?: string | Date;\n [key: string]: unknown;\n}\n\nconst addFiltersClause = (params: any, filtersClause: any) => {\n params.filters = params.filters || {};\n params.filters.$and = params.filters.$and || [];\n params.filters.$and.push(filtersClause);\n};\n\nconst sanitizeMainField = (model: any, mainField: any, userAbility: any) => {\n const permissionChecker = getService('permission-checker').create({\n userAbility,\n model: model.uid,\n });\n\n // Whether the main field can be displayed or not, regardless of permissions.\n const isMainFieldListable = isListable(model, mainField);\n // Whether the user has the permission to access the model's main field (using RBAC abilities)\n const canReadMainField = permissionChecker.can.read(null, mainField);\n\n if (!isMainFieldListable || !canReadMainField) {\n // Default to 'documentId' if the actual main field shouldn't be displayed\n return 'documentId';\n }\n\n // Edge cases\n\n // 1. Enforce 'name' as the main field for users and permissions' roles\n if (model.uid === 'plugin::users-permissions.role') {\n return 'name';\n }\n\n return mainField;\n};\n\n/**\n *\n * All relations sent to this function should have the same status or no status\n */\nconst addStatusToRelations = async (targetUid: UID.Schema, relations: RelationEntity[]) => {\n if (!contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {\n return relations;\n }\n\n const documentMetadata = getService('document-metadata');\n\n if (!relations.length) {\n return relations;\n }\n\n const firstRelation = relations[0];\n\n const filters: any = {\n documentId: { $in: relations.map((r) => r.documentId) },\n // NOTE: find the \"opposite\" status\n publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true },\n };\n\n const availableStatus = await strapi.query(targetUid).findMany({\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n filters,\n });\n\n const statusByDocumentId = indexByDocumentId(availableStatus);\n\n return relations.map((relation: RelationEntity) => {\n const candidates = statusByDocumentId.get(relation.documentId as string) || [];\n const availableStatuses = relation.locale\n ? candidates.filter((c) => c.locale === relation.locale)\n : candidates;\n\n return {\n ...relation,\n status: documentMetadata.getStatus(relation, availableStatuses),\n };\n });\n};\n\nconst getPublishedAtClause = (status: string, uid: UID.Schema) => {\n const model = strapi.getModel(uid);\n\n /**\n * If dp is disabled, ignore the filter\n */\n if (!model || !contentTypes.hasDraftAndPublish(model)) {\n return {};\n }\n\n // Prioritize the draft status in case it's not provided\n return status === 'published' ? { $notNull: true } : { $null: true };\n};\n\nconst validateLocale = (sourceUid: UID.Schema, targetUid: UID.ContentType, locale?: string) => {\n const sourceModel = strapi.getModel(sourceUid);\n const targetModel = strapi.getModel(targetUid);\n\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType;\n const isSourceLocalized = isLocalized(sourceModel);\n const isTargetLocalized = isLocalized(targetModel);\n\n return {\n locale,\n isSourceLocalized,\n isTargetLocalized,\n };\n};\n\nconst validateStatus = (\n sourceUid: UID.Schema,\n status?: Modules.Documents.Params.PublicationStatus.Kind\n) => {\n const sourceModel = strapi.getModel(sourceUid);\n\n const isDP = contentTypes.hasDraftAndPublish;\n const isSourceDP = isDP(sourceModel);\n\n // Default to draft if not set\n if (!isSourceDP && sourceModel.modelType === 'contentType') {\n return { status: undefined };\n }\n\n switch (status) {\n case 'published':\n return { status: 'published' };\n default:\n // Assign to draft if the status is not valid\n return { status: 'draft' };\n }\n};\n\nexport default {\n async extractAndValidateRequestInfo(ctx: any, id?: Data.ID) {\n const { userAbility } = ctx.state;\n const { model, targetField } = ctx.params;\n\n const sourceSchema = strapi.getModel(model);\n if (!sourceSchema) {\n throw new errors.ValidationError(`The model ${model} doesn't exist`);\n }\n\n const attribute: any = sourceSchema.attributes[targetField];\n if (!attribute || attribute.type !== 'relation') {\n throw new errors.ValidationError(\n `The relational field ${targetField} doesn't exist on ${model}`\n );\n }\n\n const sourceUid = model;\n const targetUid = attribute.target;\n\n const { locale, isSourceLocalized, isTargetLocalized } = validateLocale(\n sourceUid,\n targetUid,\n ctx.request?.query?.locale\n );\n const { status } = validateStatus(sourceUid, ctx.request?.query?.status);\n\n const permissionChecker = getService('permission-checker').create({\n userAbility,\n model,\n });\n\n const isComponent = sourceSchema.modelType === 'component';\n if (!isComponent) {\n if (permissionChecker.cannot.read(null, targetField)) {\n return ctx.forbidden();\n }\n }\n\n let entryId: string | number | null = null;\n\n if (id) {\n const where: Record<string, any> = {};\n\n if (!isComponent) {\n where.documentId = id;\n\n if (status) {\n where.publishedAt = getPublishedAtClause(status, sourceUid);\n }\n\n if (locale && isSourceLocalized) {\n where.locale = locale;\n }\n } else {\n // If the source is a component, we only need to filter by the\n // component's entity id\n where.id = id;\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const currentEntity = await strapi.db.query(model).findOne({\n where,\n populate,\n });\n\n // We need to check if the entity exists\n // and if the user has the permission to read it in this way\n // There may be multiple entities (publication states) under this\n // documentId + locale. We only need to check if one exists\n if (!currentEntity) {\n throw new errors.NotFoundError();\n }\n\n if (!isComponent) {\n if (permissionChecker.cannot.read(currentEntity, targetField)) {\n throw new errors.ForbiddenError();\n }\n }\n\n entryId = currentEntity.id;\n }\n\n const modelConfig = isComponent\n ? await getService('components').findConfiguration(sourceSchema)\n : await getService('content-types').findConfiguration(sourceSchema);\n\n const targetSchema = strapi.getModel(targetUid);\n\n const mainField = flow(\n prop(`metadatas.${targetField}.edit.mainField`),\n (mainField) => mainField || 'id',\n (mainField) => sanitizeMainField(targetSchema, mainField, userAbility)\n )(modelConfig);\n\n const fieldsToSelect = uniq([\n mainField,\n PUBLISHED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n 'documentId',\n ]);\n\n if (isTargetLocalized) {\n fieldsToSelect.push('locale');\n }\n\n return {\n entryId,\n locale,\n status,\n attribute,\n fieldsToSelect,\n mainField,\n source: { schema: sourceSchema, isLocalized: isSourceLocalized },\n target: { schema: targetSchema, isLocalized: isTargetLocalized },\n sourceSchema,\n targetSchema,\n targetField,\n };\n },\n\n /**\n * Used to find new relations to add in a relational field.\n *\n * Component and document relations are dealt a bit differently (they don't have a document_id).\n */\n async findAvailable(ctx: any) {\n const { id } = ctx.request.query;\n\n await validateFindAvailable(ctx.request.query);\n\n const {\n locale,\n status,\n targetField,\n fieldsToSelect,\n mainField,\n source: {\n schema: { uid: sourceUid, modelType: sourceModelType },\n isLocalized: isSourceLocalized,\n },\n target: {\n schema: { uid: targetUid },\n isLocalized: isTargetLocalized,\n },\n } = await this.extractAndValidateRequestInfo(ctx, id);\n\n const {\n idsToOmit,\n idsToInclude,\n // `_q` is the public query parameter name; keep the alias grep-able.\n _q: search,\n ...query\n } = ctx.request.query;\n\n const permissionChecker = getService('permission-checker').create({\n userAbility: ctx.state.userAbility,\n model: targetUid,\n });\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n\n const queryParams = {\n sort: mainField,\n // cannot select other fields as the user may not have the permissions\n fields: fieldsToSelect,\n ...permissionQuery,\n };\n\n // If no status is requested, we find all the draft relations and later update them\n // with the latest available status\n addFiltersClause(queryParams, {\n publishedAt: getPublishedAtClause(status, targetUid),\n });\n\n // We will only filter by locale if the target content type is localized\n const filterByLocale = isTargetLocalized && locale;\n if (filterByLocale) {\n addFiltersClause(queryParams, { locale });\n }\n\n if (id) {\n /**\n * Exclude the relations that are already related to the source\n *\n * We also optionally filter the target relations by the requested\n * status and locale if provided.\n */\n const subQuery = strapi.db.queryBuilder(sourceUid);\n\n // The alias refers to the DB table of the target content type model\n const alias = subQuery.getAlias();\n\n const where: Record<string, any> = {\n [`${alias}.id`]: { $notNull: true },\n [`${alias}.document_id`]: { $notNull: true },\n };\n\n /**\n * Content Types -> Specify document id\n * Components -> Specify entity id (they don't have a document id)\n */\n if (sourceModelType === 'contentType') {\n where.document_id = id;\n } else {\n where.id = id;\n }\n\n // Add the status and locale filters if they are provided\n const publishedAt = getPublishedAtClause(status, targetUid);\n if (!isEmpty(publishedAt)) {\n where[`${alias}.published_at`] = publishedAt;\n }\n\n // If target has localization we need to filter by locale\n if (isTargetLocalized && locale) {\n where[`${alias}.locale`] = locale;\n }\n\n if (isSourceLocalized && locale) {\n where.locale = locale;\n }\n\n /**\n * UI can provide a list of ids to omit,\n * those are the relations user set in the UI but has not persisted.\n * We don't want to include them in the available relations.\n */\n if ((idsToInclude?.length ?? 0) !== 0) {\n where[`${alias}.id`].$notIn = idsToInclude;\n }\n\n const knexSubQuery = subQuery\n .where(where)\n .join({ alias, targetField })\n .select(`${alias}.id`)\n .getKnexQuery();\n\n addFiltersClause(queryParams, {\n id: { $notIn: knexSubQuery },\n });\n }\n\n /**\n * Apply a filter to the mainField based on the search query and filter operator\n * searching should be allowed only on mainField for permission reasons\n */\n if (search) {\n const filter = isOperatorOfType('where', query._filter) ? query._filter : '$containsi';\n addFiltersClause(queryParams, { [mainField]: { [filter]: search } });\n }\n\n if (idsToOmit?.length > 0) {\n // If we have ids to omit, we should filter them out\n addFiltersClause(queryParams, {\n id: { $notIn: uniq(idsToOmit) },\n });\n }\n\n const dbQuery = strapi.get('query-params').transform(targetUid, queryParams);\n\n const res = await strapi.db.query(targetUid).findPage(dbQuery);\n\n ctx.body = {\n ...res,\n results: await addStatusToRelations(targetUid, res.results),\n };\n },\n\n async findExisting(ctx: any) {\n const { userAbility } = ctx.state;\n const { id } = ctx.params;\n\n await validateFindExisting(ctx.request.query);\n\n const {\n entryId,\n attribute,\n targetField,\n fieldsToSelect,\n status,\n source: { schema: sourceSchema },\n target: { schema: targetSchema },\n } = await this.extractAndValidateRequestInfo(ctx, id);\n\n const { uid: sourceUid } = sourceSchema;\n const { uid: targetUid } = targetSchema;\n\n const permissionQuery = await getService('permission-checker')\n .create({ userAbility, model: targetUid })\n .sanitizedQuery.read({ fields: fieldsToSelect });\n\n /**\n * loadPages can not be used for single relations,\n * this unifies the loading regardless of it's type\n *\n * NOTE: Relations need to be loaded using any db.query method\n * to ensure the proper ordering is applied\n */\n const dbQuery = strapi.db.query(sourceUid);\n const loadRelations = relations.isAnyToMany(attribute)\n ? (...args: Parameters<typeof dbQuery.loadPages>) => dbQuery.loadPages(...args)\n : (...args: Parameters<typeof dbQuery.load>) =>\n dbQuery\n .load(...args)\n // Ensure response is an array\n .then((res) => ({ results: res ? [res] : [] }));\n\n const filters: {\n publishedAt?: Record<string, any>;\n } = {};\n\n if (sourceSchema?.options?.draftAndPublish || sourceSchema?.modelType === 'component') {\n if (targetSchema?.options?.draftAndPublish) {\n if (status === 'published') {\n filters.publishedAt = { $notNull: true };\n } else {\n filters.publishedAt = { $null: true };\n }\n }\n } else if (targetSchema?.options?.draftAndPublish) {\n // NOTE: we must return the drafts as some targets might not have a published version yet\n filters.publishedAt = { $null: true };\n }\n\n /**\n * If user does not have access to specific relations (custom conditions),\n * only the ids of the relations are returned.\n *\n * - First query loads all the ids.\n * - Second one also loads the main field, and excludes forbidden relations.\n *\n * The response contains the union of the two queries.\n */\n const res = await loadRelations({ id: entryId }, targetField, {\n select: ['id', 'documentId', 'locale', 'publishedAt', 'updatedAt'],\n ordering: 'desc',\n page: ctx.request.query.page,\n pageSize: ctx.request.query.pageSize,\n filters,\n });\n\n /**\n * Add all ids to load in permissionQuery\n * If any of the relations are not accessible, the permissionQuery will exclude them\n */\n const loadedIds = res.results.map((item: any) => item.id);\n addFiltersClause(permissionQuery, { id: { $in: loadedIds } });\n\n /**\n * Load the relations with the main field, the sanitized permission query\n * will exclude the relations the user does not have access to.\n *\n * Pagination is not necessary as the permissionQuery contains the ids to load.\n */\n const sanitizedRes = await loadRelations({ id: entryId }, targetField, {\n ...strapi.get('query-params').transform(targetUid, permissionQuery),\n ordering: 'desc',\n });\n\n // NOTE: the order is very important to make sure sanitized relations are kept in priority\n const relationsUnion = uniqBy('id', concat(sanitizedRes.results, res.results));\n\n ctx.body = {\n pagination: res.pagination || {\n page: 1,\n pageCount: 1,\n pageSize: 10,\n total: relationsUnion.length,\n },\n results: await addStatusToRelations(targetUid, relationsUnion),\n };\n },\n};\n"],"names":["PUBLISHED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","contentTypes","constants","addFiltersClause","params","filtersClause","filters","$and","push","sanitizeMainField","model","mainField","userAbility","permissionChecker","getService","create","uid","isMainFieldListable","isListable","canReadMainField","can","read","addStatusToRelations","targetUid","relations","hasDraftAndPublish","strapi","getModel","documentMetadata","length","firstRelation","documentId","$in","map","r","publishedAt","$null","$notNull","availableStatus","query","findMany","select","statusByDocumentId","indexByDocumentId","relation","candidates","get","availableStatuses","locale","filter","c","status","getStatus","getPublishedAtClause","validateLocale","sourceUid","sourceModel","targetModel","isLocalized","plugin","service","isLocalizedContentType","isSourceLocalized","isTargetLocalized","validateStatus","isDP","isSourceDP","modelType","undefined","extractAndValidateRequestInfo","ctx","id","state","targetField","sourceSchema","errors","ValidationError","attribute","attributes","type","target","request","isComponent","cannot","forbidden","entryId","where","permissionQuery","sanitizedQuery","populate","populateFromQuery","build","currentEntity","db","findOne","NotFoundError","ForbiddenError","modelConfig","findConfiguration","targetSchema","flow","prop","fieldsToSelect","uniq","source","schema","findAvailable","validateFindAvailable","sourceModelType","idsToOmit","idsToInclude","_q","search","queryParams","sort","fields","filterByLocale","subQuery","queryBuilder","alias","getAlias","document_id","isEmpty","$notIn","knexSubQuery","join","getKnexQuery","isOperatorOfType","_filter","dbQuery","transform","res","findPage","body","results","findExisting","validateFindExisting","loadRelations","isAnyToMany","args","loadPages","load","then","options","draftAndPublish","ordering","page","pageSize","loadedIds","item","sanitizedRes","relationsUnion","uniqBy","concat","pagination","pageCount","total"],"mappings":"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"}
@@ -309,9 +309,9 @@ var singleTypes = {
309
309
  if (permissionChecker.cannot.read(document)) {
310
310
  return ctx.forbidden();
311
311
  }
312
- const number = await documentManager.countDraftRelations(document.documentId, model, locale);
312
+ const counts = await documentManager.countDraftRelations(document.documentId, model, locale);
313
313
  return {
314
- data: number
314
+ data: counts
315
315
  };
316
316
  }
317
317
  };
@@ -1 +1 @@
1
- {"version":3,"file":"single-types.js","sources":["../../../server/src/controllers/single-types.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { setCreatorFields, async, errors } from '@strapi/utils';\n\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { getService } from '../utils';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { getPopulateForLocalizations } from '../services/utils/populate';\n\ntype OptionsWithPopulate = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\nconst buildPopulateFromQuery = async (query: any, model: any) => {\n return getService('populate-builder')(model)\n .populateFromQuery(query)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n};\n\nconst findDocument = async (query: any, uid: UID.SingleType, opts: any = {}) => {\n const documentManager = getService('document-manager');\n const populate = await buildPopulateFromQuery(query, uid);\n\n return (\n documentManager\n .findMany({ ...opts, populate }, uid)\n // Return the first document found\n .then((documents: any) => documents[0])\n );\n};\n\nconst createOrUpdateDocument = async (ctx: any, opts?: OptionsWithPopulate) => {\n const { user, userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create() && permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query);\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, otherDocumentVersion] = await Promise.all([\n findDocument(sanitizedQuery, model, { locale, status: 'draft' }),\n // Find the first document to check if it exists\n strapi.db.query(model).findOne({ select: ['documentId'] }),\n ]);\n\n const documentId = otherDocumentVersion?.documentId;\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedBody = await sanitizeFn(body);\n\n if (!documentId) {\n return documentManager.create(model, {\n data: sanitizedBody,\n ...sanitizedQuery,\n locale,\n });\n }\n\n return documentManager.update(documentId, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n const version = await findDocument(permissionQuery, model, { locale, status });\n\n // allow user with create permission to know a single type is not created\n if (!version) {\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n // Check if document exists\n const document = await strapi.db.query(model).findOne({});\n\n if (!document) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error - fix types\n { documentId: document.documentId, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n ctx.body = { data: {}, meta };\n return;\n }\n\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async createOrUpdate(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const document = await createOrUpdateDocument(ctx);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n const documentLocales = await documentManager.findLocales(undefined, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const deletedEntity = await documentManager.delete(documentLocales.at(0).documentId, model, {\n locale,\n });\n\n ctx.body = await permissionChecker.sanitizeOutput(deletedEntity);\n },\n\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Find the existing document\n let document = await findDocument(sanitizedQuery, model, { locale, status: 'draft' });\n\n // If document exists and user can update it, update it before publishing\n const shouldUpdate = document && permissionChecker.can.update(document);\n // If document doesn't exist and user can create it, create it before publishing\n const shouldCreate = !document && permissionChecker.can.create();\n if (shouldUpdate || shouldCreate) {\n document = await createOrUpdateDocument(ctx, { populate });\n } else if (!document) {\n // Document doesn't exist and user can't create it\n throw new errors.ForbiddenError();\n }\n\n // If document doesn't exist, throw an error\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, { locale });\n\n return publishResult.at(0);\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n query = {},\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.unpublish(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.discard(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale, status: 'published' });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const document = await findDocument({}, model, { locale });\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(document)) {\n return ctx.forbidden();\n }\n\n const number = await documentManager.countDraftRelations(document.documentId, model, locale);\n\n return {\n data: number,\n };\n },\n};\n"],"names":["buildPopulateFromQuery","query","model","getService","populateFromQuery","populateDeep","Infinity","countRelations","withPopulateOverride","getPopulateForLocalizations","build","findDocument","uid","opts","documentManager","populate","findMany","then","documents","createOrUpdateDocument","ctx","user","userAbility","state","params","body","request","permissionChecker","create","cannot","update","errors","ForbiddenError","sanitizedQuery","locale","getDocumentLocaleAndStatus","documentVersion","otherDocumentVersion","Promise","all","status","strapi","db","findOne","select","documentId","pickPermittedFields","sanitizeUpdateInput","sanitizeCreateInput","setCreator","setCreatorFields","isEdition","sanitizeFn","async","pipe","sanitizedBody","data","find","read","forbidden","permissionQuery","version","document","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","sanitizeOutput","createOrUpdate","delete","documentLocales","findLocales","undefined","length","deletedEntity","at","publish","publishedDocument","transaction","shouldUpdate","can","shouldCreate","NotFoundError","publishResult","unpublish","discardDraft","discard","countDraftRelations","number"],"mappings":"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"}
1
+ {"version":3,"file":"single-types.js","sources":["../../../server/src/controllers/single-types.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { setCreatorFields, async, errors } from '@strapi/utils';\n\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { getService } from '../utils';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { getPopulateForLocalizations } from '../services/utils/populate';\n\ntype OptionsWithPopulate = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\nconst buildPopulateFromQuery = async (query: any, model: any) => {\n return getService('populate-builder')(model)\n .populateFromQuery(query)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n};\n\nconst findDocument = async (query: any, uid: UID.SingleType, opts: any = {}) => {\n const documentManager = getService('document-manager');\n const populate = await buildPopulateFromQuery(query, uid);\n\n return (\n documentManager\n .findMany({ ...opts, populate }, uid)\n // Return the first document found\n .then((documents: any) => documents[0])\n );\n};\n\nconst createOrUpdateDocument = async (ctx: any, opts?: OptionsWithPopulate) => {\n const { user, userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create() && permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query);\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, otherDocumentVersion] = await Promise.all([\n findDocument(sanitizedQuery, model, { locale, status: 'draft' }),\n // Find the first document to check if it exists\n strapi.db.query(model).findOne({ select: ['documentId'] }),\n ]);\n\n const documentId = otherDocumentVersion?.documentId;\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedBody = await sanitizeFn(body);\n\n if (!documentId) {\n return documentManager.create(model, {\n data: sanitizedBody,\n ...sanitizedQuery,\n locale,\n });\n }\n\n return documentManager.update(documentId, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n const version = await findDocument(permissionQuery, model, { locale, status });\n\n // allow user with create permission to know a single type is not created\n if (!version) {\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n // Check if document exists\n const document = await strapi.db.query(model).findOne({});\n\n if (!document) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error - fix types\n { documentId: document.documentId, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n ctx.body = { data: {}, meta };\n return;\n }\n\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async createOrUpdate(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const document = await createOrUpdateDocument(ctx);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n const documentLocales = await documentManager.findLocales(undefined, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const deletedEntity = await documentManager.delete(documentLocales.at(0).documentId, model, {\n locale,\n });\n\n ctx.body = await permissionChecker.sanitizeOutput(deletedEntity);\n },\n\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Find the existing document\n let document = await findDocument(sanitizedQuery, model, { locale, status: 'draft' });\n\n // If document exists and user can update it, update it before publishing\n const shouldUpdate = document && permissionChecker.can.update(document);\n // If document doesn't exist and user can create it, create it before publishing\n const shouldCreate = !document && permissionChecker.can.create();\n if (shouldUpdate || shouldCreate) {\n document = await createOrUpdateDocument(ctx, { populate });\n } else if (!document) {\n // Document doesn't exist and user can't create it\n throw new errors.ForbiddenError();\n }\n\n // If document doesn't exist, throw an error\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, { locale });\n\n return publishResult.at(0);\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n query = {},\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.unpublish(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.discard(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale, status: 'published' });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const document = await findDocument({}, model, { locale });\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(document)) {\n return ctx.forbidden();\n }\n\n const counts = await documentManager.countDraftRelations(document.documentId, model, locale);\n\n return {\n data: counts,\n };\n },\n};\n"],"names":["buildPopulateFromQuery","query","model","getService","populateFromQuery","populateDeep","Infinity","countRelations","withPopulateOverride","getPopulateForLocalizations","build","findDocument","uid","opts","documentManager","populate","findMany","then","documents","createOrUpdateDocument","ctx","user","userAbility","state","params","body","request","permissionChecker","create","cannot","update","errors","ForbiddenError","sanitizedQuery","locale","getDocumentLocaleAndStatus","documentVersion","otherDocumentVersion","Promise","all","status","strapi","db","findOne","select","documentId","pickPermittedFields","sanitizeUpdateInput","sanitizeCreateInput","setCreator","setCreatorFields","isEdition","sanitizeFn","async","pipe","sanitizedBody","data","find","read","forbidden","permissionQuery","version","document","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","sanitizeOutput","createOrUpdate","delete","documentLocales","findLocales","undefined","length","deletedEntity","at","publish","publishedDocument","transaction","shouldUpdate","can","shouldCreate","NotFoundError","publishResult","unpublish","discardDraft","discard","countDraftRelations","counts"],"mappings":";;;;;;;;AAUA,MAAMA,sBAAAA,GAAyB,OAAOC,KAAAA,EAAYC,KAAAA,GAAAA;AAChD,IAAA,OAAOC,gBAAAA,CAAW,kBAAA,CAAA,CAAoBD,KAAAA,CAAAA,CACnCE,iBAAiB,CAACH,KAAAA,CAAAA,CAClBI,YAAY,CAACC,QAAAA,CAAAA,CACbC,cAAc,EAAA,CACdC,oBAAoB,CAACC,oCAAAA,CAA4BP,QACjDQ,KAAK,EAAA;AACV,CAAA;AAEA,MAAMC,eAAe,OAAOV,KAAAA,EAAYW,GAAAA,EAAqBC,IAAAA,GAAY,EAAE,GAAA;AACzE,IAAA,MAAMC,kBAAkBX,gBAAAA,CAAW,kBAAA,CAAA;IACnC,MAAMY,QAAAA,GAAW,MAAMf,sBAAAA,CAAuBC,KAAAA,EAAOW,GAAAA,CAAAA;IAErD,OACEE,eAAAA,CACGE,QAAQ,CAAC;AAAE,QAAA,GAAGH,IAAI;AAAEE,QAAAA;AAAS,KAAA,EAAGH,IACjC;AACCK,KAAAA,IAAI,CAAC,CAACC,SAAAA,GAAmBA,SAAS,CAAC,CAAA,CAAE,CAAA;AAE5C,CAAA;AAEA,MAAMC,sBAAAA,GAAyB,OAAOC,GAAAA,EAAUP,IAAAA,GAAAA;AAC9C,IAAA,MAAM,EAAEQ,IAAI,EAAEC,WAAW,EAAE,GAAGF,IAAIG,KAAK;AACvC,IAAA,MAAM,EAAErB,KAAK,EAAE,GAAGkB,IAAII,MAAM;AAC5B,IAAA,MAAM,EAAEC,IAAI,EAAExB,KAAK,EAAE,GAAGmB,IAAIM,OAAO;AAEnC,IAAA,MAAMZ,kBAAkBX,gBAAAA,CAAW,kBAAA,CAAA;AACnC,IAAA,MAAMwB,iBAAAA,GAAoBxB,gBAAAA,CAAW,oBAAA,CAAA,CAAsByB,MAAM,CAAC;AAAEN,QAAAA,WAAAA;AAAapB,QAAAA;AAAM,KAAA,CAAA;IAEvF,IAAIyB,iBAAAA,CAAkBE,MAAM,CAACD,MAAM,MAAMD,iBAAAA,CAAkBE,MAAM,CAACC,MAAM,EAAA,EAAI;QAC1E,MAAM,IAAIC,mBAAOC,cAAc,EAAA;AACjC,IAAA;AAEA,IAAA,MAAMC,iBAAiB,MAAMN,iBAAAA,CAAkBM,cAAc,CAACH,MAAM,CAAC7B,KAAAA,CAAAA;AAErE,IAAA,MAAM,EAAEiC,MAAM,EAAE,GAAG,MAAMC,sCAA2BV,IAAAA,EAAMvB,KAAAA,CAAAA;;AAG1D,IAAA,MAAM,CAACkC,eAAAA,EAAiBC,oBAAAA,CAAqB,GAAG,MAAMC,OAAAA,CAAQC,GAAG,CAAC;AAChE5B,QAAAA,YAAAA,CAAasB,gBAAgB/B,KAAAA,EAAO;AAAEgC,YAAAA,MAAAA;YAAQM,MAAAA,EAAQ;AAAQ,SAAA,CAAA;;AAE9DC,QAAAA,MAAAA,CAAOC,EAAE,CAACzC,KAAK,CAACC,KAAAA,CAAAA,CAAOyC,OAAO,CAAC;YAAEC,MAAAA,EAAQ;AAAC,gBAAA;AAAa;AAAC,SAAA;AACzD,KAAA,CAAA;AAED,IAAA,MAAMC,aAAaR,oBAAAA,EAAsBQ,UAAAA;AAEzC,IAAA,MAAMC,sBAAsBV,eAAAA,GACxBT,iBAAAA,CAAkBoB,mBAAmB,CAACX,eAAAA,CAAAA,GACtCT,kBAAkBqB,mBAAmB;IAEzC,MAAMC,UAAAA,GAAab,kBACfc,4BAAAA,CAAiB;AAAE7B,QAAAA,IAAAA;QAAM8B,SAAAA,EAAW;AAAK,KAAA,CAAA,GACzCD,4BAAAA,CAAiB;AAAE7B,QAAAA;AAAK,KAAA,CAAA;AAE5B,IAAA,MAAM+B,UAAAA,GAAaC,iBAAAA,CAAMC,IAAI,CAACR,mBAAAA,EAAqBG,UAAAA,CAAAA;;;AAInD,IAAA,IAAIb,eAAAA,EAAiB;AACnB,QAAA,IAAIT,iBAAAA,CAAkBE,MAAM,CAACC,MAAM,CAACM,eAAAA,CAAAA,EAAkB;YACpD,MAAM,IAAIL,mBAAOC,cAAc,EAAA;AACjC,QAAA;AACF,IAAA,CAAA,MAAO,IAAIL,iBAAAA,CAAkBE,MAAM,CAACD,MAAM,EAAA,EAAI;QAC5C,MAAM,IAAIG,mBAAOC,cAAc,EAAA;AACjC,IAAA;IAEA,MAAMuB,aAAAA,GAAgB,MAAMH,UAAAA,CAAW3B,IAAAA,CAAAA;AAEvC,IAAA,IAAI,CAACoB,UAAAA,EAAY;QACf,OAAO/B,eAAAA,CAAgBc,MAAM,CAAC1B,KAAAA,EAAO;YACnCsD,IAAAA,EAAMD,aAAAA;AACN,YAAA,GAAGtB,cAAc;AACjBC,YAAAA;AACF,SAAA,CAAA;AACF,IAAA;AAEA,IAAA,OAAOpB,eAAAA,CAAgBgB,MAAM,CAACe,UAAAA,EAAY3C,KAAAA,EAAO;QAC/CsD,IAAAA,EAAMD,aAAAA;AACNxC,QAAAA,QAAAA,EAAUF,IAAAA,EAAME,QAAAA;AAChBmB,QAAAA;AACF,KAAA,CAAA;AACF,CAAA;AAEA,kBAAe;AACb,IAAA,MAAMuB,MAAKrC,GAAQ,EAAA;AACjB,QAAA,MAAM,EAAEE,WAAW,EAAE,GAAGF,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAErB,KAAK,EAAE,GAAGkB,IAAII,MAAM;AAC5B,QAAA,MAAM,EAAEvB,KAAAA,GAAQ,EAAE,EAAE,GAAGmB,IAAIM,OAAO;AAElC,QAAA,MAAMC,iBAAAA,GAAoBxB,gBAAAA,CAAW,oBAAA,CAAA,CAAsByB,MAAM,CAAC;AAAEN,YAAAA,WAAAA;AAAapB,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIyB,iBAAAA,CAAkBE,MAAM,CAAC6B,IAAI,EAAA,EAAI;AACnC,YAAA,OAAOtC,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAMC,kBAAkB,MAAMjC,iBAAAA,CAAkBM,cAAc,CAACyB,IAAI,CAACzD,KAAAA,CAAAA;QACpE,MAAM,EAAEiC,MAAM,EAAEM,MAAM,EAAE,GAAG,MAAML,sCAA2BlC,KAAAA,EAAOC,KAAAA,CAAAA;AAEnE,QAAA,MAAM2D,OAAAA,GAAU,MAAMlD,YAAAA,CAAaiD,eAAAA,EAAiB1D,KAAAA,EAAO;AAAEgC,YAAAA,MAAAA;AAAQM,YAAAA;AAAO,SAAA,CAAA;;AAG5E,QAAA,IAAI,CAACqB,OAAAA,EAAS;AACZ,YAAA,IAAIlC,iBAAAA,CAAkBE,MAAM,CAACD,MAAM,EAAA,EAAI;AACrC,gBAAA,OAAOR,IAAIuC,SAAS,EAAA;AACtB,YAAA;;YAEA,MAAMG,QAAAA,GAAW,MAAMrB,MAAAA,CAAOC,EAAE,CAACzC,KAAK,CAACC,KAAAA,CAAAA,CAAOyC,OAAO,CAAC,EAAC,CAAA;AAEvD,YAAA,IAAI,CAACmB,QAAAA,EAAU;AACb,gBAAA,OAAO1C,IAAI2C,QAAQ,EAAA;AACrB,YAAA;;YAGA,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAMC,mCAAAA,CACrBtC,iBAAAA,EACAzB;AAEA,YAAA;AAAE2C,gBAAAA,UAAAA,EAAYiB,SAASjB,UAAU;AAAEX,gBAAAA,MAAAA;gBAAQgC,WAAAA,EAAa;aAAK,EAC7D;gBAAEC,gBAAAA,EAAkB,IAAA;gBAAMC,eAAAA,EAAiB;AAAM,aAAA,CAAA;AAEnDhD,YAAAA,GAAAA,CAAIK,IAAI,GAAG;AAAE+B,gBAAAA,IAAAA,EAAM,EAAC;AAAGQ,gBAAAA;AAAK,aAAA;AAC5B,YAAA;AACF,QAAA;AAEA,QAAA,IAAIrC,iBAAAA,CAAkBE,MAAM,CAAC6B,IAAI,CAACG,OAAAA,CAAAA,EAAU;AAC1C,YAAA,OAAOzC,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAMU,iBAAAA,GAAoB,MAAM1C,iBAAAA,CAAkB2C,cAAc,CAACT,OAAAA,CAAAA;AACjEzC,QAAAA,GAAAA,CAAIK,IAAI,GAAG,MAAMwC,mCAAAA,CAA2BtC,mBAAmBzB,KAAAA,EAAOmE,iBAAAA,CAAAA;AACxE,IAAA,CAAA;AAEA,IAAA,MAAME,gBAAenD,GAAQ,EAAA;AAC3B,QAAA,MAAM,EAAEE,WAAW,EAAE,GAAGF,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAErB,KAAK,EAAE,GAAGkB,IAAII,MAAM;AAE5B,QAAA,MAAMG,iBAAAA,GAAoBxB,gBAAAA,CAAW,oBAAA,CAAA,CAAsByB,MAAM,CAAC;AAAEN,YAAAA,WAAAA;AAAapB,YAAAA;AAAM,SAAA,CAAA;QAEvF,MAAM4D,QAAAA,GAAW,MAAM3C,sBAAAA,CAAuBC,GAAAA,CAAAA;AAE9C,QAAA,MAAMiD,iBAAAA,GAAoB,MAAM1C,iBAAAA,CAAkB2C,cAAc,CAACR,QAAAA,CAAAA;AACjE1C,QAAAA,GAAAA,CAAIK,IAAI,GAAG,MAAMwC,mCAAAA,CAA2BtC,mBAAmBzB,KAAAA,EAAOmE,iBAAAA,CAAAA;AACxE,IAAA,CAAA;AAEA,IAAA,MAAMG,QAAOpD,GAAQ,EAAA;AACnB,QAAA,MAAM,EAAEE,WAAW,EAAE,GAAGF,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAErB,KAAK,EAAE,GAAGkB,IAAII,MAAM;AAC5B,QAAA,MAAM,EAAEvB,KAAAA,GAAQ,EAAE,EAAE,GAAGmB,IAAIM,OAAO;AAElC,QAAA,MAAMZ,kBAAkBX,gBAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMwB,iBAAAA,GAAoBxB,gBAAAA,CAAW,oBAAA,CAAA,CAAsByB,MAAM,CAAC;AAAEN,YAAAA,WAAAA;AAAapB,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIyB,iBAAAA,CAAkBE,MAAM,CAAC2C,MAAM,EAAA,EAAI;AACrC,YAAA,OAAOpD,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAM1B,iBAAiB,MAAMN,iBAAAA,CAAkBM,cAAc,CAACuC,MAAM,CAACvE,KAAAA,CAAAA;QACrE,MAAMc,QAAAA,GAAW,MAAMf,sBAAAA,CAAuBiC,cAAAA,EAAgB/B,KAAAA,CAAAA;AAE9D,QAAA,MAAM,EAAEgC,MAAM,EAAE,GAAG,MAAMC,sCAA2BlC,KAAAA,EAAOC,KAAAA,CAAAA;AAC3D,QAAA,MAAMuE,kBAAkB,MAAM3D,eAAAA,CAAgB4D,WAAW,CAACC,WAAWzE,KAAAA,EAAO;AAC1Ea,YAAAA,QAAAA;AACAmB,YAAAA;AACF,SAAA,CAAA;QAEA,IAAIuC,eAAAA,CAAgBG,MAAM,KAAK,CAAA,EAAG;AAChC,YAAA,OAAOxD,IAAI2C,QAAQ,EAAA;AACrB,QAAA;QAEA,KAAK,MAAMD,YAAYW,eAAAA,CAAiB;AACtC,YAAA,IAAI9C,iBAAAA,CAAkBE,MAAM,CAAC2C,MAAM,CAACV,QAAAA,CAAAA,EAAW;AAC7C,gBAAA,OAAO1C,IAAIuC,SAAS,EAAA;AACtB,YAAA;AACF,QAAA;QAEA,MAAMkB,aAAAA,GAAgB,MAAM/D,eAAAA,CAAgB0D,MAAM,CAACC,eAAAA,CAAgBK,EAAE,CAAC,CAAA,CAAA,CAAGjC,UAAU,EAAE3C,KAAAA,EAAO;AAC1FgC,YAAAA;AACF,SAAA,CAAA;AAEAd,QAAAA,GAAAA,CAAIK,IAAI,GAAG,MAAME,iBAAAA,CAAkB2C,cAAc,CAACO,aAAAA,CAAAA;AACpD,IAAA,CAAA;AAEA,IAAA,MAAME,SAAQ3D,GAAQ,EAAA;AACpB,QAAA,MAAM,EAAEE,WAAW,EAAE,GAAGF,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAErB,KAAK,EAAE,GAAGkB,IAAII,MAAM;QAC5B,MAAM,EAAEC,IAAI,EAAExB,KAAAA,GAAQ,EAAE,EAAE,GAAGmB,GAAAA,CAAIM,OAAO;AAExC,QAAA,MAAMZ,kBAAkBX,gBAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMwB,iBAAAA,GAAoBxB,gBAAAA,CAAW,oBAAA,CAAA,CAAsByB,MAAM,CAAC;AAAEN,YAAAA,WAAAA;AAAapB,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIyB,iBAAAA,CAAkBE,MAAM,CAACkD,OAAO,EAAA,EAAI;AACtC,YAAA,OAAO3D,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAMqB,oBAAoB,MAAMvC,MAAAA,CAAOC,EAAE,CAACuC,WAAW,CAAC,UAAA;AACpD,YAAA,MAAMhD,iBAAiB,MAAMN,iBAAAA,CAAkBM,cAAc,CAAC8C,OAAO,CAAC9E,KAAAA,CAAAA;YACtE,MAAMc,QAAAA,GAAW,MAAMf,sBAAAA,CAAuBiC,cAAAA,EAAgB/B,KAAAA,CAAAA;AAC9D,YAAA,MAAM,EAAEgC,MAAM,EAAE,GAAG,MAAMC,sCAA2BV,IAAAA,EAAMvB,KAAAA,CAAAA;;AAG1D,YAAA,IAAI4D,QAAAA,GAAW,MAAMnD,YAAAA,CAAasB,cAAAA,EAAgB/B,KAAAA,EAAO;AAAEgC,gBAAAA,MAAAA;gBAAQM,MAAAA,EAAQ;AAAQ,aAAA,CAAA;;AAGnF,YAAA,MAAM0C,eAAepB,QAAAA,IAAYnC,iBAAAA,CAAkBwD,GAAG,CAACrD,MAAM,CAACgC,QAAAA,CAAAA;;AAE9D,YAAA,MAAMsB,eAAe,CAACtB,QAAAA,IAAYnC,iBAAAA,CAAkBwD,GAAG,CAACvD,MAAM,EAAA;AAC9D,YAAA,IAAIsD,gBAAgBE,YAAAA,EAAc;gBAChCtB,QAAAA,GAAW,MAAM3C,uBAAuBC,GAAAA,EAAK;AAAEL,oBAAAA;AAAS,iBAAA,CAAA;YAC1D,CAAA,MAAO,IAAI,CAAC+C,QAAAA,EAAU;;gBAEpB,MAAM,IAAI/B,mBAAOC,cAAc,EAAA;AACjC,YAAA;;AAGA,YAAA,IAAI,CAAC8B,QAAAA,EAAU;gBACb,MAAM,IAAI/B,mBAAOsD,aAAa,EAAA;AAChC,YAAA;AAEA,YAAA,IAAI1D,iBAAAA,CAAkBE,MAAM,CAACkD,OAAO,CAACjB,QAAAA,CAAAA,EAAW;gBAC9C,MAAM,IAAI/B,mBAAOC,cAAc,EAAA;AACjC,YAAA;YAEA,MAAMsD,aAAAA,GAAgB,MAAMxE,eAAAA,CAAgBiE,OAAO,CAACjB,QAAAA,CAASjB,UAAU,EAAE3C,KAAAA,EAAO;AAAEgC,gBAAAA;AAAO,aAAA,CAAA;YAEzF,OAAOoD,aAAAA,CAAcR,EAAE,CAAC,CAAA,CAAA;AAC1B,QAAA,CAAA,CAAA;AAEA,QAAA,MAAMT,iBAAAA,GAAoB,MAAM1C,iBAAAA,CAAkB2C,cAAc,CAACU,iBAAAA,CAAAA;AACjE5D,QAAAA,GAAAA,CAAIK,IAAI,GAAG,MAAMwC,mCAAAA,CAA2BtC,mBAAmBzB,KAAAA,EAAOmE,iBAAAA,CAAAA;AACxE,IAAA,CAAA;AAEA,IAAA,MAAMkB,WAAUnE,GAAQ,EAAA;AACtB,QAAA,MAAM,EAAEE,WAAW,EAAE,GAAGF,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAErB,KAAK,EAAE,GAAGkB,IAAII,MAAM;AAC5B,QAAA,MAAM,EACJC,IAAAA,EAAM,EAAE+D,YAAY,EAAE,GAAG/D,IAAAA,EAAM,EAC/BxB,KAAAA,GAAQ,EAAE,EACX,GAAGmB,IAAIM,OAAO;AAEf,QAAA,MAAMZ,kBAAkBX,gBAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMwB,iBAAAA,GAAoBxB,gBAAAA,CAAW,oBAAA,CAAA,CAAsByB,MAAM,CAAC;AAAEN,YAAAA,WAAAA;AAAapB,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIyB,iBAAAA,CAAkBE,MAAM,CAAC0D,SAAS,EAAA,EAAI;AACxC,YAAA,OAAOnE,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,IAAI6B,YAAAA,IAAgB7D,iBAAAA,CAAkBE,MAAM,CAAC4D,OAAO,EAAA,EAAI;AACtD,YAAA,OAAOrE,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAM1B,iBAAiB,MAAMN,iBAAAA,CAAkBM,cAAc,CAACsD,SAAS,CAACtF,KAAAA,CAAAA;AACxE,QAAA,MAAM,EAAEiC,MAAM,EAAE,GAAG,MAAMC,sCAA2BV,IAAAA,EAAMvB,KAAAA,CAAAA;AAE1D,QAAA,MAAM4D,QAAAA,GAAW,MAAMnD,YAAAA,CAAasB,cAAAA,EAAgB/B,KAAAA,EAAO;AAAEgC,YAAAA;AAAO,SAAA,CAAA;AAEpE,QAAA,IAAI,CAAC4B,QAAAA,EAAU;AACb,YAAA,OAAO1C,IAAI2C,QAAQ,EAAA;AACrB,QAAA;AAEA,QAAA,IAAIpC,iBAAAA,CAAkBE,MAAM,CAAC0D,SAAS,CAACzB,QAAAA,CAAAA,EAAW;AAChD,YAAA,OAAO1C,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,IAAI6B,gBAAgB7D,iBAAAA,CAAkBE,MAAM,CAAC4D,OAAO,CAAC3B,QAAAA,CAAAA,EAAW;AAC9D,YAAA,OAAO1C,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAMlB,MAAAA,CAAOC,EAAE,CAACuC,WAAW,CAAC,UAAA;AAC1B,YAAA,IAAIO,YAAAA,EAAc;AAChB,gBAAA,MAAM1E,gBAAgB0E,YAAY,CAAC1B,QAAAA,CAASjB,UAAU,EAAE3C,KAAAA,EAAO;AAAEgC,oBAAAA;AAAO,iBAAA,CAAA;AAC1E,YAAA;AAEAd,YAAAA,GAAAA,CAAIK,IAAI,GAAG,MAAM4B,iBAAAA,CAAMC,IAAI,CACzB,CAACQ,QAAAA,GAAahD,eAAAA,CAAgByE,SAAS,CAACzB,QAAAA,CAASjB,UAAU,EAAE3C,KAAAA,EAAO;AAAEgC,oBAAAA;iBAAO,CAAA,EAC7EP,iBAAAA,CAAkB2C,cAAc,EAChC,CAACR,WAAaG,mCAAAA,CAA2BtC,iBAAAA,EAAmBzB,OAAO4D,QAAAA,CAAAA,CAAAA,CACnEA,QAAAA,CAAAA;AACJ,QAAA,CAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAM2B,SAAQrE,GAAQ,EAAA;AACpB,QAAA,MAAM,EAAEE,WAAW,EAAE,GAAGF,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAErB,KAAK,EAAE,GAAGkB,IAAII,MAAM;QAC5B,MAAM,EAAEC,IAAI,EAAExB,KAAAA,GAAQ,EAAE,EAAE,GAAGmB,GAAAA,CAAIM,OAAO;AAExC,QAAA,MAAMZ,kBAAkBX,gBAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMwB,iBAAAA,GAAoBxB,gBAAAA,CAAW,oBAAA,CAAA,CAAsByB,MAAM,CAAC;AAAEN,YAAAA,WAAAA;AAAapB,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,IAAIyB,iBAAAA,CAAkBE,MAAM,CAAC4D,OAAO,EAAA,EAAI;AACtC,YAAA,OAAOrE,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAM1B,iBAAiB,MAAMN,iBAAAA,CAAkBM,cAAc,CAACwD,OAAO,CAACxF,KAAAA,CAAAA;AACtE,QAAA,MAAM,EAAEiC,MAAM,EAAE,GAAG,MAAMC,sCAA2BV,IAAAA,EAAMvB,KAAAA,CAAAA;AAE1D,QAAA,MAAM4D,QAAAA,GAAW,MAAMnD,YAAAA,CAAasB,cAAAA,EAAgB/B,KAAAA,EAAO;AAAEgC,YAAAA,MAAAA;YAAQM,MAAAA,EAAQ;AAAY,SAAA,CAAA;;AAGzF,QAAA,IAAI,CAACsB,QAAAA,EAAU;AACb,YAAA,OAAO1C,IAAI2C,QAAQ,EAAA;AACrB,QAAA;AAEA,QAAA,IAAIpC,iBAAAA,CAAkBE,MAAM,CAAC4D,OAAO,CAAC3B,QAAAA,CAAAA,EAAW;AAC9C,YAAA,OAAO1C,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEAvC,QAAAA,GAAAA,CAAIK,IAAI,GAAG,MAAM4B,iBAAAA,CAAMC,IAAI,CACzB,CAACQ,QAAAA,GAAahD,eAAAA,CAAgB0E,YAAY,CAAC1B,QAAAA,CAASjB,UAAU,EAAE3C,KAAAA,EAAO;AAAEgC,gBAAAA;aAAO,CAAA,EAChFP,iBAAAA,CAAkB2C,cAAc,EAChC,CAACR,WAAaG,mCAAAA,CAA2BtC,iBAAAA,EAAmBzB,OAAO4D,QAAAA,CAAAA,CAAAA,CACnEA,QAAAA,CAAAA;AACJ,IAAA,CAAA;AAEA,IAAA,MAAM4B,qBAAoBtE,GAAQ,EAAA;AAChC,QAAA,MAAM,EAAEE,WAAW,EAAE,GAAGF,IAAIG,KAAK;AACjC,QAAA,MAAM,EAAErB,KAAK,EAAE,GAAGkB,IAAII,MAAM;AAC5B,QAAA,MAAM,EAAEvB,KAAK,EAAE,GAAGmB,IAAIM,OAAO;AAC7B,QAAA,MAAMZ,kBAAkBX,gBAAAA,CAAW,kBAAA,CAAA;AACnC,QAAA,MAAMwB,iBAAAA,GAAoBxB,gBAAAA,CAAW,oBAAA,CAAA,CAAsByB,MAAM,CAAC;AAAEN,YAAAA,WAAAA;AAAapB,YAAAA;AAAM,SAAA,CAAA;AAEvF,QAAA,MAAM,EAAEgC,MAAM,EAAE,GAAG,MAAMC,sCAA2BlC,KAAAA,EAAOC,KAAAA,CAAAA;AAE3D,QAAA,IAAIyB,iBAAAA,CAAkBE,MAAM,CAAC6B,IAAI,EAAA,EAAI;AACnC,YAAA,OAAOtC,IAAIuC,SAAS,EAAA;AACtB,QAAA;AAEA,QAAA,MAAMG,QAAAA,GAAW,MAAMnD,YAAAA,CAAa,IAAIT,KAAAA,EAAO;AAAEgC,YAAAA;AAAO,SAAA,CAAA;AACxD,QAAA,IAAI,CAAC4B,QAAAA,EAAU;AACb,YAAA,OAAO1C,IAAI2C,QAAQ,EAAA;AACrB,QAAA;AAEA,QAAA,IAAIpC,iBAAAA,CAAkBE,MAAM,CAAC6B,IAAI,CAACI,QAAAA,CAAAA,EAAW;AAC3C,YAAA,OAAO1C,IAAIuC,SAAS,EAAA;AACtB,QAAA;QAEA,MAAMgC,MAAAA,GAAS,MAAM7E,eAAAA,CAAgB4E,mBAAmB,CAAC5B,QAAAA,CAASjB,UAAU,EAAE3C,KAAAA,EAAOgC,MAAAA,CAAAA;QAErF,OAAO;YACLsB,IAAAA,EAAMmC;AACR,SAAA;AACF,IAAA;AACF,CAAA;;;;"}
@@ -307,9 +307,9 @@ var singleTypes = {
307
307
  if (permissionChecker.cannot.read(document)) {
308
308
  return ctx.forbidden();
309
309
  }
310
- const number = await documentManager.countDraftRelations(document.documentId, model, locale);
310
+ const counts = await documentManager.countDraftRelations(document.documentId, model, locale);
311
311
  return {
312
- data: number
312
+ data: counts
313
313
  };
314
314
  }
315
315
  };
@@ -1 +1 @@
1
- {"version":3,"file":"single-types.mjs","sources":["../../../server/src/controllers/single-types.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { setCreatorFields, async, errors } from '@strapi/utils';\n\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { getService } from '../utils';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { getPopulateForLocalizations } from '../services/utils/populate';\n\ntype OptionsWithPopulate = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\nconst buildPopulateFromQuery = async (query: any, model: any) => {\n return getService('populate-builder')(model)\n .populateFromQuery(query)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n};\n\nconst findDocument = async (query: any, uid: UID.SingleType, opts: any = {}) => {\n const documentManager = getService('document-manager');\n const populate = await buildPopulateFromQuery(query, uid);\n\n return (\n documentManager\n .findMany({ ...opts, populate }, uid)\n // Return the first document found\n .then((documents: any) => documents[0])\n );\n};\n\nconst createOrUpdateDocument = async (ctx: any, opts?: OptionsWithPopulate) => {\n const { user, userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create() && permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query);\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, otherDocumentVersion] = await Promise.all([\n findDocument(sanitizedQuery, model, { locale, status: 'draft' }),\n // Find the first document to check if it exists\n strapi.db.query(model).findOne({ select: ['documentId'] }),\n ]);\n\n const documentId = otherDocumentVersion?.documentId;\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedBody = await sanitizeFn(body);\n\n if (!documentId) {\n return documentManager.create(model, {\n data: sanitizedBody,\n ...sanitizedQuery,\n locale,\n });\n }\n\n return documentManager.update(documentId, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n const version = await findDocument(permissionQuery, model, { locale, status });\n\n // allow user with create permission to know a single type is not created\n if (!version) {\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n // Check if document exists\n const document = await strapi.db.query(model).findOne({});\n\n if (!document) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error - fix types\n { documentId: document.documentId, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n ctx.body = { data: {}, meta };\n return;\n }\n\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async createOrUpdate(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const document = await createOrUpdateDocument(ctx);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n const documentLocales = await documentManager.findLocales(undefined, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const deletedEntity = await documentManager.delete(documentLocales.at(0).documentId, model, {\n locale,\n });\n\n ctx.body = await permissionChecker.sanitizeOutput(deletedEntity);\n },\n\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Find the existing document\n let document = await findDocument(sanitizedQuery, model, { locale, status: 'draft' });\n\n // If document exists and user can update it, update it before publishing\n const shouldUpdate = document && permissionChecker.can.update(document);\n // If document doesn't exist and user can create it, create it before publishing\n const shouldCreate = !document && permissionChecker.can.create();\n if (shouldUpdate || shouldCreate) {\n document = await createOrUpdateDocument(ctx, { populate });\n } else if (!document) {\n // Document doesn't exist and user can't create it\n throw new errors.ForbiddenError();\n }\n\n // If document doesn't exist, throw an error\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, { locale });\n\n return publishResult.at(0);\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n query = {},\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.unpublish(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.discard(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale, status: 'published' });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const document = await findDocument({}, model, { locale });\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(document)) {\n return ctx.forbidden();\n }\n\n const number = await documentManager.countDraftRelations(document.documentId, model, locale);\n\n return {\n data: number,\n };\n },\n};\n"],"names":["buildPopulateFromQuery","query","model","getService","populateFromQuery","populateDeep","Infinity","countRelations","withPopulateOverride","getPopulateForLocalizations","build","findDocument","uid","opts","documentManager","populate","findMany","then","documents","createOrUpdateDocument","ctx","user","userAbility","state","params","body","request","permissionChecker","create","cannot","update","errors","ForbiddenError","sanitizedQuery","locale","getDocumentLocaleAndStatus","documentVersion","otherDocumentVersion","Promise","all","status","strapi","db","findOne","select","documentId","pickPermittedFields","sanitizeUpdateInput","sanitizeCreateInput","setCreator","setCreatorFields","isEdition","sanitizeFn","async","pipe","sanitizedBody","data","find","read","forbidden","permissionQuery","version","document","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","sanitizeOutput","createOrUpdate","delete","documentLocales","findLocales","undefined","length","deletedEntity","at","publish","publishedDocument","transaction","shouldUpdate","can","shouldCreate","NotFoundError","publishResult","unpublish","discardDraft","discard","countDraftRelations","number"],"mappings":"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"}
1
+ {"version":3,"file":"single-types.mjs","sources":["../../../server/src/controllers/single-types.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { setCreatorFields, async, errors } from '@strapi/utils';\n\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { getService } from '../utils';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { getPopulateForLocalizations } from '../services/utils/populate';\n\ntype OptionsWithPopulate = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\nconst buildPopulateFromQuery = async (query: any, model: any) => {\n return getService('populate-builder')(model)\n .populateFromQuery(query)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n};\n\nconst findDocument = async (query: any, uid: UID.SingleType, opts: any = {}) => {\n const documentManager = getService('document-manager');\n const populate = await buildPopulateFromQuery(query, uid);\n\n return (\n documentManager\n .findMany({ ...opts, populate }, uid)\n // Return the first document found\n .then((documents: any) => documents[0])\n );\n};\n\nconst createOrUpdateDocument = async (ctx: any, opts?: OptionsWithPopulate) => {\n const { user, userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create() && permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query);\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, otherDocumentVersion] = await Promise.all([\n findDocument(sanitizedQuery, model, { locale, status: 'draft' }),\n // Find the first document to check if it exists\n strapi.db.query(model).findOne({ select: ['documentId'] }),\n ]);\n\n const documentId = otherDocumentVersion?.documentId;\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedBody = await sanitizeFn(body);\n\n if (!documentId) {\n return documentManager.create(model, {\n data: sanitizedBody,\n ...sanitizedQuery,\n locale,\n });\n }\n\n return documentManager.update(documentId, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n const version = await findDocument(permissionQuery, model, { locale, status });\n\n // allow user with create permission to know a single type is not created\n if (!version) {\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n // Check if document exists\n const document = await strapi.db.query(model).findOne({});\n\n if (!document) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error - fix types\n { documentId: document.documentId, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n ctx.body = { data: {}, meta };\n return;\n }\n\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async createOrUpdate(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const document = await createOrUpdateDocument(ctx);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n const documentLocales = await documentManager.findLocales(undefined, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const deletedEntity = await documentManager.delete(documentLocales.at(0).documentId, model, {\n locale,\n });\n\n ctx.body = await permissionChecker.sanitizeOutput(deletedEntity);\n },\n\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Find the existing document\n let document = await findDocument(sanitizedQuery, model, { locale, status: 'draft' });\n\n // If document exists and user can update it, update it before publishing\n const shouldUpdate = document && permissionChecker.can.update(document);\n // If document doesn't exist and user can create it, create it before publishing\n const shouldCreate = !document && permissionChecker.can.create();\n if (shouldUpdate || shouldCreate) {\n document = await createOrUpdateDocument(ctx, { populate });\n } else if (!document) {\n // Document doesn't exist and user can't create it\n throw new errors.ForbiddenError();\n }\n\n // If document doesn't exist, throw an error\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, { locale });\n\n return publishResult.at(0);\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n query = {},\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.unpublish(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.discard(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale, status: 'published' });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const document = await findDocument({}, model, { locale });\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(document)) {\n return ctx.forbidden();\n }\n\n const counts = await documentManager.countDraftRelations(document.documentId, model, locale);\n\n return {\n data: counts,\n };\n },\n};\n"],"names":["buildPopulateFromQuery","query","model","getService","populateFromQuery","populateDeep","Infinity","countRelations","withPopulateOverride","getPopulateForLocalizations","build","findDocument","uid","opts","documentManager","populate","findMany","then","documents","createOrUpdateDocument","ctx","user","userAbility","state","params","body","request","permissionChecker","create","cannot","update","errors","ForbiddenError","sanitizedQuery","locale","getDocumentLocaleAndStatus","documentVersion","otherDocumentVersion","Promise","all","status","strapi","db","findOne","select","documentId","pickPermittedFields","sanitizeUpdateInput","sanitizeCreateInput","setCreator","setCreatorFields","isEdition","sanitizeFn","async","pipe","sanitizedBody","data","find","read","forbidden","permissionQuery","version","document","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","sanitizeOutput","createOrUpdate","delete","documentLocales","findLocales","undefined","length","deletedEntity","at","publish","publishedDocument","transaction","shouldUpdate","can","shouldCreate","NotFoundError","publishResult","unpublish","discardDraft","discard","countDraftRelations","counts"],"mappings":"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"}
@@ -23,7 +23,8 @@ const createSettingsSchema = (schema)=>{
23
23
  // should be reset when the type changes
24
24
  mainField: strapiUtils.yup.string().oneOf(validAttributes.concat('id')).default('id'),
25
25
  // should be reset when the type changes
26
- defaultSortBy: strapiUtils.yup.string().test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value)=>settings.isValidDefaultSort(schema, value)).default('id'),
26
+ defaultSortBy: strapiUtils.yup.string()// eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder
27
+ .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value)=>settings.isValidDefaultSort(schema, value)).default('id'),
27
28
  defaultSortOrder: strapiUtils.yup.string().oneOf([
28
29
  'ASC',
29
30
  'DESC'
@@ -67,6 +68,7 @@ const createMetadasSchema = (schema)=>{
67
68
  };
68
69
  const createArrayTest = ({ allowUndefined = false } = {})=>({
69
70
  name: 'isArray',
71
+ // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder
70
72
  message: '${path} is required and must be an array',
71
73
  test: (val)=>allowUndefined === true && val === undefined ? true : Array.isArray(val)
72
74
  });
@@ -1 +1 @@
1
- {"version":3,"file":"model-configuration.js","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n relationOpenMode: yup.string().oneOf(['modal', 'page', 'newTab']).default('modal'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","relationOpenMode","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":";;;;;;;AAKA;;AAEC,IACD,qCAAe,CAAA,CAACA,MAAAA,EAAaC,IAAAA,GAAO,EAAE,GACpCC,eAAAA,CACGC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLC,QAAAA,QAAAA,EAAUC,oBAAAA,CAAqBN,MAAAA,CAAAA,CAAQO,OAAO,CAAC,MAAMC,QAAQ,EAAA;AAC7DC,QAAAA,SAAAA,EAAWC,mBAAAA,CAAoBV,MAAAA,CAAAA,CAAQO,OAAO,CAAC,MAAMC,QAAQ,EAAA;AAC7DG,QAAAA,OAAAA,EAASC,oBAAoBZ,MAAAA,EAAQC,IAAAA,CAAAA,CAAMM,OAAO,CAAC,MAAMC,QAAQ,EAAA;QACjEK,OAAAA,EAASX,eAAAA,CAAIC,MAAM,EAAA,CAAGW,QAAQ;KAChC,CAAA,CACCC,SAAS,EAAC;AAEf,MAAMT,uBAAuB,CAACN,MAAAA,GAAAA;AAC5B,IAAA,MAAMgB,eAAAA,GAAkBC,MAAAA,CAAOC,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,GAAQC,qBAAAA,CAAWtB,MAAAA,EAAQqB,GAAAA,CAAAA,CAAAA;AAE1F,IAAA,OAAOnB,eAAAA,CACJC,MAAM,EAAA,CACNC,KAAK,CAAC;QACLmB,QAAAA,EAAUrB,eAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;QAChCC,UAAAA,EAAYxB,eAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;QAClCE,QAAAA,EAAUzB,eAAAA,CAAI0B,MAAM,EAAA,CAAGC,OAAO,EAAA,CAAGC,GAAG,CAAC,EAAA,CAAA,CAAIC,GAAG,CAAC,GAAA,CAAA,CAAKN,QAAQ,EAAA;QAC1DO,UAAAA,EAAY9B,eAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;;QAElCQ,SAAAA,EAAW/B,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAACnB,gBAAgBoB,MAAM,CAAC,IAAA,CAAA,CAAA,CAAO7B,OAAO,CAAC,IAAA,CAAA;;AAEpE8B,QAAAA,aAAAA,EAAenC,eAAAA,CACZgC,MAAM,EAAA,CACNI,IAAI,CAAC,yBAAA,EAA2B,uCAAA,EAAyC,OAAOC,KAAAA,GAC/EC,2BAAAA,CAAmBxC,MAAAA,EAAQuC,KAAAA,CAAAA,CAAAA,CAE5BhC,OAAO,CAAC,IAAA,CAAA;AACXkC,QAAAA,gBAAAA,EAAkBvC,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAAC,YAAA,KAAA;AAAO,YAAA;AAAO,SAAA,CAAA,CAAE5B,OAAO,CAAC,KAAA,CAAA;AAC9DmC,QAAAA,gBAAAA,EAAkBxC,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAAC,YAAA,OAAA;AAAS,YAAA,MAAA;AAAQ,YAAA;AAAS,SAAA,CAAA,CAAE5B,OAAO,CAAC,OAAA;AAC5E,KAAA,CAAA,CACCQ,SAAS,EAAA;AACd,CAAA;AAEA,MAAML,sBAAsB,CAACV,MAAAA,GAAAA;AAC3B,IAAA,OAAOE,eAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CACvBa,MAAAA,CAAOC,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEwB,MAAM,CAAC,CAACC,GAAAA,EAAUvB,GAAAA,GAAAA;AAC/CuB,QAAAA,GAAG,CAACvB,GAAAA,CAAI,GAAGnB,gBACRC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLyC,YAAAA,IAAAA,EAAM3C,eAAAA,CACHC,MAAM,EAAA,CACNC,KAAK,CAAC;AACL0C,gBAAAA,KAAAA,EAAO5C,gBAAIgC,MAAM,EAAA;gBACjBa,WAAAA,EAAa7C,eAAAA,CAAIgC,MAAM,EAAA,CAAG1B,QAAQ,EAAA;gBAClCwC,WAAAA,EAAa9C,eAAAA,CAAIgC,MAAM,EAAA,CAAG1B,QAAQ,EAAA;AAClCyC,gBAAAA,QAAAA,EAAU/C,gBAAIsB,OAAO,EAAA;AACrB0B,gBAAAA,OAAAA,EAAShD,gBAAIsB,OAAO,EAAA;gBACpBS,SAAAA,EAAW/B,eAAAA,CAAIiD,IAAI,CAAC,CAACZ,KAAAA,GAAAA;AACnB,oBAAA,IAAI,CAACA,KAAAA,EAAO;AACV,wBAAA,OAAOrC,gBAAIgC,MAAM,EAAA;AACnB,oBAAA;oBAEA,MAAMkB,YAAAA,GAAeC,gBAAAA,CAAW,eAAA,CAAA,CAAiBC,eAAe,CAC9DtD,OAAOmB,UAAU,CAACE,GAAAA,CAAI,CAACkC,WAAW,CAAA;AAGpC,oBAAA,IAAI,CAACH,YAAAA,EAAc;AACjB,wBAAA,OAAOlD,gBAAIgC,MAAM,EAAA;AACnB,oBAAA;AAEA,oBAAA,MAAMlB,eAAAA,GAAkBC,MAAAA,CAAOC,IAAI,CAACkC,YAAAA,CAAajC,UAAU,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,GACnEC,qBAAAA,CAAW8B,YAAAA,EAAc/B,GAAAA,CAAAA,CAAAA;oBAG3B,OAAOnB,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAACnB,gBAAgBoB,MAAM,CAAC,IAAA,CAAA,CAAA,CAAO7B,OAAO,CAAC,IAAA,CAAA;AAClE,gBAAA,CAAA;aACF,CAAA,CACCQ,SAAS,GACTU,QAAQ,EAAA;AACX+B,YAAAA,IAAAA,EAAMtD,eAAAA,CACHC,MAAM,EAAA,CACNC,KAAK,CAAC;AACL0C,gBAAAA,KAAAA,EAAO5C,gBAAIgC,MAAM,EAAA;AACjBF,gBAAAA,UAAAA,EAAY9B,gBAAIsB,OAAO,EAAA;AACvBiC,gBAAAA,QAAAA,EAAUvD,gBAAIsB,OAAO;aACvB,CAAA,CACCT,SAAS,GACTU,QAAQ;AACb,SAAA,CAAA,CACCV,SAAS,EAAA;QAEZ,OAAO6B,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA,CAAA;AAER,CAAA;AAEA,MAAMc,eAAAA,GAAkB,CAAC,EAAEC,cAAAA,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAM;QAC5DC,IAAAA,EAAM,SAAA;QACNC,OAAAA,EAAS,0CAAA;QACTvB,IAAAA,EAAM,CAACwB,MAAcH,cAAAA,KAAmB,IAAA,IAAQG,QAAQC,SAAAA,GAAY,IAAA,GAAOC,KAAAA,CAAMC,OAAO,CAACH,GAAAA;KAC3F,CAAA;AAEA,MAAMlD,mBAAAA,GAAsB,CAACZ,MAAAA,EAAaC,IAAAA,GAAO,EAAE,GAAA;AACjD,IAAA,MAAMe,eAAAA,GAAkBC,MAAAA,CAAOC,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,GAAQC,qBAAAA,CAAWtB,MAAAA,EAAQqB,GAAAA,CAAAA,CAAAA;AAE1F,IAAA,MAAM6C,cAAAA,GAAiBjD,MAAAA,CAAOC,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,GAC5D8C,+BAAAA,CAAqBnE,MAAAA,EAAQqB,GAAAA,CAAAA,CAAAA;AAG/B,IAAA,OAAOnB,eAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AACxByC,QAAAA,IAAAA,EAAM3C,eAAAA,CACHkE,KAAK,EAAA,CACLC,EAAE,CACDnE,eAAAA,CAAIkE,KAAK,EAAA,CAAGC,EAAE,CACZnE,eAAAA,CACGC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLwD,YAAAA,IAAAA,EAAM1D,gBAAIgC,MAAM,EAAA,CAAGC,KAAK,CAAC+B,gBAAgBzC,QAAQ,EAAA;AACjD6C,YAAAA,IAAAA,EAAMpE,gBAAI0B,MAAM,EAAA,CAAGC,OAAO,EAAA,CAAG0C,QAAQ,GAAG9C,QAAQ;AAClD,SAAA,CAAA,CACCV,SAAS,EAAA,CAAA,CAAA,CAGfuB,IAAI,CAACoB,eAAAA,CAAgBzD,IAAAA,CAAAA,CAAAA;AACxBuD,QAAAA,IAAAA,EAAMtD,eAAAA,CAAIkE,KAAK,EAAA,CAAGC,EAAE,CAACnE,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAACnB,eAAAA,CAAAA,CAAAA,CAAkBsB,IAAI,CAACoB,eAAAA,CAAgBzD,IAAAA,CAAAA;AACjF,KAAA,CAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"model-configuration.js","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n relationOpenMode: yup.string().oneOf(['modal', 'page', 'newTab']).default('modal'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","relationOpenMode","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":"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"}
@@ -21,7 +21,8 @@ const createSettingsSchema = (schema)=>{
21
21
  // should be reset when the type changes
22
22
  mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),
23
23
  // should be reset when the type changes
24
- defaultSortBy: yup.string().test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value)=>isValidDefaultSort(schema, value)).default('id'),
24
+ defaultSortBy: yup.string()// eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder
25
+ .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value)=>isValidDefaultSort(schema, value)).default('id'),
25
26
  defaultSortOrder: yup.string().oneOf([
26
27
  'ASC',
27
28
  'DESC'
@@ -65,6 +66,7 @@ const createMetadasSchema = (schema)=>{
65
66
  };
66
67
  const createArrayTest = ({ allowUndefined = false } = {})=>({
67
68
  name: 'isArray',
69
+ // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder
68
70
  message: '${path} is required and must be an array',
69
71
  test: (val)=>allowUndefined === true && val === undefined ? true : Array.isArray(val)
70
72
  });
@@ -1 +1 @@
1
- {"version":3,"file":"model-configuration.mjs","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n relationOpenMode: yup.string().oneOf(['modal', 'page', 'newTab']).default('modal'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","relationOpenMode","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":"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"}
1
+ {"version":3,"file":"model-configuration.mjs","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n relationOpenMode: yup.string().oneOf(['modal', 'page', 'newTab']).default('modal'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","relationOpenMode","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":"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"}