@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
@@ -0,0 +1,321 @@
1
+ const DEFAULT_RESPONSE_SETTINGS = {
2
+ bulkable: true,
3
+ filterable: true,
4
+ searchable: true,
5
+ pageSize: 10,
6
+ mainField: 'id',
7
+ defaultSortBy: '',
8
+ defaultSortOrder: 'ASC'
9
+ };
10
+ const isRecord = (value)=>{
11
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
12
+ };
13
+ const warnOnceInDevelopment = (()=>{
14
+ const warnings = new Set();
15
+ return (message)=>{
16
+ if (process.env.NODE_ENV !== 'development' || warnings.has(message)) {
17
+ return;
18
+ }
19
+ warnings.add(message);
20
+ console.warn(`[Content Manager] ${message}`);
21
+ };
22
+ })();
23
+ const normalizeResponseSettings = (settings, path)=>{
24
+ if (!isRecord(settings)) {
25
+ warnOnceInDevelopment(`Received malformed settings at "${path}". Falling back to defaults.`);
26
+ }
27
+ return {
28
+ ...DEFAULT_RESPONSE_SETTINGS,
29
+ ...isRecord(settings) ? settings : {}
30
+ };
31
+ };
32
+ const normalizeResponseMetadatas = (metadatas, path)=>{
33
+ if (!isRecord(metadatas)) {
34
+ warnOnceInDevelopment(`Received malformed metadatas at "${path}". Falling back to empty.`);
35
+ return {};
36
+ }
37
+ return Object.entries(metadatas).reduce((acc, [name, metadata])=>{
38
+ const metadataRecord = isRecord(metadata) ? metadata : {};
39
+ if (!isRecord(metadata)) {
40
+ warnOnceInDevelopment(`Received malformed metadata for "${path}.${name}". Repairing entry.`);
41
+ }
42
+ if (!isRecord(metadataRecord.edit)) {
43
+ warnOnceInDevelopment(`Received malformed edit metadata for "${path}.${name}". Falling back to empty.`);
44
+ }
45
+ if (!isRecord(metadataRecord.list)) {
46
+ warnOnceInDevelopment(`Received malformed list metadata for "${path}.${name}". Falling back to empty.`);
47
+ }
48
+ acc[name] = {
49
+ edit: isRecord(metadataRecord.edit) ? metadataRecord.edit : {},
50
+ list: isRecord(metadataRecord.list) ? metadataRecord.list : {}
51
+ };
52
+ return acc;
53
+ }, {});
54
+ };
55
+ const normalizeResponseLayouts = (layouts, path)=>{
56
+ if (!isRecord(layouts)) {
57
+ warnOnceInDevelopment(`Received malformed layouts at "${path}". Falling back to empty.`);
58
+ return {
59
+ edit: [],
60
+ list: []
61
+ };
62
+ }
63
+ if (!Array.isArray(layouts.edit)) {
64
+ warnOnceInDevelopment(`Received malformed edit layout at "${path}". Falling back to empty.`);
65
+ }
66
+ if (!Array.isArray(layouts.list)) {
67
+ warnOnceInDevelopment(`Received malformed list layout at "${path}". Falling back to empty.`);
68
+ }
69
+ return {
70
+ edit: Array.isArray(layouts.edit) ? layouts.edit.map((row, rowIndex)=>{
71
+ if (!Array.isArray(row)) {
72
+ warnOnceInDevelopment(`Dropped malformed edit layout row "${path}.edit.${rowIndex}".`);
73
+ return [];
74
+ }
75
+ return row.filter((field, fieldIndex)=>{
76
+ const isValidField = isRecord(field) && typeof field.name === 'string' && typeof field.size === 'number';
77
+ if (!isValidField) {
78
+ warnOnceInDevelopment(`Dropped malformed edit layout field "${path}.edit.${rowIndex}.${fieldIndex}".`);
79
+ }
80
+ return isValidField;
81
+ });
82
+ }) : [],
83
+ list: Array.isArray(layouts.list) ? layouts.list.filter((field, index)=>{
84
+ const isValidField = typeof field === 'string';
85
+ if (!isValidField) {
86
+ warnOnceInDevelopment(`Dropped malformed list layout field "${path}.list.${index}".`);
87
+ }
88
+ return isValidField;
89
+ }) : []
90
+ };
91
+ };
92
+ const normalizeConfigurationResponse = (configuration, uid, path = uid ?? 'configuration')=>{
93
+ if (!isRecord(configuration)) {
94
+ warnOnceInDevelopment(`Received malformed configuration at "${path}". Repairing entry.`);
95
+ }
96
+ const configurationRecord = isRecord(configuration) ? configuration : {};
97
+ return {
98
+ ...configurationRecord,
99
+ ...uid ? {
100
+ uid
101
+ } : {},
102
+ settings: normalizeResponseSettings(configurationRecord.settings, `${path}.settings`),
103
+ metadatas: normalizeResponseMetadatas(configurationRecord.metadatas, `${path}.metadatas`),
104
+ layouts: normalizeResponseLayouts(configurationRecord.layouts, `${path}.layouts`)
105
+ };
106
+ };
107
+ const normalizeComponentsRecord = (components)=>{
108
+ if (!isRecord(components)) {
109
+ warnOnceInDevelopment('Received malformed component configuration record. Falling back to empty.');
110
+ return {};
111
+ }
112
+ return Object.entries(components).reduce((acc, [uid, configuration])=>{
113
+ acc[uid] = normalizeConfigurationResponse(configuration, uid, `components.${uid}`);
114
+ return acc;
115
+ }, {});
116
+ };
117
+ const normalizeContentTypeConfigurationResponse = (data, uid)=>{
118
+ if (!isRecord(data)) {
119
+ warnOnceInDevelopment('Received malformed content-type configuration response. Repairing data.');
120
+ }
121
+ const dataRecord = isRecord(data) ? data : {};
122
+ return {
123
+ contentType: normalizeConfigurationResponse(dataRecord.contentType, uid, 'contentType'),
124
+ components: normalizeComponentsRecord(dataRecord.components)
125
+ };
126
+ };
127
+ const normalizeContentTypeConfigurationUpdateResponse = (data)=>{
128
+ if (!isRecord(data)) {
129
+ warnOnceInDevelopment('Received malformed content-type configuration update response. Repairing data.');
130
+ }
131
+ const dataRecord = isRecord(data) ? data : {};
132
+ return {
133
+ contentType: normalizeConfigurationResponse(dataRecord.contentType, undefined, 'contentType'),
134
+ components: normalizeComponentsRecord(dataRecord.components)
135
+ };
136
+ };
137
+ const normalizeComponentConfigurationResponse = (data, uid)=>{
138
+ if (!isRecord(data)) {
139
+ warnOnceInDevelopment('Received malformed component configuration response. Repairing data.');
140
+ }
141
+ const dataRecord = isRecord(data) ? data : {};
142
+ return {
143
+ component: normalizeConfigurationResponse(dataRecord.component, uid, 'component'),
144
+ components: normalizeComponentsRecord(dataRecord.components)
145
+ };
146
+ };
147
+ const normalizeComponentConfigurationUpdateResponse = (data)=>{
148
+ return normalizeConfigurationResponse(data, undefined, 'component');
149
+ };
150
+ const normalizeContentTypeSettingsResponse = (data)=>{
151
+ if (!Array.isArray(data)) {
152
+ warnOnceInDevelopment('Received malformed content-type settings response. Falling back to empty.');
153
+ return [];
154
+ }
155
+ return data.filter((entry, index)=>{
156
+ const isValidEntry = isRecord(entry);
157
+ if (!isValidEntry) {
158
+ warnOnceInDevelopment(`Dropped malformed content-type settings entry "${index}".`);
159
+ }
160
+ return isValidEntry;
161
+ }).filter((entry)=>{
162
+ const hasUid = typeof entry.uid === 'string';
163
+ if (!hasUid) {
164
+ warnOnceInDevelopment('Dropped content-type settings entry without a uid.');
165
+ }
166
+ return hasUid;
167
+ }).map((entry)=>({
168
+ uid: entry.uid,
169
+ settings: normalizeResponseSettings(entry.settings, `contentTypeSettings.${entry.uid}`)
170
+ }));
171
+ };
172
+ const hasAttribute = (attributes, name)=>{
173
+ return Boolean(name && attributes?.[name]);
174
+ };
175
+ const getTargetAttributes = (attribute, { components, schemas })=>{
176
+ if (attribute.type === 'component') {
177
+ return components[attribute.component]?.attributes;
178
+ }
179
+ if (attribute.type === 'relation') {
180
+ const target = 'targetModel' in attribute ? attribute.targetModel : 'target' in attribute ? attribute.target : undefined;
181
+ return schemas.find((schema)=>schema.uid === target)?.attributes;
182
+ }
183
+ return undefined;
184
+ };
185
+ const hasTargetSchema = (attribute, { schemas })=>{
186
+ if (attribute.type !== 'relation') {
187
+ return true;
188
+ }
189
+ const target = 'targetModel' in attribute ? attribute.targetModel : 'target' in attribute ? attribute.target : undefined;
190
+ return schemas.some((schema)=>schema.uid === target);
191
+ };
192
+ const normalizeMainField = (attribute, mainField, context, path)=>{
193
+ if (!mainField) {
194
+ return mainField;
195
+ }
196
+ const targetAttributes = getTargetAttributes(attribute, context);
197
+ if (!targetAttributes) {
198
+ if (attribute.type === 'relation' && !hasTargetSchema(attribute, context)) {
199
+ return mainField;
200
+ }
201
+ if (attribute.type !== 'component' && attribute.type !== 'relation') {
202
+ return mainField;
203
+ }
204
+ warnOnceInDevelopment(`Reset invalid mainField "${mainField}" at "${path}" to "id".`);
205
+ return 'id';
206
+ }
207
+ if (hasAttribute(targetAttributes, mainField)) {
208
+ return mainField;
209
+ }
210
+ warnOnceInDevelopment(`Reset invalid mainField "${mainField}" at "${path}" to "id".`);
211
+ return 'id';
212
+ };
213
+ const normalizeSettings = (settings, attributes, path)=>{
214
+ if (!settings.mainField || hasAttribute(attributes, settings.mainField) || settings.mainField === 'id') {
215
+ return settings;
216
+ }
217
+ warnOnceInDevelopment(`Reset invalid mainField "${settings.mainField}" at "${path}" to "id".`);
218
+ return {
219
+ ...settings,
220
+ mainField: 'id'
221
+ };
222
+ };
223
+ const hasResolvableComponent = (attribute, context)=>{
224
+ if (!attribute || !('component' in attribute) || typeof attribute.component !== 'string') {
225
+ return true;
226
+ }
227
+ return Boolean(context.components[attribute.component]);
228
+ };
229
+ const normalizeMetadatas = (metadatas, attributes, context, path)=>{
230
+ return Object.entries(metadatas).reduce((acc, [name, metadata])=>{
231
+ const attribute = attributes?.[name];
232
+ if (!attribute) {
233
+ warnOnceInDevelopment(`Dropped metadata for unknown field "${path}.metadatas.${name}".`);
234
+ return acc;
235
+ }
236
+ if (!hasResolvableComponent(attribute, context)) {
237
+ warnOnceInDevelopment(`Dropped metadata for field "${path}.metadatas.${name}" because its component schema is unavailable.`);
238
+ return acc;
239
+ }
240
+ acc[name] = {
241
+ edit: {
242
+ ...metadata.edit,
243
+ // `mainField` is present at runtime for component/relation edit metadata.
244
+ ...'mainField' in metadata.edit ? {
245
+ mainField: normalizeMainField(attribute, metadata.edit.mainField, context, `${path}.metadatas.${name}.edit.mainField`)
246
+ } : {}
247
+ },
248
+ list: {
249
+ ...metadata.list,
250
+ mainField: normalizeMainField(attribute, metadata.list.mainField, context, `${path}.metadatas.${name}.list.mainField`)
251
+ }
252
+ };
253
+ return acc;
254
+ }, {});
255
+ };
256
+ const normalizeLayouts = (layouts, attributes, metadatas, context, path)=>{
257
+ const hasRenderableField = (name)=>{
258
+ const attribute = attributes?.[name];
259
+ return Boolean(attribute && metadatas[name] && hasResolvableComponent(attribute, context));
260
+ };
261
+ return {
262
+ edit: (layouts.edit ?? []).map((row, rowIndex)=>row.filter((field)=>{
263
+ const isRenderable = hasRenderableField(field.name);
264
+ if (!isRenderable) {
265
+ warnOnceInDevelopment(`Dropped non-renderable edit layout field "${path}.layouts.edit.${rowIndex}.${field.name}".`);
266
+ }
267
+ return isRenderable;
268
+ })).filter((row)=>row.length > 0),
269
+ list: (layouts.list ?? []).filter((name, index)=>{
270
+ const isRenderable = hasRenderableField(name);
271
+ if (!isRenderable) {
272
+ warnOnceInDevelopment(`Dropped non-renderable list layout field "${path}.layouts.list.${index}.${name}".`);
273
+ }
274
+ return isRenderable;
275
+ })
276
+ };
277
+ };
278
+ const normalizeConfiguration = (configuration, attributes, context)=>{
279
+ const path = configuration.uid ?? 'configuration';
280
+ const metadatas = normalizeMetadatas(configuration.metadatas, attributes, context, path);
281
+ const layouts = normalizeLayouts(configuration.layouts, attributes, metadatas, context, path);
282
+ return {
283
+ ...configuration,
284
+ settings: normalizeSettings(configuration.settings, attributes, `${path}.settings.mainField`),
285
+ metadatas,
286
+ layouts
287
+ };
288
+ };
289
+ const normalizeComponents = (componentConfigurations, context)=>{
290
+ return Object.entries(componentConfigurations).reduce((acc, [uid, configuration])=>{
291
+ const componentSchema = context.components[uid];
292
+ if (!componentSchema) {
293
+ return acc;
294
+ }
295
+ acc[uid] = normalizeConfiguration(configuration, componentSchema.attributes, context);
296
+ return acc;
297
+ }, {});
298
+ };
299
+ const normalizeContentManagerLayout = (data, context)=>{
300
+ const normalizedComponents = normalizeComponents(data.components, context);
301
+ return {
302
+ contentType: normalizeConfiguration(data.contentType, context.schema?.attributes, context),
303
+ components: normalizedComponents
304
+ };
305
+ };
306
+ const normalizeComponentConfigurationLayout = (data, context)=>{
307
+ const normalizedComponents = normalizeComponents(data.components, {
308
+ components: context.components,
309
+ schemas: context.schemas
310
+ });
311
+ return {
312
+ component: normalizeConfiguration(data.component, context.schema?.attributes, {
313
+ components: context.components,
314
+ schemas: context.schemas
315
+ }),
316
+ components: normalizedComponents
317
+ };
318
+ };
319
+
320
+ export { normalizeComponentConfigurationLayout, normalizeComponentConfigurationResponse, normalizeComponentConfigurationUpdateResponse, normalizeContentManagerLayout, normalizeContentTypeConfigurationResponse, normalizeContentTypeConfigurationUpdateResponse, normalizeContentTypeSettingsResponse };
321
+ //# sourceMappingURL=normalizeContentManagerLayout.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeContentManagerLayout.mjs","sources":["../../../../admin/src/utils/layouts/normalizeContentManagerLayout.ts"],"sourcesContent":["import type {\n Component,\n ComponentConfiguration,\n FindComponentConfiguration,\n} from '../../../../shared/contracts/components';\nimport type {\n Configuration,\n FindContentTypeConfiguration,\n FindContentTypesSettings,\n Layouts,\n Metadatas,\n Settings,\n UpdateContentTypeConfiguration,\n} from '../../../../shared/contracts/content-types';\nimport type { ComponentsDictionary, Schema } from '../../hooks/useDocument';\nimport type { Schema as SchemaUtils } from '@strapi/types';\n\ntype ContentTypeConfigurationData = FindContentTypeConfiguration.Response['data'];\ntype ComponentConfigurationData = FindComponentConfiguration.Response['data'];\ntype ComponentConfigurationResponseData = ComponentConfigurationData['component'];\n\ntype NormalizationContext = {\n components: ComponentsDictionary;\n schema?: Schema | Component;\n schemas: Schema[];\n};\n\ntype ComponentNormalizationContext = {\n components: ComponentsDictionary;\n schema?: Component;\n schemas: Schema[];\n};\n\ntype Attributes = Schema['attributes'] | Component['attributes'];\n\nconst DEFAULT_RESPONSE_SETTINGS: Settings = {\n bulkable: true,\n filterable: true,\n searchable: true,\n pageSize: 10,\n mainField: 'id',\n defaultSortBy: '',\n defaultSortOrder: 'ASC',\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n};\n\nconst warnOnceInDevelopment = (() => {\n const warnings = new Set<string>();\n\n return (message: string) => {\n if (process.env.NODE_ENV !== 'development' || warnings.has(message)) {\n return;\n }\n\n warnings.add(message);\n console.warn(`[Content Manager] ${message}`);\n };\n})();\n\nconst normalizeResponseSettings = (settings: unknown, path: string): Settings => {\n if (!isRecord(settings)) {\n warnOnceInDevelopment(`Received malformed settings at \"${path}\". Falling back to defaults.`);\n }\n\n return {\n ...DEFAULT_RESPONSE_SETTINGS,\n ...(isRecord(settings) ? settings : {}),\n } as Settings;\n};\n\nconst normalizeResponseMetadatas = (metadatas: unknown, path: string): Metadatas => {\n if (!isRecord(metadatas)) {\n warnOnceInDevelopment(`Received malformed metadatas at \"${path}\". Falling back to empty.`);\n return {};\n }\n\n return Object.entries(metadatas).reduce<Metadatas>((acc, [name, metadata]) => {\n const metadataRecord = isRecord(metadata) ? metadata : {};\n\n if (!isRecord(metadata)) {\n warnOnceInDevelopment(`Received malformed metadata for \"${path}.${name}\". Repairing entry.`);\n }\n\n if (!isRecord(metadataRecord.edit)) {\n warnOnceInDevelopment(\n `Received malformed edit metadata for \"${path}.${name}\". Falling back to empty.`\n );\n }\n\n if (!isRecord(metadataRecord.list)) {\n warnOnceInDevelopment(\n `Received malformed list metadata for \"${path}.${name}\". Falling back to empty.`\n );\n }\n\n acc[name] = {\n edit: isRecord(metadataRecord.edit) ? metadataRecord.edit : {},\n list: isRecord(metadataRecord.list) ? metadataRecord.list : {},\n } as Metadatas[string];\n\n return acc;\n }, {});\n};\n\nconst normalizeResponseLayouts = (layouts: unknown, path: string): Layouts => {\n if (!isRecord(layouts)) {\n warnOnceInDevelopment(`Received malformed layouts at \"${path}\". Falling back to empty.`);\n return {\n edit: [],\n list: [],\n };\n }\n\n if (!Array.isArray(layouts.edit)) {\n warnOnceInDevelopment(`Received malformed edit layout at \"${path}\". Falling back to empty.`);\n }\n\n if (!Array.isArray(layouts.list)) {\n warnOnceInDevelopment(`Received malformed list layout at \"${path}\". Falling back to empty.`);\n }\n\n return {\n edit: Array.isArray(layouts.edit)\n ? layouts.edit.map((row, rowIndex) => {\n if (!Array.isArray(row)) {\n warnOnceInDevelopment(`Dropped malformed edit layout row \"${path}.edit.${rowIndex}\".`);\n return [];\n }\n\n return row.filter((field, fieldIndex): field is { name: string; size: number } => {\n const isValidField =\n isRecord(field) && typeof field.name === 'string' && typeof field.size === 'number';\n\n if (!isValidField) {\n warnOnceInDevelopment(\n `Dropped malformed edit layout field \"${path}.edit.${rowIndex}.${fieldIndex}\".`\n );\n }\n\n return isValidField;\n });\n })\n : [],\n list: Array.isArray(layouts.list)\n ? layouts.list.filter((field, index): field is string => {\n const isValidField = typeof field === 'string';\n\n if (!isValidField) {\n warnOnceInDevelopment(`Dropped malformed list layout field \"${path}.list.${index}\".`);\n }\n\n return isValidField;\n })\n : [],\n };\n};\n\nconst normalizeConfigurationResponse = <TConfiguration extends Configuration>(\n configuration: unknown,\n uid?: string,\n path = uid ?? 'configuration'\n): TConfiguration => {\n if (!isRecord(configuration)) {\n warnOnceInDevelopment(`Received malformed configuration at \"${path}\". Repairing entry.`);\n }\n\n const configurationRecord = isRecord(configuration) ? configuration : {};\n\n return {\n ...configurationRecord,\n ...(uid ? { uid } : {}),\n settings: normalizeResponseSettings(configurationRecord.settings, `${path}.settings`),\n metadatas: normalizeResponseMetadatas(configurationRecord.metadatas, `${path}.metadatas`),\n layouts: normalizeResponseLayouts(configurationRecord.layouts, `${path}.layouts`),\n } as TConfiguration;\n};\n\nconst normalizeComponentsRecord = (components: unknown): Record<string, ComponentConfiguration> => {\n if (!isRecord(components)) {\n warnOnceInDevelopment(\n 'Received malformed component configuration record. Falling back to empty.'\n );\n return {};\n }\n\n return Object.entries(components).reduce<Record<string, ComponentConfiguration>>(\n (acc, [uid, configuration]) => {\n acc[uid] = normalizeConfigurationResponse<ComponentConfiguration>(\n configuration,\n uid,\n `components.${uid}`\n );\n\n return acc;\n },\n {}\n );\n};\n\nconst normalizeContentTypeConfigurationResponse = (\n data: unknown,\n uid?: string\n): FindContentTypeConfiguration.Response['data'] => {\n if (!isRecord(data)) {\n warnOnceInDevelopment(\n 'Received malformed content-type configuration response. Repairing data.'\n );\n }\n\n const dataRecord = isRecord(data) ? data : {};\n\n return {\n contentType: normalizeConfigurationResponse(dataRecord.contentType, uid, 'contentType'),\n components: normalizeComponentsRecord(dataRecord.components),\n };\n};\n\nconst normalizeContentTypeConfigurationUpdateResponse = (\n data: unknown\n): UpdateContentTypeConfiguration.Response['data'] => {\n if (!isRecord(data)) {\n warnOnceInDevelopment(\n 'Received malformed content-type configuration update response. Repairing data.'\n );\n }\n\n const dataRecord = isRecord(data) ? data : {};\n\n return {\n contentType: normalizeConfigurationResponse(dataRecord.contentType, undefined, 'contentType'),\n components: normalizeComponentsRecord(dataRecord.components),\n };\n};\n\nconst normalizeComponentConfigurationResponse = (\n data: unknown,\n uid?: string\n): FindComponentConfiguration.Response['data'] => {\n if (!isRecord(data)) {\n warnOnceInDevelopment('Received malformed component configuration response. Repairing data.');\n }\n\n const dataRecord = isRecord(data) ? data : {};\n\n return {\n component: normalizeConfigurationResponse<ComponentConfigurationResponseData>(\n dataRecord.component,\n uid,\n 'component'\n ),\n components: normalizeComponentsRecord(dataRecord.components),\n };\n};\n\nconst normalizeComponentConfigurationUpdateResponse = (\n data: unknown\n): ComponentConfigurationResponseData => {\n return normalizeConfigurationResponse<ComponentConfigurationResponseData>(\n data,\n undefined,\n 'component'\n );\n};\n\nconst normalizeContentTypeSettingsResponse = (\n data: unknown\n): FindContentTypesSettings.Response['data'] => {\n if (!Array.isArray(data)) {\n warnOnceInDevelopment(\n 'Received malformed content-type settings response. Falling back to empty.'\n );\n return [];\n }\n\n return data\n .filter((entry, index): entry is Record<string, unknown> => {\n const isValidEntry = isRecord(entry);\n\n if (!isValidEntry) {\n warnOnceInDevelopment(`Dropped malformed content-type settings entry \"${index}\".`);\n }\n\n return isValidEntry;\n })\n .filter((entry): entry is Record<string, unknown> & { uid: string } => {\n const hasUid = typeof entry.uid === 'string';\n\n if (!hasUid) {\n warnOnceInDevelopment('Dropped content-type settings entry without a uid.');\n }\n\n return hasUid;\n })\n .map((entry) => ({\n uid: entry.uid,\n settings: normalizeResponseSettings(entry.settings, `contentTypeSettings.${entry.uid}`),\n }));\n};\n\nconst hasAttribute = (attributes: Attributes | undefined, name: string | undefined) => {\n return Boolean(name && attributes?.[name]);\n};\n\nconst getTargetAttributes = (\n attribute: SchemaUtils.Attribute.AnyAttribute,\n { components, schemas }: Pick<NormalizationContext, 'components' | 'schemas'>\n) => {\n if (attribute.type === 'component') {\n return components[attribute.component]?.attributes;\n }\n\n if (attribute.type === 'relation') {\n const target =\n 'targetModel' in attribute\n ? attribute.targetModel\n : 'target' in attribute\n ? attribute.target\n : undefined;\n\n return schemas.find((schema) => schema.uid === target)?.attributes;\n }\n\n return undefined;\n};\n\nconst hasTargetSchema = (\n attribute: SchemaUtils.Attribute.AnyAttribute,\n { schemas }: Pick<NormalizationContext, 'schemas'>\n) => {\n if (attribute.type !== 'relation') {\n return true;\n }\n\n const target =\n 'targetModel' in attribute\n ? attribute.targetModel\n : 'target' in attribute\n ? attribute.target\n : undefined;\n\n return schemas.some((schema) => schema.uid === target);\n};\n\nconst normalizeMainField = (\n attribute: SchemaUtils.Attribute.AnyAttribute,\n mainField: string | undefined,\n context: Pick<NormalizationContext, 'components' | 'schemas'>,\n path: string\n) => {\n if (!mainField) {\n return mainField;\n }\n\n const targetAttributes = getTargetAttributes(attribute, context);\n\n if (!targetAttributes) {\n if (attribute.type === 'relation' && !hasTargetSchema(attribute, context)) {\n return mainField;\n }\n\n if (attribute.type !== 'component' && attribute.type !== 'relation') {\n return mainField;\n }\n\n warnOnceInDevelopment(`Reset invalid mainField \"${mainField}\" at \"${path}\" to \"id\".`);\n\n return 'id';\n }\n\n if (hasAttribute(targetAttributes, mainField)) {\n return mainField;\n }\n\n warnOnceInDevelopment(`Reset invalid mainField \"${mainField}\" at \"${path}\" to \"id\".`);\n\n return 'id';\n};\n\nconst normalizeSettings = (\n settings: Settings,\n attributes: Attributes | undefined,\n path: string\n) => {\n if (\n !settings.mainField ||\n hasAttribute(attributes, settings.mainField) ||\n settings.mainField === 'id'\n ) {\n return settings;\n }\n\n warnOnceInDevelopment(`Reset invalid mainField \"${settings.mainField}\" at \"${path}\" to \"id\".`);\n\n return {\n ...settings,\n mainField: 'id',\n };\n};\n\nconst hasResolvableComponent = (\n attribute: SchemaUtils.Attribute.AnyAttribute | undefined,\n context: Pick<NormalizationContext, 'components'>\n) => {\n if (!attribute || !('component' in attribute) || typeof attribute.component !== 'string') {\n return true;\n }\n\n return Boolean(context.components[attribute.component]);\n};\n\nconst normalizeMetadatas = (\n metadatas: Metadatas,\n attributes: Attributes | undefined,\n context: Pick<NormalizationContext, 'components' | 'schemas'>,\n path: string\n) => {\n return Object.entries(metadatas).reduce<Metadatas>((acc, [name, metadata]) => {\n const attribute = attributes?.[name];\n\n if (!attribute) {\n warnOnceInDevelopment(`Dropped metadata for unknown field \"${path}.metadatas.${name}\".`);\n return acc;\n }\n\n if (!hasResolvableComponent(attribute, context)) {\n warnOnceInDevelopment(\n `Dropped metadata for field \"${path}.metadatas.${name}\" because its component schema is unavailable.`\n );\n return acc;\n }\n\n acc[name] = {\n edit: {\n ...metadata.edit,\n // `mainField` is present at runtime for component/relation edit metadata.\n ...('mainField' in metadata.edit\n ? {\n mainField: normalizeMainField(\n attribute,\n (metadata.edit as { mainField?: string }).mainField,\n context,\n `${path}.metadatas.${name}.edit.mainField`\n ),\n }\n : {}),\n },\n list: {\n ...metadata.list,\n mainField: normalizeMainField(\n attribute,\n metadata.list.mainField,\n context,\n `${path}.metadatas.${name}.list.mainField`\n ),\n },\n };\n\n return acc;\n }, {});\n};\n\nconst normalizeLayouts = (\n layouts: Layouts,\n attributes: Attributes | undefined,\n metadatas: Metadatas,\n context: Pick<NormalizationContext, 'components'>,\n path: string\n) => {\n const hasRenderableField = (name: string) => {\n const attribute = attributes?.[name];\n\n return Boolean(attribute && metadatas[name] && hasResolvableComponent(attribute, context));\n };\n\n return {\n edit: (layouts.edit ?? [])\n .map((row, rowIndex) =>\n row.filter((field) => {\n const isRenderable = hasRenderableField(field.name);\n\n if (!isRenderable) {\n warnOnceInDevelopment(\n `Dropped non-renderable edit layout field \"${path}.layouts.edit.${rowIndex}.${field.name}\".`\n );\n }\n\n return isRenderable;\n })\n )\n .filter((row) => row.length > 0),\n list: (layouts.list ?? []).filter((name, index) => {\n const isRenderable = hasRenderableField(name);\n\n if (!isRenderable) {\n warnOnceInDevelopment(\n `Dropped non-renderable list layout field \"${path}.layouts.list.${index}.${name}\".`\n );\n }\n\n return isRenderable;\n }),\n };\n};\n\nconst normalizeConfiguration = <TConfiguration extends Configuration>(\n configuration: TConfiguration,\n attributes: Attributes | undefined,\n context: Pick<NormalizationContext, 'components' | 'schemas'>\n) => {\n const path = configuration.uid ?? 'configuration';\n const metadatas = normalizeMetadatas(configuration.metadatas, attributes, context, path);\n const layouts = normalizeLayouts(configuration.layouts, attributes, metadatas, context, path);\n\n return {\n ...configuration,\n settings: normalizeSettings(configuration.settings, attributes, `${path}.settings.mainField`),\n metadatas,\n layouts,\n };\n};\n\nconst normalizeComponents = (\n componentConfigurations: Record<string, ComponentConfiguration>,\n context: Pick<NormalizationContext, 'components' | 'schemas'>\n) => {\n return Object.entries(componentConfigurations).reduce<Record<string, ComponentConfiguration>>(\n (acc, [uid, configuration]) => {\n const componentSchema = context.components[uid];\n\n if (!componentSchema) {\n return acc;\n }\n\n acc[uid] = normalizeConfiguration(configuration, componentSchema.attributes, context);\n\n return acc;\n },\n {}\n );\n};\n\nconst normalizeContentManagerLayout = (\n data: ContentTypeConfigurationData,\n context: NormalizationContext\n): ContentTypeConfigurationData => {\n const normalizedComponents = normalizeComponents(data.components, context);\n\n return {\n contentType: normalizeConfiguration(data.contentType, context.schema?.attributes, context),\n components: normalizedComponents,\n };\n};\n\nconst normalizeComponentConfigurationLayout = (\n data: ComponentConfigurationData,\n context: ComponentNormalizationContext\n): ComponentConfigurationData => {\n const normalizedComponents = normalizeComponents(data.components, {\n components: context.components,\n schemas: context.schemas,\n });\n\n return {\n component: normalizeConfiguration(data.component, context.schema?.attributes, {\n components: context.components,\n schemas: context.schemas,\n }),\n components: normalizedComponents,\n };\n};\n\nexport {\n normalizeContentManagerLayout,\n normalizeComponentConfigurationLayout,\n normalizeContentTypeConfigurationResponse,\n normalizeContentTypeConfigurationUpdateResponse,\n normalizeComponentConfigurationResponse,\n normalizeComponentConfigurationUpdateResponse,\n normalizeContentTypeSettingsResponse,\n};\n"],"names":["DEFAULT_RESPONSE_SETTINGS","bulkable","filterable","searchable","pageSize","mainField","defaultSortBy","defaultSortOrder","isRecord","value","Boolean","Array","isArray","warnOnceInDevelopment","warnings","Set","message","process","env","NODE_ENV","has","add","console","warn","normalizeResponseSettings","settings","path","normalizeResponseMetadatas","metadatas","Object","entries","reduce","acc","name","metadata","metadataRecord","edit","list","normalizeResponseLayouts","layouts","map","row","rowIndex","filter","field","fieldIndex","isValidField","size","index","normalizeConfigurationResponse","configuration","uid","configurationRecord","normalizeComponentsRecord","components","normalizeContentTypeConfigurationResponse","data","dataRecord","contentType","normalizeContentTypeConfigurationUpdateResponse","undefined","normalizeComponentConfigurationResponse","component","normalizeComponentConfigurationUpdateResponse","normalizeContentTypeSettingsResponse","entry","isValidEntry","hasUid","hasAttribute","attributes","getTargetAttributes","attribute","schemas","type","target","targetModel","find","schema","hasTargetSchema","some","normalizeMainField","context","targetAttributes","normalizeSettings","hasResolvableComponent","normalizeMetadatas","normalizeLayouts","hasRenderableField","isRenderable","length","normalizeConfiguration","normalizeComponents","componentConfigurations","componentSchema","normalizeContentManagerLayout","normalizedComponents","normalizeComponentConfigurationLayout"],"mappings":"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"}
@@ -3,10 +3,15 @@
3
3
  var clone = require('lodash/clone');
