@strapi/content-manager 0.0.0-next.d8f8da8f5b333be4a20563a1a15cd61350139956 → 0.0.0-next.da19c0501ff87d14fb664b55b8e0630d3c548485

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 (383) hide show
  1. package/dist/admin/components/ConfigurationForm/EditFieldForm.js +1 -1
  2. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +1 -1
  4. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/Fields.js +304 -205
  6. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/Fields.mjs +309 -211
  8. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  9. package/dist/admin/components/ConfigurationForm/Form.js +1 -1
  10. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  11. package/dist/admin/components/ConfigurationForm/Form.mjs +3 -3
  12. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
  13. package/dist/admin/components/DragPreviews/CardDragPreview.js +3 -1
  14. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
  15. package/dist/admin/components/DragPreviews/CardDragPreview.mjs +3 -1
  16. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
  17. package/dist/admin/components/DragPreviews/ComponentDragPreview.js +3 -1
  18. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
  19. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +3 -1
  20. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
  21. package/dist/admin/components/DragPreviews/RelationDragPreview.js +3 -1
  22. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  23. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +3 -1
  24. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  25. package/dist/admin/components/LeftMenu.js +94 -50
  26. package/dist/admin/components/LeftMenu.js.map +1 -1
  27. package/dist/admin/components/LeftMenu.mjs +97 -53
  28. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  29. package/dist/admin/components/Widgets.js +287 -11
  30. package/dist/admin/components/Widgets.js.map +1 -1
  31. package/dist/admin/components/Widgets.mjs +270 -14
  32. package/dist/admin/components/Widgets.mjs.map +1 -1
  33. package/dist/admin/history/components/VersionContent.js +24 -3
  34. package/dist/admin/history/components/VersionContent.js.map +1 -1
  35. package/dist/admin/history/components/VersionContent.mjs +25 -4
  36. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  37. package/dist/admin/history/components/VersionHeader.js +7 -0
  38. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  39. package/dist/admin/history/components/VersionHeader.mjs +8 -1
  40. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  41. package/dist/admin/history/components/VersionsList.js +1 -1
  42. package/dist/admin/history/components/VersionsList.js.map +1 -1
  43. package/dist/admin/history/components/VersionsList.mjs +1 -1
  44. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  45. package/dist/admin/history/pages/History.js +7 -7
  46. package/dist/admin/history/pages/History.js.map +1 -1
  47. package/dist/admin/history/pages/History.mjs +7 -7
  48. package/dist/admin/history/pages/History.mjs.map +1 -1
  49. package/dist/admin/hooks/useDocumentActions.js +7 -6
  50. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  51. package/dist/admin/hooks/useDocumentActions.mjs +8 -7
  52. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  53. package/dist/admin/index.js +47 -8
  54. package/dist/admin/index.js.map +1 -1
  55. package/dist/admin/index.mjs +47 -9
  56. package/dist/admin/index.mjs.map +1 -1
  57. package/dist/admin/layout.js +28 -33
  58. package/dist/admin/layout.js.map +1 -1
  59. package/dist/admin/layout.mjs +29 -15
  60. package/dist/admin/layout.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/EditViewPage.js +98 -77
  62. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  63. package/dist/admin/pages/EditView/EditViewPage.mjs +100 -79
  64. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  66. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  67. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  68. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  69. package/dist/admin/pages/EditView/components/DocumentActions.js +104 -70
  70. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/DocumentActions.mjs +106 -72
  72. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +66 -2
  74. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +66 -2
  76. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  78. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  80. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
  82. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
  84. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  86. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  88. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -2
  90. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -2
  92. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +7 -3
  94. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +7 -3
  96. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  98. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  100. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +15 -3
  102. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +16 -4
  104. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
  106. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
  108. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +22 -8
  110. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +24 -10
  112. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
  114. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
  116. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  117. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +160 -107
  118. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  119. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +163 -110
  120. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  121. package/dist/admin/pages/EditView/components/FormInputs/UID.js +6 -3
  122. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  123. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +6 -3
  124. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  125. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  126. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  127. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  128. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  129. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +2 -2
  130. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  131. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +2 -2
  132. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  133. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  134. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  135. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  136. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  137. package/dist/admin/pages/EditView/components/FormLayout.js +59 -34
  138. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  139. package/dist/admin/pages/EditView/components/FormLayout.mjs +60 -34
  140. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  141. package/dist/admin/pages/EditView/components/Header.js +85 -25
  142. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  143. package/dist/admin/pages/EditView/components/Header.mjs +87 -27
  144. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  145. package/dist/admin/pages/EditView/components/InputRenderer.js +20 -7
  146. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  147. package/dist/admin/pages/EditView/components/InputRenderer.mjs +20 -7
  148. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  149. package/dist/admin/pages/EditView/utils/data.js +128 -0
  150. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  151. package/dist/admin/pages/EditView/utils/data.mjs +128 -1
  152. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  153. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
  154. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  155. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
  156. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  157. package/dist/admin/pages/ListView/ListViewPage.js +227 -132
  158. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  159. package/dist/admin/pages/ListView/ListViewPage.mjs +229 -134
  160. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  161. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  162. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  163. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  164. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  165. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
  166. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  167. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
  168. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  169. package/dist/admin/pages/ListView/components/Filters.js +8 -2
  170. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  171. package/dist/admin/pages/ListView/components/Filters.mjs +8 -2
  172. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  173. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  174. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  175. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  176. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  177. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
  178. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
  179. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
  180. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
  181. package/dist/admin/preview/components/InputPopover.js +189 -0
  182. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  183. package/dist/admin/preview/components/InputPopover.mjs +167 -0
  184. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  185. package/dist/admin/preview/components/PreviewHeader.js +0 -1
  186. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  187. package/dist/admin/preview/components/PreviewHeader.mjs +0 -1
  188. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  189. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  190. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  191. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  192. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  193. package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
  194. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  195. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
  196. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  197. package/dist/admin/preview/pages/Preview.js +178 -74
  198. package/dist/admin/preview/pages/Preview.js.map +1 -1
  199. package/dist/admin/preview/pages/Preview.mjs +180 -76
  200. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  201. package/dist/admin/preview/utils/constants.js +56 -0
  202. package/dist/admin/preview/utils/constants.js.map +1 -0
  203. package/dist/admin/preview/utils/constants.mjs +52 -0
  204. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  205. package/dist/admin/preview/utils/fieldUtils.js +107 -0
  206. package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
  207. package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
  208. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
  209. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  210. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  211. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  212. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  213. package/dist/admin/preview/utils/previewScript.js +534 -0
  214. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  215. package/dist/admin/preview/utils/previewScript.mjs +532 -0
  216. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  217. package/dist/admin/services/api.js +5 -1
  218. package/dist/admin/services/api.js.map +1 -1
  219. package/dist/admin/services/api.mjs +5 -1
  220. package/dist/admin/services/api.mjs.map +1 -1
  221. package/dist/admin/services/documents.js +59 -17
  222. package/dist/admin/services/documents.js.map +1 -1
  223. package/dist/admin/services/documents.mjs +59 -17
  224. package/dist/admin/services/documents.mjs.map +1 -1
  225. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  226. package/dist/admin/src/components/LeftMenu.d.ts +3 -1
  227. package/dist/admin/src/components/Widgets.d.ts +8 -3
  228. package/dist/admin/src/exports.d.ts +1 -0
  229. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  230. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  231. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  232. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +2 -0
  233. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  234. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -11
  235. package/dist/admin/src/pages/EditView/components/Header.d.ts +4 -0
  236. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  237. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  238. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  239. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
  240. package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
  241. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  242. package/dist/admin/src/preview/utils/constants.d.ts +55 -0
  243. package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
  244. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  245. package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
  246. package/dist/admin/src/services/api.d.ts +1 -1
  247. package/dist/admin/src/services/components.d.ts +2 -2
  248. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  249. package/dist/admin/src/services/documents.d.ts +23 -17
  250. package/dist/admin/src/services/homepage.d.ts +1 -1
  251. package/dist/admin/src/services/init.d.ts +1 -1
  252. package/dist/admin/src/services/relations.d.ts +2 -2
  253. package/dist/admin/src/services/uid.d.ts +3 -3
  254. package/dist/admin/src/utils/api.d.ts +1 -1
  255. package/dist/admin/src/utils/validation.d.ts +1 -0
  256. package/dist/admin/translations/en.json.js +13 -0
  257. package/dist/admin/translations/en.json.js.map +1 -1
  258. package/dist/admin/translations/en.json.mjs +13 -0
  259. package/dist/admin/translations/en.json.mjs.map +1 -1
  260. package/dist/admin/translations/es.json.js +6 -2
  261. package/dist/admin/translations/es.json.js.map +1 -1
  262. package/dist/admin/translations/es.json.mjs +6 -2
  263. package/dist/admin/translations/es.json.mjs.map +1 -1
  264. package/dist/admin/translations/fr.json.js +11 -2
  265. package/dist/admin/translations/fr.json.js.map +1 -1
  266. package/dist/admin/translations/fr.json.mjs +11 -2
  267. package/dist/admin/translations/fr.json.mjs.map +1 -1
  268. package/dist/admin/utils/api.js +1 -1
  269. package/dist/admin/utils/api.js.map +1 -1
  270. package/dist/admin/utils/api.mjs +1 -1
  271. package/dist/admin/utils/api.mjs.map +1 -1
  272. package/dist/admin/utils/validation.js +19 -7
  273. package/dist/admin/utils/validation.js.map +1 -1
  274. package/dist/admin/utils/validation.mjs +19 -7
  275. package/dist/admin/utils/validation.mjs.map +1 -1
  276. package/dist/server/controllers/collection-types.js +2 -1
  277. package/dist/server/controllers/collection-types.js.map +1 -1
  278. package/dist/server/controllers/collection-types.mjs +2 -1
  279. package/dist/server/controllers/collection-types.mjs.map +1 -1
  280. package/dist/server/controllers/content-types.js +11 -1
  281. package/dist/server/controllers/content-types.js.map +1 -1
  282. package/dist/server/controllers/content-types.mjs +11 -1
  283. package/dist/server/controllers/content-types.mjs.map +1 -1
  284. package/dist/server/controllers/relations.js +8 -6
  285. package/dist/server/controllers/relations.js.map +1 -1
  286. package/dist/server/controllers/relations.mjs +8 -6
  287. package/dist/server/controllers/relations.mjs.map +1 -1
  288. package/dist/server/controllers/single-types.js.map +1 -1
  289. package/dist/server/controllers/single-types.mjs.map +1 -1
  290. package/dist/server/controllers/validation/index.js +14 -2
  291. package/dist/server/controllers/validation/index.js.map +1 -1
  292. package/dist/server/controllers/validation/index.mjs +14 -2
  293. package/dist/server/controllers/validation/index.mjs.map +1 -1
  294. package/dist/server/history/services/lifecycles.js +23 -19
  295. package/dist/server/history/services/lifecycles.js.map +1 -1
  296. package/dist/server/history/services/lifecycles.mjs +23 -19
  297. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  298. package/dist/server/homepage/controllers/homepage.js +5 -0
  299. package/dist/server/homepage/controllers/homepage.js.map +1 -1
  300. package/dist/server/homepage/controllers/homepage.mjs +5 -0
  301. package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
  302. package/dist/server/homepage/routes/homepage.js +11 -0
  303. package/dist/server/homepage/routes/homepage.js.map +1 -1
  304. package/dist/server/homepage/routes/homepage.mjs +11 -0
  305. package/dist/server/homepage/routes/homepage.mjs.map +1 -1
  306. package/dist/server/homepage/services/homepage.js +86 -46
  307. package/dist/server/homepage/services/homepage.js.map +1 -1
  308. package/dist/server/homepage/services/homepage.mjs +86 -46
  309. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  310. package/dist/server/preview/services/preview-config.js +11 -32
  311. package/dist/server/preview/services/preview-config.js.map +1 -1
  312. package/dist/server/preview/services/preview-config.mjs +12 -33
  313. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  314. package/dist/server/preview/services/preview.js +4 -0
  315. package/dist/server/preview/services/preview.js.map +1 -1
  316. package/dist/server/preview/services/preview.mjs +4 -0
  317. package/dist/server/preview/services/preview.mjs.map +1 -1
  318. package/dist/server/services/data-mapper.js +4 -1
  319. package/dist/server/services/data-mapper.js.map +1 -1
  320. package/dist/server/services/data-mapper.mjs +4 -1
  321. package/dist/server/services/data-mapper.mjs.map +1 -1
  322. package/dist/server/services/document-manager.js +8 -1
  323. package/dist/server/services/document-manager.js.map +1 -1
  324. package/dist/server/services/document-manager.mjs +8 -1
  325. package/dist/server/services/document-manager.mjs.map +1 -1
  326. package/dist/server/services/document-metadata.js +3 -1
  327. package/dist/server/services/document-metadata.js.map +1 -1
  328. package/dist/server/services/document-metadata.mjs +3 -1
  329. package/dist/server/services/document-metadata.mjs.map +1 -1
  330. package/dist/server/services/utils/configuration/attributes.js +1 -1
  331. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  332. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  333. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  334. package/dist/server/services/utils/configuration/layouts.js +1 -1
  335. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  336. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  337. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  338. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  339. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  340. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  341. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  342. package/dist/server/services/utils/populate.js +11 -0
  343. package/dist/server/services/utils/populate.js.map +1 -1
  344. package/dist/server/services/utils/populate.mjs +11 -0
  345. package/dist/server/services/utils/populate.mjs.map +1 -1
  346. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  347. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  348. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  349. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  350. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  351. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  352. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  353. package/dist/server/src/homepage/controllers/homepage.d.ts +2 -1
  354. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  355. package/dist/server/src/homepage/index.d.ts +7 -0
  356. package/dist/server/src/homepage/index.d.ts.map +1 -1
  357. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -1
  358. package/dist/server/src/homepage/services/homepage.d.ts +4 -1
  359. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  360. package/dist/server/src/homepage/services/index.d.ts +7 -0
  361. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  362. package/dist/server/src/index.d.ts +8 -0
  363. package/dist/server/src/index.d.ts.map +1 -1
  364. package/dist/server/src/preview/services/index.d.ts +1 -0
  365. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  366. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  367. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  368. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  369. package/dist/server/src/preview/utils.d.ts +1 -0
  370. package/dist/server/src/preview/utils.d.ts.map +1 -1
  371. package/dist/server/src/services/data-mapper.d.ts +1 -0
  372. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  373. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  374. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  375. package/dist/server/src/services/index.d.ts +8 -0
  376. package/dist/server/src/services/index.d.ts.map +1 -1
  377. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  378. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  379. package/dist/shared/contracts/collection-types.d.ts +0 -1
  380. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  381. package/dist/shared/contracts/homepage.d.ts +13 -0
  382. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  383. package/package.json +11 -9
