@strapi/content-type-builder 5.37.1 → 5.38.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AIChat/Chat.js.map +1 -1
- package/dist/admin/components/AIChat/Chat.mjs +2 -2
- package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
- package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -1
- package/dist/admin/components/AIChat/FeedbackModal.mjs +1 -1
- package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.mjs +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Alert.js.map +1 -1
- package/dist/admin/components/AIChat/components/Alert.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/AnimatedBox.js.map +1 -1
- package/dist/admin/components/AIChat/components/AnimatedBox.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Base64Image.js.map +1 -1
- package/dist/admin/components/AIChat/components/Base64Image.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -1
- package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Dropzone.js +2 -6
- package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -1
- package/dist/admin/components/AIChat/components/Dropzone.mjs +3 -7
- package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -1
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/ImagePreview.js.map +1 -1
- package/dist/admin/components/AIChat/components/ImagePreview.mjs +1 -1
- package/dist/admin/components/AIChat/components/ImagePreview.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Input.js +1 -5
- package/dist/admin/components/AIChat/components/Input.js.map +1 -1
- package/dist/admin/components/AIChat/components/Input.mjs +4 -7
- package/dist/admin/components/AIChat/components/Input.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Marker.js.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Marker.mjs +2 -2
- package/dist/admin/components/AIChat/components/Messages/Marker.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.mjs +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/ResizableTextArea.js.map +1 -1
- package/dist/admin/components/AIChat/components/ResizableTextArea.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/SimpleMenu.js.map +1 -1
- package/dist/admin/components/AIChat/components/SimpleMenu.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/StepModal.js.map +1 -1
- package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/animations.js.map +1 -1
- package/dist/admin/components/AIChat/components/animations.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.js.map +1 -1
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/icons/StopIcon.js.map +1 -1
- package/dist/admin/components/AIChat/components/icons/StopIcon.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAttachments.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useAttachments.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useChatTitle.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useChatTitle.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useCodeUpload.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useFeedback.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useFeedback.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs.map +1 -1
- package/dist/admin/components/AIChat/hooks/useTranslations.js.map +1 -1
- package/dist/admin/components/AIChat/hooks/useTranslations.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/aiClient.js.map +1 -1
- package/dist/admin/components/AIChat/lib/aiClient.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/constants.js.map +1 -1
- package/dist/admin/components/AIChat/lib/constants.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/misc.js.map +1 -1
- package/dist/admin/components/AIChat/lib/misc.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
- package/dist/admin/components/AllowedTypesSelect.js.map +1 -1
- package/dist/admin/components/AllowedTypesSelect.mjs.map +1 -1
- package/dist/admin/components/ApplyConditionButton.js.map +1 -1
- package/dist/admin/components/ApplyConditionButton.mjs.map +1 -1
- package/dist/admin/components/AttributeIcon.js.map +1 -1
- package/dist/admin/components/AttributeIcon.mjs +1 -1
- package/dist/admin/components/AttributeIcon.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeList.js.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeList.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOption.js.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOption.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOptions.js.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOptions.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/CustomFieldOption.js.map +1 -1
- package/dist/admin/components/AttributeOptions/CustomFieldOption.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/CustomFieldsList.js.map +1 -1
- package/dist/admin/components/AttributeOptions/CustomFieldsList.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/EmptyAttributes.js.map +1 -1
- package/dist/admin/components/AttributeOptions/EmptyAttributes.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/OptionBoxWrapper.js.map +1 -1
- package/dist/admin/components/AttributeOptions/OptionBoxWrapper.mjs.map +1 -1
- package/dist/admin/components/AttributeRow.js.map +1 -1
- package/dist/admin/components/AttributeRow.mjs +1 -1
- package/dist/admin/components/AttributeRow.mjs.map +1 -1
- package/dist/admin/components/AutoReloadOverlayBlocker.js.map +1 -1
- package/dist/admin/components/AutoReloadOverlayBlocker.mjs.map +1 -1
- package/dist/admin/components/BooleanDefaultValueSelect.js.map +1 -1
- package/dist/admin/components/BooleanDefaultValueSelect.mjs.map +1 -1
- package/dist/admin/components/BooleanRadioGroup.js.map +1 -1
- package/dist/admin/components/BooleanRadioGroup.mjs.map +1 -1
- package/dist/admin/components/CTBSession/CTBSessionProvider.js.map +1 -1
- package/dist/admin/components/CTBSession/CTBSessionProvider.mjs.map +1 -1
- package/dist/admin/components/CTBSession/sessionContext.js.map +1 -1
- package/dist/admin/components/CTBSession/sessionContext.mjs.map +1 -1
- package/dist/admin/components/CTBSession/useCTBSession.js.map +1 -1
- package/dist/admin/components/CTBSession/useCTBSession.mjs.map +1 -1
- package/dist/admin/components/CTBSession/useCTBTracking.js.map +1 -1
- package/dist/admin/components/CTBSession/useCTBTracking.mjs.map +1 -1
- package/dist/admin/components/CheckboxWithNumberField.js.map +1 -1
- package/dist/admin/components/CheckboxWithNumberField.mjs.map +1 -1
- package/dist/admin/components/ComponentCard/ComponentCard.js.map +1 -1
- package/dist/admin/components/ComponentCard/ComponentCard.mjs +1 -1
- package/dist/admin/components/ComponentCard/ComponentCard.mjs.map +1 -1
- package/dist/admin/components/ComponentCard/ComponentIcon/ComponentIcon.js.map +1 -1
- package/dist/admin/components/ComponentCard/ComponentIcon/ComponentIcon.mjs.map +1 -1
- package/dist/admin/components/ComponentList.js.map +1 -1
- package/dist/admin/components/ComponentList.mjs.map +1 -1
- package/dist/admin/components/ComponentRow.js.map +1 -1
- package/dist/admin/components/ComponentRow.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +2 -2
- package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +1 -1
- package/dist/admin/components/ContentTypeRadioGroup.js.map +1 -1
- package/dist/admin/components/ContentTypeRadioGroup.mjs.map +1 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js.map +1 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs.map +1 -1
- package/dist/admin/components/CustomRadioGroup/Styles.js.map +1 -1
- package/dist/admin/components/CustomRadioGroup/Styles.mjs +1 -1
- package/dist/admin/components/CustomRadioGroup/Styles.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DataManager/undoRedo.js.map +1 -1
- package/dist/admin/components/DataManager/undoRedo.mjs.map +1 -1
- package/dist/admin/components/DataManager/useDataManager.js.map +1 -1
- package/dist/admin/components/DataManager/useDataManager.mjs.map +1 -1
- package/dist/admin/components/DataManager/useServerRestartWatcher.js.map +1 -1
- package/dist/admin/components/DataManager/useServerRestartWatcher.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveComponentsThatHaveComponents.js.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveComponentsThatHaveComponents.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveNestedComponents.js.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveNestedComponents.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.js.map +1 -1
- package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.mjs.map +1 -1
- package/dist/admin/components/DisplayedType.js.map +1 -1
- package/dist/admin/components/DisplayedType.mjs.map +1 -1
- package/dist/admin/components/DraftAndPublishToggle.js.map +1 -1
- package/dist/admin/components/DraftAndPublishToggle.mjs.map +1 -1
- package/dist/admin/components/DynamicZoneList.js.map +1 -1
- package/dist/admin/components/DynamicZoneList.mjs +1 -1
- package/dist/admin/components/DynamicZoneList.mjs.map +1 -1
- package/dist/admin/components/ExitPrompt.js.map +1 -1
- package/dist/admin/components/ExitPrompt.mjs.map +1 -1
- package/dist/admin/components/Footers.js.map +1 -1
- package/dist/admin/components/Footers.mjs +2 -2
- package/dist/admin/components/Footers.mjs.map +1 -1
- package/dist/admin/components/FormModal/FormModal.js.map +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/advancedForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/advancedForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/attributeOptions.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/attributeOptions.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/baseForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/baseForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/commonBaseForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/commonBaseForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/form.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/form.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/nameField.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/nameField.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/types.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/types.mjs +1 -1
- package/dist/admin/components/FormModal/attributes/types.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/componentField.js.map +1 -1
- package/dist/admin/components/FormModal/component/componentField.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/componentForm.js.map +1 -1
- package/dist/admin/components/FormModal/component/componentForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.js.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/contentTypeForm.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/contentTypeForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/dynamiczoneForm.js.map +1 -1
- package/dist/admin/components/FormModal/dynamiczoneForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
- package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/addItemsToFormSection.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/addItemsToFormSection.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.mjs.map +1 -1
- package/dist/admin/components/FormModal/reducer.js.map +1 -1
- package/dist/admin/components/FormModal/reducer.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/canEditContentType.js.map +1 -1
- package/dist/admin/components/FormModal/utils/canEditContentType.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/createUid.js.map +1 -1
- package/dist/admin/components/FormModal/utils/createUid.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.js.map +1 -1
- package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/getAttributesToDisplay.js.map +1 -1
- package/dist/admin/components/FormModal/utils/getAttributesToDisplay.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/getFormInputNames.js.map +1 -1
- package/dist/admin/components/FormModal/utils/getFormInputNames.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/relations.js.map +1 -1
- package/dist/admin/components/FormModal/utils/relations.mjs.map +1 -1
- package/dist/admin/components/FormModalEndActions.js.map +1 -1
- package/dist/admin/components/FormModalEndActions.mjs.map +1 -1
- package/dist/admin/components/FormModalHeader.js.map +1 -1
- package/dist/admin/components/FormModalHeader.mjs.map +1 -1
- package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.js.map +1 -1
- package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.mjs.map +1 -1
- package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js.map +1 -1
- package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs.map +1 -1
- package/dist/admin/components/FormModalNavigation/useFormModalNavigation.js.map +1 -1
- package/dist/admin/components/FormModalNavigation/useFormModalNavigation.mjs.map +1 -1
- package/dist/admin/components/FormModalSubHeader.js.map +1 -1
- package/dist/admin/components/FormModalSubHeader.mjs.map +1 -1
- package/dist/admin/components/GenericInputs.js +1 -5
- package/dist/admin/components/GenericInputs.js.map +1 -1
- package/dist/admin/components/GenericInputs.mjs +1 -5
- package/dist/admin/components/GenericInputs.mjs.map +1 -1
- package/dist/admin/components/IconPicker/IconPicker.js.map +1 -1
- package/dist/admin/components/IconPicker/IconPicker.mjs +1 -1
- package/dist/admin/components/IconPicker/IconPicker.mjs.map +1 -1
- package/dist/admin/components/IconPicker/constants.js.map +1 -1
- package/dist/admin/components/IconPicker/constants.mjs.map +1 -1
- package/dist/admin/components/List.js.map +1 -1
- package/dist/admin/components/List.mjs +1 -1
- package/dist/admin/components/List.mjs.map +1 -1
- package/dist/admin/components/PluralName.js.map +1 -1
- package/dist/admin/components/PluralName.mjs.map +1 -1
- package/dist/admin/components/Relation/Relation.js.map +1 -1
- package/dist/admin/components/Relation/Relation.mjs.map +1 -1
- package/dist/admin/components/Relation/RelationField/RelationField.js.map +1 -1
- package/dist/admin/components/Relation/RelationField/RelationField.mjs.map +1 -1
- package/dist/admin/components/Relation/RelationField/RelationTargetPicker/RelationTargetPicker.js.map +1 -1
- package/dist/admin/components/Relation/RelationField/RelationTargetPicker/RelationTargetPicker.mjs.map +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/Components.js.map +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/Components.mjs.map +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.js.map +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.mjs +1 -1
- package/dist/admin/components/Relation/RelationNaturePicker/RelationNaturePicker.mjs.map +1 -1
- package/dist/admin/components/SelectCategory.js.map +1 -1
- package/dist/admin/components/SelectCategory.mjs.map +1 -1
- package/dist/admin/components/SelectComponent.js.map +1 -1
- package/dist/admin/components/SelectComponent.mjs.map +1 -1
- package/dist/admin/components/SelectComponents.js.map +1 -1
- package/dist/admin/components/SelectComponents.mjs.map +1 -1
- package/dist/admin/components/SelectDateType.js.map +1 -1
- package/dist/admin/components/SelectDateType.mjs.map +1 -1
- package/dist/admin/components/SelectNumber.js.map +1 -1
- package/dist/admin/components/SelectNumber.mjs.map +1 -1
- package/dist/admin/components/SingularName.js.map +1 -1
- package/dist/admin/components/SingularName.mjs.map +1 -1
- package/dist/admin/components/Status.js.map +1 -1
- package/dist/admin/components/Status.mjs.map +1 -1
- package/dist/admin/components/TabForm.js.map +1 -1
- package/dist/admin/components/TabForm.mjs.map +1 -1
- package/dist/admin/components/TextareaEnum.js.map +1 -1
- package/dist/admin/components/TextareaEnum.mjs.map +1 -1
- package/dist/admin/constants.js.map +1 -1
- package/dist/admin/constants.mjs.map +1 -1
- package/dist/admin/icons/Curve.js.map +1 -1
- package/dist/admin/icons/Curve.mjs.map +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/App/index.js.map +1 -1
- package/dist/admin/pages/App/index.mjs.map +1 -1
- package/dist/admin/pages/ListView/EmptyState.js.map +1 -1
- package/dist/admin/pages/ListView/EmptyState.mjs +1 -1
- package/dist/admin/pages/ListView/EmptyState.mjs.map +1 -1
- package/dist/admin/pages/ListView/LinkToCMSettingsView.js.map +1 -1
- package/dist/admin/pages/ListView/LinkToCMSettingsView.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListView.js.map +1 -1
- package/dist/admin/pages/ListView/ListView.mjs +1 -1
- package/dist/admin/pages/ListView/ListView.mjs.map +1 -1
- package/dist/admin/reducers.js +4 -4
- package/dist/admin/reducers.js.map +1 -1
- package/dist/admin/reducers.mjs +4 -4
- package/dist/admin/reducers.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +36 -3
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +36 -3
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/utils/conditions.js.map +1 -1
- package/dist/admin/utils/conditions.mjs.map +1 -1
- package/dist/admin/utils/findAttribute.js.map +1 -1
- package/dist/admin/utils/findAttribute.mjs.map +1 -1
- package/dist/admin/utils/formAPI.js.map +1 -1
- package/dist/admin/utils/formAPI.mjs.map +1 -1
- package/dist/admin/utils/getAttributeDisplayedType.js.map +1 -1
- package/dist/admin/utils/getAttributeDisplayedType.mjs.map +1 -1
- package/dist/admin/utils/getMaxDepth.js.map +1 -1
- package/dist/admin/utils/getMaxDepth.mjs.map +1 -1
- package/dist/admin/utils/getRelationType.js.map +1 -1
- package/dist/admin/utils/getRelationType.mjs.map +1 -1
- package/dist/admin/utils/getTrad.js.map +1 -1
- package/dist/admin/utils/getTrad.mjs.map +1 -1
- package/dist/admin/utils/getYupInnerErrors.js.map +1 -1
- package/dist/admin/utils/getYupInnerErrors.mjs.map +1 -1
- package/dist/admin/utils/isAllowedContentTypesForRelations.js.map +1 -1
- package/dist/admin/utils/isAllowedContentTypesForRelations.mjs.map +1 -1
- package/dist/admin/utils/makeUnique.js.map +1 -1
- package/dist/admin/utils/makeUnique.mjs.map +1 -1
- package/dist/admin/utils/nameToSlug.js.map +1 -1
- package/dist/admin/utils/nameToSlug.mjs.map +1 -1
- package/dist/admin/utils/parseDateValue.js.map +1 -1
- package/dist/admin/utils/parseDateValue.mjs.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
- package/dist/admin/utils/timeFormat.js.map +1 -1
- package/dist/admin/utils/timeFormat.mjs.map +1 -1
- package/dist/admin/utils/toRegressedEnumValue.js.map +1 -1
- package/dist/admin/utils/toRegressedEnumValue.mjs.map +1 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/controllers/builder.js.map +1 -1
- package/dist/server/controllers/builder.mjs.map +1 -1
- package/dist/server/controllers/component-categories.js.map +1 -1
- package/dist/server/controllers/component-categories.mjs.map +1 -1
- package/dist/server/controllers/components.js.map +1 -1
- package/dist/server/controllers/components.mjs +1 -1
- package/dist/server/controllers/components.mjs.map +1 -1
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +1 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/controllers/schema.js.map +1 -1
- package/dist/server/controllers/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/common.js.map +1 -1
- package/dist/server/controllers/validation/common.mjs.map +1 -1
- package/dist/server/controllers/validation/component-category.js.map +1 -1
- package/dist/server/controllers/validation/component-category.mjs.map +1 -1
- package/dist/server/controllers/validation/component.js.map +1 -1
- package/dist/server/controllers/validation/component.mjs +1 -1
- package/dist/server/controllers/validation/component.mjs.map +1 -1
- package/dist/server/controllers/validation/content-type.js.map +1 -1
- package/dist/server/controllers/validation/content-type.mjs.map +1 -1
- package/dist/server/controllers/validation/data-transform.js.map +1 -1
- package/dist/server/controllers/validation/data-transform.mjs.map +1 -1
- package/dist/server/controllers/validation/model-schema.js.map +1 -1
- package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
- package/dist/server/controllers/validation/relations.js.map +1 -1
- package/dist/server/controllers/validation/relations.mjs.map +1 -1
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +1 -1
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/types.js +0 -1
- package/dist/server/controllers/validation/types.js.map +1 -1
- package/dist/server/controllers/validation/types.mjs +1 -2
- package/dist/server/controllers/validation/types.mjs.map +1 -1
- package/dist/server/index.js +8 -8
- package/dist/server/middlewares/is-development-mode.js.map +1 -1
- package/dist/server/middlewares/is-development-mode.mjs.map +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/routes/content-api.js.map +1 -1
- package/dist/server/routes/content-api.mjs.map +1 -1
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/api-handler.js.map +1 -1
- package/dist/server/services/api-handler.mjs.map +1 -1
- package/dist/server/services/builder.js.map +1 -1
- package/dist/server/services/builder.mjs.map +1 -1
- package/dist/server/services/component-categories.js.map +1 -1
- package/dist/server/services/component-categories.mjs +1 -1
- package/dist/server/services/component-categories.mjs.map +1 -1
- package/dist/server/services/components.js.map +1 -1
- package/dist/server/services/components.mjs +1 -1
- package/dist/server/services/components.mjs.map +1 -1
- package/dist/server/services/constants.js.map +1 -1
- package/dist/server/services/constants.mjs.map +1 -1
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +1 -1
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/schema-builder/component-builder.js.map +1 -1
- package/dist/server/services/schema-builder/component-builder.mjs +1 -1
- package/dist/server/services/schema-builder/component-builder.mjs.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs +2 -2
- package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
- package/dist/server/services/schema-builder/index.js.map +1 -1
- package/dist/server/services/schema-builder/index.mjs +3 -3
- package/dist/server/services/schema-builder/index.mjs.map +1 -1
- package/dist/server/services/schema-builder/schema-handler.js.map +1 -1
- package/dist/server/services/schema-builder/schema-handler.mjs.map +1 -1
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +1 -1
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/utils/attributes.js.map +1 -1
- package/dist/server/utils/attributes.mjs.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/server/utils/typeguards.js.map +1 -1
- package/dist/server/utils/typeguards.mjs.map +1 -1
- package/package.json +15 -10
|
@@ -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,
|
|
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,
|
|
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 +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,
|
|
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":";;;;;;AAMA;;
|
|
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 +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":";;;;AAMA;;
|
|
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,
|
|
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,
|
|
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 {
|
|
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,
|
|
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,
|
|
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 {
|
|
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":";;;;;;;AASA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,MAAAA;AAEd,SAASC,sBAAAA,GAAAA;IACtB,OAAO;AACLC,QAAAA,kBAAAA,CAAAA,CAAmB,EAAEC,QAAQ,EAAEC,WAAW,EAAO,EAAA;YAC/C,OAAO,CAAA,EAAGC,OAAAA,CAAQC,UAAU,CAACH,QAAAA,CAAAA,CAAU,CAAC,EAAEE,OAAAA,CAAQC,UAAU,CAACF,WAAAA,CAAAA,CAAAA,CAAc;AAC7E,QAAA,CAAA;AAEAG,QAAAA,wBAAAA,CAAAA,CAAyBC,UAAoB,EAAA;AAC3C,YAAA,OAAOA,UAAAA,CAAWC,MAAM,CAAC,CAACC,MAAAA,EAAaC,SAAAA,GAAAA;gBACrCD,MAAM,CAACC,UAAUC,MAAM,CAAC,GAAG,IAAI,CAACV,kBAAkB,CAACS,SAAAA,CAAAA;gBACnD,OAAOD,MAAAA;AACT,YAAA,CAAA,EAAG,EAAC,CAAA;AACN,QAAA,CAAA;QAEAG,yBAAAA,CAAAA,CAAqCC,GAAW,EAAEC,UAAe,EAAA;AAC/D,YAAA,IAAI,CAAC,IAAI,CAACP,UAAU,CAACQ,GAAG,CAACF,GAAAA,CAAAA,EAAM;AAC7B,gBAAA,MAAM,IAAIf,gBAAAA,CAAiB,oBAAA,CAAA;AAC7B,YAAA;AAEA,YAAA,OAAO,IAAI,CAACS,UAAU,CAACS,GAAG,CAACH,GAAAA,CAAAA,CAAKI,aAAa,CAAC,IAAI,CAACC,iBAAiB,CAACJ,UAAAA,CAAAA,CAAAA;AACvE,QAAA,CAAA;AAEA;;AAEC,QACDK,iBAA2BC,KAAU,EAAA;YACnC,IAAIA,KAAAA,CAAMP,GAAG,IAAIO,KAAAA,CAAMP,GAAG,KAAK,IAAI,CAACZ,kBAAkB,CAACmB,KAAAA,CAAAA,EAAQ;AAC7D,gBAAA,MAAM,IAAItB,gBAAAA,CAAiB,sBAAA,CAAA;AAC7B,YAAA;AAEA,YAAA,MAAMe,MAAMO,KAAAA,CAAMP,GAAG,IAAI,IAAI,CAACZ,kBAAkB,CAACmB,KAAAA,CAAAA;AAEjD,YAAA,IAAI,IAAI,CAACb,UAAU,CAACQ,GAAG,CAACF,GAAAA,CAAAA,EAAM;AAC5B,gBAAA,MAAM,IAAIf,gBAAAA,CAAiB,yBAAA,CAAA;AAC7B,YAAA;AAEA,YAAA,MAAMuB,UAAUC,mBAAAA,CAAoB;AAClCC,gBAAAA,GAAAA,EAAKC,aAAAA,CAAKC,IAAI,CAACC,MAAAA,CAAOC,IAAI,CAACC,GAAG,CAACrB,UAAU,EAAEH,OAAAA,CAAQC,UAAU,CAACe,MAAMlB,QAAQ,CAAA,CAAA;gBAC5E2B,QAAAA,EAAU,CAAA,EAAGzB,QAAQC,UAAU,CAACe,MAAMjB,WAAW,CAAA,CAAE,KAAK;AAC1D,aAAA,CAAA;;;AAIA,YAAA,MAAM2B,iBAAiB,CAAC,WAAW,EAAE1B,OAAAA,CAAQ2B,oBAAoB,CAC/DX,KAAAA,CAAMlB,QAAQ,CAAA,CACd,CAAC,EAAEE,OAAAA,CAAQ2B,oBAAoB,CAACC,SAAAA,CAAUZ,KAAAA,CAAMjB,WAAW,CAAA,CAAA,CAAA,CAAI;AAEjE,YAAA,IAAI,CAACI,UAAU,CAAC0B,OAAO,CAAC,CAACC,KAAAA,GAAAA;AACvB,gBAAA,IAAIA,KAAAA,CAAMC,MAAM,CAACL,cAAc,KAAKA,cAAAA,EAAgB;AAClD,oBAAA,MAAM,IAAIhC,gBAAAA,CAAiB,yBAAA,CAAA;AAC7B,gBAAA;AACF,YAAA,CAAA,CAAA;YAEAuB,OAAAA,CACGe,MAAM,CAACvB,GAAAA,CAAAA,CACPwB,GAAG,CAAC,gBAAA,EAAkBP,cAAAA,CAAAA,CACtBO,GAAG,CAAC;AAAC,gBAAA,MAAA;AAAQ,gBAAA;AAAc,aAAA,EAAEjB,KAAAA,CAAMjB,WAAW,CAAA,CAC9CkC,GAAG,CAAC;AAAC,gBAAA,MAAA;AAAQ,gBAAA;AAAO,aAAA,EAAEjB,KAAAA,CAAMkB,IAAI,CAAA,CAChCD,GAAG,CAAC;AAAC,gBAAA,MAAA;AAAQ,gBAAA;AAAc,aAAA,EAAEjB,KAAAA,CAAMmB,WAAW,CAAA,CAC9CF,GAAG,CAAC,eAAA,EAAiBjB,KAAAA,CAAMoB,aAAa,CAAA,CACxCH,GAAG,CAAC,QAAA,EAAUjB,MAAMqB,MAAM,CAAA;AAE7B,YAAA,IAAI,IAAI,CAAClC,UAAU,CAACmC,IAAI,KAAK,CAAA,EAAG;gBAC9BhB,MAAAA,CAAOiB,SAAS,CAACC,IAAI,CAAC,yBAAA,CAAA;YACxB,CAAA,MAAO;gBACLlB,MAAAA,CAAOiB,SAAS,CAACC,IAAI,CAAC,oBAAA,CAAA;AACxB,YAAA;AAEA,YAAA,IAAI,CAACrC,UAAU,CAAC8B,GAAG,CAACxB,GAAAA,EAAKQ,OAAAA,CAAAA;AAEzB,YAAA,IAAI,CAACT,yBAAyB,CAACC,GAAAA,EAAKO,MAAMN,UAAU,CAAA;YAEpD,OAAOO,OAAAA;AACT,QAAA,CAAA;AAEA;;AAEC,QACDwB,eAAyBzB,KAAU,EAAA;YACjC,MAAM,EAAEP,GAAG,EAAE,GAAGO,KAAAA;AAEhB,YAAA,IAAI,CAAC,IAAI,CAACb,UAAU,CAACQ,GAAG,CAACF,GAAAA,CAAAA,EAAM;gBAC7B,MAAM,IAAId,MAAAA,CAAOD,gBAAgB,CAAC,oBAAA,CAAA;AACpC,YAAA;AAEA,YAAA,MAAMY,YAAY,IAAI,CAACH,UAAU,CAACS,GAAG,CAACH,GAAAA,CAAAA;AAEtC,YAAA,MAAM,GAAGiC,OAAAA,CAAQ,GAAGjC,GAAAA,CAAIkC,KAAK,CAAC,GAAA,CAAA;AAE9B,YAAA,MAAMC,WAAAA,GAAc5C,OAAAA,CAAQC,UAAU,CAACe,MAAMlB,QAAQ,CAAA;AACrD,YAAA,MAAM+C,MAAAA,GAAS,CAAA,EAAGD,WAAAA,CAAY,CAAC,EAAEF,OAAAA,CAAAA,CAAS;YAE1C,IAAIG,MAAAA,KAAWpC,OAAO,IAAI,CAACN,UAAU,CAACQ,GAAG,CAACkC,MAAAA,CAAAA,EAAS;gBACjD,MAAM,IAAIlD,MAAAA,CAAOD,gBAAgB,CAAC,8BAAA,CAAA;AACpC,YAAA;YAEA,MAAMoD,MAAAA,GAAS1B,aAAAA,CAAKC,IAAI,CAACC,MAAAA,CAAOC,IAAI,CAACC,GAAG,CAACrB,UAAU,EAAEyC,WAAAA,CAAAA;AAErD,YAAA,MAAMG,aAAAA,GAAgBzC,SAAAA,CAAUyB,MAAM,CAACrB,UAAU;YAEjD,MAAMsC,aAAAA,GAAgBC,EAAEC,MAAM,CAAClC,MAAMN,UAAU,EAAE,CAACyC,IAAAA,EAAMC,GAAAA,GAAAA;gBACtD,OAAOH,CAAAA,CAAEtC,GAAG,CAACoC,aAAAA,EAAeK,QAAQ,CAACC,cAAAA,CAAeN,aAAa,CAACK,GAAAA,CAAI,CAAA;AACxE,YAAA,CAAA,CAAA;AAEA9C,YAAAA,SAAAA,CACG0B,MAAM,CAACa,MAAAA,CAAAA,CACPS,MAAM,CAACR,MAAAA,CAAAA,CACPb,GAAG,CAAC;AAAC,gBAAA,MAAA;AAAQ,gBAAA;AAAc,aAAA,EAAEjB,KAAAA,CAAMjB,WAAW,CAAA,CAC9CkC,GAAG,CAAC;AAAC,gBAAA,MAAA;AAAQ,gBAAA;AAAO,aAAA,EAAEjB,KAAAA,CAAMkB,IAAI,CAAA,CAChCD,GAAG,CAAC;AAAC,gBAAA,MAAA;AAAQ,gBAAA;AAAc,aAAA,EAAEjB,KAAAA,CAAMmB,WAAW,CAAA,CAC9CF,GAAG,CAAC,eAAA,EAAiBjB,KAAAA,CAAMoB,aAAa,CAAA,CACxCvB,aAAa,CAAC,IAAI,CAACC,iBAAiB,CAACkC,aAAAA,CAAAA,CAAAA;AAExC,YAAA,IAAIH,WAAWpC,GAAAA,EAAK;AAClB,gBAAA,IAAI,CAACN,UAAU,CAAC0B,OAAO,CAAC,CAACC,KAAAA,GAAAA;oBACvBA,KAAAA,CAAMyB,eAAe,CAAC9C,GAAAA,EAAKoC,MAAAA,CAAAA;AAC7B,gBAAA,CAAA,CAAA;AAEA,gBAAA,IAAI,CAACW,YAAY,CAAC3B,OAAO,CAAC,CAAC4B,EAAAA,GAAAA;oBACzBA,EAAAA,CAAGF,eAAe,CAAC9C,GAAAA,EAAKoC,MAAAA,CAAAA;AAC1B,gBAAA,CAAA,CAAA;AACF,YAAA;YAEA,OAAOvC,SAAAA;AACT,QAAA,CAAA;AAEAoD,QAAAA,eAAAA,CAAAA,CAA2BjD,GAA2B,EAAA;AACpD,YAAA,IAAI,CAAC,IAAI,CAACN,UAAU,CAACQ,GAAG,CAACF,GAAAA,CAAAA,EAAM;gBAC7B,MAAM,IAAId,MAAAA,CAAOD,gBAAgB,CAAC,oBAAA,CAAA;AACpC,YAAA;AAEA,YAAA,IAAI,CAACS,UAAU,CAAC0B,OAAO,CAAC,CAACC,KAAAA,GAAAA;AACvBA,gBAAAA,KAAAA,CAAM6B,eAAe,CAAClD,GAAAA,CAAAA;AACxB,YAAA,CAAA,CAAA;AAEA,YAAA,IAAI,CAAC+C,YAAY,CAAC3B,OAAO,CAAC,CAAC4B,EAAAA,GAAAA;AACzBA,gBAAAA,EAAAA,CAAGE,eAAe,CAAClD,GAAAA,CAAAA;AACrB,YAAA,CAAA,CAAA;AAEA,YAAA,OAAO,IAAI,CAACN,UAAU,CAACS,GAAG,CAACH,KAAKmD,MAAM,EAAA;AACxC,QAAA;AACF,KAAA;AACF;;;;"}
|