4
4
  var toPath = require('lodash/toPath');
5
5
 
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var clone__default = /*#__PURE__*/_interopDefault(clone);
9
+ var toPath__default = /*#__PURE__*/_interopDefault(toPath);
10
+
6
11
  /**
7
12
  * Deeply get a value from an object via its path.
8
13
  */ function getIn(obj, key, def, pathStartIndex = 0) {
9
- const path = toPath(key);
14
+ const path = toPath__default.default(key);
10
15
  while(obj && pathStartIndex < path.length){
11
16
  obj = obj[path[pathStartIndex++]];
12
17
  }
@@ -42,15 +47,15 @@ var toPath = require('lodash/toPath');
42
47
  * @see https://github.com/developit/linkstate
43
48
  * @see https://github.com/jaredpalmer/formik/pull/123
44
49
  */ function setIn(obj, path, value) {
45
- const res = clone(obj); // this keeps inheritance when obj is a class
50
+ const res = clone__default.default(obj); // this keeps inheritance when obj is a class
46
51
  let resVal = res;
47
52
  let i = 0;
48
- const pathArray = toPath(path);
53
+ const pathArray = toPath__default.default(path);
49
54
  for(; i < pathArray.length - 1; i++){
50
55
  const currentPath = pathArray[i];
51
56
  const currentObj = getIn(obj, pathArray.slice(0, i + 1));
52
57
  if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {
53
- resVal = resVal[currentPath] = clone(currentObj);
58
+ resVal = resVal[currentPath] = clone__default.default(currentObj);
54
59
  } else {
55
60
  const nextPath = pathArray[i + 1];
56
61
  resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};
@@ -1 +1 @@
1
- {"version":3,"file":"objects.js","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(obj: any, key: string | string[], def?: any, pathStartIndex: number = 0) {\n const path = toPath(key);\n while (obj && pathStartIndex < path.length) {\n obj = obj[path[pathStartIndex++]];\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: any): obj is object =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: any): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n const res: any = clone(obj); // this keeps inheritance when obj is a class\n let resVal: any = res;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n const nextPath: string = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n }\n\n // Return original object if new value is the same as current\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n"],"names":["getIn","obj","key","def","pathStartIndex","path","toPath","length","undefined","isObject","Array","isArray","isInteger","String","Math","floor","Number","setIn","value","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","nextPath"],"mappings":";;;;;AAGA;;IAGO,SAASA,KAAAA,CAAMC,GAAQ,EAAEC,GAAsB,EAAEC,GAAS,EAAEC,cAAAA,GAAyB,CAAC,EAAA;AAC3F,IAAA,MAAMC,OAAOC,MAAAA,CAAOJ,GAAAA,CAAAA;AACpB,IAAA,MAAOD,GAAAA,IAAOG,cAAAA,GAAiBC,IAAAA,CAAKE,MAAM,CAAE;AAC1CN,QAAAA,GAAAA,GAAMA,GAAG,CAACI,IAAI,CAACD,iBAAiB,CAAC;AACnC,IAAA;;AAGA,IAAA,IAAIA,cAAAA,KAAmBC,IAAAA,CAAKE,MAAM,IAAI,CAACN,GAAAA,EAAK;QAC1C,OAAOE,GAAAA;AACT,IAAA;IAEA,OAAOF,GAAAA,KAAQO,YAAYL,GAAAA,GAAMF,GAAAA;AACnC;AAEA,gDACO,MAAMQ,QAAAA,GAAW,CAACR,GAAAA,GACvBA,GAAAA,KAAQ,IAAA,IAAQ,OAAOA,QAAQ,QAAA,IAAY,CAACS,KAAAA,CAAMC,OAAO,CAACV,GAAAA;AAE5D,iDACO,MAAMW,SAAAA,GAAY,CAACX,GAAAA,GAAsBY,MAAAA,CAAOC,IAAAA,CAAKC,KAAK,CAACC,MAAAA,CAAOf,GAAAA,CAAAA,CAAAA,CAAAA,KAAWA;AAEpF;;;;;;;;;;;;;;;;;;;;;;;AAuBC,IACM,SAASgB,KAAAA,CAAMhB,GAAQ,EAAEI,IAAY,EAAEa,KAAU,EAAA;IACtD,MAAMC,GAAAA,GAAWC,KAAAA,CAAMnB,GAAAA,CAAAA,CAAAA;AACvB,IAAA,IAAIoB,MAAAA,GAAcF,GAAAA;AAClB,IAAA,IAAIG,CAAAA,GAAI,CAAA;AACR,IAAA,MAAMC,YAAYjB,MAAAA,CAAOD,IAAAA,CAAAA;AAEzB,IAAA,MAAOiB,CAAAA,GAAIC,SAAAA,CAAUhB,MAAM,GAAG,GAAGe,CAAAA,EAAAA,CAAK;QACpC,MAAME,WAAAA,GAAsBD,SAAS,CAACD,CAAAA,CAAE;AACxC,QAAA,MAAMG,aAAkBzB,KAAAA,CAAMC,GAAAA,EAAKsB,UAAUG,KAAK,CAAC,GAAGJ,CAAAA,GAAI,CAAA,CAAA,CAAA;QAE1D,IAAIG,UAAAA,KAAehB,QAAAA,CAASgB,UAAAA,CAAAA,IAAef,MAAMC,OAAO,CAACc,WAAU,CAAA,EAAI;AACrEJ,YAAAA,MAAAA,GAASA,MAAM,CAACG,WAAAA,CAAY,GAAGJ,KAAAA,CAAMK,UAAAA,CAAAA;QACvC,CAAA,MAAO;AACL,YAAA,MAAME,QAAAA,GAAmBJ,SAAS,CAACD,CAAAA,GAAI,CAAA,CAAE;YACzCD,MAAAA,GAASA,MAAM,CAACG,WAAAA,CAAY,GAAGZ,SAAAA,CAAUe,QAAAA,CAAAA,IAAaX,MAAAA,CAAOW,QAAAA,CAAAA,IAAa,CAAA,GAAI,EAAE,GAAG,EAAC;AACtF,QAAA;AACF,IAAA;;AAGA,IAAA,IAAI,CAACL,CAAAA,KAAM,CAAA,GAAIrB,GAAAA,GAAMoB,MAAK,EAAGE,SAAS,CAACD,CAAAA,CAAE,CAAC,KAAKJ,KAAAA,EAAO;QACpD,OAAOjB,GAAAA;AACT,IAAA;AAEA,IAAyB;AACvB,QAAA,OAAOoB,MAAM,CAACE,SAAS,CAACD,EAAE,CAAC;IAC7B;;;IAMA,IAAIA,CAAAA,KAAM,CAAA,IAAKJ,KAAAA,KAAUV,SAAAA,EAAW;AAClC,QAAA,OAAOW,GAAG,CAACI,SAAS,CAACD,EAAE,CAAC;AAC1B,IAAA;IAEA,OAAOH,GAAAA;AACT;;;;;;;"}
1
+ {"version":3,"file":"objects.js","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(obj: any, key: string | string[], def?: any, pathStartIndex: number = 0) {\n const path = toPath(key);\n while (obj && pathStartIndex < path.length) {\n obj = obj[path[pathStartIndex++]];\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: any): obj is object =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: any): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n const res: any = clone(obj); // this keeps inheritance when obj is a class\n let resVal: any = res;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n const nextPath: string = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n }\n\n // Return original object if new value is the same as current\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n"],"names":["getIn","obj","key","def","pathStartIndex","path","toPath","length","undefined","isObject","Array","isArray","isInteger","String","Math","floor","Number","setIn","value","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","nextPath"],"mappings":";;;;;;;;;;AAGA;;IAGO,SAASA,KAAAA,CAAMC,GAAQ,EAAEC,GAAsB,EAAEC,GAAS,EAAEC,cAAAA,GAAyB,CAAC,EAAA;AAC3F,IAAA,MAAMC,OAAOC,uBAAAA,CAAOJ,GAAAA,CAAAA;AACpB,IAAA,MAAOD,GAAAA,IAAOG,cAAAA,GAAiBC,IAAAA,CAAKE,MAAM,CAAE;AAC1CN,QAAAA,GAAAA,GAAMA,GAAG,CAACI,IAAI,CAACD,iBAAiB,CAAC;AACnC,IAAA;;AAGA,IAAA,IAAIA,cAAAA,KAAmBC,IAAAA,CAAKE,MAAM,IAAI,CAACN,GAAAA,EAAK;QAC1C,OAAOE,GAAAA;AACT,IAAA;IAEA,OAAOF,GAAAA,KAAQO,YAAYL,GAAAA,GAAMF,GAAAA;AACnC;AAEA,gDACO,MAAMQ,QAAAA,GAAW,CAACR,GAAAA,GACvBA,GAAAA,KAAQ,IAAA,IAAQ,OAAOA,QAAQ,QAAA,IAAY,CAACS,KAAAA,CAAMC,OAAO,CAACV,GAAAA;AAE5D,iDACO,MAAMW,SAAAA,GAAY,CAACX,GAAAA,GAAsBY,MAAAA,CAAOC,IAAAA,CAAKC,KAAK,CAACC,MAAAA,CAAOf,GAAAA,CAAAA,CAAAA,CAAAA,KAAWA;AAEpF;;;;;;;;;;;;;;;;;;;;;;;AAuBC,IACM,SAASgB,KAAAA,CAAMhB,GAAQ,EAAEI,IAAY,EAAEa,KAAU,EAAA;IACtD,MAAMC,GAAAA,GAAWC,sBAAAA,CAAMnB,GAAAA,CAAAA,CAAAA;AACvB,IAAA,IAAIoB,MAAAA,GAAcF,GAAAA;AAClB,IAAA,IAAIG,CAAAA,GAAI,CAAA;AACR,IAAA,MAAMC,YAAYjB,uBAAAA,CAAOD,IAAAA,CAAAA;AAEzB,IAAA,MAAOiB,CAAAA,GAAIC,SAAAA,CAAUhB,MAAM,GAAG,GAAGe,CAAAA,EAAAA,CAAK;QACpC,MAAME,WAAAA,GAAsBD,SAAS,CAACD,CAAAA,CAAE;AACxC,QAAA,MAAMG,aAAkBzB,KAAAA,CAAMC,GAAAA,EAAKsB,UAAUG,KAAK,CAAC,GAAGJ,CAAAA,GAAI,CAAA,CAAA,CAAA;QAE1D,IAAIG,UAAAA,KAAehB,QAAAA,CAASgB,UAAAA,CAAAA,IAAef,MAAMC,OAAO,CAACc,WAAU,CAAA,EAAI;AACrEJ,YAAAA,MAAAA,GAASA,MAAM,CAACG,WAAAA,CAAY,GAAGJ,sBAAAA,CAAMK,UAAAA,CAAAA;QACvC,CAAA,MAAO;AACL,YAAA,MAAME,QAAAA,GAAmBJ,SAAS,CAACD,CAAAA,GAAI,CAAA,CAAE;YACzCD,MAAAA,GAASA,MAAM,CAACG,WAAAA,CAAY,GAAGZ,SAAAA,CAAUe,QAAAA,CAAAA,IAAaX,MAAAA,CAAOW,QAAAA,CAAAA,IAAa,CAAA,GAAI,EAAE,GAAG,EAAC;AACtF,QAAA;AACF,IAAA;;AAGA,IAAA,IAAI,CAACL,CAAAA,KAAM,CAAA,GAAIrB,GAAAA,GAAMoB,MAAK,EAAGE,SAAS,CAACD,CAAAA,CAAE,CAAC,KAAKJ,KAAAA,EAAO;QACpD,OAAOjB,GAAAA;AACT,IAAA;AAEA,IAAyB;AACvB,QAAA,OAAOoB,MAAM,CAACE,SAAS,CAACD,EAAE,CAAC;IAC7B;;;IAMA,IAAIA,CAAAA,KAAM,CAAA,IAAKJ,KAAAA,KAAUV,SAAAA,EAAW;AAClC,QAAA,OAAOW,GAAG,CAACI,SAAS,CAACD,EAAE,CAAC;AAC1B,IAAA;IAEA,OAAOH,GAAAA;AACT;;;;;;;"}
@@ -5,7 +5,10 @@ var pipe = require('lodash/fp/pipe');
5
5
  var yup = require('yup');
6
6
  var attributes = require('../constants/attributes.js');
7
7
 
8
- function _interopNamespaceDefault(e) {
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
9
12
  var n = Object.create(null);
10
13
  if (e) {
11
14
  Object.keys(e).forEach(function (k) {
@@ -22,7 +25,8 @@ function _interopNamespaceDefault(e) {
22
25
  return Object.freeze(n);
23
26
  }
24
27
 
25
- var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
28
+ var pipe__default = /*#__PURE__*/_interopDefault(pipe);
29
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
26
30
 
27
31
  const arrayValidator = (attribute, options)=>({
28
32
  message: strapiAdmin.translatedErrors.required,
@@ -76,7 +80,7 @@ const escapeRegex = (str)=>str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
76
80
  addMaxValidation,
77
81
  addRegexValidation
78
82
  ].map((fn)=>fn(attribute, options));
79
- const transformSchema = pipe(...validations);
83
+ const transformSchema = pipe__default.default(...validations);
80
84
  switch(attribute.type){
81
85
  case 'component':
82
86
  {
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sources":["../../../admin/src/utils/validation.ts"],"sourcesContent":["import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport pipe from 'lodash/fp/pipe';\nimport * as yup from 'yup';\n\nimport { DOCUMENT_META_FIELDS } from '../constants/attributes';\n\nimport type { ComponentsDictionary, Schema } from '../hooks/useDocument';\nimport type { Schema as SchemaUtils } from '@strapi/types';\nimport type { ObjectShape } from 'yup/lib/object';\n\ntype AnySchema =\n | yup.StringSchema\n | yup.NumberSchema\n | yup.BooleanSchema\n | yup.DateSchema\n | yup.ArraySchema<any>\n | yup.ObjectSchema<any>;\n\n/* -------------------------------------------------------------------------------------------------\n * createYupSchema\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ValidationOptions {\n status: 'draft' | 'published' | null;\n removedAttributes?: string[];\n}\n\nconst arrayValidator = (attribute: Schema['attributes'][string], options: ValidationOptions) => ({\n message: translatedErrors.required,\n test(value: unknown) {\n if (options.status === 'draft') {\n return true;\n }\n\n if (!attribute.required) {\n return true;\n }\n\n if (!value) {\n return false;\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n\n return true;\n },\n});\nconst escapeRegex = (str: string) => str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n/**\n * TODO: should we create a Map to store these based on the hash of the schema?\n */\nconst createYupSchema = (\n attributes: Schema['attributes'] = {},\n components: ComponentsDictionary = {},\n options: ValidationOptions = { status: null }\n): yup.ObjectSchema<any> => {\n const createModelSchema = (\n attributes: Schema['attributes'],\n removedAttributes: string[] = []\n ): yup.ObjectSchema<any> =>\n yup\n .object()\n .shape(\n Object.entries(attributes).reduce<ObjectShape>((acc, [name, attribute]) => {\n const getNestedPathsForAttribute = (removed: string[], attrName: string): string[] => {\n const prefix = `${attrName}.`;\n // Match both numeric indices [0] and __temp_key__ values [some_key]\n const bracketRegex = new RegExp(`^${escapeRegex(attrName)}\\\\[[^\\\\]]+\\\\]\\\\.`);\n\n return removed\n .filter((p) => p.startsWith(prefix) || bracketRegex.test(p))\n .map((p) =>\n p.startsWith(prefix) ? p.slice(prefix.length) : p.replace(bracketRegex, '')\n );\n };\n\n if (DOCUMENT_META_FIELDS.includes(name)) {\n return acc;\n }\n\n if (removedAttributes?.includes(name)) {\n // If the attribute is not visible, we don't want to validate it\n return acc;\n }\n\n const nestedRemoved = getNestedPathsForAttribute(removedAttributes, name);\n\n /**\n * These validations won't apply to every attribute\n * and that's okay, in that case we just return the\n * schema as it was passed.\n */\n const validations = [\n addNullableValidation,\n addRequiredValidation,\n addMinLengthValidation,\n addMaxLengthValidation,\n addMinValidation,\n addMaxValidation,\n addRegexValidation,\n ].map((fn) => fn(attribute, options));\n\n const transformSchema = pipe(...validations);\n\n switch (attribute.type) {\n case 'component': {\n const { attributes } = components[attribute.component];\n\n if (attribute.repeatable) {\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(createModelSchema(attributes, nestedRemoved).nullable(false))\n ).test(arrayValidator(attribute, options)),\n };\n } else {\n return {\n ...acc,\n [name]: transformSchema(createModelSchema(attributes, nestedRemoved).nullable()),\n };\n }\n }\n case 'dynamiczone':\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(\n yup.lazy(\n (\n data: SchemaUtils.Attribute.Value<SchemaUtils.Attribute.DynamicZone>[number]\n ) => {\n const attributes = components?.[data?.__component]?.attributes;\n\n const validation = yup\n .object()\n .shape({\n __component: yup.string().required().oneOf(Object.keys(components)),\n })\n .nullable(false);\n if (!attributes) {\n return validation;\n }\n\n return validation.concat(createModelSchema(attributes, nestedRemoved));\n }\n ) as unknown as yup.ObjectSchema<any>\n )\n ).test(arrayValidator(attribute, options)),\n };\n case 'relation':\n return {\n ...acc,\n [name]: transformSchema(\n yup.lazy((value) => {\n if (!value) {\n return yup.mixed().nullable(true);\n } else if (Array.isArray(value)) {\n // If a relation value is an array, we expect\n // an array of objects with {id} properties, representing the related entities.\n return yup.array().of(\n yup.object().shape({\n id: yup.number().required(),\n })\n );\n } else if (typeof value === 'object') {\n // A realtion value can also be an object. Some API\n // repsonses return the number of entities in the relation\n // as { count: x }\n return yup.object();\n } else {\n return yup\n .mixed()\n .test(\n 'type-error',\n 'Relation values must be either null, an array of objects with {id} or an object.',\n () => false\n );\n }\n })\n ),\n };\n default:\n return {\n ...acc,\n [name]: transformSchema(createAttributeSchema(attribute)),\n };\n }\n }, {})\n )\n /**\n * TODO: investigate why an undefined object fails a check of `nullable`.\n */\n .default(null);\n\n return createModelSchema(attributes, options.removedAttributes);\n};\n\nconst createAttributeSchema = (\n attribute: Exclude<\n SchemaUtils.Attribute.AnyAttribute,\n { type: 'dynamiczone' } | { type: 'component' } | { type: 'relation' }\n >\n) => {\n switch (attribute.type) {\n case 'biginteger':\n return yup.string().matches(/^-?\\d*$/);\n case 'boolean':\n return yup.boolean().nullable();\n case 'blocks':\n return yup.mixed().test('isBlocks', translatedErrors.json, (value) => {\n if (!value || Array.isArray(value)) {\n return true;\n } else {\n return false;\n }\n });\n case 'decimal':\n case 'float':\n case 'integer':\n return yup.number();\n case 'email':\n return yup.string().email(translatedErrors.email);\n case 'enumeration':\n return yup.string().oneOf([...attribute.enum, null]);\n case 'json':\n return yup.mixed().test('isJSON', translatedErrors.json, (value) => {\n /**\n * We don't want to validate the JSON field if it's empty.\n */\n if (!value || (typeof value === 'string' && value.length === 0)) {\n return true;\n }\n\n // If the value was created via content API and wasn't changed, then it's still an object\n if (typeof value === 'object') {\n try {\n JSON.stringify(value);\n return true;\n } catch (err) {\n return false;\n }\n }\n\n try {\n JSON.parse(value);\n\n return true;\n } catch (err) {\n return false;\n }\n });\n case 'password':\n return yup.string().nullable();\n case 'richtext':\n case 'string':\n case 'text':\n return yup.string();\n case 'uid':\n return yup\n .string()\n .matches(attribute.regex ? new RegExp(attribute.regex) : /^[A-Za-z0-9-_.~]*$/);\n default:\n /**\n * This allows any value.\n */\n return yup.mixed();\n }\n};\n\n// Helper function to return schema.nullable() if it exists, otherwise return schema\nconst nullableSchema = <TSchema extends AnySchema>(schema: TSchema) => {\n return schema?.nullable\n ? schema.nullable()\n : // In some cases '.nullable' will not be available on the schema.\n // e.g. when the schema has been built using yup.lazy (e.g. for relations).\n // In these cases we should just return the schema as it is.\n schema;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Validators\n * -----------------------------------------------------------------------------------------------*/\n/**\n * Our validator functions can be preped with the\n * attribute and then have the schema piped through them.\n */\ntype ValidationFn = (\n attribute: Schema['attributes'][string],\n options: ValidationOptions\n) => <TSchema extends AnySchema>(schema: TSchema) => TSchema;\n\nconst addNullableValidation: ValidationFn = () => (schema) => {\n return nullableSchema(schema);\n};\n\nconst addRequiredValidation: ValidationFn = (attribute, options) => (schema) => {\n if (options.status === 'draft' || !attribute.required || attribute.type === 'password') {\n return schema;\n }\n\n if (attribute.required && 'required' in schema) {\n return schema.required(translatedErrors.required);\n }\n\n return schema;\n};\n\nconst addMinLengthValidation: ValidationFn =\n (attribute, options) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n // Skip minLength validation for draft\n if (options.status === 'draft') {\n return schema;\n }\n\n if (\n 'minLength' in attribute &&\n attribute.minLength &&\n Number.isInteger(attribute.minLength) &&\n 'min' in schema\n ) {\n return schema.min(attribute.minLength, {\n ...translatedErrors.minLength,\n values: {\n min: attribute.minLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMaxLengthValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (\n 'maxLength' in attribute &&\n attribute.maxLength &&\n Number.isInteger(attribute.maxLength) &&\n 'max' in schema\n ) {\n return schema.max(attribute.maxLength, {\n ...translatedErrors.maxLength,\n values: {\n max: attribute.maxLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMinValidation: ValidationFn =\n (attribute, options) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (options.status === 'draft') {\n return schema;\n }\n\n if ('min' in attribute && 'min' in schema) {\n const min = toInteger(attribute.min);\n\n if (min !== undefined) {\n return schema.min(min, {\n ...translatedErrors.min,\n values: {\n min,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst addMaxValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('max' in attribute) {\n const max = toInteger(attribute.max);\n\n if ('max' in schema && max !== undefined) {\n return schema.max(max, {\n ...translatedErrors.max,\n values: {\n max,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst toInteger = (val?: string | number): number | undefined => {\n if (typeof val === 'number' || val === undefined) {\n return val;\n } else {\n const num = Number(val);\n return isNaN(num) ? undefined : num;\n }\n};\n\nconst addRegexValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('regex' in attribute && attribute.regex && 'matches' in schema) {\n return schema.matches(new RegExp(attribute.regex), {\n message: {\n id: translatedErrors.regex.id,\n defaultMessage: 'The value does not match the defined pattern.',\n },\n\n excludeEmptyString: !attribute.required,\n }) as TSchema;\n }\n\n return schema;\n };\n\nexport { createYupSchema };\n"],"names":["arrayValidator","attribute","options","message","translatedErrors","required","test","value","status","Array","isArray","length","escapeRegex","str","replace","createYupSchema","attributes","components","createModelSchema","removedAttributes","yup","object","shape","Object","entries","reduce","acc","name","getNestedPathsForAttribute","removed","attrName","prefix","bracketRegex","RegExp","filter","p","startsWith","map","slice","DOCUMENT_META_FIELDS","includes","nestedRemoved","validations","addNullableValidation","addRequiredValidation","addMinLengthValidation","addMaxLengthValidation","addMinValidation","addMaxValidation","addRegexValidation","fn","transformSchema","pipe","type","component","repeatable","array","of","nullable","lazy","data","__component","validation","string","oneOf","keys","concat","mixed","id","number","createAttributeSchema","default","matches","boolean","json","email","enum","JSON","stringify","err","parse","regex","nullableSchema","schema","minLength","Number","isInteger","min","values","maxLength","max","toInteger","undefined","val","num","isNaN","defaultMessage","excludeEmptyString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAMA,cAAAA,GAAiB,CAACC,SAAAA,EAAyCC,OAAAA,IAAgC;AAC/FC,QAAAA,OAAAA,EAASC,6BAAiBC,QAAQ;AAClCC,QAAAA,IAAAA,CAAAA,CAAKC,KAAc,EAAA;YACjB,IAAIL,OAAAA,CAAQM,MAAM,KAAK,OAAA,EAAS;gBAC9B,OAAO,IAAA;AACT,YAAA;YAEA,IAAI,CAACP,SAAAA,CAAUI,QAAQ,EAAE;gBACvB,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,IAAI,CAACE,KAAAA,EAAO;gBACV,OAAO,KAAA;AACT,YAAA;AAEA,YAAA,IAAIE,MAAMC,OAAO,CAACH,UAAUA,KAAAA,CAAMI,MAAM,KAAK,CAAA,EAAG;gBAC9C,OAAO,KAAA;AACT,YAAA;YAEA,OAAO,IAAA;AACT,QAAA;KACF,CAAA;AACA,MAAMC,cAAc,CAACC,GAAAA,GAAgBA,GAAAA,CAAIC,OAAO,CAAC,qBAAA,EAAuB,MAAA,CAAA;AACxE;;IAGA,MAAMC,eAAAA,GAAkB,CACtBC,YAAAA,GAAmC,EAAE,EACrCC,UAAAA,GAAmC,EAAE,EACrCf,OAAAA,GAA6B;IAAEM,MAAAA,EAAQ;AAAK,CAAC,GAAA;IAE7C,MAAMU,iBAAAA,GAAoB,CACxBF,YAAAA,EACAG,iBAAAA,GAA8B,EAAE,GAEhCC,cAAAA,CACGC,MAAM,EAAA,CACNC,KAAK,CACJC,MAAAA,CAAOC,OAAO,CAACR,YAAAA,CAAAA,CAAYS,MAAM,CAAc,CAACC,GAAAA,EAAK,CAACC,IAAAA,EAAM1B,SAAAA,CAAU,GAAA;YACpE,MAAM2B,0BAAAA,GAA6B,CAACC,OAAAA,EAAmBC,QAAAA,GAAAA;AACrD,gBAAA,MAAMC,MAAAA,GAAS,CAAA,EAAGD,QAAAA,CAAS,CAAC,CAAC;;gBAE7B,MAAME,YAAAA,GAAe,IAAIC,MAAAA,CAAO,CAAC,CAAC,EAAErB,WAAAA,CAAYkB,QAAAA,CAAAA,CAAU,gBAAgB,CAAC,CAAA;AAE3E,gBAAA,OAAOD,OAAAA,CACJK,MAAM,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,UAAU,CAACL,MAAAA,CAAAA,IAAWC,YAAAA,CAAa1B,IAAI,CAAC6B,IACxDE,GAAG,CAAC,CAACF,CAAAA,GACJA,CAAAA,CAAEC,UAAU,CAACL,MAAAA,CAAAA,GAAUI,CAAAA,CAAEG,KAAK,CAACP,MAAAA,CAAOpB,MAAM,CAAA,GAAIwB,CAAAA,CAAErB,OAAO,CAACkB,YAAAA,EAAc,EAAA,CAAA,CAAA;AAE9E,YAAA,CAAA;YAEA,IAAIO,+BAAAA,CAAqBC,QAAQ,CAACb,IAAAA,CAAAA,EAAO;gBACvC,OAAOD,GAAAA;AACT,YAAA;YAEA,IAAIP,iBAAAA,EAAmBqB,SAASb,IAAAA,CAAAA,EAAO;;gBAErC,OAAOD,GAAAA;AACT,YAAA;YAEA,MAAMe,aAAAA,GAAgBb,2BAA2BT,iBAAAA,EAAmBQ,IAAAA,CAAAA;AAEpE;;;;AAIC,cACD,MAAMe,WAAAA,GAAc;AAClBC,gBAAAA,qBAAAA;AACAC,gBAAAA,qBAAAA;AACAC,gBAAAA,sBAAAA;AACAC,gBAAAA,sBAAAA;AACAC,gBAAAA,gBAAAA;AACAC,gBAAAA,gBAAAA;AACAC,gBAAAA;AACD,aAAA,CAACZ,GAAG,CAAC,CAACa,EAAAA,GAAOA,GAAGjD,SAAAA,EAAWC,OAAAA,CAAAA,CAAAA;AAE5B,YAAA,MAAMiD,kBAAkBC,IAAAA,CAAAA,GAAQV,WAAAA,CAAAA;AAEhC,YAAA,OAAQzC,UAAUoD,IAAI;gBACpB,KAAK,WAAA;AAAa,oBAAA;wBAChB,MAAM,EAAErC,UAAU,EAAE,GAAGC,UAAU,CAAChB,SAAAA,CAAUqD,SAAS,CAAC;wBAEtD,IAAIrD,SAAAA,CAAUsD,UAAU,EAAE;4BACxB,OAAO;AACL,gCAAA,GAAG7B,GAAG;AACN,gCAAA,CAACC,OAAOwB,eAAAA,CACN/B,cAAAA,CAAIoC,KAAK,GAAGC,EAAE,CAACvC,iBAAAA,CAAkBF,UAAAA,EAAYyB,eAAeiB,QAAQ,CAAC,SACrEpD,IAAI,CAACN,eAAeC,SAAAA,EAAWC,OAAAA,CAAAA;AACnC,6BAAA;wBACF,CAAA,MAAO;4BACL,OAAO;AACL,gCAAA,GAAGwB,GAAG;AACN,gCAAA,CAACC,OAAOwB,eAAAA,CAAgBjC,iBAAAA,CAAkBF,UAAAA,EAAYyB,eAAeiB,QAAQ,EAAA;AAC/E,6BAAA;AACF,wBAAA;AACF,oBAAA;gBACA,KAAK,aAAA;oBACH,OAAO;AACL,wBAAA,GAAGhC,GAAG;wBACN,CAACC,IAAAA,GAAOwB,eAAAA,CACN/B,cAAAA,CAAIoC,KAAK,EAAA,CAAGC,EAAE,CACZrC,cAAAA,CAAIuC,IAAI,CACN,CACEC,IAAAA,GAAAA;AAEA,4BAAA,MAAM5C,UAAAA,GAAaC,UAAAA,GAAa2C,IAAAA,EAAMC,YAAY,EAAE7C,UAAAA;AAEpD,4BAAA,MAAM8C,UAAAA,GAAa1C,cAAAA,CAChBC,MAAM,EAAA,CACNC,KAAK,CAAC;gCACLuC,WAAAA,EAAazC,cAAAA,CAAI2C,MAAM,EAAA,CAAG1D,QAAQ,GAAG2D,KAAK,CAACzC,MAAAA,CAAO0C,IAAI,CAAChD,UAAAA,CAAAA;AACzD,6BAAA,CAAA,CACCyC,QAAQ,CAAC,KAAA,CAAA;AACZ,4BAAA,IAAI,CAAC1C,UAAAA,EAAY;gCACf,OAAO8C,UAAAA;AACT,4BAAA;AAEA,4BAAA,OAAOA,UAAAA,CAAWI,MAAM,CAAChD,iBAAAA,CAAkBF,UAAAA,EAAYyB,aAAAA,CAAAA,CAAAA;wBACzD,CAAA,CAAA,CAAA,CAAA,CAGJnC,IAAI,CAACN,cAAAA,CAAeC,SAAAA,EAAWC,OAAAA,CAAAA;AACnC,qBAAA;gBACF,KAAK,UAAA;oBACH,OAAO;AACL,wBAAA,GAAGwB,GAAG;AACN,wBAAA,CAACC,OAAOwB,eAAAA,CACN/B,cAAAA,CAAIuC,IAAI,CAAC,CAACpD,KAAAA,GAAAA;AACR,4BAAA,IAAI,CAACA,KAAAA,EAAO;AACV,gCAAA,OAAOa,cAAAA,CAAI+C,KAAK,EAAA,CAAGT,QAAQ,CAAC,IAAA,CAAA;AAC9B,4BAAA,CAAA,MAAO,IAAIjD,KAAAA,CAAMC,OAAO,CAACH,KAAAA,CAAAA,EAAQ;;;gCAG/B,OAAOa,cAAAA,CAAIoC,KAAK,EAAA,CAAGC,EAAE,CACnBrC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;oCACjB8C,EAAAA,EAAIhD,cAAAA,CAAIiD,MAAM,EAAA,CAAGhE,QAAQ;AAC3B,iCAAA,CAAA,CAAA;4BAEJ,CAAA,MAAO,IAAI,OAAOE,KAAAA,KAAU,QAAA,EAAU;;;;AAIpC,gCAAA,OAAOa,eAAIC,MAAM,EAAA;4BACnB,CAAA,MAAO;AACL,gCAAA,OAAOD,eACJ+C,KAAK,EAAA,CACL7D,IAAI,CACH,YAAA,EACA,oFACA,IAAM,KAAA,CAAA;AAEZ,4BAAA;AACF,wBAAA,CAAA,CAAA;AAEJ,qBAAA;AACF,gBAAA;oBACE,OAAO;AACL,wBAAA,GAAGoB,GAAG;wBACN,CAACC,IAAAA,GAAOwB,eAAAA,CAAgBmB,qBAAAA,CAAsBrE,SAAAA,CAAAA;AAChD,qBAAA;AACJ;AACF,QAAA,CAAA,EAAG,EAAC,CAAA,CAEN;;AAEC,WACAsE,OAAO,CAAC,IAAA,CAAA;IAEb,OAAOrD,iBAAAA,CAAkBF,YAAAA,EAAYd,OAAAA,CAAQiB,iBAAiB,CAAA;AAChE;AAEA,MAAMmD,wBAAwB,CAC5BrE,SAAAA,GAAAA;AAKA,IAAA,OAAQA,UAAUoD,IAAI;QACpB,KAAK,YAAA;AACH,YAAA,OAAOjC,cAAAA,CAAI2C,MAAM,EAAA,CAAGS,OAAO,CAAC,SAAA,CAAA;QAC9B,KAAK,SAAA;YACH,OAAOpD,cAAAA,CAAIqD,OAAO,EAAA,CAAGf,QAAQ,EAAA;QAC/B,KAAK,QAAA;YACH,OAAOtC,cAAAA,CAAI+C,KAAK,EAAA,CAAG7D,IAAI,CAAC,UAAA,EAAYF,4BAAAA,CAAiBsE,IAAI,EAAE,CAACnE,KAAAA,GAAAA;AAC1D,gBAAA,IAAI,CAACA,KAAAA,IAASE,KAAAA,CAAMC,OAAO,CAACH,KAAAA,CAAAA,EAAQ;oBAClC,OAAO,IAAA;gBACT,CAAA,MAAO;oBACL,OAAO,KAAA;AACT,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,KAAK,SAAA;QACL,KAAK,OAAA;QACL,KAAK,SAAA;AACH,YAAA,OAAOa,eAAIiD,MAAM,EAAA;QACnB,KAAK,OAAA;AACH,YAAA,OAAOjD,eAAI2C,MAAM,EAAA,CAAGY,KAAK,CAACvE,6BAAiBuE,KAAK,CAAA;QAClD,KAAK,aAAA;AACH,YAAA,OAAOvD,cAAAA,CAAI2C,MAAM,EAAA,CAAGC,KAAK,CAAC;AAAI/D,gBAAAA,GAAAA,SAAAA,CAAU2E,IAAI;AAAE,gBAAA;AAAK,aAAA,CAAA;QACrD,KAAK,MAAA;YACH,OAAOxD,cAAAA,CAAI+C,KAAK,EAAA,CAAG7D,IAAI,CAAC,QAAA,EAAUF,4BAAAA,CAAiBsE,IAAI,EAAE,CAACnE,KAAAA,GAAAA;AACxD;;YAGA,IAAI,CAACA,KAAAA,IAAU,OAAOA,UAAU,QAAA,IAAYA,KAAAA,CAAMI,MAAM,KAAK,CAAA,EAAI;oBAC/D,OAAO,IAAA;AACT,gBAAA;;gBAGA,IAAI,OAAOJ,UAAU,QAAA,EAAU;oBAC7B,IAAI;AACFsE,wBAAAA,IAAAA,CAAKC,SAAS,CAACvE,KAAAA,CAAAA;wBACf,OAAO,IAAA;AACT,oBAAA,CAAA,CAAE,OAAOwE,GAAAA,EAAK;wBACZ,OAAO,KAAA;AACT,oBAAA;AACF,gBAAA;gBAEA,IAAI;AACFF,oBAAAA,IAAAA,CAAKG,KAAK,CAACzE,KAAAA,CAAAA;oBAEX,OAAO,IAAA;AACT,gBAAA,CAAA,CAAE,OAAOwE,GAAAA,EAAK;oBACZ,OAAO,KAAA;AACT,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,KAAK,UAAA;YACH,OAAO3D,cAAAA,CAAI2C,MAAM,EAAA,CAAGL,QAAQ,EAAA;QAC9B,KAAK,UAAA;QACL,KAAK,QAAA;QACL,KAAK,MAAA;AACH,YAAA,OAAOtC,eAAI2C,MAAM,EAAA;QACnB,KAAK,KAAA;AACH,YAAA,OAAO3C,cAAAA,CACJ2C,MAAM,EAAA,CACNS,OAAO,CAACvE,SAAAA,CAAUgF,KAAK,GAAG,IAAIhD,MAAAA,CAAOhC,SAAAA,CAAUgF,KAAK,CAAA,GAAI,oBAAA,CAAA;AAC7D,QAAA;AACE;;UAGA,OAAO7D,eAAI+C,KAAK,EAAA;AACpB;AACF,CAAA;AAEA;AACA,MAAMe,iBAAiB,CAA4BC,MAAAA,GAAAA;AACjD,IAAA,OAAOA,MAAAA,EAAQzB,QAAAA,GACXyB,MAAAA,CAAOzB,QAAQ;;AAIfyB,IAAAA,MAAAA;AACN,CAAA;AAcA,MAAMxC,qBAAAA,GAAsC,IAAM,CAACwC,MAAAA,GAAAA;AACjD,QAAA,OAAOD,cAAAA,CAAeC,MAAAA,CAAAA;AACxB,IAAA,CAAA;AAEA,MAAMvC,qBAAAA,GAAsC,CAAC3C,SAAAA,EAAWC,OAAAA,GAAY,CAACiF,MAAAA,GAAAA;QACnE,IAAIjF,OAAAA,CAAQM,MAAM,KAAK,OAAA,IAAW,CAACP,SAAAA,CAAUI,QAAQ,IAAIJ,SAAAA,CAAUoD,IAAI,KAAK,UAAA,EAAY;YACtF,OAAO8B,MAAAA;AACT,QAAA;AAEA,QAAA,IAAIlF,SAAAA,CAAUI,QAAQ,IAAI,UAAA,IAAc8E,MAAAA,EAAQ;AAC9C,YAAA,OAAOA,MAAAA,CAAO9E,QAAQ,CAACD,4BAAAA,CAAiBC,QAAQ,CAAA;AAClD,QAAA;QAEA,OAAO8E,MAAAA;AACT,IAAA,CAAA;AAEA,MAAMtC,sBAAAA,GACJ,CAAC5C,SAAAA,EAAWC,OAAAA,GACZ,CAA4BiF,MAAAA,GAAAA;;QAE1B,IAAIjF,OAAAA,CAAQM,MAAM,KAAK,OAAA,EAAS;YAC9B,OAAO2E,MAAAA;AACT,QAAA;AAEA,QAAA,IACE,WAAA,IAAelF,SAAAA,IACfA,SAAAA,CAAUmF,SAAS,IACnBC,MAAAA,CAAOC,SAAS,CAACrF,SAAAA,CAAUmF,SAAS,CAAA,IACpC,KAAA,IAASD,MAAAA,EACT;AACA,YAAA,OAAOA,MAAAA,CAAOI,GAAG,CAACtF,SAAAA,CAAUmF,SAAS,EAAE;AACrC,gBAAA,GAAGhF,6BAAiBgF,SAAS;gBAC7BI,MAAAA,EAAQ;AACND,oBAAAA,GAAAA,EAAKtF,UAAUmF;AACjB;AACF,aAAA,CAAA;AACF,QAAA;QAEA,OAAOD,MAAAA;AACT,IAAA,CAAA;AAEF,MAAMrC,sBAAAA,GACJ,CAAC7C,SAAAA,GACD,CAA4BkF,MAAAA,GAAAA;AAC1B,QAAA,IACE,WAAA,IAAelF,SAAAA,IACfA,SAAAA,CAAUwF,SAAS,IACnBJ,MAAAA,CAAOC,SAAS,CAACrF,SAAAA,CAAUwF,SAAS,CAAA,IACpC,KAAA,IAASN,MAAAA,EACT;AACA,YAAA,OAAOA,MAAAA,CAAOO,GAAG,CAACzF,SAAAA,CAAUwF,SAAS,EAAE;AACrC,gBAAA,GAAGrF,6BAAiBqF,SAAS;gBAC7BD,MAAAA,EAAQ;AACNE,oBAAAA,GAAAA,EAAKzF,UAAUwF;AACjB;AACF,aAAA,CAAA;AACF,QAAA;QAEA,OAAON,MAAAA;AACT,IAAA,CAAA;AAEF,MAAMpC,gBAAAA,GACJ,CAAC9C,SAAAA,EAAWC,OAAAA,GACZ,CAA4BiF,MAAAA,GAAAA;QAC1B,IAAIjF,OAAAA,CAAQM,MAAM,KAAK,OAAA,EAAS;YAC9B,OAAO2E,MAAAA;AACT,QAAA;QAEA,IAAI,KAAA,IAASlF,SAAAA,IAAa,KAAA,IAASkF,MAAAA,EAAQ;YACzC,MAAMI,GAAAA,GAAMI,SAAAA,CAAU1F,SAAAA,CAAUsF,GAAG,CAAA;AAEnC,YAAA,IAAIA,QAAQK,SAAAA,EAAW;gBACrB,OAAOT,MAAAA,CAAOI,GAAG,CAACA,GAAAA,EAAK;AACrB,oBAAA,GAAGnF,6BAAiBmF,GAAG;oBACvBC,MAAAA,EAAQ;AACND,wBAAAA;AACF;AACF,iBAAA,CAAA;AACF,YAAA;AACF,QAAA;QAEA,OAAOJ,MAAAA;AACT,IAAA,CAAA;AAEF,MAAMnC,gBAAAA,GACJ,CAAC/C,SAAAA,GACD,CAA4BkF,MAAAA,GAAAA;AAC1B,QAAA,IAAI,SAASlF,SAAAA,EAAW;YACtB,MAAMyF,GAAAA,GAAMC,SAAAA,CAAU1F,SAAAA,CAAUyF,GAAG,CAAA;YAEnC,IAAI,KAAA,IAASP,MAAAA,IAAUO,GAAAA,KAAQE,SAAAA,EAAW;gBACxC,OAAOT,MAAAA,CAAOO,GAAG,CAACA,GAAAA,EAAK;AACrB,oBAAA,GAAGtF,6BAAiBsF,GAAG;oBACvBF,MAAAA,EAAQ;AACNE,wBAAAA;AACF;AACF,iBAAA,CAAA;AACF,YAAA;AACF,QAAA;QAEA,OAAOP,MAAAA;AACT,IAAA,CAAA;AAEF,MAAMQ,YAAY,CAACE,GAAAA,GAAAA;AACjB,IAAA,IAAI,OAAOA,GAAAA,KAAQ,QAAA,IAAYA,GAAAA,KAAQD,SAAAA,EAAW;QAChD,OAAOC,GAAAA;IACT,CAAA,MAAO;AACL,QAAA,MAAMC,MAAMT,MAAAA,CAAOQ,GAAAA,CAAAA;QACnB,OAAOE,KAAAA,CAAMD,OAAOF,SAAAA,GAAYE,GAAAA;AAClC,IAAA;AACF,CAAA;AAEA,MAAM7C,kBAAAA,GACJ,CAAChD,SAAAA,GACD,CAA4BkF,MAAAA,GAAAA;AAC1B,QAAA,IAAI,WAAWlF,SAAAA,IAAaA,SAAAA,CAAUgF,KAAK,IAAI,aAAaE,MAAAA,EAAQ;AAClE,YAAA,OAAOA,OAAOX,OAAO,CAAC,IAAIvC,MAAAA,CAAOhC,SAAAA,CAAUgF,KAAK,CAAA,EAAG;gBACjD9E,OAAAA,EAAS;oBACPiE,EAAAA,EAAIhE,4BAAAA,CAAiB6E,KAAK,CAACb,EAAE;oBAC7B4B,cAAAA,EAAgB;AAClB,iBAAA;gBAEAC,kBAAAA,EAAoB,CAAChG,UAAUI;AACjC,aAAA,CAAA;AACF,QAAA;QAEA,OAAO8E,MAAAA;AACT,IAAA,CAAA;;;;"}
1
+ {"version":3,"file":"validation.js","sources":["../../../admin/src/utils/validation.ts"],"sourcesContent":["import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport pipe from 'lodash/fp/pipe';\nimport * as yup from 'yup';\n\nimport { DOCUMENT_META_FIELDS } from '../constants/attributes';\n\nimport type { ComponentsDictionary, Schema } from '../hooks/useDocument';\nimport type { Schema as SchemaUtils } from '@strapi/types';\nimport type { ObjectShape } from 'yup/lib/object';\n\ntype AnySchema =\n | yup.StringSchema\n | yup.NumberSchema\n | yup.BooleanSchema\n | yup.DateSchema\n | yup.ArraySchema<any>\n | yup.ObjectSchema<any>;\n\n/* -------------------------------------------------------------------------------------------------\n * createYupSchema\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ValidationOptions {\n status: 'draft' | 'published' | null;\n removedAttributes?: string[];\n}\n\nconst arrayValidator = (attribute: Schema['attributes'][string], options: ValidationOptions) => ({\n message: translatedErrors.required,\n test(value: unknown) {\n if (options.status === 'draft') {\n return true;\n }\n\n if (!attribute.required) {\n return true;\n }\n\n if (!value) {\n return false;\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n\n return true;\n },\n});\nconst escapeRegex = (str: string) => str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n/**\n * TODO: should we create a Map to store these based on the hash of the schema?\n */\nconst createYupSchema = (\n attributes: Schema['attributes'] = {},\n components: ComponentsDictionary = {},\n options: ValidationOptions = { status: null }\n): yup.ObjectSchema<any> => {\n const createModelSchema = (\n attributes: Schema['attributes'],\n removedAttributes: string[] = []\n ): yup.ObjectSchema<any> =>\n yup\n .object()\n .shape(\n Object.entries(attributes).reduce<ObjectShape>((acc, [name, attribute]) => {\n const getNestedPathsForAttribute = (removed: string[], attrName: string): string[] => {\n const prefix = `${attrName}.`;\n // Match both numeric indices [0] and __temp_key__ values [some_key]\n const bracketRegex = new RegExp(`^${escapeRegex(attrName)}\\\\[[^\\\\]]+\\\\]\\\\.`);\n\n return removed\n .filter((p) => p.startsWith(prefix) || bracketRegex.test(p))\n .map((p) =>\n p.startsWith(prefix) ? p.slice(prefix.length) : p.replace(bracketRegex, '')\n );\n };\n\n if (DOCUMENT_META_FIELDS.includes(name)) {\n return acc;\n }\n\n if (removedAttributes?.includes(name)) {\n // If the attribute is not visible, we don't want to validate it\n return acc;\n }\n\n const nestedRemoved = getNestedPathsForAttribute(removedAttributes, name);\n\n /**\n * These validations won't apply to every attribute\n * and that's okay, in that case we just return the\n * schema as it was passed.\n */\n const validations = [\n addNullableValidation,\n addRequiredValidation,\n addMinLengthValidation,\n addMaxLengthValidation,\n addMinValidation,\n addMaxValidation,\n addRegexValidation,\n ].map((fn) => fn(attribute, options));\n\n const transformSchema = pipe(...validations);\n\n switch (attribute.type) {\n case 'component': {\n const { attributes } = components[attribute.component];\n\n if (attribute.repeatable) {\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(createModelSchema(attributes, nestedRemoved).nullable(false))\n ).test(arrayValidator(attribute, options)),\n };\n } else {\n return {\n ...acc,\n [name]: transformSchema(createModelSchema(attributes, nestedRemoved).nullable()),\n };\n }\n }\n case 'dynamiczone':\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(\n yup.lazy(\n (\n data: SchemaUtils.Attribute.Value<SchemaUtils.Attribute.DynamicZone>[number]\n ) => {\n const attributes = components?.[data?.__component]?.attributes;\n\n const validation = yup\n .object()\n .shape({\n __component: yup.string().required().oneOf(Object.keys(components)),\n })\n .nullable(false);\n if (!attributes) {\n return validation;\n }\n\n return validation.concat(createModelSchema(attributes, nestedRemoved));\n }\n ) as unknown as yup.ObjectSchema<any>\n )\n ).test(arrayValidator(attribute, options)),\n };\n case 'relation':\n return {\n ...acc,\n [name]: transformSchema(\n yup.lazy((value) => {\n if (!value) {\n return yup.mixed().nullable(true);\n } else if (Array.isArray(value)) {\n // If a relation value is an array, we expect\n // an array of objects with {id} properties, representing the related entities.\n return yup.array().of(\n yup.object().shape({\n id: yup.number().required(),\n })\n );\n } else if (typeof value === 'object') {\n // A realtion value can also be an object. Some API\n // repsonses return the number of entities in the relation\n // as { count: x }\n return yup.object();\n } else {\n return yup\n .mixed()\n .test(\n 'type-error',\n 'Relation values must be either null, an array of objects with {id} or an object.',\n () => false\n );\n }\n })\n ),\n };\n default:\n return {\n ...acc,\n [name]: transformSchema(createAttributeSchema(attribute)),\n };\n }\n }, {})\n )\n /**\n * TODO: investigate why an undefined object fails a check of `nullable`.\n */\n .default(null);\n\n return createModelSchema(attributes, options.removedAttributes);\n};\n\nconst createAttributeSchema = (\n attribute: Exclude<\n SchemaUtils.Attribute.AnyAttribute,\n { type: 'dynamiczone' } | { type: 'component' } | { type: 'relation' }\n >\n) => {\n switch (attribute.type) {\n case 'biginteger':\n return yup.string().matches(/^-?\\d*$/);\n case 'boolean':\n return yup.boolean().nullable();\n case 'blocks':\n return yup.mixed().test('isBlocks', translatedErrors.json, (value) => {\n if (!value || Array.isArray(value)) {\n return true;\n } else {\n return false;\n }\n });\n case 'decimal':\n case 'float':\n case 'integer':\n return yup.number();\n case 'email':\n return yup.string().email(translatedErrors.email);\n case 'enumeration':\n return yup.string().oneOf([...attribute.enum, null]);\n case 'json':\n return yup.mixed().test('isJSON', translatedErrors.json, (value) => {\n /**\n * We don't want to validate the JSON field if it's empty.\n */\n if (!value || (typeof value === 'string' && value.length === 0)) {\n return true;\n }\n\n // If the value was created via content API and wasn't changed, then it's still an object\n if (typeof value === 'object') {\n try {\n JSON.stringify(value);\n return true;\n } catch (err) {\n return false;\n }\n }\n\n try {\n JSON.parse(value);\n\n return true;\n } catch (err) {\n return false;\n }\n });\n case 'password':\n return yup.string().nullable();\n case 'richtext':\n case 'string':\n case 'text':\n return yup.string();\n case 'uid':\n return yup\n .string()\n .matches(attribute.regex ? new RegExp(attribute.regex) : /^[A-Za-z0-9-_.~]*$/);\n default:\n /**\n * This allows any value.\n */\n return yup.mixed();\n }\n};\n\n// Helper function to return schema.nullable() if it exists, otherwise return schema\nconst nullableSchema = <TSchema extends AnySchema>(schema: TSchema) => {\n return schema?.nullable\n ? schema.nullable()\n : // In some cases '.nullable' will not be available on the schema.\n // e.g. when the schema has been built using yup.lazy (e.g. for relations).\n // In these cases we should just return the schema as it is.\n schema;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Validators\n * -----------------------------------------------------------------------------------------------*/\n/**\n * Our validator functions can be preped with the\n * attribute and then have the schema piped through them.\n */\ntype ValidationFn = (\n attribute: Schema['attributes'][string],\n options: ValidationOptions\n) => <TSchema extends AnySchema>(schema: TSchema) => TSchema;\n\nconst addNullableValidation: ValidationFn = () => (schema) => {\n return nullableSchema(schema);\n};\n\nconst addRequiredValidation: ValidationFn = (attribute, options) => (schema) => {\n if (options.status === 'draft' || !attribute.required || attribute.type === 'password') {\n return schema;\n }\n\n if (attribute.required && 'required' in schema) {\n return schema.required(translatedErrors.required);\n }\n\n return schema;\n};\n\nconst addMinLengthValidation: ValidationFn =\n (attribute, options) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n // Skip minLength validation for draft\n if (options.status === 'draft') {\n return schema;\n }\n\n if (\n 'minLength' in attribute &&\n attribute.minLength &&\n Number.isInteger(attribute.minLength) &&\n 'min' in schema\n ) {\n return schema.min(attribute.minLength, {\n ...translatedErrors.minLength,\n values: {\n min: attribute.minLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMaxLengthValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (\n 'maxLength' in attribute &&\n attribute.maxLength &&\n Number.isInteger(attribute.maxLength) &&\n 'max' in schema\n ) {\n return schema.max(attribute.maxLength, {\n ...translatedErrors.maxLength,\n values: {\n max: attribute.maxLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMinValidation: ValidationFn =\n (attribute, options) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (options.status === 'draft') {\n return schema;\n }\n\n if ('min' in attribute && 'min' in schema) {\n const min = toInteger(attribute.min);\n\n if (min !== undefined) {\n return schema.min(min, {\n ...translatedErrors.min,\n values: {\n min,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst addMaxValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('max' in attribute) {\n const max = toInteger(attribute.max);\n\n if ('max' in schema && max !== undefined) {\n return schema.max(max, {\n ...translatedErrors.max,\n values: {\n max,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst toInteger = (val?: string | number): number | undefined => {\n if (typeof val === 'number' || val === undefined) {\n return val;\n } else {\n const num = Number(val);\n return isNaN(num) ? undefined : num;\n }\n};\n\nconst addRegexValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('regex' in attribute && attribute.regex && 'matches' in schema) {\n return schema.matches(new RegExp(attribute.regex), {\n message: {\n id: translatedErrors.regex.id,\n defaultMessage: 'The value does not match the defined pattern.',\n },\n\n excludeEmptyString: !attribute.required,\n }) as TSchema;\n }\n\n return schema;\n };\n\nexport { createYupSchema };\n"],"names":["arrayValidator","attribute","options","message","translatedErrors","required","test","value","status","Array","isArray","length","escapeRegex","str","replace","createYupSchema","attributes","components","createModelSchema","removedAttributes","yup","object","shape","Object","entries","reduce","acc","name","getNestedPathsForAttribute","removed","attrName","prefix","bracketRegex","RegExp","filter","p","startsWith","map","slice","DOCUMENT_META_FIELDS","includes","nestedRemoved","validations","addNullableValidation","addRequiredValidation","addMinLengthValidation","addMaxLengthValidation","addMinValidation","addMaxValidation","addRegexValidation","fn","transformSchema","pipe","type","component","repeatable","array","of","nullable","lazy","data","__component","validation","string","oneOf","keys","concat","mixed","id","number","createAttributeSchema","default","matches","boolean","json","email","enum","JSON","stringify","err","parse","regex","nullableSchema","schema","minLength","Number","isInteger","min","values","maxLength","max","toInteger","undefined","val","num","isNaN","defaultMessage","excludeEmptyString"],"mappings":"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"}
@@ -839,8 +839,13 @@ var collectionTypes = {
839
839
  return ctx.forbidden();
840
840
  }
841
841
  }
842
- // We filter out documentsIds that maybe doesn't exist in a specific locale
843
- const localeDocumentsIds = documentLocales.map((document)=>document.documentId);
842
+ // We filter out documentsIds that maybe doesn't exist in a specific locale.
843
+ // With draft & publish, findLocales returns a row per publication state, so the
844
+ // same documentId can appear twice (draft + published). Deduplicate to avoid
845
+ // deleting (and running document service middleware for) the same document twice.
846
+ const localeDocumentsIds = [
847
+ ...new Set(documentLocales.map((document)=>document.documentId))
848
+ ];
844
849
  const { count } = await documentManager.deleteMany(localeDocumentsIds, model, {
845
850
  locale
846
851
  });