@strapi/content-manager 5.48.0 → 5.49.0

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 (331) hide show
  1. package/dist/admin/components/ActionsDrawer.js +3 -2
  2. package/dist/admin/components/ActionsDrawer.js.map +1 -1
  3. package/dist/admin/components/ComponentIcon.js +4 -3
  4. package/dist/admin/components/ComponentIcon.js.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/EditFieldForm.js +3 -2
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/Fields.js +3 -2
  8. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  9. package/dist/admin/components/ConfigurationForm/Form.js +7 -3
  10. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  11. package/dist/admin/components/LeftMenu.js +3 -2
  12. package/dist/admin/components/LeftMenu.js.map +1 -1
  13. package/dist/admin/components/RelativeTime.js +3 -2
  14. package/dist/admin/components/RelativeTime.js.map +1 -1
  15. package/dist/admin/components/Widgets.js +3 -2
  16. package/dist/admin/components/Widgets.js.map +1 -1
  17. package/dist/admin/features/DocumentRBAC.js +12 -3
  18. package/dist/admin/features/DocumentRBAC.js.map +1 -1
  19. package/dist/admin/features/DocumentRBAC.mjs +9 -1
  20. package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
  21. package/dist/admin/history/components/VersionContent.js +7 -3
  22. package/dist/admin/history/components/VersionContent.js.map +1 -1
  23. package/dist/admin/history/components/VersionHeader.js +3 -2
  24. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  25. package/dist/admin/history/components/VersionInputRenderer.js +3 -2
  26. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  27. package/dist/admin/history/pages/History.js +3 -2
  28. package/dist/admin/history/pages/History.js.map +1 -1
  29. package/dist/admin/history/routes.js +3 -2
  30. package/dist/admin/history/routes.js.map +1 -1
  31. package/dist/admin/hooks/useContentTypeSchema.js +40 -19
  32. package/dist/admin/hooks/useContentTypeSchema.js.map +1 -1
  33. package/dist/admin/hooks/useContentTypeSchema.mjs +37 -17
  34. package/dist/admin/hooks/useContentTypeSchema.mjs.map +1 -1
  35. package/dist/admin/hooks/useDocument.js +3 -2
  36. package/dist/admin/hooks/useDocument.js.map +1 -1
  37. package/dist/admin/hooks/useDocumentActions.js +3 -2
  38. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  39. package/dist/admin/hooks/useDocumentContext.js +3 -2
  40. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  41. package/dist/admin/hooks/useDocumentLayout.js +46 -6
  42. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  43. package/dist/admin/hooks/useDocumentLayout.mjs +43 -4
  44. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
  45. package/dist/admin/hooks/useDragAndDrop.js +3 -2
  46. package/dist/admin/hooks/useDragAndDrop.js.map +1 -1
  47. package/dist/admin/hooks/useKeyboardDragAndDrop.js +3 -2
  48. package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -1
  49. package/dist/admin/hooks/useOnce.js +3 -2
  50. package/dist/admin/hooks/useOnce.js.map +1 -1
  51. package/dist/admin/hooks/usePersistentQueryParams.js +7 -2
  52. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  53. package/dist/admin/pages/ComponentConfigurationPage.js +9 -5
  54. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  55. package/dist/admin/pages/ComponentConfigurationPage.mjs +6 -3
  56. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
  57. package/dist/admin/pages/EditConfigurationPage.js +3 -2
  58. package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
  59. package/dist/admin/pages/EditView/EditViewPage.js +3 -2
  60. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/DocumentActions.js +80 -39
  62. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/DocumentActions.mjs +67 -33
  64. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +3 -2
  66. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +4 -3
  68. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +3 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +3 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +8 -4
  74. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +5 -2
  76. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +3 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +3 -2
  80. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -3
  82. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +3 -2
  84. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +3 -2
  86. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +3 -2
  88. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +14 -4
  90. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +11 -2
  92. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +16 -7
  94. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +9 -4
  96. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +3 -2
  98. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +7 -3
  100. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/UID.js +3 -2
  102. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +8 -4
  104. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +3 -2
  106. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +5 -28
  108. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +2 -26
  110. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +5 -1
  112. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +15 -2
  114. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js +76 -0
  116. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -0
  117. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs +70 -0
  118. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs.map +1 -0
  119. package/dist/admin/pages/EditView/components/FormLayout.js +3 -2
  120. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  121. package/dist/admin/pages/EditView/components/Header.js +3 -2
  122. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  123. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -2
  124. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  125. package/dist/admin/pages/EditView/components/Panels.js +3 -2
  126. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  127. package/dist/admin/pages/EditView/utils/data.js +5 -1
  128. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  129. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js +35 -0
  130. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js.map +1 -0
  131. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs +33 -0
  132. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs.map +1 -0
  133. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +7 -10
  134. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  135. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +5 -9
  136. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  137. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +3 -2
  138. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  139. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +3 -2
  140. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  141. package/dist/admin/pages/ListConfiguration/components/Settings.js +3 -2
  142. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  143. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +9 -12
  144. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  145. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs +6 -10
  146. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
  147. package/dist/admin/pages/ListView/ListViewPage.js +3 -2
  148. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  149. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +3 -2
  150. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  151. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +3 -2
  152. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  153. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +3 -2
  154. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  155. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  156. package/dist/admin/pages/ListView/components/Filters.js +10 -11
  157. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  158. package/dist/admin/pages/ListView/components/Filters.mjs +7 -9
  159. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  160. package/dist/admin/pages/ListView/components/TableActions.js +3 -2
  161. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  162. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +7 -3
  163. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  164. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -2
  165. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  166. package/dist/admin/pages/ListView/components/TableCells/Media.js +5 -4
  167. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
  168. package/dist/admin/pages/ListView/components/TableCells/Media.mjs +5 -4
  169. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
  170. package/dist/admin/pages/ListView/components/TableCells/Relations.js +3 -2
  171. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  172. package/dist/admin/pages/formatComponentConfigurationEditLayout.js +15 -9
  173. package/dist/admin/pages/formatComponentConfigurationEditLayout.js.map +1 -1
  174. package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs +15 -9
  175. package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs.map +1 -1
  176. package/dist/admin/preview/components/InputPopover.js +3 -2
  177. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  178. package/dist/admin/preview/hooks/usePreviewInputManager.js +3 -2
  179. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  180. package/dist/admin/preview/pages/Preview.js +3 -2
  181. package/dist/admin/preview/pages/Preview.js.map +1 -1
  182. package/dist/admin/preview/routes.js +3 -2
  183. package/dist/admin/preview/routes.js.map +1 -1
  184. package/dist/admin/services/components.js +3 -2
  185. package/dist/admin/services/components.js.map +1 -1
  186. package/dist/admin/services/components.mjs +3 -2
  187. package/dist/admin/services/components.mjs.map +1 -1
  188. package/dist/admin/services/contentTypes.js +4 -3
  189. package/dist/admin/services/contentTypes.js.map +1 -1
  190. package/dist/admin/services/contentTypes.mjs +4 -3
  191. package/dist/admin/services/contentTypes.mjs.map +1 -1
  192. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +1 -1
  193. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.d.ts +2 -0
  194. package/dist/admin/src/pages/EditView/utils/keyboardShortcuts.d.ts +18 -0
  195. package/dist/admin/src/pages/ListConfiguration/components/SortDisplayedFields.d.ts +2 -2
  196. package/dist/admin/src/pages/ListView/components/TableCells/Media.d.ts +2 -2
  197. package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +3 -1
  198. package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +24 -0
  199. package/dist/admin/translations/cs.json.js +2 -1
  200. package/dist/admin/translations/cs.json.js.map +1 -1
  201. package/dist/admin/translations/cs.json.mjs +2 -1
  202. package/dist/admin/translations/cs.json.mjs.map +1 -1
  203. package/dist/admin/translations/de.json.js +2 -1
  204. package/dist/admin/translations/de.json.js.map +1 -1
  205. package/dist/admin/translations/de.json.mjs +2 -1
  206. package/dist/admin/translations/de.json.mjs.map +1 -1
  207. package/dist/admin/translations/en.json.js +3 -1
  208. package/dist/admin/translations/en.json.js.map +1 -1
  209. package/dist/admin/translations/en.json.mjs +3 -1
  210. package/dist/admin/translations/en.json.mjs.map +1 -1
  211. package/dist/admin/translations/es.json.js +2 -1
  212. package/dist/admin/translations/es.json.js.map +1 -1
  213. package/dist/admin/translations/es.json.mjs +2 -1
  214. package/dist/admin/translations/es.json.mjs.map +1 -1
  215. package/dist/admin/translations/fr.json.js +2 -1
  216. package/dist/admin/translations/fr.json.js.map +1 -1
  217. package/dist/admin/translations/fr.json.mjs +2 -1
  218. package/dist/admin/translations/fr.json.mjs.map +1 -1
  219. package/dist/admin/translations/nl.json.js +2 -1
  220. package/dist/admin/translations/nl.json.js.map +1 -1
  221. package/dist/admin/translations/nl.json.mjs +2 -1
  222. package/dist/admin/translations/nl.json.mjs.map +1 -1
  223. package/dist/admin/translations/pl.json.js +2 -1
  224. package/dist/admin/translations/pl.json.js.map +1 -1
  225. package/dist/admin/translations/pl.json.mjs +2 -1
  226. package/dist/admin/translations/pl.json.mjs.map +1 -1
  227. package/dist/admin/translations/sk.json.js +2 -1
  228. package/dist/admin/translations/sk.json.js.map +1 -1
  229. package/dist/admin/translations/sk.json.mjs +2 -1
  230. package/dist/admin/translations/sk.json.mjs.map +1 -1
  231. package/dist/admin/utils/attributes.js +17 -2
  232. package/dist/admin/utils/attributes.js.map +1 -1
  233. package/dist/admin/utils/attributes.mjs +17 -2
  234. package/dist/admin/utils/attributes.mjs.map +1 -1
  235. package/dist/admin/utils/layouts/normalizeContentManagerLayout.js +329 -0
  236. package/dist/admin/utils/layouts/normalizeContentManagerLayout.js.map +1 -0
  237. package/dist/admin/utils/layouts/normalizeContentManagerLayout.mjs +321 -0
  238. package/dist/admin/utils/layouts/normalizeContentManagerLayout.mjs.map +1 -0
  239. package/dist/admin/utils/objects.js +9 -4
  240. package/dist/admin/utils/objects.js.map +1 -1
  241. package/dist/admin/utils/validation.js +7 -3
  242. package/dist/admin/utils/validation.js.map +1 -1
  243. package/dist/server/controllers/collection-types.js +7 -2
  244. package/dist/server/controllers/collection-types.js.map +1 -1
  245. package/dist/server/controllers/collection-types.mjs +7 -2
  246. package/dist/server/controllers/collection-types.mjs.map +1 -1
  247. package/dist/server/controllers/utils/clone.js +5 -1
  248. package/dist/server/controllers/utils/clone.js.map +1 -1
  249. package/dist/server/controllers/utils/clone.mjs.map +1 -1
  250. package/dist/server/controllers/validation/index.js +6 -2
  251. package/dist/server/controllers/validation/index.js.map +1 -1
  252. package/dist/server/homepage/services/homepage.js +6 -1
  253. package/dist/server/homepage/services/homepage.js.map +1 -1
  254. package/dist/server/homepage/services/homepage.mjs +6 -1
  255. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  256. package/dist/server/mcp/handlers/collection-handlers.js +15 -18
  257. package/dist/server/mcp/handlers/collection-handlers.js.map +1 -1
  258. package/dist/server/mcp/handlers/collection-handlers.mjs +16 -19
  259. package/dist/server/mcp/handlers/collection-handlers.mjs.map +1 -1
  260. package/dist/server/mcp/handlers/single-type-handlers.js +12 -12
  261. package/dist/server/mcp/handlers/single-type-handlers.js.map +1 -1
  262. package/dist/server/mcp/handlers/single-type-handlers.mjs +13 -13
  263. package/dist/server/mcp/handlers/single-type-handlers.mjs.map +1 -1
  264. package/dist/server/mcp/register-content-manager-mcp-tools.js +4 -1
  265. package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -1
  266. package/dist/server/mcp/register-content-manager-mcp-tools.mjs +4 -1
  267. package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -1
  268. package/dist/server/mcp/sanitizers/shape-relations.js +108 -0
  269. package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -0
  270. package/dist/server/mcp/sanitizers/shape-relations.mjs +103 -0
  271. package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -0
  272. package/dist/server/mcp/schemas/data-schema.js +0 -3
  273. package/dist/server/mcp/schemas/data-schema.js.map +1 -1
  274. package/dist/server/mcp/schemas/data-schema.mjs +0 -3
  275. package/dist/server/mcp/schemas/data-schema.mjs.map +1 -1
  276. package/dist/server/mcp/schemas/output-schemas.js +30 -4
  277. package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
  278. package/dist/server/mcp/schemas/output-schemas.mjs +30 -4
  279. package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
  280. package/dist/server/mcp/utils.js +30 -3
  281. package/dist/server/mcp/utils.js.map +1 -1
  282. package/dist/server/mcp/utils.mjs +30 -4
  283. package/dist/server/mcp/utils.mjs.map +1 -1
  284. package/dist/server/middlewares/routing.js +5 -1
  285. package/dist/server/middlewares/routing.js.map +1 -1
  286. package/dist/server/services/populate-builder.js.map +1 -1
  287. package/dist/server/services/populate-builder.mjs.map +1 -1
  288. package/dist/server/services/uid.js +9 -4
  289. package/dist/server/services/uid.js.map +1 -1
  290. package/dist/server/services/utils/configuration/attributes.js +14 -10
  291. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  292. package/dist/server/services/utils/configuration/layouts.js +8 -4
  293. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  294. package/dist/server/services/utils/configuration/metadatas.js +19 -15
  295. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  296. package/dist/server/services/utils/configuration/settings.js +5 -1
  297. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  298. package/dist/server/services/utils/draft.js +5 -1
  299. package/dist/server/services/utils/draft.js.map +1 -1
  300. package/dist/server/services/utils/populate.js +8 -4
  301. package/dist/server/services/utils/populate.js.map +1 -1
  302. package/dist/server/services/utils/populate.mjs.map +1 -1
  303. package/dist/server/services/utils/store.js +9 -5
  304. package/dist/server/services/utils/store.js.map +1 -1
  305. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  306. package/dist/server/src/controllers/utils/clone.d.ts +1 -1
  307. package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
  308. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  309. package/dist/server/src/index.d.ts +3 -1
  310. package/dist/server/src/index.d.ts.map +1 -1
  311. package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
  312. package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
  313. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts +2 -1
  314. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
  315. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts +38 -0
  316. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -0
  317. package/dist/server/src/mcp/schemas/data-schema.d.ts +0 -3
  318. package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
  319. package/dist/server/src/mcp/schemas/output-schemas.d.ts +2 -2
  320. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  321. package/dist/server/src/mcp/types.d.ts +2 -2
  322. package/dist/server/src/mcp/types.d.ts.map +1 -1
  323. package/dist/server/src/mcp/utils.d.ts +19 -1
  324. package/dist/server/src/mcp/utils.d.ts.map +1 -1
  325. package/dist/server/src/services/index.d.ts +3 -1
  326. package/dist/server/src/services/index.d.ts.map +1 -1
  327. package/dist/server/src/services/populate-builder.d.ts +3 -1
  328. package/dist/server/src/services/populate-builder.d.ts.map +1 -1
  329. package/dist/server/src/services/utils/populate.d.ts +3 -1
  330. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  331. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"routing.js","sources":["../../../server/src/middlewares/routing.ts"],"sourcesContent":["import type { UID, Core, Struct } from '@strapi/types';\nimport type { Context, Next } from 'koa';\nimport isNil from 'lodash/isNil';\n\ninterface ContentType extends Struct.ContentTypeSchema {\n plugin?: string;\n}\n\nexport default async (ctx: Context, next: Next) => {\n const { model }: { model: UID.ContentType } = ctx.params;\n\n const ct: ContentType = strapi.contentTypes[model];\n\n if (!ct) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n let controllers;\n if (!ct.plugin || ct.plugin === 'admin') {\n controllers = strapi.admin.controllers;\n } else {\n controllers = strapi.plugin(ct.plugin).controllers;\n }\n\n const { route }: { route: Core.Route } = ctx.state;\n\n if (typeof route.handler !== 'string') {\n return next();\n }\n\n const [, action] = route.handler.split('.');\n\n let actionConfig: any;\n if (!ct.plugin || ct.plugin === 'admin') {\n actionConfig = strapi.config.get(`admin.layout.${ct.modelName}.actions.${action}`);\n } else {\n actionConfig = strapi.plugin(ct.plugin).config(`layout.${ct.modelName}.actions.${action}`);\n }\n\n if (!isNil(actionConfig)) {\n const [controller, action] = actionConfig.split('.');\n\n if (controller && action) {\n return controllers[controller.toLowerCase()][action](ctx, next);\n }\n }\n\n await next();\n};\n"],"names":["ctx","next","model","params","ct","strapi","contentTypes","send","error","controllers","plugin","admin","route","state","handler","action","split","actionConfig","config","get","modelName","isNil","controller","toLowerCase"],"mappings":";;;;AAQA,cAAe,CAAA,OAAOA,GAAAA,EAAcC,IAAAA,GAAAA;AAClC,IAAA,MAAM,EAAEC,KAAK,EAAE,GAA+BF,IAAIG,MAAM;AAExD,IAAA,MAAMC,EAAAA,GAAkBC,MAAAA,CAAOC,YAAY,CAACJ,KAAAA,CAAM;AAElD,IAAA,IAAI,CAACE,EAAAA,EAAI;QACP,OAAOJ,GAAAA,CAAIO,IAAI,CAAC;YAAEC,KAAAA,EAAO;SAAuB,EAAG,GAAA,CAAA;AACrD,IAAA;IAEA,IAAIC,WAAAA;AACJ,IAAA,IAAI,CAACL,EAAAA,CAAGM,MAAM,IAAIN,EAAAA,CAAGM,MAAM,KAAK,OAAA,EAAS;QACvCD,WAAAA,GAAcJ,MAAAA,CAAOM,KAAK,CAACF,WAAW;IACxC,CAAA,MAAO;AACLA,QAAAA,WAAAA,GAAcJ,OAAOK,MAAM,CAACN,EAAAA,CAAGM,MAAM,EAAED,WAAW;AACpD,IAAA;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAE,GAA0BZ,IAAIa,KAAK;AAElD,IAAA,IAAI,OAAOD,KAAAA,CAAME,OAAO,KAAK,QAAA,EAAU;QACrC,OAAOb,IAAAA,EAAAA;AACT,IAAA;AAEA,IAAA,MAAM,GAAGc,MAAAA,CAAO,GAAGH,MAAME,OAAO,CAACE,KAAK,CAAC,GAAA,CAAA;IAEvC,IAAIC,YAAAA;AACJ,IAAA,IAAI,CAACb,EAAAA,CAAGM,MAAM,IAAIN,EAAAA,CAAGM,MAAM,KAAK,OAAA,EAAS;AACvCO,QAAAA,YAAAA,GAAeZ,MAAAA,CAAOa,MAAM,CAACC,GAAG,CAAC,CAAC,aAAa,EAAEf,EAAAA,CAAGgB,SAAS,CAAC,SAAS,EAAEL,MAAAA,CAAAA,CAAQ,CAAA;IACnF,CAAA,MAAO;AACLE,QAAAA,YAAAA,GAAeZ,OAAOK,MAAM,CAACN,EAAAA,CAAGM,MAAM,EAAEQ,MAAM,CAAC,CAAC,OAAO,EAAEd,EAAAA,CAAGgB,SAAS,CAAC,SAAS,EAAEL,MAAAA,CAAAA,CAAQ,CAAA;AAC3F,IAAA;IAEA,IAAI,CAACM,MAAMJ,YAAAA,CAAAA,EAAe;AACxB,QAAA,MAAM,CAACK,UAAAA,EAAYP,MAAAA,CAAO,GAAGE,YAAAA,CAAaD,KAAK,CAAC,GAAA,CAAA;AAEhD,QAAA,IAAIM,cAAcP,MAAAA,EAAQ;YACxB,OAAON,WAAW,CAACa,UAAAA,CAAWC,WAAW,GAAG,CAACR,MAAAA,CAAO,CAACf,GAAAA,EAAKC,IAAAA,CAAAA;AAC5D,QAAA;AACF,IAAA;IAEA,MAAMA,IAAAA,EAAAA;AACR,CAAA;;;;"}
