@webiny/api-headless-cms 0.0.0-unstable.e622468070 → 0.0.0-unstable.e6f0dc8ca7
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/constants.d.ts +2 -1
- package/constants.js +4 -0
- package/constants.js.map +1 -1
- 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/AccessControl/README.md +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryData.js +27 -12
- package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +13 -6
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js +4 -1
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js +4 -1
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js +2 -1
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js +4 -3
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/system.d.ts +10 -0
- package/crud/contentEntry/entryDataFactories/system.js +14 -0
- package/crud/contentEntry/entryDataFactories/system.js.map +1 -0
- package/crud/contentEntry/entryDataValidation.d.ts +1 -1
- package/crud/contentEntry/entryDataValidation.js +19 -16
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/references/buildPaths.d.ts +1 -1
- package/crud/contentEntry/references/buildPaths.js +3 -3
- package/crud/contentEntry/references/buildPaths.js.map +1 -1
- package/crud/contentEntry/searchableFields.d.ts +2 -3
- package/crud/contentEntry/searchableFields.js +15 -19
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentEntry.crud.js +16 -11
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/fields/descriptionField.js +1 -1
- package/crud/contentModel/fields/descriptionField.js.map +1 -1
- package/crud/contentModel/fields/imageField.js +1 -1
- package/crud/contentModel/fields/imageField.js.map +1 -1
- package/crud/contentModel/fields/titleField.js +1 -1
- package/crud/contentModel/fields/titleField.js.map +1 -1
- package/crud/contentModel/validation.d.ts +224 -902
- package/crud/contentModel/validation.js +64 -36
- package/crud/contentModel/validation.js.map +1 -1
- package/crud/contentModel.crud.js +2 -1
- package/crud/contentModel.crud.js.map +1 -1
- package/domain/contentEntry/EntryId.d.ts +1 -0
- package/domain/contentEntry/EntryId.js +2 -0
- package/domain/contentEntry/EntryId.js.map +1 -1
- package/domain/contentEntry/errors.d.ts +2 -2
- package/domain/contentEntry/errors.js.map +1 -1
- package/domain/contentModel/errors.d.ts +1 -1
- package/domain/contentModel/errors.js.map +1 -1
- package/domain/contentModel/schemas.d.ts +198 -616
- package/domain/contentModel/schemas.js +55 -37
- package/domain/contentModel/schemas.js.map +1 -1
- package/domain/contentModel/validation/fields/descriptionField.js +1 -1
- package/domain/contentModel/validation/fields/descriptionField.js.map +1 -1
- package/domain/contentModel/validation/fields/imageField.js +1 -1
- package/domain/contentModel/validation/fields/imageField.js.map +1 -1
- package/domain/contentModel/validation/fields/titleField.js +1 -1
- package/domain/contentModel/validation/fields/titleField.js.map +1 -1
- package/domain/contentModel/validation/modelFields.js +15 -20
- package/domain/contentModel/validation/modelFields.js.map +1 -1
- package/domain/contentModelGroup/validation.d.ts +34 -82
- package/domain/contentModelGroup/validation.js +2 -2
- package/domain/contentModelGroup/validation.js.map +1 -1
- package/export/graphql/index.js +1 -1
- package/export/graphql/index.js.map +1 -1
- package/export/types.js.map +1 -1
- package/exports/api/cms/entry.d.ts +3 -0
- package/exports/api/cms/entry.js +6 -0
- package/exports/api/cms/entry.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/model.d.ts +5 -1
- package/exports/api/cms/model.js +3 -1
- package/exports/api/cms/model.js.map +1 -1
- 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/extensions/entryHooks/OnEntryBeforeCreate.d.ts +3 -7
- package/extensions/index.d.ts +2 -6
- package/features/contentEntry/ContentEntriesFeature.d.ts +4 -1
- package/features/contentEntry/ContentEntriesFeature.js +6 -0
- package/features/contentEntry/ContentEntriesFeature.js.map +1 -1
- package/{utils/contentEntryTraverser → features/contentEntry/ContentEntryTraverser}/ContentEntryTraverser.d.ts +1 -1
- package/{utils/contentEntryTraverser → features/contentEntry/ContentEntryTraverser}/ContentEntryTraverser.js +2 -2
- package/features/contentEntry/ContentEntryTraverser/ContentEntryTraverser.js.map +1 -0
- package/features/contentEntry/ContentEntryTraverser/ContentEntryTraverserProvider.d.ts +14 -0
- package/features/contentEntry/ContentEntryTraverser/ContentEntryTraverserProvider.js +25 -0
- package/features/contentEntry/ContentEntryTraverser/ContentEntryTraverserProvider.js.map +1 -0
- package/features/contentEntry/ContentEntryTraverser/abstractions.d.ts +12 -0
- package/features/contentEntry/ContentEntryTraverser/abstractions.js +7 -0
- package/features/contentEntry/ContentEntryTraverser/abstractions.js.map +1 -0
- package/features/contentEntry/ContentEntryTraverser/feature.d.ts +4 -0
- package/features/contentEntry/ContentEntryTraverser/feature.js +10 -0
- package/features/contentEntry/ContentEntryTraverser/feature.js.map +1 -0
- package/features/contentEntry/ContentEntryTraverser/index.d.ts +2 -0
- package/features/contentEntry/ContentEntryTraverser/index.js +4 -0
- package/features/contentEntry/ContentEntryTraverser/index.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/abstractions.d.ts +1 -0
- package/features/contentEntry/CreateEntry/abstractions.js +1 -0
- package/features/contentEntry/CreateEntry/abstractions.js.map +1 -1
- package/features/contentEntry/CreateEntry/events.d.ts +4 -2
- package/features/contentEntry/CreateEntry/events.js +5 -1
- package/features/contentEntry/CreateEntry/events.js.map +1 -1
- package/features/contentEntry/CreateEntry/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentEntry/CreateEntryRevisionFrom/abstractions.js +1 -0
- package/features/contentEntry/CreateEntryRevisionFrom/abstractions.js.map +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/events.d.ts +4 -2
- package/features/contentEntry/CreateEntryRevisionFrom/events.js +5 -1
- package/features/contentEntry/CreateEntryRevisionFrom/events.js.map +1 -1
- package/features/contentEntry/CreateEntryRevisionFrom/feature.d.ts +4 -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/abstractions.d.ts +2 -0
- package/features/contentEntry/DeleteEntry/abstractions.js +2 -0
- package/features/contentEntry/DeleteEntry/abstractions.js.map +1 -1
- package/features/contentEntry/DeleteEntry/events.d.ts +4 -2
- package/features/contentEntry/DeleteEntry/events.js +5 -1
- package/features/contentEntry/DeleteEntry/events.js.map +1 -1
- package/features/contentEntry/DeleteEntry/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentEntry/DeleteEntryRevision/abstractions.js +1 -0
- package/features/contentEntry/DeleteEntryRevision/abstractions.js.map +1 -1
- package/features/contentEntry/DeleteEntryRevision/events.d.ts +4 -2
- package/features/contentEntry/DeleteEntryRevision/events.js +5 -1
- package/features/contentEntry/DeleteEntryRevision/events.js.map +1 -1
- package/features/contentEntry/DeleteEntryRevision/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentEntry/DeleteMultipleEntries/abstractions.js +1 -0
- package/features/contentEntry/DeleteMultipleEntries/abstractions.js.map +1 -1
- package/features/contentEntry/DeleteMultipleEntries/events.d.ts +4 -2
- package/features/contentEntry/DeleteMultipleEntries/events.js +5 -1
- package/features/contentEntry/DeleteMultipleEntries/events.js.map +1 -1
- package/features/contentEntry/DeleteMultipleEntries/feature.d.ts +4 -1
- package/features/contentEntry/GetEntriesByIds/abstractions.d.ts +1 -0
- package/features/contentEntry/GetEntriesByIds/abstractions.js +1 -0
- package/features/contentEntry/GetEntriesByIds/abstractions.js.map +1 -1
- package/features/contentEntry/GetEntriesByIds/feature.d.ts +4 -1
- package/features/contentEntry/GetEntry/abstractions.d.ts +1 -0
- package/features/contentEntry/GetEntry/abstractions.js +1 -0
- package/features/contentEntry/GetEntry/abstractions.js.map +1 -1
- package/features/contentEntry/GetEntry/feature.d.ts +4 -1
- package/features/contentEntry/GetEntryById/abstractions.d.ts +1 -0
- package/features/contentEntry/GetEntryById/abstractions.js +1 -0
- package/features/contentEntry/GetEntryById/abstractions.js.map +1 -1
- package/features/contentEntry/GetEntryById/feature.d.ts +4 -1
- package/features/contentEntry/GetLatestEntriesByIds/abstractions.d.ts +1 -0
- package/features/contentEntry/GetLatestEntriesByIds/abstractions.js +1 -0
- package/features/contentEntry/GetLatestEntriesByIds/abstractions.js.map +1 -1
- package/features/contentEntry/GetLatestEntriesByIds/feature.d.ts +4 -1
- package/features/contentEntry/GetLatestRevisionByEntryId/abstractions.d.ts +4 -9
- package/features/contentEntry/GetLatestRevisionByEntryId/abstractions.js +4 -9
- package/features/contentEntry/GetLatestRevisionByEntryId/abstractions.js.map +1 -1
- package/features/contentEntry/GetLatestRevisionByEntryId/feature.d.ts +4 -1
- package/features/contentEntry/GetPreviousRevisionByEntryId/abstractions.d.ts +2 -3
- package/features/contentEntry/GetPreviousRevisionByEntryId/abstractions.js +2 -3
- package/features/contentEntry/GetPreviousRevisionByEntryId/abstractions.js.map +1 -1
- package/features/contentEntry/GetPreviousRevisionByEntryId/feature.d.ts +4 -1
- package/features/contentEntry/GetPublishedEntriesByIds/abstractions.d.ts +1 -0
- package/features/contentEntry/GetPublishedEntriesByIds/abstractions.js +1 -0
- package/features/contentEntry/GetPublishedEntriesByIds/abstractions.js.map +1 -1
- package/features/contentEntry/GetPublishedEntriesByIds/feature.d.ts +4 -1
- package/features/contentEntry/GetPublishedRevisionByEntryId/abstractions.d.ts +1 -0
- package/features/contentEntry/GetPublishedRevisionByEntryId/abstractions.js +1 -0
- package/features/contentEntry/GetPublishedRevisionByEntryId/abstractions.js.map +1 -1
- package/features/contentEntry/GetPublishedRevisionByEntryId/feature.d.ts +4 -1
- package/features/contentEntry/GetRevisionById/abstractions.d.ts +1 -0
- package/features/contentEntry/GetRevisionById/abstractions.js +1 -0
- package/features/contentEntry/GetRevisionById/abstractions.js.map +1 -1
- package/features/contentEntry/GetRevisionById/feature.d.ts +4 -1
- package/features/contentEntry/GetRevisionsByEntryId/abstractions.d.ts +1 -0
- package/features/contentEntry/GetRevisionsByEntryId/abstractions.js +1 -0
- package/features/contentEntry/GetRevisionsByEntryId/abstractions.js.map +1 -1
- package/features/contentEntry/GetRevisionsByEntryId/feature.d.ts +4 -1
- package/features/contentEntry/GetSingletonEntry/abstractions.d.ts +1 -0
- package/features/contentEntry/GetSingletonEntry/abstractions.js +1 -0
- package/features/contentEntry/GetSingletonEntry/abstractions.js.map +1 -1
- package/features/contentEntry/GetSingletonEntry/feature.d.ts +4 -1
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.d.ts +2 -2
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +9 -15
- package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
- package/features/contentEntry/GetUniqueFieldValues/feature.d.ts +4 -1
- package/features/contentEntry/ListEntries/ListEntriesRepository.js +6 -1
- package/features/contentEntry/ListEntries/ListEntriesRepository.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/ListEntries/abstractions.d.ts +4 -0
- package/features/contentEntry/ListEntries/abstractions.js +4 -0
- package/features/contentEntry/ListEntries/abstractions.js.map +1 -1
- package/features/contentEntry/ListEntries/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentEntry/MoveEntry/abstractions.js +1 -0
- package/features/contentEntry/MoveEntry/abstractions.js.map +1 -1
- package/features/contentEntry/MoveEntry/events.d.ts +4 -2
- package/features/contentEntry/MoveEntry/events.js +5 -1
- package/features/contentEntry/MoveEntry/events.js.map +1 -1
- package/features/contentEntry/MoveEntry/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentEntry/PublishEntry/abstractions.js +1 -0
- package/features/contentEntry/PublishEntry/abstractions.js.map +1 -1
- package/features/contentEntry/PublishEntry/events.d.ts +4 -2
- package/features/contentEntry/PublishEntry/events.js +5 -1
- package/features/contentEntry/PublishEntry/events.js.map +1 -1
- package/features/contentEntry/PublishEntry/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentEntry/RepublishEntry/abstractions.js +1 -0
- package/features/contentEntry/RepublishEntry/abstractions.js.map +1 -1
- package/features/contentEntry/RepublishEntry/events.d.ts +4 -2
- package/features/contentEntry/RepublishEntry/events.js +5 -1
- package/features/contentEntry/RepublishEntry/events.js.map +1 -1
- package/features/contentEntry/RepublishEntry/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentEntry/RestoreEntryFromBin/abstractions.js +1 -0
- package/features/contentEntry/RestoreEntryFromBin/abstractions.js.map +1 -1
- package/features/contentEntry/RestoreEntryFromBin/events.d.ts +4 -2
- package/features/contentEntry/RestoreEntryFromBin/events.js +5 -1
- package/features/contentEntry/RestoreEntryFromBin/events.js.map +1 -1
- package/features/contentEntry/RestoreEntryFromBin/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentEntry/UnpublishEntry/abstractions.js +1 -0
- package/features/contentEntry/UnpublishEntry/abstractions.js.map +1 -1
- package/features/contentEntry/UnpublishEntry/events.d.ts +4 -2
- package/features/contentEntry/UnpublishEntry/events.js +5 -1
- package/features/contentEntry/UnpublishEntry/events.js.map +1 -1
- package/features/contentEntry/UnpublishEntry/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentEntry/UpdateEntry/abstractions.js +1 -0
- package/features/contentEntry/UpdateEntry/abstractions.js.map +1 -1
- package/features/contentEntry/UpdateEntry/events.d.ts +4 -2
- package/features/contentEntry/UpdateEntry/events.js +5 -1
- package/features/contentEntry/UpdateEntry/events.js.map +1 -1
- package/features/contentEntry/UpdateEntry/feature.d.ts +4 -1
- package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.d.ts +22 -0
- package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js +90 -0
- package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js.map +1 -0
- package/features/contentEntry/UpdateRevisionDescription/abstractions.d.ts +25 -0
- package/features/contentEntry/UpdateRevisionDescription/abstractions.js +10 -0
- package/features/contentEntry/UpdateRevisionDescription/abstractions.js.map +1 -0
- package/features/contentEntry/UpdateRevisionDescription/events.d.ts +44 -0
- package/features/contentEntry/UpdateRevisionDescription/events.js +33 -0
- package/features/contentEntry/UpdateRevisionDescription/events.js.map +1 -0
- package/features/contentEntry/UpdateRevisionDescription/feature.d.ts +12 -0
- package/features/contentEntry/UpdateRevisionDescription/feature.js +20 -0
- package/features/contentEntry/UpdateRevisionDescription/feature.js.map +1 -0
- package/features/contentEntry/UpdateRevisionDescription/index.d.ts +2 -0
- package/features/contentEntry/UpdateRevisionDescription/index.js +4 -0
- package/features/contentEntry/UpdateRevisionDescription/index.js.map +1 -0
- package/features/contentEntry/UpdateSingletonEntry/abstractions.d.ts +1 -0
- package/features/contentEntry/UpdateSingletonEntry/abstractions.js +1 -0
- package/features/contentEntry/UpdateSingletonEntry/abstractions.js.map +1 -1
- package/features/contentEntry/UpdateSingletonEntry/feature.d.ts +4 -1
- package/features/contentEntry/ValidateEntry/abstractions.d.ts +1 -0
- package/features/contentEntry/ValidateEntry/abstractions.js +1 -0
- package/features/contentEntry/ValidateEntry/abstractions.js.map +1 -1
- package/features/contentEntry/ValidateEntry/feature.d.ts +4 -1
- package/features/contentModel/ContentModelFeature.d.ts +4 -1
- package/features/contentModel/ContentModelFeature.js +2 -0
- package/features/contentModel/ContentModelFeature.js.map +1 -1
- package/features/contentModel/CreateModel/CreateModelRepository.d.ts +12 -12
- package/features/contentModel/CreateModel/CreateModelRepository.js +17 -12
- 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/abstractions.d.ts +1 -0
- package/features/contentModel/CreateModel/abstractions.js +1 -0
- package/features/contentModel/CreateModel/abstractions.js.map +1 -1
- package/features/contentModel/CreateModel/events.d.ts +4 -2
- package/features/contentModel/CreateModel/events.js +5 -1
- package/features/contentModel/CreateModel/events.js.map +1 -1
- package/features/contentModel/CreateModel/feature.d.ts +4 -1
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.d.ts +12 -13
- package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +25 -15
- 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/abstractions.d.ts +1 -0
- package/features/contentModel/CreateModelFrom/abstractions.js +1 -0
- package/features/contentModel/CreateModelFrom/abstractions.js.map +1 -1
- package/features/contentModel/CreateModelFrom/events.d.ts +4 -2
- package/features/contentModel/CreateModelFrom/events.js +5 -1
- package/features/contentModel/CreateModelFrom/events.js.map +1 -1
- package/features/contentModel/CreateModelFrom/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentModel/DeleteModel/abstractions.js +1 -0
- package/features/contentModel/DeleteModel/abstractions.js.map +1 -1
- package/features/contentModel/DeleteModel/events.d.ts +4 -2
- package/features/contentModel/DeleteModel/events.js +5 -1
- package/features/contentModel/DeleteModel/events.js.map +1 -1
- package/features/contentModel/DeleteModel/feature.d.ts +4 -1
- package/features/contentModel/GetModel/abstractions.d.ts +1 -0
- package/features/contentModel/GetModel/abstractions.js +1 -0
- package/features/contentModel/GetModel/abstractions.js.map +1 -1
- package/features/contentModel/GetModel/feature.d.ts +4 -1
- package/features/contentModel/ListModels/abstractions.d.ts +1 -0
- package/features/contentModel/ListModels/abstractions.js +1 -0
- package/features/contentModel/ListModels/abstractions.js.map +1 -1
- package/features/contentModel/ListModels/feature.d.ts +4 -1
- package/features/contentModel/ModelFieldCompression/ModelFieldCompression.d.ts +15 -0
- package/features/contentModel/ModelFieldCompression/ModelFieldCompression.js +27 -0
- package/features/contentModel/ModelFieldCompression/ModelFieldCompression.js.map +1 -0
- package/features/contentModel/ModelFieldCompression/abstractions.d.ts +17 -0
- package/features/contentModel/ModelFieldCompression/abstractions.js +4 -0
- package/features/contentModel/ModelFieldCompression/abstractions.js.map +1 -0
- package/features/contentModel/ModelFieldCompression/feature.d.ts +4 -0
- package/features/contentModel/ModelFieldCompression/feature.js +10 -0
- package/features/contentModel/ModelFieldCompression/feature.js.map +1 -0
- package/features/contentModel/ModelFieldCompression/index.d.ts +1 -0
- package/features/contentModel/ModelFieldCompression/index.js +3 -0
- package/features/contentModel/ModelFieldCompression/index.js.map +1 -0
- 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/ModelToAstConverter/feature.d.ts +4 -1
- package/features/contentModel/UpdateModel/UpdateModelRepository.d.ts +9 -9
- package/features/contentModel/UpdateModel/UpdateModelRepository.js +21 -12
- package/features/contentModel/UpdateModel/UpdateModelRepository.js.map +1 -1
- package/features/contentModel/UpdateModel/UpdateModelUseCase.d.ts +2 -2
- package/features/contentModel/UpdateModel/UpdateModelUseCase.js +6 -3
- package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
- package/features/contentModel/UpdateModel/abstractions.d.ts +1 -0
- package/features/contentModel/UpdateModel/abstractions.js +1 -0
- package/features/contentModel/UpdateModel/abstractions.js.map +1 -1
- package/features/contentModel/UpdateModel/events.d.ts +4 -2
- package/features/contentModel/UpdateModel/events.js +5 -1
- package/features/contentModel/UpdateModel/events.js.map +1 -1
- package/features/contentModel/UpdateModel/feature.d.ts +4 -1
- package/features/contentModel/shared/ModelsFetcher.d.ts +8 -6
- package/features/contentModel/shared/ModelsFetcher.js +14 -4
- package/features/contentModel/shared/ModelsFetcher.js.map +1 -1
- package/features/contentModelGroup/ContentModelGroupFeature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentModelGroup/CreateGroup/abstractions.js +1 -0
- package/features/contentModelGroup/CreateGroup/abstractions.js.map +1 -1
- package/features/contentModelGroup/CreateGroup/events.d.ts +4 -2
- package/features/contentModelGroup/CreateGroup/events.js +5 -1
- package/features/contentModelGroup/CreateGroup/events.js.map +1 -1
- package/features/contentModelGroup/CreateGroup/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentModelGroup/DeleteGroup/abstractions.js +1 -0
- package/features/contentModelGroup/DeleteGroup/abstractions.js.map +1 -1
- package/features/contentModelGroup/DeleteGroup/events.d.ts +4 -2
- package/features/contentModelGroup/DeleteGroup/events.js +5 -1
- package/features/contentModelGroup/DeleteGroup/events.js.map +1 -1
- package/features/contentModelGroup/DeleteGroup/feature.d.ts +4 -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/GetGroup/abstractions.d.ts +1 -0
- package/features/contentModelGroup/GetGroup/abstractions.js +1 -0
- package/features/contentModelGroup/GetGroup/abstractions.js.map +1 -1
- package/features/contentModelGroup/GetGroup/feature.d.ts +4 -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/ListGroups/abstractions.d.ts +1 -0
- package/features/contentModelGroup/ListGroups/abstractions.js +1 -0
- package/features/contentModelGroup/ListGroups/abstractions.js.map +1 -1
- package/features/contentModelGroup/ListGroups/feature.d.ts +4 -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/abstractions.d.ts +1 -0
- package/features/contentModelGroup/UpdateGroup/abstractions.js +1 -0
- package/features/contentModelGroup/UpdateGroup/abstractions.js.map +1 -1
- package/features/contentModelGroup/UpdateGroup/events.d.ts +4 -2
- package/features/contentModelGroup/UpdateGroup/events.js +5 -1
- package/features/contentModelGroup/UpdateGroup/events.js.map +1 -1
- package/features/contentModelGroup/UpdateGroup/feature.d.ts +4 -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/contentModelGroup/shared/abstractions.d.ts +1 -0
- package/features/contentModelGroup/shared/abstractions.js +1 -0
- package/features/contentModelGroup/shared/abstractions.js.map +1 -1
- package/features/graphql/feature.d.ts +4 -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 +4 -4
- 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/installer/feature.d.ts +4 -1
- package/features/modelBuilder/abstractions.d.ts +8 -4
- package/features/modelBuilder/abstractions.js +5 -2
- package/features/modelBuilder/abstractions.js.map +1 -1
- package/features/modelBuilder/feature.d.ts +4 -1
- package/features/modelBuilder/feature.js +6 -0
- package/features/modelBuilder/feature.js.map +1 -1
- package/features/modelBuilder/fields/BaseFieldBuilder.d.ts +36 -0
- package/features/modelBuilder/fields/BaseFieldBuilder.js +41 -0
- package/features/modelBuilder/fields/BaseFieldBuilder.js.map +1 -0
- package/features/modelBuilder/fields/BooleanFieldType.d.ts +2 -2
- package/features/modelBuilder/fields/BooleanFieldType.js +2 -2
- package/features/modelBuilder/fields/BooleanFieldType.js.map +1 -1
- package/features/modelBuilder/fields/DataFieldBuilder.d.ts +220 -0
- package/features/modelBuilder/fields/DataFieldBuilder.js +211 -0
- package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -0
- package/features/modelBuilder/fields/DateTimeFieldType.d.ts +3 -3
- package/features/modelBuilder/fields/DateTimeFieldType.js +22 -2
- package/features/modelBuilder/fields/DateTimeFieldType.js.map +1 -1
- package/features/modelBuilder/fields/DynamicZoneFieldType.d.ts +3 -3
- package/features/modelBuilder/fields/DynamicZoneFieldType.js +12 -5
- package/features/modelBuilder/fields/DynamicZoneFieldType.js.map +1 -1
- package/features/modelBuilder/fields/FieldBuilder.d.ts +5 -46
- package/features/modelBuilder/fields/FieldBuilder.js +3 -152
- package/features/modelBuilder/fields/FieldBuilder.js.map +1 -1
- package/features/modelBuilder/fields/FieldBuilderRegistry.d.ts +3 -3
- package/features/modelBuilder/fields/FieldBuilderRegistry.js +11 -1
- package/features/modelBuilder/fields/FieldBuilderRegistry.js.map +1 -1
- package/features/modelBuilder/fields/FileFieldType.d.ts +3 -3
- package/features/modelBuilder/fields/FileFieldType.js +2 -2
- package/features/modelBuilder/fields/FileFieldType.js.map +1 -1
- package/features/modelBuilder/fields/JsonFieldType.d.ts +2 -2
- package/features/modelBuilder/fields/JsonFieldType.js +2 -2
- package/features/modelBuilder/fields/JsonFieldType.js.map +1 -1
- package/features/modelBuilder/fields/LayoutFieldBuilder.d.ts +7 -0
- package/features/modelBuilder/fields/LayoutFieldBuilder.js +9 -0
- package/features/modelBuilder/fields/LayoutFieldBuilder.js.map +1 -0
- package/features/modelBuilder/fields/LongTextFieldType.d.ts +3 -4
- package/features/modelBuilder/fields/LongTextFieldType.js +2 -2
- package/features/modelBuilder/fields/LongTextFieldType.js.map +1 -1
- package/features/modelBuilder/fields/NumberFieldType.d.ts +3 -3
- package/features/modelBuilder/fields/NumberFieldType.js +2 -2
- package/features/modelBuilder/fields/NumberFieldType.js.map +1 -1
- package/features/modelBuilder/fields/ObjectFieldType.d.ts +7 -6
- package/features/modelBuilder/fields/ObjectFieldType.js +21 -6
- package/features/modelBuilder/fields/ObjectFieldType.js.map +1 -1
- package/features/modelBuilder/fields/RefFieldType.d.ts +3 -3
- package/features/modelBuilder/fields/RefFieldType.js +2 -2
- package/features/modelBuilder/fields/RefFieldType.js.map +1 -1
- package/features/modelBuilder/fields/RichTextFieldType.d.ts +2 -2
- package/features/modelBuilder/fields/RichTextFieldType.js +2 -2
- package/features/modelBuilder/fields/RichTextFieldType.js.map +1 -1
- package/features/modelBuilder/fields/SearchableJsonFieldType.d.ts +2 -2
- package/features/modelBuilder/fields/SearchableJsonFieldType.js +2 -2
- package/features/modelBuilder/fields/SearchableJsonFieldType.js.map +1 -1
- package/features/modelBuilder/fields/TextFieldType.d.ts +3 -3
- package/features/modelBuilder/fields/TextFieldType.js +2 -2
- package/features/modelBuilder/fields/TextFieldType.js.map +1 -1
- package/features/modelBuilder/fields/UiAlertFieldType.d.ts +19 -0
- package/features/modelBuilder/fields/UiAlertFieldType.js +36 -0
- package/features/modelBuilder/fields/UiAlertFieldType.js.map +1 -0
- package/features/modelBuilder/fields/UiSeparatorFieldType.d.ts +17 -0
- package/features/modelBuilder/fields/UiSeparatorFieldType.js +31 -0
- package/features/modelBuilder/fields/UiSeparatorFieldType.js.map +1 -0
- package/features/modelBuilder/fields/UiTabsFieldType.d.ts +28 -0
- package/features/modelBuilder/fields/UiTabsFieldType.js +75 -0
- package/features/modelBuilder/fields/UiTabsFieldType.js.map +1 -0
- package/features/modelBuilder/fields/abstractions.d.ts +6 -3
- package/features/modelBuilder/fields/abstractions.js +1 -1
- package/features/modelBuilder/fields/abstractions.js.map +1 -1
- package/features/modelBuilder/fields/{validators.d.ts → fieldTypeValidator.d.ts} +23 -1
- package/features/modelBuilder/fields/fieldTypeValidator.js +31 -0
- package/features/modelBuilder/fields/fieldTypeValidator.js.map +1 -0
- package/features/modelBuilder/index.d.ts +3 -0
- package/features/modelBuilder/index.js +3 -0
- package/features/modelBuilder/index.js.map +1 -1
- package/features/modelBuilder/models/BaseModelBuilder.d.ts +9 -4
- package/features/modelBuilder/models/BaseModelBuilder.js +19 -0
- package/features/modelBuilder/models/BaseModelBuilder.js.map +1 -1
- package/features/modelBuilder/models/PrivateModelBuilder.js +4 -2
- package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
- package/features/modelBuilder/models/PublicModelBuilder.js +16 -4
- package/features/modelBuilder/models/PublicModelBuilder.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/sortMapper/abstractions.d.ts +1 -0
- package/features/sortMapper/abstractions.js +1 -0
- package/features/sortMapper/abstractions.js.map +1 -1
- package/features/sortMapper/feature.d.ts +4 -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 +4 -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 +4 -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/features/whereMapper/abstractions.d.ts +1 -0
- package/features/whereMapper/abstractions.js +1 -0
- package/features/whereMapper/abstractions.js.map +1 -1
- package/features/whereMapper/feature.d.ts +4 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +2 -2
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +2 -2
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/graphql/getSchema/generateCacheKey.js +15 -7
- package/graphql/getSchema/generateCacheKey.js.map +1 -1
- package/graphql/index.js +2 -1
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseSchema.d.ts +2 -1
- package/graphql/schema/baseSchema.js +28 -24
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/cms/createEntryResolver.d.ts +10 -0
- package/graphql/schema/cms/createEntryResolver.js +65 -0
- package/graphql/schema/cms/createEntryResolver.js.map +1 -0
- package/graphql/schema/cms/deleteEntryResolver.d.ts +10 -0
- package/graphql/schema/cms/deleteEntryResolver.js +65 -0
- package/graphql/schema/cms/deleteEntryResolver.js.map +1 -0
- package/graphql/schema/cms/getEntryResolver.d.ts +11 -0
- package/graphql/schema/cms/getEntryResolver.js +67 -0
- package/graphql/schema/cms/getEntryResolver.js.map +1 -0
- package/graphql/schema/cms/helpers/buildFieldsSelection.d.ts +23 -0
- package/graphql/schema/cms/helpers/buildFieldsSelection.js +79 -0
- package/graphql/schema/cms/helpers/buildFieldsSelection.js.map +1 -0
- package/graphql/schema/cms/helpers/getErrorMessage.d.ts +4 -0
- package/graphql/schema/cms/helpers/getErrorMessage.js +14 -0
- package/graphql/schema/cms/helpers/getErrorMessage.js.map +1 -0
- package/graphql/schema/cms/helpers/getModel.d.ts +6 -0
- package/graphql/schema/cms/helpers/getModel.js +12 -0
- package/graphql/schema/cms/helpers/getModel.js.map +1 -0
- package/graphql/schema/cms/helpers/index.d.ts +5 -0
- package/graphql/schema/cms/helpers/index.js +7 -0
- package/graphql/schema/cms/helpers/index.js.map +1 -0
- package/graphql/schema/cms/helpers/transformSortToArray.d.ts +18 -0
- package/graphql/schema/cms/helpers/transformSortToArray.js +38 -0
- package/graphql/schema/cms/helpers/transformSortToArray.js.map +1 -0
- package/graphql/schema/cms/helpers/transformWhereToNested.d.ts +17 -0
- package/graphql/schema/cms/helpers/transformWhereToNested.js +54 -0
- package/graphql/schema/cms/helpers/transformWhereToNested.js.map +1 -0
- package/graphql/schema/cms/helpers.d.ts +5 -0
- package/graphql/schema/cms/helpers.js +7 -0
- package/graphql/schema/cms/helpers.js.map +1 -0
- package/graphql/schema/cms/index.d.ts +2 -0
- package/graphql/schema/cms/index.js +26 -0
- package/graphql/schema/cms/index.js.map +1 -0
- package/graphql/schema/cms/listEntriesResolver.d.ts +15 -0
- package/graphql/schema/cms/listEntriesResolver.js +115 -0
- package/graphql/schema/cms/listEntriesResolver.js.map +1 -0
- package/graphql/schema/cms/publishEntryResolver.d.ts +10 -0
- package/graphql/schema/cms/publishEntryResolver.js +65 -0
- package/graphql/schema/cms/publishEntryResolver.js.map +1 -0
- package/graphql/schema/cms/resolvers/createEntry.d.ts +8 -0
- package/graphql/schema/cms/resolvers/createEntry.js +17 -0
- package/graphql/schema/cms/resolvers/createEntry.js.map +1 -0
- package/graphql/schema/cms/resolvers/deleteEntryRevision.d.ts +8 -0
- package/graphql/schema/cms/resolvers/deleteEntryRevision.js +17 -0
- package/graphql/schema/cms/resolvers/deleteEntryRevision.js.map +1 -0
- package/graphql/schema/cms/resolvers/getEntry.d.ts +8 -0
- package/graphql/schema/cms/resolvers/getEntry.js +17 -0
- package/graphql/schema/cms/resolvers/getEntry.js.map +1 -0
- package/graphql/schema/cms/resolvers/index.d.ts +9 -0
- package/graphql/schema/cms/resolvers/index.js +11 -0
- package/graphql/schema/cms/resolvers/index.js.map +1 -0
- package/graphql/schema/cms/resolvers/listEntries.d.ts +8 -0
- package/graphql/schema/cms/resolvers/listEntries.js +17 -0
- package/graphql/schema/cms/resolvers/listEntries.js.map +1 -0
- package/graphql/schema/cms/resolvers/mutationCms.d.ts +8 -0
- package/graphql/schema/cms/resolvers/mutationCms.js +24 -0
- package/graphql/schema/cms/resolvers/mutationCms.js.map +1 -0
- package/graphql/schema/cms/resolvers/publishEntryRevision.d.ts +8 -0
- package/graphql/schema/cms/resolvers/publishEntryRevision.js +17 -0
- package/graphql/schema/cms/resolvers/publishEntryRevision.js.map +1 -0
- package/graphql/schema/cms/resolvers/queryCms.d.ts +8 -0
- package/graphql/schema/cms/resolvers/queryCms.js +23 -0
- package/graphql/schema/cms/resolvers/queryCms.js.map +1 -0
- package/graphql/schema/cms/resolvers/unpublishEntryRevision.d.ts +8 -0
- package/graphql/schema/cms/resolvers/unpublishEntryRevision.js +17 -0
- package/graphql/schema/cms/resolvers/unpublishEntryRevision.js.map +1 -0
- package/graphql/schema/cms/resolvers/updateEntryRevision.d.ts +8 -0
- package/graphql/schema/cms/resolvers/updateEntryRevision.js +17 -0
- package/graphql/schema/cms/resolvers/updateEntryRevision.js.map +1 -0
- package/graphql/schema/cms/typeDefs/index.d.ts +3 -0
- package/graphql/schema/cms/typeDefs/index.js +5 -0
- package/graphql/schema/cms/typeDefs/index.js.map +1 -0
- package/graphql/schema/cms/typeDefs/mutation.d.ts +8 -0
- package/graphql/schema/cms/typeDefs/mutation.js +42 -0
- package/graphql/schema/cms/typeDefs/mutation.js.map +1 -0
- package/graphql/schema/cms/typeDefs/query.d.ts +8 -0
- package/graphql/schema/cms/typeDefs/query.js +36 -0
- package/graphql/schema/cms/typeDefs/query.js.map +1 -0
- package/graphql/schema/cms/typeDefs/responses.d.ts +8 -0
- package/graphql/schema/cms/typeDefs/responses.js +35 -0
- package/graphql/schema/cms/typeDefs/responses.js.map +1 -0
- package/graphql/schema/cms/unpublishEntryResolver.d.ts +10 -0
- package/graphql/schema/cms/unpublishEntryResolver.js +65 -0
- package/graphql/schema/cms/unpublishEntryResolver.js.map +1 -0
- package/graphql/schema/cms/updateEntryResolver.d.ts +11 -0
- package/graphql/schema/cms/updateEntryResolver.js +67 -0
- package/graphql/schema/cms/updateEntryResolver.js.map +1 -0
- package/graphql/schema/contentEntries.js +1 -1
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModels.js +31 -9
- package/graphql/schema/contentModels.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 +5 -3
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +4 -4
- package/graphql/schema/createManageSDL.js +16 -11
- 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 +5 -4
- package/graphql/schema/createSingularSDL.js.map +1 -1
- package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js +9 -7
- package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUpdateRevisionDescription.d.ts +8 -0
- package/graphql/schema/resolvers/manage/resolveUpdateRevisionDescription.js +13 -0
- package/graphql/schema/resolvers/manage/resolveUpdateRevisionDescription.js.map +1 -0
- package/graphql/schema/schemaPlugins.js +14 -17
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/index.d.ts +3 -5
- package/index.js +4 -7
- package/index.js.map +1 -1
- package/package.json +36 -32
- package/plugins/CmsModelPlugin.js +19 -4
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/index.d.ts +0 -2
- package/plugins/index.js +0 -2
- package/plugins/index.js.map +1 -1
- package/types/context.d.ts +5 -5
- package/types/context.js.map +1 -1
- package/types/fields/objectField.d.ts +2 -0
- package/types/fields/objectField.js.map +1 -1
- package/types/model.d.ts +39 -3
- package/types/model.js.map +1 -1
- package/types/modelField.d.ts +47 -15
- 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 +28 -61
- 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/types.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/createModelField.js +10 -8
- package/utils/createModelField.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/utils/toSlug.js +1 -1
- package/utils/toSlug.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/state.d.ts +0 -10
- package/crud/contentEntry/entryDataFactories/state.js +0 -16
- package/crud/contentEntry/entryDataFactories/state.js.map +0 -1
- package/crud/contentModel/validateModel.d.ts +0 -9
- package/crud/contentModel/validateModel.js +0 -21
- package/crud/contentModel/validateModel.js.map +0 -1
- package/crud/contentModel/validateModelFields.d.ts +0 -9
- package/crud/contentModel/validateModelFields.js +0 -267
- package/crud/contentModel/validateModelFields.js.map +0 -1
- package/features/modelBuilder/fields/validators.js +0 -3
- package/features/modelBuilder/fields/validators.js.map +0 -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/utils/contentEntryTraverser/ContentEntryTraverser.js.map +0 -1
- package/validators/dateGte.d.ts +0 -2
- package/validators/dateGte.js +0 -25
- package/validators/dateGte.js.map +0 -1
- package/validators/dateLte.d.ts +0 -2
- package/validators/dateLte.js +0 -25
- package/validators/dateLte.js.map +0 -1
- package/validators/gte.d.ts +0 -2
- package/validators/gte.js +0 -22
- package/validators/gte.js.map +0 -1
- package/validators/in.d.ts +0 -2
- package/validators/in.js +0 -22
- package/validators/in.js.map +0 -1
- package/validators/index.d.ts +0 -1
- package/validators/index.js +0 -16
- package/validators/index.js.map +0 -1
- package/validators/lte.d.ts +0 -2
- package/validators/lte.js +0 -22
- package/validators/lte.js.map +0 -1
- package/validators/maxLength.d.ts +0 -2
- package/validators/maxLength.js +0 -22
- package/validators/maxLength.js.map +0 -1
- package/validators/minLength.d.ts +0 -2
- package/validators/minLength.js +0 -22
- package/validators/minLength.js.map +0 -1
- package/validators/pattern.d.ts +0 -2
- package/validators/pattern.js +0 -36
- package/validators/pattern.js.map +0 -1
- package/validators/patternPlugins/email.d.ts +0 -2
- package/validators/patternPlugins/email.js +0 -13
- package/validators/patternPlugins/email.js.map +0 -1
- package/validators/patternPlugins/index.d.ts +0 -2
- package/validators/patternPlugins/index.js +0 -11
- package/validators/patternPlugins/index.js.map +0 -1
- package/validators/patternPlugins/lowerCase.d.ts +0 -2
- package/validators/patternPlugins/lowerCase.js +0 -13
- package/validators/patternPlugins/lowerCase.js.map +0 -1
- package/validators/patternPlugins/lowerCaseSpace.d.ts +0 -2
- package/validators/patternPlugins/lowerCaseSpace.js +0 -13
- package/validators/patternPlugins/lowerCaseSpace.js.map +0 -1
- package/validators/patternPlugins/upperCase.d.ts +0 -2
- package/validators/patternPlugins/upperCase.js +0 -13
- package/validators/patternPlugins/upperCase.js.map +0 -1
- package/validators/patternPlugins/upperCaseSpace.d.ts +0 -2
- package/validators/patternPlugins/upperCaseSpace.js +0 -13
- package/validators/patternPlugins/upperCaseSpace.js.map +0 -1
- package/validators/patternPlugins/url.d.ts +0 -2
- package/validators/patternPlugins/url.js +0 -13
- package/validators/patternPlugins/url.js.map +0 -1
- package/validators/required.d.ts +0 -2
- package/validators/required.js +0 -17
- package/validators/required.js.map +0 -1
- package/validators/timeGte.d.ts +0 -2
- package/validators/timeGte.js +0 -20
- package/validators/timeGte.js.map +0 -1
- package/validators/timeLte.d.ts +0 -2
- package/validators/timeLte.js +0 -20
- package/validators/timeLte.js.map +0 -1
- package/validators/unique.d.ts +0 -6
- package/validators/unique.js +0 -57
- package/validators/unique.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createFeature","createMemoryCache","PluginModelsProvider","ModelCache","ModelsFetcher","CreateModelFeature","CreateModelFromFeature","UpdateModelFeature","DeleteModelFeature","GetModelFeature","ListModelsFeature","ModelToAstConverterFeature","ContentModelFeature","name","register","container","registerInstance","inSingletonScope"],"sources":["ContentModelFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { createMemoryCache } from \"~/utils/index.js\";\nimport { PluginModelsProvider } from \"
|
|
1
|
+
{"version":3,"names":["createFeature","createMemoryCache","PluginModelsProvider","ModelCache","ModelsFetcher","CreateModelFeature","CreateModelFromFeature","UpdateModelFeature","DeleteModelFeature","GetModelFeature","ListModelsFeature","ModelToAstConverterFeature","ModelFieldCompressionFeature","ContentModelFeature","name","register","container","registerInstance","inSingletonScope"],"sources":["ContentModelFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { createMemoryCache } from \"~/utils/index.js\";\nimport { PluginModelsProvider } from \"./shared/PluginModelsProvider.js\";\nimport { ModelCache } from \"./shared/abstractions.js\";\nimport { ModelsFetcher } from \"./shared/ModelsFetcher.js\";\nimport { CreateModelFeature } from \"./CreateModel/feature.js\";\nimport { CreateModelFromFeature } from \"./CreateModelFrom/feature.js\";\nimport { UpdateModelFeature } from \"./UpdateModel/feature.js\";\nimport { DeleteModelFeature } from \"./DeleteModel/feature.js\";\nimport { GetModelFeature } from \"./GetModel/feature.js\";\nimport { ListModelsFeature } from \"./ListModels/feature.js\";\nimport { ModelToAstConverterFeature } from \"./ModelToAstConverter/feature.js\";\nimport { ModelFieldCompressionFeature } from \"./ModelFieldCompression/feature.js\";\n\nexport const ContentModelFeature = createFeature({\n name: \"ContentModel\",\n register(container) {\n container.registerInstance(ModelCache, createMemoryCache());\n container.register(PluginModelsProvider).inSingletonScope();\n container.register(ModelsFetcher).inSingletonScope();\n\n ModelToAstConverterFeature.register(container);\n\n ModelFieldCompressionFeature.register(container);\n\n // Query features\n GetModelFeature.register(container);\n ListModelsFeature.register(container);\n\n // Command features\n CreateModelFeature.register(container);\n CreateModelFromFeature.register(container);\n UpdateModelFeature.register(container);\n DeleteModelFeature.register(container);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,iBAAiB;AAC1B,SAASC,oBAAoB;AAC7B,SAASC,UAAU;AACnB,SAASC,aAAa;AACtB,SAASC,kBAAkB;AAC3B,SAASC,sBAAsB;AAC/B,SAASC,kBAAkB;AAC3B,SAASC,kBAAkB;AAC3B,SAASC,eAAe;AACxB,SAASC,iBAAiB;AAC1B,SAASC,0BAA0B;AACnC,SAASC,4BAA4B;AAErC,OAAO,MAAMC,mBAAmB,GAAGb,aAAa,CAAC;EAC7Cc,IAAI,EAAE,cAAc;EACpBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACC,gBAAgB,CAACd,UAAU,EAAEF,iBAAiB,CAAC,CAAC,CAAC;IAC3De,SAAS,CAACD,QAAQ,CAACb,oBAAoB,CAAC,CAACgB,gBAAgB,CAAC,CAAC;IAC3DF,SAAS,CAACD,QAAQ,CAACX,aAAa,CAAC,CAACc,gBAAgB,CAAC,CAAC;IAEpDP,0BAA0B,CAACI,QAAQ,CAACC,SAAS,CAAC;IAE9CJ,4BAA4B,CAACG,QAAQ,CAACC,SAAS,CAAC;;IAEhD;IACAP,eAAe,CAACM,QAAQ,CAACC,SAAS,CAAC;IACnCN,iBAAiB,CAACK,QAAQ,CAACC,SAAS,CAAC;;IAErC;IACAX,kBAAkB,CAACU,QAAQ,CAACC,SAAS,CAAC;IACtCV,sBAAsB,CAACS,QAAQ,CAACC,SAAS,CAAC;IAC1CT,kBAAkB,CAACQ,QAAQ,CAACC,SAAS,CAAC;IACtCR,kBAAkB,CAACO,QAAQ,CAACC,SAAS,CAAC;EAC1C;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { CreateModelRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
3
|
-
import { ModelCache } from "../../../features/contentModel/shared/abstractions.js";
|
|
4
|
-
import { PluginModelsProvider } from "../../../features/contentModel/shared/abstractions.js";
|
|
3
|
+
import { ModelCache, PluginModelsProvider } from "../../../features/contentModel/shared/abstractions.js";
|
|
5
4
|
import { ListModelsUseCase } from "../../../features/contentModel/ListModels/index.js";
|
|
6
|
-
import { StorageOperations } from "../../../features/shared/abstractions.js";
|
|
7
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
8
|
-
import { CmsContext } from "../../../features/shared/abstractions.js";
|
|
5
|
+
import { CmsContext, StorageOperations } from "../../../features/shared/abstractions.js";
|
|
6
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
9
7
|
import type { CmsModel } from "../../../types/index.js";
|
|
8
|
+
import { ModelFieldCompression } from "../../../features/contentModel/ModelFieldCompression/index.js";
|
|
10
9
|
/**
|
|
11
10
|
* CreateModelRepository - Validates domain rules and persists a new model.
|
|
12
11
|
*
|
|
@@ -22,13 +21,14 @@ import type { CmsModel } from "../../../types/index.js";
|
|
|
22
21
|
* - Clear ModelCache after successful create
|
|
23
22
|
*/
|
|
24
23
|
declare class CreateModelRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
25
|
-
private modelCache;
|
|
26
|
-
private pluginModelsProvider;
|
|
27
|
-
private listModelsUseCase;
|
|
28
|
-
private storageOperations;
|
|
29
|
-
private tenantContext;
|
|
30
|
-
private cmsContext;
|
|
31
|
-
|
|
24
|
+
private readonly modelCache;
|
|
25
|
+
private readonly pluginModelsProvider;
|
|
26
|
+
private readonly listModelsUseCase;
|
|
27
|
+
private readonly storageOperations;
|
|
28
|
+
private readonly tenantContext;
|
|
29
|
+
private readonly cmsContext;
|
|
30
|
+
private readonly modelFieldCompression;
|
|
31
|
+
constructor(modelCache: ModelCache.Interface, pluginModelsProvider: PluginModelsProvider.Interface, listModelsUseCase: ListModelsUseCase.Interface, storageOperations: StorageOperations.Interface, tenantContext: TenantContext.Interface, cmsContext: CmsContext.Interface, modelFieldCompression: ModelFieldCompression.Interface);
|
|
32
32
|
execute(model: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>>;
|
|
33
33
|
}
|
|
34
34
|
export declare const CreateModelRepository: typeof CreateModelRepositoryImpl & {
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import camelCase from "lodash/camelCase.js";
|
|
2
2
|
import { Result } from "@webiny/feature/api";
|
|
3
3
|
import { CreateModelRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
4
|
-
import { ModelCache } from "../shared/abstractions.js";
|
|
5
|
-
import { PluginModelsProvider } from "../shared/abstractions.js";
|
|
4
|
+
import { ModelCache, PluginModelsProvider } from "../shared/abstractions.js";
|
|
6
5
|
import { ListModelsUseCase } from "../ListModels/index.js";
|
|
7
|
-
import { ModelAlreadyExistsError } from "../../../domain/contentModel/errors.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { StorageOperations } from "../../shared/abstractions.js";
|
|
11
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
12
|
-
import { CmsContext } from "../../shared/abstractions.js";
|
|
6
|
+
import { ModelAlreadyExistsError, ModelPersistenceError, ModelValidationError } from "../../../domain/contentModel/errors.js";
|
|
7
|
+
import { CmsContext, StorageOperations } from "../../shared/abstractions.js";
|
|
8
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
13
9
|
import { validateExistingModelId, validateModelIdAllowed } from "../../../crud/contentModel/validate/modelId.js";
|
|
14
10
|
import { validateEndingAllowed } from "../../../crud/contentModel/validate/endingAllowed.js";
|
|
15
11
|
import { ensureTypeTag } from "../../../domain/contentModel/ensureTypeTag.js";
|
|
16
12
|
import { validateSingularApiName } from "../../../domain/contentModel/validation/singularApiName.js";
|
|
17
13
|
import { validatePluralApiName } from "../../../domain/contentModel/validation/pluralApiName.js";
|
|
18
14
|
import { validateModelFields } from "../../../domain/contentModel/validation/modelFields.js";
|
|
15
|
+
import { ModelFieldCompression } from "../ModelFieldCompression/index.js";
|
|
19
16
|
|
|
20
17
|
/**
|
|
21
18
|
* Generate modelId from model following the exact logic from beforeCreate.ts
|
|
@@ -53,13 +50,14 @@ const getModelId = model => {
|
|
|
53
50
|
* - Clear ModelCache after successful create
|
|
54
51
|
*/
|
|
55
52
|
class CreateModelRepositoryImpl {
|
|
56
|
-
constructor(modelCache, pluginModelsProvider, listModelsUseCase, storageOperations, tenantContext, cmsContext) {
|
|
53
|
+
constructor(modelCache, pluginModelsProvider, listModelsUseCase, storageOperations, tenantContext, cmsContext, modelFieldCompression) {
|
|
57
54
|
this.modelCache = modelCache;
|
|
58
55
|
this.pluginModelsProvider = pluginModelsProvider;
|
|
59
56
|
this.listModelsUseCase = listModelsUseCase;
|
|
60
57
|
this.storageOperations = storageOperations;
|
|
61
58
|
this.tenantContext = tenantContext;
|
|
62
59
|
this.cmsContext = cmsContext;
|
|
60
|
+
this.modelFieldCompression = modelFieldCompression;
|
|
63
61
|
}
|
|
64
62
|
async execute(model) {
|
|
65
63
|
try {
|
|
@@ -138,15 +136,22 @@ class CreateModelRepositoryImpl {
|
|
|
138
136
|
context: this.cmsContext
|
|
139
137
|
});
|
|
140
138
|
} catch (error) {
|
|
141
|
-
return Result.fail(new ModelValidationError(
|
|
139
|
+
return Result.fail(new ModelValidationError({
|
|
140
|
+
message: error.message,
|
|
141
|
+
data: error.data
|
|
142
|
+
}));
|
|
142
143
|
}
|
|
143
144
|
|
|
144
145
|
// TODO: ideally, this will eventually be handled by the Model domain object
|
|
145
146
|
model.tags = ensureTypeTag(model);
|
|
147
|
+
const fields = await this.modelFieldCompression.compress(model.fields);
|
|
146
148
|
|
|
147
149
|
// Persist to storage
|
|
148
150
|
await this.storageOperations.models.create({
|
|
149
|
-
model
|
|
151
|
+
model: {
|
|
152
|
+
...model,
|
|
153
|
+
fields
|
|
154
|
+
}
|
|
150
155
|
});
|
|
151
156
|
|
|
152
157
|
// Clear cache
|
|
@@ -160,7 +165,7 @@ class CreateModelRepositoryImpl {
|
|
|
160
165
|
}
|
|
161
166
|
export const CreateModelRepository = RepositoryAbstraction.createImplementation({
|
|
162
167
|
implementation: CreateModelRepositoryImpl,
|
|
163
|
-
dependencies: [ModelCache, PluginModelsProvider, ListModelsUseCase, StorageOperations, TenantContext, CmsContext]
|
|
168
|
+
dependencies: [ModelCache, PluginModelsProvider, ListModelsUseCase, StorageOperations, TenantContext, CmsContext, ModelFieldCompression]
|
|
164
169
|
});
|
|
165
170
|
|
|
166
171
|
//# sourceMappingURL=CreateModelRepository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["camelCase","Result","CreateModelRepository","RepositoryAbstraction","ModelCache","PluginModelsProvider","ListModelsUseCase","ModelAlreadyExistsError","ModelPersistenceError","ModelValidationError","StorageOperations","TenantContext","CmsContext","validateExistingModelId","validateModelIdAllowed","validateEndingAllowed","ensureTypeTag","validateSingularApiName","validatePluralApiName","validateModelFields","getModelId","model","modelId","name","value","trim","isModelIdValid","toLowerCase","CreateModelRepositoryImpl","constructor","modelCache","pluginModelsProvider","listModelsUseCase","storageOperations","tenantContext","cmsContext","execute","tenant","getTenant","error","fail","message","data","pluginModels","list","id","pluginModelConflict","find","pm","modelsResult","isFail","models","existingModel","context","tags","create","clear","ok","console","stack","createImplementation","implementation","dependencies"],"sources":["CreateModelRepository.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { CreateModelRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { ModelCache } from \"~/features/contentModel/shared/abstractions.js\";\nimport { PluginModelsProvider } from \"~/features/contentModel/shared/abstractions.js\";\nimport { ListModelsUseCase } from \"~/features/contentModel/ListModels/index.js\";\nimport { ModelAlreadyExistsError } from \"~/domain/contentModel/errors.js\";\nimport { ModelPersistenceError } from \"~/domain/contentModel/errors.js\";\nimport { ModelValidationError } from \"~/domain/contentModel/errors.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/TenantContext\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport {\n validateExistingModelId,\n validateModelIdAllowed\n} from \"~/crud/contentModel/validate/modelId.js\";\nimport { validateEndingAllowed } from \"~/crud/contentModel/validate/endingAllowed.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { ensureTypeTag } from \"~/domain/contentModel/ensureTypeTag.js\";\nimport { validateSingularApiName } from \"~/domain/contentModel/validation/singularApiName.js\";\nimport { validatePluralApiName } from \"~/domain/contentModel/validation/pluralApiName.js\";\nimport { validateModelFields } from \"~/domain/contentModel/validation/modelFields.js\";\n\n/**\n * Generate modelId from model following the exact logic from beforeCreate.ts\n */\nconst getModelId = (model: { modelId?: string; name?: string }): string => {\n const { modelId, name } = model;\n const value = modelId ? modelId.trim() : null;\n if (value) {\n const isModelIdValid = camelCase(value).toLowerCase() === value.toLowerCase();\n if (isModelIdValid) {\n return value;\n }\n return camelCase(value);\n } else if (name) {\n return camelCase(name.trim());\n }\n throw new ModelValidationError(\n `There is no \"modelId\" or \"name\" passed into the create model method.`\n );\n};\n\n/**\n * CreateModelRepository - Validates domain rules and persists a new model.\n *\n * Responsibilities:\n * - Generate modelId from input\n * - Validate modelId is allowed (not in disallowed list)\n * - Validate API name endings\n * - Validate modelId uniqueness (database + plugins)\n * - Validate API name uniqueness (database + plugins)\n * - Validate plugin conflicts\n * - Validate model fields\n * - Persist to storage\n * - Clear ModelCache after successful create\n */\nclass CreateModelRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private modelCache: ModelCache.Interface,\n private pluginModelsProvider: PluginModelsProvider.Interface,\n private listModelsUseCase: ListModelsUseCase.Interface,\n private storageOperations: StorageOperations.Interface,\n private tenantContext: TenantContext.Interface,\n private cmsContext: CmsContext.Interface\n ) {}\n\n async execute(model: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // TODO: this will eventually become part of the Model domain object.\n const modelId = getModelId(model);\n model.modelId = modelId;\n\n // Validate modelId is allowed (not in disallowed list)\n try {\n validateModelIdAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({\n message: error.message,\n data: error.data\n })\n );\n }\n\n // Validate API name endings\n try {\n validateEndingAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({\n message: error.message,\n data: error.data\n })\n );\n }\n\n // Check for plugin model conflicts\n const pluginModels = await this.pluginModelsProvider.list(tenant.id);\n const pluginModelConflict = pluginModels.find(pm => {\n return pm.modelId === model.modelId;\n });\n\n if (pluginModelConflict) {\n return Result.fail(\n new ModelAlreadyExistsError({\n modelId,\n message: `Model \"${modelId}\" is already registered via a plugin.`\n })\n );\n }\n\n // Get all models for further validation\n const modelsResult = await this.listModelsUseCase.execute();\n\n if (modelsResult.isFail()) {\n return Result.fail(new ModelPersistenceError(modelsResult.error));\n }\n\n const models = modelsResult.value;\n\n try {\n /**\n * We need to check for the existence of:\n * - modelId\n * - singularApiName\n * - pluralApiName\n */\n for (const existingModel of models) {\n validateExistingModelId({\n existingModel,\n model\n });\n validateSingularApiName({\n existingModel,\n model\n });\n validatePluralApiName({\n existingModel,\n model\n });\n }\n\n await validateModelFields({\n models,\n model,\n context: this.cmsContext\n });\n } catch (error) {\n return Result.fail(new ModelValidationError((error as Error).message));\n }\n\n // TODO: ideally, this will eventually be handled by the Model domain object\n model.tags = ensureTypeTag(model);\n\n // Persist to storage\n await this.storageOperations.models.create({ model });\n\n // Clear cache\n this.modelCache.clear();\n\n return Result.ok();\n } catch (error) {\n console.error(error, error.stack);\n return Result.fail(new ModelPersistenceError(error as Error));\n }\n }\n}\n\nexport const CreateModelRepository = RepositoryAbstraction.createImplementation({\n implementation: CreateModelRepositoryImpl,\n dependencies: [\n ModelCache,\n PluginModelsProvider,\n ListModelsUseCase,\n StorageOperations,\n TenantContext,\n CmsContext\n ]\n});\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,qBAAqB;AAC3C,SAASC,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,qBAAqB,IAAIC,qBAAqB;AACvD,SAASC,UAAU;AACnB,SAASC,oBAAoB;AAC7B,SAASC,iBAAiB;AAC1B,SAASC,uBAAuB;AAChC,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,iBAAiB;AAC1B,SAASC,aAAa,QAAQ,yCAAyC;AACvE,SAASC,UAAU;AACnB,SACIC,uBAAuB,EACvBC,sBAAsB;AAE1B,SAASC,qBAAqB;AAE9B,SAASC,aAAa;AACtB,SAASC,uBAAuB;AAChC,SAASC,qBAAqB;AAC9B,SAASC,mBAAmB;;AAE5B;AACA;AACA;AACA,MAAMC,UAAU,GAAIC,KAA0C,IAAa;EACvE,MAAM;IAAEC,OAAO;IAAEC;EAAK,CAAC,GAAGF,KAAK;EAC/B,MAAMG,KAAK,GAAGF,OAAO,GAAGA,OAAO,CAACG,IAAI,CAAC,CAAC,GAAG,IAAI;EAC7C,IAAID,KAAK,EAAE;IACP,MAAME,cAAc,GAAG1B,SAAS,CAACwB,KAAK,CAAC,CAACG,WAAW,CAAC,CAAC,KAAKH,KAAK,CAACG,WAAW,CAAC,CAAC;IAC7E,IAAID,cAAc,EAAE;MAChB,OAAOF,KAAK;IAChB;IACA,OAAOxB,SAAS,CAACwB,KAAK,CAAC;EAC3B,CAAC,MAAM,IAAID,IAAI,EAAE;IACb,OAAOvB,SAAS,CAACuB,IAAI,CAACE,IAAI,CAAC,CAAC,CAAC;EACjC;EACA,MAAM,IAAIhB,oBAAoB,CAC1B,sEACJ,CAAC;AACL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMmB,yBAAyB,CAA4C;EAChEC,WAAWA,CACNC,UAAgC,EAChCC,oBAAoD,EACpDC,iBAA8C,EAC9CC,iBAA8C,EAC9CC,aAAsC,EACtCC,UAAgC,EAC1C;IAAA,KANUL,UAAgC,GAAhCA,UAAgC;IAAA,KAChCC,oBAAoD,GAApDA,oBAAoD;IAAA,KACpDC,iBAA8C,GAA9CA,iBAA8C;IAAA,KAC9CC,iBAA8C,GAA9CA,iBAA8C;IAAA,KAC9CC,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,UAAgC,GAAhCA,UAAgC;EACzC;EAEH,MAAMC,OAAOA,CAACf,KAAe,EAAsD;IAC/E,IAAI;MACA,MAAMgB,MAAM,GAAG,IAAI,CAACH,aAAa,CAACI,SAAS,CAAC,CAAC;;MAE7C;MACA,MAAMhB,OAAO,GAAGF,UAAU,CAACC,KAAK,CAAC;MACjCA,KAAK,CAACC,OAAO,GAAGA,OAAO;;MAEvB;MACA,IAAI;QACAR,sBAAsB,CAAC;UAAEO;QAAM,CAAC,CAAC;MACrC,CAAC,CAAC,OAAOkB,KAAK,EAAE;QACZ,OAAOtC,MAAM,CAACuC,IAAI,CACd,IAAI/B,oBAAoB,CAAC;UACrBgC,OAAO,EAAEF,KAAK,CAACE,OAAO;UACtBC,IAAI,EAAEH,KAAK,CAACG;QAChB,CAAC,CACL,CAAC;MACL;;MAEA;MACA,IAAI;QACA3B,qBAAqB,CAAC;UAAEM;QAAM,CAAC,CAAC;MACpC,CAAC,CAAC,OAAOkB,KAAK,EAAE;QACZ,OAAOtC,MAAM,CAACuC,IAAI,CACd,IAAI/B,oBAAoB,CAAC;UACrBgC,OAAO,EAAEF,KAAK,CAACE,OAAO;UACtBC,IAAI,EAAEH,KAAK,CAACG;QAChB,CAAC,CACL,CAAC;MACL;;MAEA;MACA,MAAMC,YAAY,GAAG,MAAM,IAAI,CAACZ,oBAAoB,CAACa,IAAI,CAACP,MAAM,CAACQ,EAAE,CAAC;MACpE,MAAMC,mBAAmB,GAAGH,YAAY,CAACI,IAAI,CAACC,EAAE,IAAI;QAChD,OAAOA,EAAE,CAAC1B,OAAO,KAAKD,KAAK,CAACC,OAAO;MACvC,CAAC,CAAC;MAEF,IAAIwB,mBAAmB,EAAE;QACrB,OAAO7C,MAAM,CAACuC,IAAI,CACd,IAAIjC,uBAAuB,CAAC;UACxBe,OAAO;UACPmB,OAAO,EAAE,UAAUnB,OAAO;QAC9B,CAAC,CACL,CAAC;MACL;;MAEA;MACA,MAAM2B,YAAY,GAAG,MAAM,IAAI,CAACjB,iBAAiB,CAACI,OAAO,CAAC,CAAC;MAE3D,IAAIa,YAAY,CAACC,MAAM,CAAC,CAAC,EAAE;QACvB,OAAOjD,MAAM,CAACuC,IAAI,CAAC,IAAIhC,qBAAqB,CAACyC,YAAY,CAACV,KAAK,CAAC,CAAC;MACrE;MAEA,MAAMY,MAAM,GAAGF,YAAY,CAACzB,KAAK;MAEjC,IAAI;QACA;AAChB;AACA;AACA;AACA;AACA;QACgB,KAAK,MAAM4B,aAAa,IAAID,MAAM,EAAE;UAChCtC,uBAAuB,CAAC;YACpBuC,aAAa;YACb/B;UACJ,CAAC,CAAC;UACFJ,uBAAuB,CAAC;YACpBmC,aAAa;YACb/B;UACJ,CAAC,CAAC;UACFH,qBAAqB,CAAC;YAClBkC,aAAa;YACb/B;UACJ,CAAC,CAAC;QACN;QAEA,MAAMF,mBAAmB,CAAC;UACtBgC,MAAM;UACN9B,KAAK;UACLgC,OAAO,EAAE,IAAI,CAAClB;QAClB,CAAC,CAAC;MACN,CAAC,CAAC,OAAOI,KAAK,EAAE;QACZ,OAAOtC,MAAM,CAACuC,IAAI,CAAC,IAAI/B,oBAAoB,CAAE8B,KAAK,CAAWE,OAAO,CAAC,CAAC;MAC1E;;MAEA;MACApB,KAAK,CAACiC,IAAI,GAAGtC,aAAa,CAACK,KAAK,CAAC;;MAEjC;MACA,MAAM,IAAI,CAACY,iBAAiB,CAACkB,MAAM,CAACI,MAAM,CAAC;QAAElC;MAAM,CAAC,CAAC;;MAErD;MACA,IAAI,CAACS,UAAU,CAAC0B,KAAK,CAAC,CAAC;MAEvB,OAAOvD,MAAM,CAACwD,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,OAAOlB,KAAK,EAAE;MACZmB,OAAO,CAACnB,KAAK,CAACA,KAAK,EAAEA,KAAK,CAACoB,KAAK,CAAC;MACjC,OAAO1D,MAAM,CAACuC,IAAI,CAAC,IAAIhC,qBAAqB,CAAC+B,KAAc,CAAC,CAAC;IACjE;EACJ;AACJ;AAEA,OAAO,MAAMrC,qBAAqB,GAAGC,qBAAqB,CAACyD,oBAAoB,CAAC;EAC5EC,cAAc,EAAEjC,yBAAyB;EACzCkC,YAAY,EAAE,CACV1D,UAAU,EACVC,oBAAoB,EACpBC,iBAAiB,EACjBI,iBAAiB,EACjBC,aAAa,EACbC,UAAU;AAElB,CAAC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["camelCase","Result","CreateModelRepository","RepositoryAbstraction","ModelCache","PluginModelsProvider","ListModelsUseCase","ModelAlreadyExistsError","ModelPersistenceError","ModelValidationError","CmsContext","StorageOperations","TenantContext","validateExistingModelId","validateModelIdAllowed","validateEndingAllowed","ensureTypeTag","validateSingularApiName","validatePluralApiName","validateModelFields","ModelFieldCompression","getModelId","model","modelId","name","value","trim","isModelIdValid","toLowerCase","CreateModelRepositoryImpl","constructor","modelCache","pluginModelsProvider","listModelsUseCase","storageOperations","tenantContext","cmsContext","modelFieldCompression","execute","tenant","getTenant","error","fail","message","data","pluginModels","list","id","pluginModelConflict","find","pm","modelsResult","isFail","models","existingModel","context","tags","fields","compress","create","clear","ok","console","stack","createImplementation","implementation","dependencies"],"sources":["CreateModelRepository.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { CreateModelRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { ModelCache, PluginModelsProvider } from \"~/features/contentModel/shared/abstractions.js\";\nimport { ListModelsUseCase } from \"~/features/contentModel/ListModels/index.js\";\nimport {\n ModelAlreadyExistsError,\n ModelPersistenceError,\n ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport { CmsContext, StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport {\n validateExistingModelId,\n validateModelIdAllowed\n} from \"~/crud/contentModel/validate/modelId.js\";\nimport { validateEndingAllowed } from \"~/crud/contentModel/validate/endingAllowed.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { ensureTypeTag } from \"~/domain/contentModel/ensureTypeTag.js\";\nimport { validateSingularApiName } from \"~/domain/contentModel/validation/singularApiName.js\";\nimport { validatePluralApiName } from \"~/domain/contentModel/validation/pluralApiName.js\";\nimport { validateModelFields } from \"~/domain/contentModel/validation/modelFields.js\";\nimport { ModelFieldCompression } from \"~/features/contentModel/ModelFieldCompression/index.js\";\n\n/**\n * Generate modelId from model following the exact logic from beforeCreate.ts\n */\nconst getModelId = (model: { modelId?: string; name?: string }): string => {\n const { modelId, name } = model;\n const value = modelId ? modelId.trim() : null;\n if (value) {\n const isModelIdValid = camelCase(value).toLowerCase() === value.toLowerCase();\n if (isModelIdValid) {\n return value;\n }\n return camelCase(value);\n } else if (name) {\n return camelCase(name.trim());\n }\n throw new ModelValidationError(\n `There is no \"modelId\" or \"name\" passed into the create model method.`\n );\n};\n\n/**\n * CreateModelRepository - Validates domain rules and persists a new model.\n *\n * Responsibilities:\n * - Generate modelId from input\n * - Validate modelId is allowed (not in disallowed list)\n * - Validate API name endings\n * - Validate modelId uniqueness (database + plugins)\n * - Validate API name uniqueness (database + plugins)\n * - Validate plugin conflicts\n * - Validate model fields\n * - Persist to storage\n * - Clear ModelCache after successful create\n */\nclass CreateModelRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private readonly modelCache: ModelCache.Interface,\n private readonly pluginModelsProvider: PluginModelsProvider.Interface,\n private readonly listModelsUseCase: ListModelsUseCase.Interface,\n private readonly storageOperations: StorageOperations.Interface,\n private readonly tenantContext: TenantContext.Interface,\n private readonly cmsContext: CmsContext.Interface,\n private readonly modelFieldCompression: ModelFieldCompression.Interface\n ) {}\n\n async execute(model: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // TODO: this will eventually become part of the Model domain object.\n const modelId = getModelId(model);\n model.modelId = modelId;\n\n // Validate modelId is allowed (not in disallowed list)\n try {\n validateModelIdAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({\n message: error.message,\n data: error.data\n })\n );\n }\n\n // Validate API name endings\n try {\n validateEndingAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({\n message: error.message,\n data: error.data\n })\n );\n }\n\n // Check for plugin model conflicts\n const pluginModels = await this.pluginModelsProvider.list(tenant.id);\n const pluginModelConflict = pluginModels.find(pm => {\n return pm.modelId === model.modelId;\n });\n\n if (pluginModelConflict) {\n return Result.fail(\n new ModelAlreadyExistsError({\n modelId,\n message: `Model \"${modelId}\" is already registered via a plugin.`\n })\n );\n }\n\n // Get all models for further validation\n const modelsResult = await this.listModelsUseCase.execute();\n\n if (modelsResult.isFail()) {\n return Result.fail(new ModelPersistenceError(modelsResult.error));\n }\n\n const models = modelsResult.value;\n\n try {\n /**\n * We need to check for the existence of:\n * - modelId\n * - singularApiName\n * - pluralApiName\n */\n for (const existingModel of models) {\n validateExistingModelId({\n existingModel,\n model\n });\n validateSingularApiName({\n existingModel,\n model\n });\n validatePluralApiName({\n existingModel,\n model\n });\n }\n\n await validateModelFields({\n models,\n model,\n context: this.cmsContext\n });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // TODO: ideally, this will eventually be handled by the Model domain object\n model.tags = ensureTypeTag(model);\n\n const fields = await this.modelFieldCompression.compress(model.fields);\n\n // Persist to storage\n await this.storageOperations.models.create({\n model: {\n ...model,\n fields\n }\n });\n\n // Clear cache\n this.modelCache.clear();\n\n return Result.ok();\n } catch (error) {\n console.error(error, error.stack);\n return Result.fail(new ModelPersistenceError(error as Error));\n }\n }\n}\n\nexport const CreateModelRepository = RepositoryAbstraction.createImplementation({\n implementation: CreateModelRepositoryImpl,\n dependencies: [\n ModelCache,\n PluginModelsProvider,\n ListModelsUseCase,\n StorageOperations,\n TenantContext,\n CmsContext,\n ModelFieldCompression\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { CreateModelUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
3
3
|
import { CreateModelRepository } from "./abstractions.js";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { AccessControl } from "../../../features/shared/abstractions.js";
|
|
6
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
7
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
6
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
7
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
8
8
|
import type { CmsModel } from "../../../types/index.js";
|
|
9
9
|
import type { CmsModelCreateInput } from "../../../types/index.js";
|
|
10
10
|
/**
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { CreateModelUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
3
3
|
import { CreateModelRepository } from "./abstractions.js";
|
|
4
|
-
import { EventPublisher } from "@webiny/api-core/features/
|
|
4
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { ModelBeforeCreateEvent } from "./events.js";
|
|
6
6
|
import { ModelAfterCreateEvent } from "./events.js";
|
|
7
7
|
import { ModelCreateErrorEvent } from "./events.js";
|
|
8
8
|
import { AccessControl } from "../../shared/abstractions.js";
|
|
9
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
10
|
-
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
9
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
10
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
11
11
|
import { ModelNotAuthorizedError, ModelValidationError } from "../../../domain/contentModel/errors.js";
|
|
12
12
|
import { createZodError } from "@webiny/utils";
|
|
13
13
|
import { removeUndefinedValues } from "@webiny/utils";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","CreateModelUseCase","UseCaseAbstraction","CreateModelRepository","EventPublisher","ModelBeforeCreateEvent","ModelAfterCreateEvent","ModelCreateErrorEvent","AccessControl","TenantContext","IdentityContext","ModelNotAuthorizedError","ModelValidationError","createZodError","removeUndefinedValues","createModelCreateValidation","assignModelDefaultFields","CreateModelUseCaseImpl","constructor","eventPublisher","repository","accessControl","tenantContext","identityContext","execute","input","canAccess","canAccessModel","rwd","fail","validationResult","safeParseAsync","success","zodError","error","message","defaultFields","data","identity","getIdentity","tenant","getTenant","model","icon","modelId","id","createdOn","Date","toISOString","savedOn","createdBy","displayName","type","description","fields","layout","titleFieldId","descriptionFieldId","imageFieldId","fromModel","publish","result","isFail","ok","createImplementation","implementation","dependencies"],"sources":["CreateModelUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CreateModelUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { CreateModelRepository } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["Result","CreateModelUseCase","UseCaseAbstraction","CreateModelRepository","EventPublisher","ModelBeforeCreateEvent","ModelAfterCreateEvent","ModelCreateErrorEvent","AccessControl","TenantContext","IdentityContext","ModelNotAuthorizedError","ModelValidationError","createZodError","removeUndefinedValues","createModelCreateValidation","assignModelDefaultFields","CreateModelUseCaseImpl","constructor","eventPublisher","repository","accessControl","tenantContext","identityContext","execute","input","canAccess","canAccessModel","rwd","fail","validationResult","safeParseAsync","success","zodError","error","message","defaultFields","data","identity","getIdentity","tenant","getTenant","model","icon","modelId","id","createdOn","Date","toISOString","savedOn","createdBy","displayName","type","description","fields","layout","titleFieldId","descriptionFieldId","imageFieldId","fromModel","publish","result","isFail","ok","createImplementation","implementation","dependencies"],"sources":["CreateModelUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CreateModelUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { CreateModelRepository } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { ModelBeforeCreateEvent } from \"./events.js\";\nimport { ModelAfterCreateEvent } from \"./events.js\";\nimport { ModelCreateErrorEvent } from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { ModelNotAuthorizedError, ModelValidationError } from \"~/domain/contentModel/errors.js\";\nimport { createZodError } from \"@webiny/utils\";\nimport { removeUndefinedValues } from \"@webiny/utils\";\nimport { createModelCreateValidation } from \"~/domain/contentModel/schemas.js\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport type { CmsModelCreateInput } from \"~/types/index.js\";\n\n/**\n * CreateModelUseCase - Core model creation orchestration.\n *\n * Responsibilities:\n * - Validate input (Zod)\n * - Create domain model object\n * - Assign default fields if requested\n * - Access control checks\n * - Publish before event\n * - Delegate to repository\n * - Publish after event or error event\n *\n * Note: This use case is decorated by CreateModelValidator which handles:\n * - ModelId generation\n * - ModelId allowed validation\n * - API name ending validation\n * - Field validation and plugin conflict checks\n */\nclass CreateModelUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private eventPublisher: EventPublisher.Interface,\n private repository: CreateModelRepository.Interface,\n private accessControl: AccessControl.Interface,\n private tenantContext: TenantContext.Interface,\n private identityContext: IdentityContext.Interface\n ) {}\n\n async execute(input: CmsModelCreateInput): Promise<Result<CmsModel, UseCaseAbstraction.Error>> {\n // Initial access control check\n const canAccess = await this.accessControl.canAccessModel({ rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(new ModelNotAuthorizedError());\n }\n\n // Validate input\n const validationResult = await createModelCreateValidation().safeParseAsync(input);\n if (!validationResult.success) {\n const zodError = createZodError(validationResult.error);\n return Result.fail(new ModelValidationError(zodError.message));\n }\n\n // Extract defaultFields flag and remove it from data\n const { defaultFields, ...data } = removeUndefinedValues(validationResult.data);\n\n // Assign default fields if requested\n if (defaultFields) {\n assignModelDefaultFields(data);\n }\n\n // Create the domain model object\n const identity = this.identityContext.getIdentity();\n const tenant = this.tenantContext.getTenant();\n\n const model: CmsModel = {\n ...data,\n icon: data.icon ?? null,\n modelId: data.modelId ?? \"\", // Will be set by repository\n tenant: tenant.id,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n description: data.description || \"\",\n // Fields and layout from data\n fields: data.fields || [],\n layout: data.layout || [],\n // Title/description/image field IDs\n titleFieldId: data.titleFieldId || \"\",\n descriptionFieldId: data.descriptionFieldId,\n imageFieldId: data.imageFieldId\n };\n\n // Access control check on the created model\n const canAccessModel = await this.accessControl.canAccessModel({ model, rwd: \"w\" });\n if (!canAccessModel) {\n return Result.fail(ModelNotAuthorizedError.fromModel(model));\n }\n\n // Publish before event\n await this.eventPublisher.publish(new ModelBeforeCreateEvent({ model, input: data }));\n\n // Persist via repository (repository will validate and set modelId)\n const result = await this.repository.execute(model);\n if (result.isFail()) {\n // Publish error event\n await this.eventPublisher.publish(\n new ModelCreateErrorEvent({\n input,\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(new ModelAfterCreateEvent({ model }));\n\n return Result.ok(model);\n }\n}\n\nexport const CreateModelUseCase = UseCaseAbstraction.createImplementation({\n implementation: CreateModelUseCaseImpl,\n dependencies: [\n EventPublisher,\n CreateModelRepository,\n AccessControl,\n TenantContext,\n IdentityContext\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,kBAAkB,IAAIC,kBAAkB;AACjD,SAASC,qBAAqB;AAC9B,SAASC,cAAc,QAAQ,mDAAmD;AAClF,SAASC,sBAAsB;AAC/B,SAASC,qBAAqB;AAC9B,SAASC,qBAAqB;AAC9B,SAASC,aAAa;AACtB,SAASC,aAAa,QAAQ,0DAA0D;AACxF,SAASC,eAAe,QAAQ,6DAA6D;AAC7F,SAASC,uBAAuB,EAAEC,oBAAoB;AACtD,SAASC,cAAc,QAAQ,eAAe;AAC9C,SAASC,qBAAqB,QAAQ,eAAe;AACrD,SAASC,2BAA2B;AACpC,SAASC,wBAAwB;AAIjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,sBAAsB,CAAyC;EAC1DC,WAAWA,CACNC,cAAwC,EACxCC,UAA2C,EAC3CC,aAAsC,EACtCC,aAAsC,EACtCC,eAA0C,EACpD;IAAA,KALUJ,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,UAA2C,GAA3CA,UAA2C;IAAA,KAC3CC,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,eAA0C,GAA1CA,eAA0C;EACnD;EAEH,MAAMC,OAAOA,CAACC,KAA0B,EAAuD;IAC3F;IACA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACL,aAAa,CAACM,cAAc,CAAC;MAAEC,GAAG,EAAE;IAAI,CAAC,CAAC;IACvE,IAAI,CAACF,SAAS,EAAE;MACZ,OAAO1B,MAAM,CAAC6B,IAAI,CAAC,IAAIlB,uBAAuB,CAAC,CAAC,CAAC;IACrD;;IAEA;IACA,MAAMmB,gBAAgB,GAAG,MAAMf,2BAA2B,CAAC,CAAC,CAACgB,cAAc,CAACN,KAAK,CAAC;IAClF,IAAI,CAACK,gBAAgB,CAACE,OAAO,EAAE;MAC3B,MAAMC,QAAQ,GAAGpB,cAAc,CAACiB,gBAAgB,CAACI,KAAK,CAAC;MACvD,OAAOlC,MAAM,CAAC6B,IAAI,CAAC,IAAIjB,oBAAoB,CAACqB,QAAQ,CAACE,OAAO,CAAC,CAAC;IAClE;;IAEA;IACA,MAAM;MAAEC,aAAa;MAAE,GAAGC;IAAK,CAAC,GAAGvB,qBAAqB,CAACgB,gBAAgB,CAACO,IAAI,CAAC;;IAE/E;IACA,IAAID,aAAa,EAAE;MACfpB,wBAAwB,CAACqB,IAAI,CAAC;IAClC;;IAEA;IACA,MAAMC,QAAQ,GAAG,IAAI,CAACf,eAAe,CAACgB,WAAW,CAAC,CAAC;IACnD,MAAMC,MAAM,GAAG,IAAI,CAAClB,aAAa,CAACmB,SAAS,CAAC,CAAC;IAE7C,MAAMC,KAAe,GAAG;MACpB,GAAGL,IAAI;MACPM,IAAI,EAAEN,IAAI,CAACM,IAAI,IAAI,IAAI;MACvBC,OAAO,EAAEP,IAAI,CAACO,OAAO,IAAI,EAAE;MAAE;MAC7BJ,MAAM,EAAEA,MAAM,CAACK,EAAE;MACjBC,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACnCC,OAAO,EAAE,IAAIF,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACjCE,SAAS,EAAE;QACPL,EAAE,EAAEP,QAAQ,CAACO,EAAE;QACfM,WAAW,EAAEb,QAAQ,CAACa,WAAW;QACjCC,IAAI,EAAEd,QAAQ,CAACc;MACnB,CAAC;MACDC,WAAW,EAAEhB,IAAI,CAACgB,WAAW,IAAI,EAAE;MACnC;MACAC,MAAM,EAAEjB,IAAI,CAACiB,MAAM,IAAI,EAAE;MACzBC,MAAM,EAAElB,IAAI,CAACkB,MAAM,IAAI,EAAE;MACzB;MACAC,YAAY,EAAEnB,IAAI,CAACmB,YAAY,IAAI,EAAE;MACrCC,kBAAkB,EAAEpB,IAAI,CAACoB,kBAAkB;MAC3CC,YAAY,EAAErB,IAAI,CAACqB;IACvB,CAAC;;IAED;IACA,MAAM/B,cAAc,GAAG,MAAM,IAAI,CAACN,aAAa,CAACM,cAAc,CAAC;MAAEe,KAAK;MAAEd,GAAG,EAAE;IAAI,CAAC,CAAC;IACnF,IAAI,CAACD,cAAc,EAAE;MACjB,OAAO3B,MAAM,CAAC6B,IAAI,CAAClB,uBAAuB,CAACgD,SAAS,CAACjB,KAAK,CAAC,CAAC;IAChE;;IAEA;IACA,MAAM,IAAI,CAACvB,cAAc,CAACyC,OAAO,CAAC,IAAIvD,sBAAsB,CAAC;MAAEqC,KAAK;MAAEjB,KAAK,EAAEY;IAAK,CAAC,CAAC,CAAC;;IAErF;IACA,MAAMwB,MAAM,GAAG,MAAM,IAAI,CAACzC,UAAU,CAACI,OAAO,CAACkB,KAAK,CAAC;IACnD,IAAImB,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB;MACA,MAAM,IAAI,CAAC3C,cAAc,CAACyC,OAAO,CAC7B,IAAIrD,qBAAqB,CAAC;QACtBkB,KAAK;QACLiB,KAAK;QACLR,KAAK,EAAE2B,MAAM,CAAC3B;MAClB,CAAC,CACL,CAAC;MACD,OAAOlC,MAAM,CAAC6B,IAAI,CAACgC,MAAM,CAAC3B,KAAK,CAAC;IACpC;;IAEA;IACA,MAAM,IAAI,CAACf,cAAc,CAACyC,OAAO,CAAC,IAAItD,qBAAqB,CAAC;MAAEoC;IAAM,CAAC,CAAC,CAAC;IAEvE,OAAO1C,MAAM,CAAC+D,EAAE,CAACrB,KAAK,CAAC;EAC3B;AACJ;AAEA,OAAO,MAAMzC,kBAAkB,GAAGC,kBAAkB,CAAC8D,oBAAoB,CAAC;EACtEC,cAAc,EAAEhD,sBAAsB;EACtCiD,YAAY,EAAE,CACV9D,cAAc,EACdD,qBAAqB,EACrBK,aAAa,EACbC,aAAa,EACbC,eAAe;AAEvB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -18,6 +18,7 @@ export interface ICreateModelUseCaseErrors {
|
|
|
18
18
|
groupNotAccessible: GroupNotAuthorizedError;
|
|
19
19
|
}
|
|
20
20
|
type UseCaseError = ICreateModelUseCaseErrors[keyof ICreateModelUseCaseErrors];
|
|
21
|
+
/** Create a new content model. */
|
|
21
22
|
export declare const CreateModelUseCase: import("@webiny/di").Abstraction<ICreateModelUseCase>;
|
|
22
23
|
export declare namespace CreateModelUseCase {
|
|
23
24
|
type Interface = ICreateModelUseCase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","CreateModelUseCase","CreateModelRepository"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { CmsModel, CmsModelCreateInput } from \"~/types/index.js\";\nimport {\n ModelAlreadyExistsError,\n ModelNotAuthorizedError,\n type ModelPersistenceError,\n type ModelSlugTakenError,\n type ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport {\n type GroupNotAuthorizedError,\n type GroupNotFoundError\n} from \"~/domain/contentModelGroup/errors.js\";\n\n/**\n * CreateModel Use Case\n */\nexport interface ICreateModelUseCase {\n execute(input: CmsModelCreateInput): Promise<Result<CmsModel, UseCaseError>>;\n}\n\nexport interface ICreateModelUseCaseErrors {\n notAuthorized: ModelNotAuthorizedError;\n validation: ModelValidationError;\n slugTaken: ModelSlugTakenError;\n alreadyExists: ModelAlreadyExistsError;\n persistence: ModelPersistenceError;\n groupNotFound: GroupNotFoundError; // Reused from Group domain\n groupNotAccessible: GroupNotAuthorizedError; // Reused from Group domain\n}\n\ntype UseCaseError = ICreateModelUseCaseErrors[keyof ICreateModelUseCaseErrors];\n\nexport const CreateModelUseCase = createAbstraction<ICreateModelUseCase>(\"CreateModelUseCase\");\n\nexport namespace CreateModelUseCase {\n export type Interface = ICreateModelUseCase;\n export type Input = CmsModelCreateInput;\n\n export type Error = UseCaseError;\n export type Return = Promise<Result<CmsModel, UseCaseError>>;\n}\n\n/**\n * CreateModelRepository - Validates domain rules and persists a new model to storage.\n */\nexport interface ICreateModelRepository {\n execute(model: CmsModel): Promise<Result<void, RepositoryError>>;\n}\n\nexport interface ICreateModelRepositoryErrors {\n alreadyExists: ModelAlreadyExistsError;\n validation: ModelValidationError;\n persistence: ModelPersistenceError;\n}\n\ntype RepositoryError = ICreateModelRepositoryErrors[keyof ICreateModelRepositoryErrors];\n\nexport const CreateModelRepository =\n createAbstraction<ICreateModelRepository>(\"CreateModelRepository\");\n\nexport namespace CreateModelRepository {\n export type Interface = ICreateModelRepository;\n export type Error = RepositoryError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAc/D;AACA;AACA;;AAiBA,OAAO,MAAMC,kBAAkB,GAAGD,iBAAiB,CAAsB,oBAAoB,CAAC;;AAU9F;AACA;AACA;;AAaA,OAAO,MAAME,qBAAqB,GAC9BF,iBAAiB,CAAyB,uBAAuB,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","CreateModelUseCase","CreateModelRepository"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { CmsModel, CmsModelCreateInput } from \"~/types/index.js\";\nimport {\n ModelAlreadyExistsError,\n ModelNotAuthorizedError,\n type ModelPersistenceError,\n type ModelSlugTakenError,\n type ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport {\n type GroupNotAuthorizedError,\n type GroupNotFoundError\n} from \"~/domain/contentModelGroup/errors.js\";\n\n/**\n * CreateModel Use Case\n */\nexport interface ICreateModelUseCase {\n execute(input: CmsModelCreateInput): Promise<Result<CmsModel, UseCaseError>>;\n}\n\nexport interface ICreateModelUseCaseErrors {\n notAuthorized: ModelNotAuthorizedError;\n validation: ModelValidationError;\n slugTaken: ModelSlugTakenError;\n alreadyExists: ModelAlreadyExistsError;\n persistence: ModelPersistenceError;\n groupNotFound: GroupNotFoundError; // Reused from Group domain\n groupNotAccessible: GroupNotAuthorizedError; // Reused from Group domain\n}\n\ntype UseCaseError = ICreateModelUseCaseErrors[keyof ICreateModelUseCaseErrors];\n\n/** Create a new content model. */\nexport const CreateModelUseCase = createAbstraction<ICreateModelUseCase>(\"CreateModelUseCase\");\n\nexport namespace CreateModelUseCase {\n export type Interface = ICreateModelUseCase;\n export type Input = CmsModelCreateInput;\n\n export type Error = UseCaseError;\n export type Return = Promise<Result<CmsModel, UseCaseError>>;\n}\n\n/**\n * CreateModelRepository - Validates domain rules and persists a new model to storage.\n */\nexport interface ICreateModelRepository {\n execute(model: CmsModel): Promise<Result<void, RepositoryError>>;\n}\n\nexport interface ICreateModelRepositoryErrors {\n alreadyExists: ModelAlreadyExistsError;\n validation: ModelValidationError;\n persistence: ModelPersistenceError;\n}\n\ntype RepositoryError = ICreateModelRepositoryErrors[keyof ICreateModelRepositoryErrors];\n\nexport const CreateModelRepository =\n createAbstraction<ICreateModelRepository>(\"CreateModelRepository\");\n\nexport namespace CreateModelRepository {\n export type Interface = ICreateModelRepository;\n export type Error = RepositoryError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAc/D;AACA;AACA;;AAiBA;AACA,OAAO,MAAMC,kBAAkB,GAAGD,iBAAiB,CAAsB,oBAAoB,CAAC;;AAU9F;AACA;AACA;;AAaA,OAAO,MAAME,qBAAqB,GAC9BF,iBAAiB,CAAyB,uBAAuB,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 { CmsModel, CmsModelCreateInput } from "../../../types/index.js";
|
|
4
4
|
/**
|
|
5
5
|
* Event payloads
|
|
@@ -23,6 +23,7 @@ export declare class ModelBeforeCreateEvent extends DomainEvent<ModelBeforeCreat
|
|
|
23
23
|
eventType: "Cms/Model/BeforeCreate";
|
|
24
24
|
getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<ModelBeforeCreateEvent>>;
|
|
25
25
|
}
|
|
26
|
+
/** Hook into model lifecycle before a model is created. */
|
|
26
27
|
export declare const ModelBeforeCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<ModelBeforeCreateEvent>>;
|
|
27
28
|
export declare namespace ModelBeforeCreateEventHandler {
|
|
28
29
|
type Interface = IEventHandler<ModelBeforeCreateEvent>;
|
|
@@ -35,6 +36,7 @@ export declare class ModelAfterCreateEvent extends DomainEvent<ModelAfterCreateE
|
|
|
35
36
|
eventType: "Cms/Model/AfterCreate";
|
|
36
37
|
getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<ModelAfterCreateEvent>>;
|
|
37
38
|
}
|
|
39
|
+
/** Hook into model lifecycle after a model is created. */
|
|
38
40
|
export declare const ModelAfterCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<ModelAfterCreateEvent>>;
|
|
39
41
|
export declare namespace ModelAfterCreateEventHandler {
|
|
40
42
|
type Interface = IEventHandler<ModelAfterCreateEvent>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
import { DomainEvent } from "@webiny/api-core/features/
|
|
2
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Event payloads
|
|
@@ -14,6 +14,8 @@ export class ModelBeforeCreateEvent extends DomainEvent {
|
|
|
14
14
|
return ModelBeforeCreateEventHandler;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
+
|
|
18
|
+
/** Hook into model lifecycle before a model is created. */
|
|
17
19
|
export const ModelBeforeCreateEventHandler = createAbstraction("ModelBeforeCreateEventHandler");
|
|
18
20
|
/**
|
|
19
21
|
* ModelAfterCreateEvent - Published after creating a model
|
|
@@ -24,6 +26,8 @@ export class ModelAfterCreateEvent extends DomainEvent {
|
|
|
24
26
|
return ModelAfterCreateEventHandler;
|
|
25
27
|
}
|
|
26
28
|
}
|
|
29
|
+
|
|
30
|
+
/** Hook into model lifecycle after a model is created. */
|
|
27
31
|
export const ModelAfterCreateEventHandler = createAbstraction("ModelAfterCreateEventHandler");
|
|
28
32
|
/**
|
|
29
33
|
* ModelCreateErrorEvent - Published when create fails
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","ModelBeforeCreateEvent","eventType","getHandlerAbstraction","ModelBeforeCreateEventHandler","ModelAfterCreateEvent","ModelAfterCreateEventHandler","ModelCreateErrorEvent","ModelCreateErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","ModelBeforeCreateEvent","eventType","getHandlerAbstraction","ModelBeforeCreateEventHandler","ModelAfterCreateEvent","ModelAfterCreateEventHandler","ModelCreateErrorEvent","ModelCreateErrorEventHandler"],"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 { CmsModel, CmsModelCreateInput } from \"~/types/index.js\";\n\n/**\n * Event payloads\n */\nexport interface ModelBeforeCreateEventPayload {\n model: CmsModel;\n input: CmsModelCreateInput;\n}\n\nexport interface ModelAfterCreateEventPayload {\n model: CmsModel;\n}\n\nexport interface ModelCreateErrorEventPayload {\n input: CmsModelCreateInput;\n model: CmsModel;\n error: Error;\n}\n\n/**\n * ModelBeforeCreateEvent - Published before creating a model\n */\nexport class ModelBeforeCreateEvent extends DomainEvent<ModelBeforeCreateEventPayload> {\n eventType = \"Cms/Model/BeforeCreate\" as const;\n\n getHandlerAbstraction() {\n return ModelBeforeCreateEventHandler;\n }\n}\n\n/** Hook into model lifecycle before a model is created. */\nexport const ModelBeforeCreateEventHandler = createAbstraction<\n IEventHandler<ModelBeforeCreateEvent>\n>(\"ModelBeforeCreateEventHandler\");\n\nexport namespace ModelBeforeCreateEventHandler {\n export type Interface = IEventHandler<ModelBeforeCreateEvent>;\n export type Event = ModelBeforeCreateEvent;\n}\n\n/**\n * ModelAfterCreateEvent - Published after creating a model\n */\nexport class ModelAfterCreateEvent extends DomainEvent<ModelAfterCreateEventPayload> {\n eventType = \"Cms/Model/AfterCreate\" as const;\n\n getHandlerAbstraction() {\n return ModelAfterCreateEventHandler;\n }\n}\n\n/** Hook into model lifecycle after a model is created. */\nexport const ModelAfterCreateEventHandler = createAbstraction<IEventHandler<ModelAfterCreateEvent>>(\n \"ModelAfterCreateEventHandler\"\n);\n\nexport namespace ModelAfterCreateEventHandler {\n export type Interface = IEventHandler<ModelAfterCreateEvent>;\n export type Event = ModelAfterCreateEvent;\n}\n\n/**\n * ModelCreateErrorEvent - Published when create fails\n */\nexport class ModelCreateErrorEvent extends DomainEvent<ModelCreateErrorEventPayload> {\n eventType = \"Cms/Model/CreateError\" as const;\n\n getHandlerAbstraction() {\n return ModelCreateErrorEventHandler;\n }\n}\n\nexport const ModelCreateErrorEventHandler = createAbstraction<IEventHandler<ModelCreateErrorEvent>>(\n \"ModelCreateErrorEventHandler\"\n);\n\nexport namespace ModelCreateErrorEventHandler {\n export type Interface = IEventHandler<ModelCreateErrorEvent>;\n export type Event = ModelCreateErrorEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAEvD,SAASC,WAAW,QAAQ,mDAAmD;;AAG/E;AACA;AACA;;AAgBA;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,SAASD,WAAW,CAAgC;EACnFE,SAAS,GAAG,wBAAwB;EAEpCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,6BAA6B;EACxC;AACJ;;AAEA;AACA,OAAO,MAAMA,6BAA6B,GAAGL,iBAAiB,CAE5D,+BAA+B,CAAC;AAOlC;AACA;AACA;AACA,OAAO,MAAMM,qBAAqB,SAASL,WAAW,CAA+B;EACjFE,SAAS,GAAG,uBAAuB;EAEnCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,4BAA4B;EACvC;AACJ;;AAEA;AACA,OAAO,MAAMA,4BAA4B,GAAGP,iBAAiB,CACzD,8BACJ,CAAC;AAOD;AACA;AACA;AACA,OAAO,MAAMQ,qBAAqB,SAASP,WAAW,CAA+B;EACjFE,SAAS,GAAG,uBAAuB;EAEnCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOK,4BAA4B;EACvC;AACJ;AAEA,OAAO,MAAMA,4BAA4B,GAAGT,iBAAiB,CACzD,8BACJ,CAAC","ignoreList":[]}
|
|
@@ -4,4 +4,7 @@
|
|
|
4
4
|
* Provides functionality for creating new content models.
|
|
5
5
|
* All validation (modelId generation, domain rules, uniqueness) is handled by the repository.
|
|
6
6
|
*/
|
|
7
|
-
export declare const CreateModelFeature:
|
|
7
|
+
export declare const CreateModelFeature: {
|
|
8
|
+
name: string;
|
|
9
|
+
register(container: import("@webiny/di").Container): void;
|
|
10
|
+
};
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { CreateModelFromRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
3
|
-
import { ModelCache } from "../../../features/contentModel/shared/abstractions.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { StorageOperations } from "../../../features/shared/abstractions.js";
|
|
7
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
8
|
-
import { CmsContext } from "../../../features/shared/abstractions.js";
|
|
3
|
+
import { ModelCache, ModelsFetcher, PluginModelsProvider } from "../../../features/contentModel/shared/abstractions.js";
|
|
4
|
+
import { CmsContext, StorageOperations } from "../../../features/shared/abstractions.js";
|
|
5
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
9
6
|
import type { CmsModel } from "../../../types/index.js";
|
|
7
|
+
import { ModelFieldCompression } from "../../../features/contentModel/ModelFieldCompression/index.js";
|
|
10
8
|
/**
|
|
11
9
|
* CreateModelFromRepository - Validates domain rules and persists cloned model.
|
|
12
10
|
*
|
|
@@ -22,13 +20,14 @@ import type { CmsModel } from "../../../types/index.js";
|
|
|
22
20
|
* - Clear ModelCache after successful create
|
|
23
21
|
*/
|
|
24
22
|
declare class CreateModelFromRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
25
|
-
private modelCache;
|
|
26
|
-
private pluginModelsProvider;
|
|
27
|
-
private modelsFetcher;
|
|
28
|
-
private storageOperations;
|
|
29
|
-
private tenantContext;
|
|
30
|
-
private cmsContext;
|
|
31
|
-
|
|
23
|
+
private readonly modelCache;
|
|
24
|
+
private readonly pluginModelsProvider;
|
|
25
|
+
private readonly modelsFetcher;
|
|
26
|
+
private readonly storageOperations;
|
|
27
|
+
private readonly tenantContext;
|
|
28
|
+
private readonly cmsContext;
|
|
29
|
+
private readonly modelFieldCompression;
|
|
30
|
+
constructor(modelCache: ModelCache.Interface, pluginModelsProvider: PluginModelsProvider.Interface, modelsFetcher: ModelsFetcher.Interface, storageOperations: StorageOperations.Interface, tenantContext: TenantContext.Interface, cmsContext: CmsContext.Interface, modelFieldCompression: ModelFieldCompression.Interface);
|
|
32
31
|
execute(model: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>>;
|
|
33
32
|
}
|
|
34
33
|
export declare const CreateModelFromRepository: typeof CreateModelFromRepositoryImpl & {
|
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
import camelCase from "lodash/camelCase.js";
|
|
2
2
|
import { Result } from "@webiny/feature/api";
|
|
3
3
|
import { CreateModelFromRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
4
|
-
import { ModelCache } from "../shared/abstractions.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { ModelPersistenceError } from "../../../domain/contentModel/errors.js";
|
|
9
|
-
import { ModelValidationError } from "../../../domain/contentModel/errors.js";
|
|
10
|
-
import { StorageOperations } from "../../shared/abstractions.js";
|
|
11
|
-
import { TenantContext } from "@webiny/api-core/features/TenantContext";
|
|
12
|
-
import { CmsContext } from "../../shared/abstractions.js";
|
|
4
|
+
import { ModelCache, ModelsFetcher, PluginModelsProvider } from "../shared/abstractions.js";
|
|
5
|
+
import { ModelAlreadyExistsError, ModelPersistenceError, ModelValidationError } from "../../../domain/contentModel/errors.js";
|
|
6
|
+
import { CmsContext, StorageOperations } from "../../shared/abstractions.js";
|
|
7
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
13
8
|
import { validateExistingModelId, validateModelIdAllowed } from "../../../crud/contentModel/validate/modelId.js";
|
|
14
9
|
import { validateEndingAllowed } from "../../../crud/contentModel/validate/endingAllowed.js";
|
|
15
10
|
import { validateSingularApiName } from "../../../domain/contentModel/validation/singularApiName.js";
|
|
16
11
|
import { validatePluralApiName } from "../../../domain/contentModel/validation/pluralApiName.js";
|
|
17
12
|
import { validateModelFields } from "../../../domain/contentModel/validation/modelFields.js";
|
|
18
13
|
import { ensureTypeTag } from "../../../domain/contentModel/ensureTypeTag.js";
|
|
14
|
+
import { ModelFieldCompression } from "../ModelFieldCompression/index.js";
|
|
19
15
|
|
|
20
16
|
/**
|
|
21
17
|
* Generate modelId from model following the exact logic from beforeCreate.ts
|
|
@@ -53,13 +49,14 @@ const getModelId = model => {
|
|
|
53
49
|
* - Clear ModelCache after successful create
|
|
54
50
|
*/
|
|
55
51
|
class CreateModelFromRepositoryImpl {
|
|
56
|
-
constructor(modelCache, pluginModelsProvider, modelsFetcher, storageOperations, tenantContext, cmsContext) {
|
|
52
|
+
constructor(modelCache, pluginModelsProvider, modelsFetcher, storageOperations, tenantContext, cmsContext, modelFieldCompression) {
|
|
57
53
|
this.modelCache = modelCache;
|
|
58
54
|
this.pluginModelsProvider = pluginModelsProvider;
|
|
59
55
|
this.modelsFetcher = modelsFetcher;
|
|
60
56
|
this.storageOperations = storageOperations;
|
|
61
57
|
this.tenantContext = tenantContext;
|
|
62
58
|
this.cmsContext = cmsContext;
|
|
59
|
+
this.modelFieldCompression = modelFieldCompression;
|
|
63
60
|
}
|
|
64
61
|
async execute(model) {
|
|
65
62
|
try {
|
|
@@ -75,7 +72,10 @@ class CreateModelFromRepositoryImpl {
|
|
|
75
72
|
model
|
|
76
73
|
});
|
|
77
74
|
} catch (error) {
|
|
78
|
-
return Result.fail(new ModelValidationError(
|
|
75
|
+
return Result.fail(new ModelValidationError({
|
|
76
|
+
message: error.message,
|
|
77
|
+
data: error.data
|
|
78
|
+
}));
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
// Validate API name endings
|
|
@@ -84,7 +84,10 @@ class CreateModelFromRepositoryImpl {
|
|
|
84
84
|
model
|
|
85
85
|
});
|
|
86
86
|
} catch (error) {
|
|
87
|
-
return Result.fail(new ModelValidationError(
|
|
87
|
+
return Result.fail(new ModelValidationError({
|
|
88
|
+
message: error.message,
|
|
89
|
+
data: error.data
|
|
90
|
+
}));
|
|
88
91
|
}
|
|
89
92
|
|
|
90
93
|
// Validate modelId uniqueness (database)
|
|
@@ -135,15 +138,22 @@ class CreateModelFromRepositoryImpl {
|
|
|
135
138
|
context: this.cmsContext
|
|
136
139
|
});
|
|
137
140
|
} catch (error) {
|
|
138
|
-
return Result.fail(new ModelValidationError(
|
|
141
|
+
return Result.fail(new ModelValidationError({
|
|
142
|
+
message: error.message,
|
|
143
|
+
data: error.data
|
|
144
|
+
}));
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
// Ensure type tags
|
|
142
148
|
model.tags = ensureTypeTag(model);
|
|
149
|
+
const fields = await this.modelFieldCompression.compress(model.fields);
|
|
143
150
|
|
|
144
151
|
// Persist to storage
|
|
145
152
|
await this.storageOperations.models.create({
|
|
146
|
-
model
|
|
153
|
+
model: {
|
|
154
|
+
...model,
|
|
155
|
+
fields
|
|
156
|
+
}
|
|
147
157
|
});
|
|
148
158
|
|
|
149
159
|
// Clear cache
|
|
@@ -156,7 +166,7 @@ class CreateModelFromRepositoryImpl {
|
|
|
156
166
|
}
|
|
157
167
|
export const CreateModelFromRepository = RepositoryAbstraction.createImplementation({
|
|
158
168
|
implementation: CreateModelFromRepositoryImpl,
|
|
159
|
-
dependencies: [ModelCache, PluginModelsProvider, ModelsFetcher, StorageOperations, TenantContext, CmsContext]
|
|
169
|
+
dependencies: [ModelCache, PluginModelsProvider, ModelsFetcher, StorageOperations, TenantContext, CmsContext, ModelFieldCompression]
|
|
160
170
|
});
|
|
161
171
|
|
|
162
172
|
//# sourceMappingURL=CreateModelFromRepository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["camelCase","Result","CreateModelFromRepository","RepositoryAbstraction","ModelCache","PluginModelsProvider","ModelsFetcher","ModelAlreadyExistsError","ModelPersistenceError","ModelValidationError","StorageOperations","TenantContext","CmsContext","validateExistingModelId","validateModelIdAllowed","validateEndingAllowed","validateSingularApiName","validatePluralApiName","validateModelFields","ensureTypeTag","getModelId","model","modelId","name","value","trim","isModelIdValid","toLowerCase","CreateModelFromRepositoryImpl","constructor","modelCache","pluginModelsProvider","modelsFetcher","storageOperations","tenantContext","cmsContext","execute","tenant","getTenant","error","fail","message","modelsResult","fetchAll","isFail","existingModel","find","m","pluginModels","list","id","pluginModelConflict","pm","singularApiName","pluralApiName","models","context","tags","create","clear","ok","createImplementation","implementation","dependencies"],"sources":["CreateModelFromRepository.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { CreateModelFromRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { ModelCache } from \"~/features/contentModel/shared/abstractions.js\";\nimport { PluginModelsProvider } from \"~/features/contentModel/shared/abstractions.js\";\nimport { ModelsFetcher } from \"~/features/contentModel/shared/abstractions.js\";\nimport { ModelAlreadyExistsError } from \"~/domain/contentModel/errors.js\";\nimport { ModelPersistenceError } from \"~/domain/contentModel/errors.js\";\nimport { ModelValidationError } from \"~/domain/contentModel/errors.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/TenantContext\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport {\n validateExistingModelId,\n validateModelIdAllowed\n} from \"~/crud/contentModel/validate/modelId.js\";\nimport { validateEndingAllowed } from \"~/crud/contentModel/validate/endingAllowed.js\";\nimport { validateSingularApiName } from \"~/domain/contentModel/validation/singularApiName.js\";\nimport { validatePluralApiName } from \"~/domain/contentModel/validation/pluralApiName.js\";\nimport { validateModelFields } from \"~/domain/contentModel/validation/modelFields.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { ensureTypeTag } from \"~/domain/contentModel/ensureTypeTag.js\";\n\n/**\n * Generate modelId from model following the exact logic from beforeCreate.ts\n */\nconst getModelId = (model: { modelId?: string; name?: string }): string => {\n const { modelId, name } = model;\n const value = modelId ? modelId.trim() : null;\n if (value) {\n const isModelIdValid = camelCase(value).toLowerCase() === value.toLowerCase();\n if (isModelIdValid) {\n return value;\n }\n return camelCase(value);\n } else if (name) {\n return camelCase(name.trim());\n }\n throw new ModelValidationError(\n `There is no \"modelId\" or \"name\" passed into the create model from method.`\n );\n};\n\n/**\n * CreateModelFromRepository - Validates domain rules and persists cloned model.\n *\n * Responsibilities:\n * - Generate modelId from input\n * - Validate modelId is allowed (not in disallowed list)\n * - Validate API name endings\n * - Validate modelId uniqueness (database + plugins)\n * - Validate API name uniqueness (database + plugins)\n * - Validate plugin conflicts\n * - Validate model fields\n * - Persist to storage\n * - Clear ModelCache after successful create\n */\nclass CreateModelFromRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private modelCache: ModelCache.Interface,\n private pluginModelsProvider: PluginModelsProvider.Interface,\n private modelsFetcher: ModelsFetcher.Interface,\n private storageOperations: StorageOperations.Interface,\n private tenantContext: TenantContext.Interface,\n private cmsContext: CmsContext.Interface\n ) {}\n\n async execute(model: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // Generate modelId using the exact logic from beforeCreate.ts\n const modelId = getModelId(model);\n model.modelId = modelId;\n\n // Validate modelId is allowed (not in disallowed list)\n try {\n validateModelIdAllowed({ model });\n } catch (error) {\n return Result.fail(new ModelValidationError((error as Error).message));\n }\n\n // Validate API name endings\n try {\n validateEndingAllowed({ model });\n } catch (error) {\n return Result.fail(new ModelValidationError((error as Error).message));\n }\n\n // Validate modelId uniqueness (database)\n const modelsResult = await this.modelsFetcher.fetchAll();\n if (modelsResult.isFail()) {\n return Result.fail(new ModelPersistenceError(modelsResult.error));\n }\n\n const existingModel = modelsResult.value.find(m => m.modelId === modelId);\n if (existingModel) {\n return Result.fail(new ModelAlreadyExistsError({ modelId }));\n }\n\n // Check for plugin model conflicts\n const pluginModels = await this.pluginModelsProvider.list(tenant.id);\n const pluginModelConflict = pluginModels.find(pm => {\n return (\n pm.modelId === model.modelId ||\n pm.singularApiName === model.singularApiName ||\n pm.pluralApiName === model.pluralApiName\n );\n });\n\n if (pluginModelConflict) {\n return Result.fail(\n new ModelAlreadyExistsError({\n modelId,\n message: `Model \"${modelId}\" is already registered via a plugin.`\n })\n );\n }\n\n const models = modelsResult.value;\n\n try {\n // Validate uniqueness\n for (const existingModel of models) {\n validateExistingModelId({\n existingModel,\n model\n });\n validateSingularApiName({\n existingModel,\n model\n });\n validatePluralApiName({\n existingModel,\n model\n });\n }\n\n // Validate model fields\n await validateModelFields({\n models,\n model,\n context: this.cmsContext\n });\n } catch (error) {\n return Result.fail(new ModelValidationError((error as Error).message));\n }\n\n // Ensure type tags\n model.tags = ensureTypeTag(model);\n\n // Persist to storage\n await this.storageOperations.models.create({ model });\n\n // Clear cache\n this.modelCache.clear();\n\n return Result.ok();\n } catch (error) {\n return Result.fail(new ModelPersistenceError(error as Error));\n }\n }\n}\n\nexport const CreateModelFromRepository = RepositoryAbstraction.createImplementation({\n implementation: CreateModelFromRepositoryImpl,\n dependencies: [\n ModelCache,\n PluginModelsProvider,\n ModelsFetcher,\n StorageOperations,\n TenantContext,\n CmsContext\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["camelCase","Result","CreateModelFromRepository","RepositoryAbstraction","ModelCache","ModelsFetcher","PluginModelsProvider","ModelAlreadyExistsError","ModelPersistenceError","ModelValidationError","CmsContext","StorageOperations","TenantContext","validateExistingModelId","validateModelIdAllowed","validateEndingAllowed","validateSingularApiName","validatePluralApiName","validateModelFields","ensureTypeTag","ModelFieldCompression","getModelId","model","modelId","name","value","trim","isModelIdValid","toLowerCase","CreateModelFromRepositoryImpl","constructor","modelCache","pluginModelsProvider","modelsFetcher","storageOperations","tenantContext","cmsContext","modelFieldCompression","execute","tenant","getTenant","error","fail","message","data","modelsResult","fetchAll","isFail","existingModel","find","m","pluginModels","list","id","pluginModelConflict","pm","singularApiName","pluralApiName","models","context","tags","fields","compress","create","clear","ok","createImplementation","implementation","dependencies"],"sources":["CreateModelFromRepository.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { CreateModelFromRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport {\n ModelCache,\n ModelsFetcher,\n PluginModelsProvider\n} from \"~/features/contentModel/shared/abstractions.js\";\nimport {\n ModelAlreadyExistsError,\n ModelPersistenceError,\n ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport { CmsContext, StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport {\n validateExistingModelId,\n validateModelIdAllowed\n} from \"~/crud/contentModel/validate/modelId.js\";\nimport { validateEndingAllowed } from \"~/crud/contentModel/validate/endingAllowed.js\";\nimport { validateSingularApiName } from \"~/domain/contentModel/validation/singularApiName.js\";\nimport { validatePluralApiName } from \"~/domain/contentModel/validation/pluralApiName.js\";\nimport { validateModelFields } from \"~/domain/contentModel/validation/modelFields.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { ensureTypeTag } from \"~/domain/contentModel/ensureTypeTag.js\";\nimport { ModelFieldCompression } from \"~/features/contentModel/ModelFieldCompression/index.js\";\n\n/**\n * Generate modelId from model following the exact logic from beforeCreate.ts\n */\nconst getModelId = (model: { modelId?: string; name?: string }): string => {\n const { modelId, name } = model;\n const value = modelId ? modelId.trim() : null;\n if (value) {\n const isModelIdValid = camelCase(value).toLowerCase() === value.toLowerCase();\n if (isModelIdValid) {\n return value;\n }\n return camelCase(value);\n } else if (name) {\n return camelCase(name.trim());\n }\n throw new ModelValidationError(\n `There is no \"modelId\" or \"name\" passed into the create model from method.`\n );\n};\n\n/**\n * CreateModelFromRepository - Validates domain rules and persists cloned model.\n *\n * Responsibilities:\n * - Generate modelId from input\n * - Validate modelId is allowed (not in disallowed list)\n * - Validate API name endings\n * - Validate modelId uniqueness (database + plugins)\n * - Validate API name uniqueness (database + plugins)\n * - Validate plugin conflicts\n * - Validate model fields\n * - Persist to storage\n * - Clear ModelCache after successful create\n */\nclass CreateModelFromRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private readonly modelCache: ModelCache.Interface,\n private readonly pluginModelsProvider: PluginModelsProvider.Interface,\n private readonly modelsFetcher: ModelsFetcher.Interface,\n private readonly storageOperations: StorageOperations.Interface,\n private readonly tenantContext: TenantContext.Interface,\n private readonly cmsContext: CmsContext.Interface,\n private readonly modelFieldCompression: ModelFieldCompression.Interface\n ) {}\n\n async execute(model: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // Generate modelId using the exact logic from beforeCreate.ts\n const modelId = getModelId(model);\n model.modelId = modelId;\n\n // Validate modelId is allowed (not in disallowed list)\n try {\n validateModelIdAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // Validate API name endings\n try {\n validateEndingAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // Validate modelId uniqueness (database)\n const modelsResult = await this.modelsFetcher.fetchAll();\n if (modelsResult.isFail()) {\n return Result.fail(new ModelPersistenceError(modelsResult.error));\n }\n\n const existingModel = modelsResult.value.find(m => m.modelId === modelId);\n if (existingModel) {\n return Result.fail(new ModelAlreadyExistsError({ modelId }));\n }\n\n // Check for plugin model conflicts\n const pluginModels = await this.pluginModelsProvider.list(tenant.id);\n const pluginModelConflict = pluginModels.find(pm => {\n return (\n pm.modelId === model.modelId ||\n pm.singularApiName === model.singularApiName ||\n pm.pluralApiName === model.pluralApiName\n );\n });\n\n if (pluginModelConflict) {\n return Result.fail(\n new ModelAlreadyExistsError({\n modelId,\n message: `Model \"${modelId}\" is already registered via a plugin.`\n })\n );\n }\n\n const models = modelsResult.value;\n\n try {\n // Validate uniqueness\n for (const existingModel of models) {\n validateExistingModelId({\n existingModel,\n model\n });\n validateSingularApiName({\n existingModel,\n model\n });\n validatePluralApiName({\n existingModel,\n model\n });\n }\n\n // Validate model fields\n await validateModelFields({\n models,\n model,\n context: this.cmsContext\n });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // Ensure type tags\n model.tags = ensureTypeTag(model);\n\n const fields = await this.modelFieldCompression.compress(model.fields);\n\n // Persist to storage\n await this.storageOperations.models.create({\n model: {\n ...model,\n fields\n }\n });\n\n // Clear cache\n this.modelCache.clear();\n\n return Result.ok();\n } catch (error) {\n return Result.fail(new ModelPersistenceError(error as Error));\n }\n }\n}\n\nexport const CreateModelFromRepository = RepositoryAbstraction.createImplementation({\n implementation: CreateModelFromRepositoryImpl,\n dependencies: [\n ModelCache,\n PluginModelsProvider,\n ModelsFetcher,\n StorageOperations,\n TenantContext,\n CmsContext,\n ModelFieldCompression\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|