@@ -42,15 +42,26 @@ const arrayValidator = (attribute, options)=>({
42
42
  return true;
43
43
  }
44
44
  });
45
+ const escapeRegex = (str)=>str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
45
46
  /**
46
47
  * TODO: should we create a Map to store these based on the hash of the schema?
47
48
  */ const createYupSchema = (attributes$1 = {}, components = {}, options = {
48
49
  status: null
49
50
  })=>{
50
- const createModelSchema = (attributes$1)=>yup__namespace.object().shape(Object.entries(attributes$1).reduce((acc, [name, attribute])=>{
51
+ const createModelSchema = (attributes$1, removedAttributes = [])=>yup__namespace.object().shape(Object.entries(attributes$1).reduce((acc, [name, attribute])=>{
52
+ const getNestedPathsForAttribute = (removed, attrName)=>{
53
+ const prefix = `${attrName}.`;
54
+ const bracketRegex = new RegExp(`^${escapeRegex(attrName)}\\[\\d+\\]\\.`);
55
+ return removed.filter((p)=>p.startsWith(prefix) || bracketRegex.test(p)).map((p)=>p.startsWith(prefix) ? p.slice(prefix.length) : p.replace(bracketRegex, ''));
56
+ };
51
57
  if (attributes.DOCUMENT_META_FIELDS.includes(name)) {
52
58
  return acc;
53
59
  }
60
+ if (removedAttributes?.includes(name)) {
61
+ // If the attribute is not visible, we don't want to validate it
62
+ return acc;
63
+ }
64
+ const nestedRemoved = getNestedPathsForAttribute(removedAttributes, name);
54
65
  /**
55
66
  * These validations won't apply to every attribute
56
67
  * and that's okay, in that case we just return the
@@ -72,12 +83,12 @@ const arrayValidator = (attribute, options)=>({
72
83
  if (attribute.repeatable) {
73
84
  return {
74
85
  ...acc,
75
- [name]: transformSchema(yup__namespace.array().of(createModelSchema(attributes).nullable(false))).test(arrayValidator(attribute, options))
86
+ [name]: transformSchema(yup__namespace.array().of(createModelSchema(attributes, nestedRemoved).nullable(false))).test(arrayValidator(attribute, options))
76
87
  };
77
88
  } else {
78
89
  return {
79
90
  ...acc,
80
- [name]: transformSchema(createModelSchema(attributes).nullable())
91
+ [name]: transformSchema(createModelSchema(attributes, nestedRemoved).nullable())
81
92
  };
82
93
  }
83
94
  }
@@ -92,7 +103,7 @@ const arrayValidator = (attribute, options)=>({
92
103
  if (!attributes) {
93
104
  return validation;
94
105
  }
95
- return validation.concat(createModelSchema(attributes));
106
+ return validation.concat(createModelSchema(attributes, nestedRemoved));
96
107
  }))).test(arrayValidator(attribute, options))
97
108
  };
98
109
  case 'relation':
@@ -126,7 +137,7 @@ const arrayValidator = (attribute, options)=>({
126
137
  }, {}))/**
127
138
  * TODO: investigate why an undefined object fails a check of `nullable`.
128
139
  */ .default(null);
129
- return createModelSchema(attributes$1);
140
+ return createModelSchema(attributes$1, options.removedAttributes);
130
141
  };
131
142
  const createAttributeSchema = (attribute)=>{
132
143
  switch(attribute.type){
@@ -177,12 +188,13 @@ const createAttributeSchema = (attribute)=>{
177
188
  }
178
189
  });
179
190
  case 'password':
191
+ return yup__namespace.string().nullable();
180
192
  case 'richtext':
181
193
  case 'string':
182
194
  case 'text':
183
195
  return yup__namespace.string();
184
196
  case 'uid':
185
- return yup__namespace.string().matches(/^[A-Za-z0-9-_.~]*$/);
197
+ return yup__namespace.string().matches(attribute.regex ? new RegExp(attribute.regex) : /^[A-Za-z0-9-_.~]*$/);
186
198
  default:
187
199
  /**
188
200
  * This allows any value.
@@ -199,7 +211,7 @@ const addNullableValidation = ()=>(schema)=>{
199
211
  return nullableSchema(schema);
200
212
  };
201
213
  const addRequiredValidation = (attribute, options)=>(schema)=>{
202
- if (options.status === 'draft' || !attribute.required) {
214
+ if (options.status === 'draft' || !attribute.required || attribute.type === 'password') {
203
215
  return schema;
204
216
  }
205
217
  if (attribute.required && 'required' in schema) {
@@ -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}\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});\n\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 = (attributes: Schema['attributes']): yup.ObjectSchema<any> =>\n yup\n .object()\n .shape(\n Object.entries(attributes).reduce<ObjectShape>((acc, [name, attribute]) => {\n if (DOCUMENT_META_FIELDS.includes(name)) {\n return acc;\n }\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).nullable(false))\n ).test(arrayValidator(attribute, options)),\n };\n } else {\n return {\n ...acc,\n [name]: transformSchema(createModelSchema(attributes).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));\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);\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();\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 case 'richtext':\n case 'string':\n case 'text':\n return yup.string();\n case 'uid':\n return yup.string().matches(/^[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) {\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 // do not validate min for draft\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) {\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) {\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","createYupSchema","attributes","components","createModelSchema","yup","object","shape","Object","entries","reduce","acc","name","DOCUMENT_META_FIELDS","includes","validations","addNullableValidation","addRequiredValidation","addMinLengthValidation","addMaxLengthValidation","addMinValidation","addMaxValidation","addRegexValidation","map","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","nullableSchema","schema","minLength","Number","isInteger","min","values","maxLength","max","toInteger","val","undefined","num","isNaN","regex","RegExp","defaultMessage","excludeEmptyString"],"mappings":"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"}
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 const bracketRegex = new RegExp(`^${escapeRegex(attrName)}\\\\[\\\\d+\\\\]\\\\.`);\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();\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 // do not validate min for draft\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) {\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) {\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","val","undefined","num","isNaN","defaultMessage","excludeEmptyString"],"mappings":"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"}
@@ -21,15 +21,26 @@ const arrayValidator = (attribute, options)=>({
21
21
  return true;
22
22
  }
23
23
  });
24
+ const escapeRegex = (str)=>str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
24
25
  /**
25
26
  * TODO: should we create a Map to store these based on the hash of the schema?
26
27
  */ const createYupSchema = (attributes = {}, components = {}, options = {
27
28
  status: null
28
29
  })=>{
29
- const createModelSchema = (attributes)=>yup.object().shape(Object.entries(attributes).reduce((acc, [name, attribute])=>{
30
+ const createModelSchema = (attributes, removedAttributes = [])=>yup.object().shape(Object.entries(attributes).reduce((acc, [name, attribute])=>{
31
+ const getNestedPathsForAttribute = (removed, attrName)=>{
32
+ const prefix = `${attrName}.`;
33
+ const bracketRegex = new RegExp(`^${escapeRegex(attrName)}\\[\\d+\\]\\.`);
34
+ return removed.filter((p)=>p.startsWith(prefix) || bracketRegex.test(p)).map((p)=>p.startsWith(prefix) ? p.slice(prefix.length) : p.replace(bracketRegex, ''));
35
+ };
30
36
  if (DOCUMENT_META_FIELDS.includes(name)) {
31
37
  return acc;
32
38
  }
39
+ if (removedAttributes?.includes(name)) {
40
+ // If the attribute is not visible, we don't want to validate it
41
+ return acc;
42
+ }
43
+ const nestedRemoved = getNestedPathsForAttribute(removedAttributes, name);
33
44
  /**
34
45
  * These validations won't apply to every attribute
35
46
  * and that's okay, in that case we just return the
@@ -51,12 +62,12 @@ const arrayValidator = (attribute, options)=>({
51
62
  if (attribute.repeatable) {
52
63
  return {
53
64
  ...acc,
54
- [name]: transformSchema(yup.array().of(createModelSchema(attributes).nullable(false))).test(arrayValidator(attribute, options))
65
+ [name]: transformSchema(yup.array().of(createModelSchema(attributes, nestedRemoved).nullable(false))).test(arrayValidator(attribute, options))
55
66
  };
56
67
  } else {
57
68
  return {
58
69
  ...acc,
59
- [name]: transformSchema(createModelSchema(attributes).nullable())
70
+ [name]: transformSchema(createModelSchema(attributes, nestedRemoved).nullable())
60
71
  };
61
72
  }
62
73
  }
@@ -71,7 +82,7 @@ const arrayValidator = (attribute, options)=>({
71
82
  if (!attributes) {
72
83
  return validation;
73
84
  }
74
- return validation.concat(createModelSchema(attributes));
85
+ return validation.concat(createModelSchema(attributes, nestedRemoved));
75
86
  }))).test(arrayValidator(attribute, options))
76
87
  };
77
88
  case 'relation':
@@ -105,7 +116,7 @@ const arrayValidator = (attribute, options)=>({
105
116
  }, {}))/**
106
117
  * TODO: investigate why an undefined object fails a check of `nullable`.
107
118
  */ .default(null);
108
- return createModelSchema(attributes);
119
+ return createModelSchema(attributes, options.removedAttributes);
109
120
  };
110
121
  const createAttributeSchema = (attribute)=>{
111
122
  switch(attribute.type){
@@ -156,12 +167,13 @@ const createAttributeSchema = (attribute)=>{
156
167
  }
157
168
  });
158
169
  case 'password':
170
+ return yup.string().nullable();
159
171
  case 'richtext':
160
172
  case 'string':
161
173
  case 'text':
162
174
  return yup.string();
163
175
  case 'uid':
164
- return yup.string().matches(/^[A-Za-z0-9-_.~]*$/);
176
+ return yup.string().matches(attribute.regex ? new RegExp(attribute.regex) : /^[A-Za-z0-9-_.~]*$/);
165
177
  default:
166
178
  /**
167
179
  * This allows any value.
@@ -178,7 +190,7 @@ const addNullableValidation = ()=>(schema)=>{
178
190
  return nullableSchema(schema);
179
191
  };
180
192
  const addRequiredValidation = (attribute, options)=>(schema)=>{
181
- if (options.status === 'draft' || !attribute.required) {
193
+ if (options.status === 'draft' || !attribute.required || attribute.type === 'password') {
182
194
  return schema;
183
195
  }
184
196
  if (attribute.required && 'required' in schema) {
@@ -1 +1 @@
1
- {"version":3,"file":"validation.mjs","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}\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});\n\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 = (attributes: Schema['attributes']): yup.ObjectSchema<any> =>\n yup\n .object()\n .shape(\n Object.entries(attributes).reduce<ObjectShape>((acc, [name, attribute]) => {\n if (DOCUMENT_META_FIELDS.includes(name)) {\n return acc;\n }\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).nullable(false))\n ).test(arrayValidator(attribute, options)),\n };\n } else {\n return {\n ...acc,\n [name]: transformSchema(createModelSchema(attributes).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));\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);\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();\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 case 'richtext':\n case 'string':\n case 'text':\n return yup.string();\n case 'uid':\n return yup.string().matches(/^[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) {\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 // do not validate min for draft\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) {\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) {\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","createYupSchema","attributes","components","createModelSchema","yup","object","shape","Object","entries","reduce","acc","name","DOCUMENT_META_FIELDS","includes","validations","addNullableValidation","addRequiredValidation","addMinLengthValidation","addMaxLengthValidation","addMinValidation","addMaxValidation","addRegexValidation","map","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","nullableSchema","schema","minLength","Number","isInteger","min","values","maxLength","max","toInteger","val","undefined","num","isNaN","regex","RegExp","defaultMessage","excludeEmptyString"],"mappings":";;;;;AA0BA,MAAMA,cAAiB,GAAA,CAACC,SAAyCC,EAAAA,OAAAA,IAAgC;AAC/FC,QAAAA,OAAAA,EAASC,iBAAiBC,QAAQ;AAClCC,QAAAA,IAAAA,CAAAA,CAAKC,KAAc,EAAA;YACjB,IAAIL,OAAAA,CAAQM,MAAM,KAAK,OAAS,EAAA;gBAC9B,OAAO,IAAA;AACT;YAEA,IAAI,CAACP,SAAUI,CAAAA,QAAQ,EAAE;gBACvB,OAAO,IAAA;AACT;AAEA,YAAA,IAAI,CAACE,KAAO,EAAA;gBACV,OAAO,KAAA;AACT;AAEA,YAAA,IAAIE,MAAMC,OAAO,CAACH,UAAUA,KAAMI,CAAAA,MAAM,KAAK,CAAG,EAAA;gBAC9C,OAAO,KAAA;AACT;YAEA,OAAO,IAAA;AACT;KACF,CAAA;AAEA;;IAGA,MAAMC,eAAkB,GAAA,CACtBC,UAAmC,GAAA,EAAE,EACrCC,UAAmC,GAAA,EAAE,EACrCZ,OAA6B,GAAA;IAAEM,MAAQ,EAAA;AAAK,CAAC,GAAA;AAE7C,IAAA,MAAMO,oBAAoB,CAACF,UAAAA,GACzBG,IACGC,MAAM,EAAA,CACNC,KAAK,CACJC,MAAAA,CAAOC,OAAO,CAACP,YAAYQ,MAAM,CAAc,CAACC,GAAK,EAAA,CAACC,MAAMtB,SAAU,CAAA,GAAA;YACpE,IAAIuB,oBAAAA,CAAqBC,QAAQ,CAACF,IAAO,CAAA,EAAA;gBACvC,OAAOD,GAAAA;AACT;AAEA;;;;AAIC,cACD,MAAMI,WAAc,GAAA;AAClBC,gBAAAA,qBAAAA;AACAC,gBAAAA,qBAAAA;AACAC,gBAAAA,sBAAAA;AACAC,gBAAAA,sBAAAA;AACAC,gBAAAA,gBAAAA;AACAC,gBAAAA,gBAAAA;AACAC,gBAAAA;AACD,aAAA,CAACC,GAAG,CAAC,CAACC,EAAAA,GAAOA,GAAGlC,SAAWC,EAAAA,OAAAA,CAAAA,CAAAA;AAE5B,YAAA,MAAMkC,kBAAkBC,IAAQX,CAAAA,GAAAA,WAAAA,CAAAA;AAEhC,YAAA,OAAQzB,UAAUqC,IAAI;gBACpB,KAAK,WAAA;AAAa,oBAAA;wBAChB,MAAM,EAAEzB,UAAU,EAAE,GAAGC,UAAU,CAACb,SAAAA,CAAUsC,SAAS,CAAC;wBAEtD,IAAItC,SAAAA,CAAUuC,UAAU,EAAE;4BACxB,OAAO;AACL,gCAAA,GAAGlB,GAAG;AACN,gCAAA,CAACC,OAAOa,eAAAA,CACNpB,GAAIyB,CAAAA,KAAK,GAAGC,EAAE,CAAC3B,iBAAkBF,CAAAA,UAAAA,CAAAA,CAAY8B,QAAQ,CAAC,KAAA,CAAA,CAAA,CAAA,CACtDrC,IAAI,CAACN,eAAeC,SAAWC,EAAAA,OAAAA,CAAAA;AACnC,6BAAA;yBACK,MAAA;4BACL,OAAO;AACL,gCAAA,GAAGoB,GAAG;AACN,gCAAA,CAACC,IAAK,GAAEa,eAAgBrB,CAAAA,iBAAAA,CAAkBF,YAAY8B,QAAQ,EAAA;AAChE,6BAAA;AACF;AACF;gBACA,KAAK,aAAA;oBACH,OAAO;AACL,wBAAA,GAAGrB,GAAG;wBACN,CAACC,IAAAA,GAAOa,eAAAA,CACNpB,GAAIyB,CAAAA,KAAK,EAAGC,CAAAA,EAAE,CACZ1B,GAAAA,CAAI4B,IAAI,CACN,CACEC,IAAAA,GAAAA;AAEA,4BAAA,MAAMhC,UAAaC,GAAAA,UAAAA,GAAa+B,IAAAA,EAAMC,YAAY,EAAEjC,UAAAA;AAEpD,4BAAA,MAAMkC,UAAa/B,GAAAA,GAAAA,CAChBC,MAAM,EAAA,CACNC,KAAK,CAAC;gCACL4B,WAAa9B,EAAAA,GAAAA,CAAIgC,MAAM,EAAG3C,CAAAA,QAAQ,GAAG4C,KAAK,CAAC9B,MAAO+B,CAAAA,IAAI,CAACpC,UAAAA,CAAAA;AACzD,6BAAA,CAAA,CACC6B,QAAQ,CAAC,KAAA,CAAA;AACZ,4BAAA,IAAI,CAAC9B,UAAY,EAAA;gCACf,OAAOkC,UAAAA;AACT;4BAEA,OAAOA,UAAAA,CAAWI,MAAM,CAACpC,iBAAkBF,CAAAA,UAAAA,CAAAA,CAAAA;yBAIjDP,CAAAA,CAAAA,CAAAA,CAAAA,IAAI,CAACN,cAAAA,CAAeC,SAAWC,EAAAA,OAAAA,CAAAA;AACnC,qBAAA;gBACF,KAAK,UAAA;oBACH,OAAO;AACL,wBAAA,GAAGoB,GAAG;AACN,wBAAA,CAACC,OAAOa,eAAAA,CACNpB,GAAI4B,CAAAA,IAAI,CAAC,CAACrC,KAAAA,GAAAA;AACR,4BAAA,IAAI,CAACA,KAAO,EAAA;AACV,gCAAA,OAAOS,GAAIoC,CAAAA,KAAK,EAAGT,CAAAA,QAAQ,CAAC,IAAA,CAAA;AAC9B,6BAAA,MAAO,IAAIlC,KAAAA,CAAMC,OAAO,CAACH,KAAQ,CAAA,EAAA;;;gCAG/B,OAAOS,GAAAA,CAAIyB,KAAK,EAAGC,CAAAA,EAAE,CACnB1B,GAAIC,CAAAA,MAAM,EAAGC,CAAAA,KAAK,CAAC;oCACjBmC,EAAIrC,EAAAA,GAAAA,CAAIsC,MAAM,EAAA,CAAGjD,QAAQ;AAC3B,iCAAA,CAAA,CAAA;6BAEG,MAAA,IAAI,OAAOE,KAAAA,KAAU,QAAU,EAAA;;;;AAIpC,gCAAA,OAAOS,IAAIC,MAAM,EAAA;6BACZ,MAAA;AACL,gCAAA,OAAOD,IACJoC,KAAK,EAAA,CACL9C,IAAI,CACH,YAAA,EACA,oFACA,IAAM,KAAA,CAAA;AAEZ;AACF,yBAAA,CAAA;AAEJ,qBAAA;AACF,gBAAA;oBACE,OAAO;AACL,wBAAA,GAAGgB,GAAG;wBACN,CAACC,IAAAA,GAAOa,eAAAA,CAAgBmB,qBAAsBtD,CAAAA,SAAAA,CAAAA;AAChD,qBAAA;AACJ;AACF,SAAA,EAAG,EAEL,CAAA,CAAA;;AAEC,WACAuD,OAAO,CAAC,IAAA,CAAA;AAEb,IAAA,OAAOzC,iBAAkBF,CAAAA,UAAAA,CAAAA;AAC3B;AAEA,MAAM0C,wBAAwB,CAC5BtD,SAAAA,GAAAA;AAKA,IAAA,OAAQA,UAAUqC,IAAI;QACpB,KAAK,YAAA;AACH,YAAA,OAAOtB,GAAIgC,CAAAA,MAAM,EAAGS,CAAAA,OAAO,CAAC,SAAA,CAAA;QAC9B,KAAK,SAAA;AACH,YAAA,OAAOzC,IAAI0C,OAAO,EAAA;QACpB,KAAK,QAAA;YACH,OAAO1C,GAAAA,CAAIoC,KAAK,EAAG9C,CAAAA,IAAI,CAAC,UAAYF,EAAAA,gBAAAA,CAAiBuD,IAAI,EAAE,CAACpD,KAAAA,GAAAA;AAC1D,gBAAA,IAAI,CAACA,KAAAA,IAASE,KAAMC,CAAAA,OAAO,CAACH,KAAQ,CAAA,EAAA;oBAClC,OAAO,IAAA;iBACF,MAAA;oBACL,OAAO,KAAA;AACT;AACF,aAAA,CAAA;QACF,KAAK,SAAA;QACL,KAAK,OAAA;QACL,KAAK,SAAA;AACH,YAAA,OAAOS,IAAIsC,MAAM,EAAA;QACnB,KAAK,OAAA;AACH,YAAA,OAAOtC,IAAIgC,MAAM,EAAA,CAAGY,KAAK,CAACxD,iBAAiBwD,KAAK,CAAA;QAClD,KAAK,aAAA;AACH,YAAA,OAAO5C,GAAIgC,CAAAA,MAAM,EAAGC,CAAAA,KAAK,CAAC;AAAIhD,gBAAAA,GAAAA,SAAAA,CAAU4D,IAAI;AAAE,gBAAA;AAAK,aAAA,CAAA;QACrD,KAAK,MAAA;YACH,OAAO7C,GAAAA,CAAIoC,KAAK,EAAG9C,CAAAA,IAAI,CAAC,QAAUF,EAAAA,gBAAAA,CAAiBuD,IAAI,EAAE,CAACpD,KAAAA,GAAAA;AACxD;;YAGA,IAAI,CAACA,KAAU,IAAA,OAAOA,UAAU,QAAYA,IAAAA,KAAAA,CAAMI,MAAM,KAAK,CAAI,EAAA;oBAC/D,OAAO,IAAA;AACT;;gBAGA,IAAI,OAAOJ,UAAU,QAAU,EAAA;oBAC7B,IAAI;AACFuD,wBAAAA,IAAAA,CAAKC,SAAS,CAACxD,KAAAA,CAAAA;wBACf,OAAO,IAAA;AACT,qBAAA,CAAE,OAAOyD,GAAK,EAAA;wBACZ,OAAO,KAAA;AACT;AACF;gBAEA,IAAI;AACFF,oBAAAA,IAAAA,CAAKG,KAAK,CAAC1D,KAAAA,CAAAA;oBAEX,OAAO,IAAA;AACT,iBAAA,CAAE,OAAOyD,GAAK,EAAA;oBACZ,OAAO,KAAA;AACT;AACF,aAAA,CAAA;QACF,KAAK,UAAA;QACL,KAAK,UAAA;QACL,KAAK,QAAA;QACL,KAAK,MAAA;AACH,YAAA,OAAOhD,IAAIgC,MAAM,EAAA;QACnB,KAAK,KAAA;AACH,YAAA,OAAOhC,GAAIgC,CAAAA,MAAM,EAAGS,CAAAA,OAAO,CAAC,oBAAA,CAAA;AAC9B,QAAA;AACE;;UAGA,OAAOzC,IAAIoC,KAAK,EAAA;AACpB;AACF,CAAA;AAEA;AACA,MAAMc,iBAAiB,CAA4BC,MAAAA,GAAAA;AACjD,IAAA,OAAOA,MAAQxB,EAAAA,QAAAA,GACXwB,MAAOxB,CAAAA,QAAQ;;AAIfwB,IAAAA,MAAAA;AACN,CAAA;AAcA,MAAMxC,qBAAAA,GAAsC,IAAM,CAACwC,MAAAA,GAAAA;AACjD,QAAA,OAAOD,cAAeC,CAAAA,MAAAA,CAAAA;AACxB,KAAA;AAEA,MAAMvC,qBAAsC,GAAA,CAAC3B,SAAWC,EAAAA,OAAAA,GAAY,CAACiE,MAAAA,GAAAA;AACnE,QAAA,IAAIjE,QAAQM,MAAM,KAAK,WAAW,CAACP,SAAAA,CAAUI,QAAQ,EAAE;YACrD,OAAO8D,MAAAA;AACT;AAEA,QAAA,IAAIlE,SAAUI,CAAAA,QAAQ,IAAI,UAAA,IAAc8D,MAAQ,EAAA;AAC9C,YAAA,OAAOA,MAAO9D,CAAAA,QAAQ,CAACD,gBAAAA,CAAiBC,QAAQ,CAAA;AAClD;QAEA,OAAO8D,MAAAA;AACT,KAAA;AAEA,MAAMtC,sBACJ,GAAA,CAAC5B,SAAWC,EAAAA,OAAAA,GACZ,CAA4BiE,MAAAA,GAAAA;;QAE1B,IAAIjE,OAAAA,CAAQM,MAAM,KAAK,OAAS,EAAA;YAC9B,OAAO2D,MAAAA;AACT;AAEA,QAAA,IACE,WAAelE,IAAAA,SAAAA,IACfA,SAAUmE,CAAAA,SAAS,IACnBC,MAAAA,CAAOC,SAAS,CAACrE,SAAUmE,CAAAA,SAAS,CACpC,IAAA,KAAA,IAASD,MACT,EAAA;AACA,YAAA,OAAOA,MAAOI,CAAAA,GAAG,CAACtE,SAAAA,CAAUmE,SAAS,EAAE;AACrC,gBAAA,GAAGhE,iBAAiBgE,SAAS;gBAC7BI,MAAQ,EAAA;AACND,oBAAAA,GAAAA,EAAKtE,UAAUmE;AACjB;AACF,aAAA,CAAA;AACF;QAEA,OAAOD,MAAAA;AACT,KAAA;AAEF,MAAMrC,sBAAAA,GACJ,CAAC7B,SAAAA,GACD,CAA4BkE,MAAAA,GAAAA;AAC1B,QAAA,IACE,WAAelE,IAAAA,SAAAA,IACfA,SAAUwE,CAAAA,SAAS,IACnBJ,MAAAA,CAAOC,SAAS,CAACrE,SAAUwE,CAAAA,SAAS,CACpC,IAAA,KAAA,IAASN,MACT,EAAA;AACA,YAAA,OAAOA,MAAOO,CAAAA,GAAG,CAACzE,SAAAA,CAAUwE,SAAS,EAAE;AACrC,gBAAA,GAAGrE,iBAAiBqE,SAAS;gBAC7BD,MAAQ,EAAA;AACNE,oBAAAA,GAAAA,EAAKzE,UAAUwE;AACjB;AACF,aAAA,CAAA;AACF;QAEA,OAAON,MAAAA;AACT,KAAA;AAEF,MAAMpC,gBACJ,GAAA,CAAC9B,SAAWC,EAAAA,OAAAA,GACZ,CAA4BiE,MAAAA,GAAAA;;QAE1B,IAAIjE,OAAAA,CAAQM,MAAM,KAAK,OAAS,EAAA;YAC9B,OAAO2D,MAAAA;AACT;QAEA,IAAI,KAAA,IAASlE,SAAa,IAAA,KAAA,IAASkE,MAAQ,EAAA;YACzC,MAAMI,GAAAA,GAAMI,SAAU1E,CAAAA,SAAAA,CAAUsE,GAAG,CAAA;AAEnC,YAAA,IAAIA,GAAK,EAAA;gBACP,OAAOJ,MAAAA,CAAOI,GAAG,CAACA,GAAK,EAAA;AACrB,oBAAA,GAAGnE,iBAAiBmE,GAAG;oBACvBC,MAAQ,EAAA;AACND,wBAAAA;AACF;AACF,iBAAA,CAAA;AACF;AACF;QAEA,OAAOJ,MAAAA;AACT,KAAA;AAEF,MAAMnC,gBAAAA,GACJ,CAAC/B,SAAAA,GACD,CAA4BkE,MAAAA,GAAAA;AAC1B,QAAA,IAAI,SAASlE,SAAW,EAAA;YACtB,MAAMyE,GAAAA,GAAMC,SAAU1E,CAAAA,SAAAA,CAAUyE,GAAG,CAAA;YAEnC,IAAI,KAAA,IAASP,UAAUO,GAAK,EAAA;gBAC1B,OAAOP,MAAAA,CAAOO,GAAG,CAACA,GAAK,EAAA;AACrB,oBAAA,GAAGtE,iBAAiBsE,GAAG;oBACvBF,MAAQ,EAAA;AACNE,wBAAAA;AACF;AACF,iBAAA,CAAA;AACF;AACF;QAEA,OAAOP,MAAAA;AACT,KAAA;AAEF,MAAMQ,YAAY,CAACC,GAAAA,GAAAA;AACjB,IAAA,IAAI,OAAOA,GAAAA,KAAQ,QAAYA,IAAAA,GAAAA,KAAQC,SAAW,EAAA;QAChD,OAAOD,GAAAA;KACF,MAAA;AACL,QAAA,MAAME,MAAMT,MAAOO,CAAAA,GAAAA,CAAAA;QACnB,OAAOG,KAAAA,CAAMD,OAAOD,SAAYC,GAAAA,GAAAA;AAClC;AACF,CAAA;AAEA,MAAM7C,kBAAAA,GACJ,CAAChC,SAAAA,GACD,CAA4BkE,MAAAA,GAAAA;AAC1B,QAAA,IAAI,WAAWlE,SAAaA,IAAAA,SAAAA,CAAU+E,KAAK,IAAI,aAAab,MAAQ,EAAA;AAClE,YAAA,OAAOA,OAAOV,OAAO,CAAC,IAAIwB,MAAOhF,CAAAA,SAAAA,CAAU+E,KAAK,CAAG,EAAA;gBACjD7E,OAAS,EAAA;oBACPkD,EAAIjD,EAAAA,gBAAAA,CAAiB4E,KAAK,CAAC3B,EAAE;oBAC7B6B,cAAgB,EAAA;AAClB,iBAAA;gBAEAC,kBAAoB,EAAA,CAAClF,UAAUI;AACjC,aAAA,CAAA;AACF;QAEA,OAAO8D,MAAAA;AACT,KAAA;;;;"}
1
+ {"version":3,"file":"validation.mjs","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 const bracketRegex = new RegExp(`^${escapeRegex(attrName)}\\\\[\\\\d+\\\\]\\\\.`);\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();\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 // do not validate min for draft\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) {\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) {\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","val","undefined","num","isNaN","defaultMessage","excludeEmptyString"],"mappings":"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"}
@@ -100,11 +100,12 @@ var metadata = require('./utils/metadata.js');
100
100
  });
101
101
  const sanitizeFn = strapiUtils.async.pipe(pickPermittedFields, setCreator);
102
102
  const sanitizedBody = await sanitizeFn(body);
103
- return documentManager.update(documentVersion?.documentId || id, model, {
103
+ const updatedDocument = await documentManager.update(documentVersion?.documentId || id, model, {
104
104
  data: sanitizedBody,
105
105
  populate: opts?.populate,
106
106
  locale
107
107
  });
108
+ return updatedDocument;
108
109
  };
109
110
  var collectionTypes = {
110
111
  async find (ctx) {