@strapi/content-type-builder 5.37.1 → 5.38.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 (433) hide show
  1. package/dist/admin/components/AIChat/Chat.js.map +1 -1
  2. package/dist/admin/components/AIChat/Chat.mjs +2 -2
  3. package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
  4. package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -1
  5. package/dist/admin/components/AIChat/FeedbackModal.mjs +1 -1
  6. package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -1
  7. package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -1
  8. package/dist/admin/components/AIChat/UploadCodeModal.mjs +1 -1
  9. package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -1
  10. package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
  11. package/dist/admin/components/AIChat/UploadFigmaModal.mjs +1 -1
  12. package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
  13. package/dist/admin/components/AIChat/components/Alert.js.map +1 -1
  14. package/dist/admin/components/AIChat/components/Alert.mjs.map +1 -1
  15. package/dist/admin/components/AIChat/components/AnimatedBox.js.map +1 -1
  16. package/dist/admin/components/AIChat/components/AnimatedBox.mjs.map +1 -1
  17. package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js.map +1 -1
  18. package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs.map +1 -1
  19. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -1
  20. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +1 -1
  21. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -1
  22. package/dist/admin/components/AIChat/components/Base64Image.js.map +1 -1
  23. package/dist/admin/components/AIChat/components/Base64Image.mjs.map +1 -1
  24. package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -1
  25. package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -1
  26. package/dist/admin/components/AIChat/components/Dropzone.js +2 -6
  27. package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -1
  28. package/dist/admin/components/AIChat/components/Dropzone.mjs +3 -7
  29. package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -1
  30. package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -1
  31. package/dist/admin/components/AIChat/components/FloatingPanel.mjs +1 -1
  32. package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -1
  33. package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -1
  34. package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -1
  35. package/dist/admin/components/AIChat/components/ImagePreview.js.map +1 -1
  36. package/dist/admin/components/AIChat/components/ImagePreview.mjs +1 -1
  37. package/dist/admin/components/AIChat/components/ImagePreview.mjs.map +1 -1
  38. package/dist/admin/components/AIChat/components/Input.js +1 -5
  39. package/dist/admin/components/AIChat/components/Input.js.map +1 -1
  40. package/dist/admin/components/AIChat/components/Input.mjs +4 -7
  41. package/dist/admin/components/AIChat/components/Input.mjs.map +1 -1
  42. package/dist/admin/components/AIChat/components/Messages/Marker.js.map +1 -1
  43. package/dist/admin/components/AIChat/components/Messages/Marker.mjs +2 -2
  44. package/dist/admin/components/AIChat/components/Messages/Marker.mjs.map +1 -1
  45. package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -1
  46. package/dist/admin/components/AIChat/components/Messages/Message.mjs +1 -1
  47. package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -1
  48. package/dist/admin/components/AIChat/components/ResizableTextArea.js.map +1 -1
  49. package/dist/admin/components/AIChat/components/ResizableTextArea.mjs.map +1 -1
  50. package/dist/admin/components/AIChat/components/SimpleMenu.js.map +1 -1
  51. package/dist/admin/components/AIChat/components/SimpleMenu.mjs.map +1 -1
  52. package/dist/admin/components/AIChat/components/StepModal.js.map +1 -1
  53. package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -1
  54. package/dist/admin/components/AIChat/components/animations.js.map +1 -1
  55. package/dist/admin/components/AIChat/components/animations.mjs.map +1 -1
  56. package/dist/admin/components/AIChat/components/icons/FigmaIcon.js.map +1 -1
  57. package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs.map +1 -1
  58. package/dist/admin/components/AIChat/components/icons/StopIcon.js.map +1 -1
  59. package/dist/admin/components/AIChat/components/icons/StopIcon.mjs.map +1 -1
  60. package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -1
  61. package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -1
  62. package/dist/admin/components/AIChat/hooks/useAttachments.js.map +1 -1
  63. package/dist/admin/components/AIChat/hooks/useAttachments.mjs.map +1 -1
  64. package/dist/admin/components/AIChat/hooks/useChatTitle.js.map +1 -1
  65. package/dist/admin/components/AIChat/hooks/useChatTitle.mjs.map +1 -1
  66. package/dist/admin/components/AIChat/hooks/useCodeUpload.js.map +1 -1
  67. package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs.map +1 -1
  68. package/dist/admin/components/AIChat/hooks/useFeedback.js.map +1 -1
  69. package/dist/admin/components/AIChat/hooks/useFeedback.mjs.map +1 -1
  70. package/dist/admin/components/AIChat/hooks/useFigmaUpload.js.map +1 -1
  71. package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs.map +1 -1
  72. package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js.map +1 -1
  73. package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs.map +1 -1
  74. package/dist/admin/components/AIChat/hooks/useTranslations.js.map +1 -1
  75. package/dist/admin/components/AIChat/hooks/useTranslations.mjs.map +1 -1
  76. package/dist/admin/components/AIChat/lib/aiClient.js.map +1 -1
  77. package/dist/admin/components/AIChat/lib/aiClient.mjs.map +1 -1
  78. package/dist/admin/components/AIChat/lib/constants.js.map +1 -1
  79. package/dist/admin/components/AIChat/lib/constants.mjs.map +1 -1
  80. package/dist/admin/components/AIChat/lib/misc.js.map +1 -1
  81. package/dist/admin/components/AIChat/lib/misc.mjs.map +1 -1
  82. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js.map +1 -1
  83. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs.map +1 -1
  84. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
  85. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
  86. package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
  87. package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
  88. package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
  89. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
  90. package/dist/admin/components/AllowedTypesSelect.js.map +1 -1
  91. package/dist/admin/components/AllowedTypesSelect.mjs.map +1 -1
  92. package/dist/admin/components/ApplyConditionButton.js.map +1 -1
  93. package/dist/admin/components/ApplyConditionButton.mjs.map +1 -1
  94. package/dist/admin/components/AttributeIcon.js.map +1 -1
  95. package/dist/admin/components/AttributeIcon.mjs +1 -1
  96. package/dist/admin/components/AttributeIcon.mjs.map +1 -1
  97. package/dist/admin/components/AttributeOptions/AttributeList.js.map +1 -1
  98. package/dist/admin/components/AttributeOptions/AttributeList.mjs.map +1 -1
  99. package/dist/admin/components/AttributeOptions/AttributeOption.js.map +1 -1
  100. package/dist/admin/components/AttributeOptions/AttributeOption.mjs.map +1 -1
  101. package/dist/admin/components/AttributeOptions/AttributeOptions.js.map +1 -1
  102. package/dist/admin/components/AttributeOptions/AttributeOptions.mjs.map +1 -1
  103. package/dist/admin/components/AttributeOptions/CustomFieldOption.js.map +1 -1
  104. package/dist/admin/components/AttributeOptions/CustomFieldOption.mjs.map +1 -1
  105. package/dist/admin/components/AttributeOptions/CustomFieldsList.js.map +1 -1
  106. package/dist/admin/components/AttributeOptions/CustomFieldsList.mjs.map +1 -1
  107. package/dist/admin/components/AttributeOptions/EmptyAttributes.js.map +1 -1
  108. package/dist/admin/components/AttributeOptions/EmptyAttributes.mjs.map +1 -1
  109. package/dist/admin/components/AttributeOptions/OptionBoxWrapper.js.map +1 -1
  110. package/dist/admin/components/AttributeOptions/OptionBoxWrapper.mjs.map +1 -1
  111. package/dist/admin/components/AttributeRow.js.map +1 -1
  112. package/dist/admin/components/AttributeRow.mjs +1 -1
  113. package/dist/admin/components/AttributeRow.mjs.map +1 -1
  114. package/dist/admin/components/AutoReloadOverlayBlocker.js.map +1 -1
  115. package/dist/admin/components/AutoReloadOverlayBlocker.mjs.map +1 -1
  116. package/dist/admin/components/BooleanDefaultValueSelect.js.map +1 -1
  117. package/dist/admin/components/BooleanDefaultValueSelect.mjs.map +1 -1
  118. package/dist/admin/components/BooleanRadioGroup.js.map +1 -1
  119. package/dist/admin/components/BooleanRadioGroup.mjs.map +1 -1
  120. package/dist/admin/components/CTBSession/CTBSessionProvider.js.map +1 -1
  121. package/dist/admin/components/CTBSession/CTBSessionProvider.mjs.map +1 -1
  122. package/dist/admin/components/CTBSession/sessionContext.js.map +1 -1
  123. package/dist/admin/components/CTBSession/sessionContext.mjs.map +1 -1
  124. package/dist/admin/components/CTBSession/useCTBSession.js.map +1 -1
  125. package/dist/admin/components/CTBSession/useCTBSession.mjs.map +1 -1
  126. package/dist/admin/components/CTBSession/useCTBTracking.js.map +1 -1
  127. package/dist/admin/components/CTBSession/useCTBTracking.mjs.map +1 -1
  128. package/dist/admin/components/CheckboxWithNumberField.js.map +1 -1
  129. package/dist/admin/components/CheckboxWithNumberField.mjs.map +1 -1
  130. package/dist/admin/components/ComponentCard/ComponentCard.js.map +1 -1
  131. package/dist/admin/components/ComponentCard/ComponentCard.mjs +1 -1
  132. package/dist/admin/components/ComponentCard/ComponentCard.mjs.map +1 -1
  133. package/dist/admin/components/ComponentCard/ComponentIcon/ComponentIcon.js.map +1 -1
  134. package/dist/admin/components/ComponentCard/ComponentIcon/ComponentIcon.mjs.map +1 -1
  135. package/dist/admin/components/ComponentList.js.map +1 -1
  136. package/dist/admin/components/ComponentList.mjs.map +1 -1
  137. package/dist/admin/components/ComponentRow.js.map +1 -1
  138. package/dist/admin/components/ComponentRow.mjs.map +1 -1
  139. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
  140. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +2 -2
  141. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
  142. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +1 -1
  143. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +1 -1
  144. package/dist/admin/components/ContentTypeRadioGroup.js.map +1 -1
  145. package/dist/admin/components/ContentTypeRadioGroup.mjs.map +1 -1
  146. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js.map +1 -1
  147. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs.map +1 -1
  148. package/dist/admin/components/CustomRadioGroup/Styles.js.map +1 -1
  149. package/dist/admin/components/CustomRadioGroup/Styles.mjs +1 -1
  150. package/dist/admin/components/CustomRadioGroup/Styles.mjs.map +1 -1
  151. package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
  152. package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
  153. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  154. package/dist/admin/components/DataManager/DataManagerProvider.mjs +1 -1
  155. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  156. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  157. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  158. package/dist/admin/components/DataManager/undoRedo.js.map +1 -1
  159. package/dist/admin/components/DataManager/undoRedo.mjs.map +1 -1
  160. package/dist/admin/components/DataManager/useDataManager.js.map +1 -1
  161. package/dist/admin/components/DataManager/useDataManager.mjs.map +1 -1
  162. package/dist/admin/components/DataManager/useServerRestartWatcher.js.map +1 -1
  163. package/dist/admin/components/DataManager/useServerRestartWatcher.mjs.map +1 -1
  164. package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
  165. package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
  166. package/dist/admin/components/DataManager/utils/retrieveComponentsThatHaveComponents.js.map +1 -1
  167. package/dist/admin/components/DataManager/utils/retrieveComponentsThatHaveComponents.mjs.map +1 -1
  168. package/dist/admin/components/DataManager/utils/retrieveNestedComponents.js.map +1 -1
  169. package/dist/admin/components/DataManager/utils/retrieveNestedComponents.mjs.map +1 -1
  170. package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.js.map +1 -1
  171. package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.mjs.map +1 -1
  172. package/dist/admin/components/DisplayedType.js.map +1 -1
  173. package/dist/admin/components/DisplayedType.mjs.map +1 -1
  174. package/dist/admin/components/DraftAndPublishToggle.js.map +1 -1
  175. package/dist/admin/components/DraftAndPublishToggle.mjs.map +1 -1
  176. package/dist/admin/components/DynamicZoneList.js.map +1 -1
  177. package/dist/admin/components/DynamicZoneList.mjs +1 -1
  178. package/dist/admin/components/DynamicZoneList.mjs.map +1 -1
  179. package/dist/admin/components/ExitPrompt.js.map +1 -1
  180. package/dist/admin/components/ExitPrompt.mjs.map +1 -1
  181. package/dist/admin/components/Footers.js.map +1 -1
  182. package/dist/admin/components/Footers.mjs +2 -2
  183. package/dist/admin/components/Footers.mjs.map +1 -1
  184. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  185. package/dist/admin/components/FormModal/FormModal.mjs +1 -1
  186. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  187. package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
  188. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
  189. package/dist/admin/components/FormModal/attributes/advancedForm.js.map +1 -1
  190. package/dist/admin/components/FormModal/attributes/advancedForm.mjs.map +1 -1
  191. package/dist/admin/components/FormModal/attributes/attributeOptions.js.map +1 -1
  192. package/dist/admin/components/FormModal/attributes/attributeOptions.mjs.map +1 -1
  193. package/dist/admin/components/FormModal/attributes/baseForm.js.map +1 -1
  194. package/dist/admin/components/FormModal/attributes/baseForm.mjs.map +1 -1
  195. package/dist/admin/components/FormModal/attributes/commonBaseForm.js.map +1 -1
  196. package/dist/admin/components/FormModal/attributes/commonBaseForm.mjs.map +1 -1
  197. package/dist/admin/components/FormModal/attributes/form.js.map +1 -1
  198. package/dist/admin/components/FormModal/attributes/form.mjs.map +1 -1
  199. package/dist/admin/components/FormModal/attributes/nameField.js.map +1 -1
  200. package/dist/admin/components/FormModal/attributes/nameField.mjs.map +1 -1
  201. package/dist/admin/components/FormModal/attributes/types.js.map +1 -1
  202. package/dist/admin/components/FormModal/attributes/types.mjs +1 -1
  203. package/dist/admin/components/FormModal/attributes/types.mjs.map +1 -1
  204. package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
  205. package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
  206. package/dist/admin/components/FormModal/component/componentField.js.map +1 -1
  207. package/dist/admin/components/FormModal/component/componentField.mjs.map +1 -1
  208. package/dist/admin/components/FormModal/component/componentForm.js.map +1 -1
  209. package/dist/admin/components/FormModal/component/componentForm.mjs.map +1 -1
  210. package/dist/admin/components/FormModal/component/createComponentSchema.js.map +1 -1
  211. package/dist/admin/components/FormModal/component/createComponentSchema.mjs.map +1 -1
  212. package/dist/admin/components/FormModal/contentType/contentTypeForm.js.map +1 -1
  213. package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs.map +1 -1
  214. package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js.map +1 -1
  215. package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs.map +1 -1
  216. package/dist/admin/components/FormModal/dynamiczoneForm.js.map +1 -1
  217. package/dist/admin/components/FormModal/dynamiczoneForm.mjs.map +1 -1
  218. package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
  219. package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
  220. package/dist/admin/components/FormModal/forms/utils/addItemsToFormSection.js.map +1 -1
  221. package/dist/admin/components/FormModal/forms/utils/addItemsToFormSection.mjs.map +1 -1
  222. package/dist/admin/components/FormModal/forms/utils/createCollectionName.js.map +1 -1
  223. package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs.map +1 -1
  224. package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.js.map +1 -1
  225. package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.mjs.map +1 -1
  226. package/dist/admin/components/FormModal/reducer.js.map +1 -1
  227. package/dist/admin/components/FormModal/reducer.mjs.map +1 -1
  228. package/dist/admin/components/FormModal/utils/canEditContentType.js.map +1 -1
  229. package/dist/admin/components/FormModal/utils/canEditContentType.mjs.map +1 -1
  230. package/dist/admin/components/FormModal/utils/createUid.js.map +1 -1
  231. package/dist/admin/components/FormModal/utils/createUid.mjs.map +1 -1
  232. package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.js.map +1 -1
  233. package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.mjs.map +1 -1
  234. package/dist/admin/components/FormModal/utils/getAttributesToDisplay.js.map +1 -1
  235. package/dist/admin/components/FormModal/utils/getAttributesToDisplay.mjs.map +1 -1
  236. package/dist/admin/components/FormModal/utils/getFormInputNames.js.map +1 -1
  237. package/dist/admin/components/FormModal/utils/getFormInputNames.mjs.map +1 -1
  238. package/dist/admin/components/FormModal/utils/relations.js.map +1 -1
  239. package/dist/admin/components/FormModal/utils/relations.mjs.map +1 -1
  240. package/dist/admin/components/FormModalEndActions.js.map +1 -1
  241. package/dist/admin/components/FormModalEndActions.mjs.map +1 -1
  242. package/dist/admin/components/FormModalHeader.js.map +1 -1
  243. package/dist/admin/components/FormModalHeader.mjs.map +1 -1
  244. package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.js.map +1 -1
  245. package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.mjs.map +1 -1
  246. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js.map +1 -1
  247. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs.map +1 -1
  248. package/dist/admin/components/FormModalNavigation/useFormModalNavigation.js.map +1 -1
  249. package/dist/admin/components/FormModalNavigation/useFormModalNavigation.mjs.map +1 -1
  250. package/dist/admin/components/FormModalSubHeader.js.map +1 -1
  251. package/dist/admin/components/FormModalSubHeader.mjs.map +1 -1
  252. package/dist/admin/components/GenericInputs.js +1 -5
  253. package/dist/admin/components/GenericInputs.js.map +1 -1
  254. package/dist/admin/components/GenericInputs.mjs +1 -5
  255. package/dist/admin/components/GenericInputs.mjs.map +1 -1
  256. package/dist/admin/components/IconPicker/IconPicker.js.map +1 -1
  257. package/dist/admin/components/IconPicker/IconPicker.mjs +1 -1
  258. package/dist/admin/components/IconPicker/IconPicker.mjs.map +1 -1
  259. package/dist/admin/components/IconPicker/constants.js.map +1 -1
  260. package/dist/admin/components/IconPicker/constants.mjs.map +1 -1
  261. package/dist/admin/components/List.js.map +1 -1
  262. package/dist/admin/components/List.mjs +1 -1
  263. package/dist/admin/components/List.mjs.map +1 -1
  264. package/dist/admin/components/PluralName.js.map +1 -1
  265. package/dist/admin/components/PluralName.mjs.map +1 -1
  266. package/dist/admin/components/Relation/Relation.js.map +1 -1
  267. package/dist/admin/components/Relation/Relation.mjs.map +1 -1
  268. package/dist/admin/components/Relation/RelationField/RelationField.js.map +1 -1
  269. package/dist/admin/components/Relation/RelationField/RelationField.mjs.map +1 -1
  270. package/dist/admin/components/Relation/RelationField/RelationTargetPicker/RelationTargetPicker.js.map +1 -1
  271. package/dist/admin/components/Relation/RelationField/RelationTargetPicker/RelationTargetPicker.mjs.map +1 -1
  272. package/dist/admin/components/Relation/RelationNaturePicker/Components.js.map +1 -1
  273. package/dist/admin/components/Relation/RelationNaturePicker/Components.mjs.map +1 -1
  274. package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.js.map +1 -1
  275. package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.mjs +1 -1
  276. package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.mjs.map +1 -1
  277. package/dist/admin/components/SelectCategory.js.map +1 -1
  278. package/dist/admin/components/SelectCategory.mjs.map +1 -1
  279. package/dist/admin/components/SelectComponent.js.map +1 -1
  280. package/dist/admin/components/SelectComponent.mjs.map +1 -1
  281. package/dist/admin/components/SelectComponents.js.map +1 -1
  282. package/dist/admin/components/SelectComponents.mjs.map +1 -1
  283. package/dist/admin/components/SelectDateType.js.map +1 -1
  284. package/dist/admin/components/SelectDateType.mjs.map +1 -1
  285. package/dist/admin/components/SelectNumber.js.map +1 -1
  286. package/dist/admin/components/SelectNumber.mjs.map +1 -1
  287. package/dist/admin/components/SingularName.js.map +1 -1
  288. package/dist/admin/components/SingularName.mjs.map +1 -1
  289. package/dist/admin/components/Status.js.map +1 -1
  290. package/dist/admin/components/Status.mjs.map +1 -1
  291. package/dist/admin/components/TabForm.js.map +1 -1
  292. package/dist/admin/components/TabForm.mjs.map +1 -1
  293. package/dist/admin/components/TextareaEnum.js.map +1 -1
  294. package/dist/admin/components/TextareaEnum.mjs.map +1 -1
  295. package/dist/admin/constants.js.map +1 -1
  296. package/dist/admin/constants.mjs.map +1 -1
  297. package/dist/admin/icons/Curve.js.map +1 -1
  298. package/dist/admin/icons/Curve.mjs.map +1 -1
  299. package/dist/admin/index.js.map +1 -1
  300. package/dist/admin/index.mjs.map +1 -1
  301. package/dist/admin/pages/App/index.js.map +1 -1
  302. package/dist/admin/pages/App/index.mjs.map +1 -1
  303. package/dist/admin/pages/ListView/EmptyState.js.map +1 -1
  304. package/dist/admin/pages/ListView/EmptyState.mjs +1 -1
  305. package/dist/admin/pages/ListView/EmptyState.mjs.map +1 -1
  306. package/dist/admin/pages/ListView/LinkToCMSettingsView.js.map +1 -1
  307. package/dist/admin/pages/ListView/LinkToCMSettingsView.mjs.map +1 -1
  308. package/dist/admin/pages/ListView/ListView.js.map +1 -1
  309. package/dist/admin/pages/ListView/ListView.mjs +1 -1
  310. package/dist/admin/pages/ListView/ListView.mjs.map +1 -1
  311. package/dist/admin/reducers.js +4 -4
  312. package/dist/admin/reducers.js.map +1 -1
  313. package/dist/admin/reducers.mjs +4 -4
  314. package/dist/admin/reducers.mjs.map +1 -1
  315. package/dist/admin/utils/conditions.js.map +1 -1
  316. package/dist/admin/utils/conditions.mjs.map +1 -1
  317. package/dist/admin/utils/findAttribute.js.map +1 -1
  318. package/dist/admin/utils/findAttribute.mjs.map +1 -1
  319. package/dist/admin/utils/formAPI.js.map +1 -1
  320. package/dist/admin/utils/formAPI.mjs.map +1 -1
  321. package/dist/admin/utils/getAttributeDisplayedType.js.map +1 -1
  322. package/dist/admin/utils/getAttributeDisplayedType.mjs.map +1 -1
  323. package/dist/admin/utils/getMaxDepth.js.map +1 -1
  324. package/dist/admin/utils/getMaxDepth.mjs.map +1 -1
  325. package/dist/admin/utils/getRelationType.js.map +1 -1
  326. package/dist/admin/utils/getRelationType.mjs.map +1 -1
  327. package/dist/admin/utils/getTrad.js.map +1 -1
  328. package/dist/admin/utils/getTrad.mjs.map +1 -1
  329. package/dist/admin/utils/getYupInnerErrors.js.map +1 -1
  330. package/dist/admin/utils/getYupInnerErrors.mjs.map +1 -1
  331. package/dist/admin/utils/isAllowedContentTypesForRelations.js.map +1 -1
  332. package/dist/admin/utils/isAllowedContentTypesForRelations.mjs.map +1 -1
  333. package/dist/admin/utils/makeUnique.js.map +1 -1
  334. package/dist/admin/utils/makeUnique.mjs.map +1 -1
  335. package/dist/admin/utils/nameToSlug.js.map +1 -1
  336. package/dist/admin/utils/nameToSlug.mjs.map +1 -1
  337. package/dist/admin/utils/parseDateValue.js.map +1 -1
  338. package/dist/admin/utils/parseDateValue.mjs.map +1 -1
  339. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
  340. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
  341. package/dist/admin/utils/timeFormat.js.map +1 -1
  342. package/dist/admin/utils/timeFormat.mjs.map +1 -1
  343. package/dist/admin/utils/toRegressedEnumValue.js.map +1 -1
  344. package/dist/admin/utils/toRegressedEnumValue.mjs.map +1 -1
  345. package/dist/server/bootstrap.js.map +1 -1
  346. package/dist/server/bootstrap.mjs.map +1 -1
  347. package/dist/server/config.js.map +1 -1
  348. package/dist/server/config.mjs.map +1 -1
  349. package/dist/server/controllers/builder.js.map +1 -1
  350. package/dist/server/controllers/builder.mjs.map +1 -1
  351. package/dist/server/controllers/component-categories.js.map +1 -1
  352. package/dist/server/controllers/component-categories.mjs.map +1 -1
  353. package/dist/server/controllers/components.js.map +1 -1
  354. package/dist/server/controllers/components.mjs +1 -1
  355. package/dist/server/controllers/components.mjs.map +1 -1
  356. package/dist/server/controllers/content-types.js.map +1 -1
  357. package/dist/server/controllers/content-types.mjs +1 -1
  358. package/dist/server/controllers/content-types.mjs.map +1 -1
  359. package/dist/server/controllers/index.js.map +1 -1
  360. package/dist/server/controllers/index.mjs.map +1 -1
  361. package/dist/server/controllers/schema.js.map +1 -1
  362. package/dist/server/controllers/schema.mjs.map +1 -1
  363. package/dist/server/controllers/validation/common.js.map +1 -1
  364. package/dist/server/controllers/validation/common.mjs.map +1 -1
  365. package/dist/server/controllers/validation/component-category.js.map +1 -1
  366. package/dist/server/controllers/validation/component-category.mjs.map +1 -1
  367. package/dist/server/controllers/validation/component.js.map +1 -1
  368. package/dist/server/controllers/validation/component.mjs +1 -1
  369. package/dist/server/controllers/validation/component.mjs.map +1 -1
  370. package/dist/server/controllers/validation/content-type.js.map +1 -1
  371. package/dist/server/controllers/validation/content-type.mjs.map +1 -1
  372. package/dist/server/controllers/validation/data-transform.js.map +1 -1
  373. package/dist/server/controllers/validation/data-transform.mjs.map +1 -1
  374. package/dist/server/controllers/validation/model-schema.js.map +1 -1
  375. package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
  376. package/dist/server/controllers/validation/relations.js.map +1 -1
  377. package/dist/server/controllers/validation/relations.mjs.map +1 -1
  378. package/dist/server/controllers/validation/schema.js.map +1 -1
  379. package/dist/server/controllers/validation/schema.mjs +1 -1
  380. package/dist/server/controllers/validation/schema.mjs.map +1 -1
  381. package/dist/server/controllers/validation/types.js +0 -1
  382. package/dist/server/controllers/validation/types.js.map +1 -1
  383. package/dist/server/controllers/validation/types.mjs +1 -2
  384. package/dist/server/controllers/validation/types.mjs.map +1 -1
  385. package/dist/server/index.js +8 -8
  386. package/dist/server/middlewares/is-development-mode.js.map +1 -1
  387. package/dist/server/middlewares/is-development-mode.mjs.map +1 -1
  388. package/dist/server/register.js.map +1 -1
  389. package/dist/server/register.mjs.map +1 -1
  390. package/dist/server/routes/admin.js.map +1 -1
  391. package/dist/server/routes/admin.mjs.map +1 -1
  392. package/dist/server/routes/content-api.js.map +1 -1
  393. package/dist/server/routes/content-api.mjs.map +1 -1
  394. package/dist/server/routes/index.js.map +1 -1
  395. package/dist/server/routes/index.mjs.map +1 -1
  396. package/dist/server/services/api-handler.js.map +1 -1
  397. package/dist/server/services/api-handler.mjs.map +1 -1
  398. package/dist/server/services/builder.js.map +1 -1
  399. package/dist/server/services/builder.mjs.map +1 -1
  400. package/dist/server/services/component-categories.js.map +1 -1
  401. package/dist/server/services/component-categories.mjs +1 -1
  402. package/dist/server/services/component-categories.mjs.map +1 -1
  403. package/dist/server/services/components.js.map +1 -1
  404. package/dist/server/services/components.mjs +1 -1
  405. package/dist/server/services/components.mjs.map +1 -1
  406. package/dist/server/services/constants.js.map +1 -1
  407. package/dist/server/services/constants.mjs.map +1 -1
  408. package/dist/server/services/content-types.js.map +1 -1
  409. package/dist/server/services/content-types.mjs +1 -1
  410. package/dist/server/services/content-types.mjs.map +1 -1
  411. package/dist/server/services/index.js.map +1 -1
  412. package/dist/server/services/index.mjs.map +1 -1
  413. package/dist/server/services/schema-builder/component-builder.js.map +1 -1
  414. package/dist/server/services/schema-builder/component-builder.mjs +1 -1
  415. package/dist/server/services/schema-builder/component-builder.mjs.map +1 -1
  416. package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
  417. package/dist/server/services/schema-builder/content-type-builder.mjs +2 -2
  418. package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
  419. package/dist/server/services/schema-builder/index.js.map +1 -1
  420. package/dist/server/services/schema-builder/index.mjs +3 -3
  421. package/dist/server/services/schema-builder/index.mjs.map +1 -1
  422. package/dist/server/services/schema-builder/schema-handler.js.map +1 -1
  423. package/dist/server/services/schema-builder/schema-handler.mjs.map +1 -1
  424. package/dist/server/services/schema.js.map +1 -1
  425. package/dist/server/services/schema.mjs +1 -1
  426. package/dist/server/services/schema.mjs.map +1 -1
  427. package/dist/server/utils/attributes.js.map +1 -1
  428. package/dist/server/utils/attributes.mjs.map +1 -1
  429. package/dist/server/utils/index.js.map +1 -1
  430. package/dist/server/utils/index.mjs.map +1 -1
  431. package/dist/server/utils/typeguards.js.map +1 -1
  432. package/dist/server/utils/typeguards.mjs.map +1 -1
  433. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"builder.mjs","sources":["../../../server/src/services/builder.ts"],"sourcesContent":["import { snakeCase } from 'lodash/fp';\n\n// use snake_case\nexport const reservedAttributes = [\n // TODO: these need to come from a centralized place so we don't break things accidentally in the future and can share them outside the CTB, for example on Strapi bootstrap prior to schema db sync\n\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n // V6: we will need to add first_published_at when it becomes the default behaviour\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'status',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n// use snake_case\nexport const reservedModels = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nexport const getReservedNames = () => {\n return {\n models: reservedModels,\n attributes: reservedAttributes,\n };\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedModelName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedModels.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedModels\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedAttributeName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedAttributes.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedAttributes\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n"],"names":["reservedAttributes","reservedModels","getReservedNames","models","attributes","isReservedModelName","name","snakeCaseName","snakeCase","includes","filter","key","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName"],"mappings":";;AAEA;MACaA,kBAAqB,GAAA;;;AAIhC,IAAA,IAAA;AACA,IAAA,aAAA;;AAGA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA;;AAEA,IAAA,eAAA;AACA,IAAA,eAAA;;AAEA,IAAA,YAAA;AACA,IAAA,YAAA;;AAGA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,eAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,aAAA;AACA,IAAA,eAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;;AAGF;MACaC,cAAiB,GAAA;AAC5B,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,WAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,UAAA;AACA,IAAA,MAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;;MAGWC,gBAAmB,GAAA,IAAA;IAC9B,OAAO;QACLC,MAAQF,EAAAA,cAAAA;QACRG,UAAYJ,EAAAA;AACd,KAAA;AACF;AAEA;AACO,MAAMK,sBAAsB,CAACC,IAAAA,GAAAA;AAClC,IAAA,MAAMC,gBAAgBC,SAAUF,CAAAA,IAAAA,CAAAA;IAChC,IAAIL,cAAAA,CAAeQ,QAAQ,CAACF,aAAgB,CAAA,EAAA;QAC1C,OAAO,IAAA;AACT;IAEA,IACEN,cAAAA,CACGS,MAAM,CAAC,CAACC,GAAAA,GAAQA,GAAIC,CAAAA,QAAQ,CAAC,GAAA,CAAA,CAAA,CAC7BC,GAAG,CAAC,CAACF,GAAAA,GAAQA,IAAIG,KAAK,CAAC,CAAG,EAAA,CAAC,CAC3BC,CAAAA,CAAAA,CAAAA,IAAI,CAAC,CAACC,MAAWT,GAAAA,aAAAA,CAAcU,UAAU,CAACD,MAC7C,CAAA,CAAA,EAAA;QACA,OAAO,IAAA;AACT;IAEA,OAAO,KAAA;AACT;AAEA;AACO,MAAME,0BAA0B,CAACZ,IAAAA,GAAAA;AACtC,IAAA,MAAMC,gBAAgBC,SAAUF,CAAAA,IAAAA,CAAAA;IAChC,IAAIN,kBAAAA,CAAmBS,QAAQ,CAACF,aAAgB,CAAA,EAAA;QAC9C,OAAO,IAAA;AACT;IAEA,IACEP,kBAAAA,CACGU,MAAM,CAAC,CAACC,GAAAA,GAAQA,GAAIC,CAAAA,QAAQ,CAAC,GAAA,CAAA,CAAA,CAC7BC,GAAG,CAAC,CAACF,GAAAA,GAAQA,IAAIG,KAAK,CAAC,CAAG,EAAA,CAAC,CAC3BC,CAAAA,CAAAA,CAAAA,IAAI,CAAC,CAACC,MAAWT,GAAAA,aAAAA,CAAcU,UAAU,CAACD,MAC7C,CAAA,CAAA,EAAA;QACA,OAAO,IAAA;AACT;IAEA,OAAO,KAAA;AACT;;;;"}
