@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
|
@@ -7,7 +7,7 @@ import { GetRevisionByIdUseCase } from "../GetRevisionById/index.js";
|
|
|
7
7
|
import { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from "../GetLatestRevisionByEntryId/index.js";
|
|
8
8
|
import { GetPreviousRevisionByEntryIdUseCase } from "../GetPreviousRevisionByEntryId/index.js";
|
|
9
9
|
import { DeleteEntryUseCase } from "../DeleteEntry/index.js";
|
|
10
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
10
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
11
11
|
import { EntryRevisionBeforeDeleteEvent, EntryRevisionAfterDeleteEvent, EntryRevisionDeleteErrorEvent } from "./events.js";
|
|
12
12
|
import { parseIdentifier } from "@webiny/utils";
|
|
13
13
|
import { EntryNotAuthorizedError } from "../../../domain/contentEntry/errors.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","DeleteEntryRevisionUseCase","UseCaseAbstraction","DeleteEntryRevisionRepository","AccessControl","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdIncludingDeletedUseCase","GetPreviousRevisionByEntryIdUseCase","DeleteEntryUseCase","EventPublisher","EntryRevisionBeforeDeleteEvent","EntryRevisionAfterDeleteEvent","EntryRevisionDeleteErrorEvent","parseIdentifier","EntryNotAuthorizedError","DeleteEntryRevisionUseCaseImpl","constructor","repository","accessControl","getRevisionById","getLatestRevision","getPreviousRevision","deleteEntry","eventPublisher","execute","model","revisionId","canAccess","canAccessEntry","rwd","fail","fromModel","id","entryId","version","getRevisionResult","isFail","error","entryToDelete","value","entry","latestRevisionResult","latestRevision","latestRevisionId","previousRevisionResult","previousRevision","latestEntry","publish","result","ok","abstraction","implementation","dependencies"],"sources":["DeleteEntryRevisionUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { DeleteEntryRevisionUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { DeleteEntryRevisionRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport { GetPreviousRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetPreviousRevisionByEntryId/index.js\";\nimport { DeleteEntryUseCase } from \"~/features/contentEntry/DeleteEntry/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/EventPublisher\";\nimport {\n EntryRevisionBeforeDeleteEvent,\n EntryRevisionAfterDeleteEvent,\n EntryRevisionDeleteErrorEvent\n} from \"./events.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * DeleteEntryRevisionUseCase - Orchestrates deletion of a specific entry revision.\n *\n * Responsibilities:\n * - Parse revision ID to extract entry ID and version\n * - Apply access control\n * - Get the revision to delete\n * - Determine if this is the latest revision\n * - If latest and no previous revision exists, perform full entry delete\n * - If latest and previous exists, set previous as new latest\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteEntryRevisionUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: DeleteEntryRevisionRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface,\n private getPreviousRevision: GetPreviousRevisionByEntryIdUseCase.Interface,\n private deleteEntry: DeleteEntryUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n revisionId: string\n ): 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 const { id: entryId, version } = parseIdentifier(revisionId);\n\n // Get the revision to delete\n const getRevisionResult = await this.getRevisionById.execute(model, revisionId);\n if (getRevisionResult.isFail()) {\n return Result.fail(getRevisionResult.error);\n }\n\n const entryToDelete = getRevisionResult.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 // Get the latest revision\n const latestRevisionResult = await this.getLatestRevision.execute(model, { id: entryId });\n if (latestRevisionResult.isFail()) {\n return Result.fail(latestRevisionResult.error);\n }\n\n const latestRevision = latestRevisionResult.value;\n const latestRevisionId = latestRevision?.id || null;\n\n // Get the previous revision\n const previousRevisionResult = await this.getPreviousRevision.execute(model, {\n entryId,\n version: version as number\n });\n\n // If targeted record is the latest entry record and there is no previous revision,\n // delete the entire entry.\n const previousRevision = previousRevisionResult.isFail()\n ? null\n : previousRevisionResult.value;\n if (previousRevisionResult.isFail() && entryToDelete.id === latestRevisionId) {\n return await this.deleteEntry.execute(model, revisionId, {});\n }\n\n // Determine the entry to set as latest (if deleting current latest)\n let latestEntry = null;\n if (entryToDelete.id === latestRevisionId && previousRevision) {\n latestEntry = previousRevision;\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryRevisionBeforeDeleteEvent({\n entry: entryToDelete,\n model\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute({\n model,\n entry: entryToDelete,\n latestEntry\n });\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionDeleteErrorEvent({\n entry: entryToDelete,\n model,\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 EntryRevisionAfterDeleteEvent({\n entry: entryToDelete,\n model\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionDeleteErrorEvent({\n entry: entryToDelete,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteEntryRevisionUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteEntryRevisionUseCaseImpl,\n dependencies: [\n DeleteEntryRevisionRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdIncludingDeletedUseCase,\n GetPreviousRevisionByEntryIdUseCase,\n DeleteEntryUseCase,\n EventPublisher\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","DeleteEntryRevisionUseCase","UseCaseAbstraction","DeleteEntryRevisionRepository","AccessControl","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdIncludingDeletedUseCase","GetPreviousRevisionByEntryIdUseCase","DeleteEntryUseCase","EventPublisher","EntryRevisionBeforeDeleteEvent","EntryRevisionAfterDeleteEvent","EntryRevisionDeleteErrorEvent","parseIdentifier","EntryNotAuthorizedError","DeleteEntryRevisionUseCaseImpl","constructor","repository","accessControl","getRevisionById","getLatestRevision","getPreviousRevision","deleteEntry","eventPublisher","execute","model","revisionId","canAccess","canAccessEntry","rwd","fail","fromModel","id","entryId","version","getRevisionResult","isFail","error","entryToDelete","value","entry","latestRevisionResult","latestRevision","latestRevisionId","previousRevisionResult","previousRevision","latestEntry","publish","result","ok","abstraction","implementation","dependencies"],"sources":["DeleteEntryRevisionUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { DeleteEntryRevisionUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { DeleteEntryRevisionRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport { GetPreviousRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetPreviousRevisionByEntryId/index.js\";\nimport { DeleteEntryUseCase } from \"~/features/contentEntry/DeleteEntry/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n EntryRevisionBeforeDeleteEvent,\n EntryRevisionAfterDeleteEvent,\n EntryRevisionDeleteErrorEvent\n} from \"./events.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * DeleteEntryRevisionUseCase - Orchestrates deletion of a specific entry revision.\n *\n * Responsibilities:\n * - Parse revision ID to extract entry ID and version\n * - Apply access control\n * - Get the revision to delete\n * - Determine if this is the latest revision\n * - If latest and no previous revision exists, perform full entry delete\n * - If latest and previous exists, set previous as new latest\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteEntryRevisionUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: DeleteEntryRevisionRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface,\n private getPreviousRevision: GetPreviousRevisionByEntryIdUseCase.Interface,\n private deleteEntry: DeleteEntryUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n revisionId: string\n ): 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 const { id: entryId, version } = parseIdentifier(revisionId);\n\n // Get the revision to delete\n const getRevisionResult = await this.getRevisionById.execute(model, revisionId);\n if (getRevisionResult.isFail()) {\n return Result.fail(getRevisionResult.error);\n }\n\n const entryToDelete = getRevisionResult.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 // Get the latest revision\n const latestRevisionResult = await this.getLatestRevision.execute(model, { id: entryId });\n if (latestRevisionResult.isFail()) {\n return Result.fail(latestRevisionResult.error);\n }\n\n const latestRevision = latestRevisionResult.value;\n const latestRevisionId = latestRevision?.id || null;\n\n // Get the previous revision\n const previousRevisionResult = await this.getPreviousRevision.execute(model, {\n entryId,\n version: version as number\n });\n\n // If targeted record is the latest entry record and there is no previous revision,\n // delete the entire entry.\n const previousRevision = previousRevisionResult.isFail()\n ? null\n : previousRevisionResult.value;\n if (previousRevisionResult.isFail() && entryToDelete.id === latestRevisionId) {\n return await this.deleteEntry.execute(model, revisionId, {});\n }\n\n // Determine the entry to set as latest (if deleting current latest)\n let latestEntry = null;\n if (entryToDelete.id === latestRevisionId && previousRevision) {\n latestEntry = previousRevision;\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryRevisionBeforeDeleteEvent({\n entry: entryToDelete,\n model\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute({\n model,\n entry: entryToDelete,\n latestEntry\n });\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionDeleteErrorEvent({\n entry: entryToDelete,\n model,\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 EntryRevisionAfterDeleteEvent({\n entry: entryToDelete,\n model\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionDeleteErrorEvent({\n entry: entryToDelete,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteEntryRevisionUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteEntryRevisionUseCaseImpl,\n dependencies: [\n DeleteEntryRevisionRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdIncludingDeletedUseCase,\n GetPreviousRevisionByEntryIdUseCase,\n DeleteEntryUseCase,\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 { EntryRevisionAfterDeletePayload, EntryRevisionBeforeDeletePayload, EntryRevisionDeleteErrorPayload } from "./abstractions.js";
|
|
4
4
|
/**
|
|
5
5
|
* Before delete revision event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","EntryRevisionBeforeDeleteEvent","eventType","getHandlerAbstraction","EntryRevisionBeforeDeleteEventHandler","EntryRevisionAfterDeleteEvent","EntryRevisionAfterDeleteEventHandler","EntryRevisionDeleteErrorEvent","EntryRevisionDeleteErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","EntryRevisionBeforeDeleteEvent","eventType","getHandlerAbstraction","EntryRevisionBeforeDeleteEventHandler","EntryRevisionAfterDeleteEvent","EntryRevisionAfterDeleteEventHandler","EntryRevisionDeleteErrorEvent","EntryRevisionDeleteErrorEventHandler"],"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 EntryRevisionAfterDeletePayload,\n EntryRevisionBeforeDeletePayload,\n EntryRevisionDeleteErrorPayload\n} from \"./abstractions.js\";\n\n/**\n * Before delete revision event\n */\nexport class EntryRevisionBeforeDeleteEvent extends DomainEvent<EntryRevisionBeforeDeletePayload> {\n eventType = \"Cms/Entry/RevisionBeforeDelete\" as const;\n\n getHandlerAbstraction() {\n return EntryRevisionBeforeDeleteEventHandler;\n }\n}\n\n/** Hook into revision lifecycle before a revision is deleted. */\nexport const EntryRevisionBeforeDeleteEventHandler = createAbstraction<\n IEventHandler<EntryRevisionBeforeDeleteEvent>\n>(\"EntryRevisionBeforeDeleteEventHandler\");\n\nexport namespace EntryRevisionBeforeDeleteEventHandler {\n export type Interface = IEventHandler<EntryRevisionBeforeDeleteEvent>;\n export type Event = EntryRevisionBeforeDeleteEvent;\n}\n\n/**\n * After delete revision event\n */\nexport class EntryRevisionAfterDeleteEvent extends DomainEvent<EntryRevisionAfterDeletePayload> {\n eventType = \"Cms/Entry/RevisionAfterDelete\" as const;\n\n getHandlerAbstraction() {\n return EntryRevisionAfterDeleteEventHandler;\n }\n}\n\n/** Hook into revision lifecycle after a revision is deleted. */\nexport const EntryRevisionAfterDeleteEventHandler = createAbstraction<\n IEventHandler<EntryRevisionAfterDeleteEvent>\n>(\"EntryRevisionAfterDeleteEventHandler\");\n\nexport namespace EntryRevisionAfterDeleteEventHandler {\n export type Interface = IEventHandler<EntryRevisionAfterDeleteEvent>;\n export type Event = EntryRevisionAfterDeleteEvent;\n}\n\n/**\n * Delete revision error event\n */\nexport class EntryRevisionDeleteErrorEvent extends DomainEvent<EntryRevisionDeleteErrorPayload> {\n eventType = \"Cms/Entry/RevisionDeleteError\" as const;\n\n getHandlerAbstraction() {\n return EntryRevisionDeleteErrorEventHandler;\n }\n}\n\nexport const EntryRevisionDeleteErrorEventHandler = createAbstraction<\n IEventHandler<EntryRevisionDeleteErrorEvent>\n>(\"EntryRevisionDeleteErrorEventHandler\");\n\nexport namespace EntryRevisionDeleteErrorEventHandler {\n export type Interface = IEventHandler<EntryRevisionDeleteErrorEvent>;\n export type Event = EntryRevisionDeleteErrorEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAEvD,SAASC,WAAW,QAAQ,mDAAmD;AAO/E;AACA;AACA;AACA,OAAO,MAAMC,8BAA8B,SAASD,WAAW,CAAmC;EAC9FE,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,CAAkC;EAC5FE,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,CAAkC;EAC5FE,SAAS,GAAG,+BAA+B;EAE3CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOK,oCAAoC;EAC/C;AACJ;AAEA,OAAO,MAAMA,oCAAoC,GAAGT,iBAAiB,CAEnE,sCAAsC,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
2
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
import { DeleteMultipleEntriesUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
4
4
|
import { DeleteMultipleEntriesRepository } from "./abstractions.js";
|
|
5
5
|
import { AccessControl } from "../../../features/shared/abstractions.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { createImplementation } from "@webiny/feature/api";
|
|
3
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
3
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
4
4
|
import { DeleteMultipleEntriesUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
5
5
|
import { DeleteMultipleEntriesRepository } from "./abstractions.js";
|
|
6
6
|
import { AccessControl } from "../../shared/abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","EventPublisher","DeleteMultipleEntriesUseCase","UseCaseAbstraction","DeleteMultipleEntriesRepository","AccessControl","ListEntriesUseCase","EntryBeforeDeleteMultipleEvent","EntryAfterDeleteMultipleEvent","EntryDeleteMultipleErrorEvent","EntryNotAuthorizedError","parseIdentifier","WebinyError","filterAsync","DeleteMultipleEntriesUseCaseImpl","constructor","repository","accessControl","listEntries","eventPublisher","execute","model","params","entries","input","maxDeletableEntries","entryIdList","Set","id","entryId","add","ids","Array","from","length","fail","canAccess","canAccessEntry","rwd","fromModel","listResult","where","latest","entryId_in","limit","isFail","error","value","accessibleEntries","entry","items","map","publish","result","ok","abstraction","implementation","dependencies"],"sources":["DeleteMultipleEntriesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","EventPublisher","DeleteMultipleEntriesUseCase","UseCaseAbstraction","DeleteMultipleEntriesRepository","AccessControl","ListEntriesUseCase","EntryBeforeDeleteMultipleEvent","EntryAfterDeleteMultipleEvent","EntryDeleteMultipleErrorEvent","EntryNotAuthorizedError","parseIdentifier","WebinyError","filterAsync","DeleteMultipleEntriesUseCaseImpl","constructor","repository","accessControl","listEntries","eventPublisher","execute","model","params","entries","input","maxDeletableEntries","entryIdList","Set","id","entryId","add","ids","Array","from","length","fail","canAccess","canAccessEntry","rwd","fromModel","listResult","where","latest","entryId_in","limit","isFail","error","value","accessibleEntries","entry","items","map","publish","result","ok","abstraction","implementation","dependencies"],"sources":["DeleteMultipleEntriesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { DeleteMultipleEntriesUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { DeleteMultipleEntriesRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { ListEntriesUseCase } from \"~/features/contentEntry/ListEntries/abstractions.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport {\n EntryBeforeDeleteMultipleEvent,\n EntryAfterDeleteMultipleEvent,\n EntryDeleteMultipleErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport { filterAsync } from \"~/utils/filterAsync.js\";\n\n/**\n * DeleteMultipleEntriesUseCase - Orchestrates deleting multiple entries.\n *\n * Responsibilities:\n * - Validate max entries limit (50)\n * - Parse entry IDs to unique entry IDs\n * - Apply access control\n * - Fetch entries using ListEntries use case\n * - Filter entries by access control\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteMultipleEntriesUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: DeleteMultipleEntriesRepository.Interface,\n private accessControl: AccessControl.Interface,\n private listEntries: ListEntriesUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n params: { entries: string[] }\n ): Promise<Result<Array<{ id: string }>, UseCaseAbstraction.Error>> {\n const { entries: input } = params;\n const maxDeletableEntries = 50;\n\n // Parse entry IDs to unique entry IDs\n const entryIdList = new Set<string>();\n for (const id of input) {\n const { id: entryId } = parseIdentifier(id);\n entryIdList.add(entryId);\n }\n const ids = Array.from(entryIdList);\n\n // Validate max entries limit\n if (ids.length > maxDeletableEntries) {\n return Result.fail(\n new WebinyError(\n \"Cannot delete more than 50 entries at once.\",\n \"DELETE_ENTRIES_MAX\",\n {\n entries: ids\n }\n ) as any\n );\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 // Fetch entries using ListEntries use case\n const listResult = await this.listEntries.execute(model, {\n where: {\n latest: true,\n entryId_in: ids\n },\n limit: maxDeletableEntries + 1\n });\n\n if (listResult.isFail()) {\n return Result.fail(listResult.error);\n }\n\n const { entries } = listResult.value;\n\n // Filter entries by access control (only delete entries user can access)\n const accessibleEntries = await filterAsync(entries, async entry => {\n return this.accessControl.canAccessEntry({ model, entry });\n });\n\n const items = accessibleEntries.map(entry => entry.id);\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeDeleteMultipleEvent({\n entries,\n ids,\n model\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute(model, items);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryDeleteMultipleErrorEvent({\n entries,\n ids,\n model,\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 EntryAfterDeleteMultipleEvent({\n entries,\n ids,\n model\n })\n );\n\n return Result.ok(\n items.map(id => {\n return { id };\n })\n );\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryDeleteMultipleErrorEvent({\n entries,\n ids,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteMultipleEntriesUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteMultipleEntriesUseCaseImpl,\n dependencies: [\n DeleteMultipleEntriesRepository,\n AccessControl,\n ListEntriesUseCase,\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 { EntryAfterDeleteMultipleEventPayload, EntryBeforeDeleteMultipleEventPayload, EntryDeleteMultipleErrorEventPayload } from "./abstractions.js";
|
|
4
4
|
/**
|
|
5
5
|
* Before delete multiple entries event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforeDeleteMultipleEvent","eventType","getHandlerAbstraction","EntryBeforeDeleteMultipleEventHandler","EntryAfterDeleteMultipleEvent","EntryAfterDeleteMultipleEventHandler","EntryDeleteMultipleErrorEvent","EntryDeleteMultipleErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforeDeleteMultipleEvent","eventType","getHandlerAbstraction","EntryBeforeDeleteMultipleEventHandler","EntryAfterDeleteMultipleEvent","EntryAfterDeleteMultipleEventHandler","EntryDeleteMultipleErrorEvent","EntryDeleteMultipleErrorEventHandler"],"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 EntryAfterDeleteMultipleEventPayload,\n EntryBeforeDeleteMultipleEventPayload,\n EntryDeleteMultipleErrorEventPayload\n} from \"./abstractions.js\";\n\n/**\n * Before delete multiple entries event\n */\nexport class EntryBeforeDeleteMultipleEvent extends DomainEvent<EntryBeforeDeleteMultipleEventPayload> {\n eventType = \"Cms/Entry/BeforeDeleteMultiple\" as const;\n\n getHandlerAbstraction() {\n return EntryBeforeDeleteMultipleEventHandler;\n }\n}\n\n/** Hook into entry lifecycle before multiple entries are deleted. */\nexport const EntryBeforeDeleteMultipleEventHandler = createAbstraction<\n IEventHandler<EntryBeforeDeleteMultipleEvent>\n>(\"EntryBeforeDeleteMultipleEventHandler\");\n\nexport namespace EntryBeforeDeleteMultipleEventHandler {\n export type Interface = IEventHandler<EntryBeforeDeleteMultipleEvent>;\n export type Event = EntryBeforeDeleteMultipleEvent;\n}\n\n/**\n * After delete multiple entries event\n */\nexport class EntryAfterDeleteMultipleEvent extends DomainEvent<EntryAfterDeleteMultipleEventPayload> {\n eventType = \"Cms/Entry/AfterDeleteMultiple\" as const;\n\n getHandlerAbstraction() {\n return EntryAfterDeleteMultipleEventHandler;\n }\n}\n\n/** Hook into entry lifecycle after multiple entries are deleted. */\nexport const EntryAfterDeleteMultipleEventHandler = createAbstraction<\n IEventHandler<EntryAfterDeleteMultipleEvent>\n>(\"EntryAfterDeleteMultipleEventHandler\");\n\nexport namespace EntryAfterDeleteMultipleEventHandler {\n export type Interface = IEventHandler<EntryAfterDeleteMultipleEvent>;\n export type Event = EntryAfterDeleteMultipleEvent;\n}\n\n/**\n * Delete multiple entries error event\n */\nexport class EntryDeleteMultipleErrorEvent extends DomainEvent<EntryDeleteMultipleErrorEventPayload> {\n eventType = \"Cms/Entry/DeleteMultipleError\" as const;\n\n getHandlerAbstraction() {\n return EntryDeleteMultipleErrorEventHandler;\n }\n}\n\nexport const EntryDeleteMultipleErrorEventHandler = createAbstraction<\n IEventHandler<EntryDeleteMultipleErrorEvent>\n>(\"EntryDeleteMultipleErrorEventHandler\");\n\nexport namespace EntryDeleteMultipleErrorEventHandler {\n export type Interface = IEventHandler<EntryDeleteMultipleErrorEvent>;\n export type Event = EntryDeleteMultipleErrorEvent;\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":[]}
|
|
@@ -11,16 +11,11 @@ class GetUniqueFieldValuesUseCaseImpl {
|
|
|
11
11
|
this.cmsContext = cmsContext;
|
|
12
12
|
}
|
|
13
13
|
async execute(model, params) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
});
|
|
19
|
-
} catch (error) {
|
|
20
|
-
if (error instanceof EntryNotAuthorizedError) {
|
|
21
|
-
return Result.fail(error);
|
|
22
|
-
}
|
|
23
|
-
throw error;
|
|
14
|
+
const canAccess = await this.accessControl.canAccessEntry({
|
|
15
|
+
model
|
|
16
|
+
});
|
|
17
|
+
if (!canAccess) {
|
|
18
|
+
return Result.fail(new EntryNotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`));
|
|
24
19
|
}
|
|
25
20
|
const {
|
|
26
21
|
where: initialWhere,
|
|
@@ -50,7 +45,7 @@ class GetUniqueFieldValuesUseCaseImpl {
|
|
|
50
45
|
// Verify the field is searchable
|
|
51
46
|
const searchableFields = getSearchableFields({
|
|
52
47
|
fields: model.fields,
|
|
53
|
-
|
|
48
|
+
context: this.cmsContext,
|
|
54
49
|
input: []
|
|
55
50
|
});
|
|
56
51
|
if (!searchableFields.includes(`values.${fieldId}`)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createImplementation","Result","GetUniqueFieldValuesRepository","GetUniqueFieldValuesUseCase","UseCaseAbstraction","AccessControl","CmsContext","EntryNotAuthorizedError","FieldNotSearchableError","InvalidWhereConditionError","getSearchableFields","GetUniqueFieldValuesUseCaseImpl","constructor","repository","accessControl","cmsContext","execute","model","params","
|
|
1
|
+
{"version":3,"names":["createImplementation","Result","GetUniqueFieldValuesRepository","GetUniqueFieldValuesUseCase","UseCaseAbstraction","AccessControl","CmsContext","EntryNotAuthorizedError","FieldNotSearchableError","InvalidWhereConditionError","getSearchableFields","GetUniqueFieldValuesUseCaseImpl","constructor","repository","accessControl","cmsContext","execute","model","params","canAccess","canAccessEntry","fail","modelId","where","initialWhere","fieldId","canAccessOnlyOwned","canAccessOnlyOwnedEntries","identity","security","getIdentity","createdBy","id","latest","published","searchableFields","fields","context","input","includes","result","isFail","error","ok","value","abstraction","implementation","dependencies"],"sources":["GetUniqueFieldValuesUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport {\n GetUniqueFieldValuesParams,\n GetUniqueFieldValuesRepository,\n GetUniqueFieldValuesUseCase as UseCaseAbstraction\n} from \"./abstractions.js\";\nimport { AccessControl, CmsContext } from \"~/features/shared/abstractions.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { FieldNotSearchableError, InvalidWhereConditionError } from \"./errors.js\";\nimport { getSearchableFields } from \"~/crud/contentEntry/searchableFields.js\";\nimport type { CmsEntryUniqueValue, CmsModel } from \"~/types/index.js\";\n\nclass GetUniqueFieldValuesUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: GetUniqueFieldValuesRepository.Interface,\n private accessControl: AccessControl.Interface,\n private cmsContext: CmsContext.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n params: GetUniqueFieldValuesParams\n ): Promise<Result<CmsEntryUniqueValue[], UseCaseAbstraction.Error>> {\n const canAccess = await this.accessControl.canAccessEntry({ model });\n if (!canAccess) {\n return Result.fail(\n new EntryNotAuthorizedError(`Not allowed to access \"${model.modelId}\" entries.`)\n );\n }\n\n const { where: initialWhere, fieldId } = params;\n\n const where = {\n ...initialWhere\n };\n\n // Apply ownership filter if needed\n const canAccessOnlyOwned = await this.accessControl.canAccessOnlyOwnedEntries({ model });\n if (canAccessOnlyOwned) {\n const identity = this.cmsContext.security.getIdentity();\n where.createdBy = identity.id;\n }\n\n // Validate where conditions\n if (where.latest && where.published) {\n return Result.fail(\n new InvalidWhereConditionError(\n \"Cannot list entries that are both published and latest.\",\n where\n )\n );\n }\n\n if (!where.latest && !where.published) {\n return Result.fail(\n new InvalidWhereConditionError(\n \"Cannot list entries if we do not have latest or published defined.\",\n where\n )\n );\n }\n\n // Verify the field is searchable\n const searchableFields = getSearchableFields({\n fields: model.fields,\n context: this.cmsContext,\n input: []\n });\n\n if (!searchableFields.includes(`values.${fieldId}`)) {\n return Result.fail(new FieldNotSearchableError(fieldId));\n }\n\n // Execute repository call\n const result = await this.repository.execute(model, {\n where,\n fieldId\n });\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n return Result.ok(result.value);\n }\n}\n\nexport const GetUniqueFieldValuesUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: GetUniqueFieldValuesUseCaseImpl,\n dependencies: [GetUniqueFieldValuesRepository, AccessControl, CmsContext]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,EAAEC,MAAM,QAAQ,qBAAqB;AAClE,SAEIC,8BAA8B,EAC9BC,2BAA2B,IAAIC,kBAAkB;AAErD,SAASC,aAAa,EAAEC,UAAU;AAClC,SAASC,uBAAuB;AAChC,SAASC,uBAAuB,EAAEC,0BAA0B;AAC5D,SAASC,mBAAmB;AAG5B,MAAMC,+BAA+B,CAAyC;EACnEC,WAAWA,CACNC,UAAoD,EACpDC,aAAsC,EACtCC,UAAgC,EAC1C;IAAA,KAHUF,UAAoD,GAApDA,UAAoD;IAAA,KACpDC,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,UAAgC,GAAhCA,UAAgC;EACzC;EAEH,MAAMC,OAAOA,CACTC,KAAe,EACfC,MAAkC,EAC8B;IAChE,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACL,aAAa,CAACM,cAAc,CAAC;MAAEH;IAAM,CAAC,CAAC;IACpE,IAAI,CAACE,SAAS,EAAE;MACZ,OAAOlB,MAAM,CAACoB,IAAI,CACd,IAAId,uBAAuB,CAAC,0BAA0BU,KAAK,CAACK,OAAO,YAAY,CACnF,CAAC;IACL;IAEA,MAAM;MAAEC,KAAK,EAAEC,YAAY;MAAEC;IAAQ,CAAC,GAAGP,MAAM;IAE/C,MAAMK,KAAK,GAAG;MACV,GAAGC;IACP,CAAC;;IAED;IACA,MAAME,kBAAkB,GAAG,MAAM,IAAI,CAACZ,aAAa,CAACa,yBAAyB,CAAC;MAAEV;IAAM,CAAC,CAAC;IACxF,IAAIS,kBAAkB,EAAE;MACpB,MAAME,QAAQ,GAAG,IAAI,CAACb,UAAU,CAACc,QAAQ,CAACC,WAAW,CAAC,CAAC;MACvDP,KAAK,CAACQ,SAAS,GAAGH,QAAQ,CAACI,EAAE;IACjC;;IAEA;IACA,IAAIT,KAAK,CAACU,MAAM,IAAIV,KAAK,CAACW,SAAS,EAAE;MACjC,OAAOjC,MAAM,CAACoB,IAAI,CACd,IAAIZ,0BAA0B,CAC1B,yDAAyD,EACzDc,KACJ,CACJ,CAAC;IACL;IAEA,IAAI,CAACA,KAAK,CAACU,MAAM,IAAI,CAACV,KAAK,CAACW,SAAS,EAAE;MACnC,OAAOjC,MAAM,CAACoB,IAAI,CACd,IAAIZ,0BAA0B,CAC1B,oEAAoE,EACpEc,KACJ,CACJ,CAAC;IACL;;IAEA;IACA,MAAMY,gBAAgB,GAAGzB,mBAAmB,CAAC;MACzC0B,MAAM,EAAEnB,KAAK,CAACmB,MAAM;MACpBC,OAAO,EAAE,IAAI,CAACtB,UAAU;MACxBuB,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,IAAI,CAACH,gBAAgB,CAACI,QAAQ,CAAC,UAAUd,OAAO,EAAE,CAAC,EAAE;MACjD,OAAOxB,MAAM,CAACoB,IAAI,CAAC,IAAIb,uBAAuB,CAACiB,OAAO,CAAC,CAAC;IAC5D;;IAEA;IACA,MAAMe,MAAM,GAAG,MAAM,IAAI,CAAC3B,UAAU,CAACG,OAAO,CAACC,KAAK,EAAE;MAChDM,KAAK;MACLE;IACJ,CAAC,CAAC;IACF,IAAIe,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOxC,MAAM,CAACoB,IAAI,CAACmB,MAAM,CAACE,KAAK,CAAC;IACpC;IAEA,OAAOzC,MAAM,CAAC0C,EAAE,CAACH,MAAM,CAACI,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMzC,2BAA2B,GAAGH,oBAAoB,CAAC;EAC5D6C,WAAW,EAAEzC,kBAAkB;EAC/B0C,cAAc,EAAEnC,+BAA+B;EAC/CoC,YAAY,EAAE,CAAC7C,8BAA8B,EAAEG,aAAa,EAAEC,UAAU;AAC5E,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
1
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
2
2
|
import { ListEntriesUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
3
3
|
import { ListEntriesRepository } from "./abstractions.js";
|
|
4
4
|
import { AccessControl } from "../../../features/shared/abstractions.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
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 { ListEntriesUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
5
5
|
import { ListEntriesRepository } from "./abstractions.js";
|
|
6
6
|
import { AccessControl } from "../../shared/abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","IdentityContext","ListEntriesUseCase","UseCaseAbstraction","ListEntriesRepository","AccessControl","EntryNotAuthorizedError","ListEntriesUseCaseImpl","constructor","repository","accessControl","identityContext","execute","model","params","canAccess","canAccessEntry","fail","fromModel","where","initialWhere","rest","canAccessOnlyOwnedEntries","createdBy","getIdentity","id","result","isFail","error","ok","value","abstraction","implementation","dependencies"],"sources":["ListEntriesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport { ListEntriesUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { ListEntriesRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport type { CmsEntryListParams, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * ListEntriesUseCase - Base use case for orchestrating entry listing with access control.\n *\n * Responsibilities:\n * - Apply access control\n * - Filter by owner if user can only access own entries\n * - Delegate to repository for data fetching\n */\nclass ListEntriesUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: ListEntriesRepository.Interface,\n private accessControl: AccessControl.Interface,\n private identityContext: IdentityContext.Interface\n ) {}\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ): UseCaseAbstraction.Return<T> {\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const { where: initialWhere, ...rest } = params || {};\n const where = { ...initialWhere };\n\n // Possibly only get records which are owned by current user\n if (await this.accessControl.canAccessOnlyOwnedEntries({ model })) {\n where.createdBy = this.identityContext.getIdentity().id;\n }\n\n // Delegate to repository\n const result = await this.repository.execute<T>(model, {\n ...rest,\n where\n });\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n return Result.ok(result.value);\n }\n}\n\nexport const ListEntriesUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: ListEntriesUseCaseImpl,\n dependencies: [ListEntriesRepository, AccessControl, IdentityContext]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,eAAe,QAAQ,
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","IdentityContext","ListEntriesUseCase","UseCaseAbstraction","ListEntriesRepository","AccessControl","EntryNotAuthorizedError","ListEntriesUseCaseImpl","constructor","repository","accessControl","identityContext","execute","model","params","canAccess","canAccessEntry","fail","fromModel","where","initialWhere","rest","canAccessOnlyOwnedEntries","createdBy","getIdentity","id","result","isFail","error","ok","value","abstraction","implementation","dependencies"],"sources":["ListEntriesUseCase.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 { ListEntriesUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { ListEntriesRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport type { CmsEntryListParams, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * ListEntriesUseCase - Base use case for orchestrating entry listing with access control.\n *\n * Responsibilities:\n * - Apply access control\n * - Filter by owner if user can only access own entries\n * - Delegate to repository for data fetching\n */\nclass ListEntriesUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: ListEntriesRepository.Interface,\n private accessControl: AccessControl.Interface,\n private identityContext: IdentityContext.Interface\n ) {}\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ): UseCaseAbstraction.Return<T> {\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const { where: initialWhere, ...rest } = params || {};\n const where = { ...initialWhere };\n\n // Possibly only get records which are owned by current user\n if (await this.accessControl.canAccessOnlyOwnedEntries({ model })) {\n where.createdBy = this.identityContext.getIdentity().id;\n }\n\n // Delegate to repository\n const result = await this.repository.execute<T>(model, {\n ...rest,\n where\n });\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n return Result.ok(result.value);\n }\n}\n\nexport const ListEntriesUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: ListEntriesUseCaseImpl,\n dependencies: [ListEntriesRepository, AccessControl, IdentityContext]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,eAAe,QAAQ,6DAA6D;AAC7F,SAASC,kBAAkB,IAAIC,kBAAkB;AACjD,SAASC,qBAAqB;AAC9B,SAASC,aAAa;AAEtB,SAASC,uBAAuB;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,sBAAsB,CAAyC;EAC1DC,WAAWA,CACNC,UAA2C,EAC3CC,aAAsC,EACtCC,eAA0C,EACpD;IAAA,KAHUF,UAA2C,GAA3CA,UAA2C;IAAA,KAC3CC,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,eAA0C,GAA1CA,eAA0C;EACnD;EAEH,MAAMC,OAAOA,CACTC,KAAe,EACfC,MAA2B,EACC;IAC5B;IACA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACL,aAAa,CAACM,cAAc,CAAC;MAAEH;IAAM,CAAC,CAAC;IACpE,IAAI,CAACE,SAAS,EAAE;MACZ,OAAOhB,MAAM,CAACkB,IAAI,CAACX,uBAAuB,CAACY,SAAS,CAACL,KAAK,CAAC,CAAC;IAChE;IAEA,MAAM;MAAEM,KAAK,EAAEC,YAAY;MAAE,GAAGC;IAAK,CAAC,GAAGP,MAAM,IAAI,CAAC,CAAC;IACrD,MAAMK,KAAK,GAAG;MAAE,GAAGC;IAAa,CAAC;;IAEjC;IACA,IAAI,MAAM,IAAI,CAACV,aAAa,CAACY,yBAAyB,CAAC;MAAET;IAAM,CAAC,CAAC,EAAE;MAC/DM,KAAK,CAACI,SAAS,GAAG,IAAI,CAACZ,eAAe,CAACa,WAAW,CAAC,CAAC,CAACC,EAAE;IAC3D;;IAEA;IACA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACjB,UAAU,CAACG,OAAO,CAAIC,KAAK,EAAE;MACnD,GAAGQ,IAAI;MACPF;IACJ,CAAC,CAAC;IAEF,IAAIO,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAO5B,MAAM,CAACkB,IAAI,CAACS,MAAM,CAACE,KAAK,CAAC;IACpC;IAEA,OAAO7B,MAAM,CAAC8B,EAAE,CAACH,MAAM,CAACI,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAM5B,kBAAkB,GAAGF,oBAAoB,CAAC;EACnD+B,WAAW,EAAE5B,kBAAkB;EAC/B6B,cAAc,EAAEzB,sBAAsB;EACtC0B,YAAY,EAAE,CAAC7B,qBAAqB,EAAEC,aAAa,EAAEJ,eAAe;AACxE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
2
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
import { MoveEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
4
4
|
import { MoveEntryRepository } from "./abstractions.js";
|
|
5
5
|
import { AccessControl } from "../../../features/shared/abstractions.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { createImplementation } from "@webiny/feature/api";
|
|
3
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
3
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
4
4
|
import { MoveEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
5
5
|
import { MoveEntryRepository } from "./abstractions.js";
|
|
6
6
|
import { AccessControl } from "../../shared/abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","EventPublisher","MoveEntryUseCase","UseCaseAbstraction","MoveEntryRepository","AccessControl","GetRevisionByIdUseCase","EntryBeforeMoveEvent","EntryAfterMoveEvent","EntryMoveErrorEvent","EntryNotAuthorizedError","EntryNotFoundError","MoveEntryUseCaseImpl","constructor","repository","accessControl","getRevisionById","eventPublisher","execute","model","id","folderId","canAccess","canAccessEntry","rwd","fail","fromModel","result","isFail","entry","value","location","ok","publish","moveResult","error","abstraction","implementation","dependencies"],"sources":["MoveEntryUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","EventPublisher","MoveEntryUseCase","UseCaseAbstraction","MoveEntryRepository","AccessControl","GetRevisionByIdUseCase","EntryBeforeMoveEvent","EntryAfterMoveEvent","EntryMoveErrorEvent","EntryNotAuthorizedError","EntryNotFoundError","MoveEntryUseCaseImpl","constructor","repository","accessControl","getRevisionById","eventPublisher","execute","model","id","folderId","canAccess","canAccessEntry","rwd","fail","fromModel","result","isFail","entry","value","location","ok","publish","moveResult","error","abstraction","implementation","dependencies"],"sources":["MoveEntryUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { MoveEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { MoveEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { EntryBeforeMoveEvent, EntryAfterMoveEvent, EntryMoveErrorEvent } from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * MoveEntryUseCase - Orchestrates moving an entry to a different folder.\n *\n * Responsibilities:\n * - Apply access control\n * - Get the entry to move\n * - Check if entry is already in target folder (early return)\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass MoveEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: MoveEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n folderId: string\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 entry to move\n const result = await this.getRevisionById.execute<T>(model, id);\n\n if (result.isFail()) {\n return Result.fail(new EntryNotFoundError(id));\n }\n\n const entry = result.value;\n\n // Check access control on the specific 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 // Early return if entry is already in the requested folder\n if (entry.location?.folderId === folderId) {\n return Result.ok(entry);\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeMoveEvent({\n entry,\n model,\n folderId\n })\n );\n\n // Delegate to repository\n const moveResult = await this.repository.execute(model, id, folderId);\n\n if (moveResult.isFail()) {\n await this.eventPublisher.publish(\n new EntryMoveErrorEvent({\n entry,\n model,\n folderId,\n error: moveResult.error\n })\n );\n return Result.fail(moveResult.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterMoveEvent({\n entry,\n model,\n folderId\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryMoveErrorEvent({\n entry,\n model,\n folderId,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const MoveEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: MoveEntryUseCaseImpl,\n dependencies: [MoveEntryRepository, AccessControl, GetRevisionByIdUseCase, EventPublisher]\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 { EntryAfterMoveEventPayload, EntryBeforeMoveEventPayload, EntryMoveErrorEventPayload } from "./abstractions.js";
|
|
4
4
|
/**
|
|
5
5
|
* Before move entry event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforeMoveEvent","eventType","getHandlerAbstraction","EntryBeforeMoveEventHandler","EntryAfterMoveEvent","EntryAfterMoveEventHandler","EntryMoveErrorEvent","EntryMoveErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforeMoveEvent","eventType","getHandlerAbstraction","EntryBeforeMoveEventHandler","EntryAfterMoveEvent","EntryAfterMoveEventHandler","EntryMoveErrorEvent","EntryMoveErrorEventHandler"],"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 EntryAfterMoveEventPayload,\n EntryBeforeMoveEventPayload,\n EntryMoveErrorEventPayload\n} from \"./abstractions.js\";\n\n/**\n * Before move entry event\n */\nexport class EntryBeforeMoveEvent extends DomainEvent<EntryBeforeMoveEventPayload> {\n eventType = \"Cms/Entry/BeforeMove\" as const;\n\n getHandlerAbstraction() {\n return EntryBeforeMoveEventHandler;\n }\n}\n\n/** Hook into entry lifecycle before an entry is moved. */\nexport const EntryBeforeMoveEventHandler = createAbstraction<IEventHandler<EntryBeforeMoveEvent>>(\n \"EntryBeforeMoveEventHandler\"\n);\n\nexport namespace EntryBeforeMoveEventHandler {\n export type Interface = IEventHandler<EntryBeforeMoveEvent>;\n export type Event = EntryBeforeMoveEvent;\n}\n\n/**\n * After move entry event\n */\nexport class EntryAfterMoveEvent extends DomainEvent<EntryAfterMoveEventPayload> {\n eventType = \"Cms/Entry/AfterMove\" as const;\n\n getHandlerAbstraction() {\n return EntryAfterMoveEventHandler;\n }\n}\n\n/** Hook into entry lifecycle after an entry is moved. */\nexport const EntryAfterMoveEventHandler = createAbstraction<IEventHandler<EntryAfterMoveEvent>>(\n \"EntryAfterMoveEventHandler\"\n);\n\nexport namespace EntryAfterMoveEventHandler {\n export type Interface = IEventHandler<EntryAfterMoveEvent>;\n export type Event = EntryAfterMoveEvent;\n}\n\n/**\n * Move entry error event\n */\nexport class EntryMoveErrorEvent extends DomainEvent<EntryMoveErrorEventPayload> {\n eventType = \"Cms/Entry/MoveError\" as const;\n\n getHandlerAbstraction() {\n return EntryMoveErrorEventHandler;\n }\n}\n\nexport const EntryMoveErrorEventHandler = createAbstraction<IEventHandler<EntryMoveErrorEvent>>(\n \"EntryMoveErrorEventHandler\"\n);\n\nexport namespace EntryMoveErrorEventHandler {\n export type Interface = IEventHandler<EntryMoveErrorEvent>;\n export type Event = EntryMoveErrorEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAEvD,SAASC,WAAW,QAAQ,mDAAmD;AAO/E;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,SAASD,WAAW,CAA8B;EAC/EE,SAAS,GAAG,sBAAsB;EAElCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,2BAA2B;EACtC;AACJ;;AAEA;AACA,OAAO,MAAMA,2BAA2B,GAAGL,iBAAiB,CACxD,6BACJ,CAAC;AAOD;AACA;AACA;AACA,OAAO,MAAMM,mBAAmB,SAASL,WAAW,CAA6B;EAC7EE,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,0BAA0B;EACrC;AACJ;;AAEA;AACA,OAAO,MAAMA,0BAA0B,GAAGP,iBAAiB,CACvD,4BACJ,CAAC;AAOD;AACA;AACA;AACA,OAAO,MAAMQ,mBAAmB,SAASP,WAAW,CAA6B;EAC7EE,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOK,0BAA0B;EACrC;AACJ;AAEA,OAAO,MAAMA,0BAA0B,GAAGT,iBAAiB,CACvD,4BACJ,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
3
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
4
4
|
import { PublishEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
5
5
|
import { PublishEntryRepository } from "./abstractions.js";
|
|
6
6
|
import { AccessControl } from "../../../features/shared/abstractions.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
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";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
3
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { PublishEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
6
6
|
import { PublishEntryRepository } from "./abstractions.js";
|
|
7
7
|
import { AccessControl } from "../../shared/abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","IdentityContext","EventPublisher","PublishEntryUseCase","UseCaseAbstraction","PublishEntryRepository","AccessControl","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdUseCase","EntryBeforePublishEvent","EntryAfterPublishEvent","EntryPublishErrorEvent","EntryNotAuthorizedError","EntryNotFoundError","createPublishEntryData","CmsContext","PublishEntryUseCaseImpl","constructor","repository","accessControl","getRevisionById","getLatestRevision","identityContext","eventPublisher","cmsContext","execute","model","id","canAccess","canAccessEntry","pw","fail","fromModel","result","isFail","originalEntry","value","entry","latestResult","entryId","error","latestEntry","context","getIdentity","publish","original","repositoryResult","publishedEntry","ok","abstraction","implementation","dependencies"],"sources":["PublishEntryUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport { EventPublisher } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","IdentityContext","EventPublisher","PublishEntryUseCase","UseCaseAbstraction","PublishEntryRepository","AccessControl","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdUseCase","EntryBeforePublishEvent","EntryAfterPublishEvent","EntryPublishErrorEvent","EntryNotAuthorizedError","EntryNotFoundError","createPublishEntryData","CmsContext","PublishEntryUseCaseImpl","constructor","repository","accessControl","getRevisionById","getLatestRevision","identityContext","eventPublisher","cmsContext","execute","model","id","canAccess","canAccessEntry","pw","fail","fromModel","result","isFail","originalEntry","value","entry","latestResult","entryId","error","latestEntry","context","getIdentity","publish","original","repositoryResult","publishedEntry","ok","abstraction","implementation","dependencies"],"sources":["PublishEntryUseCase.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 { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { PublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { PublishEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport {\n EntryBeforePublishEvent,\n EntryAfterPublishEvent,\n EntryPublishErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { createPublishEntryData } from \"~/crud/contentEntry/entryDataFactories/index.js\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\n\n/**\n * PublishEntryUseCase - Orchestrates publishing an entry.\n *\n * Responsibilities:\n * - Apply access control (publish permission)\n * - Get the entry to publish\n * - Get the latest revision for entry-level metadata\n * - Prepare entry data with publish metadata\n * - Validate entry data\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass PublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: PublishEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface,\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private cmsContext: CmsContext.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n // Check access control (publish permission)\n const canAccess = await this.accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the entry to publish\n const result = await this.getRevisionById.execute<T>(model, id);\n\n if (result.isFail()) {\n return Result.fail(new EntryNotFoundError(id));\n }\n\n const originalEntry = result.value;\n\n // Check access control on the specific entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: originalEntry,\n pw: \"p\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the latest revision for entry-level metadata\n const latestResult = await this.getLatestRevision.execute<T>(model, {\n id: originalEntry.entryId\n });\n\n if (latestResult.isFail()) {\n return Result.fail(latestResult.error);\n }\n\n const latestEntry = latestResult.value;\n\n // Prepare entry data for publishing (includes validation)\n const { entry } = await createPublishEntryData<T>({\n context: this.cmsContext,\n model,\n originalEntry,\n latestEntry,\n getIdentity: () => this.identityContext.getIdentity()\n });\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforePublishEvent({\n entry,\n original: originalEntry,\n model\n })\n );\n\n // Delegate to repository\n const repositoryResult = await this.repository.execute(model, entry);\n\n if (repositoryResult.isFail()) {\n await this.eventPublisher.publish(\n new EntryPublishErrorEvent({\n entry,\n original: originalEntry,\n model,\n error: repositoryResult.error\n })\n );\n return Result.fail(repositoryResult.error);\n }\n\n const publishedEntry = repositoryResult.value;\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterPublishEvent({\n entry: publishedEntry,\n original: originalEntry,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryPublishErrorEvent({\n entry,\n original: originalEntry,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const PublishEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: PublishEntryUseCaseImpl,\n dependencies: [\n PublishEntryRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdUseCase,\n IdentityContext,\n EventPublisher,\n CmsContext\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,eAAe,QAAQ,6DAA6D;AAC7F,SAASC,cAAc,QAAQ,mDAAmD;AAClF,SAASC,mBAAmB,IAAIC,kBAAkB;AAClD,SAASC,sBAAsB;AAC/B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAC/B,SAASC,iCAAiC;AAE1C,SACIC,uBAAuB,EACvBC,sBAAsB,EACtBC,sBAAsB;AAE1B,SAASC,uBAAuB;AAChC,SAASC,kBAAkB;AAC3B,SAASC,sBAAsB;AAC/B,SAASC,UAAU;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,uBAAuB,CAAyC;EAC3DC,WAAWA,CACNC,UAA4C,EAC5CC,aAAsC,EACtCC,eAAiD,EACjDC,iBAA8D,EAC9DC,eAA0C,EAC1CC,cAAwC,EACxCC,UAAgC,EAC1C;IAAA,KAPUN,UAA4C,GAA5CA,UAA4C;IAAA,KAC5CC,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,eAAiD,GAAjDA,eAAiD;IAAA,KACjDC,iBAA8D,GAA9DA,iBAA8D;IAAA,KAC9DC,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,UAAgC,GAAhCA,UAAgC;EACzC;EAEH,MAAMC,OAAOA,CACTC,KAAe,EACfC,EAAU,EAC4C;IACtD;IACA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACT,aAAa,CAACU,cAAc,CAAC;MAAEH,KAAK;MAAEI,EAAE,EAAE;IAAI,CAAC,CAAC;IAC7E,IAAI,CAACF,SAAS,EAAE;MACZ,OAAO7B,MAAM,CAACgC,IAAI,CAACnB,uBAAuB,CAACoB,SAAS,CAACN,KAAK,CAAC,CAAC;IAChE;;IAEA;IACA,MAAMO,MAAM,GAAG,MAAM,IAAI,CAACb,eAAe,CAACK,OAAO,CAAIC,KAAK,EAAEC,EAAE,CAAC;IAE/D,IAAIM,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOnC,MAAM,CAACgC,IAAI,CAAC,IAAIlB,kBAAkB,CAACc,EAAE,CAAC,CAAC;IAClD;IAEA,MAAMQ,aAAa,GAAGF,MAAM,CAACG,KAAK;;IAElC;IACA,MAAMP,cAAc,GAAG,MAAM,IAAI,CAACV,aAAa,CAACU,cAAc,CAAC;MAC3DH,KAAK;MACLW,KAAK,EAAEF,aAAa;MACpBL,EAAE,EAAE;IACR,CAAC,CAAC;IAEF,IAAI,CAACD,cAAc,EAAE;MACjB,OAAO9B,MAAM,CAACgC,IAAI,CAACnB,uBAAuB,CAACoB,SAAS,CAACN,KAAK,CAAC,CAAC;IAChE;;IAEA;IACA,MAAMY,YAAY,GAAG,MAAM,IAAI,CAACjB,iBAAiB,CAACI,OAAO,CAAIC,KAAK,EAAE;MAChEC,EAAE,EAAEQ,aAAa,CAACI;IACtB,CAAC,CAAC;IAEF,IAAID,YAAY,CAACJ,MAAM,CAAC,CAAC,EAAE;MACvB,OAAOnC,MAAM,CAACgC,IAAI,CAACO,YAAY,CAACE,KAAK,CAAC;IAC1C;IAEA,MAAMC,WAAW,GAAGH,YAAY,CAACF,KAAK;;IAEtC;IACA,MAAM;MAAEC;IAAM,CAAC,GAAG,MAAMvB,sBAAsB,CAAI;MAC9C4B,OAAO,EAAE,IAAI,CAAClB,UAAU;MACxBE,KAAK;MACLS,aAAa;MACbM,WAAW;MACXE,WAAW,EAAEA,CAAA,KAAM,IAAI,CAACrB,eAAe,CAACqB,WAAW,CAAC;IACxD,CAAC,CAAC;IAEF,IAAI;MACA;MACA,MAAM,IAAI,CAACpB,cAAc,CAACqB,OAAO,CAC7B,IAAInC,uBAAuB,CAAC;QACxB4B,KAAK;QACLQ,QAAQ,EAAEV,aAAa;QACvBT;MACJ,CAAC,CACL,CAAC;;MAED;MACA,MAAMoB,gBAAgB,GAAG,MAAM,IAAI,CAAC5B,UAAU,CAACO,OAAO,CAACC,KAAK,EAAEW,KAAK,CAAC;MAEpE,IAAIS,gBAAgB,CAACZ,MAAM,CAAC,CAAC,EAAE;QAC3B,MAAM,IAAI,CAACX,cAAc,CAACqB,OAAO,CAC7B,IAAIjC,sBAAsB,CAAC;UACvB0B,KAAK;UACLQ,QAAQ,EAAEV,aAAa;UACvBT,KAAK;UACLc,KAAK,EAAEM,gBAAgB,CAACN;QAC5B,CAAC,CACL,CAAC;QACD,OAAOzC,MAAM,CAACgC,IAAI,CAACe,gBAAgB,CAACN,KAAK,CAAC;MAC9C;MAEA,MAAMO,cAAc,GAAGD,gBAAgB,CAACV,KAAK;;MAE7C;MACA,MAAM,IAAI,CAACb,cAAc,CAACqB,OAAO,CAC7B,IAAIlC,sBAAsB,CAAC;QACvB2B,KAAK,EAAEU,cAAc;QACrBF,QAAQ,EAAEV,aAAa;QACvBT;MACJ,CAAC,CACL,CAAC;MAED,OAAO3B,MAAM,CAACiD,EAAE,CAACX,KAAK,CAAC;IAC3B,CAAC,CAAC,OAAOG,KAAK,EAAE;MACZ,MAAM,IAAI,CAACjB,cAAc,CAACqB,OAAO,CAC7B,IAAIjC,sBAAsB,CAAC;QACvB0B,KAAK;QACLQ,QAAQ,EAAEV,aAAa;QACvBT,KAAK;QACLc,KAAK,EAAEA;MACX,CAAC,CACL,CAAC;MACD,OAAOzC,MAAM,CAACgC,IAAI,CAACS,KAAY,CAAC;IACpC;EACJ;AACJ;AAEA,OAAO,MAAMrC,mBAAmB,GAAGH,oBAAoB,CAAC;EACpDiD,WAAW,EAAE7C,kBAAkB;EAC/B8C,cAAc,EAAElC,uBAAuB;EACvCmC,YAAY,EAAE,CACV9C,sBAAsB,EACtBC,aAAa,EACbC,sBAAsB,EACtBC,iCAAiC,EACjCP,eAAe,EACfC,cAAc,EACda,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 { EntryAfterPublishEventPayload, EntryBeforePublishEventPayload, EntryPublishErrorEventPayload } from "./abstractions.js";
|
|
4
4
|
/**
|
|
5
5
|
* Before publish entry event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforePublishEvent","eventType","getHandlerAbstraction","EntryBeforePublishEventHandler","EntryAfterPublishEvent","EntryAfterPublishEventHandler","EntryPublishErrorEvent","EntryPublishErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","EntryBeforePublishEvent","eventType","getHandlerAbstraction","EntryBeforePublishEventHandler","EntryAfterPublishEvent","EntryAfterPublishEventHandler","EntryPublishErrorEvent","EntryPublishErrorEventHandler"],"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 EntryAfterPublishEventPayload,\n EntryBeforePublishEventPayload,\n EntryPublishErrorEventPayload\n} from \"./abstractions.js\";\n\n/**\n * Before publish entry event\n */\nexport class EntryBeforePublishEvent extends DomainEvent<EntryBeforePublishEventPayload> {\n eventType = \"Cms/Entry/BeforePublish\" as const;\n\n getHandlerAbstraction() {\n return EntryBeforePublishEventHandler;\n }\n}\n\n/** Hook into entry lifecycle before an entry is published. */\nexport const EntryBeforePublishEventHandler = createAbstraction<\n IEventHandler<EntryBeforePublishEvent>\n>(\"EntryBeforePublishEventHandler\");\n\nexport namespace EntryBeforePublishEventHandler {\n export type Interface = IEventHandler<EntryBeforePublishEvent>;\n export type Event = EntryBeforePublishEvent;\n}\n\n/**\n * After publish entry event\n */\nexport class EntryAfterPublishEvent extends DomainEvent<EntryAfterPublishEventPayload> {\n eventType = \"Cms/Entry/AfterPublish\" as const;\n\n getHandlerAbstraction() {\n return EntryAfterPublishEventHandler;\n }\n}\n\n/** Hook into entry lifecycle after an entry is published. */\nexport const EntryAfterPublishEventHandler = createAbstraction<\n IEventHandler<EntryAfterPublishEvent>\n>(\"EntryAfterPublishEventHandler\");\n\nexport namespace EntryAfterPublishEventHandler {\n export type Interface = IEventHandler<EntryAfterPublishEvent>;\n export type Event = EntryAfterPublishEvent;\n}\n\n/**\n * Publish entry error event\n */\nexport class EntryPublishErrorEvent extends DomainEvent<EntryPublishErrorEventPayload> {\n eventType = \"Cms/Entry/PublishError\" as const;\n\n getHandlerAbstraction() {\n return EntryPublishErrorEventHandler;\n }\n}\n\nexport const EntryPublishErrorEventHandler = createAbstraction<\n IEventHandler<EntryPublishErrorEvent>\n>(\"EntryPublishErrorEventHandler\");\n\nexport namespace EntryPublishErrorEventHandler {\n export type Interface = IEventHandler<EntryPublishErrorEvent>;\n export type Event = EntryPublishErrorEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAEvD,SAASC,WAAW,QAAQ,mDAAmD;AAO/E;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,SAASD,WAAW,CAAiC;EACrFE,SAAS,GAAG,yBAAyB;EAErCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,8BAA8B;EACzC;AACJ;;AAEA;AACA,OAAO,MAAMA,8BAA8B,GAAGL,iBAAiB,CAE7D,gCAAgC,CAAC;AAOnC;AACA;AACA;AACA,OAAO,MAAMM,sBAAsB,SAASL,WAAW,CAAgC;EACnFE,SAAS,GAAG,wBAAwB;EAEpCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,6BAA6B;EACxC;AACJ;;AAEA;AACA,OAAO,MAAMA,6BAA6B,GAAGP,iBAAiB,CAE5D,+BAA+B,CAAC;AAOlC;AACA;AACA;AACA,OAAO,MAAMQ,sBAAsB,SAASP,WAAW,CAAgC;EACnFE,SAAS,GAAG,wBAAwB;EAEpCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOK,6BAA6B;EACxC;AACJ;AAEA,OAAO,MAAMA,6BAA6B,GAAGT,iBAAiB,CAE5D,+BAA+B,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
3
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
4
4
|
import { RepublishEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
5
5
|
import { RepublishEntryRepository } from "./abstractions.js";
|
|
6
6
|
import { AccessControl } from "../../../features/shared/abstractions.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
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";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
3
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { RepublishEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
6
6
|
import { RepublishEntryRepository } from "./abstractions.js";
|
|
7
7
|
import { AccessControl } from "../../shared/abstractions.js";
|