@webiny/api-headless-cms 6.1.0-beta.3 → 6.2.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/context.d.ts +2 -5
- package/context.js +16 -7
- package/context.js.map +1 -1
- package/crud/AccessControl/AccessControl.d.ts +18 -28
- package/crud/AccessControl/AccessControl.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryData.js +17 -6
- package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +9 -3
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.d.ts +1 -1
- package/crud/contentEntry/entryDataValidation.js +16 -13
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/searchableFields.d.ts +2 -3
- package/crud/contentEntry/searchableFields.js +10 -18
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentModel.crud.js +2 -1
- package/crud/contentModel.crud.js.map +1 -1
- package/domain/contentModel/validation/modelFields.js +15 -20
- package/domain/contentModel/validation/modelFields.js.map +1 -1
- package/exports/api/cms/graphql.d.ts +1 -0
- package/exports/api/cms/graphql.js +3 -0
- package/exports/api/cms/graphql.js.map +1 -0
- package/exports/api/cms/storage.d.ts +3 -0
- package/exports/api/cms/storage.js +5 -0
- package/exports/api/cms/storage.js.map +1 -0
- package/exports/api/cms/validation.d.ts +4 -0
- package/exports/api/cms/validation.js +6 -0
- package/exports/api/cms/validation.js.map +1 -0
- package/features/contentEntry/CreateEntry/CreateEntryUseCase.d.ts +3 -3
- package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +3 -3
- package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
- package/features/contentEntry/CreateEntry/events.d.ts +2 -2
- package/features/contentEntry/CreateEntry/events.js +1 -1
- package/features/contentEntry/CreateEntry/events.js.map +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +3 -3
- package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +3 -3
- package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/events.d.ts +2 -2
- package/features/contentEntry/CreateEntryRevisionFrom/events.js +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/events.js.map +1 -1
- package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.d.ts +1 -1
- package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js +1 -1
- package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js.map +1 -1
- package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.d.ts +2 -2
- package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js +2 -2
- package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js.map +1 -1
- package/features/contentEntry/DeleteEntry/events.d.ts +2 -2
- package/features/contentEntry/DeleteEntry/events.js +1 -1
- package/features/contentEntry/DeleteEntry/events.js.map +1 -1
- package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.d.ts +1 -1
- package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js +1 -1
- package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js.map +1 -1
- package/features/contentEntry/DeleteEntryRevision/events.d.ts +2 -2
- package/features/contentEntry/DeleteEntryRevision/events.js +1 -1
- package/features/contentEntry/DeleteEntryRevision/events.js.map +1 -1
- package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.d.ts +1 -1
- package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js +1 -1
- package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js.map +1 -1
- package/features/contentEntry/DeleteMultipleEntries/events.d.ts +2 -2
- package/features/contentEntry/DeleteMultipleEntries/events.js +1 -1
- package/features/contentEntry/DeleteMultipleEntries/events.js.map +1 -1
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +6 -11
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
- package/features/contentEntry/ListEntries/ListEntriesUseCase.d.ts +1 -1
- package/features/contentEntry/ListEntries/ListEntriesUseCase.js +1 -1
- package/features/contentEntry/ListEntries/ListEntriesUseCase.js.map +1 -1
- package/features/contentEntry/MoveEntry/MoveEntryUseCase.d.ts +1 -1
- package/features/contentEntry/MoveEntry/MoveEntryUseCase.js +1 -1
- package/features/contentEntry/MoveEntry/MoveEntryUseCase.js.map +1 -1
- package/features/contentEntry/MoveEntry/events.d.ts +2 -2
- package/features/contentEntry/MoveEntry/events.js +1 -1
- package/features/contentEntry/MoveEntry/events.js.map +1 -1
- package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +2 -2
- package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +2 -2
- package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
- package/features/contentEntry/PublishEntry/events.d.ts +2 -2
- package/features/contentEntry/PublishEntry/events.js +1 -1
- package/features/contentEntry/PublishEntry/events.js.map +1 -1
- package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.d.ts +2 -2
- package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +2 -2
- package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
- package/features/contentEntry/RepublishEntry/events.d.ts +2 -2
- package/features/contentEntry/RepublishEntry/events.js +1 -1
- package/features/contentEntry/RepublishEntry/events.js.map +1 -1
- package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.d.ts +2 -2
- package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js +2 -2
- package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js.map +1 -1
- package/features/contentEntry/RestoreEntryFromBin/events.d.ts +2 -2
- package/features/contentEntry/RestoreEntryFromBin/events.js +1 -1
- package/features/contentEntry/RestoreEntryFromBin/events.js.map +1 -1
- package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.d.ts +2 -2
- package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +2 -2
- package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
- package/features/contentEntry/UnpublishEntry/events.d.ts +2 -2
- package/features/contentEntry/UnpublishEntry/events.js +1 -1
- package/features/contentEntry/UnpublishEntry/events.js.map +1 -1
- package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.d.ts +3 -3
- package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +3 -3
- package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
- package/features/contentEntry/UpdateEntry/events.d.ts +2 -2
- package/features/contentEntry/UpdateEntry/events.js +1 -1
- package/features/contentEntry/UpdateEntry/events.js.map +1 -1
- package/features/contentModel/CreateModel/CreateModelRepository.d.ts +1 -1
- package/features/contentModel/CreateModel/CreateModelRepository.js +1 -1
- package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
- package/features/contentModel/CreateModel/CreateModelUseCase.d.ts +3 -3
- package/features/contentModel/CreateModel/CreateModelUseCase.js +3 -3
- package/features/contentModel/CreateModel/CreateModelUseCase.js.map +1 -1
- package/features/contentModel/CreateModel/events.d.ts +2 -2
- package/features/contentModel/CreateModel/events.js +1 -1
- package/features/contentModel/CreateModel/events.js.map +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.d.ts +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.d.ts +3 -3
- package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js +4 -3
- package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js.map +1 -1
- package/features/contentModel/CreateModelFrom/events.d.ts +2 -2
- package/features/contentModel/CreateModelFrom/events.js +1 -1
- package/features/contentModel/CreateModelFrom/events.js.map +1 -1
- package/features/contentModel/DeleteModel/DeleteModelUseCase.d.ts +1 -1
- package/features/contentModel/DeleteModel/DeleteModelUseCase.js +1 -1
- package/features/contentModel/DeleteModel/DeleteModelUseCase.js.map +1 -1
- package/features/contentModel/DeleteModel/events.d.ts +2 -2
- package/features/contentModel/DeleteModel/events.js +1 -1
- package/features/contentModel/DeleteModel/events.js.map +1 -1
- package/features/contentModel/ModelToAstConverter/ModelToAstConverter.d.ts +3 -3
- package/features/contentModel/ModelToAstConverter/ModelToAstConverter.js +6 -6
- package/features/contentModel/ModelToAstConverter/ModelToAstConverter.js.map +1 -1
- package/features/contentModel/UpdateModel/UpdateModelUseCase.d.ts +2 -2
- package/features/contentModel/UpdateModel/UpdateModelUseCase.js +2 -2
- package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
- package/features/contentModel/UpdateModel/events.d.ts +2 -2
- package/features/contentModel/UpdateModel/events.js +1 -1
- package/features/contentModel/UpdateModel/events.js.map +1 -1
- package/features/contentModel/shared/ModelsFetcher.d.ts +1 -1
- package/features/contentModel/shared/ModelsFetcher.js +1 -1
- package/features/contentModel/shared/ModelsFetcher.js.map +1 -1
- package/features/contentModelGroup/CreateGroup/CreateGroupRepository.d.ts +1 -1
- package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js +1 -1
- package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js.map +1 -1
- package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.d.ts +3 -3
- package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js +3 -3
- package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js.map +1 -1
- package/features/contentModelGroup/CreateGroup/events.d.ts +2 -2
- package/features/contentModelGroup/CreateGroup/events.js +1 -1
- package/features/contentModelGroup/CreateGroup/events.js.map +1 -1
- package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.d.ts +1 -1
- package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js +1 -1
- package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js.map +1 -1
- package/features/contentModelGroup/DeleteGroup/events.d.ts +2 -2
- package/features/contentModelGroup/DeleteGroup/events.js +1 -1
- package/features/contentModelGroup/DeleteGroup/events.js.map +1 -1
- package/features/contentModelGroup/GetGroup/GetGroupRepository.d.ts +2 -2
- package/features/contentModelGroup/GetGroup/GetGroupRepository.js +2 -2
- package/features/contentModelGroup/GetGroup/GetGroupRepository.js.map +1 -1
- package/features/contentModelGroup/ListGroups/ListGroupsRepository.d.ts +2 -2
- package/features/contentModelGroup/ListGroups/ListGroupsRepository.js +2 -2
- package/features/contentModelGroup/ListGroups/ListGroupsRepository.js.map +1 -1
- package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.d.ts +2 -2
- package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js +2 -2
- package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js.map +1 -1
- package/features/contentModelGroup/UpdateGroup/events.d.ts +2 -2
- package/features/contentModelGroup/UpdateGroup/events.js +1 -1
- package/features/contentModelGroup/UpdateGroup/events.js.map +1 -1
- package/features/contentModelGroup/shared/PluginGroupsProvider.d.ts +2 -2
- package/features/contentModelGroup/shared/PluginGroupsProvider.js +2 -2
- package/features/contentModelGroup/shared/PluginGroupsProvider.js.map +1 -1
- package/features/graphql/feature.d.ts +1 -0
- package/features/graphql/feature.js +34 -0
- package/features/graphql/feature.js.map +1 -0
- package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.d.ts +13 -0
- package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.js +27 -0
- package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.js.map +1 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.d.ts +97 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js +4 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js.map +1 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.d.ts +10 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.js +4 -0
- package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.js.map +1 -0
- package/features/graphql/fields/base/BooleanToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/BooleanToGraphQL.js +68 -0
- package/features/graphql/fields/base/BooleanToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/DateTimeToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/DateTimeToGraphQL.js +97 -0
- package/features/graphql/fields/base/DateTimeToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/DynamicZoneToGraphQL.d.ts +30 -0
- package/features/graphql/fields/base/DynamicZoneToGraphQL.js +280 -0
- package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/FileToGraphQL.d.ts +22 -0
- package/features/graphql/fields/base/FileToGraphQL.js +39 -0
- package/features/graphql/fields/base/FileToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/JsonToGraphQL.d.ts +24 -0
- package/features/graphql/fields/base/JsonToGraphQL.js +52 -0
- package/features/graphql/fields/base/JsonToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/LongTextToGraphQL.d.ts +24 -0
- package/features/graphql/fields/base/LongTextToGraphQL.js +57 -0
- package/features/graphql/fields/base/LongTextToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/NumberToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/NumberToGraphQL.js +78 -0
- package/features/graphql/fields/base/NumberToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/ObjectToGraphQL.d.ts +31 -0
- package/features/graphql/fields/base/ObjectToGraphQL.js +264 -0
- package/features/graphql/fields/base/ObjectToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/RefToGraphQL.d.ts +29 -0
- package/features/graphql/fields/base/RefToGraphQL.js +261 -0
- package/features/graphql/fields/base/RefToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/RichTextToGraphQL.d.ts +25 -0
- package/features/graphql/fields/base/RichTextToGraphQL.js +58 -0
- package/features/graphql/fields/base/RichTextToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/SearchableJsonToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/SearchableJsonToGraphQL.js +62 -0
- package/features/graphql/fields/base/SearchableJsonToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/TextToGraphQL.d.ts +26 -0
- package/features/graphql/fields/base/TextToGraphQL.js +74 -0
- package/features/graphql/fields/base/TextToGraphQL.js.map +1 -0
- package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.d.ts +16 -0
- package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.js +37 -0
- package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.js.map +1 -0
- package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.d.ts +3 -0
- package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.js +14 -0
- package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.js.map +1 -0
- package/{graphqlFields → features/graphql/fields/base}/richText/richTextResolver.d.ts +1 -1
- package/{graphqlFields → features/graphql/fields/base}/richText/richTextResolver.js +2 -2
- package/features/graphql/fields/base/richText/richTextResolver.js.map +1 -0
- package/{graphqlFields/helpers.d.ts → features/graphql/fields/base/utils/createGraphQLInputField.d.ts} +1 -1
- package/features/graphql/fields/base/utils/createGraphQLInputField.js +17 -0
- package/features/graphql/fields/base/utils/createGraphQLInputField.js.map +1 -0
- package/features/graphql/index.d.ts +4 -0
- package/features/graphql/index.js +6 -0
- package/features/graphql/index.js.map +1 -0
- package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.d.ts +13 -0
- package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.js +4 -0
- package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.js.map +1 -0
- package/features/installer/CmsInstaller.d.ts +1 -1
- package/features/installer/CmsInstaller.js +1 -1
- package/features/installer/CmsInstaller.js.map +1 -1
- package/features/shared/abstractions.d.ts +9 -2
- package/features/shared/abstractions.js +1 -0
- package/features/shared/abstractions.js.map +1 -1
- package/features/storage/StorageTransformRegistry.d.ts +13 -0
- package/features/storage/StorageTransformRegistry.js +27 -0
- package/features/storage/StorageTransformRegistry.js.map +1 -0
- package/features/storage/abstractions/StorageTransform.d.ts +26 -0
- package/features/storage/abstractions/StorageTransform.js +4 -0
- package/features/storage/abstractions/StorageTransform.js.map +1 -0
- package/features/storage/abstractions/StorageTransformRegistry.d.ts +10 -0
- package/features/storage/abstractions/StorageTransformRegistry.js +4 -0
- package/features/storage/abstractions/StorageTransformRegistry.js.map +1 -0
- package/features/storage/feature.d.ts +1 -0
- package/features/storage/feature.js +24 -0
- package/features/storage/feature.js.map +1 -0
- package/features/storage/fields/DateStorageTransform.d.ts +10 -0
- package/features/storage/fields/DateStorageTransform.js +110 -0
- package/features/storage/fields/DateStorageTransform.js.map +1 -0
- package/features/storage/fields/DefaultStorageTransform.d.ts +10 -0
- package/features/storage/fields/DefaultStorageTransform.js +20 -0
- package/features/storage/fields/DefaultStorageTransform.js.map +1 -0
- package/features/storage/fields/DynamicZoneStorageTransform.d.ts +10 -0
- package/features/storage/fields/DynamicZoneStorageTransform.js +142 -0
- package/features/storage/fields/DynamicZoneStorageTransform.js.map +1 -0
- package/features/storage/fields/JsonStorageTransform.d.ts +13 -0
- package/features/storage/fields/JsonStorageTransform.js +31 -0
- package/features/storage/fields/JsonStorageTransform.js.map +1 -0
- package/features/storage/fields/LongTextStorageTransform.d.ts +18 -0
- package/features/storage/fields/LongTextStorageTransform.js +55 -0
- package/features/storage/fields/LongTextStorageTransform.js.map +1 -0
- package/features/storage/fields/ObjectStorageTransform.d.ts +10 -0
- package/features/storage/fields/ObjectStorageTransform.js +99 -0
- package/features/storage/fields/ObjectStorageTransform.js.map +1 -0
- package/features/storage/fields/RichTextStorageTransform.d.ts +13 -0
- package/features/storage/fields/RichTextStorageTransform.js +39 -0
- package/features/storage/fields/RichTextStorageTransform.js.map +1 -0
- package/features/storage/index.d.ts +3 -0
- package/features/storage/index.js +5 -0
- package/features/storage/index.js.map +1 -0
- package/features/validation/CmsModelFieldPatternValidatorRegistry.d.ts +12 -0
- package/features/validation/CmsModelFieldPatternValidatorRegistry.js +21 -0
- package/features/validation/CmsModelFieldPatternValidatorRegistry.js.map +1 -0
- package/features/validation/CmsModelFieldValidatorRegistry.d.ts +12 -0
- package/features/validation/CmsModelFieldValidatorRegistry.js +23 -0
- package/features/validation/CmsModelFieldValidatorRegistry.js.map +1 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidator.d.ts +13 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidator.js +4 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidator.js.map +1 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.d.ts +9 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js +4 -0
- package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js.map +1 -0
- package/features/validation/abstractions/CmsModelFieldValidator.d.ts +11 -0
- package/features/validation/abstractions/CmsModelFieldValidator.js +4 -0
- package/features/validation/abstractions/CmsModelFieldValidator.js.map +1 -0
- package/features/validation/abstractions/CmsModelFieldValidatorRegistry.d.ts +9 -0
- package/features/validation/abstractions/CmsModelFieldValidatorRegistry.js +4 -0
- package/features/validation/abstractions/CmsModelFieldValidatorRegistry.js.map +1 -0
- package/features/validation/feature.d.ts +1 -0
- package/features/validation/feature.js +48 -0
- package/features/validation/feature.js.map +1 -0
- package/features/validation/index.d.ts +5 -0
- package/features/validation/index.js +7 -0
- package/features/validation/index.js.map +1 -0
- package/features/validation/validators/DateGteValidator.d.ts +10 -0
- package/features/validation/validators/DateGteValidator.js +26 -0
- package/features/validation/validators/DateGteValidator.js.map +1 -0
- package/features/validation/validators/DateLteValidator.d.ts +10 -0
- package/features/validation/validators/DateLteValidator.js +26 -0
- package/features/validation/validators/DateLteValidator.js.map +1 -0
- package/features/validation/validators/GteValidator.d.ts +10 -0
- package/features/validation/validators/GteValidator.js +21 -0
- package/features/validation/validators/GteValidator.js.map +1 -0
- package/features/validation/validators/InValidator.d.ts +10 -0
- package/features/validation/validators/InValidator.js +21 -0
- package/features/validation/validators/InValidator.js.map +1 -0
- package/features/validation/validators/LteValidator.d.ts +10 -0
- package/features/validation/validators/LteValidator.js +21 -0
- package/features/validation/validators/LteValidator.js.map +1 -0
- package/features/validation/validators/MaxLengthValidator.d.ts +10 -0
- package/features/validation/validators/MaxLengthValidator.js +21 -0
- package/features/validation/validators/MaxLengthValidator.js.map +1 -0
- package/features/validation/validators/MinLengthValidator.d.ts +10 -0
- package/features/validation/validators/MinLengthValidator.js +21 -0
- package/features/validation/validators/MinLengthValidator.js.map +1 -0
- package/features/validation/validators/PatternValidator.d.ts +13 -0
- package/features/validation/validators/PatternValidator.js +38 -0
- package/features/validation/validators/PatternValidator.js.map +1 -0
- package/features/validation/validators/RequiredValidator.d.ts +10 -0
- package/features/validation/validators/RequiredValidator.js +16 -0
- package/features/validation/validators/RequiredValidator.js.map +1 -0
- package/features/validation/validators/TimeGteValidator.d.ts +10 -0
- package/features/validation/validators/TimeGteValidator.js +21 -0
- package/features/validation/validators/TimeGteValidator.js.map +1 -0
- package/features/validation/validators/TimeLteValidator.d.ts +10 -0
- package/features/validation/validators/TimeLteValidator.js +21 -0
- package/features/validation/validators/TimeLteValidator.js.map +1 -0
- package/features/validation/validators/UniqueValidator.d.ts +10 -0
- package/features/validation/validators/UniqueValidator.js +47 -0
- package/features/validation/validators/UniqueValidator.js.map +1 -0
- package/features/validation/validators/patterns/EmailPattern.d.ts +12 -0
- package/features/validation/validators/patterns/EmailPattern.js +14 -0
- package/features/validation/validators/patterns/EmailPattern.js.map +1 -0
- package/features/validation/validators/patterns/LowerCasePattern.d.ts +12 -0
- package/features/validation/validators/patterns/LowerCasePattern.js +14 -0
- package/features/validation/validators/patterns/LowerCasePattern.js.map +1 -0
- package/features/validation/validators/patterns/LowerCaseSpacePattern.d.ts +12 -0
- package/features/validation/validators/patterns/LowerCaseSpacePattern.js +14 -0
- package/features/validation/validators/patterns/LowerCaseSpacePattern.js.map +1 -0
- package/features/validation/validators/patterns/UpperCasePattern.d.ts +12 -0
- package/features/validation/validators/patterns/UpperCasePattern.js +14 -0
- package/features/validation/validators/patterns/UpperCasePattern.js.map +1 -0
- package/features/validation/validators/patterns/UpperCaseSpacePattern.d.ts +12 -0
- package/features/validation/validators/patterns/UpperCaseSpacePattern.js +14 -0
- package/features/validation/validators/patterns/UpperCaseSpacePattern.js.map +1 -0
- package/features/validation/validators/patterns/UrlPattern.d.ts +12 -0
- package/features/validation/validators/patterns/UrlPattern.js +14 -0
- package/features/validation/validators/patterns/UrlPattern.js.map +1 -0
- package/graphql/getSchema/generateCacheKey.js +1 -1
- package/graphql/getSchema/generateCacheKey.js.map +1 -1
- package/graphql/schema/baseSchema.d.ts +2 -1
- package/graphql/schema/baseSchema.js +11 -9
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +3 -2
- package/graphql/schema/createFieldResolvers.js +5 -4
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.d.ts +3 -2
- package/graphql/schema/createManageResolvers.js +3 -3
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +4 -4
- package/graphql/schema/createManageSDL.js +8 -8
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.d.ts +3 -2
- package/graphql/schema/createPreviewResolvers.js +4 -4
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.d.ts +3 -2
- package/graphql/schema/createReadResolvers.js +4 -4
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.d.ts +4 -4
- package/graphql/schema/createReadSDL.js +7 -7
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/createSingularResolvers.d.ts +3 -2
- package/graphql/schema/createSingularResolvers.js +3 -3
- package/graphql/schema/createSingularResolvers.js.map +1 -1
- package/graphql/schema/createSingularSDL.d.ts +3 -2
- package/graphql/schema/createSingularSDL.js +3 -3
- package/graphql/schema/createSingularSDL.js.map +1 -1
- package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js +6 -7
- package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js.map +1 -1
- package/graphql/schema/schemaPlugins.js +14 -17
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/index.d.ts +1 -4
- package/index.js +2 -6
- package/index.js.map +1 -1
- package/package.json +25 -25
- package/plugins/index.d.ts +0 -2
- package/plugins/index.js +0 -2
- package/plugins/index.js.map +1 -1
- package/types/modelField.d.ts +1 -1
- package/types/modelField.js.map +1 -1
- package/types/plugins.d.ts +1 -305
- package/types/plugins.js.map +1 -1
- package/types/types.d.ts +4 -44
- package/types/types.js +0 -4
- package/types/types.js.map +1 -1
- package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.d.ts +3 -2
- package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.js +3 -3
- package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.js.map +1 -1
- package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.d.ts +4 -3
- package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.js +3 -3
- package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.js.map +1 -1
- package/utils/converters/ConverterCollection.d.ts +2 -0
- package/utils/converters/ConverterCollection.js +3 -2
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyFromStorageConverter.d.ts +2 -0
- package/utils/converters/valueKeyFromStorageConverter.js +4 -2
- package/utils/converters/valueKeyFromStorageConverter.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.d.ts +2 -3
- package/utils/converters/valueKeyStorageConverter.js +7 -3
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/converters/valueKeyToStorageConverter.d.ts +2 -0
- package/utils/converters/valueKeyToStorageConverter.js +4 -2
- package/utils/converters/valueKeyToStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +3 -2
- package/utils/createTypeFromFields.js +3 -3
- package/utils/createTypeFromFields.js.map +1 -1
- package/utils/entryStorage.d.ts +8 -15
- package/utils/entryStorage.js +31 -59
- package/utils/entryStorage.js.map +1 -1
- package/utils/getBaseFieldType.js +3 -0
- package/utils/getBaseFieldType.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.d.ts +3 -2
- package/utils/getSchemaFromFieldPlugins.js +5 -9
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/renderFields.d.ts +4 -3
- package/utils/renderFields.js +14 -9
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.d.ts +3 -2
- package/utils/renderGetFilterFields.js +2 -2
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.d.ts +4 -3
- package/utils/renderInputFields.js +5 -11
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.d.ts +3 -2
- package/utils/renderListFilterFields.js +5 -3
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +4 -4
- package/utils/renderSortEnum.js +11 -11
- package/utils/renderSortEnum.js.map +1 -1
- package/graphql/schema/createFieldTypePluginRecords.d.ts +0 -3
- package/graphql/schema/createFieldTypePluginRecords.js +0 -8
- package/graphql/schema/createFieldTypePluginRecords.js.map +0 -1
- package/graphqlFields/boolean.d.ts +0 -2
- package/graphqlFields/boolean.js +0 -52
- package/graphqlFields/boolean.js.map +0 -1
- package/graphqlFields/datetime.d.ts +0 -2
- package/graphqlFields/datetime.js +0 -71
- package/graphqlFields/datetime.js.map +0 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +0 -2
- package/graphqlFields/dynamicZone/dynamicZoneField.js +0 -313
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +0 -1
- package/graphqlFields/dynamicZone/index.d.ts +0 -1
- package/graphqlFields/dynamicZone/index.js +0 -3
- package/graphqlFields/dynamicZone/index.js.map +0 -1
- package/graphqlFields/file.d.ts +0 -2
- package/graphqlFields/file.js +0 -37
- package/graphqlFields/file.js.map +0 -1
- package/graphqlFields/helpers.js +0 -20
- package/graphqlFields/helpers.js.map +0 -1
- package/graphqlFields/index.d.ts +0 -2
- package/graphqlFields/index.js +0 -15
- package/graphqlFields/index.js.map +0 -1
- package/graphqlFields/json.d.ts +0 -2
- package/graphqlFields/json.js +0 -42
- package/graphqlFields/json.js.map +0 -1
- package/graphqlFields/longText.d.ts +0 -2
- package/graphqlFields/longText.js +0 -57
- package/graphqlFields/longText.js.map +0 -1
- package/graphqlFields/number.d.ts +0 -2
- package/graphqlFields/number.js +0 -63
- package/graphqlFields/number.js.map +0 -1
- package/graphqlFields/object.d.ts +0 -2
- package/graphqlFields/object.js +0 -245
- package/graphqlFields/object.js.map +0 -1
- package/graphqlFields/ref.d.ts +0 -2
- package/graphqlFields/ref.js +0 -286
- package/graphqlFields/ref.js.map +0 -1
- package/graphqlFields/richText/richTextResolver.js.map +0 -1
- package/graphqlFields/richText.d.ts +0 -2
- package/graphqlFields/richText.js +0 -48
- package/graphqlFields/richText.js.map +0 -1
- package/graphqlFields/searchableJson.d.ts +0 -2
- package/graphqlFields/searchableJson.js +0 -53
- package/graphqlFields/searchableJson.js.map +0 -1
- package/graphqlFields/text.d.ts +0 -2
- package/graphqlFields/text.js +0 -59
- package/graphqlFields/text.js.map +0 -1
- package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +0 -20
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +0 -19
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +0 -1
- package/plugins/StorageTransformPlugin.d.ts +0 -35
- package/plugins/StorageTransformPlugin.js +0 -26
- package/plugins/StorageTransformPlugin.js.map +0 -1
- package/storage/date.d.ts +0 -3
- package/storage/date.js +0 -110
- package/storage/date.js.map +0 -1
- package/storage/default.d.ts +0 -2
- package/storage/default.js +0 -19
- package/storage/default.js.map +0 -1
- package/storage/dynamicZone.d.ts +0 -2
- package/storage/dynamicZone.js +0 -149
- package/storage/dynamicZone.js.map +0 -1
- package/storage/index.d.ts +0 -1
- package/storage/index.js +0 -13
- package/storage/index.js.map +0 -1
- package/storage/json.d.ts +0 -2
- package/storage/json.js +0 -49
- package/storage/json.js.map +0 -1
- package/storage/object.d.ts +0 -2
- package/storage/object.js +0 -104
- package/storage/object.js.map +0 -1
- package/validators/dateGte.d.ts +0 -2
- package/validators/dateGte.js +0 -25
- package/validators/dateGte.js.map +0 -1
- package/validators/dateLte.d.ts +0 -2
- package/validators/dateLte.js +0 -25
- package/validators/dateLte.js.map +0 -1
- package/validators/gte.d.ts +0 -2
- package/validators/gte.js +0 -22
- package/validators/gte.js.map +0 -1
- package/validators/in.d.ts +0 -2
- package/validators/in.js +0 -22
- package/validators/in.js.map +0 -1
- package/validators/index.d.ts +0 -1
- package/validators/index.js +0 -16
- package/validators/index.js.map +0 -1
- package/validators/lte.d.ts +0 -2
- package/validators/lte.js +0 -22
- package/validators/lte.js.map +0 -1
- package/validators/maxLength.d.ts +0 -2
- package/validators/maxLength.js +0 -22
- package/validators/maxLength.js.map +0 -1
- package/validators/minLength.d.ts +0 -2
- package/validators/minLength.js +0 -22
- package/validators/minLength.js.map +0 -1
- package/validators/pattern.d.ts +0 -2
- package/validators/pattern.js +0 -36
- package/validators/pattern.js.map +0 -1
- package/validators/patternPlugins/email.d.ts +0 -2
- package/validators/patternPlugins/email.js +0 -13
- package/validators/patternPlugins/email.js.map +0 -1
- package/validators/patternPlugins/index.d.ts +0 -2
- package/validators/patternPlugins/index.js +0 -11
- package/validators/patternPlugins/index.js.map +0 -1
- package/validators/patternPlugins/lowerCase.d.ts +0 -2
- package/validators/patternPlugins/lowerCase.js +0 -13
- package/validators/patternPlugins/lowerCase.js.map +0 -1
- package/validators/patternPlugins/lowerCaseSpace.d.ts +0 -2
- package/validators/patternPlugins/lowerCaseSpace.js +0 -13
- package/validators/patternPlugins/lowerCaseSpace.js.map +0 -1
- package/validators/patternPlugins/upperCase.d.ts +0 -2
- package/validators/patternPlugins/upperCase.js +0 -13
- package/validators/patternPlugins/upperCase.js.map +0 -1
- package/validators/patternPlugins/upperCaseSpace.d.ts +0 -2
- package/validators/patternPlugins/upperCaseSpace.js +0 -13
- package/validators/patternPlugins/upperCaseSpace.js.map +0 -1
- package/validators/patternPlugins/url.d.ts +0 -2
- package/validators/patternPlugins/url.js +0 -13
- package/validators/patternPlugins/url.js.map +0 -1
- package/validators/required.d.ts +0 -2
- package/validators/required.js +0 -17
- package/validators/required.js.map +0 -1
- package/validators/timeGte.d.ts +0 -2
- package/validators/timeGte.js +0 -20
- package/validators/timeGte.js.map +0 -1
- package/validators/timeLte.d.ts +0 -2
- package/validators/timeLte.js +0 -20
- package/validators/timeLte.js.map +0 -1
- package/validators/unique.d.ts +0 -6
- package/validators/unique.js +0 -57
- package/validators/unique.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["gql","generateAlphaNumericId","WebinyError","createManageSDL","createFieldStorageId","getBaseFieldType","getContentModelTitleFieldId","getContentModelDescriptionFieldId","getContentModelImageFieldId","CmsGraphQLSchemaPlugin","CmsGraphQLSchemaSorterPlugin","buildSchemaPlugins","createExecutableSchema","extractInvalidField","model","err","sdl","source","body","line","lineNumber","locations","sdlLines","split","sdlLine","gqlType","i","includes","match","invalidField","undefined","Array","isArray","fieldRegex","RegExp","matched","message","data","modelId","code","join","createValidateChildFields","plugins","fields","originalFields","length","validateFields","params","idList","fieldIdList","storageIdList","field","baseType","plugin","find","fieldType","Error","id","storageId","fieldId","push","originalField","f","label","validateChildFields","validate","createGraphQLSchema","context","models","security","withoutAuthorization","cms","listModels","filter","isPrivate","modelPlugins","m","concat","byType","type","isApplicable","reduce","collection","name","Object","values","extractErrorObject","error","output","key","validateModelFields","original","titleFieldId","descriptionFieldId","imageFieldId","fieldTypePlugins","sorterPlugins","schema","acc","pl"],"sources":["modelFields.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { generateAlphaNumericId } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport type {\n CmsContext,\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin,\n CmsModelFieldToGraphQLPluginValidateChildFieldsValidate\n} from \"~/types/index.js\";\nimport { createManageSDL } from \"~/graphql/schema/createManageSDL.js\";\nimport { createFieldStorageId } from \"../createFieldStorageId.js\";\nimport type { GraphQLError } from \"graphql\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport { getContentModelTitleFieldId } from \"./fields/titleField.js\";\nimport { getContentModelDescriptionFieldId } from \"./fields/descriptionField.js\";\nimport { getContentModelImageFieldId } from \"./fields/imageField.js\";\nimport type { ICmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { CmsGraphQLSchemaPlugin, CmsGraphQLSchemaSorterPlugin } from \"~/plugins/index.js\";\nimport { buildSchemaPlugins } from \"~/graphql/buildSchemaPlugins.js\";\nimport { createExecutableSchema } from \"~/graphql/createExecutableSchema.js\";\n\nconst extractInvalidField = (model: CmsModel, err: GraphQLError) => {\n const sdl = err.source?.body || \"\";\n\n /**\n * Find the invalid type\n */\n const { line: lineNumber } = err.locations\n ? err.locations[0]\n : {\n line: 0\n };\n const sdlLines = sdl.split(\"\\n\");\n let sdlLine;\n let gqlType;\n for (let i = lineNumber; i > 0; i--) {\n if (sdlLine && sdlLine.includes(\"type \")) {\n gqlType = sdlLine.match(/type\\s+(.*?)\\s+{/);\n break;\n }\n\n sdlLine = sdlLines[i];\n }\n\n let invalidField: string | undefined = undefined;\n if (Array.isArray(gqlType)) {\n const fieldRegex = new RegExp(`([^\\\\s+].*?):\\\\s+\\\\[?${gqlType[1]}!?\\\\]?`);\n\n const matched = sdl.match(fieldRegex);\n if (matched) {\n invalidField = matched[1];\n }\n }\n\n let message = `See more details in the browser console.`;\n if (invalidField) {\n message = `Please review the definition of \"${invalidField}\" field.`;\n }\n\n return {\n data: {\n modelId: model.modelId,\n sdl,\n invalidField\n },\n code: \"INVALID_MODEL_DEFINITION\",\n message: [`Model \"${model.modelId}\" was not saved!`, message].join(\"\\n\")\n };\n};\n\nconst createValidateChildFields = (\n plugins: CmsModelFieldToGraphQLPlugin[]\n): CmsModelFieldToGraphQLPluginValidateChildFieldsValidate => {\n return ({ fields, originalFields }) => {\n if (fields.length === 0 && originalFields.length === 0) {\n return;\n }\n validateFields({\n fields,\n originalFields,\n plugins\n });\n };\n};\n\ninterface ValidateFieldsParams {\n plugins: CmsModelFieldToGraphQLPlugin[];\n fields: CmsModelField[];\n originalFields: CmsModelField[];\n}\n\nconst validateFields = (params: ValidateFieldsParams) => {\n const { plugins, fields, originalFields } = params;\n\n const idList: string[] = [];\n const fieldIdList: string[] = [];\n const storageIdList: string[] = [];\n\n for (const field of fields) {\n const baseType = getBaseFieldType(field);\n const plugin = plugins.find(plugin => plugin.fieldType === baseType);\n\n if (!plugin) {\n throw new Error(\n `Cannot update content model because of the unknown \"${baseType}\" field.`\n );\n }\n /**\n * Check the field's id against existing ones.\n * There cannot be two fields with the same id.\n */\n if (idList.includes(field.id)) {\n throw new WebinyError(\n `Cannot update content model because field \"${\n field.storageId || field.fieldId\n }\" has id \"${field.id}\", which is already used.`\n );\n }\n idList.push(field.id);\n\n const originalField = originalFields.find(f => f.id === field.id);\n /**\n * Field MUST have an fieldId defined.\n */\n if (!field.fieldId) {\n throw new WebinyError(`Field does not have an \"fieldId\" defined.`, \"MISSING_FIELD_ID\", {\n field\n });\n }\n /**\n * If storageId does not match a certain pattern, add that pattern, but only if field is not locked (used) already.\n * This is to avoid errors in the already installed systems.\n *\n * Why are we using the @?\n *\n * It is not part of special characters for the query syntax in the Lucene.\n *\n * Relevant links:\n * https://lucene.apache.org/core/3_4_0/queryparsersyntax.html\n * https://discuss.elastic.co/t/special-characters-in-field-names/10658/3\n * https://discuss.elastic.co/t/illegal-characters-in-elasticsearch-field-names/17196/2\n */\n if (!field.storageId) {\n /**\n * When having an original field, set the storageId to value from the originalField\n */\n if (originalField) {\n field.storageId = originalField.storageId;\n } else {\n field.storageId = createFieldStorageId(field);\n }\n }\n /**\n * Check the field's fieldId against existing ones.\n * There cannot be two fields with the same fieldId - outside world identifier.\n */\n if (fieldIdList.includes(field.fieldId)) {\n throw new WebinyError(\n `Cannot update content model because field \"${field.storageId}\" has fieldId \"${field.fieldId}\", which is already used.`\n );\n }\n fieldIdList.push(field.fieldId);\n /**\n * Check the field's storageId against the existing ones.\n * There cannot be two fields with the same storageId.\n */\n if (storageIdList.includes(field.storageId)) {\n throw new WebinyError(\n `Cannot update content model because field \"${field.label}\" has storageId \"${field.storageId}\", which is already used.`\n );\n }\n storageIdList.push(field.storageId);\n /**\n * There might be some plugins which allow child fields.\n * We use this method to validate them as well.\n */\n if (!plugin.validateChildFields) {\n continue;\n }\n const validateChildFields = createValidateChildFields(plugins);\n plugin.validateChildFields({\n field,\n originalField,\n validate: validateChildFields\n });\n }\n};\n\ninterface CreateGraphQLSchemaParams {\n context: CmsContext;\n model: CmsModel;\n}\n\nconst createGraphQLSchema = async (params: CreateGraphQLSchemaParams): Promise<any> => {\n const { context, model } = params;\n\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.cms.listModels()).filter((model): model is CmsModel => {\n return model.isPrivate !== true;\n });\n });\n\n const modelPlugins = await buildSchemaPlugins({\n context,\n /**\n * Must remove the current model from the list, as we are possibly updating it - there would be two if we didn't.\n */\n models: models.filter(m => m.modelId !== model.modelId).concat([model])\n });\n\n const plugins = context.plugins\n .byType<ICmsGraphQLSchemaPlugin>(CmsGraphQLSchemaPlugin.type)\n .filter(plugin => plugin.isApplicable(context))\n .reduce<Record<string, ICmsGraphQLSchemaPlugin>>((collection, plugin) => {\n const name =\n plugin.name || `${CmsGraphQLSchemaPlugin.type}-${generateAlphaNumericId(16)}`;\n collection[name] = plugin;\n return collection;\n }, {});\n for (const plugin of modelPlugins) {\n const name = plugin.name || `${plugin.type}-${generateAlphaNumericId(16)}`;\n plugins[name] = plugin;\n }\n\n return createExecutableSchema({\n plugins: Object.values(plugins)\n });\n};\n\nconst extractErrorObject = (error: any) => {\n return [\"message\", \"code\", \"data\", \"stack\"].reduce<Record<string, any>>((output, key) => {\n if (!error[key]) {\n return output;\n }\n output[key] = error[key];\n return output;\n }, {});\n};\n\ninterface ValidateModelFieldsParams {\n models: CmsModel[];\n model: CmsModel;\n original?: CmsModel;\n context: CmsContext;\n}\n\nexport const validateModelFields = async (params: ValidateModelFieldsParams): Promise<void> => {\n const { models, model, original, context } = params;\n const { titleFieldId, descriptionFieldId, imageFieldId } = model;\n const { plugins } = context;\n\n /**\n * There should be fields/locked fields in either model or data to be updated.\n */\n const { fields = [] } = model;\n\n /**\n * Let's inspect the fields of the received content model. We prevent saving of a content model if it\n * contains a field for which a \"cms-model-field-to-graphql\" plugin does not exist on the backend.\n */\n const fieldTypePlugins = plugins.byType<CmsModelFieldToGraphQLPlugin>(\n \"cms-model-field-to-graphql\"\n );\n\n validateFields({\n fields,\n originalFields: original?.fields || [],\n plugins: fieldTypePlugins\n });\n\n if (fields.length) {\n const sorterPlugins = plugins.byType<CmsGraphQLSchemaSorterPlugin>(\n CmsGraphQLSchemaSorterPlugin.type\n );\n /**\n * Make sure that this model can be safely converted to a GraphQL SDL\n */\n const schema = createManageSDL({\n models,\n model,\n fieldTypePlugins: fieldTypePlugins.reduce(\n (acc, pl) => ({ ...acc, [pl.fieldType]: pl }),\n {}\n ),\n sorterPlugins\n });\n\n try {\n gql(schema);\n } catch (err) {\n throw new WebinyError(extractInvalidField(model, err));\n }\n /**\n *\n */\n try {\n await createGraphQLSchema({\n context,\n model\n });\n } catch (err) {\n throw new WebinyError({\n message:\n \"Cannot generate GraphQL schema when testing with the given model. Please check the response for more details.\",\n code: \"GRAPHQL_SCHEMA_ERROR\",\n data: {\n modelId: model.modelId,\n error: extractErrorObject(err)\n }\n });\n }\n }\n\n model.titleFieldId = getContentModelTitleFieldId(fields, titleFieldId);\n model.descriptionFieldId = getContentModelDescriptionFieldId(fields, descriptionFieldId);\n model.imageFieldId = getContentModelImageFieldId(fields, imageFieldId);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["gql","generateAlphaNumericId","WebinyError","createManageSDL","createFieldStorageId","getBaseFieldType","getContentModelTitleFieldId","getContentModelDescriptionFieldId","getContentModelImageFieldId","CmsGraphQLSchemaPlugin","buildSchemaPlugins","createExecutableSchema","CmsGraphQLSchemaSorter","CmsModelFieldToGraphQLRegistry","extractInvalidField","model","err","sdl","source","body","line","lineNumber","locations","sdlLines","split","sdlLine","gqlType","i","includes","match","invalidField","undefined","Array","isArray","fieldRegex","RegExp","matched","message","data","modelId","code","join","createValidateChildFields","registry","fields","originalFields","length","validateFields","params","idList","fieldIdList","storageIdList","field","baseType","fieldImpl","get","Error","id","storageId","fieldId","push","originalField","find","f","label","validateChildFields","validate","createGraphQLSchema","context","models","security","withoutAuthorization","cms","listModels","filter","isPrivate","modelPlugins","m","concat","plugins","byType","type","plugin","isApplicable","reduce","collection","name","Object","values","extractErrorObject","error","output","key","validateModelFields","original","titleFieldId","descriptionFieldId","imageFieldId","fieldRegistry","container","resolve","sorters","resolveAll","schema"],"sources":["modelFields.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { generateAlphaNumericId } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport type { CmsContext, CmsModel, CmsModelField } from \"~/types/index.js\";\nimport type { ValidateChildFieldsValidate } from \"~/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js\";\nimport { createManageSDL } from \"~/graphql/schema/createManageSDL.js\";\nimport { createFieldStorageId } from \"../createFieldStorageId.js\";\nimport type { GraphQLError } from \"graphql\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport { getContentModelTitleFieldId } from \"./fields/titleField.js\";\nimport { getContentModelDescriptionFieldId } from \"./fields/descriptionField.js\";\nimport { getContentModelImageFieldId } from \"./fields/imageField.js\";\nimport type { ICmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { CmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { buildSchemaPlugins } from \"~/graphql/buildSchemaPlugins.js\";\nimport { createExecutableSchema } from \"~/graphql/createExecutableSchema.js\";\nimport {\n CmsGraphQLSchemaSorter,\n CmsModelFieldToGraphQLRegistry\n} from \"~/features/graphql/index.js\";\n\nconst extractInvalidField = (model: CmsModel, err: GraphQLError) => {\n const sdl = err.source?.body || \"\";\n\n /**\n * Find the invalid type\n */\n const { line: lineNumber } = err.locations\n ? err.locations[0]\n : {\n line: 0\n };\n const sdlLines = sdl.split(\"\\n\");\n let sdlLine;\n let gqlType;\n for (let i = lineNumber; i > 0; i--) {\n if (sdlLine && sdlLine.includes(\"type \")) {\n gqlType = sdlLine.match(/type\\s+(.*?)\\s+{/);\n break;\n }\n\n sdlLine = sdlLines[i];\n }\n\n let invalidField: string | undefined = undefined;\n if (Array.isArray(gqlType)) {\n const fieldRegex = new RegExp(`([^\\\\s+].*?):\\\\s+\\\\[?${gqlType[1]}!?\\\\]?`);\n\n const matched = sdl.match(fieldRegex);\n if (matched) {\n invalidField = matched[1];\n }\n }\n\n let message = `See more details in the browser console.`;\n if (invalidField) {\n message = `Please review the definition of \"${invalidField}\" field.`;\n }\n\n return {\n data: {\n modelId: model.modelId,\n sdl,\n invalidField\n },\n code: \"INVALID_MODEL_DEFINITION\",\n message: [`Model \"${model.modelId}\" was not saved!`, message].join(\"\\n\")\n };\n};\n\nconst createValidateChildFields = (\n registry: CmsModelFieldToGraphQLRegistry.Interface\n): ValidateChildFieldsValidate => {\n return ({ fields, originalFields }) => {\n if (fields.length === 0 && originalFields.length === 0) {\n return;\n }\n validateFields({\n fields,\n originalFields,\n registry\n });\n };\n};\n\ninterface ValidateFieldsParams {\n registry: CmsModelFieldToGraphQLRegistry.Interface;\n fields: CmsModelField[];\n originalFields: CmsModelField[];\n}\n\nconst validateFields = (params: ValidateFieldsParams) => {\n const { registry, fields, originalFields } = params;\n\n const idList: string[] = [];\n const fieldIdList: string[] = [];\n const storageIdList: string[] = [];\n\n for (const field of fields) {\n const baseType = getBaseFieldType(field);\n const fieldImpl = registry.get(baseType);\n\n if (!fieldImpl) {\n throw new Error(\n `Cannot update content model because of the unknown \"${baseType}\" field.`\n );\n }\n /**\n * Check the field's id against existing ones.\n * There cannot be two fields with the same id.\n */\n if (idList.includes(field.id)) {\n throw new WebinyError(\n `Cannot update content model because field \"${\n field.storageId || field.fieldId\n }\" has id \"${field.id}\", which is already used.`\n );\n }\n idList.push(field.id);\n\n const originalField = originalFields.find(f => f.id === field.id);\n /**\n * Field MUST have an fieldId defined.\n */\n if (!field.fieldId) {\n throw new WebinyError(`Field does not have an \"fieldId\" defined.`, \"MISSING_FIELD_ID\", {\n field\n });\n }\n /**\n * If storageId does not match a certain pattern, add that pattern, but only if field is not locked (used) already.\n * This is to avoid errors in the already installed systems.\n *\n * Why are we using the @?\n *\n * It is not part of special characters for the query syntax in the Lucene.\n *\n * Relevant links:\n * https://lucene.apache.org/core/3_4_0/queryparsersyntax.html\n * https://discuss.elastic.co/t/special-characters-in-field-names/10658/3\n * https://discuss.elastic.co/t/illegal-characters-in-elasticsearch-field-names/17196/2\n */\n if (!field.storageId) {\n /**\n * When having an original field, set the storageId to value from the originalField\n */\n if (originalField) {\n field.storageId = originalField.storageId;\n } else {\n field.storageId = createFieldStorageId(field);\n }\n }\n /**\n * Check the field's fieldId against existing ones.\n * There cannot be two fields with the same fieldId - outside world identifier.\n */\n if (fieldIdList.includes(field.fieldId)) {\n throw new WebinyError(\n `Cannot update content model because field \"${field.storageId}\" has fieldId \"${field.fieldId}\", which is already used.`\n );\n }\n fieldIdList.push(field.fieldId);\n /**\n * Check the field's storageId against the existing ones.\n * There cannot be two fields with the same storageId.\n */\n if (storageIdList.includes(field.storageId)) {\n throw new WebinyError(\n `Cannot update content model because field \"${field.label}\" has storageId \"${field.storageId}\", which is already used.`\n );\n }\n storageIdList.push(field.storageId);\n /**\n * There might be some plugins which allow child fields.\n * We use this method to validate them as well.\n */\n if (!fieldImpl.validateChildFields) {\n continue;\n }\n const validateChildFields = createValidateChildFields(registry);\n fieldImpl.validateChildFields({\n field,\n originalField,\n validate: validateChildFields\n });\n }\n};\n\ninterface CreateGraphQLSchemaParams {\n context: CmsContext;\n model: CmsModel;\n}\n\nconst createGraphQLSchema = async (params: CreateGraphQLSchemaParams): Promise<any> => {\n const { context, model } = params;\n\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.cms.listModels()).filter((model): model is CmsModel => {\n return model.isPrivate !== true;\n });\n });\n\n const modelPlugins = await buildSchemaPlugins({\n context,\n /**\n * Must remove the current model from the list, as we are possibly updating it - there would be two if we didn't.\n */\n models: models.filter(m => m.modelId !== model.modelId).concat([model])\n });\n\n const plugins = context.plugins\n .byType<ICmsGraphQLSchemaPlugin>(CmsGraphQLSchemaPlugin.type)\n .filter(plugin => plugin.isApplicable(context))\n .reduce<Record<string, ICmsGraphQLSchemaPlugin>>((collection, plugin) => {\n const name =\n plugin.name || `${CmsGraphQLSchemaPlugin.type}-${generateAlphaNumericId(16)}`;\n collection[name] = plugin;\n return collection;\n }, {});\n for (const plugin of modelPlugins) {\n const name = plugin.name || `${plugin.type}-${generateAlphaNumericId(16)}`;\n plugins[name] = plugin;\n }\n\n return createExecutableSchema({\n plugins: Object.values(plugins)\n });\n};\n\nconst extractErrorObject = (error: any) => {\n return [\"message\", \"code\", \"data\", \"stack\"].reduce<Record<string, any>>((output, key) => {\n if (!error[key]) {\n return output;\n }\n output[key] = error[key];\n return output;\n }, {});\n};\n\ninterface ValidateModelFieldsParams {\n models: CmsModel[];\n model: CmsModel;\n original?: CmsModel;\n context: CmsContext;\n}\n\nexport const validateModelFields = async (params: ValidateModelFieldsParams): Promise<void> => {\n const { models, model, original, context } = params;\n const { titleFieldId, descriptionFieldId, imageFieldId } = model;\n\n /**\n * There should be fields/locked fields in either model or data to be updated.\n */\n const { fields = [] } = model;\n\n /**\n * Let's inspect the fields of the received content model. We prevent saving of a content model if it\n * contains a field for which a \"cms-model-field-to-graphql\" plugin does not exist on the backend.\n */\n const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);\n const sorters = context.container.resolveAll(CmsGraphQLSchemaSorter);\n\n validateFields({\n fields,\n originalFields: original?.fields || [],\n registry: fieldRegistry\n });\n\n if (fields.length) {\n /**\n * Make sure that this model can be safely converted to a GraphQL SDL\n */\n const schema = createManageSDL({\n models,\n model,\n fieldRegistry,\n sorters\n });\n\n try {\n gql(schema);\n } catch (err) {\n throw new WebinyError(extractInvalidField(model, err));\n }\n /**\n *\n */\n try {\n await createGraphQLSchema({\n context,\n model\n });\n } catch (err) {\n throw new WebinyError({\n message:\n \"Cannot generate GraphQL schema when testing with the given model. Please check the response for more details.\",\n code: \"GRAPHQL_SCHEMA_ERROR\",\n data: {\n modelId: model.modelId,\n error: extractErrorObject(err)\n }\n });\n }\n }\n\n model.titleFieldId = getContentModelTitleFieldId(fields, titleFieldId);\n model.descriptionFieldId = getContentModelDescriptionFieldId(fields, descriptionFieldId);\n model.imageFieldId = getContentModelImageFieldId(fields, imageFieldId);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CmsModelFieldToGraphQL, CmsModelFieldToGraphQLRegistry, CmsGraphQLSchemaSorter } from "../../../features/graphql/index.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CmsModelFieldToGraphQL","CmsModelFieldToGraphQLRegistry","CmsGraphQLSchemaSorter"],"sources":["graphql.ts"],"sourcesContent":["export {\n CmsModelFieldToGraphQL,\n CmsModelFieldToGraphQLRegistry,\n CmsGraphQLSchemaSorter\n} from \"~/features/graphql/index.js\";\n"],"mappings":"AAAA,SACIA,sBAAsB,EACtBC,8BAA8B,EAC9BC,sBAAsB","ignoreList":[]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { StorageOperationsFactory } from "../../../features/shared/abstractions.js";
|
|
2
|
+
export { StorageTransform } from "../../../features/storage/abstractions/StorageTransform.js";
|
|
3
|
+
export { StorageTransformRegistry } from "../../../features/storage/abstractions/StorageTransformRegistry.js";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { StorageOperationsFactory } from "../../../features/shared/abstractions.js";
|
|
2
|
+
export { StorageTransform } from "../../../features/storage/abstractions/StorageTransform.js";
|
|
3
|
+
export { StorageTransformRegistry } from "../../../features/storage/abstractions/StorageTransformRegistry.js";
|
|
4
|
+
|
|
5
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StorageOperationsFactory","StorageTransform","StorageTransformRegistry"],"sources":["storage.ts"],"sourcesContent":["export { StorageOperationsFactory } from \"~/features/shared/abstractions.js\";\nexport { StorageTransform } from \"~/features/storage/abstractions/StorageTransform.js\";\nexport { StorageTransformRegistry } from \"~/features/storage/abstractions/StorageTransformRegistry.js\";\n"],"mappings":"AAAA,SAASA,wBAAwB;AACjC,SAASC,gBAAgB;AACzB,SAASC,wBAAwB","ignoreList":[]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { CmsModelFieldValidator } from "../../../features/validation/abstractions/CmsModelFieldValidator.js";
|
|
2
|
+
export { CmsModelFieldPatternValidator } from "../../../features/validation/abstractions/CmsModelFieldPatternValidator.js";
|
|
3
|
+
export { CmsModelFieldValidatorRegistry } from "../../../features/validation/abstractions/CmsModelFieldValidatorRegistry.js";
|
|
4
|
+
export { CmsModelFieldPatternValidatorRegistry } from "../../../features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { CmsModelFieldValidator } from "../../../features/validation/abstractions/CmsModelFieldValidator.js";
|
|
2
|
+
export { CmsModelFieldPatternValidator } from "../../../features/validation/abstractions/CmsModelFieldPatternValidator.js";
|
|
3
|
+
export { CmsModelFieldValidatorRegistry } from "../../../features/validation/abstractions/CmsModelFieldValidatorRegistry.js";
|
|
4
|
+
export { CmsModelFieldPatternValidatorRegistry } from "../../../features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js";
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CmsModelFieldValidator","CmsModelFieldPatternValidator","CmsModelFieldValidatorRegistry","CmsModelFieldPatternValidatorRegistry"],"sources":["validation.ts"],"sourcesContent":["export { CmsModelFieldValidator } from \"~/features/validation/abstractions/CmsModelFieldValidator.js\";\nexport { CmsModelFieldPatternValidator } from \"~/features/validation/abstractions/CmsModelFieldPatternValidator.js\";\nexport { CmsModelFieldValidatorRegistry } from \"~/features/validation/abstractions/CmsModelFieldValidatorRegistry.js\";\nexport { CmsModelFieldPatternValidatorRegistry } from \"~/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js\";\n"],"mappings":"AAAA,SAASA,sBAAsB;AAC/B,SAASC,6BAA6B;AACtC,SAASC,8BAA8B;AACvC,SAASC,qCAAqC","ignoreList":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { CreateEntryRepository, CreateEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
3
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
3
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
4
4
|
import { AccessControl, CmsContext } from "../../../features/shared/abstractions.js";
|
|
5
5
|
import type { CmsEntry, CmsEntryValues, CmsModel, CreateCmsEntryInput, CreateCmsEntryOptionsInput } from "../../../types/index.js";
|
|
6
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
7
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
6
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
7
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
8
8
|
/**
|
|
9
9
|
* CreateEntryUseCase - Orchestrates entry creation.
|
|
10
10
|
*
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createImplementation, Result } from "@webiny/feature/api";
|
|
2
2
|
import { CreateEntryRepository, CreateEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
3
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
3
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
4
4
|
import { EntryAfterCreateEvent, EntryBeforeCreateEvent } from "./events.js";
|
|
5
5
|
import { AccessControl, CmsContext } from "../../shared/abstractions.js";
|
|
6
6
|
import { EntryNotAuthorizedError, EntryValidationError } from "../../../domain/contentEntry/errors.js";
|
|
7
7
|
import { createEntryData } from "../../../crud/contentEntry/entryDataFactories/createEntryData.js";
|
|
8
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
9
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
8
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
9
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* CreateEntryUseCase - Orchestrates entry creation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createImplementation","Result","CreateEntryRepository","CreateEntryUseCase","UseCaseAbstraction","EventPublisher","EntryAfterCreateEvent","EntryBeforeCreateEvent","AccessControl","CmsContext","EntryNotAuthorizedError","EntryValidationError","createEntryData","TenantContext","IdentityContext","CreateEntryUseCaseImpl","constructor","eventPublisher","repository","accessControl","tenantContext","identityContext","cmsContext","execute","model","rawInput","options","canAccess","canAccessEntry","rwd","fail","fromModel","entry","input","context","getIdentity","getTenant","fromEntry","publish","result","isFail","error","ok","code","message","data","abstraction","implementation","dependencies"],"sources":["CreateEntryUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { CreateEntryRepository, CreateEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createImplementation","Result","CreateEntryRepository","CreateEntryUseCase","UseCaseAbstraction","EventPublisher","EntryAfterCreateEvent","EntryBeforeCreateEvent","AccessControl","CmsContext","EntryNotAuthorizedError","EntryValidationError","createEntryData","TenantContext","IdentityContext","CreateEntryUseCaseImpl","constructor","eventPublisher","repository","accessControl","tenantContext","identityContext","cmsContext","execute","model","rawInput","options","canAccess","canAccessEntry","rwd","fail","fromModel","entry","input","context","getIdentity","getTenant","fromEntry","publish","result","isFail","error","ok","code","message","data","abstraction","implementation","dependencies"],"sources":["CreateEntryUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { CreateEntryRepository, CreateEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { EntryAfterCreateEvent, EntryBeforeCreateEvent } from \"./events.js\";\nimport { AccessControl, CmsContext } from \"~/features/shared/abstractions.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { EntryNotAuthorizedError, EntryValidationError } from \"~/domain/contentEntry/errors.js\";\nimport { createEntryData } from \"~/crud/contentEntry/entryDataFactories/createEntryData.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\n\n/**\n * CreateEntryUseCase - Orchestrates entry creation.\n *\n * Responsibilities:\n * - Transform raw input to domain entry\n * - Apply access control\n * - Publish domain events\n * - Delegate persistence to repository\n */\nclass CreateEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private eventPublisher: EventPublisher.Interface,\n private repository: CreateEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private tenantContext: TenantContext.Interface,\n private identityContext: IdentityContext.Interface,\n private cmsContext: CmsContext.Interface\n ) {}\n\n public async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n // Check initial access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n try {\n // Transform raw input to domain entry\n const { entry, input } = await createEntryData<T>({\n model,\n rawInput,\n options,\n context: this.cmsContext,\n getIdentity: () => this.identityContext.getIdentity(),\n getTenant: () => this.tenantContext.getTenant(),\n accessControl: this.accessControl\n });\n\n // Apply access control on the created entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromEntry(entry));\n }\n\n // Publish before event\n await this.eventPublisher.publish(new EntryBeforeCreateEvent({ entry, input, model }));\n\n // Persist entry\n const result = await this.repository.execute(model, entry);\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterCreateEvent({\n entry,\n input,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n if (error.code === \"VALIDATION_FAILED\") {\n return Result.fail(new EntryValidationError(error.message, error.data));\n }\n // Handle errors from createEntryData or other operations\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const CreateEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateEntryUseCaseImpl,\n dependencies: [\n EventPublisher,\n CreateEntryRepository,\n AccessControl,\n TenantContext,\n IdentityContext,\n CmsContext\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IEventHandler } from "@webiny/api-core/features/
|
|
2
|
-
import { DomainEvent } from "@webiny/api-core/features/
|
|
1
|
+
import type { IEventHandler } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
import type { CmsEntry, CmsModel, CreateCmsEntryInput } from "../../../types/index.js";
|
|
4
4
|
/**
|
|
5
5
|
* Event payloads
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforeCreateEvent","eventType","getHandlerAbstraction","EntryBeforeCreateEventHandler","EntryAfterCreateEvent","EntryAfterCreateEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforeCreateEvent","eventType","getHandlerAbstraction","EntryBeforeCreateEventHandler","EntryAfterCreateEvent","EntryAfterCreateEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { CmsEntry, CmsModel, CreateCmsEntryInput } from \"~/types/index.js\";\n\n/**\n * Event payloads\n */\nexport interface EntryBeforeCreateEventPayload {\n entry: CmsEntry;\n input: CreateCmsEntryInput;\n model: CmsModel;\n}\n\nexport interface EntryAfterCreateEventPayload {\n entry: CmsEntry;\n input: CreateCmsEntryInput;\n model: CmsModel;\n}\n\n/**\n * EntryBeforeCreateEvent - Published before creating an entry\n */\nexport class EntryBeforeCreateEvent extends DomainEvent<EntryBeforeCreateEventPayload> {\n eventType = \"Cms/Entry/BeforeCreate\" as const;\n\n getHandlerAbstraction() {\n return EntryBeforeCreateEventHandler;\n }\n}\n\n/** Hook into entry lifecycle before an entry is created. */\nexport const EntryBeforeCreateEventHandler = createAbstraction<\n IEventHandler<EntryBeforeCreateEvent>\n>(\"EntryBeforeCreateEventHandler\");\n\nexport namespace EntryBeforeCreateEventHandler {\n export type Interface = IEventHandler<EntryBeforeCreateEvent>;\n export type Event = EntryBeforeCreateEvent;\n}\n\n/**\n * EntryAfterCreateEvent - Published after creating an entry\n */\nexport class EntryAfterCreateEvent extends DomainEvent<EntryAfterCreateEventPayload> {\n eventType = \"Cms/Entry/AfterCreate\" as const;\n\n getHandlerAbstraction() {\n return EntryAfterCreateEventHandler;\n }\n}\n\n/** Hook into entry lifecycle after an entry is created. */\nexport const EntryAfterCreateEventHandler = createAbstraction<IEventHandler<EntryAfterCreateEvent>>(\n \"EntryAfterCreateEventHandler\"\n);\n\nexport namespace EntryAfterCreateEventHandler {\n export type Interface = IEventHandler<EntryAfterCreateEvent>;\n export type Event = EntryAfterCreateEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAEvD,SAASC,WAAW,QAAQ,mDAAmD;;AAG/E;AACA;AACA;;AAaA;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,SAASD,WAAW,CAAgC;EACnFE,SAAS,GAAG,wBAAwB;EAEpCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,6BAA6B;EACxC;AACJ;;AAEA;AACA,OAAO,MAAMA,6BAA6B,GAAGL,iBAAiB,CAE5D,+BAA+B,CAAC;AAOlC;AACA;AACA;AACA,OAAO,MAAMM,qBAAqB,SAASL,WAAW,CAA+B;EACjFE,SAAS,GAAG,uBAAuB;EAEnCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,4BAA4B;EACvC;AACJ;;AAEA;AACA,OAAO,MAAMA,4BAA4B,GAAGP,iBAAiB,CACzD,8BACJ,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
3
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { CreateEntryRevisionFromRepository, CreateEntryRevisionFromUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
6
6
|
import { AccessControl, CmsContext } from "../../../features/shared/abstractions.js";
|
|
7
7
|
import { GetRevisionByIdUseCase } from "../../../features/contentEntry/GetRevisionById/index.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createImplementation, Result } from "@webiny/feature/api";
|
|
2
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
3
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { CreateEntryRevisionFromRepository, CreateEntryRevisionFromUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
6
6
|
import { AccessControl, CmsContext } from "../../shared/abstractions.js";
|
|
7
7
|
import { GetRevisionByIdUseCase } from "../GetRevisionById/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createImplementation","Result","IdentityContext","TenantContext","EventPublisher","CreateEntryRevisionFromRepository","CreateEntryRevisionFromUseCase","UseCaseAbstraction","AccessControl","CmsContext","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdUseCase","EntryRevisionAfterCreateEvent","EntryRevisionBeforeCreateEvent","EntryRevisionCreateErrorEvent","EntryNotAuthorizedError","parseIdentifier","createEntryRevisionFromData","CreateEntryRevisionFromUseCaseImpl","constructor","repository","accessControl","getRevisionById","getLatestRevision","identityContext","tenantContext","eventPublisher","cmsContext","execute","model","sourceId","rawInput","options","canAccess","canAccessEntry","rwd","fail","fromModel","id","uniqueId","originalResult","isFail","error","originalEntry","value","latestResult","latestStorageEntry","entry","input","context","getIdentity","getTenant","publish","original","result","createdEntry","ok","abstraction","implementation","dependencies"],"sources":["CreateEntryRevisionFromUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport { TenantContext } from \"@webiny/api-core/features/TenantContext\";\nimport { EventPublisher } from \"@webiny/api-core/features/EventPublisher\";\nimport {\n CreateEntryRevisionFromRepository,\n CreateEntryRevisionFromUseCase as UseCaseAbstraction\n} from \"./abstractions.js\";\nimport { AccessControl, CmsContext } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport {\n EntryRevisionAfterCreateEvent,\n EntryRevisionBeforeCreateEvent,\n EntryRevisionCreateErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { createEntryRevisionFromData } from \"~/crud/contentEntry/entryDataFactories/index.js\";\n\n/**\n * CreateEntryRevisionFromUseCase - Orchestrates creating a new revision from an existing entry.\n *\n * Responsibilities:\n * - Apply access control\n * - Get the source entry\n * - Get the latest revision for version calculation\n * - Prepare entry data with new version\n * - Validate entry data\n * - Apply additional access control based on status\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass CreateEntryRevisionFromUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: CreateEntryRevisionFromRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface,\n private identityContext: IdentityContext.Interface,\n private tenantContext: TenantContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private cmsContext: CmsContext.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the source entry\n const { id: uniqueId } = parseIdentifier(sourceId);\n const originalResult = await this.getRevisionById.execute<T>(model, sourceId);\n\n if (originalResult.isFail()) {\n return Result.fail(originalResult.error);\n }\n\n const originalEntry = originalResult.value;\n\n // Get the latest revision for version calculation\n const latestResult = await this.getLatestRevision.execute<T>(model, { id: uniqueId });\n\n if (latestResult.isFail()) {\n return Result.fail(latestResult.error);\n }\n\n const latestStorageEntry = latestResult.value;\n\n // Prepare entry data\n const { entry, input } = await createEntryRevisionFromData<T>({\n sourceId,\n model,\n rawInput,\n options,\n context: this.cmsContext,\n getIdentity: () => this.identityContext.getIdentity(),\n getTenant: () => this.tenantContext.getTenant(),\n originalEntry,\n latestStorageEntry,\n accessControl: this.accessControl as any\n });\n\n // Check access control on the prepared entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryRevisionBeforeCreateEvent({\n entry,\n model,\n input,\n original: originalEntry\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute<T>(model, entry);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n const createdEntry = result.value;\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryRevisionAfterCreateEvent({\n entry: createdEntry,\n model,\n input,\n original: originalEntry\n })\n );\n\n return Result.ok(createdEntry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const CreateEntryRevisionFromUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateEntryRevisionFromUseCaseImpl,\n dependencies: [\n CreateEntryRevisionFromRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdUseCase,\n IdentityContext,\n TenantContext,\n EventPublisher,\n CmsContext\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createImplementation","Result","IdentityContext","TenantContext","EventPublisher","CreateEntryRevisionFromRepository","CreateEntryRevisionFromUseCase","UseCaseAbstraction","AccessControl","CmsContext","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdUseCase","EntryRevisionAfterCreateEvent","EntryRevisionBeforeCreateEvent","EntryRevisionCreateErrorEvent","EntryNotAuthorizedError","parseIdentifier","createEntryRevisionFromData","CreateEntryRevisionFromUseCaseImpl","constructor","repository","accessControl","getRevisionById","getLatestRevision","identityContext","tenantContext","eventPublisher","cmsContext","execute","model","sourceId","rawInput","options","canAccess","canAccessEntry","rwd","fail","fromModel","id","uniqueId","originalResult","isFail","error","originalEntry","value","latestResult","latestStorageEntry","entry","input","context","getIdentity","getTenant","publish","original","result","createdEntry","ok","abstraction","implementation","dependencies"],"sources":["CreateEntryRevisionFromUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n CreateEntryRevisionFromRepository,\n CreateEntryRevisionFromUseCase as UseCaseAbstraction\n} from \"./abstractions.js\";\nimport { AccessControl, CmsContext } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport {\n EntryRevisionAfterCreateEvent,\n EntryRevisionBeforeCreateEvent,\n EntryRevisionCreateErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { createEntryRevisionFromData } from \"~/crud/contentEntry/entryDataFactories/index.js\";\n\n/**\n * CreateEntryRevisionFromUseCase - Orchestrates creating a new revision from an existing entry.\n *\n * Responsibilities:\n * - Apply access control\n * - Get the source entry\n * - Get the latest revision for version calculation\n * - Prepare entry data with new version\n * - Validate entry data\n * - Apply additional access control based on status\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass CreateEntryRevisionFromUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: CreateEntryRevisionFromRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface,\n private identityContext: IdentityContext.Interface,\n private tenantContext: TenantContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private cmsContext: CmsContext.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the source entry\n const { id: uniqueId } = parseIdentifier(sourceId);\n const originalResult = await this.getRevisionById.execute<T>(model, sourceId);\n\n if (originalResult.isFail()) {\n return Result.fail(originalResult.error);\n }\n\n const originalEntry = originalResult.value;\n\n // Get the latest revision for version calculation\n const latestResult = await this.getLatestRevision.execute<T>(model, { id: uniqueId });\n\n if (latestResult.isFail()) {\n return Result.fail(latestResult.error);\n }\n\n const latestStorageEntry = latestResult.value;\n\n // Prepare entry data\n const { entry, input } = await createEntryRevisionFromData<T>({\n sourceId,\n model,\n rawInput,\n options,\n context: this.cmsContext,\n getIdentity: () => this.identityContext.getIdentity(),\n getTenant: () => this.tenantContext.getTenant(),\n originalEntry,\n latestStorageEntry,\n accessControl: this.accessControl as any\n });\n\n // Check access control on the prepared entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryRevisionBeforeCreateEvent({\n entry,\n model,\n input,\n original: originalEntry\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute<T>(model, entry);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n const createdEntry = result.value;\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryRevisionAfterCreateEvent({\n entry: createdEntry,\n model,\n input,\n original: originalEntry\n })\n );\n\n return Result.ok(createdEntry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const CreateEntryRevisionFromUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateEntryRevisionFromUseCaseImpl,\n dependencies: [\n CreateEntryRevisionFromRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdUseCase,\n IdentityContext,\n TenantContext,\n EventPublisher,\n CmsContext\n ]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,EAAEC,MAAM,QAAQ,qBAAqB;AAClE,SAASC,eAAe,QAAQ,6DAA6D;AAC7F,SAASC,aAAa,QAAQ,0DAA0D;AACxF,SAASC,cAAc,QAAQ,mDAAmD;AAClF,SACIC,iCAAiC,EACjCC,8BAA8B,IAAIC,kBAAkB;AAExD,SAASC,aAAa,EAAEC,UAAU;AAClC,SAASC,sBAAsB;AAC/B,SAASC,iCAAiC;AAQ1C,SACIC,6BAA6B,EAC7BC,8BAA8B,EAC9BC,6BAA6B;AAEjC,SAASC,uBAAuB;AAChC,SAASC,eAAe,QAAQ,eAAe;AAC/C,SAASC,2BAA2B;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,kCAAkC,CAAyC;EACtEC,WAAWA,CACNC,UAAuD,EACvDC,aAAsC,EACtCC,eAAiD,EACjDC,iBAA8D,EAC9DC,eAA0C,EAC1CC,aAAsC,EACtCC,cAAwC,EACxCC,UAAgC,EAC1C;IAAA,KARUP,UAAuD,GAAvDA,UAAuD;IAAA,KACvDC,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,eAAiD,GAAjDA,eAAiD;IAAA,KACjDC,iBAA8D,GAA9DA,iBAA8D;IAAA,KAC9DC,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,UAAgC,GAAhCA,UAAgC;EACzC;EAEH,MAAMC,OAAOA,CACTC,KAAe,EACfC,QAAgB,EAChBC,QAAgC,EAChCC,OAAoC,EACkB;IACtD;IACA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACZ,aAAa,CAACa,cAAc,CAAC;MAAEL,KAAK;MAAEM,GAAG,EAAE;IAAI,CAAC,CAAC;IAC9E,IAAI,CAACF,SAAS,EAAE;MACZ,OAAOhC,MAAM,CAACmC,IAAI,CAACrB,uBAAuB,CAACsB,SAAS,CAACR,KAAK,CAAC,CAAC;IAChE;;IAEA;IACA,MAAM;MAAES,EAAE,EAAEC;IAAS,CAAC,GAAGvB,eAAe,CAACc,QAAQ,CAAC;IAClD,MAAMU,cAAc,GAAG,MAAM,IAAI,CAAClB,eAAe,CAACM,OAAO,CAAIC,KAAK,EAAEC,QAAQ,CAAC;IAE7E,IAAIU,cAAc,CAACC,MAAM,CAAC,CAAC,EAAE;MACzB,OAAOxC,MAAM,CAACmC,IAAI,CAACI,cAAc,CAACE,KAAK,CAAC;IAC5C;IAEA,MAAMC,aAAa,GAAGH,cAAc,CAACI,KAAK;;IAE1C;IACA,MAAMC,YAAY,GAAG,MAAM,IAAI,CAACtB,iBAAiB,CAACK,OAAO,CAAIC,KAAK,EAAE;MAAES,EAAE,EAAEC;IAAS,CAAC,CAAC;IAErF,IAAIM,YAAY,CAACJ,MAAM,CAAC,CAAC,EAAE;MACvB,OAAOxC,MAAM,CAACmC,IAAI,CAACS,YAAY,CAACH,KAAK,CAAC;IAC1C;IAEA,MAAMI,kBAAkB,GAAGD,YAAY,CAACD,KAAK;;IAE7C;IACA,MAAM;MAAEG,KAAK;MAAEC;IAAM,CAAC,GAAG,MAAM/B,2BAA2B,CAAI;MAC1Da,QAAQ;MACRD,KAAK;MACLE,QAAQ;MACRC,OAAO;MACPiB,OAAO,EAAE,IAAI,CAACtB,UAAU;MACxBuB,WAAW,EAAEA,CAAA,KAAM,IAAI,CAAC1B,eAAe,CAAC0B,WAAW,CAAC,CAAC;MACrDC,SAAS,EAAEA,CAAA,KAAM,IAAI,CAAC1B,aAAa,CAAC0B,SAAS,CAAC,CAAC;MAC/CR,aAAa;MACbG,kBAAkB;MAClBzB,aAAa,EAAE,IAAI,CAACA;IACxB,CAAC,CAAC;;IAEF;IACA,MAAMa,cAAc,GAAG,MAAM,IAAI,CAACb,aAAa,CAACa,cAAc,CAAC;MAC3DL,KAAK;MACLkB,KAAK;MACLZ,GAAG,EAAE;IACT,CAAC,CAAC;IAEF,IAAI,CAACD,cAAc,EAAE;MACjB,OAAOjC,MAAM,CAACmC,IAAI,CAACrB,uBAAuB,CAACsB,SAAS,CAACR,KAAK,CAAC,CAAC;IAChE;IAEA,IAAI;MACA;MACA,MAAM,IAAI,CAACH,cAAc,CAAC0B,OAAO,CAC7B,IAAIvC,8BAA8B,CAAC;QAC/BkC,KAAK;QACLlB,KAAK;QACLmB,KAAK;QACLK,QAAQ,EAAEV;MACd,CAAC,CACL,CAAC;;MAED;MACA,MAAMW,MAAM,GAAG,MAAM,IAAI,CAAClC,UAAU,CAACQ,OAAO,CAAIC,KAAK,EAAEkB,KAAK,CAAC;MAE7D,IAAIO,MAAM,CAACb,MAAM,CAAC,CAAC,EAAE;QACjB,MAAM,IAAI,CAACf,cAAc,CAAC0B,OAAO,CAC7B,IAAItC,6BAA6B,CAAC;UAC9BiC,KAAK;UACLlB,KAAK;UACLmB,KAAK;UACLK,QAAQ,EAAEV,aAAa;UACvBD,KAAK,EAAEY,MAAM,CAACZ;QAClB,CAAC,CACL,CAAC;QACD,OAAOzC,MAAM,CAACmC,IAAI,CAACkB,MAAM,CAACZ,KAAK,CAAC;MACpC;MAEA,MAAMa,YAAY,GAAGD,MAAM,CAACV,KAAK;;MAEjC;MACA,MAAM,IAAI,CAAClB,cAAc,CAAC0B,OAAO,CAC7B,IAAIxC,6BAA6B,CAAC;QAC9BmC,KAAK,EAAEQ,YAAY;QACnB1B,KAAK;QACLmB,KAAK;QACLK,QAAQ,EAAEV;MACd,CAAC,CACL,CAAC;MAED,OAAO1C,MAAM,CAACuD,EAAE,CAACD,YAAY,CAAC;IAClC,CAAC,CAAC,OAAOb,KAAK,EAAE;MACZ,MAAM,IAAI,CAAChB,cAAc,CAAC0B,OAAO,CAC7B,IAAItC,6BAA6B,CAAC;QAC9BiC,KAAK;QACLlB,KAAK;QACLmB,KAAK;QACLK,QAAQ,EAAEV,aAAa;QACvBD,KAAK,EAAEA;MACX,CAAC,CACL,CAAC;MACD,OAAOzC,MAAM,CAACmC,IAAI,CAACM,KAAY,CAAC;IACpC;EACJ;AACJ;AAEA,OAAO,MAAMpC,8BAA8B,GAAGN,oBAAoB,CAAC;EAC/DyD,WAAW,EAAElD,kBAAkB;EAC/BmD,cAAc,EAAExC,kCAAkC;EAClDyC,YAAY,EAAE,CACVtD,iCAAiC,EACjCG,aAAa,EACbE,sBAAsB,EACtBC,iCAAiC,EACjCT,eAAe,EACfC,aAAa,EACbC,cAAc,EACdK,UAAU;AAElB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IEventHandler } from "@webiny/api-core/features/
|
|
2
|
-
import { DomainEvent } from "@webiny/api-core/features/
|
|
1
|
+
import type { IEventHandler } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
import type { EntryRevisionAfterCreateEventPayload, EntryRevisionBeforeCreateEventPayload, EntryRevisionCreateErrorEventPayload } from "./abstractions.js";
|
|
4
4
|
/**
|
|
5
5
|
* Before create entry revision event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","EntryRevisionBeforeCreateEvent","eventType","getHandlerAbstraction","EntryRevisionBeforeCreateEventHandler","EntryRevisionAfterCreateEvent","EntryRevisionAfterCreateEventHandler","EntryRevisionCreateErrorEvent","EntryRevisionCreateErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","EntryRevisionBeforeCreateEvent","eventType","getHandlerAbstraction","EntryRevisionBeforeCreateEventHandler","EntryRevisionAfterCreateEvent","EntryRevisionAfterCreateEventHandler","EntryRevisionCreateErrorEvent","EntryRevisionCreateErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type {\n EntryRevisionAfterCreateEventPayload,\n EntryRevisionBeforeCreateEventPayload,\n EntryRevisionCreateErrorEventPayload\n} from \"./abstractions.js\";\n\n/**\n * Before create entry revision event\n */\nexport class EntryRevisionBeforeCreateEvent extends DomainEvent<EntryRevisionBeforeCreateEventPayload> {\n eventType = \"Cms/Entry/RevisionBeforeCreate\" as const;\n\n getHandlerAbstraction() {\n return EntryRevisionBeforeCreateEventHandler;\n }\n}\n\n/** Hook into revision lifecycle before a revision is created. */\nexport const EntryRevisionBeforeCreateEventHandler = createAbstraction<\n IEventHandler<EntryRevisionBeforeCreateEvent>\n>(\"EntryRevisionBeforeCreateEventHandler\");\n\nexport namespace EntryRevisionBeforeCreateEventHandler {\n export type Interface = IEventHandler<EntryRevisionBeforeCreateEvent>;\n export type Event = EntryRevisionBeforeCreateEvent;\n}\n\n/**\n * After create entry revision event\n */\nexport class EntryRevisionAfterCreateEvent extends DomainEvent<EntryRevisionAfterCreateEventPayload> {\n eventType = \"Cms/Entry/RevisionAfterCreate\" as const;\n\n getHandlerAbstraction() {\n return EntryRevisionAfterCreateEventHandler;\n }\n}\n\n/** Hook into revision lifecycle after a revision is created. */\nexport const EntryRevisionAfterCreateEventHandler = createAbstraction<\n IEventHandler<EntryRevisionAfterCreateEvent>\n>(\"EntryRevisionAfterCreateEventHandler\");\n\nexport namespace EntryRevisionAfterCreateEventHandler {\n export type Interface = IEventHandler<EntryRevisionAfterCreateEvent>;\n export type Event = EntryRevisionAfterCreateEvent;\n}\n\n/**\n * Create entry revision error event\n */\nexport class EntryRevisionCreateErrorEvent extends DomainEvent<EntryRevisionCreateErrorEventPayload> {\n eventType = \"Cms/Entry/RevisionCreateError\" as const;\n\n getHandlerAbstraction() {\n return EntryRevisionCreateErrorEventHandler;\n }\n}\n\nexport const EntryRevisionCreateErrorEventHandler = createAbstraction<\n IEventHandler<EntryRevisionCreateErrorEvent>\n>(\"EntryRevisionCreateErrorEventHandler\");\n\nexport namespace EntryRevisionCreateErrorEventHandler {\n export type Interface = IEventHandler<EntryRevisionCreateErrorEvent>;\n export type Event = EntryRevisionCreateErrorEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAEvD,SAASC,WAAW,QAAQ,mDAAmD;AAO/E;AACA;AACA;AACA,OAAO,MAAMC,8BAA8B,SAASD,WAAW,CAAwC;EACnGE,SAAS,GAAG,gCAAgC;EAE5CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,qCAAqC;EAChD;AACJ;;AAEA;AACA,OAAO,MAAMA,qCAAqC,GAAGL,iBAAiB,CAEpE,uCAAuC,CAAC;AAO1C;AACA;AACA;AACA,OAAO,MAAMM,6BAA6B,SAASL,WAAW,CAAuC;EACjGE,SAAS,GAAG,+BAA+B;EAE3CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,oCAAoC;EAC/C;AACJ;;AAEA;AACA,OAAO,MAAMA,oCAAoC,GAAGP,iBAAiB,CAEnE,sCAAsC,CAAC;AAOzC;AACA;AACA;AACA,OAAO,MAAMQ,6BAA6B,SAASP,WAAW,CAAuC;EACjGE,SAAS,GAAG,+BAA+B;EAE3CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOK,oCAAoC;EAC/C;AACJ;AAEA,OAAO,MAAMA,oCAAoC,GAAGT,iBAAiB,CAEnE,sCAAsC,CAAC","ignoreList":[]}
|
|
@@ -4,7 +4,7 @@ import { DeleteEntryRepository } from "./abstractions.js";
|
|
|
4
4
|
import { AccessControl } from "../../../features/shared/abstractions.js";
|
|
5
5
|
import { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from "../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
|
|
6
6
|
import type { CmsDeleteEntryOptions, CmsModel } from "../../../types/index.js";
|
|
7
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
7
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
8
8
|
/**
|
|
9
9
|
* DeleteEntryUseCase - Orchestrates permanent deletion of an entry.
|
|
10
10
|
*
|
|
@@ -4,7 +4,7 @@ import { DeleteEntryUseCase as UseCaseAbstraction, MoveEntryToBinUseCase } from
|
|
|
4
4
|
import { DeleteEntryRepository } from "./abstractions.js";
|
|
5
5
|
import { AccessControl } from "../../shared/abstractions.js";
|
|
6
6
|
import { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from "../GetLatestRevisionByEntryId/index.js";
|
|
7
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
7
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
8
8
|
import { EntryBeforeDeleteEvent, EntryAfterDeleteEvent, EntryDeleteErrorEvent } from "./events.js";
|
|
9
9
|
import { EntryNotAuthorizedError } from "../../../domain/contentEntry/errors.js";
|
|
10
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","DeleteEntryUseCase","UseCaseAbstraction","MoveEntryToBinUseCase","DeleteEntryRepository","AccessControl","GetLatestRevisionByEntryIdIncludingDeletedUseCase","EventPublisher","EntryBeforeDeleteEvent","EntryAfterDeleteEvent","EntryDeleteErrorEvent","EntryNotAuthorizedError","DeleteEntryUseCaseImpl","constructor","moveEntryToBin","repository","accessControl","getLatestRevision","eventPublisher","execute","model","id","options","permanently","canAccess","canAccessEntry","rwd","fail","fromModel","getResult","isFail","error","entryToDelete","value","entry","publish","permanent","result","ok","abstraction","implementation","dependencies"],"sources":["DeleteEntryUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { DeleteEntryUseCase as UseCaseAbstraction, MoveEntryToBinUseCase } from \"./abstractions.js\";\nimport { DeleteEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsDeleteEntryOptions, CmsModel } from \"~/types/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","DeleteEntryUseCase","UseCaseAbstraction","MoveEntryToBinUseCase","DeleteEntryRepository","AccessControl","GetLatestRevisionByEntryIdIncludingDeletedUseCase","EventPublisher","EntryBeforeDeleteEvent","EntryAfterDeleteEvent","EntryDeleteErrorEvent","EntryNotAuthorizedError","DeleteEntryUseCaseImpl","constructor","moveEntryToBin","repository","accessControl","getLatestRevision","eventPublisher","execute","model","id","options","permanently","canAccess","canAccessEntry","rwd","fail","fromModel","getResult","isFail","error","entryToDelete","value","entry","publish","permanent","result","ok","abstraction","implementation","dependencies"],"sources":["DeleteEntryUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { DeleteEntryUseCase as UseCaseAbstraction, MoveEntryToBinUseCase } from \"./abstractions.js\";\nimport { DeleteEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsDeleteEntryOptions, CmsModel } from \"~/types/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { EntryBeforeDeleteEvent, EntryAfterDeleteEvent, EntryDeleteErrorEvent } from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * DeleteEntryUseCase - Orchestrates permanent deletion of an entry.\n *\n * Responsibilities:\n * - Apply access control\n * - Get the entry to delete by ID\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private moveEntryToBin: MoveEntryToBinUseCase.Interface,\n private repository: DeleteEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n id: string,\n options: CmsDeleteEntryOptions\n ): Promise<Result<void, UseCaseAbstraction.Error>> {\n const { permanently = true } = options;\n\n if (!permanently) {\n return this.moveEntryToBin.execute(model, id);\n }\n\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the entry to delete by ID\n const getResult = await this.getLatestRevision.execute(model, { id });\n\n if (getResult.isFail()) {\n return Result.fail(getResult.error);\n }\n\n const entryToDelete = getResult.value;\n\n // Check access control on the specific entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: entryToDelete,\n rwd: \"d\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(new EntryNotAuthorizedError());\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: true\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute(model, entryToDelete);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: true,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: true\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: true,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteEntryUseCaseImpl,\n dependencies: [\n MoveEntryToBinUseCase,\n DeleteEntryRepository,\n AccessControl,\n GetLatestRevisionByEntryIdIncludingDeletedUseCase,\n EventPublisher\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
3
|
import { MoveEntryToBinUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
4
4
|
import { MoveEntryToBinRepository } from "./abstractions.js";
|
|
5
5
|
import { AccessControl } from "../../../features/shared/abstractions.js";
|
|
6
6
|
import { GetLatestRevisionByEntryIdUseCase } from "../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
|
|
7
7
|
import type { CmsModel } from "../../../types/index.js";
|
|
8
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
8
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
9
9
|
/**
|
|
10
10
|
* MoveEntryToBinUseCase - Orchestrates soft deletion of an entry (move to bin).
|
|
11
11
|
*
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { createImplementation } from "@webiny/feature/api";
|
|
3
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
3
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
4
4
|
import { MoveEntryToBinUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
5
5
|
import { MoveEntryToBinRepository } from "./abstractions.js";
|
|
6
6
|
import { AccessControl } from "../../shared/abstractions.js";
|
|
7
7
|
import { GetLatestRevisionByEntryIdUseCase } from "../GetLatestRevisionByEntryId/index.js";
|
|
8
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
8
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
9
9
|
import { EntryBeforeDeleteEvent, EntryAfterDeleteEvent, EntryDeleteErrorEvent } from "./events.js";
|
|
10
10
|
import { EntryNotAuthorizedError } from "../../../domain/contentEntry/errors.js";
|
|
11
11
|
import { EntryNotFoundError } from "../../../domain/contentEntry/errors.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","IdentityContext","MoveEntryToBinUseCase","UseCaseAbstraction","MoveEntryToBinRepository","AccessControl","GetLatestRevisionByEntryIdUseCase","EventPublisher","EntryBeforeDeleteEvent","EntryAfterDeleteEvent","EntryDeleteErrorEvent","EntryNotAuthorizedError","EntryNotFoundError","getDate","getIdentity","ROOT_FOLDER","MoveEntryToBinUseCaseImpl","constructor","repository","accessControl","getLatestRevision","identityContext","eventPublisher","execute","model","id","canAccess","canAccessEntry","rwd","fail","fromModel","getResult","isFail","originalEntry","value","entry","currentDateTime","Date","toISOString","currentIdentity","entryToDelete","wbyDeleted","location","folderId","binOriginalFolderId","deletedOn","deletedBy","revisionDeletedOn","revisionDeletedBy","publish","permanent","result","error","ok","abstraction","implementation","dependencies"],"sources":["MoveEntryToBinUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport { MoveEntryToBinUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { MoveEntryToBinRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","IdentityContext","MoveEntryToBinUseCase","UseCaseAbstraction","MoveEntryToBinRepository","AccessControl","GetLatestRevisionByEntryIdUseCase","EventPublisher","EntryBeforeDeleteEvent","EntryAfterDeleteEvent","EntryDeleteErrorEvent","EntryNotAuthorizedError","EntryNotFoundError","getDate","getIdentity","ROOT_FOLDER","MoveEntryToBinUseCaseImpl","constructor","repository","accessControl","getLatestRevision","identityContext","eventPublisher","execute","model","id","canAccess","canAccessEntry","rwd","fail","fromModel","getResult","isFail","originalEntry","value","entry","currentDateTime","Date","toISOString","currentIdentity","entryToDelete","wbyDeleted","location","folderId","binOriginalFolderId","deletedOn","deletedBy","revisionDeletedOn","revisionDeletedBy","publish","permanent","result","error","ok","abstraction","implementation","dependencies"],"sources":["MoveEntryToBinUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { MoveEntryToBinUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { MoveEntryToBinRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { EntryBeforeDeleteEvent, EntryAfterDeleteEvent, EntryDeleteErrorEvent } from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\n\n/**\n * MoveEntryToBinUseCase - Orchestrates soft deletion of an entry (move to bin).\n *\n * Responsibilities:\n * - Apply access control\n * - Get the entry to delete by ID\n * - Mark entry as deleted (wbyDeleted = true)\n * - Update deletion metadata\n * - Publish domain events with permanent: false\n * - Delegate to repository for storage operations\n */\nclass MoveEntryToBinUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: MoveEntryToBinRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface,\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(model: CmsModel, id: string): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the entry to delete by ID\n const getResult = await this.getLatestRevision.execute(model, { id });\n\n if (getResult.isFail()) {\n return Result.fail(new EntryNotFoundError(id));\n }\n\n const originalEntry = getResult.value;\n\n // Check access control on the specific entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: originalEntry,\n rwd: \"d\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(new EntryNotAuthorizedError());\n }\n\n // Create the deleted entry data\n const currentDateTime = new Date().toISOString();\n const currentIdentity = this.identityContext.getIdentity();\n\n const entryToDelete = {\n ...originalEntry,\n wbyDeleted: true,\n\n // Entry location fields - move to root folder\n location: {\n folderId: ROOT_FOLDER\n },\n binOriginalFolderId: originalEntry.location?.folderId,\n\n // Entry-level meta fields\n deletedOn: getDate(currentDateTime, null),\n deletedBy: getIdentity(currentIdentity, null),\n\n // Revision-level meta fields\n revisionDeletedOn: getDate(currentDateTime, null),\n revisionDeletedBy: getIdentity(currentIdentity, null)\n };\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: false\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute({\n model,\n entry: entryToDelete\n });\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: false,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: false\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: false,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const MoveEntryToBinUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: MoveEntryToBinUseCaseImpl,\n dependencies: [\n MoveEntryToBinRepository,\n AccessControl,\n GetLatestRevisionByEntryIdUseCase,\n IdentityContext,\n EventPublisher\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IEventHandler } from "@webiny/api-core/features/
|
|
2
|
-
import { DomainEvent } from "@webiny/api-core/features/
|
|
1
|
+
import type { IEventHandler } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
import type { EntryAfterDeleteEventPayload, EntryBeforeDeleteEventPayload, EntryDeleteErrorEventPayload } from "./abstractions.js";
|
|
4
4
|
/**
|
|
5
5
|
* Before delete entry event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforeDeleteEvent","eventType","getHandlerAbstraction","EntryBeforeDeleteEventHandler","EntryAfterDeleteEvent","EntryAfterDeleteEventHandler","EntryDeleteErrorEvent","EntryDeleteErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforeDeleteEvent","eventType","getHandlerAbstraction","EntryBeforeDeleteEventHandler","EntryAfterDeleteEvent","EntryAfterDeleteEventHandler","EntryDeleteErrorEvent","EntryDeleteErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type {\n EntryAfterDeleteEventPayload,\n EntryBeforeDeleteEventPayload,\n EntryDeleteErrorEventPayload\n} from \"./abstractions.js\";\n\n/**\n * Before delete entry event\n */\nexport class EntryBeforeDeleteEvent extends DomainEvent<EntryBeforeDeleteEventPayload> {\n eventType = \"Cms/Entry/BeforeDelete\" as const;\n\n getHandlerAbstraction() {\n return EntryBeforeDeleteEventHandler;\n }\n}\n\n/** Hook into entry lifecycle before an entry is deleted. */\nexport const EntryBeforeDeleteEventHandler = createAbstraction<\n IEventHandler<EntryBeforeDeleteEvent>\n>(\"EntryBeforeDeleteEventHandler\");\n\nexport namespace EntryBeforeDeleteEventHandler {\n export type Interface = IEventHandler<EntryBeforeDeleteEvent>;\n export type Event = EntryBeforeDeleteEvent;\n}\n\n/**\n * After delete entry event\n */\nexport class EntryAfterDeleteEvent extends DomainEvent<EntryAfterDeleteEventPayload> {\n eventType = \"Cms/Entry/AfterDelete\" as const;\n\n getHandlerAbstraction() {\n return EntryAfterDeleteEventHandler;\n }\n}\n\n/** Hook into entry lifecycle after an entry is deleted. */\nexport const EntryAfterDeleteEventHandler = createAbstraction<IEventHandler<EntryAfterDeleteEvent>>(\n \"EntryAfterDeleteEventHandler\"\n);\n\nexport namespace EntryAfterDeleteEventHandler {\n export type Interface = IEventHandler<EntryAfterDeleteEvent>;\n export type Event = EntryAfterDeleteEvent;\n}\n\n/**\n * Delete entry error event\n */\nexport class EntryDeleteErrorEvent extends DomainEvent<EntryDeleteErrorEventPayload> {\n eventType = \"Cms/Entry/DeleteError\" as const;\n\n getHandlerAbstraction() {\n return EntryDeleteErrorEventHandler;\n }\n}\n\nexport const EntryDeleteErrorEventHandler = createAbstraction<IEventHandler<EntryDeleteErrorEvent>>(\n \"EntryDeleteErrorEventHandler\"\n);\n\nexport namespace EntryDeleteErrorEventHandler {\n export type Interface = IEventHandler<EntryDeleteErrorEvent>;\n export type Event = EntryDeleteErrorEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAEvD,SAASC,WAAW,QAAQ,mDAAmD;AAO/E;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,SAASD,WAAW,CAAgC;EACnFE,SAAS,GAAG,wBAAwB;EAEpCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,6BAA6B;EACxC;AACJ;;AAEA;AACA,OAAO,MAAMA,6BAA6B,GAAGL,iBAAiB,CAE5D,+BAA+B,CAAC;AAOlC;AACA;AACA;AACA,OAAO,MAAMM,qBAAqB,SAASL,WAAW,CAA+B;EACjFE,SAAS,GAAG,uBAAuB;EAEnCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,4BAA4B;EACvC;AACJ;;AAEA;AACA,OAAO,MAAMA,4BAA4B,GAAGP,iBAAiB,CACzD,8BACJ,CAAC;AAOD;AACA;AACA;AACA,OAAO,MAAMQ,qBAAqB,SAASP,WAAW,CAA+B;EACjFE,SAAS,GAAG,uBAAuB;EAEnCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOK,4BAA4B;EACvC;AACJ;AAEA,OAAO,MAAMA,4BAA4B,GAAGT,iBAAiB,CACzD,8BACJ,CAAC","ignoreList":[]}
|
|
@@ -7,7 +7,7 @@ import { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from "../../../feat
|
|
|
7
7
|
import { GetPreviousRevisionByEntryIdUseCase } from "../../../features/contentEntry/GetPreviousRevisionByEntryId/index.js";
|
|
8
8
|
import { DeleteEntryUseCase } from "../../../features/contentEntry/DeleteEntry/index.js";
|
|
9
9
|
import type { CmsModel } from "../../../types/index.js";
|
|
10
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
10
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
11
11
|
/**
|
|
12
12
|
* DeleteEntryRevisionUseCase - Orchestrates deletion of a specific entry revision.
|
|
13
13
|
*
|