1
+ {"version":3,"file":"builder.mjs","sources":["../../../server/src/services/builder.ts"],"sourcesContent":["import { snakeCase } from 'lodash/fp';\n\n// use snake_case\nexport const reservedAttributes = [\n // TODO: these need to come from a centralized place so we don't break things accidentally in the future and can share them outside the CTB, for example on Strapi bootstrap prior to schema db sync\n\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n // V6: we will need to add first_published_at when it becomes the default behaviour\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'status',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n// use snake_case\nexport const reservedModels = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nexport const getReservedNames = () => {\n return {\n models: reservedModels,\n attributes: reservedAttributes,\n };\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedModelName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedModels.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedModels\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedAttributeName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedAttributes.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedAttributes\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n"],"names":["reservedAttributes","reservedModels","getReservedNames","models","attributes","isReservedModelName","name","snakeCaseName","snakeCase","includes","filter","key","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName"],"mappings":";;AAEA;MACaA,kBAAAA,GAAqB;;;AAIhC,IAAA,IAAA;AACA,IAAA,aAAA;;AAGA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA;;AAEA,IAAA,eAAA;AACA,IAAA,eAAA;;AAEA,IAAA,YAAA;AACA,IAAA,YAAA;;AAGA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,eAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,aAAA;AACA,IAAA,eAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;;AAGF;MACaC,cAAAA,GAAiB;AAC5B,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,WAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,UAAA;AACA,IAAA,MAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;;MAGWC,gBAAAA,GAAmB,IAAA;IAC9B,OAAO;QACLC,MAAAA,EAAQF,cAAAA;QACRG,UAAAA,EAAYJ;AACd,KAAA;AACF;AAEA;AACO,MAAMK,sBAAsB,CAACC,IAAAA,GAAAA;AAClC,IAAA,MAAMC,gBAAgBC,SAAAA,CAAUF,IAAAA,CAAAA;IAChC,IAAIL,cAAAA,CAAeQ,QAAQ,CAACF,aAAAA,CAAAA,EAAgB;QAC1C,OAAO,IAAA;AACT,IAAA;IAEA,IACEN,cAAAA,CACGS,MAAM,CAAC,CAACC,GAAAA,GAAQA,GAAAA,CAAIC,QAAQ,CAAC,GAAA,CAAA,CAAA,CAC7BC,GAAG,CAAC,CAACF,GAAAA,GAAQA,IAAIG,KAAK,CAAC,CAAA,EAAG,EAAC,CAAA,CAAA,CAC3BC,IAAI,CAAC,CAACC,MAAAA,GAAWT,aAAAA,CAAcU,UAAU,CAACD,MAAAA,CAAAA,CAAAA,EAC7C;QACA,OAAO,IAAA;AACT,IAAA;IAEA,OAAO,KAAA;AACT;AAEA;AACO,MAAME,0BAA0B,CAACZ,IAAAA,GAAAA;AACtC,IAAA,MAAMC,gBAAgBC,SAAAA,CAAUF,IAAAA,CAAAA;IAChC,IAAIN,kBAAAA,CAAmBS,QAAQ,CAACF,aAAAA,CAAAA,EAAgB;QAC9C,OAAO,IAAA;AACT,IAAA;IAEA,IACEP,kBAAAA,CACGU,MAAM,CAAC,CAACC,GAAAA,GAAQA,GAAAA,CAAIC,QAAQ,CAAC,GAAA,CAAA,CAAA,CAC7BC,GAAG,CAAC,CAACF,GAAAA,GAAQA,IAAIG,KAAK,CAAC,CAAA,EAAG,EAAC,CAAA,CAAA,CAC3BC,IAAI,CAAC,CAACC,MAAAA,GAAWT,aAAAA,CAAcU,UAAU,CAACD,MAAAA,CAAAA,CAAAA,EAC7C;QACA,OAAO,IAAA;AACT,IAAA;IAEA,OAAO,KAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"component-categories.js","sources":["../../../server/src/services/component-categories.ts"],"sourcesContent":["import { join } from 'path';\nimport { strings, errors } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\nimport createBuilder from './schema-builder';\n\ntype Infos = {\n name: string;\n};\n\ninterface WorkingComponent extends Struct.ComponentSchema {\n setUID: (uid: string) => WorkingComponent;\n setDir: (dir: string) => WorkingComponent;\n updateComponent: (oldUID: string, newUID: string) => void;\n}\n\n/**\n * Edit a category name and move components to the write folder\n */\nexport const editCategory = async (name: string, infos: Infos) => {\n const newName = strings.nameToSlug(infos.name);\n\n // don't do anything the name doesn't change\n if (name === newName) return;\n\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n if (categoryExists(newName)) {\n throw new errors.ApplicationError('Name already taken');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component: WorkingComponent) => {\n const oldUID = component.uid;\n const newUID = `${newName}.${component.modelName}`;\n\n // only edit the components in this specific category\n if (component.category !== name) return;\n\n component.setUID(newUID).setDir(join(strapi.dirs.app.components, newName));\n\n builder.components.forEach((compo: WorkingComponent) => {\n compo.updateComponent(oldUID, newUID);\n });\n\n builder.contentTypes.forEach((ct: WorkingComponent) => {\n ct.updateComponent(oldUID, newUID);\n });\n });\n\n await builder.writeFiles();\n\n return newName;\n};\n\n/**\n * Deletes a category and its components\n */\nexport const deleteCategory = async (name: string) => {\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component) => {\n if (component.category === name) {\n builder.deleteComponent(component.uid);\n }\n });\n\n await builder.writeFiles();\n};\n\n/**\n * Checks if a category exists\n */\nconst categoryExists = (name: string) => {\n const matchingIndex = Object.values(strapi.components).findIndex(\n (component) => component.category === name\n );\n\n return matchingIndex > -1;\n};\n"],"names":["editCategory","name","infos","newName","strings","nameToSlug","categoryExists","errors","ApplicationError","builder","createBuilder","components","forEach","component","oldUID","uid","newUID","modelName","category","setUID","setDir","join","strapi","dirs","app","compo","updateComponent","contentTypes","ct","writeFiles","deleteCategory","deleteComponent","matchingIndex","Object","values","findIndex"],"mappings":";;;;;;AAeA;;AAEC,IACM,MAAMA,YAAe,GAAA,OAAOC,IAAcC,EAAAA,KAAAA,GAAAA;AAC/C,IAAA,MAAMC,OAAUC,GAAAA,aAAAA,CAAQC,UAAU,CAACH,MAAMD,IAAI,CAAA;;AAG7C,IAAA,IAAIA,SAASE,OAAS,EAAA;IAEtB,IAAI,CAACG,eAAeL,IAAO,CAAA,EAAA;QACzB,MAAM,IAAIM,YAAOC,CAAAA,gBAAgB,CAAC,oBAAA,CAAA;AACpC;AAEA,IAAA,IAAIF,eAAeH,OAAU,CAAA,EAAA;QAC3B,MAAM,IAAII,YAAOC,CAAAA,gBAAgB,CAAC,oBAAA,CAAA;AACpC;AAEA,IAAA,MAAMC,OAAUC,GAAAA,KAAAA,EAAAA;AAEhBD,IAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACC,SAAAA,GAAAA;QAC1B,MAAMC,MAAAA,GAASD,UAAUE,GAAG;AAC5B,QAAA,MAAMC,SAAS,CAAGb,EAAAA,OAAAA,CAAQ,CAAC,EAAEU,SAAAA,CAAUI,SAAS,CAAE,CAAA;;QAGlD,IAAIJ,SAAAA,CAAUK,QAAQ,KAAKjB,IAAM,EAAA;AAEjCY,QAAAA,SAAAA,CAAUM,MAAM,CAACH,MAAQI,CAAAA,CAAAA,MAAM,CAACC,SAAAA,CAAKC,MAAOC,CAAAA,IAAI,CAACC,GAAG,CAACb,UAAU,EAAER,OAAAA,CAAAA,CAAAA;AAEjEM,QAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACa,KAAAA,GAAAA;YAC1BA,KAAMC,CAAAA,eAAe,CAACZ,MAAQE,EAAAA,MAAAA,CAAAA;AAChC,SAAA,CAAA;AAEAP,QAAAA,OAAAA,CAAQkB,YAAY,CAACf,OAAO,CAAC,CAACgB,EAAAA,GAAAA;YAC5BA,EAAGF,CAAAA,eAAe,CAACZ,MAAQE,EAAAA,MAAAA,CAAAA;AAC7B,SAAA,CAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMP,QAAQoB,UAAU,EAAA;IAExB,OAAO1B,OAAAA;AACT;AAEA;;IAGa2B,MAAAA,cAAAA,GAAiB,OAAO7B,IAAAA,GAAAA;IACnC,IAAI,CAACK,eAAeL,IAAO,CAAA,EAAA;QACzB,MAAM,IAAIM,YAAOC,CAAAA,gBAAgB,CAAC,oBAAA,CAAA;AACpC;AAEA,IAAA,MAAMC,OAAUC,GAAAA,KAAAA,EAAAA;AAEhBD,IAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACC,SAAAA,GAAAA;QAC1B,IAAIA,SAAAA,CAAUK,QAAQ,KAAKjB,IAAM,EAAA;YAC/BQ,OAAQsB,CAAAA,eAAe,CAAClB,SAAAA,CAAUE,GAAG,CAAA;AACvC;AACF,KAAA,CAAA;AAEA,IAAA,MAAMN,QAAQoB,UAAU,EAAA;AAC1B;AAEA;;IAGA,MAAMvB,iBAAiB,CAACL,IAAAA,GAAAA;AACtB,IAAA,MAAM+B,aAAgBC,GAAAA,MAAAA,CAAOC,MAAM,CAACZ,MAAOX,CAAAA,UAAU,CAAEwB,CAAAA,SAAS,CAC9D,CAACtB,SAAcA,GAAAA,SAAAA,CAAUK,QAAQ,KAAKjB,IAAAA,CAAAA;AAGxC,IAAA,OAAO+B,gBAAgB,CAAC,CAAA;AAC1B,CAAA;;;;;"}
1
+ {"version":3,"file":"component-categories.js","sources":["../../../server/src/services/component-categories.ts"],"sourcesContent":["import { join } from 'path';\nimport { strings, errors } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\nimport createBuilder from './schema-builder';\n\ntype Infos = {\n name: string;\n};\n\ninterface WorkingComponent extends Struct.ComponentSchema {\n setUID: (uid: string) => WorkingComponent;\n setDir: (dir: string) => WorkingComponent;\n updateComponent: (oldUID: string, newUID: string) => void;\n}\n\n/**\n * Edit a category name and move components to the write folder\n */\nexport const editCategory = async (name: string, infos: Infos) => {\n const newName = strings.nameToSlug(infos.name);\n\n // don't do anything the name doesn't change\n if (name === newName) return;\n\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n if (categoryExists(newName)) {\n throw new errors.ApplicationError('Name already taken');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component: WorkingComponent) => {\n const oldUID = component.uid;\n const newUID = `${newName}.${component.modelName}`;\n\n // only edit the components in this specific category\n if (component.category !== name) return;\n\n component.setUID(newUID).setDir(join(strapi.dirs.app.components, newName));\n\n builder.components.forEach((compo: WorkingComponent) => {\n compo.updateComponent(oldUID, newUID);\n });\n\n builder.contentTypes.forEach((ct: WorkingComponent) => {\n ct.updateComponent(oldUID, newUID);\n });\n });\n\n await builder.writeFiles();\n\n return newName;\n};\n\n/**\n * Deletes a category and its components\n */\nexport const deleteCategory = async (name: string) => {\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component) => {\n if (component.category === name) {\n builder.deleteComponent(component.uid);\n }\n });\n\n await builder.writeFiles();\n};\n\n/**\n * Checks if a category exists\n */\nconst categoryExists = (name: string) => {\n const matchingIndex = Object.values(strapi.components).findIndex(\n (component) => component.category === name\n );\n\n return matchingIndex > -1;\n};\n"],"names":["editCategory","name","infos","newName","strings","nameToSlug","categoryExists","errors","ApplicationError","builder","createBuilder","components","forEach","component","oldUID","uid","newUID","modelName","category","setUID","setDir","join","strapi","dirs","app","compo","updateComponent","contentTypes","ct","writeFiles","deleteCategory","deleteComponent","matchingIndex","Object","values","findIndex"],"mappings":";;;;;;AAeA;;AAEC,IACM,MAAMA,YAAAA,GAAe,OAAOC,IAAAA,EAAcC,KAAAA,GAAAA;AAC/C,IAAA,MAAMC,OAAAA,GAAUC,aAAAA,CAAQC,UAAU,CAACH,MAAMD,IAAI,CAAA;;AAG7C,IAAA,IAAIA,SAASE,OAAAA,EAAS;IAEtB,IAAI,CAACG,eAAeL,IAAAA,CAAAA,EAAO;QACzB,MAAM,IAAIM,YAAAA,CAAOC,gBAAgB,CAAC,oBAAA,CAAA;AACpC,IAAA;AAEA,IAAA,IAAIF,eAAeH,OAAAA,CAAAA,EAAU;QAC3B,MAAM,IAAII,YAAAA,CAAOC,gBAAgB,CAAC,oBAAA,CAAA;AACpC,IAAA;AAEA,IAAA,MAAMC,OAAAA,GAAUC,KAAAA,EAAAA;AAEhBD,IAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACC,SAAAA,GAAAA;QAC1B,MAAMC,MAAAA,GAASD,UAAUE,GAAG;AAC5B,QAAA,MAAMC,SAAS,CAAA,EAAGb,OAAAA,CAAQ,CAAC,EAAEU,SAAAA,CAAUI,SAAS,CAAA,CAAE;;QAGlD,IAAIJ,SAAAA,CAAUK,QAAQ,KAAKjB,IAAAA,EAAM;AAEjCY,QAAAA,SAAAA,CAAUM,MAAM,CAACH,MAAAA,CAAAA,CAAQI,MAAM,CAACC,SAAAA,CAAKC,MAAAA,CAAOC,IAAI,CAACC,GAAG,CAACb,UAAU,EAAER,OAAAA,CAAAA,CAAAA;AAEjEM,QAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACa,KAAAA,GAAAA;YAC1BA,KAAAA,CAAMC,eAAe,CAACZ,MAAAA,EAAQE,MAAAA,CAAAA;AAChC,QAAA,CAAA,CAAA;AAEAP,QAAAA,OAAAA,CAAQkB,YAAY,CAACf,OAAO,CAAC,CAACgB,EAAAA,GAAAA;YAC5BA,EAAAA,CAAGF,eAAe,CAACZ,MAAAA,EAAQE,MAAAA,CAAAA;AAC7B,QAAA,CAAA,CAAA;AACF,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMP,QAAQoB,UAAU,EAAA;IAExB,OAAO1B,OAAAA;AACT;AAEA;;IAGO,MAAM2B,cAAAA,GAAiB,OAAO7B,IAAAA,GAAAA;IACnC,IAAI,CAACK,eAAeL,IAAAA,CAAAA,EAAO;QACzB,MAAM,IAAIM,YAAAA,CAAOC,gBAAgB,CAAC,oBAAA,CAAA;AACpC,IAAA;AAEA,IAAA,MAAMC,OAAAA,GAAUC,KAAAA,EAAAA;AAEhBD,IAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACC,SAAAA,GAAAA;QAC1B,IAAIA,SAAAA,CAAUK,QAAQ,KAAKjB,IAAAA,EAAM;YAC/BQ,OAAAA,CAAQsB,eAAe,CAAClB,SAAAA,CAAUE,GAAG,CAAA;AACvC,QAAA;AACF,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMN,QAAQoB,UAAU,EAAA;AAC1B;AAEA;;IAGA,MAAMvB,iBAAiB,CAACL,IAAAA,GAAAA;AACtB,IAAA,MAAM+B,aAAAA,GAAgBC,MAAAA,CAAOC,MAAM,CAACZ,MAAAA,CAAOX,UAAU,CAAA,CAAEwB,SAAS,CAC9D,CAACtB,SAAAA,GAAcA,SAAAA,CAAUK,QAAQ,KAAKjB,IAAAA,CAAAA;AAGxC,IAAA,OAAO+B,gBAAgB,EAAC;AAC1B,CAAA;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { join } from 'path';
2
- import { strings, errors } from '@strapi/utils';
2
+ import { errors, strings } from '@strapi/utils';
3
3
  import createBuilder from './schema-builder/index.mjs';
4
4
 
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"component-categories.mjs","sources":["../../../server/src/services/component-categories.ts"],"sourcesContent":["import { join } from 'path';\nimport { strings, errors } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\nimport createBuilder from './schema-builder';\n\ntype Infos = {\n name: string;\n};\n\ninterface WorkingComponent extends Struct.ComponentSchema {\n setUID: (uid: string) => WorkingComponent;\n setDir: (dir: string) => WorkingComponent;\n updateComponent: (oldUID: string, newUID: string) => void;\n}\n\n/**\n * Edit a category name and move components to the write folder\n */\nexport const editCategory = async (name: string, infos: Infos) => {\n const newName = strings.nameToSlug(infos.name);\n\n // don't do anything the name doesn't change\n if (name === newName) return;\n\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n if (categoryExists(newName)) {\n throw new errors.ApplicationError('Name already taken');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component: WorkingComponent) => {\n const oldUID = component.uid;\n const newUID = `${newName}.${component.modelName}`;\n\n // only edit the components in this specific category\n if (component.category !== name) return;\n\n component.setUID(newUID).setDir(join(strapi.dirs.app.components, newName));\n\n builder.components.forEach((compo: WorkingComponent) => {\n compo.updateComponent(oldUID, newUID);\n });\n\n builder.contentTypes.forEach((ct: WorkingComponent) => {\n ct.updateComponent(oldUID, newUID);\n });\n });\n\n await builder.writeFiles();\n\n return newName;\n};\n\n/**\n * Deletes a category and its components\n */\nexport const deleteCategory = async (name: string) => {\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component) => {\n if (component.category === name) {\n builder.deleteComponent(component.uid);\n }\n });\n\n await builder.writeFiles();\n};\n\n/**\n * Checks if a category exists\n */\nconst categoryExists = (name: string) => {\n const matchingIndex = Object.values(strapi.components).findIndex(\n (component) => component.category === name\n );\n\n return matchingIndex > -1;\n};\n"],"names":["editCategory","name","infos","newName","strings","nameToSlug","categoryExists","errors","ApplicationError","builder","createBuilder","components","forEach","component","oldUID","uid","newUID","modelName","category","setUID","setDir","join","strapi","dirs","app","compo","updateComponent","contentTypes","ct","writeFiles","deleteCategory","deleteComponent","matchingIndex","Object","values","findIndex"],"mappings":";;;;AAeA;;AAEC,IACM,MAAMA,YAAe,GAAA,OAAOC,IAAcC,EAAAA,KAAAA,GAAAA;AAC/C,IAAA,MAAMC,OAAUC,GAAAA,OAAAA,CAAQC,UAAU,CAACH,MAAMD,IAAI,CAAA;;AAG7C,IAAA,IAAIA,SAASE,OAAS,EAAA;IAEtB,IAAI,CAACG,eAAeL,IAAO,CAAA,EAAA;QACzB,MAAM,IAAIM,MAAOC,CAAAA,gBAAgB,CAAC,oBAAA,CAAA;AACpC;AAEA,IAAA,IAAIF,eAAeH,OAAU,CAAA,EAAA;QAC3B,MAAM,IAAII,MAAOC,CAAAA,gBAAgB,CAAC,oBAAA,CAAA;AACpC;AAEA,IAAA,MAAMC,OAAUC,GAAAA,aAAAA,EAAAA;AAEhBD,IAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACC,SAAAA,GAAAA;QAC1B,MAAMC,MAAAA,GAASD,UAAUE,GAAG;AAC5B,QAAA,MAAMC,SAAS,CAAGb,EAAAA,OAAAA,CAAQ,CAAC,EAAEU,SAAAA,CAAUI,SAAS,CAAE,CAAA;;QAGlD,IAAIJ,SAAAA,CAAUK,QAAQ,KAAKjB,IAAM,EAAA;AAEjCY,QAAAA,SAAAA,CAAUM,MAAM,CAACH,MAAQI,CAAAA,CAAAA,MAAM,CAACC,IAAAA,CAAKC,MAAOC,CAAAA,IAAI,CAACC,GAAG,CAACb,UAAU,EAAER,OAAAA,CAAAA,CAAAA;AAEjEM,QAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACa,KAAAA,GAAAA;YAC1BA,KAAMC,CAAAA,eAAe,CAACZ,MAAQE,EAAAA,MAAAA,CAAAA;AAChC,SAAA,CAAA;AAEAP,QAAAA,OAAAA,CAAQkB,YAAY,CAACf,OAAO,CAAC,CAACgB,EAAAA,GAAAA;YAC5BA,EAAGF,CAAAA,eAAe,CAACZ,MAAQE,EAAAA,MAAAA,CAAAA;AAC7B,SAAA,CAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMP,QAAQoB,UAAU,EAAA;IAExB,OAAO1B,OAAAA;AACT;AAEA;;IAGa2B,MAAAA,cAAAA,GAAiB,OAAO7B,IAAAA,GAAAA;IACnC,IAAI,CAACK,eAAeL,IAAO,CAAA,EAAA;QACzB,MAAM,IAAIM,MAAOC,CAAAA,gBAAgB,CAAC,oBAAA,CAAA;AACpC;AAEA,IAAA,MAAMC,OAAUC,GAAAA,aAAAA,EAAAA;AAEhBD,IAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACC,SAAAA,GAAAA;QAC1B,IAAIA,SAAAA,CAAUK,QAAQ,KAAKjB,IAAM,EAAA;YAC/BQ,OAAQsB,CAAAA,eAAe,CAAClB,SAAAA,CAAUE,GAAG,CAAA;AACvC;AACF,KAAA,CAAA;AAEA,IAAA,MAAMN,QAAQoB,UAAU,EAAA;AAC1B;AAEA;;IAGA,MAAMvB,iBAAiB,CAACL,IAAAA,GAAAA;AACtB,IAAA,MAAM+B,aAAgBC,GAAAA,MAAAA,CAAOC,MAAM,CAACZ,MAAOX,CAAAA,UAAU,CAAEwB,CAAAA,SAAS,CAC9D,CAACtB,SAAcA,GAAAA,SAAAA,CAAUK,QAAQ,KAAKjB,IAAAA,CAAAA;AAGxC,IAAA,OAAO+B,gBAAgB,CAAC,CAAA;AAC1B,CAAA;;;;"}
1
+ {"version":3,"file":"component-categories.mjs","sources":["../../../server/src/services/component-categories.ts"],"sourcesContent":["import { join } from 'path';\nimport { strings, errors } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\nimport createBuilder from './schema-builder';\n\ntype Infos = {\n name: string;\n};\n\ninterface WorkingComponent extends Struct.ComponentSchema {\n setUID: (uid: string) => WorkingComponent;\n setDir: (dir: string) => WorkingComponent;\n updateComponent: (oldUID: string, newUID: string) => void;\n}\n\n/**\n * Edit a category name and move components to the write folder\n */\nexport const editCategory = async (name: string, infos: Infos) => {\n const newName = strings.nameToSlug(infos.name);\n\n // don't do anything the name doesn't change\n if (name === newName) return;\n\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n if (categoryExists(newName)) {\n throw new errors.ApplicationError('Name already taken');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component: WorkingComponent) => {\n const oldUID = component.uid;\n const newUID = `${newName}.${component.modelName}`;\n\n // only edit the components in this specific category\n if (component.category !== name) return;\n\n component.setUID(newUID).setDir(join(strapi.dirs.app.components, newName));\n\n builder.components.forEach((compo: WorkingComponent) => {\n compo.updateComponent(oldUID, newUID);\n });\n\n builder.contentTypes.forEach((ct: WorkingComponent) => {\n ct.updateComponent(oldUID, newUID);\n });\n });\n\n await builder.writeFiles();\n\n return newName;\n};\n\n/**\n * Deletes a category and its components\n */\nexport const deleteCategory = async (name: string) => {\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component) => {\n if (component.category === name) {\n builder.deleteComponent(component.uid);\n }\n });\n\n await builder.writeFiles();\n};\n\n/**\n * Checks if a category exists\n */\nconst categoryExists = (name: string) => {\n const matchingIndex = Object.values(strapi.components).findIndex(\n (component) => component.category === name\n );\n\n return matchingIndex > -1;\n};\n"],"names":["editCategory","name","infos","newName","strings","nameToSlug","categoryExists","errors","ApplicationError","builder","createBuilder","components","forEach","component","oldUID","uid","newUID","modelName","category","setUID","setDir","join","strapi","dirs","app","compo","updateComponent","contentTypes","ct","writeFiles","deleteCategory","deleteComponent","matchingIndex","Object","values","findIndex"],"mappings":";;;;AAeA;;AAEC,IACM,MAAMA,YAAAA,GAAe,OAAOC,IAAAA,EAAcC,KAAAA,GAAAA;AAC/C,IAAA,MAAMC,OAAAA,GAAUC,OAAAA,CAAQC,UAAU,CAACH,MAAMD,IAAI,CAAA;;AAG7C,IAAA,IAAIA,SAASE,OAAAA,EAAS;IAEtB,IAAI,CAACG,eAAeL,IAAAA,CAAAA,EAAO;QACzB,MAAM,IAAIM,MAAAA,CAAOC,gBAAgB,CAAC,oBAAA,CAAA;AACpC,IAAA;AAEA,IAAA,IAAIF,eAAeH,OAAAA,CAAAA,EAAU;QAC3B,MAAM,IAAII,MAAAA,CAAOC,gBAAgB,CAAC,oBAAA,CAAA;AACpC,IAAA;AAEA,IAAA,MAAMC,OAAAA,GAAUC,aAAAA,EAAAA;AAEhBD,IAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACC,SAAAA,GAAAA;QAC1B,MAAMC,MAAAA,GAASD,UAAUE,GAAG;AAC5B,QAAA,MAAMC,SAAS,CAAA,EAAGb,OAAAA,CAAQ,CAAC,EAAEU,SAAAA,CAAUI,SAAS,CAAA,CAAE;;QAGlD,IAAIJ,SAAAA,CAAUK,QAAQ,KAAKjB,IAAAA,EAAM;AAEjCY,QAAAA,SAAAA,CAAUM,MAAM,CAACH,MAAAA,CAAAA,CAAQI,MAAM,CAACC,IAAAA,CAAKC,MAAAA,CAAOC,IAAI,CAACC,GAAG,CAACb,UAAU,EAAER,OAAAA,CAAAA,CAAAA;AAEjEM,QAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACa,KAAAA,GAAAA;YAC1BA,KAAAA,CAAMC,eAAe,CAACZ,MAAAA,EAAQE,MAAAA,CAAAA;AAChC,QAAA,CAAA,CAAA;AAEAP,QAAAA,OAAAA,CAAQkB,YAAY,CAACf,OAAO,CAAC,CAACgB,EAAAA,GAAAA;YAC5BA,EAAAA,CAAGF,eAAe,CAACZ,MAAAA,EAAQE,MAAAA,CAAAA;AAC7B,QAAA,CAAA,CAAA;AACF,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMP,QAAQoB,UAAU,EAAA;IAExB,OAAO1B,OAAAA;AACT;AAEA;;IAGO,MAAM2B,cAAAA,GAAiB,OAAO7B,IAAAA,GAAAA;IACnC,IAAI,CAACK,eAAeL,IAAAA,CAAAA,EAAO;QACzB,MAAM,IAAIM,MAAAA,CAAOC,gBAAgB,CAAC,oBAAA,CAAA;AACpC,IAAA;AAEA,IAAA,MAAMC,OAAAA,GAAUC,aAAAA,EAAAA;AAEhBD,IAAAA,OAAAA,CAAQE,UAAU,CAACC,OAAO,CAAC,CAACC,SAAAA,GAAAA;QAC1B,IAAIA,SAAAA,CAAUK,QAAQ,KAAKjB,IAAAA,EAAM;YAC/BQ,OAAAA,CAAQsB,eAAe,CAAClB,SAAAA,CAAUE,GAAG,CAAA;AACvC,QAAA;AACF,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMN,QAAQoB,UAAU,EAAA;AAC1B;AAEA;;IAGA,MAAMvB,iBAAiB,CAACL,IAAAA,GAAAA;AACtB,IAAA,MAAM+B,aAAAA,GAAgBC,MAAAA,CAAOC,MAAM,CAACZ,MAAAA,CAAOX,UAAU,CAAA,CAAEwB,SAAS,CAC9D,CAACtB,SAAAA,GAAcA,SAAAA,CAAUK,QAAQ,KAAKjB,IAAAA,CAAAA;AAGxC,IAAA,OAAO+B,gBAAgB,EAAC;AAC1B,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sources":["../../../server/src/services/components.ts"],"sourcesContent":["import type { Internal, Struct } from '@strapi/types';\nimport { get, has } from 'lodash';\n\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\n\n/**\n * Formats a component attributes\n */\nexport const formatComponent = (component: any) => {\n const { uid, modelName, connection, collectionName, info, category } = component;\n\n return {\n uid,\n category,\n apiId: modelName,\n schema: {\n displayName: get(info, 'displayName'),\n description: get(info, 'description', ''),\n icon: get(info, 'icon'),\n connection,\n collectionName,\n pluginOptions: component.pluginOptions,\n attributes: formatAttributes(component),\n },\n };\n};\n\n/**\n * Creates a component and handle the nested components sent with it\n */\nexport const createComponent = async ({ component, components = [] }: any) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newComponent = builder.createComponent(replaceTmpUIDs(component));\n\n components.forEach((component: any) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.create', { component: newComponent });\n\n return newComponent;\n};\n\ntype ComponentToCreate = {\n component: Struct.ComponentSchema;\n components?: Struct.ComponentSchema[];\n};\n\nexport const editComponent = async (\n uid: Internal.UID.Component,\n { component, components = [] }: ComponentToCreate\n) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedComponent = builder.editComponent({\n uid,\n ...replaceTmpUIDs(component),\n });\n\n components.forEach((component) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.update', { component: updatedComponent });\n\n return updatedComponent;\n};\n\nexport const deleteComponent = async (uid: Internal.UID.Component) => {\n const builder = createBuilder();\n\n const deletedComponent = builder.deleteComponent(uid);\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.delete', { component: deletedComponent });\n\n return deletedComponent;\n};\n"],"names":["formatComponent","component","uid","modelName","connection","collectionName","info","category","apiId","schema","displayName","get","description","icon","pluginOptions","attributes","formatAttributes","createComponent","components","builder","createBuilder","uidMap","createNewComponentUIDMap","replaceTmpUIDs","replaceTemporaryUIDs","newComponent","forEach","has","editComponent","writeFiles","strapi","eventHub","emit","updatedComponent","deleteComponent","deletedComponent"],"mappings":"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"}
1
+ {"version":3,"file":"components.js","sources":["../../../server/src/services/components.ts"],"sourcesContent":["import type { Internal, Struct } from '@strapi/types';\nimport { get, has } from 'lodash';\n\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\n\n/**\n * Formats a component attributes\n */\nexport const formatComponent = (component: any) => {\n const { uid, modelName, connection, collectionName, info, category } = component;\n\n return {\n uid,\n category,\n apiId: modelName,\n schema: {\n displayName: get(info, 'displayName'),\n description: get(info, 'description', ''),\n icon: get(info, 'icon'),\n connection,\n collectionName,\n pluginOptions: component.pluginOptions,\n attributes: formatAttributes(component),\n },\n };\n};\n\n/**\n * Creates a component and handle the nested components sent with it\n */\nexport const createComponent = async ({ component, components = [] }: any) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newComponent = builder.createComponent(replaceTmpUIDs(component));\n\n components.forEach((component: any) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.create', { component: newComponent });\n\n return newComponent;\n};\n\ntype ComponentToCreate = {\n component: Struct.ComponentSchema;\n components?: Struct.ComponentSchema[];\n};\n\nexport const editComponent = async (\n uid: Internal.UID.Component,\n { component, components = [] }: ComponentToCreate\n) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedComponent = builder.editComponent({\n uid,\n ...replaceTmpUIDs(component),\n });\n\n components.forEach((component) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.update', { component: updatedComponent });\n\n return updatedComponent;\n};\n\nexport const deleteComponent = async (uid: Internal.UID.Component) => {\n const builder = createBuilder();\n\n const deletedComponent = builder.deleteComponent(uid);\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.delete', { component: deletedComponent });\n\n return deletedComponent;\n};\n"],"names":["formatComponent","component","uid","modelName","connection","collectionName","info","category","apiId","schema","displayName","get","description","icon","pluginOptions","attributes","formatAttributes","createComponent","components","builder","createBuilder","uidMap","createNewComponentUIDMap","replaceTmpUIDs","replaceTemporaryUIDs","newComponent","forEach","has","editComponent","writeFiles","strapi","eventHub","emit","updatedComponent","deleteComponent","deletedComponent"],"mappings":";;;;;;AAMA;;IAGO,MAAMA,eAAAA,GAAkB,CAACC,SAAAA,GAAAA;AAC9B,IAAA,MAAM,EAAEC,GAAG,EAAEC,SAAS,EAAEC,UAAU,EAAEC,cAAc,EAAEC,IAAI,EAAEC,QAAQ,EAAE,GAAGN,SAAAA;IAEvE,OAAO;AACLC,QAAAA,GAAAA;AACAK,QAAAA,QAAAA;QACAC,KAAAA,EAAOL,SAAAA;QACPM,MAAAA,EAAQ;AACNC,YAAAA,WAAAA,EAAaC,MAAIL,IAAAA,EAAM,aAAA,CAAA;YACvBM,WAAAA,EAAaD,KAAAA,CAAIL,MAAM,aAAA,EAAe,EAAA,CAAA;AACtCO,YAAAA,IAAAA,EAAMF,MAAIL,IAAAA,EAAM,MAAA,CAAA;AAChBF,YAAAA,UAAAA;AACAC,YAAAA,cAAAA;AACAS,YAAAA,aAAAA,EAAeb,UAAUa,aAAa;AACtCC,YAAAA,UAAAA,EAAYC,2BAAAA,CAAiBf,SAAAA;AAC/B;AACF,KAAA;AACF;AAEA;;UAGagB,eAAAA,GAAkB,OAAO,EAAEhB,SAAS,EAAEiB,UAAAA,GAAa,EAAE,EAAO,GAAA;AACvE,IAAA,MAAMC,OAAAA,GAAUC,KAAAA,EAAAA;IAEhB,MAAMC,MAAAA,GAASF,OAAAA,CAAQG,wBAAwB,CAACJ,UAAAA,CAAAA;AAChD,IAAA,MAAMK,iBAAiBC,+BAAAA,CAAqBH,MAAAA,CAAAA;AAE5C,IAAA,MAAMI,YAAAA,GAAeN,OAAAA,CAAQF,eAAe,CAACM,cAAAA,CAAetB,SAAAA,CAAAA,CAAAA;IAE5DiB,UAAAA,CAAWQ,OAAO,CAAC,CAACzB,SAAAA,GAAAA;QAClB,IAAI,CAAC0B,KAAAA,CAAI1B,SAAAA,EAAW,KAAA,CAAA,EAAQ;YAC1B,OAAOkB,OAAAA,CAAQF,eAAe,CAACM,cAAAA,CAAetB,SAAAA,CAAAA,CAAAA;AAChD,QAAA;QAEA,OAAOkB,OAAAA,CAAQS,aAAa,CAACL,cAAAA,CAAetB,SAAAA,CAAAA,CAAAA;AAC9C,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMkB,QAAQU,UAAU,EAAA;AAExBC,IAAAA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,CAAC,kBAAA,EAAoB;QAAE/B,SAAAA,EAAWwB;AAAa,KAAA,CAAA;IAEnE,OAAOA,YAAAA;AACT;AAOO,MAAMG,gBAAgB,OAC3B1B,GAAAA,EACA,EAAED,SAAS,EAAEiB,UAAAA,GAAa,EAAE,EAAqB,GAAA;AAEjD,IAAA,MAAMC,OAAAA,GAAUC,KAAAA,EAAAA;IAEhB,MAAMC,MAAAA,GAASF,OAAAA,CAAQG,wBAAwB,CAACJ,UAAAA,CAAAA;AAChD,IAAA,MAAMK,iBAAiBC,+BAAAA,CAAqBH,MAAAA,CAAAA;IAE5C,MAAMY,gBAAAA,GAAmBd,OAAAA,CAAQS,aAAa,CAAC;AAC7C1B,QAAAA,GAAAA;AACA,QAAA,GAAGqB,eAAetB,SAAAA;AACpB,KAAA,CAAA;IAEAiB,UAAAA,CAAWQ,OAAO,CAAC,CAACzB,SAAAA,GAAAA;QAClB,IAAI,CAAC0B,KAAAA,CAAI1B,SAAAA,EAAW,KAAA,CAAA,EAAQ;YAC1B,OAAOkB,OAAAA,CAAQF,eAAe,CAACM,cAAAA,CAAetB,SAAAA,CAAAA,CAAAA;AAChD,QAAA;QAEA,OAAOkB,OAAAA,CAAQS,aAAa,CAACL,cAAAA,CAAetB,SAAAA,CAAAA,CAAAA;AAC9C,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMkB,QAAQU,UAAU,EAAA;AAExBC,IAAAA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,CAAC,kBAAA,EAAoB;QAAE/B,SAAAA,EAAWgC;AAAiB,KAAA,CAAA;IAEvE,OAAOA,gBAAAA;AACT;AAEO,MAAMC,kBAAkB,OAAOhC,GAAAA,GAAAA;AACpC,IAAA,MAAMiB,OAAAA,GAAUC,KAAAA,EAAAA;IAEhB,MAAMe,gBAAAA,GAAmBhB,OAAAA,CAAQe,eAAe,CAAChC,GAAAA,CAAAA;AAEjD,IAAA,MAAMiB,QAAQU,UAAU,EAAA;AAExBC,IAAAA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,CAAC,kBAAA,EAAoB;QAAE/B,SAAAA,EAAWkC;AAAiB,KAAA,CAAA;IAEvE,OAAOA,gBAAAA;AACT;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { get, has } from 'lodash';
1
+ import { has, get } from 'lodash';
2
2
  import { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes.mjs';
3
3
  import createBuilder from './schema-builder/index.mjs';
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"components.mjs","sources":["../../../server/src/services/components.ts"],"sourcesContent":["import type { Internal, Struct } from '@strapi/types';\nimport { get, has } from 'lodash';\n\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\n\n/**\n * Formats a component attributes\n */\nexport const formatComponent = (component: any) => {\n const { uid, modelName, connection, collectionName, info, category } = component;\n\n return {\n uid,\n category,\n apiId: modelName,\n schema: {\n displayName: get(info, 'displayName'),\n description: get(info, 'description', ''),\n icon: get(info, 'icon'),\n connection,\n collectionName,\n pluginOptions: component.pluginOptions,\n attributes: formatAttributes(component),\n },\n };\n};\n\n/**\n * Creates a component and handle the nested components sent with it\n */\nexport const createComponent = async ({ component, components = [] }: any) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newComponent = builder.createComponent(replaceTmpUIDs(component));\n\n components.forEach((component: any) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.create', { component: newComponent });\n\n return newComponent;\n};\n\ntype ComponentToCreate = {\n component: Struct.ComponentSchema;\n components?: Struct.ComponentSchema[];\n};\n\nexport const editComponent = async (\n uid: Internal.UID.Component,\n { component, components = [] }: ComponentToCreate\n) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedComponent = builder.editComponent({\n uid,\n ...replaceTmpUIDs(component),\n });\n\n components.forEach((component) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.update', { component: updatedComponent });\n\n return updatedComponent;\n};\n\nexport const deleteComponent = async (uid: Internal.UID.Component) => {\n const builder = createBuilder();\n\n const deletedComponent = builder.deleteComponent(uid);\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.delete', { component: deletedComponent });\n\n return deletedComponent;\n};\n"],"names":["formatComponent","component","uid","modelName","connection","collectionName","info","category","apiId","schema","displayName","get","description","icon","pluginOptions","attributes","formatAttributes","createComponent","components","builder","createBuilder","uidMap","createNewComponentUIDMap","replaceTmpUIDs","replaceTemporaryUIDs","newComponent","forEach","has","editComponent","writeFiles","strapi","eventHub","emit","updatedComponent","deleteComponent","deletedComponent"],"mappings":"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"}
1
+ {"version":3,"file":"components.mjs","sources":["../../../server/src/services/components.ts"],"sourcesContent":["import type { Internal, Struct } from '@strapi/types';\nimport { get, has } from 'lodash';\n\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\n\n/**\n * Formats a component attributes\n */\nexport const formatComponent = (component: any) => {\n const { uid, modelName, connection, collectionName, info, category } = component;\n\n return {\n uid,\n category,\n apiId: modelName,\n schema: {\n displayName: get(info, 'displayName'),\n description: get(info, 'description', ''),\n icon: get(info, 'icon'),\n connection,\n collectionName,\n pluginOptions: component.pluginOptions,\n attributes: formatAttributes(component),\n },\n };\n};\n\n/**\n * Creates a component and handle the nested components sent with it\n */\nexport const createComponent = async ({ component, components = [] }: any) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newComponent = builder.createComponent(replaceTmpUIDs(component));\n\n components.forEach((component: any) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.create', { component: newComponent });\n\n return newComponent;\n};\n\ntype ComponentToCreate = {\n component: Struct.ComponentSchema;\n components?: Struct.ComponentSchema[];\n};\n\nexport const editComponent = async (\n uid: Internal.UID.Component,\n { component, components = [] }: ComponentToCreate\n) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedComponent = builder.editComponent({\n uid,\n ...replaceTmpUIDs(component),\n });\n\n components.forEach((component) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.update', { component: updatedComponent });\n\n return updatedComponent;\n};\n\nexport const deleteComponent = async (uid: Internal.UID.Component) => {\n const builder = createBuilder();\n\n const deletedComponent = builder.deleteComponent(uid);\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.delete', { component: deletedComponent });\n\n return deletedComponent;\n};\n"],"names":["formatComponent","component","uid","modelName","connection","collectionName","info","category","apiId","schema","displayName","get","description","icon","pluginOptions","attributes","formatAttributes","createComponent","components","builder","createBuilder","uidMap","createNewComponentUIDMap","replaceTmpUIDs","replaceTemporaryUIDs","newComponent","forEach","has","editComponent","writeFiles","strapi","eventHub","emit","updatedComponent","deleteComponent","deletedComponent"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../server/src/services/constants.ts"],"sourcesContent":["export const modelTypes = {\n CONTENT_TYPE: 'CONTENT_TYPE',\n COMPONENT: 'COMPONENT',\n} as const;\n\nexport const typeKinds = {\n SINGLE_TYPE: 'singleType',\n COLLECTION_TYPE: 'collectionType',\n} as const;\n\nexport const DEFAULT_TYPES = [\n // advanced types\n 'media',\n\n // scalar types\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'date',\n 'time',\n 'datetime',\n 'timestamp',\n 'boolean',\n\n 'relation',\n] as const;\n\nexport const VALID_UID_TARGETS = ['string', 'text'] as const;\n\nexport const coreUids = {\n STRAPI_USER: 'admin::user',\n PREFIX: 'strapi::',\n} as const;\n\nexport const pluginsUids = {\n UPLOAD_FILE: 'plugin::upload.file',\n} as const;\n"],"names":["modelTypes","CONTENT_TYPE","COMPONENT","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","DEFAULT_TYPES","VALID_UID_TARGETS","coreUids","STRAPI_USER","PREFIX","pluginsUids","UPLOAD_FILE"],"mappings":";;MAAaA,UAAa,GAAA;IACxBC,YAAc,EAAA,cAAA;IACdC,SAAW,EAAA;AACb;MAEaC,SAAY,GAAA;IACvBC,WAAa,EAAA,YAAA;IACbC,eAAiB,EAAA;AACnB;MAEaC,aAAgB,GAAA;;AAE3B,IAAA,OAAA;;AAGA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA,SAAA;AACA,IAAA,YAAA;AACA,IAAA,OAAA;AACA,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,SAAA;AAEA,IAAA;;MAGWC,iBAAoB,GAAA;AAAC,IAAA,QAAA;AAAU,IAAA;;MAE/BC,QAAW,GAAA;IACtBC,WAAa,EAAA,aAAA;IACbC,MAAQ,EAAA;AACV;MAEaC,WAAc,GAAA;IACzBC,WAAa,EAAA;AACf;;;;;;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../server/src/services/constants.ts"],"sourcesContent":["export const modelTypes = {\n CONTENT_TYPE: 'CONTENT_TYPE',\n COMPONENT: 'COMPONENT',\n} as const;\n\nexport const typeKinds = {\n SINGLE_TYPE: 'singleType',\n COLLECTION_TYPE: 'collectionType',\n} as const;\n\nexport const DEFAULT_TYPES = [\n // advanced types\n 'media',\n\n // scalar types\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'date',\n 'time',\n 'datetime',\n 'timestamp',\n 'boolean',\n\n 'relation',\n] as const;\n\nexport const VALID_UID_TARGETS = ['string', 'text'] as const;\n\nexport const coreUids = {\n STRAPI_USER: 'admin::user',\n PREFIX: 'strapi::',\n} as const;\n\nexport const pluginsUids = {\n UPLOAD_FILE: 'plugin::upload.file',\n} as const;\n"],"names":["modelTypes","CONTENT_TYPE","COMPONENT","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","DEFAULT_TYPES","VALID_UID_TARGETS","coreUids","STRAPI_USER","PREFIX","pluginsUids","UPLOAD_FILE"],"mappings":";;MAAaA,UAAAA,GAAa;IACxBC,YAAAA,EAAc,cAAA;IACdC,SAAAA,EAAW;AACb;MAEaC,SAAAA,GAAY;IACvBC,WAAAA,EAAa,YAAA;IACbC,eAAAA,EAAiB;AACnB;MAEaC,aAAAA,GAAgB;;AAE3B,IAAA,OAAA;;AAGA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA,SAAA;AACA,IAAA,YAAA;AACA,IAAA,OAAA;AACA,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,SAAA;AAEA,IAAA;;MAGWC,iBAAAA,GAAoB;AAAC,IAAA,QAAA;AAAU,IAAA;;MAE/BC,QAAAA,GAAW;IACtBC,WAAAA,EAAa,aAAA;IACbC,MAAAA,EAAQ;AACV;MAEaC,WAAAA,GAAc;IACzBC,WAAAA,EAAa;AACf;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../../server/src/services/constants.ts"],"sourcesContent":["export const modelTypes = {\n CONTENT_TYPE: 'CONTENT_TYPE',\n COMPONENT: 'COMPONENT',\n} as const;\n\nexport const typeKinds = {\n SINGLE_TYPE: 'singleType',\n COLLECTION_TYPE: 'collectionType',\n} as const;\n\nexport const DEFAULT_TYPES = [\n // advanced types\n 'media',\n\n // scalar types\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'date',\n 'time',\n 'datetime',\n 'timestamp',\n 'boolean',\n\n 'relation',\n] as const;\n\nexport const VALID_UID_TARGETS = ['string', 'text'] as const;\n\nexport const coreUids = {\n STRAPI_USER: 'admin::user',\n PREFIX: 'strapi::',\n} as const;\n\nexport const pluginsUids = {\n UPLOAD_FILE: 'plugin::upload.file',\n} as const;\n"],"names":["modelTypes","CONTENT_TYPE","COMPONENT","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","DEFAULT_TYPES","VALID_UID_TARGETS","coreUids","STRAPI_USER","PREFIX","pluginsUids","UPLOAD_FILE"],"mappings":"MAAaA,UAAa,GAAA;IACxBC,YAAc,EAAA,cAAA;IACdC,SAAW,EAAA;AACb;MAEaC,SAAY,GAAA;IACvBC,WAAa,EAAA,YAAA;IACbC,eAAiB,EAAA;AACnB;MAEaC,aAAgB,GAAA;;AAE3B,IAAA,OAAA;;AAGA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA,SAAA;AACA,IAAA,YAAA;AACA,IAAA,OAAA;AACA,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,SAAA;AAEA,IAAA;;MAGWC,iBAAoB,GAAA;AAAC,IAAA,QAAA;AAAU,IAAA;;MAE/BC,QAAW,GAAA;IACtBC,WAAa,EAAA,aAAA;IACbC,MAAQ,EAAA;AACV;MAEaC,WAAc,GAAA;IACzBC,WAAa,EAAA;AACf;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../../server/src/services/constants.ts"],"sourcesContent":["export const modelTypes = {\n CONTENT_TYPE: 'CONTENT_TYPE',\n COMPONENT: 'COMPONENT',\n} as const;\n\nexport const typeKinds = {\n SINGLE_TYPE: 'singleType',\n COLLECTION_TYPE: 'collectionType',\n} as const;\n\nexport const DEFAULT_TYPES = [\n // advanced types\n 'media',\n\n // scalar types\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'date',\n 'time',\n 'datetime',\n 'timestamp',\n 'boolean',\n\n 'relation',\n] as const;\n\nexport const VALID_UID_TARGETS = ['string', 'text'] as const;\n\nexport const coreUids = {\n STRAPI_USER: 'admin::user',\n PREFIX: 'strapi::',\n} as const;\n\nexport const pluginsUids = {\n UPLOAD_FILE: 'plugin::upload.file',\n} as const;\n"],"names":["modelTypes","CONTENT_TYPE","COMPONENT","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","DEFAULT_TYPES","VALID_UID_TARGETS","coreUids","STRAPI_USER","PREFIX","pluginsUids","UPLOAD_FILE"],"mappings":"MAAaA,UAAAA,GAAa;IACxBC,YAAAA,EAAc,cAAA;IACdC,SAAAA,EAAW;AACb;MAEaC,SAAAA,GAAY;IACvBC,WAAAA,EAAa,YAAA;IACbC,eAAAA,EAAiB;AACnB;MAEaC,aAAAA,GAAgB;;AAE3B,IAAA,OAAA;;AAGA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA,SAAA;AACA,IAAA,YAAA;AACA,IAAA,OAAA;AACA,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,SAAA;AAEA,IAAA;;MAGWC,iBAAAA,GAAoB;AAAC,IAAA,QAAA;AAAU,IAAA;;MAE/BC,QAAAA,GAAW;IACtBC,WAAAA,EAAa,aAAA;IACbC,MAAAA,EAAQ;AACV;MAEaC,WAAAA,GAAc;IACzBC,WAAAA,EAAa;AACf;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"content-types.js","sources":["../../../server/src/services/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getOr } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils, errors } from '@strapi/utils';\nimport type { UID, Struct } from '@strapi/types';\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\nimport { coreUids, pluginsUids } from './constants';\n\nconst { ApplicationError } = errors;\n\nexport const isContentTypeVisible = (model: Struct.ContentTypeSchema) =>\n getOr(true, 'pluginOptions.content-type-builder.visible', model) === true;\n\nexport const getRestrictRelationsTo = (contentType: Struct.ContentTypeSchema) => {\n const { uid } = contentType;\n if (uid === coreUids.STRAPI_USER) {\n // TODO: replace with an obj { relation: 'x', bidirectional: true|false }\n return ['oneWay', 'manyWay'];\n }\n\n if (\n uid.startsWith(coreUids.PREFIX) ||\n uid === pluginsUids.UPLOAD_FILE ||\n !isContentTypeVisible(contentType)\n ) {\n return [];\n }\n\n return null;\n};\n\n/**\n * Format a contentType info to be used by the front-end\n */\nexport const formatContentType = (contentType: any) => {\n const { uid, kind, modelName, plugin, collectionName, info } = contentType;\n\n return {\n uid,\n plugin,\n apiID: modelName,\n schema: {\n ...contentTypesUtils.getOptions(contentType),\n displayName: info.displayName,\n singularName: info.singularName,\n pluralName: info.pluralName,\n description: _.get(info, 'description', ''),\n pluginOptions: contentType.pluginOptions,\n kind: kind || 'collectionType',\n collectionName,\n attributes: formatAttributes(contentType),\n visible: isContentTypeVisible(contentType),\n restrictRelationsTo: getRestrictRelationsTo(contentType),\n },\n };\n};\n\nexport const createContentTypes = async (contentTypes: any[]) => {\n const builder = createBuilder();\n const createdContentTypes: any[] = [];\n\n for (const contentType of contentTypes) {\n createdContentTypes.push(await createContentType(contentType, { defaultBuilder: builder }));\n }\n\n await builder.writeFiles();\n\n return createdContentTypes;\n};\n\ntype CreateContentTypeOptions = {\n defaultBuilder?: any; // TODO\n};\n\n/**\n * Creates a content type and handle the nested components sent with it\n */\nexport const createContentType = async (\n { contentType, components }: any,\n options: CreateContentTypeOptions = {}\n) => {\n const builder = options.defaultBuilder || createBuilder();\n const uidMap = builder.createNewComponentUIDMap(components || []);\n\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newContentType = builder.createContentType(replaceTmpUIDs(contentType));\n\n // allow components to target the new contentType\n const targetContentType = (infos: any) => {\n Object.keys(infos.attributes).forEach((key) => {\n const { target } = infos.attributes[key];\n if (target === '__contentType__') {\n infos.attributes[key].target = newContentType.uid;\n }\n });\n\n return infos;\n };\n\n components?.forEach((component: any) => {\n const options = replaceTmpUIDs(targetContentType(component));\n\n if (!_.has(component, 'uid')) {\n return builder.createComponent(options);\n }\n\n return builder.editComponent(options);\n });\n\n // generate api skeleton\n await generateAPI({\n displayName: contentType!.displayName || contentType!.info.displayName,\n singularName: contentType!.singularName,\n pluralName: contentType!.pluralName,\n kind: contentType!.kind,\n });\n\n if (!options.defaultBuilder) {\n await builder.writeFiles();\n }\n\n strapi.eventHub.emit('content-type.create', { contentType: newContentType });\n\n return newContentType;\n};\n\n/**\n * Generate an API skeleton\n */\nexport const generateAPI = ({\n singularName,\n kind = 'collectionType',\n pluralName,\n displayName,\n}: any) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const strapiGenerators = require('@strapi/generators');\n return strapiGenerators.generate(\n 'content-type',\n {\n kind,\n singularName,\n id: singularName,\n pluralName,\n displayName,\n destination: 'new',\n bootstrapApi: true,\n attributes: [],\n },\n { dir: strapi.dirs.app.root }\n );\n};\n\n/**\n * Edits a contentType and handle the nested contentTypes sent with it\n */\nexport const editContentType = async (\n uid: UID.ContentType,\n { contentType, components = [] }: any\n) => {\n const builder = createBuilder();\n\n const previousSchema = builder.contentTypes.get(uid).schema;\n const previousKind = previousSchema.kind;\n const newKind = contentType.kind || previousKind;\n\n // Restore non-visible attributes from previous schema\n const previousAttributes = previousSchema.attributes;\n const prevNonVisibleAttributes = contentTypesUtils\n .getNonVisibleAttributes(previousSchema)\n .reduce((acc, key) => {\n if (key in previousAttributes) {\n acc[key] = previousAttributes[key];\n }\n\n return acc;\n }, {} as any);\n contentType.attributes = _.merge(prevNonVisibleAttributes, contentType.attributes);\n\n if (newKind !== previousKind && newKind === 'singleType') {\n const entryCount = await strapi.db.query(uid).count();\n if (entryCount > 1) {\n throw new ApplicationError(\n 'You cannot convert a collectionType to a singleType when having multiple entries in DB'\n );\n }\n }\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedContentType = builder.editContentType({\n uid,\n ...replaceTmpUIDs(contentType),\n });\n\n components.forEach((component: any) => {\n if (!_.has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n if (newKind !== previousKind) {\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n try {\n await apiHandler.clear(uid);\n\n // generate new api skeleton\n await generateAPI({\n displayName: updatedContentType.schema.info.displayName,\n singularName: updatedContentType.schema.info.singularName,\n pluralName: updatedContentType.schema.info.pluralName,\n kind: updatedContentType.schema.kind,\n });\n\n await builder.writeFiles();\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n\n return updatedContentType;\n }\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('content-type.update', { contentType: updatedContentType });\n\n return updatedContentType;\n};\n\nexport const deleteContentTypes = async (uids: UID.ContentType[]) => {\n const builder = createBuilder();\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n\n for (const uid of uids) {\n await deleteContentType(uid, builder);\n }\n\n await builder.writeFiles();\n for (const uid of uids) {\n try {\n await apiHandler.clear(uid);\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n }\n};\n\n/**\n * Deletes a content type and the api files related to it\n */\nexport const deleteContentType = async (uid: UID.ContentType, defaultBuilder: any = undefined) => {\n const builder = defaultBuilder || createBuilder();\n // make a backup\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n const contentType = builder.deleteContentType(uid);\n\n if (!defaultBuilder) {\n try {\n await builder.writeFiles();\n await apiHandler.clear(uid);\n } catch (error) {\n await apiHandler.rollback(uid);\n }\n }\n\n strapi.eventHub.emit('content-type.delete', { contentType });\n\n return contentType;\n};\n"],"names":["ApplicationError","errors","isContentTypeVisible","model","getOr","getRestrictRelationsTo","contentType","uid","coreUids","STRAPI_USER","startsWith","PREFIX","pluginsUids","UPLOAD_FILE","formatContentType","kind","modelName","plugin","collectionName","info","apiID","schema","contentTypesUtils","getOptions","displayName","singularName","pluralName","description","_","get","pluginOptions","attributes","formatAttributes","visible","restrictRelationsTo","createContentTypes","contentTypes","builder","createBuilder","createdContentTypes","push","createContentType","defaultBuilder","writeFiles","components","options","uidMap","createNewComponentUIDMap","replaceTmpUIDs","replaceTemporaryUIDs","newContentType","targetContentType","infos","Object","keys","forEach","key","target","component","has","createComponent","editComponent","generateAPI","strapi","eventHub","emit","strapiGenerators","require","generate","id","destination","bootstrapApi","dir","dirs","app","root","editContentType","previousSchema","previousKind","newKind","previousAttributes","prevNonVisibleAttributes","getNonVisibleAttributes","reduce","acc","merge","entryCount","db","query","count","updatedContentType","apiHandler","service","backup","clear","error","log","rollback","deleteContentTypes","uids","deleteContentType","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"content-types.js","sources":["../../../server/src/services/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getOr } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils, errors } from '@strapi/utils';\nimport type { UID, Struct } from '@strapi/types';\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\nimport { coreUids, pluginsUids } from './constants';\n\nconst { ApplicationError } = errors;\n\nexport const isContentTypeVisible = (model: Struct.ContentTypeSchema) =>\n getOr(true, 'pluginOptions.content-type-builder.visible', model) === true;\n\nexport const getRestrictRelationsTo = (contentType: Struct.ContentTypeSchema) => {\n const { uid } = contentType;\n if (uid === coreUids.STRAPI_USER) {\n // TODO: replace with an obj { relation: 'x', bidirectional: true|false }\n return ['oneWay', 'manyWay'];\n }\n\n if (\n uid.startsWith(coreUids.PREFIX) ||\n uid === pluginsUids.UPLOAD_FILE ||\n !isContentTypeVisible(contentType)\n ) {\n return [];\n }\n\n return null;\n};\n\n/**\n * Format a contentType info to be used by the front-end\n */\nexport const formatContentType = (contentType: any) => {\n const { uid, kind, modelName, plugin, collectionName, info } = contentType;\n\n return {\n uid,\n plugin,\n apiID: modelName,\n schema: {\n ...contentTypesUtils.getOptions(contentType),\n displayName: info.displayName,\n singularName: info.singularName,\n pluralName: info.pluralName,\n description: _.get(info, 'description', ''),\n pluginOptions: contentType.pluginOptions,\n kind: kind || 'collectionType',\n collectionName,\n attributes: formatAttributes(contentType),\n visible: isContentTypeVisible(contentType),\n restrictRelationsTo: getRestrictRelationsTo(contentType),\n },\n };\n};\n\nexport const createContentTypes = async (contentTypes: any[]) => {\n const builder = createBuilder();\n const createdContentTypes: any[] = [];\n\n for (const contentType of contentTypes) {\n createdContentTypes.push(await createContentType(contentType, { defaultBuilder: builder }));\n }\n\n await builder.writeFiles();\n\n return createdContentTypes;\n};\n\ntype CreateContentTypeOptions = {\n defaultBuilder?: any; // TODO\n};\n\n/**\n * Creates a content type and handle the nested components sent with it\n */\nexport const createContentType = async (\n { contentType, components }: any,\n options: CreateContentTypeOptions = {}\n) => {\n const builder = options.defaultBuilder || createBuilder();\n const uidMap = builder.createNewComponentUIDMap(components || []);\n\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newContentType = builder.createContentType(replaceTmpUIDs(contentType));\n\n // allow components to target the new contentType\n const targetContentType = (infos: any) => {\n Object.keys(infos.attributes).forEach((key) => {\n const { target } = infos.attributes[key];\n if (target === '__contentType__') {\n infos.attributes[key].target = newContentType.uid;\n }\n });\n\n return infos;\n };\n\n components?.forEach((component: any) => {\n const options = replaceTmpUIDs(targetContentType(component));\n\n if (!_.has(component, 'uid')) {\n return builder.createComponent(options);\n }\n\n return builder.editComponent(options);\n });\n\n // generate api skeleton\n await generateAPI({\n displayName: contentType!.displayName || contentType!.info.displayName,\n singularName: contentType!.singularName,\n pluralName: contentType!.pluralName,\n kind: contentType!.kind,\n });\n\n if (!options.defaultBuilder) {\n await builder.writeFiles();\n }\n\n strapi.eventHub.emit('content-type.create', { contentType: newContentType });\n\n return newContentType;\n};\n\n/**\n * Generate an API skeleton\n */\nexport const generateAPI = ({\n singularName,\n kind = 'collectionType',\n pluralName,\n displayName,\n}: any) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const strapiGenerators = require('@strapi/generators');\n return strapiGenerators.generate(\n 'content-type',\n {\n kind,\n singularName,\n id: singularName,\n pluralName,\n displayName,\n destination: 'new',\n bootstrapApi: true,\n attributes: [],\n },\n { dir: strapi.dirs.app.root }\n );\n};\n\n/**\n * Edits a contentType and handle the nested contentTypes sent with it\n */\nexport const editContentType = async (\n uid: UID.ContentType,\n { contentType, components = [] }: any\n) => {\n const builder = createBuilder();\n\n const previousSchema = builder.contentTypes.get(uid).schema;\n const previousKind = previousSchema.kind;\n const newKind = contentType.kind || previousKind;\n\n // Restore non-visible attributes from previous schema\n const previousAttributes = previousSchema.attributes;\n const prevNonVisibleAttributes = contentTypesUtils\n .getNonVisibleAttributes(previousSchema)\n .reduce((acc, key) => {\n if (key in previousAttributes) {\n acc[key] = previousAttributes[key];\n }\n\n return acc;\n }, {} as any);\n contentType.attributes = _.merge(prevNonVisibleAttributes, contentType.attributes);\n\n if (newKind !== previousKind && newKind === 'singleType') {\n const entryCount = await strapi.db.query(uid).count();\n if (entryCount > 1) {\n throw new ApplicationError(\n 'You cannot convert a collectionType to a singleType when having multiple entries in DB'\n );\n }\n }\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedContentType = builder.editContentType({\n uid,\n ...replaceTmpUIDs(contentType),\n });\n\n components.forEach((component: any) => {\n if (!_.has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n if (newKind !== previousKind) {\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n try {\n await apiHandler.clear(uid);\n\n // generate new api skeleton\n await generateAPI({\n displayName: updatedContentType.schema.info.displayName,\n singularName: updatedContentType.schema.info.singularName,\n pluralName: updatedContentType.schema.info.pluralName,\n kind: updatedContentType.schema.kind,\n });\n\n await builder.writeFiles();\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n\n return updatedContentType;\n }\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('content-type.update', { contentType: updatedContentType });\n\n return updatedContentType;\n};\n\nexport const deleteContentTypes = async (uids: UID.ContentType[]) => {\n const builder = createBuilder();\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n\n for (const uid of uids) {\n await deleteContentType(uid, builder);\n }\n\n await builder.writeFiles();\n for (const uid of uids) {\n try {\n await apiHandler.clear(uid);\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n }\n};\n\n/**\n * Deletes a content type and the api files related to it\n */\nexport const deleteContentType = async (uid: UID.ContentType, defaultBuilder: any = undefined) => {\n const builder = defaultBuilder || createBuilder();\n // make a backup\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n const contentType = builder.deleteContentType(uid);\n\n if (!defaultBuilder) {\n try {\n await builder.writeFiles();\n await apiHandler.clear(uid);\n } catch (error) {\n await apiHandler.rollback(uid);\n }\n }\n\n strapi.eventHub.emit('content-type.delete', { contentType });\n\n return contentType;\n};\n"],"names":["ApplicationError","errors","isContentTypeVisible","model","getOr","getRestrictRelationsTo","contentType","uid","coreUids","STRAPI_USER","startsWith","PREFIX","pluginsUids","UPLOAD_FILE","formatContentType","kind","modelName","plugin","collectionName","info","apiID","schema","contentTypesUtils","getOptions","displayName","singularName","pluralName","description","_","get","pluginOptions","attributes","formatAttributes","visible","restrictRelationsTo","createContentTypes","contentTypes","builder","createBuilder","createdContentTypes","push","createContentType","defaultBuilder","writeFiles","components","options","uidMap","createNewComponentUIDMap","replaceTmpUIDs","replaceTemporaryUIDs","newContentType","targetContentType","infos","Object","keys","forEach","key","target","component","has","createComponent","editComponent","generateAPI","strapi","eventHub","emit","strapiGenerators","require","generate","id","destination","bootstrapApi","dir","dirs","app","root","editContentType","previousSchema","previousKind","newKind","previousAttributes","prevNonVisibleAttributes","getNonVisibleAttributes","reduce","acc","merge","entryCount","db","query","count","updatedContentType","apiHandler","service","backup","clear","error","log","rollback","deleteContentTypes","uids","deleteContentType","undefined"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import _ from 'lodash';
2
2
  import { getOr } from 'lodash/fp';
3
- import { contentTypes, errors } from '@strapi/utils';
3
+ import { errors, contentTypes } from '@strapi/utils';
4
4
  import { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes.mjs';
5
5
  import createBuilder from './schema-builder/index.mjs';
6
6
  import { coreUids, pluginsUids } from './constants.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"content-types.mjs","sources":["../../../server/src/services/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getOr } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils, errors } from '@strapi/utils';\nimport type { UID, Struct } from '@strapi/types';\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\nimport { coreUids, pluginsUids } from './constants';\n\nconst { ApplicationError } = errors;\n\nexport const isContentTypeVisible = (model: Struct.ContentTypeSchema) =>\n getOr(true, 'pluginOptions.content-type-builder.visible', model) === true;\n\nexport const getRestrictRelationsTo = (contentType: Struct.ContentTypeSchema) => {\n const { uid } = contentType;\n if (uid === coreUids.STRAPI_USER) {\n // TODO: replace with an obj { relation: 'x', bidirectional: true|false }\n return ['oneWay', 'manyWay'];\n }\n\n if (\n uid.startsWith(coreUids.PREFIX) ||\n uid === pluginsUids.UPLOAD_FILE ||\n !isContentTypeVisible(contentType)\n ) {\n return [];\n }\n\n return null;\n};\n\n/**\n * Format a contentType info to be used by the front-end\n */\nexport const formatContentType = (contentType: any) => {\n const { uid, kind, modelName, plugin, collectionName, info } = contentType;\n\n return {\n uid,\n plugin,\n apiID: modelName,\n schema: {\n ...contentTypesUtils.getOptions(contentType),\n displayName: info.displayName,\n singularName: info.singularName,\n pluralName: info.pluralName,\n description: _.get(info, 'description', ''),\n pluginOptions: contentType.pluginOptions,\n kind: kind || 'collectionType',\n collectionName,\n attributes: formatAttributes(contentType),\n visible: isContentTypeVisible(contentType),\n restrictRelationsTo: getRestrictRelationsTo(contentType),\n },\n };\n};\n\nexport const createContentTypes = async (contentTypes: any[]) => {\n const builder = createBuilder();\n const createdContentTypes: any[] = [];\n\n for (const contentType of contentTypes) {\n createdContentTypes.push(await createContentType(contentType, { defaultBuilder: builder }));\n }\n\n await builder.writeFiles();\n\n return createdContentTypes;\n};\n\ntype CreateContentTypeOptions = {\n defaultBuilder?: any; // TODO\n};\n\n/**\n * Creates a content type and handle the nested components sent with it\n */\nexport const createContentType = async (\n { contentType, components }: any,\n options: CreateContentTypeOptions = {}\n) => {\n const builder = options.defaultBuilder || createBuilder();\n const uidMap = builder.createNewComponentUIDMap(components || []);\n\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newContentType = builder.createContentType(replaceTmpUIDs(contentType));\n\n // allow components to target the new contentType\n const targetContentType = (infos: any) => {\n Object.keys(infos.attributes).forEach((key) => {\n const { target } = infos.attributes[key];\n if (target === '__contentType__') {\n infos.attributes[key].target = newContentType.uid;\n }\n });\n\n return infos;\n };\n\n components?.forEach((component: any) => {\n const options = replaceTmpUIDs(targetContentType(component));\n\n if (!_.has(component, 'uid')) {\n return builder.createComponent(options);\n }\n\n return builder.editComponent(options);\n });\n\n // generate api skeleton\n await generateAPI({\n displayName: contentType!.displayName || contentType!.info.displayName,\n singularName: contentType!.singularName,\n pluralName: contentType!.pluralName,\n kind: contentType!.kind,\n });\n\n if (!options.defaultBuilder) {\n await builder.writeFiles();\n }\n\n strapi.eventHub.emit('content-type.create', { contentType: newContentType });\n\n return newContentType;\n};\n\n/**\n * Generate an API skeleton\n */\nexport const generateAPI = ({\n singularName,\n kind = 'collectionType',\n pluralName,\n displayName,\n}: any) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const strapiGenerators = require('@strapi/generators');\n return strapiGenerators.generate(\n 'content-type',\n {\n kind,\n singularName,\n id: singularName,\n pluralName,\n displayName,\n destination: 'new',\n bootstrapApi: true,\n attributes: [],\n },\n { dir: strapi.dirs.app.root }\n );\n};\n\n/**\n * Edits a contentType and handle the nested contentTypes sent with it\n */\nexport const editContentType = async (\n uid: UID.ContentType,\n { contentType, components = [] }: any\n) => {\n const builder = createBuilder();\n\n const previousSchema = builder.contentTypes.get(uid).schema;\n const previousKind = previousSchema.kind;\n const newKind = contentType.kind || previousKind;\n\n // Restore non-visible attributes from previous schema\n const previousAttributes = previousSchema.attributes;\n const prevNonVisibleAttributes = contentTypesUtils\n .getNonVisibleAttributes(previousSchema)\n .reduce((acc, key) => {\n if (key in previousAttributes) {\n acc[key] = previousAttributes[key];\n }\n\n return acc;\n }, {} as any);\n contentType.attributes = _.merge(prevNonVisibleAttributes, contentType.attributes);\n\n if (newKind !== previousKind && newKind === 'singleType') {\n const entryCount = await strapi.db.query(uid).count();\n if (entryCount > 1) {\n throw new ApplicationError(\n 'You cannot convert a collectionType to a singleType when having multiple entries in DB'\n );\n }\n }\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedContentType = builder.editContentType({\n uid,\n ...replaceTmpUIDs(contentType),\n });\n\n components.forEach((component: any) => {\n if (!_.has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n if (newKind !== previousKind) {\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n try {\n await apiHandler.clear(uid);\n\n // generate new api skeleton\n await generateAPI({\n displayName: updatedContentType.schema.info.displayName,\n singularName: updatedContentType.schema.info.singularName,\n pluralName: updatedContentType.schema.info.pluralName,\n kind: updatedContentType.schema.kind,\n });\n\n await builder.writeFiles();\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n\n return updatedContentType;\n }\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('content-type.update', { contentType: updatedContentType });\n\n return updatedContentType;\n};\n\nexport const deleteContentTypes = async (uids: UID.ContentType[]) => {\n const builder = createBuilder();\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n\n for (const uid of uids) {\n await deleteContentType(uid, builder);\n }\n\n await builder.writeFiles();\n for (const uid of uids) {\n try {\n await apiHandler.clear(uid);\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n }\n};\n\n/**\n * Deletes a content type and the api files related to it\n */\nexport const deleteContentType = async (uid: UID.ContentType, defaultBuilder: any = undefined) => {\n const builder = defaultBuilder || createBuilder();\n // make a backup\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n const contentType = builder.deleteContentType(uid);\n\n if (!defaultBuilder) {\n try {\n await builder.writeFiles();\n await apiHandler.clear(uid);\n } catch (error) {\n await apiHandler.rollback(uid);\n }\n }\n\n strapi.eventHub.emit('content-type.delete', { contentType });\n\n return contentType;\n};\n"],"names":["ApplicationError","errors","isContentTypeVisible","model","getOr","getRestrictRelationsTo","contentType","uid","coreUids","STRAPI_USER","startsWith","PREFIX","pluginsUids","UPLOAD_FILE","formatContentType","kind","modelName","plugin","collectionName","info","apiID","schema","contentTypesUtils","getOptions","displayName","singularName","pluralName","description","_","get","pluginOptions","attributes","formatAttributes","visible","restrictRelationsTo","createContentTypes","contentTypes","builder","createBuilder","createdContentTypes","push","createContentType","defaultBuilder","writeFiles","components","options","uidMap","createNewComponentUIDMap","replaceTmpUIDs","replaceTemporaryUIDs","newContentType","targetContentType","infos","Object","keys","forEach","key","target","component","has","createComponent","editComponent","generateAPI","strapi","eventHub","emit","strapiGenerators","require","generate","id","destination","bootstrapApi","dir","dirs","app","root","editContentType","previousSchema","previousKind","newKind","previousAttributes","prevNonVisibleAttributes","getNonVisibleAttributes","reduce","acc","merge","entryCount","db","query","count","updatedContentType","apiHandler","service","backup","clear","error","log","rollback","deleteContentTypes","uids","deleteContentType","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"content-types.mjs","sources":["../../../server/src/services/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { getOr } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils, errors } from '@strapi/utils';\nimport type { UID, Struct } from '@strapi/types';\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\nimport { coreUids, pluginsUids } from './constants';\n\nconst { ApplicationError } = errors;\n\nexport const isContentTypeVisible = (model: Struct.ContentTypeSchema) =>\n getOr(true, 'pluginOptions.content-type-builder.visible', model) === true;\n\nexport const getRestrictRelationsTo = (contentType: Struct.ContentTypeSchema) => {\n const { uid } = contentType;\n if (uid === coreUids.STRAPI_USER) {\n // TODO: replace with an obj { relation: 'x', bidirectional: true|false }\n return ['oneWay', 'manyWay'];\n }\n\n if (\n uid.startsWith(coreUids.PREFIX) ||\n uid === pluginsUids.UPLOAD_FILE ||\n !isContentTypeVisible(contentType)\n ) {\n return [];\n }\n\n return null;\n};\n\n/**\n * Format a contentType info to be used by the front-end\n */\nexport const formatContentType = (contentType: any) => {\n const { uid, kind, modelName, plugin, collectionName, info } = contentType;\n\n return {\n uid,\n plugin,\n apiID: modelName,\n schema: {\n ...contentTypesUtils.getOptions(contentType),\n displayName: info.displayName,\n singularName: info.singularName,\n pluralName: info.pluralName,\n description: _.get(info, 'description', ''),\n pluginOptions: contentType.pluginOptions,\n kind: kind || 'collectionType',\n collectionName,\n attributes: formatAttributes(contentType),\n visible: isContentTypeVisible(contentType),\n restrictRelationsTo: getRestrictRelationsTo(contentType),\n },\n };\n};\n\nexport const createContentTypes = async (contentTypes: any[]) => {\n const builder = createBuilder();\n const createdContentTypes: any[] = [];\n\n for (const contentType of contentTypes) {\n createdContentTypes.push(await createContentType(contentType, { defaultBuilder: builder }));\n }\n\n await builder.writeFiles();\n\n return createdContentTypes;\n};\n\ntype CreateContentTypeOptions = {\n defaultBuilder?: any; // TODO\n};\n\n/**\n * Creates a content type and handle the nested components sent with it\n */\nexport const createContentType = async (\n { contentType, components }: any,\n options: CreateContentTypeOptions = {}\n) => {\n const builder = options.defaultBuilder || createBuilder();\n const uidMap = builder.createNewComponentUIDMap(components || []);\n\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newContentType = builder.createContentType(replaceTmpUIDs(contentType));\n\n // allow components to target the new contentType\n const targetContentType = (infos: any) => {\n Object.keys(infos.attributes).forEach((key) => {\n const { target } = infos.attributes[key];\n if (target === '__contentType__') {\n infos.attributes[key].target = newContentType.uid;\n }\n });\n\n return infos;\n };\n\n components?.forEach((component: any) => {\n const options = replaceTmpUIDs(targetContentType(component));\n\n if (!_.has(component, 'uid')) {\n return builder.createComponent(options);\n }\n\n return builder.editComponent(options);\n });\n\n // generate api skeleton\n await generateAPI({\n displayName: contentType!.displayName || contentType!.info.displayName,\n singularName: contentType!.singularName,\n pluralName: contentType!.pluralName,\n kind: contentType!.kind,\n });\n\n if (!options.defaultBuilder) {\n await builder.writeFiles();\n }\n\n strapi.eventHub.emit('content-type.create', { contentType: newContentType });\n\n return newContentType;\n};\n\n/**\n * Generate an API skeleton\n */\nexport const generateAPI = ({\n singularName,\n kind = 'collectionType',\n pluralName,\n displayName,\n}: any) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const strapiGenerators = require('@strapi/generators');\n return strapiGenerators.generate(\n 'content-type',\n {\n kind,\n singularName,\n id: singularName,\n pluralName,\n displayName,\n destination: 'new',\n bootstrapApi: true,\n attributes: [],\n },\n { dir: strapi.dirs.app.root }\n );\n};\n\n/**\n * Edits a contentType and handle the nested contentTypes sent with it\n */\nexport const editContentType = async (\n uid: UID.ContentType,\n { contentType, components = [] }: any\n) => {\n const builder = createBuilder();\n\n const previousSchema = builder.contentTypes.get(uid).schema;\n const previousKind = previousSchema.kind;\n const newKind = contentType.kind || previousKind;\n\n // Restore non-visible attributes from previous schema\n const previousAttributes = previousSchema.attributes;\n const prevNonVisibleAttributes = contentTypesUtils\n .getNonVisibleAttributes(previousSchema)\n .reduce((acc, key) => {\n if (key in previousAttributes) {\n acc[key] = previousAttributes[key];\n }\n\n return acc;\n }, {} as any);\n contentType.attributes = _.merge(prevNonVisibleAttributes, contentType.attributes);\n\n if (newKind !== previousKind && newKind === 'singleType') {\n const entryCount = await strapi.db.query(uid).count();\n if (entryCount > 1) {\n throw new ApplicationError(\n 'You cannot convert a collectionType to a singleType when having multiple entries in DB'\n );\n }\n }\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedContentType = builder.editContentType({\n uid,\n ...replaceTmpUIDs(contentType),\n });\n\n components.forEach((component: any) => {\n if (!_.has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n if (newKind !== previousKind) {\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n try {\n await apiHandler.clear(uid);\n\n // generate new api skeleton\n await generateAPI({\n displayName: updatedContentType.schema.info.displayName,\n singularName: updatedContentType.schema.info.singularName,\n pluralName: updatedContentType.schema.info.pluralName,\n kind: updatedContentType.schema.kind,\n });\n\n await builder.writeFiles();\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n\n return updatedContentType;\n }\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('content-type.update', { contentType: updatedContentType });\n\n return updatedContentType;\n};\n\nexport const deleteContentTypes = async (uids: UID.ContentType[]) => {\n const builder = createBuilder();\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n\n for (const uid of uids) {\n await deleteContentType(uid, builder);\n }\n\n await builder.writeFiles();\n for (const uid of uids) {\n try {\n await apiHandler.clear(uid);\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n }\n};\n\n/**\n * Deletes a content type and the api files related to it\n */\nexport const deleteContentType = async (uid: UID.ContentType, defaultBuilder: any = undefined) => {\n const builder = defaultBuilder || createBuilder();\n // make a backup\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n const contentType = builder.deleteContentType(uid);\n\n if (!defaultBuilder) {\n try {\n await builder.writeFiles();\n await apiHandler.clear(uid);\n } catch (error) {\n await apiHandler.rollback(uid);\n }\n }\n\n strapi.eventHub.emit('content-type.delete', { contentType });\n\n return contentType;\n};\n"],"names":["ApplicationError","errors","isContentTypeVisible","model","getOr","getRestrictRelationsTo","contentType","uid","coreUids","STRAPI_USER","startsWith","PREFIX","pluginsUids","UPLOAD_FILE","formatContentType","kind","modelName","plugin","collectionName","info","apiID","schema","contentTypesUtils","getOptions","displayName","singularName","pluralName","description","_","get","pluginOptions","attributes","formatAttributes","visible","restrictRelationsTo","createContentTypes","contentTypes","builder","createBuilder","createdContentTypes","push","createContentType","defaultBuilder","writeFiles","components","options","uidMap","createNewComponentUIDMap","replaceTmpUIDs","replaceTemporaryUIDs","newContentType","targetContentType","infos","Object","keys","forEach","key","target","component","has","createComponent","editComponent","generateAPI","strapi","eventHub","emit","strapiGenerators","require","generate","id","destination","bootstrapApi","dir","dirs","app","root","editContentType","previousSchema","previousKind","newKind","previousAttributes","prevNonVisibleAttributes","getNonVisibleAttributes","reduce","acc","merge","entryCount","db","query","count","updatedContentType","apiHandler","service","backup","clear","error","log","rollback","deleteContentTypes","uids","deleteContentType","undefined"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import * as contentTypes from './content-types';\nimport * as components from './components';\nimport * as componentCategories from './component-categories';\nimport * as builder from './builder';\nimport * as apiHandler from './api-handler';\nimport * as schema from './schema';\n\nexport default {\n 'content-types': contentTypes,\n components,\n 'component-categories': componentCategories,\n builder,\n 'api-handler': apiHandler,\n schema,\n};\n"],"names":["contentTypes","components","componentCategories","builder","apiHandler","schema"],"mappings":";;;;;;;;;AAOA,eAAe;IACb,eAAiBA,EAAAA,YAAAA;AACjBC,IAAAA,UAAAA;IACA,sBAAwBC,EAAAA,mBAAAA;AACxBC,IAAAA,OAAAA;IACA,aAAeC,EAAAA,UAAAA;AACfC,IAAAA;AACF,CAAE;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import * as contentTypes from './content-types';\nimport * as components from './components';\nimport * as componentCategories from './component-categories';\nimport * as builder from './builder';\nimport * as apiHandler from './api-handler';\nimport * as schema from './schema';\n\nexport default {\n 'content-types': contentTypes,\n components,\n 'component-categories': componentCategories,\n builder,\n 'api-handler': apiHandler,\n schema,\n};\n"],"names":["contentTypes","components","componentCategories","builder","apiHandler","schema"],"mappings":";;;;;;;;;AAOA,eAAe;IACb,eAAA,EAAiBA,YAAAA;AACjBC,IAAAA,UAAAA;IACA,sBAAA,EAAwBC,mBAAAA;AACxBC,IAAAA,OAAAA;IACA,aAAA,EAAeC,UAAAA;AACfC,IAAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import * as contentTypes from './content-types';\nimport * as components from './components';\nimport * as componentCategories from './component-categories';\nimport * as builder from './builder';\nimport * as apiHandler from './api-handler';\nimport * as schema from './schema';\n\nexport default {\n 'content-types': contentTypes,\n components,\n 'component-categories': componentCategories,\n builder,\n 'api-handler': apiHandler,\n schema,\n};\n"],"names":["contentTypes","components","componentCategories","builder","apiHandler","schema"],"mappings":";;;;;;;AAOA,eAAe;IACb,eAAiBA,EAAAA,YAAAA;AACjBC,IAAAA,UAAAA;IACA,sBAAwBC,EAAAA,mBAAAA;AACxBC,IAAAA,OAAAA;IACA,aAAeC,EAAAA,UAAAA;AACfC,IAAAA;AACF,CAAE;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import * as contentTypes from './content-types';\nimport * as components from './components';\nimport * as componentCategories from './component-categories';\nimport * as builder from './builder';\nimport * as apiHandler from './api-handler';\nimport * as schema from './schema';\n\nexport default {\n 'content-types': contentTypes,\n components,\n 'component-categories': componentCategories,\n builder,\n 'api-handler': apiHandler,\n schema,\n};\n"],"names":["contentTypes","components","componentCategories","builder","apiHandler","schema"],"mappings":";;;;;;;AAOA,eAAe;IACb,eAAA,EAAiBA,YAAAA;AACjBC,IAAAA,UAAAA;IACA,sBAAA,EAAwBC,mBAAAA;AACxBC,IAAAA,OAAAA;IACA,aAAA,EAAeC,UAAAA;AACfC,IAAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"component-builder.js","sources":["../../../../server/src/services/schema-builder/component-builder.ts"],"sourcesContent":["import path from 'path';\nimport type { Internal } from '@strapi/types';\nimport _ from 'lodash';\nimport pluralize from 'pluralize';\n\nimport { strings, errors } from '@strapi/utils';\nimport { isConfigurable } from '../../utils/attributes';\nimport createSchemaHandler from './schema-handler';\n\nconst { ApplicationError } = errors;\n\nexport default function createComponentBuilder() {\n return {\n createComponentUID({ category, displayName }: any) {\n return `${strings.nameToSlug(category)}.${strings.nameToSlug(displayName)}`;\n },\n\n createNewComponentUIDMap(components: object[]) {\n return components.reduce((uidMap: any, component: any) => {\n uidMap[component.tmpUID] = this.createComponentUID(component);\n return uidMap;\n }, {});\n },\n\n createComponentAttributes(this: any, uid: string, attributes: any) {\n if (!this.components.has(uid)) {\n throw new ApplicationError('component.notFound');\n }\n\n return this.components.get(uid).setAttributes(this.convertAttributes(attributes));\n },\n\n /**\n * create a component in the tmpComponent map\n */\n createComponent(this: any, infos: any) {\n if (infos.uid && infos.uid !== this.createComponentUID(infos)) {\n throw new ApplicationError('component.invalidUID');\n }\n\n const uid = infos.uid ?? this.createComponentUID(infos);\n\n if (this.components.has(uid)) {\n throw new ApplicationError('component.alreadyExists');\n }\n\n const handler = createSchemaHandler({\n dir: path.join(strapi.dirs.app.components, strings.nameToSlug(infos.category)),\n filename: `${strings.nameToSlug(infos.displayName)}.json`,\n });\n\n // TODO: create a utility for this\n // Duplicate in admin/src/components/FormModal/forms/utils/createCollectionName.ts\n const collectionName = `components_${strings.nameToCollectionName(\n infos.category\n )}_${strings.nameToCollectionName(pluralize(infos.displayName))}`;\n\n this.components.forEach((compo: any) => {\n if (compo.schema.collectionName === collectionName) {\n throw new ApplicationError('component.alreadyExists');\n }\n });\n\n handler\n .setUID(uid)\n .set('collectionName', collectionName)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config);\n\n if (this.components.size === 0) {\n strapi.telemetry.send('didCreateFirstComponent');\n } else {\n strapi.telemetry.send('didCreateComponent');\n }\n\n this.components.set(uid, handler);\n\n this.createComponentAttributes(uid, infos.attributes);\n\n return handler;\n },\n\n /**\n * create a component in the tmpComponent map\n */\n editComponent(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n const component = this.components.get(uid);\n\n const [, nameUID] = uid.split('.');\n\n const newCategory = strings.nameToSlug(infos.category);\n const newUID = `${newCategory}.${nameUID}`;\n\n if (newUID !== uid && this.components.has(newUID)) {\n throw new errors.ApplicationError('component.edit.alreadyExists');\n }\n\n const newDir = path.join(strapi.dirs.app.components, newCategory);\n\n const oldAttributes = component.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n component\n .setUID(newUID)\n .setDir(newDir)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n if (newUID !== uid) {\n this.components.forEach((compo: any) => {\n compo.updateComponent(uid, newUID);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.updateComponent(uid, newUID);\n });\n }\n\n return component;\n },\n\n deleteComponent(this: any, uid: Internal.UID.Component) {\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeComponent(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeComponent(uid);\n });\n\n return this.components.get(uid).delete();\n },\n };\n}\n"],"names":["ApplicationError","errors","createComponentBuilder","createComponentUID","category","displayName","strings","nameToSlug","createNewComponentUIDMap","components","reduce","uidMap","component","tmpUID","createComponentAttributes","uid","attributes","has","get","setAttributes","convertAttributes","createComponent","infos","handler","createSchemaHandler","dir","path","join","strapi","dirs","app","filename","collectionName","nameToCollectionName","pluralize","forEach","compo","schema","setUID","set","icon","description","pluginOptions","config","size","telemetry","send","editComponent","nameUID","split","newCategory","newUID","newDir","oldAttributes","newAttributes","_","omitBy","attr","key","isConfigurable","setDir","updateComponent","contentTypes","ct","deleteComponent","removeComponent","delete"],"mappings":"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"}
1
+ {"version":3,"file":"component-builder.js","sources":["../../../../server/src/services/schema-builder/component-builder.ts"],"sourcesContent":["import path from 'path';\nimport type { Internal } from '@strapi/types';\nimport _ from 'lodash';\nimport pluralize from 'pluralize';\n\nimport { strings, errors } from '@strapi/utils';\nimport { isConfigurable } from '../../utils/attributes';\nimport createSchemaHandler from './schema-handler';\n\nconst { ApplicationError } = errors;\n\nexport default function createComponentBuilder() {\n return {\n createComponentUID({ category, displayName }: any) {\n return `${strings.nameToSlug(category)}.${strings.nameToSlug(displayName)}`;\n },\n\n createNewComponentUIDMap(components: object[]) {\n return components.reduce((uidMap: any, component: any) => {\n uidMap[component.tmpUID] = this.createComponentUID(component);\n return uidMap;\n }, {});\n },\n\n createComponentAttributes(this: any, uid: string, attributes: any) {\n if (!this.components.has(uid)) {\n throw new ApplicationError('component.notFound');\n }\n\n return this.components.get(uid).setAttributes(this.convertAttributes(attributes));\n },\n\n /**\n * create a component in the tmpComponent map\n */\n createComponent(this: any, infos: any) {\n if (infos.uid && infos.uid !== this.createComponentUID(infos)) {\n throw new ApplicationError('component.invalidUID');\n }\n\n const uid = infos.uid ?? this.createComponentUID(infos);\n\n if (this.components.has(uid)) {\n throw new ApplicationError('component.alreadyExists');\n }\n\n const handler = createSchemaHandler({\n dir: path.join(strapi.dirs.app.components, strings.nameToSlug(infos.category)),\n filename: `${strings.nameToSlug(infos.displayName)}.json`,\n });\n\n // TODO: create a utility for this\n // Duplicate in admin/src/components/FormModal/forms/utils/createCollectionName.ts\n const collectionName = `components_${strings.nameToCollectionName(\n infos.category\n )}_${strings.nameToCollectionName(pluralize(infos.displayName))}`;\n\n this.components.forEach((compo: any) => {\n if (compo.schema.collectionName === collectionName) {\n throw new ApplicationError('component.alreadyExists');\n }\n });\n\n handler\n .setUID(uid)\n .set('collectionName', collectionName)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config);\n\n if (this.components.size === 0) {\n strapi.telemetry.send('didCreateFirstComponent');\n } else {\n strapi.telemetry.send('didCreateComponent');\n }\n\n this.components.set(uid, handler);\n\n this.createComponentAttributes(uid, infos.attributes);\n\n return handler;\n },\n\n /**\n * create a component in the tmpComponent map\n */\n editComponent(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n const component = this.components.get(uid);\n\n const [, nameUID] = uid.split('.');\n\n const newCategory = strings.nameToSlug(infos.category);\n const newUID = `${newCategory}.${nameUID}`;\n\n if (newUID !== uid && this.components.has(newUID)) {\n throw new errors.ApplicationError('component.edit.alreadyExists');\n }\n\n const newDir = path.join(strapi.dirs.app.components, newCategory);\n\n const oldAttributes = component.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n component\n .setUID(newUID)\n .setDir(newDir)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n if (newUID !== uid) {\n this.components.forEach((compo: any) => {\n compo.updateComponent(uid, newUID);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.updateComponent(uid, newUID);\n });\n }\n\n return component;\n },\n\n deleteComponent(this: any, uid: Internal.UID.Component) {\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeComponent(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeComponent(uid);\n });\n\n return this.components.get(uid).delete();\n },\n };\n}\n"],"names":["ApplicationError","errors","createComponentBuilder","createComponentUID","category","displayName","strings","nameToSlug","createNewComponentUIDMap","components","reduce","uidMap","component","tmpUID","createComponentAttributes","uid","attributes","has","get","setAttributes","convertAttributes","createComponent","infos","handler","createSchemaHandler","dir","path","join","strapi","dirs","app","filename","collectionName","nameToCollectionName","pluralize","forEach","compo","schema","setUID","set","icon","description","pluginOptions","config","size","telemetry","send","editComponent","nameUID","split","newCategory","newUID","newDir","oldAttributes","newAttributes","_","omitBy","attr","key","isConfigurable","setDir","updateComponent","contentTypes","ct","deleteComponent","removeComponent","delete"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import path__default from 'path';
2
2
  import _ from 'lodash';
3
3
  import pluralize from 'pluralize';
4
- import { strings, errors } from '@strapi/utils';
4
+ import { errors, strings } from '@strapi/utils';
5
5
  import { isConfigurable } from '../../utils/attributes.mjs';
6
6
  import createSchemaHandler from './schema-handler.mjs';
7
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"component-builder.mjs","sources":["../../../../server/src/services/schema-builder/component-builder.ts"],"sourcesContent":["import path from 'path';\nimport type { Internal } from '@strapi/types';\nimport _ from 'lodash';\nimport pluralize from 'pluralize';\n\nimport { strings, errors } from '@strapi/utils';\nimport { isConfigurable } from '../../utils/attributes';\nimport createSchemaHandler from './schema-handler';\n\nconst { ApplicationError } = errors;\n\nexport default function createComponentBuilder() {\n return {\n createComponentUID({ category, displayName }: any) {\n return `${strings.nameToSlug(category)}.${strings.nameToSlug(displayName)}`;\n },\n\n createNewComponentUIDMap(components: object[]) {\n return components.reduce((uidMap: any, component: any) => {\n uidMap[component.tmpUID] = this.createComponentUID(component);\n return uidMap;\n }, {});\n },\n\n createComponentAttributes(this: any, uid: string, attributes: any) {\n if (!this.components.has(uid)) {\n throw new ApplicationError('component.notFound');\n }\n\n return this.components.get(uid).setAttributes(this.convertAttributes(attributes));\n },\n\n /**\n * create a component in the tmpComponent map\n */\n createComponent(this: any, infos: any) {\n if (infos.uid && infos.uid !== this.createComponentUID(infos)) {\n throw new ApplicationError('component.invalidUID');\n }\n\n const uid = infos.uid ?? this.createComponentUID(infos);\n\n if (this.components.has(uid)) {\n throw new ApplicationError('component.alreadyExists');\n }\n\n const handler = createSchemaHandler({\n dir: path.join(strapi.dirs.app.components, strings.nameToSlug(infos.category)),\n filename: `${strings.nameToSlug(infos.displayName)}.json`,\n });\n\n // TODO: create a utility for this\n // Duplicate in admin/src/components/FormModal/forms/utils/createCollectionName.ts\n const collectionName = `components_${strings.nameToCollectionName(\n infos.category\n )}_${strings.nameToCollectionName(pluralize(infos.displayName))}`;\n\n this.components.forEach((compo: any) => {\n if (compo.schema.collectionName === collectionName) {\n throw new ApplicationError('component.alreadyExists');\n }\n });\n\n handler\n .setUID(uid)\n .set('collectionName', collectionName)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config);\n\n if (this.components.size === 0) {\n strapi.telemetry.send('didCreateFirstComponent');\n } else {\n strapi.telemetry.send('didCreateComponent');\n }\n\n this.components.set(uid, handler);\n\n this.createComponentAttributes(uid, infos.attributes);\n\n return handler;\n },\n\n /**\n * create a component in the tmpComponent map\n */\n editComponent(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n const component = this.components.get(uid);\n\n const [, nameUID] = uid.split('.');\n\n const newCategory = strings.nameToSlug(infos.category);\n const newUID = `${newCategory}.${nameUID}`;\n\n if (newUID !== uid && this.components.has(newUID)) {\n throw new errors.ApplicationError('component.edit.alreadyExists');\n }\n\n const newDir = path.join(strapi.dirs.app.components, newCategory);\n\n const oldAttributes = component.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n component\n .setUID(newUID)\n .setDir(newDir)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n if (newUID !== uid) {\n this.components.forEach((compo: any) => {\n compo.updateComponent(uid, newUID);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.updateComponent(uid, newUID);\n });\n }\n\n return component;\n },\n\n deleteComponent(this: any, uid: Internal.UID.Component) {\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeComponent(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeComponent(uid);\n });\n\n return this.components.get(uid).delete();\n },\n };\n}\n"],"names":["ApplicationError","errors","createComponentBuilder","createComponentUID","category","displayName","strings","nameToSlug","createNewComponentUIDMap","components","reduce","uidMap","component","tmpUID","createComponentAttributes","uid","attributes","has","get","setAttributes","convertAttributes","createComponent","infos","handler","createSchemaHandler","dir","path","join","strapi","dirs","app","filename","collectionName","nameToCollectionName","pluralize","forEach","compo","schema","setUID","set","icon","description","pluginOptions","config","size","telemetry","send","editComponent","nameUID","split","newCategory","newUID","newDir","oldAttributes","newAttributes","_","omitBy","attr","key","isConfigurable","setDir","updateComponent","contentTypes","ct","deleteComponent","removeComponent","delete"],"mappings":"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"}
1
+ {"version":3,"file":"component-builder.mjs","sources":["../../../../server/src/services/schema-builder/component-builder.ts"],"sourcesContent":["import path from 'path';\nimport type { Internal } from '@strapi/types';\nimport _ from 'lodash';\nimport pluralize from 'pluralize';\n\nimport { strings, errors } from '@strapi/utils';\nimport { isConfigurable } from '../../utils/attributes';\nimport createSchemaHandler from './schema-handler';\n\nconst { ApplicationError } = errors;\n\nexport default function createComponentBuilder() {\n return {\n createComponentUID({ category, displayName }: any) {\n return `${strings.nameToSlug(category)}.${strings.nameToSlug(displayName)}`;\n },\n\n createNewComponentUIDMap(components: object[]) {\n return components.reduce((uidMap: any, component: any) => {\n uidMap[component.tmpUID] = this.createComponentUID(component);\n return uidMap;\n }, {});\n },\n\n createComponentAttributes(this: any, uid: string, attributes: any) {\n if (!this.components.has(uid)) {\n throw new ApplicationError('component.notFound');\n }\n\n return this.components.get(uid).setAttributes(this.convertAttributes(attributes));\n },\n\n /**\n * create a component in the tmpComponent map\n */\n createComponent(this: any, infos: any) {\n if (infos.uid && infos.uid !== this.createComponentUID(infos)) {\n throw new ApplicationError('component.invalidUID');\n }\n\n const uid = infos.uid ?? this.createComponentUID(infos);\n\n if (this.components.has(uid)) {\n throw new ApplicationError('component.alreadyExists');\n }\n\n const handler = createSchemaHandler({\n dir: path.join(strapi.dirs.app.components, strings.nameToSlug(infos.category)),\n filename: `${strings.nameToSlug(infos.displayName)}.json`,\n });\n\n // TODO: create a utility for this\n // Duplicate in admin/src/components/FormModal/forms/utils/createCollectionName.ts\n const collectionName = `components_${strings.nameToCollectionName(\n infos.category\n )}_${strings.nameToCollectionName(pluralize(infos.displayName))}`;\n\n this.components.forEach((compo: any) => {\n if (compo.schema.collectionName === collectionName) {\n throw new ApplicationError('component.alreadyExists');\n }\n });\n\n handler\n .setUID(uid)\n .set('collectionName', collectionName)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config);\n\n if (this.components.size === 0) {\n strapi.telemetry.send('didCreateFirstComponent');\n } else {\n strapi.telemetry.send('didCreateComponent');\n }\n\n this.components.set(uid, handler);\n\n this.createComponentAttributes(uid, infos.attributes);\n\n return handler;\n },\n\n /**\n * create a component in the tmpComponent map\n */\n editComponent(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n const component = this.components.get(uid);\n\n const [, nameUID] = uid.split('.');\n\n const newCategory = strings.nameToSlug(infos.category);\n const newUID = `${newCategory}.${nameUID}`;\n\n if (newUID !== uid && this.components.has(newUID)) {\n throw new errors.ApplicationError('component.edit.alreadyExists');\n }\n\n const newDir = path.join(strapi.dirs.app.components, newCategory);\n\n const oldAttributes = component.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n component\n .setUID(newUID)\n .setDir(newDir)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n if (newUID !== uid) {\n this.components.forEach((compo: any) => {\n compo.updateComponent(uid, newUID);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.updateComponent(uid, newUID);\n });\n }\n\n return component;\n },\n\n deleteComponent(this: any, uid: Internal.UID.Component) {\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeComponent(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeComponent(uid);\n });\n\n return this.components.get(uid).delete();\n },\n };\n}\n"],"names":["ApplicationError","errors","createComponentBuilder","createComponentUID","category","displayName","strings","nameToSlug","createNewComponentUIDMap","components","reduce","uidMap","component","tmpUID","createComponentAttributes","uid","attributes","has","get","setAttributes","convertAttributes","createComponent","infos","handler","createSchemaHandler","dir","path","join","strapi","dirs","app","filename","collectionName","nameToCollectionName","pluralize","forEach","compo","schema","setUID","set","icon","description","pluginOptions","config","size","telemetry","send","editComponent","nameUID","split","newCategory","newUID","newDir","oldAttributes","newAttributes","_","omitBy","attr","key","isConfigurable","setDir","updateComponent","contentTypes","ct","deleteComponent","removeComponent","delete"],"mappings":"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"}