1
+ {"version":3,"file":"routing.js","sources":["../../../server/src/middlewares/routing.ts"],"sourcesContent":["import type { UID, Core, Struct } from '@strapi/types';\nimport type { Context, Next } from 'koa';\nimport isNil from 'lodash/isNil';\n\ninterface ContentType extends Struct.ContentTypeSchema {\n plugin?: string;\n}\n\nexport default async (ctx: Context, next: Next) => {\n const { model }: { model: UID.ContentType } = ctx.params;\n\n const ct: ContentType = strapi.contentTypes[model];\n\n if (!ct) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n let controllers;\n if (!ct.plugin || ct.plugin === 'admin') {\n controllers = strapi.admin.controllers;\n } else {\n controllers = strapi.plugin(ct.plugin).controllers;\n }\n\n const { route }: { route: Core.Route } = ctx.state;\n\n if (typeof route.handler !== 'string') {\n return next();\n }\n\n const [, action] = route.handler.split('.');\n\n let actionConfig: any;\n if (!ct.plugin || ct.plugin === 'admin') {\n actionConfig = strapi.config.get(`admin.layout.${ct.modelName}.actions.${action}`);\n } else {\n actionConfig = strapi.plugin(ct.plugin).config(`layout.${ct.modelName}.actions.${action}`);\n }\n\n if (!isNil(actionConfig)) {\n const [controller, action] = actionConfig.split('.');\n\n if (controller && action) {\n return controllers[controller.toLowerCase()][action](ctx, next);\n }\n }\n\n await next();\n};\n"],"names":["ctx","next","model","params","ct","strapi","contentTypes","send","error","controllers","plugin","admin","route","state","handler","action","split","actionConfig","config","get","modelName","isNil","controller","toLowerCase"],"mappings":";;;;;;;;AAQA,cAAe,CAAA,OAAOA,GAAAA,EAAcC,IAAAA,GAAAA;AAClC,IAAA,MAAM,EAAEC,KAAK,EAAE,GAA+BF,IAAIG,MAAM;AAExD,IAAA,MAAMC,EAAAA,GAAkBC,MAAAA,CAAOC,YAAY,CAACJ,KAAAA,CAAM;AAElD,IAAA,IAAI,CAACE,EAAAA,EAAI;QACP,OAAOJ,GAAAA,CAAIO,IAAI,CAAC;YAAEC,KAAAA,EAAO;SAAuB,EAAG,GAAA,CAAA;AACrD,IAAA;IAEA,IAAIC,WAAAA;AACJ,IAAA,IAAI,CAACL,EAAAA,CAAGM,MAAM,IAAIN,EAAAA,CAAGM,MAAM,KAAK,OAAA,EAAS;QACvCD,WAAAA,GAAcJ,MAAAA,CAAOM,KAAK,CAACF,WAAW;IACxC,CAAA,MAAO;AACLA,QAAAA,WAAAA,GAAcJ,OAAOK,MAAM,CAACN,EAAAA,CAAGM,MAAM,EAAED,WAAW;AACpD,IAAA;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAE,GAA0BZ,IAAIa,KAAK;AAElD,IAAA,IAAI,OAAOD,KAAAA,CAAME,OAAO,KAAK,QAAA,EAAU;QACrC,OAAOb,IAAAA,EAAAA;AACT,IAAA;AAEA,IAAA,MAAM,GAAGc,MAAAA,CAAO,GAAGH,MAAME,OAAO,CAACE,KAAK,CAAC,GAAA,CAAA;IAEvC,IAAIC,YAAAA;AACJ,IAAA,IAAI,CAACb,EAAAA,CAAGM,MAAM,IAAIN,EAAAA,CAAGM,MAAM,KAAK,OAAA,EAAS;AACvCO,QAAAA,YAAAA,GAAeZ,MAAAA,CAAOa,MAAM,CAACC,GAAG,CAAC,CAAC,aAAa,EAAEf,EAAAA,CAAGgB,SAAS,CAAC,SAAS,EAAEL,MAAAA,CAAAA,CAAQ,CAAA;IACnF,CAAA,MAAO;AACLE,QAAAA,YAAAA,GAAeZ,OAAOK,MAAM,CAACN,EAAAA,CAAGM,MAAM,EAAEQ,MAAM,CAAC,CAAC,OAAO,EAAEd,EAAAA,CAAGgB,SAAS,CAAC,SAAS,EAAEL,MAAAA,CAAAA,CAAQ,CAAA;AAC3F,IAAA;IAEA,IAAI,CAACM,uBAAMJ,YAAAA,CAAAA,EAAe;AACxB,QAAA,MAAM,CAACK,UAAAA,EAAYP,MAAAA,CAAO,GAAGE,YAAAA,CAAaD,KAAK,CAAC,GAAA,CAAA;AAEhD,QAAA,IAAIM,cAAcP,MAAAA,EAAQ;YACxB,OAAON,WAAW,CAACa,UAAAA,CAAWC,WAAW,GAAG,CAACR,MAAAA,CAAO,CAACf,GAAAA,EAAKC,IAAAA,CAAAA;AAC5D,QAAA;AACF,IAAA;IAEA,MAAMA,IAAAA,EAAAA;AACR,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"populate-builder.js","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { isNil, merge } from 'lodash/fp';\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (!isNil(toMany)) {\n deepPopulateOptions.countMany = toMany;\n }\n if (!isNil(toOne)) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Override the populate for specific attributes, taking precedence over\n * query-derived or deep populate defaults.\n *\n * @param overrides - Populate overrides to merge (e.g. { localizations: { fields: ['locale'] } })\n */\n withPopulateOverride(overrides: Record<string, any>) {\n const prev = getInitialPopulate;\n // merge(base, overrides): overrides win for overlapping keys, so e.g. localizations\n getInitialPopulate = async () => merge((await prev()) || {}, overrides);\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, { ...deepPopulateOptions, initialPopulate });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","isNil","populateDeep","level","Infinity","withPopulateOverride","overrides","prev","merge","build","initialPopulate","getDeepPopulate"],"mappings":";;;;;AAIA;;;;;;;;;IAUA,MAAMA,kBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAAA,GAAqB,UAAA;QACvB,OAAOC,SAAAA;AACT,IAAA,CAAA;AACA,IAAA,MAAMC,mBAAAA,GAAsB;QAC1BC,SAAAA,EAAW,KAAA;QACXC,QAAAA,EAAU,KAAA;AACVC,QAAAA,QAAAA,EAAU;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,GAAU;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAAA,GAAqB,UAAYS,0BAAiBV,GAAAA,EAAKS,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAAA,EAAQ,IAAA;YAAMC,KAAAA,EAAO;SAAM,EAAA;YAC9D,IAAI,CAACC,SAAMF,MAAAA,CAAAA,EAAS;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC,YAAA;YACA,IAAI,CAACE,SAAMD,KAAAA,CAAAA,EAAQ;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC,YAAA;YACA,OAAON,OAAAA;AACT,QAAA,CAAA;AAEA;;;QAIAQ,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bd,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGU,KAAAA;YAC/B,OAAOT,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDW,sBAAqBC,SAA8B,EAAA;AACjD,YAAA,MAAMC,IAAAA,GAAOnB,kBAAAA;;AAEbA,YAAAA,kBAAAA,GAAqB,UAAYoB,QAAAA,CAAO,MAAMD,IAAAA,EAAAA,IAAW,EAAC,EAAGD,SAAAA,CAAAA;YAC7D,OAAOZ,OAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMe,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMtB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAAA,CAAoBG,QAAQ,KAAK,EAAC,EAAG;gBACvC,OAAOiB,eAAAA;AACT,YAAA;AAEA,YAAA,OAAOC,yBAAgBxB,GAAAA,EAAK;AAAE,gBAAA,GAAGG,mBAAmB;AAAEoB,gBAAAA;AAAgB,aAAA,CAAA;AACxE,QAAA;AACF,KAAA;IAEA,OAAOhB,OAAAA;AACT,CAAA;AAEA,wBAAe,CAAA,IAAMR,eAAc;;;;"}
1
+ {"version":3,"file":"populate-builder.js","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { isNil, merge } from 'lodash/fp';\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (!isNil(toMany)) {\n deepPopulateOptions.countMany = toMany;\n }\n if (!isNil(toOne)) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Override the populate for specific attributes, taking precedence over\n * query-derived or deep populate defaults.\n *\n * @param overrides - Populate overrides to merge (e.g. { localizations: { fields: ['locale'] } })\n */\n withPopulateOverride(overrides: Record<string, any>) {\n const prev = getInitialPopulate;\n // merge(base, overrides): overrides win for overlapping keys, so e.g. localizations\n getInitialPopulate = async () => merge((await prev()) || {}, overrides);\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, {\n ...deepPopulateOptions,\n initialPopulate,\n });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","isNil","populateDeep","level","Infinity","withPopulateOverride","overrides","prev","merge","build","initialPopulate","getDeepPopulate"],"mappings":";;;;;AAIA;;;;;;;;;IAUA,MAAMA,kBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAAA,GAAqB,UAAA;QACvB,OAAOC,SAAAA;AACT,IAAA,CAAA;AACA,IAAA,MAAMC,mBAAAA,GAAsB;QAC1BC,SAAAA,EAAW,KAAA;QACXC,QAAAA,EAAU,KAAA;AACVC,QAAAA,QAAAA,EAAU;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,GAAU;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAAA,GAAqB,UAAYS,0BAAiBV,GAAAA,EAAKS,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAAA,EAAQ,IAAA;YAAMC,KAAAA,EAAO;SAAM,EAAA;YAC9D,IAAI,CAACC,SAAMF,MAAAA,CAAAA,EAAS;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC,YAAA;YACA,IAAI,CAACE,SAAMD,KAAAA,CAAAA,EAAQ;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC,YAAA;YACA,OAAON,OAAAA;AACT,QAAA,CAAA;AAEA;;;QAIAQ,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bd,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGU,KAAAA;YAC/B,OAAOT,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDW,sBAAqBC,SAA8B,EAAA;AACjD,YAAA,MAAMC,IAAAA,GAAOnB,kBAAAA;;AAEbA,YAAAA,kBAAAA,GAAqB,UAAYoB,QAAAA,CAAO,MAAMD,IAAAA,EAAAA,IAAW,EAAC,EAAGD,SAAAA,CAAAA;YAC7D,OAAOZ,OAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMe,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMtB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAAA,CAAoBG,QAAQ,KAAK,EAAC,EAAG;gBACvC,OAAOiB,eAAAA;AACT,YAAA;AAEA,YAAA,OAAOC,yBAAgBxB,GAAAA,EAAK;AAC1B,gBAAA,GAAGG,mBAAmB;AACtBoB,gBAAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;IAEA,OAAOhB,OAAAA;AACT,CAAA;AAEA,wBAAe,CAAA,IAAMR,eAAc;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"populate-builder.mjs","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { isNil, merge } from 'lodash/fp';\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (!isNil(toMany)) {\n deepPopulateOptions.countMany = toMany;\n }\n if (!isNil(toOne)) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Override the populate for specific attributes, taking precedence over\n * query-derived or deep populate defaults.\n *\n * @param overrides - Populate overrides to merge (e.g. { localizations: { fields: ['locale'] } })\n */\n withPopulateOverride(overrides: Record<string, any>) {\n const prev = getInitialPopulate;\n // merge(base, overrides): overrides win for overlapping keys, so e.g. localizations\n getInitialPopulate = async () => merge((await prev()) || {}, overrides);\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, { ...deepPopulateOptions, initialPopulate });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","isNil","populateDeep","level","Infinity","withPopulateOverride","overrides","prev","merge","build","initialPopulate","getDeepPopulate"],"mappings":";;;AAIA;;;;;;;;;IAUA,MAAMA,oBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAAA,GAAqB,UAAA;QACvB,OAAOC,SAAAA;AACT,IAAA,CAAA;AACA,IAAA,MAAMC,mBAAAA,GAAsB;QAC1BC,SAAAA,EAAW,KAAA;QACXC,QAAAA,EAAU,KAAA;AACVC,QAAAA,QAAAA,EAAU;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,GAAU;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAAA,GAAqB,UAAYS,iBAAiBV,GAAAA,EAAKS,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAAA,EAAQ,IAAA;YAAMC,KAAAA,EAAO;SAAM,EAAA;YAC9D,IAAI,CAACC,MAAMF,MAAAA,CAAAA,EAAS;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC,YAAA;YACA,IAAI,CAACE,MAAMD,KAAAA,CAAAA,EAAQ;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC,YAAA;YACA,OAAON,OAAAA;AACT,QAAA,CAAA;AAEA;;;QAIAQ,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bd,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGU,KAAAA;YAC/B,OAAOT,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDW,sBAAqBC,SAA8B,EAAA;AACjD,YAAA,MAAMC,IAAAA,GAAOnB,kBAAAA;;AAEbA,YAAAA,kBAAAA,GAAqB,UAAYoB,KAAAA,CAAO,MAAMD,IAAAA,EAAAA,IAAW,EAAC,EAAGD,SAAAA,CAAAA;YAC7D,OAAOZ,OAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMe,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMtB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAAA,CAAoBG,QAAQ,KAAK,EAAC,EAAG;gBACvC,OAAOiB,eAAAA;AACT,YAAA;AAEA,YAAA,OAAOC,gBAAgBxB,GAAAA,EAAK;AAAE,gBAAA,GAAGG,mBAAmB;AAAEoB,gBAAAA;AAAgB,aAAA,CAAA;AACxE,QAAA;AACF,KAAA;IAEA,OAAOhB,OAAAA;AACT,CAAA;AAEA,sBAAe,CAAA,IAAMR,iBAAc;;;;"}
1
+ {"version":3,"file":"populate-builder.mjs","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { isNil, merge } from 'lodash/fp';\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (!isNil(toMany)) {\n deepPopulateOptions.countMany = toMany;\n }\n if (!isNil(toOne)) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Override the populate for specific attributes, taking precedence over\n * query-derived or deep populate defaults.\n *\n * @param overrides - Populate overrides to merge (e.g. { localizations: { fields: ['locale'] } })\n */\n withPopulateOverride(overrides: Record<string, any>) {\n const prev = getInitialPopulate;\n // merge(base, overrides): overrides win for overlapping keys, so e.g. localizations\n getInitialPopulate = async () => merge((await prev()) || {}, overrides);\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, {\n ...deepPopulateOptions,\n initialPopulate,\n });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","isNil","populateDeep","level","Infinity","withPopulateOverride","overrides","prev","merge","build","initialPopulate","getDeepPopulate"],"mappings":";;;AAIA;;;;;;;;;IAUA,MAAMA,oBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAAA,GAAqB,UAAA;QACvB,OAAOC,SAAAA;AACT,IAAA,CAAA;AACA,IAAA,MAAMC,mBAAAA,GAAsB;QAC1BC,SAAAA,EAAW,KAAA;QACXC,QAAAA,EAAU,KAAA;AACVC,QAAAA,QAAAA,EAAU;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,GAAU;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAAA,GAAqB,UAAYS,iBAAiBV,GAAAA,EAAKS,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAAA,EAAQ,IAAA;YAAMC,KAAAA,EAAO;SAAM,EAAA;YAC9D,IAAI,CAACC,MAAMF,MAAAA,CAAAA,EAAS;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC,YAAA;YACA,IAAI,CAACE,MAAMD,KAAAA,CAAAA,EAAQ;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC,YAAA;YACA,OAAON,OAAAA;AACT,QAAA,CAAA;AAEA;;;QAIAQ,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bd,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGU,KAAAA;YAC/B,OAAOT,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDW,sBAAqBC,SAA8B,EAAA;AACjD,YAAA,MAAMC,IAAAA,GAAOnB,kBAAAA;;AAEbA,YAAAA,kBAAAA,GAAqB,UAAYoB,KAAAA,CAAO,MAAMD,IAAAA,EAAAA,IAAW,EAAC,EAAGD,SAAAA,CAAAA;YAC7D,OAAOZ,OAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMe,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMtB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAAA,CAAoBG,QAAQ,KAAK,EAAC,EAAG;gBACvC,OAAOiB,eAAAA;AACT,YAAA;AAEA,YAAA,OAAOC,gBAAgBxB,GAAAA,EAAK;AAC1B,gBAAA,GAAGG,mBAAmB;AACtBoB,gBAAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;IAEA,OAAOhB,OAAAA;AACT,CAAA;AAEA,sBAAe,CAAA,IAAMR,iBAAc;;;;"}
@@ -3,25 +3,30 @@
3
3
  var _ = require('lodash');
4
4
  var slugify = require('@sindresorhus/slugify');
5
5
 
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var ___default = /*#__PURE__*/_interopDefault(_);
9
+ var slugify__default = /*#__PURE__*/_interopDefault(slugify);
10
+
6
11
  var uid = (({ strapi })=>({
7
12
  async generateUIDField ({ contentTypeUID, field, data, locale }) {
8
13
  const contentType = strapi.contentTypes[contentTypeUID];
9
14
  const { attributes } = contentType;
10
15
  const { targetField, default: defaultValue, options } = attributes[field];
11
16
  // @ts-expect-error targetField can be undefined
12
- const targetValue = _.get(data, targetField);
13
- if (!_.isEmpty(targetValue)) {
17
+ const targetValue = ___default.default.get(data, targetField);
18
+ if (!___default.default.isEmpty(targetValue)) {
14
19
  return this.findUniqueUID({
15
20
  contentTypeUID,
16
21
  field,
17
- value: slugify(targetValue, options),
22
+ value: slugify__default.default(targetValue, options),
18
23
  locale
19
24
  });
20
25
  }
21
26
  return this.findUniqueUID({
22
27
  contentTypeUID,
23
28
  field,
24
- value: slugify(_.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName, options),
29
+ value: slugify__default.default(___default.default.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName, options),
25
30
  locale
26
31
  });
27
32
  },
@@ -1 +1 @@
1
- {"version":3,"file":"uid.js","sources":["../../../server/src/services/uid.ts"],"sourcesContent":["import _ from 'lodash';\nimport slugify from '@sindresorhus/slugify';\n\nimport type { Core, Schema, UID } from '@strapi/types';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async generateUIDField({\n contentTypeUID,\n field,\n data,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n data: Record<string, any>;\n locale?: string;\n }) {\n const contentType = strapi.contentTypes[contentTypeUID];\n const { attributes } = contentType;\n\n const {\n targetField,\n default: defaultValue,\n options,\n } = attributes[field] as Schema.Attribute.UID;\n\n // @ts-expect-error targetField can be undefined\n const targetValue = _.get(data, targetField);\n\n if (!_.isEmpty(targetValue)) {\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(targetValue, options),\n locale,\n });\n }\n\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(\n _.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName,\n options\n ),\n locale,\n });\n },\n\n async findUniqueUID({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const foundDocuments = await strapi.documents(contentTypeUID).findMany({\n filters: {\n [field]: { $startsWith: value },\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (!foundDocuments || foundDocuments.length === 0) {\n // If there are no documents found we can return the value as is\n return value;\n }\n\n let possibleCollisions: string[];\n if (!Array.isArray(foundDocuments)) {\n possibleCollisions = [foundDocuments[field]];\n } else {\n possibleCollisions = foundDocuments.map((doc: any) => doc[field]);\n }\n\n // If there are no documents sharing the proposed UID, we can return the value as is\n if (!possibleCollisions.includes(value)) {\n return value;\n }\n\n let i = 1;\n let tmpUId = `${value}-${i}`;\n while (possibleCollisions.includes(tmpUId)) {\n // While there are documents sharing the proposed UID, we need to find a new one\n // by incrementing the suffix until we find a unique one\n i += 1;\n tmpUId = `${value}-${i}`;\n }\n\n return tmpUId;\n },\n\n async checkUIDAvailability({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const documentCount = await strapi.documents(contentTypeUID).count({\n filters: {\n [field]: value,\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (documentCount && documentCount > 0) {\n // If there are documents sharing the proposed UID, we can return false\n return false;\n }\n\n return true;\n },\n});\n"],"names":["strapi","generateUIDField","contentTypeUID","field","data","locale","contentType","contentTypes","attributes","targetField","default","defaultValue","options","targetValue","_","get","isEmpty","findUniqueUID","value","slugify","isFunction","modelName","foundDocuments","documents","findMany","filters","$startsWith","status","length","possibleCollisions","Array","isArray","map","doc","includes","i","tmpUId","checkUIDAvailability","documentCount","count"],"mappings":"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"}
1
+ {"version":3,"file":"uid.js","sources":["../../../server/src/services/uid.ts"],"sourcesContent":["import _ from 'lodash';\nimport slugify from '@sindresorhus/slugify';\n\nimport type { Core, Schema, UID } from '@strapi/types';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async generateUIDField({\n contentTypeUID,\n field,\n data,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n data: Record<string, any>;\n locale?: string;\n }) {\n const contentType = strapi.contentTypes[contentTypeUID];\n const { attributes } = contentType;\n\n const {\n targetField,\n default: defaultValue,\n options,\n } = attributes[field] as Schema.Attribute.UID;\n\n // @ts-expect-error targetField can be undefined\n const targetValue = _.get(data, targetField);\n\n if (!_.isEmpty(targetValue)) {\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(targetValue, options),\n locale,\n });\n }\n\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(\n _.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName,\n options\n ),\n locale,\n });\n },\n\n async findUniqueUID({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const foundDocuments = await strapi.documents(contentTypeUID).findMany({\n filters: {\n [field]: { $startsWith: value },\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (!foundDocuments || foundDocuments.length === 0) {\n // If there are no documents found we can return the value as is\n return value;\n }\n\n let possibleCollisions: string[];\n if (!Array.isArray(foundDocuments)) {\n possibleCollisions = [foundDocuments[field]];\n } else {\n possibleCollisions = foundDocuments.map((doc: any) => doc[field]);\n }\n\n // If there are no documents sharing the proposed UID, we can return the value as is\n if (!possibleCollisions.includes(value)) {\n return value;\n }\n\n let i = 1;\n let tmpUId = `${value}-${i}`;\n while (possibleCollisions.includes(tmpUId)) {\n // While there are documents sharing the proposed UID, we need to find a new one\n // by incrementing the suffix until we find a unique one\n i += 1;\n tmpUId = `${value}-${i}`;\n }\n\n return tmpUId;\n },\n\n async checkUIDAvailability({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const documentCount = await strapi.documents(contentTypeUID).count({\n filters: {\n [field]: value,\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (documentCount && documentCount > 0) {\n // If there are documents sharing the proposed UID, we can return false\n return false;\n }\n\n return true;\n },\n});\n"],"names":["strapi","generateUIDField","contentTypeUID","field","data","locale","contentType","contentTypes","attributes","targetField","default","defaultValue","options","targetValue","_","get","isEmpty","findUniqueUID","value","slugify","isFunction","modelName","foundDocuments","documents","findMany","filters","$startsWith","status","length","possibleCollisions","Array","isArray","map","doc","includes","i","tmpUId","checkUIDAvailability","documentCount","count"],"mappings":"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"}
@@ -4,6 +4,10 @@ var _ = require('lodash');
4
4
  var fp = require('lodash/fp');
5
5
  var strapiUtils = require('@strapi/utils');
6
6
 
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var ___default = /*#__PURE__*/_interopDefault(_);
10
+
7
11
  const { getNonVisibleAttributes, getWritableAttributes } = strapiUtils.contentTypes;
8
12
  const { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } = strapiUtils.contentTypes.constants;
9
13
  const NON_SORTABLES = [
@@ -33,10 +37,10 @@ const LISTABLE_RELATIONS = [
33
37
  ];
34
38
  // hidden fields are fields that are configured to be hidden from list, and edit views
35
39
  const isHidden = (schema, name)=>{
36
- if (!_.has(schema.attributes, name)) {
40
+ if (!___default.default.has(schema.attributes, name)) {
37
41
  return false;
38
42
  }
39
- const isHidden = _.get(schema, [
43
+ const isHidden = ___default.default.get(schema, [
40
44
  'config',
41
45
  'attributes',
42
46
  name,
@@ -48,7 +52,7 @@ const isHidden = (schema, name)=>{
48
52
  return false;
49
53
  };
50
54
  const isListable = (schema, name)=>{
51
- if (!_.has(schema.attributes, name)) {
55
+ if (!___default.default.has(schema.attributes, name)) {
52
56
  return false;
53
57
  }
54
58
  if (isHidden(schema, name)) {
@@ -64,7 +68,7 @@ const isListable = (schema, name)=>{
64
68
  return true;
65
69
  };
66
70
  const isSortable = (schema, name)=>{
67
- if (!_.has(schema.attributes, name)) {
71
+ if (!___default.default.has(schema.attributes, name)) {
68
72
  return false;
69
73
  }
70
74
  if (schema.modelType === 'component' && name === 'id') return false;
@@ -81,7 +85,7 @@ const isSearchable = (schema, name)=>{
81
85
  return isSortable(schema, name);
82
86
  };
83
87
  const isVisible = (schema, name)=>{
84
- if (!_.has(schema.attributes, name)) {
88
+ if (!___default.default.has(schema.attributes, name)) {
85
89
  return false;
86
90
  }
87
91
  if (isHidden(schema, name)) {
@@ -100,7 +104,7 @@ const isVisible = (schema, name)=>{
100
104
  };
101
105
  const isPublicationField = (name)=>PUBLISHED_AT_ATTRIBUTE === name;
102
106
  const isTimestamp = (schema, name)=>{
103
- if (!_.has(schema.attributes, name)) {
107
+ if (!___default.default.has(schema.attributes, name)) {
104
108
  return false;
105
109
  }
106
110
  const timestamps = strapiUtils.contentTypes.getTimestamps(schema);
@@ -112,7 +116,7 @@ const isTimestamp = (schema, name)=>{
112
116
  }
113
117
  };
114
118
  const isCreatorField = (schema, name)=>{
115
- if (!_.has(schema.attributes, name)) {
119
+ if (!___default.default.has(schema.attributes, name)) {
116
120
  return false;
117
121
  }
118
122
  const creatorFields = strapiUtils.contentTypes.getCreatorFields(schema);
@@ -125,7 +129,7 @@ const isCreatorField = (schema, name)=>{
125
129
  };
126
130
  const isRelation = (attribute)=>attribute.type === 'relation';
127
131
  const hasRelationAttribute = (schema, name)=>{
128
- if (!_.has(schema.attributes, name)) {
132
+ if (!___default.default.has(schema.attributes, name)) {
129
133
  return false;
130
134
  }
131
135
  if (isHidden(schema, name)) {
@@ -137,7 +141,7 @@ const hasRelationAttribute = (schema, name)=>{
137
141
  return isRelation(schema.attributes[name]);
138
142
  };
139
143
  const hasEditableAttribute = (schema, name)=>{
140
- if (!_.has(schema.attributes, name)) {
144
+ if (!___default.default.has(schema.attributes, name)) {
141
145
  return false;
142
146
  }
143
147
  if (isHidden(schema, name)) {
@@ -164,7 +168,7 @@ const getDefaultMainField = (schema)=>findFirstStringAttribute(schema) || 'id';
164
168
  const validAttributes = Object.keys(schema.attributes).filter((key)=>isListable(schema, key));
165
169
  const model = strapi.getModel(schema.uid);
166
170
  const nonVisibleWritableAttributes = fp.intersection(getNonVisibleAttributes(model), getWritableAttributes(model));
167
- const identifierField = _.has(schema.attributes, 'documentId') ? 'documentId' : 'id';
171
+ const identifierField = ___default.default.has(schema.attributes, 'documentId') ? 'documentId' : 'id';
168
172
  return [
169
173
  identifierField,
170
174
  ...validAttributes,
@@ -1 +1 @@
1
- {"version":3,"file":"attributes.js","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _ from 'lodash';\nimport { intersection } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getNonVisibleAttributes(model),\n getWritableAttributes(model)\n );\n\n const identifierField = _.has(schema.attributes, 'documentId') ? 'documentId' : 'id';\n return [\n identifierField,\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection","identifierField"],"mappings":"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"}
1
+ {"version":3,"file":"attributes.js","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _ from 'lodash';\nimport { intersection } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getNonVisibleAttributes(model),\n getWritableAttributes(model)\n );\n\n const identifierField = _.has(schema.attributes, 'documentId') ? 'documentId' : 'id';\n return [\n identifierField,\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection","identifierField"],"mappings":"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"}
@@ -4,6 +4,10 @@ var _ = require('lodash');
4
4
  var index = require('../../../utils/index.js');
5
5
  var attributes = require('./attributes.js');
6
6
 
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var ___default = /*#__PURE__*/_interopDefault(_);
10
+
7
11
  const DEFAULT_LIST_LENGTH = 4;
8
12
  const MAX_ROW_SIZE = 12;
9
13
  const isAllowedFieldSize = (type, size)=>{
@@ -27,7 +31,7 @@ async function createDefaultLayouts(schema) {
27
31
  list: createDefaultListLayout(schema),
28
32
  // @ts-expect-error necessary to provide this default layout
29
33
  edit: createDefaultEditLayout(schema),
30
- ..._.pick(_.get(schema, [
34
+ ...___default.default.pick(___default.default.get(schema, [
31
35
  'config',
32
36
  'layouts'
33
37
  ], {}), [
@@ -45,7 +49,7 @@ function createDefaultEditLayout(schema) {
45
49
  return appendToEditLayout([], keys, schema);
46
50
  }
47
51
  /** Synchronisation functions */ function syncLayouts(configuration, schema) {
48
- if (_.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
52
+ if (___default.default.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
49
53
  const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};
50
54
  let cleanList = list.filter((attr)=>attributes.isListable(schema, attr));
51
55
  // TODO V5: remove editRelations
@@ -77,11 +81,11 @@ function createDefaultEditLayout(schema) {
77
81
  }
78
82
  }
79
83
  cleanEdit = appendToEditLayout(cleanEdit, elementsToReAppend, schema);
80
- const newAttributes = _.difference(Object.keys(schema.attributes), Object.keys(configuration.metadatas));
84
+ const newAttributes = ___default.default.difference(Object.keys(schema.attributes), Object.keys(configuration.metadatas));
81
85
  /** Add new attributes where they belong */ if (cleanList.length < DEFAULT_LIST_LENGTH) {
82
86
  // add newAttributes
83
87
  // only add valid listable attributes
84
- cleanList = _.uniq(cleanList.concat(newAttributes.filter((key)=>attributes.isListable(schema, key))).slice(0, DEFAULT_LIST_LENGTH));
88
+ cleanList = ___default.default.uniq(cleanList.concat(newAttributes.filter((key)=>attributes.isListable(schema, key))).slice(0, DEFAULT_LIST_LENGTH));
85
89
  }
86
90
  // add new attributes to edit view
87
91
  const newEditAttributes = newAttributes.filter((key)=>attributes.hasEditableAttribute(schema, key));
@@ -1 +1 @@
1
- {"version":3,"file":"layouts.js","sources":["../../../../../server/src/services/utils/configuration/layouts.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport { isListable, hasEditableAttribute, hasRelationAttribute } from './attributes';\n\nconst DEFAULT_LIST_LENGTH = 4;\nconst MAX_ROW_SIZE = 12;\n\nconst isAllowedFieldSize = (type: any, size: any) => {\n const { getFieldSize } = getService('field-sizes');\n const fieldSize = getFieldSize(type);\n\n // Check if field was locked to another size\n if (!fieldSize.isResizable && size !== fieldSize.default) {\n return false;\n }\n\n // Otherwise allow unless it's bigger than a row\n return size <= MAX_ROW_SIZE;\n};\n\nconst getDefaultFieldSize = (attribute: any) => {\n const { hasFieldSize, getFieldSize } = getService('field-sizes');\n\n // Check if it's a custom field with a custom size and get the default size for the field type\n return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type)\n .default;\n};\n\nasync function createDefaultLayouts(schema: any) {\n return {\n // @ts-expect-error necessary to provide this default layout\n list: createDefaultListLayout(schema),\n // @ts-expect-error necessary to provide this default layout\n edit: createDefaultEditLayout(schema),\n ..._.pick(_.get(schema, ['config', 'layouts'], {}), ['list', 'edit']),\n };\n}\n\nfunction createDefaultListLayout(schema: any) {\n return Object.keys(schema.attributes)\n .filter((name) => isListable(schema, name) && name !== 'documentId')\n .slice(0, DEFAULT_LIST_LENGTH);\n}\n\nconst rowSize = (els: any) => els.reduce((sum: any, el: any) => sum + el.size, 0);\n\nfunction createDefaultEditLayout(schema: any) {\n const keys = Object.keys(schema.attributes).filter((name) => hasEditableAttribute(schema, name));\n\n return appendToEditLayout([], keys, schema);\n}\n\n/** Synchronisation functions */\n\nfunction syncLayouts(configuration: any, schema: any) {\n if (_.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);\n\n const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};\n\n let cleanList = list.filter((attr: any) => isListable(schema, attr));\n\n // TODO V5: remove editRelations\n const cleanEditRelations = editRelations.filter((attr: any) =>\n hasRelationAttribute(schema, attr)\n );\n\n // backward compatibility with when relations were on the side of the layout\n // it migrates the displayed relations to the main edit layout\n const elementsToReAppend = [...cleanEditRelations];\n let cleanEdit: unknown[] = [];\n for (const row of edit) {\n const newRow: unknown[] = [];\n\n for (const el of row) {\n if (!hasEditableAttribute(schema, el.name)) continue;\n\n // Check if the field is a custom field with a custom size.\n // If so, use the custom size instead of the type size\n const { hasFieldSize } = getService('field-sizes');\n const fieldType = hasFieldSize(schema.attributes[el.name].customField)\n ? schema.attributes[el.name].customField\n : schema.attributes[el.name].type;\n\n /* if the type of a field was changed (ex: string -> json) or a new field was added in the schema\n and the new type doesn't allow the size of the previous type, append the field at the end of layouts\n */\n if (!isAllowedFieldSize(fieldType, el.size)) {\n elementsToReAppend.push(el.name);\n continue;\n }\n\n newRow.push(el);\n }\n\n if (newRow.length > 0) {\n cleanEdit.push(newRow);\n }\n }\n\n cleanEdit = appendToEditLayout(cleanEdit as any, elementsToReAppend, schema);\n\n const newAttributes = _.difference(\n Object.keys(schema.attributes),\n Object.keys(configuration.metadatas)\n );\n\n /** Add new attributes where they belong */\n\n if (cleanList.length < DEFAULT_LIST_LENGTH) {\n // add newAttributes\n // only add valid listable attributes\n cleanList = _.uniq(\n cleanList\n .concat(newAttributes.filter((key) => isListable(schema, key)))\n .slice(0, DEFAULT_LIST_LENGTH)\n );\n }\n\n // add new attributes to edit view\n const newEditAttributes = newAttributes.filter((key) => hasEditableAttribute(schema, key));\n\n cleanEdit = appendToEditLayout(cleanEdit, newEditAttributes, schema);\n\n return {\n list: cleanList.length > 0 ? cleanList : createDefaultListLayout(schema),\n edit: cleanEdit.length > 0 ? cleanEdit : createDefaultEditLayout(schema),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/default-param-last\nconst appendToEditLayout = (layout: any = [], keysToAppend: any, schema: any) => {\n if (keysToAppend.length === 0) return layout;\n let currentRowIndex = Math.max(layout.length - 1, 0);\n\n // init currentRow if necessary\n if (!layout[currentRowIndex]) {\n layout[currentRowIndex] = [];\n }\n\n for (const key of keysToAppend) {\n const attribute = schema.attributes[key];\n\n const attributeSize = getDefaultFieldSize(attribute);\n const currenRowSize = rowSize(layout[currentRowIndex]);\n\n if (currenRowSize + attributeSize > MAX_ROW_SIZE) {\n currentRowIndex += 1;\n layout[currentRowIndex] = [];\n }\n\n layout[currentRowIndex].push({\n name: key,\n size: attributeSize,\n });\n }\n\n return layout;\n};\n\nexport { createDefaultLayouts, syncLayouts };\n"],"names":["DEFAULT_LIST_LENGTH","MAX_ROW_SIZE","isAllowedFieldSize","type","size","getFieldSize","getService","fieldSize","isResizable","default","getDefaultFieldSize","attribute","hasFieldSize","customField","createDefaultLayouts","schema","list","createDefaultListLayout","edit","createDefaultEditLayout","_","pick","get","Object","keys","attributes","filter","name","isListable","slice","rowSize","els","reduce","sum","el","hasEditableAttribute","appendToEditLayout","syncLayouts","configuration","isEmpty","layouts","editRelations","cleanList","attr","cleanEditRelations","hasRelationAttribute","elementsToReAppend","cleanEdit","row","newRow","fieldType","push","length","newAttributes","difference","metadatas","uniq","concat","key","newEditAttributes","layout","keysToAppend","currentRowIndex","Math","max","attributeSize","currenRowSize"],"mappings":"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"}
1
+ {"version":3,"file":"layouts.js","sources":["../../../../../server/src/services/utils/configuration/layouts.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport { isListable, hasEditableAttribute, hasRelationAttribute } from './attributes';\n\nconst DEFAULT_LIST_LENGTH = 4;\nconst MAX_ROW_SIZE = 12;\n\nconst isAllowedFieldSize = (type: any, size: any) => {\n const { getFieldSize } = getService('field-sizes');\n const fieldSize = getFieldSize(type);\n\n // Check if field was locked to another size\n if (!fieldSize.isResizable && size !== fieldSize.default) {\n return false;\n }\n\n // Otherwise allow unless it's bigger than a row\n return size <= MAX_ROW_SIZE;\n};\n\nconst getDefaultFieldSize = (attribute: any) => {\n const { hasFieldSize, getFieldSize } = getService('field-sizes');\n\n // Check if it's a custom field with a custom size and get the default size for the field type\n return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type)\n .default;\n};\n\nasync function createDefaultLayouts(schema: any) {\n return {\n // @ts-expect-error necessary to provide this default layout\n list: createDefaultListLayout(schema),\n // @ts-expect-error necessary to provide this default layout\n edit: createDefaultEditLayout(schema),\n ..._.pick(_.get(schema, ['config', 'layouts'], {}), ['list', 'edit']),\n };\n}\n\nfunction createDefaultListLayout(schema: any) {\n return Object.keys(schema.attributes)\n .filter((name) => isListable(schema, name) && name !== 'documentId')\n .slice(0, DEFAULT_LIST_LENGTH);\n}\n\nconst rowSize = (els: any) => els.reduce((sum: any, el: any) => sum + el.size, 0);\n\nfunction createDefaultEditLayout(schema: any) {\n const keys = Object.keys(schema.attributes).filter((name) => hasEditableAttribute(schema, name));\n\n return appendToEditLayout([], keys, schema);\n}\n\n/** Synchronisation functions */\n\nfunction syncLayouts(configuration: any, schema: any) {\n if (_.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);\n\n const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};\n\n let cleanList = list.filter((attr: any) => isListable(schema, attr));\n\n // TODO V5: remove editRelations\n const cleanEditRelations = editRelations.filter((attr: any) =>\n hasRelationAttribute(schema, attr)\n );\n\n // backward compatibility with when relations were on the side of the layout\n // it migrates the displayed relations to the main edit layout\n const elementsToReAppend = [...cleanEditRelations];\n let cleanEdit: unknown[] = [];\n for (const row of edit) {\n const newRow: unknown[] = [];\n\n for (const el of row) {\n if (!hasEditableAttribute(schema, el.name)) continue;\n\n // Check if the field is a custom field with a custom size.\n // If so, use the custom size instead of the type size\n const { hasFieldSize } = getService('field-sizes');\n const fieldType = hasFieldSize(schema.attributes[el.name].customField)\n ? schema.attributes[el.name].customField\n : schema.attributes[el.name].type;\n\n /* if the type of a field was changed (ex: string -> json) or a new field was added in the schema\n and the new type doesn't allow the size of the previous type, append the field at the end of layouts\n */\n if (!isAllowedFieldSize(fieldType, el.size)) {\n elementsToReAppend.push(el.name);\n continue;\n }\n\n newRow.push(el);\n }\n\n if (newRow.length > 0) {\n cleanEdit.push(newRow);\n }\n }\n\n cleanEdit = appendToEditLayout(cleanEdit as any, elementsToReAppend, schema);\n\n const newAttributes = _.difference(\n Object.keys(schema.attributes),\n Object.keys(configuration.metadatas)\n );\n\n /** Add new attributes where they belong */\n\n if (cleanList.length < DEFAULT_LIST_LENGTH) {\n // add newAttributes\n // only add valid listable attributes\n cleanList = _.uniq(\n cleanList\n .concat(newAttributes.filter((key) => isListable(schema, key)))\n .slice(0, DEFAULT_LIST_LENGTH)\n );\n }\n\n // add new attributes to edit view\n const newEditAttributes = newAttributes.filter((key) => hasEditableAttribute(schema, key));\n\n cleanEdit = appendToEditLayout(cleanEdit, newEditAttributes, schema);\n\n return {\n list: cleanList.length > 0 ? cleanList : createDefaultListLayout(schema),\n edit: cleanEdit.length > 0 ? cleanEdit : createDefaultEditLayout(schema),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/default-param-last\nconst appendToEditLayout = (layout: any = [], keysToAppend: any, schema: any) => {\n if (keysToAppend.length === 0) return layout;\n let currentRowIndex = Math.max(layout.length - 1, 0);\n\n // init currentRow if necessary\n if (!layout[currentRowIndex]) {\n layout[currentRowIndex] = [];\n }\n\n for (const key of keysToAppend) {\n const attribute = schema.attributes[key];\n\n const attributeSize = getDefaultFieldSize(attribute);\n const currenRowSize = rowSize(layout[currentRowIndex]);\n\n if (currenRowSize + attributeSize > MAX_ROW_SIZE) {\n currentRowIndex += 1;\n layout[currentRowIndex] = [];\n }\n\n layout[currentRowIndex].push({\n name: key,\n size: attributeSize,\n });\n }\n\n return layout;\n};\n\nexport { createDefaultLayouts, syncLayouts };\n"],"names":["DEFAULT_LIST_LENGTH","MAX_ROW_SIZE","isAllowedFieldSize","type","size","getFieldSize","getService","fieldSize","isResizable","default","getDefaultFieldSize","attribute","hasFieldSize","customField","createDefaultLayouts","schema","list","createDefaultListLayout","edit","createDefaultEditLayout","_","pick","get","Object","keys","attributes","filter","name","isListable","slice","rowSize","els","reduce","sum","el","hasEditableAttribute","appendToEditLayout","syncLayouts","configuration","isEmpty","layouts","editRelations","cleanList","attr","cleanEditRelations","hasRelationAttribute","elementsToReAppend","cleanEdit","row","newRow","fieldType","push","length","newAttributes","difference","metadatas","uniq","concat","key","newEditAttributes","layout","keysToAppend","currentRowIndex","Math","max","attributeSize","currenRowSize"],"mappings":"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"}
@@ -4,6 +4,10 @@ var _ = require('lodash');
4
4
  var index = require('../../../utils/index.js');
5
5
  var attributes = require('./attributes.js');
6
6
 
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var ___default = /*#__PURE__*/_interopDefault(_);
10
+
7
11
  function createDefaultMetadatas(schema) {
8
12
  return {
9
13
  ...Object.keys(schema.attributes).reduce((acc, name)=>{
@@ -44,7 +48,7 @@ function createDefaultMetadata(schema, name) {
44
48
  edit.mainField = attributes.getDefaultMainField(targetSchema);
45
49
  }
46
50
  }
47
- _.assign(edit, _.pick(_.get(schema, [
51
+ ___default.default.assign(edit, ___default.default.pick(___default.default.get(schema, [
48
52
  'config',
49
53
  'metadatas',
50
54
  name,
@@ -64,7 +68,7 @@ function createDefaultMetadata(schema, name) {
64
68
  searchable: attributes.isSearchable(schema, name),
65
69
  // @ts-expect-error we need to specify these properties
66
70
  sortable: attributes.isSortable(schema, name),
67
- ..._.pick(_.get(schema, [
71
+ ...___default.default.pick(___default.default.get(schema, [
68
72
  'config',
69
73
  'metadatas',
70
74
  name,
@@ -82,13 +86,13 @@ function createDefaultMetadata(schema, name) {
82
86
  }
83
87
  /** Synchronisation functions */ async function syncMetadatas(configuration, schema) {
84
88
  // clear all keys that do not exist anymore
85
- if (_.isEmpty(configuration.metadatas)) {
89
+ if (___default.default.isEmpty(configuration.metadatas)) {
86
90
  return createDefaultMetadatas(schema);
87
91
  }
88
92
  // remove old keys
89
- const metasWithValidKeys = _.pick(configuration.metadatas, Object.keys(schema.attributes));
93
+ const metasWithValidKeys = ___default.default.pick(configuration.metadatas, Object.keys(schema.attributes));
90
94
  // add new keys and missing fields
91
- const metasWithDefaults = _.merge({}, createDefaultMetadatas(schema), metasWithValidKeys);
95
+ const metasWithDefaults = ___default.default.merge({}, createDefaultMetadatas(schema), metasWithValidKeys);
92
96
  // clear the invalid mainFields
93
97
  const updatedMetas = Object.keys(metasWithDefaults).reduce((acc, key)=>{
94
98
  const { edit, list } = metasWithDefaults[key];
@@ -99,30 +103,30 @@ function createDefaultMetadata(schema, name) {
99
103
  };
100
104
  // update sortable attr
101
105
  if (list.sortable && !attributes.isSortable(schema, key)) {
102
- _.set(updatedMeta, [
106
+ ___default.default.set(updatedMeta, [
103
107
  'list',
104
108
  'sortable'
105
109
  ], false);
106
- _.set(acc, [
110
+ ___default.default.set(acc, [
107
111
  key
108
112
  ], updatedMeta);
109
113
  }
110
114
  if (list.searchable && !attributes.isSearchable(schema, key)) {
111
- _.set(updatedMeta, [
115
+ ___default.default.set(updatedMeta, [
112
116
  'list',
113
117
  'searchable'
114
118
  ], false);
115
- _.set(acc, [
119
+ ___default.default.set(acc, [
116
120
  key
117
121
  ], updatedMeta);
118
122
  }
119
- if (!_.has(edit, 'mainField')) return acc;
123
+ if (!___default.default.has(edit, 'mainField')) return acc;
120
124
  // remove mainField if the attribute is not a relation anymore
121
125
  if (!attributes.isRelation(attr)) {
122
- _.set(updatedMeta, 'edit', _.omit(edit, [
126
+ ___default.default.set(updatedMeta, 'edit', ___default.default.omit(edit, [
123
127
  'mainField'
124
128
  ]));
125
- _.set(acc, [
129
+ ___default.default.set(acc, [
126
130
  key
127
131
  ], updatedMeta);
128
132
  return acc;
@@ -133,18 +137,18 @@ function createDefaultMetadata(schema, name) {
133
137
  const targetSchema = getTargetSchema(attr.targetModel);
134
138
  if (!targetSchema) return acc;
135
139
  if (!attributes.isSortable(targetSchema, edit.mainField) && !attributes.isListable(targetSchema, edit.mainField)) {
136
- _.set(updatedMeta, [
140
+ ___default.default.set(updatedMeta, [
137
141
  'edit',
138
142
  'mainField'
139
143
  ], attributes.getDefaultMainField(targetSchema));
140
- _.set(acc, [
144
+ ___default.default.set(acc, [
141
145
  key
142
146
  ], updatedMeta);
143
147
  return acc;
144
148
  }
145
149
  return acc;
146
150
  }, {});
147
- return _.assign(metasWithDefaults, updatedMetas);
151
+ return ___default.default.assign(metasWithDefaults, updatedMetas);
148
152
  }
149
153
  const getTargetSchema = (targetModel)=>{
150
154
  return index.getService('content-types').findContentType(targetModel);
@@ -1 +1 @@
1
- {"version":3,"file":"metadatas.js","sources":["../../../../../server/src/services/utils/configuration/metadatas.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport {\n isSortable,\n isSearchable,\n isVisible,\n isListable,\n isRelation,\n getDefaultMainField,\n} from './attributes';\n\nfunction createDefaultMetadatas(schema: any) {\n return {\n ...Object.keys(schema.attributes).reduce((acc: any, name) => {\n acc[name] = createDefaultMetadata(schema, name);\n return acc;\n }, {}),\n id: {\n edit: {},\n list: {\n label: 'id',\n searchable: true,\n sortable: true,\n },\n },\n documentId: {\n edit: {},\n list: {\n label: 'documentId',\n searchable: true,\n sortable: true,\n },\n },\n };\n}\n\nfunction createDefaultMetadata(schema: any, name: any) {\n const edit = {\n label: name,\n description: '',\n placeholder: '',\n visible: isVisible(schema, name),\n editable: true,\n } as any;\n\n const fieldAttributes = schema.attributes[name];\n if (isRelation(fieldAttributes)) {\n const { targetModel } = fieldAttributes;\n\n const targetSchema = getTargetSchema(targetModel);\n\n if (targetSchema) {\n edit.mainField = getDefaultMainField(targetSchema);\n }\n }\n\n _.assign(\n edit,\n _.pick(_.get(schema, ['config', 'metadatas', name, 'edit'], {}), [\n 'label',\n 'description',\n 'placeholder',\n 'visible',\n 'editable',\n 'mainField',\n ])\n );\n\n const list = {\n // @ts-expect-error we need to specify these properties\n label: name,\n // @ts-expect-error we need to specify these properties\n searchable: isSearchable(schema, name),\n // @ts-expect-error we need to specify these properties\n sortable: isSortable(schema, name),\n ..._.pick(_.get(schema, ['config', 'metadatas', name, 'list'], {}), [\n 'label',\n 'searchable',\n 'sortable',\n ]),\n };\n\n return { edit, list };\n}\n\n/** Synchronisation functions */\n\nasync function syncMetadatas(configuration: any, schema: any) {\n // clear all keys that do not exist anymore\n if (_.isEmpty(configuration.metadatas)) {\n return createDefaultMetadatas(schema);\n }\n\n // remove old keys\n const metasWithValidKeys = _.pick(configuration.metadatas, Object.keys(schema.attributes));\n\n // add new keys and missing fields\n const metasWithDefaults = _.merge({}, createDefaultMetadatas(schema), metasWithValidKeys);\n\n // clear the invalid mainFields\n const updatedMetas = Object.keys(metasWithDefaults).reduce((acc, key) => {\n const { edit, list } = metasWithDefaults[key];\n const attr = schema.attributes[key];\n\n const updatedMeta = { edit, list };\n\n // update sortable attr\n if (list.sortable && !isSortable(schema, key)) {\n _.set(updatedMeta, ['list', 'sortable'], false);\n _.set(acc, [key], updatedMeta);\n }\n\n if (list.searchable && !isSearchable(schema, key)) {\n _.set(updatedMeta, ['list', 'searchable'], false);\n _.set(acc, [key], updatedMeta);\n }\n\n if (!_.has(edit, 'mainField')) return acc;\n\n // remove mainField if the attribute is not a relation anymore\n if (!isRelation(attr)) {\n _.set(updatedMeta, 'edit', _.omit(edit, ['mainField']));\n _.set(acc, [key], updatedMeta);\n return acc;\n }\n\n // if the mainField is id you can keep it\n if (edit.mainField === 'id') return acc;\n\n // check the mainField in the targetModel\n const targetSchema = getTargetSchema(attr.targetModel);\n\n if (!targetSchema) return acc;\n\n if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {\n _.set(updatedMeta, ['edit', 'mainField'], getDefaultMainField(targetSchema));\n _.set(acc, [key], updatedMeta);\n return acc;\n }\n\n return acc;\n }, {});\n\n return _.assign(metasWithDefaults, updatedMetas);\n}\n\nconst getTargetSchema = (targetModel: any) => {\n return getService('content-types').findContentType(targetModel);\n};\n\nexport { createDefaultMetadatas, syncMetadatas };\n"],"names":["createDefaultMetadatas","schema","Object","keys","attributes","reduce","acc","name","createDefaultMetadata","id","edit","list","label","searchable","sortable","documentId","description","placeholder","visible","isVisible","editable","fieldAttributes","isRelation","targetModel","targetSchema","getTargetSchema","mainField","getDefaultMainField","_","assign","pick","get","isSearchable","isSortable","syncMetadatas","configuration","isEmpty","metadatas","metasWithValidKeys","metasWithDefaults","merge","updatedMetas","key","attr","updatedMeta","set","has","omit","isListable","getService","findContentType"],"mappings":"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"}
1
+ {"version":3,"file":"metadatas.js","sources":["../../../../../server/src/services/utils/configuration/metadatas.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getService } from '../../../utils';\nimport {\n isSortable,\n isSearchable,\n isVisible,\n isListable,\n isRelation,\n getDefaultMainField,\n} from './attributes';\n\nfunction createDefaultMetadatas(schema: any) {\n return {\n ...Object.keys(schema.attributes).reduce((acc: any, name) => {\n acc[name] = createDefaultMetadata(schema, name);\n return acc;\n }, {}),\n id: {\n edit: {},\n list: {\n label: 'id',\n searchable: true,\n sortable: true,\n },\n },\n documentId: {\n edit: {},\n list: {\n label: 'documentId',\n searchable: true,\n sortable: true,\n },\n },\n };\n}\n\nfunction createDefaultMetadata(schema: any, name: any) {\n const edit = {\n label: name,\n description: '',\n placeholder: '',\n visible: isVisible(schema, name),\n editable: true,\n } as any;\n\n const fieldAttributes = schema.attributes[name];\n if (isRelation(fieldAttributes)) {\n const { targetModel } = fieldAttributes;\n\n const targetSchema = getTargetSchema(targetModel);\n\n if (targetSchema) {\n edit.mainField = getDefaultMainField(targetSchema);\n }\n }\n\n _.assign(\n edit,\n _.pick(_.get(schema, ['config', 'metadatas', name, 'edit'], {}), [\n 'label',\n 'description',\n 'placeholder',\n 'visible',\n 'editable',\n 'mainField',\n ])\n );\n\n const list = {\n // @ts-expect-error we need to specify these properties\n label: name,\n // @ts-expect-error we need to specify these properties\n searchable: isSearchable(schema, name),\n // @ts-expect-error we need to specify these properties\n sortable: isSortable(schema, name),\n ..._.pick(_.get(schema, ['config', 'metadatas', name, 'list'], {}), [\n 'label',\n 'searchable',\n 'sortable',\n ]),\n };\n\n return { edit, list };\n}\n\n/** Synchronisation functions */\n\nasync function syncMetadatas(configuration: any, schema: any) {\n // clear all keys that do not exist anymore\n if (_.isEmpty(configuration.metadatas)) {\n return createDefaultMetadatas(schema);\n }\n\n // remove old keys\n const metasWithValidKeys = _.pick(configuration.metadatas, Object.keys(schema.attributes));\n\n // add new keys and missing fields\n const metasWithDefaults = _.merge({}, createDefaultMetadatas(schema), metasWithValidKeys);\n\n // clear the invalid mainFields\n const updatedMetas = Object.keys(metasWithDefaults).reduce((acc, key) => {\n const { edit, list } = metasWithDefaults[key];\n const attr = schema.attributes[key];\n\n const updatedMeta = { edit, list };\n\n // update sortable attr\n if (list.sortable && !isSortable(schema, key)) {\n _.set(updatedMeta, ['list', 'sortable'], false);\n _.set(acc, [key], updatedMeta);\n }\n\n if (list.searchable && !isSearchable(schema, key)) {\n _.set(updatedMeta, ['list', 'searchable'], false);\n _.set(acc, [key], updatedMeta);\n }\n\n if (!_.has(edit, 'mainField')) return acc;\n\n // remove mainField if the attribute is not a relation anymore\n if (!isRelation(attr)) {\n _.set(updatedMeta, 'edit', _.omit(edit, ['mainField']));\n _.set(acc, [key], updatedMeta);\n return acc;\n }\n\n // if the mainField is id you can keep it\n if (edit.mainField === 'id') return acc;\n\n // check the mainField in the targetModel\n const targetSchema = getTargetSchema(attr.targetModel);\n\n if (!targetSchema) return acc;\n\n if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {\n _.set(updatedMeta, ['edit', 'mainField'], getDefaultMainField(targetSchema));\n _.set(acc, [key], updatedMeta);\n return acc;\n }\n\n return acc;\n }, {});\n\n return _.assign(metasWithDefaults, updatedMetas);\n}\n\nconst getTargetSchema = (targetModel: any) => {\n return getService('content-types').findContentType(targetModel);\n};\n\nexport { createDefaultMetadatas, syncMetadatas };\n"],"names":["createDefaultMetadatas","schema","Object","keys","attributes","reduce","acc","name","createDefaultMetadata","id","edit","list","label","searchable","sortable","documentId","description","placeholder","visible","isVisible","editable","fieldAttributes","isRelation","targetModel","targetSchema","getTargetSchema","mainField","getDefaultMainField","_","assign","pick","get","isSearchable","isSortable","syncMetadatas","configuration","isEmpty","metadatas","metasWithValidKeys","metasWithDefaults","merge","updatedMetas","key","attr","updatedMeta","set","has","omit","isListable","getService","findContentType"],"mappings":"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"}
@@ -5,6 +5,10 @@ var strapiUtils = require('@strapi/utils');
5
5
  var qs = require('qs');
6
6
  var attributes = require('./attributes.js');
7
7
 
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var qs__default = /*#__PURE__*/_interopDefault(qs);
11
+
8
12
  /** General settings */ const DEFAULT_SETTINGS = {
9
13
  bulkable: true,
10
14
  filterable: true,
@@ -27,7 +31,7 @@ const getModelSettings = fp.pipe([
27
31
  fp.pick(settingsFields)
28
32
  ]);
29
33
  async function isValidDefaultSort(schema, value) {
30
- const parsedValue = qs.parse(value);
34
+ const parsedValue = qs__default.default.parse(value);
31
35
  const omitNonSortableAttributes = ({ schema, key }, { remove })=>{
32
36
  const sortableAttributes = attributes.getSortableAttributes(schema);
33
37
  if (!sortableAttributes.includes(key)) {
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sources":["../../../../../server/src/services/utils/configuration/settings.ts"],"sourcesContent":["import { isEmpty, pick, pipe, propOr, isEqual } from 'lodash/fp';\nimport { traverse } from '@strapi/utils';\nimport qs from 'qs';\nimport { isSortable, getDefaultMainField, getSortableAttributes } from './attributes';\n\n/** General settings */\nconst DEFAULT_SETTINGS = {\n bulkable: true,\n filterable: true,\n searchable: true,\n pageSize: 10,\n relationOpenMode: 'modal' as const,\n};\n\nconst settingsFields = [\n 'searchable',\n 'filterable',\n 'bulkable',\n 'pageSize',\n 'mainField',\n 'defaultSortBy',\n 'defaultSortOrder',\n 'relationOpenMode',\n];\n\nconst getModelSettings = pipe([propOr({}, 'config.settings'), pick(settingsFields)]);\n\nasync function isValidDefaultSort(schema: any, value: any) {\n const parsedValue = qs.parse(value);\n\n const omitNonSortableAttributes = ({ schema, key }: any, { remove }: any) => {\n const sortableAttributes = getSortableAttributes(schema);\n if (!sortableAttributes.includes(key)) {\n remove(key);\n }\n };\n\n const sanitizedValue = await traverse.traverseQuerySort(\n omitNonSortableAttributes,\n { schema, getModel: strapi.getModel.bind(strapi) },\n parsedValue\n );\n\n // If any of the keys has been removed, the sort attribute is not valid\n return isEqual(parsedValue, sanitizedValue);\n}\n\nconst createDefaultSettings = async (schema: any) => {\n const defaultField = getDefaultMainField(schema);\n\n return {\n ...DEFAULT_SETTINGS,\n mainField: defaultField,\n defaultSortBy: defaultField,\n defaultSortOrder: 'ASC',\n ...getModelSettings(schema),\n };\n};\n\nconst syncSettings = async (configuration: any, schema: any) => {\n if (isEmpty(configuration.settings)) return createDefaultSettings(schema);\n\n const defaultField = getDefaultMainField(schema);\n\n const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};\n\n return {\n ...configuration.settings,\n mainField: isSortable(schema, mainField) ? mainField : defaultField,\n defaultSortBy: (await isValidDefaultSort(schema, defaultSortBy)) ? defaultSortBy : defaultField,\n };\n};\n\nexport { isValidDefaultSort, createDefaultSettings, syncSettings };\n"],"names":["DEFAULT_SETTINGS","bulkable","filterable","searchable","pageSize","relationOpenMode","settingsFields","getModelSettings","pipe","propOr","pick","isValidDefaultSort","schema","value","parsedValue","qs","parse","omitNonSortableAttributes","key","remove","sortableAttributes","getSortableAttributes","includes","sanitizedValue","traverse","traverseQuerySort","getModel","strapi","bind","isEqual","createDefaultSettings","defaultField","getDefaultMainField","mainField","defaultSortBy","defaultSortOrder","syncSettings","configuration","isEmpty","settings","isSortable"],"mappings":";;;;;;;AAKA,wBACA,MAAMA,gBAAAA,GAAmB;IACvBC,QAAAA,EAAU,IAAA;IACVC,UAAAA,EAAY,IAAA;IACZC,UAAAA,EAAY,IAAA;IACZC,QAAAA,EAAU,EAAA;IACVC,gBAAAA,EAAkB;AACpB,CAAA;AAEA,MAAMC,cAAAA,GAAiB;AACrB,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,eAAA;AACA,IAAA,kBAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,mBAAmBC,OAAAA,CAAK;AAACC,IAAAA,SAAAA,CAAO,EAAC,EAAG,iBAAA,CAAA;IAAoBC,OAAAA,CAAKJ,cAAAA;AAAgB,CAAA,CAAA;AAEnF,eAAeK,kBAAAA,CAAmBC,MAAW,EAAEC,KAAU,EAAA;IACvD,MAAMC,WAAAA,GAAcC,EAAAA,CAAGC,KAAK,CAACH,KAAAA,CAAAA;IAE7B,MAAMI,yBAAAA,GAA4B,CAAC,EAAEL,MAAM,EAAEM,GAAG,EAAO,EAAE,EAAEC,MAAM,EAAO,GAAA;AACtE,QAAA,MAAMC,qBAAqBC,gCAAAA,CAAsBT,MAAAA,CAAAA;AACjD,QAAA,IAAI,CAACQ,kBAAAA,CAAmBE,QAAQ,CAACJ,GAAAA,CAAAA,EAAM;YACrCC,MAAAA,CAAOD,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMK,cAAAA,GAAiB,MAAMC,oBAAAA,CAASC,iBAAiB,CACrDR,yBAAAA,EACA;AAAEL,QAAAA,MAAAA;AAAQc,QAAAA,QAAAA,EAAUC,MAAAA,CAAOD,QAAQ,CAACE,IAAI,CAACD,MAAAA;KAAQ,EACjDb,WAAAA,CAAAA;;AAIF,IAAA,OAAOe,WAAQf,WAAAA,EAAaS,cAAAA,CAAAA;AAC9B;AAEA,MAAMO,wBAAwB,OAAOlB,MAAAA,GAAAA;AACnC,IAAA,MAAMmB,eAAeC,8BAAAA,CAAoBpB,MAAAA,CAAAA;IAEzC,OAAO;AACL,QAAA,GAAGZ,gBAAgB;QACnBiC,SAAAA,EAAWF,YAAAA;QACXG,aAAAA,EAAeH,YAAAA;QACfI,gBAAAA,EAAkB,KAAA;AAClB,QAAA,GAAG5B,iBAAiBK,MAAAA;AACtB,KAAA;AACF;AAEA,MAAMwB,YAAAA,GAAe,OAAOC,aAAAA,EAAoBzB,MAAAA,GAAAA;AAC9C,IAAA,IAAI0B,UAAAA,CAAQD,aAAAA,CAAcE,QAAQ,CAAA,EAAG,OAAOT,qBAAAA,CAAsBlB,MAAAA,CAAAA;AAElE,IAAA,MAAMmB,eAAeC,8BAAAA,CAAoBpB,MAAAA,CAAAA;IAEzC,MAAM,EAAEqB,SAAAA,GAAYF,YAAY,EAAEG,aAAAA,GAAgBH,YAAY,EAAE,GAAGM,aAAAA,CAAcE,QAAQ,IAAI,EAAC;IAE9F,OAAO;AACL,QAAA,GAAGF,cAAcE,QAAQ;QACzBN,SAAAA,EAAWO,qBAAAA,CAAW5B,MAAAA,EAAQqB,SAAAA,CAAAA,GAAaA,SAAAA,GAAYF,YAAAA;AACvDG,QAAAA,aAAAA,EAAe,MAAOvB,kBAAAA,CAAmBC,MAAAA,EAAQsB,iBAAkBA,aAAAA,GAAgBH;AACrF,KAAA;AACF;;;;;;"}
1
+ {"version":3,"file":"settings.js","sources":["../../../../../server/src/services/utils/configuration/settings.ts"],"sourcesContent":["import { isEmpty, pick, pipe, propOr, isEqual } from 'lodash/fp';\nimport { traverse } from '@strapi/utils';\nimport qs from 'qs';\nimport { isSortable, getDefaultMainField, getSortableAttributes } from './attributes';\n\n/** General settings */\nconst DEFAULT_SETTINGS = {\n bulkable: true,\n filterable: true,\n searchable: true,\n pageSize: 10,\n relationOpenMode: 'modal' as const,\n};\n\nconst settingsFields = [\n 'searchable',\n 'filterable',\n 'bulkable',\n 'pageSize',\n 'mainField',\n 'defaultSortBy',\n 'defaultSortOrder',\n 'relationOpenMode',\n];\n\nconst getModelSettings = pipe([propOr({}, 'config.settings'), pick(settingsFields)]);\n\nasync function isValidDefaultSort(schema: any, value: any) {\n const parsedValue = qs.parse(value);\n\n const omitNonSortableAttributes = ({ schema, key }: any, { remove }: any) => {\n const sortableAttributes = getSortableAttributes(schema);\n if (!sortableAttributes.includes(key)) {\n remove(key);\n }\n };\n\n const sanitizedValue = await traverse.traverseQuerySort(\n omitNonSortableAttributes,\n { schema, getModel: strapi.getModel.bind(strapi) },\n parsedValue\n );\n\n // If any of the keys has been removed, the sort attribute is not valid\n return isEqual(parsedValue, sanitizedValue);\n}\n\nconst createDefaultSettings = async (schema: any) => {\n const defaultField = getDefaultMainField(schema);\n\n return {\n ...DEFAULT_SETTINGS,\n mainField: defaultField,\n defaultSortBy: defaultField,\n defaultSortOrder: 'ASC',\n ...getModelSettings(schema),\n };\n};\n\nconst syncSettings = async (configuration: any, schema: any) => {\n if (isEmpty(configuration.settings)) return createDefaultSettings(schema);\n\n const defaultField = getDefaultMainField(schema);\n\n const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};\n\n return {\n ...configuration.settings,\n mainField: isSortable(schema, mainField) ? mainField : defaultField,\n defaultSortBy: (await isValidDefaultSort(schema, defaultSortBy)) ? defaultSortBy : defaultField,\n };\n};\n\nexport { isValidDefaultSort, createDefaultSettings, syncSettings };\n"],"names":["DEFAULT_SETTINGS","bulkable","filterable","searchable","pageSize","relationOpenMode","settingsFields","getModelSettings","pipe","propOr","pick","isValidDefaultSort","schema","value","parsedValue","qs","parse","omitNonSortableAttributes","key","remove","sortableAttributes","getSortableAttributes","includes","sanitizedValue","traverse","traverseQuerySort","getModel","strapi","bind","isEqual","createDefaultSettings","defaultField","getDefaultMainField","mainField","defaultSortBy","defaultSortOrder","syncSettings","configuration","isEmpty","settings","isSortable"],"mappings":";;;;;;;;;;;AAKA,wBACA,MAAMA,gBAAAA,GAAmB;IACvBC,QAAAA,EAAU,IAAA;IACVC,UAAAA,EAAY,IAAA;IACZC,UAAAA,EAAY,IAAA;IACZC,QAAAA,EAAU,EAAA;IACVC,gBAAAA,EAAkB;AACpB,CAAA;AAEA,MAAMC,cAAAA,GAAiB;AACrB,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,eAAA;AACA,IAAA,kBAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,mBAAmBC,OAAAA,CAAK;AAACC,IAAAA,SAAAA,CAAO,EAAC,EAAG,iBAAA,CAAA;IAAoBC,OAAAA,CAAKJ,cAAAA;AAAgB,CAAA,CAAA;AAEnF,eAAeK,kBAAAA,CAAmBC,MAAW,EAAEC,KAAU,EAAA;IACvD,MAAMC,WAAAA,GAAcC,mBAAAA,CAAGC,KAAK,CAACH,KAAAA,CAAAA;IAE7B,MAAMI,yBAAAA,GAA4B,CAAC,EAAEL,MAAM,EAAEM,GAAG,EAAO,EAAE,EAAEC,MAAM,EAAO,GAAA;AACtE,QAAA,MAAMC,qBAAqBC,gCAAAA,CAAsBT,MAAAA,CAAAA;AACjD,QAAA,IAAI,CAACQ,kBAAAA,CAAmBE,QAAQ,CAACJ,GAAAA,CAAAA,EAAM;YACrCC,MAAAA,CAAOD,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMK,cAAAA,GAAiB,MAAMC,oBAAAA,CAASC,iBAAiB,CACrDR,yBAAAA,EACA;AAAEL,QAAAA,MAAAA;AAAQc,QAAAA,QAAAA,EAAUC,MAAAA,CAAOD,QAAQ,CAACE,IAAI,CAACD,MAAAA;KAAQ,EACjDb,WAAAA,CAAAA;;AAIF,IAAA,OAAOe,WAAQf,WAAAA,EAAaS,cAAAA,CAAAA;AAC9B;AAEA,MAAMO,wBAAwB,OAAOlB,MAAAA,GAAAA;AACnC,IAAA,MAAMmB,eAAeC,8BAAAA,CAAoBpB,MAAAA,CAAAA;IAEzC,OAAO;AACL,QAAA,GAAGZ,gBAAgB;QACnBiC,SAAAA,EAAWF,YAAAA;QACXG,aAAAA,EAAeH,YAAAA;QACfI,gBAAAA,EAAkB,KAAA;AAClB,QAAA,GAAG5B,iBAAiBK,MAAAA;AACtB,KAAA;AACF;AAEA,MAAMwB,YAAAA,GAAe,OAAOC,aAAAA,EAAoBzB,MAAAA,GAAAA;AAC9C,IAAA,IAAI0B,UAAAA,CAAQD,aAAAA,CAAcE,QAAQ,CAAA,EAAG,OAAOT,qBAAAA,CAAsBlB,MAAAA,CAAAA;AAElE,IAAA,MAAMmB,eAAeC,8BAAAA,CAAoBpB,MAAAA,CAAAA;IAEzC,MAAM,EAAEqB,SAAAA,GAAYF,YAAY,EAAEG,aAAAA,GAAgBH,YAAY,EAAE,GAAGM,aAAAA,CAAcE,QAAQ,IAAI,EAAC;IAE9F,OAAO;AACL,QAAA,GAAGF,cAAcE,QAAQ;QACzBN,SAAAA,EAAWO,qBAAAA,CAAW5B,MAAAA,EAAQqB,SAAAA,CAAAA,GAAaA,SAAAA,GAAYF,YAAAA;AACvDG,QAAAA,aAAAA,EAAe,MAAOvB,kBAAAA,CAAmBC,MAAAA,EAAQsB,iBAAkBA,aAAAA,GAAgBH;AACrF,KAAA;AACF;;;;;;"}
@@ -3,7 +3,11 @@
3
3
  var fp = require('lodash/fp');
4
4
  var strapiUtils = require('@strapi/utils');
5
5
 
6
- const { isVisibleAttribute, hasDraftAndPublish } = strapiUtils.contentTypes;
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var strapiUtils__default = /*#__PURE__*/_interopDefault(strapiUtils);
9
+
10
+ const { isVisibleAttribute, hasDraftAndPublish } = strapiUtils__default.default.contentTypes;
7
11
  /**
8
12
  * sumDraftCounts works recursively on the attributes of a model counting the
9
13
  * number of draft relations