@webiny/api-headless-cms 0.0.0-unstable.9e825fd5fb → 0.0.0-unstable.a9593f74dd
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 +32 -0
- package/constants.js +57 -0
- package/constants.js.map +1 -0
- package/context.js +77 -39
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.js +3 -1
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.js +3 -1
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.js +3 -1
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataFactories/createEntryData.d.ts +20 -0
- package/crud/contentEntry/entryDataFactories/createEntryData.js +228 -0
- package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.d.ts +21 -0
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +114 -0
- package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.d.ts +13 -0
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js +61 -0
- package/crud/contentEntry/entryDataFactories/createPublishEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.d.ts +12 -0
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js +57 -0
- package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.d.ts +12 -0
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js +38 -0
- package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.d.ts +20 -0
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js +122 -0
- package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/index.d.ts +8 -0
- package/crud/contentEntry/entryDataFactories/index.js +95 -0
- package/crud/contentEntry/entryDataFactories/index.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.d.ts +5 -0
- package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.js +36 -0
- package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.js.map +1 -0
- package/crud/contentEntry/entryDataFactories/statuses.d.ts +4 -0
- package/crud/contentEntry/entryDataFactories/statuses.js +15 -0
- package/crud/contentEntry/entryDataFactories/statuses.js.map +1 -0
- package/crud/contentEntry/entryDataValidation.d.ts +4 -2
- package/crud/contentEntry/entryDataValidation.js +223 -45
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +17 -10
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.d.ts +6 -0
- package/crud/contentEntry/referenceFieldsMapping.js +142 -90
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.js +5 -4
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +5 -4
- package/crud/contentEntry.crud.js +558 -528
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/beforeCreate.d.ts +1 -1
- package/crud/contentModel/beforeCreate.js +11 -9
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.d.ts +1 -1
- package/crud/contentModel/beforeDelete.js +4 -6
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.d.ts +1 -1
- package/crud/contentModel/beforeUpdate.js +3 -6
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/compatibility/modelApiName.js +3 -1
- package/crud/contentModel/compatibility/modelApiName.js.map +1 -1
- package/crud/contentModel/contentModelManagerFactory.js +3 -1
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +3 -1
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- package/crud/contentModel/defaultFields.js +3 -1
- package/crud/contentModel/defaultFields.js.map +1 -1
- package/crud/contentModel/ensureTypeTag.d.ts +5 -0
- package/crud/contentModel/ensureTypeTag.js +21 -0
- package/crud/contentModel/ensureTypeTag.js.map +1 -0
- package/crud/contentModel/fields/descriptionField.js +4 -2
- package/crud/contentModel/fields/descriptionField.js.map +1 -1
- package/crud/contentModel/fields/imageField.js +6 -8
- package/crud/contentModel/fields/imageField.js.map +1 -1
- package/crud/contentModel/fields/titleField.js +4 -2
- package/crud/contentModel/fields/titleField.js.map +1 -1
- package/crud/contentModel/listModelsFromDatabase.d.ts +10 -0
- package/crud/contentModel/listModelsFromDatabase.js +38 -0
- package/crud/contentModel/listModelsFromDatabase.js.map +1 -0
- package/crud/contentModel/validate/endingAllowed.js +3 -1
- package/crud/contentModel/validate/endingAllowed.js.map +1 -1
- package/crud/contentModel/validate/isModelEndingAllowed.js +4 -2
- package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -1
- package/crud/contentModel/validate/modelId.js +3 -1
- package/crud/contentModel/validate/modelId.js.map +1 -1
- package/crud/contentModel/validate/pluralApiName.js +3 -1
- package/crud/contentModel/validate/pluralApiName.js.map +1 -1
- package/crud/contentModel/validate/singularApiName.js +3 -1
- package/crud/contentModel/validate/singularApiName.js.map +1 -1
- package/crud/contentModel/validateModel.js +3 -1
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +8 -7
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +586 -233
- package/crud/contentModel/validation.js +73 -13
- package/crud/contentModel/validation.js.map +1 -1
- package/crud/contentModel.crud.d.ts +2 -0
- package/crud/contentModel.crud.js +146 -181
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.d.ts +1 -1
- package/crud/contentModelGroup/beforeCreate.js +15 -1
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.js +3 -1
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.js +3 -1
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/crud/contentModelGroup/listGroupsFromDatabase.d.ts +8 -0
- package/crud/contentModelGroup/listGroupsFromDatabase.js +22 -0
- package/crud/contentModelGroup/listGroupsFromDatabase.js.map +1 -0
- package/crud/contentModelGroup/validation.d.ts +10 -7
- package/crud/contentModelGroup/validation.js +5 -2
- package/crud/contentModelGroup/validation.js.map +1 -1
- package/crud/contentModelGroup.crud.d.ts +3 -1
- package/crud/contentModelGroup.crud.js +139 -123
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/system.crud.js +8 -11
- package/crud/system.crud.js.map +1 -1
- package/export/crud/exporting.d.ts +3 -0
- package/export/crud/exporting.js +49 -0
- package/export/crud/exporting.js.map +1 -0
- package/export/crud/importing.d.ts +3 -0
- package/export/crud/importing.js +79 -0
- package/export/crud/importing.js.map +1 -0
- package/export/crud/imports/importData.d.ts +14 -0
- package/export/crud/imports/importData.js +52 -0
- package/export/crud/imports/importData.js.map +1 -0
- package/export/crud/imports/importGroups.d.ts +8 -0
- package/export/crud/imports/importGroups.js +104 -0
- package/export/crud/imports/importGroups.js.map +1 -0
- package/export/crud/imports/importModels.d.ts +8 -0
- package/export/crud/imports/importModels.js +136 -0
- package/export/crud/imports/importModels.js.map +1 -0
- package/export/crud/imports/validateGroups.d.ts +8 -0
- package/export/crud/imports/validateGroups.js +112 -0
- package/export/crud/imports/validateGroups.js.map +1 -0
- package/export/crud/imports/validateInput.d.ts +19 -0
- package/export/crud/imports/validateInput.js +55 -0
- package/export/crud/imports/validateInput.js.map +1 -0
- package/export/crud/imports/validateModels.d.ts +12 -0
- package/export/crud/imports/validateModels.js +203 -0
- package/export/crud/imports/validateModels.js.map +1 -0
- package/export/crud/index.d.ts +4 -0
- package/export/crud/index.js +15 -0
- package/export/crud/index.js.map +1 -0
- package/export/crud/sanitize.d.ts +4 -0
- package/export/crud/sanitize.js +35 -0
- package/export/crud/sanitize.js.map +1 -0
- package/export/graphql/index.d.ts +3 -0
- package/export/graphql/index.js +188 -0
- package/export/graphql/index.js.map +1 -0
- package/export/index.d.ts +2 -0
- package/export/index.js +29 -0
- package/export/index.js.map +1 -0
- package/export/types.d.ts +113 -0
- package/export/types.js +22 -0
- package/export/types.js.map +1 -0
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +4 -7
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +5 -8
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +47 -38
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.js +3 -1
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.js +7 -1
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/checkEndpointAccess.d.ts +2 -0
- package/graphql/checkEndpointAccess.js +20 -0
- package/graphql/checkEndpointAccess.js.map +1 -0
- package/graphql/createExecutableSchema.js +3 -1
- package/graphql/createExecutableSchema.js.map +1 -1
- package/graphql/createRequestBody.d.ts +2 -0
- package/graphql/createRequestBody.js +16 -0
- package/graphql/createRequestBody.js.map +1 -0
- package/graphql/formatErrorPayload.d.ts +1 -0
- package/graphql/formatErrorPayload.js +27 -0
- package/graphql/formatErrorPayload.js.map +1 -0
- package/graphql/generateSchema.js +3 -1
- package/graphql/generateSchema.js.map +1 -1
- package/graphql/getSchema.d.ts +16 -0
- package/graphql/getSchema.js +118 -0
- package/graphql/getSchema.js.map +1 -0
- package/graphql/graphQLHandlerFactory.js +8 -191
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/handleRequest.d.ts +11 -0
- package/graphql/handleRequest.js +79 -0
- package/graphql/handleRequest.js.map +1 -0
- package/graphql/index.d.ts +1 -1
- package/graphql/index.js +4 -2
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.js +9 -8
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/baseSchema.d.ts +2 -3
- package/graphql/schema/baseSchema.js +95 -2
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +54 -16
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.js +5 -2
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +10 -10
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +1 -1
- package/graphql/schema/createFieldResolvers.js +18 -22
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createFieldTypePluginRecords.d.ts +3 -0
- package/graphql/schema/createFieldTypePluginRecords.js +15 -0
- package/graphql/schema/createFieldTypePluginRecords.js.map +1 -0
- package/graphql/schema/createManageResolvers.d.ts +1 -1
- package/graphql/schema/createManageResolvers.js +27 -10
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.js +83 -42
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +7 -6
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +7 -6
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.js +35 -24
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreate.d.ts +2 -1
- package/graphql/schema/resolvers/manage/resolveCreate.js +4 -2
- package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreateFrom.d.ts +2 -1
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js +4 -2
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.d.ts +2 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +16 -4
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.d.ts +7 -0
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +22 -0
- package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveGet.js +12 -5
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.d.ts +4 -0
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +20 -0
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveList.js +3 -1
- package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveMove.d.ts +8 -0
- package/graphql/schema/resolvers/manage/resolveMove.js +27 -0
- package/graphql/schema/resolvers/manage/resolveMove.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolvePublish.js +3 -1
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUpdate.d.ts +2 -1
- package/graphql/schema/resolvers/manage/resolveUpdate.js +4 -2
- package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveValidate.d.ts +8 -0
- package/graphql/schema/resolvers/manage/resolveValidate.js +20 -0
- package/graphql/schema/resolvers/manage/resolveValidate.js.map +1 -0
- package/graphql/schema/resolvers/preview/resolveGet.js +6 -5
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveList.js +3 -1
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +6 -5
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveList.js +3 -1
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
- package/graphql/schema/schemaPlugins.js +5 -12
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.d.ts +2 -5
- package/graphql/system.js +4 -12
- package/graphql/system.js.map +1 -1
- package/graphqlFields/boolean.js +3 -1
- package/graphqlFields/boolean.js.map +1 -1
- package/graphqlFields/datetime.js +5 -5
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.js +76 -26
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +60 -12
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -1
- package/graphqlFields/dynamicZone/index.js +3 -1
- package/graphqlFields/dynamicZone/index.js.map +1 -1
- package/graphqlFields/file.js +3 -1
- package/graphqlFields/file.js.map +1 -1
- package/graphqlFields/helpers.d.ts +0 -1
- package/graphqlFields/helpers.js +6 -18
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/index.js +5 -2
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/json.d.ts +2 -0
- package/graphqlFields/json.js +49 -0
- package/graphqlFields/json.js.map +1 -0
- package/graphqlFields/longText.js +14 -3
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +4 -1
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +26 -46
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +35 -23
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText/RichTextPluginsProcessor.d.ts +6 -0
- package/graphqlFields/richText/RichTextPluginsProcessor.js +34 -0
- package/graphqlFields/richText/RichTextPluginsProcessor.js.map +1 -0
- package/graphqlFields/richText/richTextResolver.d.ts +7 -0
- package/graphqlFields/richText/richTextResolver.js +39 -0
- package/graphqlFields/richText/richTextResolver.js.map +1 -0
- package/graphqlFields/richText.js +11 -3
- package/graphqlFields/richText.js.map +1 -1
- package/graphqlFields/text.js +5 -1
- package/graphqlFields/text.js.map +1 -1
- package/htmlRenderer/LexicalRenderer.d.ts +5 -0
- package/htmlRenderer/LexicalRenderer.js +28 -0
- package/htmlRenderer/LexicalRenderer.js.map +1 -0
- package/htmlRenderer/createLexicalHTMLRenderer.d.ts +2 -0
- package/htmlRenderer/createLexicalHTMLRenderer.js +31 -0
- package/htmlRenderer/createLexicalHTMLRenderer.js.map +1 -0
- package/index.d.ts +3 -2
- package/index.js +33 -14
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +3 -5
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +3 -1
- package/modelManager/index.js.map +1 -1
- package/package.json +36 -39
- package/parameters/context.js +4 -2
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +7 -6
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +3 -1
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +9 -4
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +4 -3
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGraphQLSchemaPlugin.js +5 -4
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -1
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +4 -5
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -1
- package/plugins/CmsGroupPlugin.d.ts +6 -3
- package/plugins/CmsGroupPlugin.js +8 -6
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +5 -4
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +8 -4
- package/plugins/CmsModelPlugin.js +61 -32
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +7 -4
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/CmsRichTextRendererPlugin.d.ts +24 -0
- package/plugins/CmsRichTextRendererPlugin.js +28 -0
- package/plugins/CmsRichTextRendererPlugin.js.map +1 -0
- package/plugins/StorageOperationsCmsModelPlugin.d.ts +23 -0
- package/plugins/StorageOperationsCmsModelPlugin.js +41 -0
- package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -0
- package/plugins/StorageTransformPlugin.d.ts +2 -2
- package/plugins/StorageTransformPlugin.js +3 -4
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.d.ts +2 -0
- package/plugins/index.js +25 -1
- package/plugins/index.js.map +1 -1
- package/storage/default.js +3 -1
- package/storage/default.js.map +1 -1
- package/storage/index.d.ts +1 -0
- package/storage/index.js +15 -0
- package/storage/index.js.map +1 -0
- package/storage/json.d.ts +2 -0
- package/storage/json.js +27 -0
- package/storage/json.js.map +1 -0
- package/storage/object.js +8 -8
- package/storage/object.js.map +1 -1
- package/types.d.ts +437 -313
- package/types.js +20 -20
- package/types.js.map +1 -1
- package/utils/access.d.ts +9 -8
- package/utils/access.js +12 -62
- package/utils/access.js.map +1 -1
- package/utils/caching/Cache.d.ts +2 -0
- package/utils/caching/Cache.js +51 -0
- package/utils/caching/Cache.js.map +1 -0
- package/utils/caching/CacheKey.d.ts +2 -0
- package/utils/caching/CacheKey.js +40 -0
- package/utils/caching/CacheKey.js.map +1 -0
- package/utils/caching/index.d.ts +2 -0
- package/utils/caching/index.js +29 -0
- package/utils/caching/index.js.map +1 -0
- package/utils/caching/types.d.ts +11 -0
- package/utils/caching/types.js +7 -0
- package/utils/caching/types.js.map +1 -0
- package/utils/converters/Converter.js +4 -5
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.js +13 -7
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.d.ts +1 -5
- package/utils/converters/valueKeyStorageConverter.js +32 -26
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.js +8 -4
- package/utils/createTypeFromFields.js.map +1 -1
- package/utils/createTypeName.d.ts +0 -2
- package/utils/createTypeName.js +3 -9
- package/utils/createTypeName.js.map +1 -1
- package/utils/date.d.ts +10 -0
- package/utils/date.js +36 -0
- package/utils/date.js.map +1 -0
- package/utils/entryStorage.d.ts +4 -4
- package/utils/entryStorage.js +6 -4
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +9 -8
- package/utils/filterAsync.js.map +1 -1
- package/utils/getBaseFieldType.d.ts +1 -3
- package/utils/getBaseFieldType.js +3 -1
- package/utils/getBaseFieldType.js.map +1 -1
- package/utils/getEntryDescription.d.ts +1 -1
- package/utils/getEntryDescription.js +3 -1
- package/utils/getEntryDescription.js.map +1 -1
- package/utils/getEntryImage.d.ts +1 -1
- package/utils/getEntryImage.js +3 -1
- package/utils/getEntryImage.js.map +1 -1
- package/utils/getEntryTitle.d.ts +1 -1
- package/utils/getEntryTitle.js +3 -1
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.d.ts +13 -2
- package/utils/getSchemaFromFieldPlugins.js +22 -4
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/identity.d.ts +2 -0
- package/utils/identity.js +20 -0
- package/utils/identity.js.map +1 -0
- package/utils/incrementEntryIdVersion.js +3 -1
- package/utils/incrementEntryIdVersion.js.map +1 -1
- package/utils/index.d.ts +1 -0
- package/utils/index.js +18 -0
- package/utils/index.js.map +1 -0
- package/utils/permissions/EntriesPermissions.d.ts +4 -0
- package/utils/permissions/EntriesPermissions.js +11 -0
- package/utils/permissions/EntriesPermissions.js.map +1 -0
- package/utils/permissions/ModelGroupsPermissions.d.ts +9 -0
- package/utils/permissions/ModelGroupsPermissions.js +50 -0
- package/utils/permissions/ModelGroupsPermissions.js.map +1 -0
- package/utils/permissions/ModelsPermissions.d.ts +22 -0
- package/utils/permissions/ModelsPermissions.js +90 -0
- package/utils/permissions/ModelsPermissions.js.map +1 -0
- package/utils/renderFields.d.ts +2 -1
- package/utils/renderFields.js +5 -2
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.d.ts +2 -2
- package/utils/renderGetFilterFields.js +9 -21
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.d.ts +2 -1
- package/utils/renderInputFields.js +17 -7
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.d.ts +3 -1
- package/utils/renderListFilterFields.js +25 -22
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +3 -2
- package/utils/renderSortEnum.js +10 -3
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +3 -1
- package/utils/toSlug.js.map +1 -1
- package/validators/dateGte.js +3 -1
- package/validators/dateGte.js.map +1 -1
- package/validators/dateLte.js +3 -1
- package/validators/dateLte.js.map +1 -1
- package/validators/gte.js +4 -3
- package/validators/gte.js.map +1 -1
- package/validators/in.js +4 -3
- package/validators/in.js.map +1 -1
- package/validators/index.js +4 -3
- package/validators/index.js.map +1 -1
- package/validators/lte.js +4 -3
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +4 -3
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +4 -3
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +5 -3
- package/validators/pattern.js.map +1 -1
- package/validators/patternPlugins/email.js +3 -1
- package/validators/patternPlugins/email.js.map +1 -1
- package/validators/patternPlugins/index.js +3 -1
- package/validators/patternPlugins/index.js.map +1 -1
- package/validators/patternPlugins/lowerCase.js +3 -1
- package/validators/patternPlugins/lowerCase.js.map +1 -1
- package/validators/patternPlugins/lowerCaseSpace.js +3 -1
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/validators/patternPlugins/upperCase.js +3 -1
- package/validators/patternPlugins/upperCase.js.map +1 -1
- package/validators/patternPlugins/upperCaseSpace.js +3 -1
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/validators/patternPlugins/url.js +3 -1
- package/validators/patternPlugins/url.js.map +1 -1
- package/validators/required.js +3 -1
- package/validators/required.js.map +1 -1
- package/validators/timeGte.js +4 -3
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +4 -3
- package/validators/timeLte.js.map +1 -1
- package/validators/unique.js +4 -2
- package/validators/unique.js.map +1 -1
- package/crud/contentModel/afterCreate.d.ts +0 -8
- package/crud/contentModel/afterCreate.js +0 -16
- package/crud/contentModel/afterCreate.js.map +0 -1
- package/crud/contentModel/afterCreateFrom.d.ts +0 -8
- package/crud/contentModel/afterCreateFrom.js +0 -16
- package/crud/contentModel/afterCreateFrom.js.map +0 -1
- package/crud/contentModel/afterDelete.d.ts +0 -8
- package/crud/contentModel/afterDelete.js +0 -16
- package/crud/contentModel/afterDelete.js.map +0 -1
- package/crud/contentModel/afterUpdate.d.ts +0 -8
- package/crud/contentModel/afterUpdate.js +0 -16
- package/crud/contentModel/afterUpdate.js.map +0 -1
- package/crud/contentModel/createFieldModels.d.ts +0 -2
- package/crud/contentModel/createFieldModels.js +0 -26
- package/crud/contentModel/createFieldModels.js.map +0 -1
- package/crud/contentModel/fieldIdValidation.d.ts +0 -1
- package/crud/contentModel/fieldIdValidation.js +0 -25
- package/crud/contentModel/fieldIdValidation.js.map +0 -1
- package/crud/contentModel/idValidation.d.ts +0 -1
- package/crud/contentModel/idValidation.js +0 -22
- package/crud/contentModel/idValidation.js.map +0 -1
- package/crud/contentModel/models.d.ts +0 -4
- package/crud/contentModel/models.js +0 -192
- package/crud/contentModel/models.js.map +0 -1
- package/crud/contentModel/systemFields.d.ts +0 -1
- package/crud/contentModel/systemFields.js +0 -8
- package/crud/contentModel/systemFields.js.map +0 -1
- package/crud/contentModel/validateLayout.d.ts +0 -2
- package/crud/contentModel/validateLayout.js +0 -28
- package/crud/contentModel/validateLayout.js.map +0 -1
- package/crud/settings.crud.d.ts +0 -10
- package/crud/settings.crud.js +0 -66
- package/crud/settings.crud.js.map +0 -1
- package/graphql/schema/resolvers/commonFieldResolvers.d.ts +0 -7
- package/graphql/schema/resolvers/commonFieldResolvers.js +0 -13
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +0 -1
- package/upgrades/5.33.0/index.d.ts +0 -3
- package/upgrades/5.33.0/index.js +0 -182
- package/upgrades/5.33.0/index.js.map +0 -1
- package/upgrades/index.d.ts +0 -1
- package/upgrades/index.js +0 -12
- package/upgrades/index.js.map +0 -1
- package/utils/ownership.d.ts +0 -8
- package/utils/ownership.js +0 -33
- package/utils/ownership.js.map +0 -1
- package/utils/permissions.d.ts +0 -7
- package/utils/permissions.js +0 -91
- package/utils/permissions.js.map +0 -1
- package/utils/pluralizedTypeName.d.ts +0 -1
- package/utils/pluralizedTypeName.js +0 -26
- package/utils/pluralizedTypeName.js.map +0 -1
- package/validators/dynamicZone.d.ts +0 -2
- package/validators/dynamicZone.js +0 -20
- package/validators/dynamicZone.js.map +0 -1
|
@@ -4,197 +4,37 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.createContentEntryCrud =
|
|
8
|
-
var
|
|
9
|
-
var _merge = _interopRequireDefault(require("lodash/merge"));
|
|
10
|
-
var _mdbid = _interopRequireDefault(require("mdbid"));
|
|
7
|
+
exports.createContentEntryCrud = void 0;
|
|
8
|
+
var _utils = require("@webiny/utils");
|
|
11
9
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
12
10
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
13
11
|
var _entryDataValidation = require("./contentEntry/entryDataValidation");
|
|
14
12
|
var _pubsub = require("@webiny/pubsub");
|
|
15
13
|
var _beforeCreate = require("./contentEntry/beforeCreate");
|
|
16
14
|
var _beforeUpdate = require("./contentEntry/beforeUpdate");
|
|
17
|
-
var _utils = require("@webiny/utils");
|
|
18
15
|
var _afterDelete = require("./contentEntry/afterDelete");
|
|
19
|
-
var _referenceFieldsMapping = require("./contentEntry/referenceFieldsMapping");
|
|
20
|
-
var _permissions = require("../utils/permissions");
|
|
21
|
-
var _access = require("../utils/access");
|
|
22
|
-
var _ownership = require("../utils/ownership");
|
|
23
16
|
var _entryStorage = require("../utils/entryStorage");
|
|
24
|
-
var _valueKeyStorageConverter = require("../utils/converters/valueKeyStorageConverter");
|
|
25
17
|
var _searchableFields = require("./contentEntry/searchableFields");
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const STATUS_PUBLISHED = "published";
|
|
34
|
-
exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
|
|
35
|
-
const STATUS_UNPUBLISHED = "unpublished";
|
|
36
|
-
exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
|
|
37
|
-
/**
|
|
38
|
-
* Used for some fields to convert their values.
|
|
39
|
-
*/
|
|
40
|
-
const convertDefaultValue = (field, value) => {
|
|
41
|
-
switch (field.type) {
|
|
42
|
-
case "boolean":
|
|
43
|
-
return Boolean(value);
|
|
44
|
-
case "number":
|
|
45
|
-
return Number(value);
|
|
46
|
-
default:
|
|
47
|
-
return value;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
const getDefaultValue = field => {
|
|
51
|
-
const {
|
|
52
|
-
settings,
|
|
53
|
-
multipleValues
|
|
54
|
-
} = field;
|
|
55
|
-
if (settings && settings.defaultValue !== undefined) {
|
|
56
|
-
return convertDefaultValue(field, settings.defaultValue);
|
|
57
|
-
}
|
|
58
|
-
const {
|
|
59
|
-
predefinedValues
|
|
60
|
-
} = field;
|
|
61
|
-
if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
if (!multipleValues) {
|
|
65
|
-
const selectedValue = predefinedValues.values.find(value => {
|
|
66
|
-
return !!value.selected;
|
|
67
|
-
});
|
|
68
|
-
if (selectedValue) {
|
|
69
|
-
return convertDefaultValue(field, selectedValue.value);
|
|
70
|
-
}
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
return predefinedValues.values.filter(({
|
|
74
|
-
selected
|
|
75
|
-
}) => !!selected).map(({
|
|
76
|
-
value
|
|
77
|
-
}) => {
|
|
78
|
-
return convertDefaultValue(field, value);
|
|
79
|
-
});
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* Cleans and adds default values to create input data.
|
|
83
|
-
*/
|
|
84
|
-
const mapAndCleanCreateInputData = (model, input) => {
|
|
85
|
-
return model.fields.reduce((acc, field) => {
|
|
86
|
-
/**
|
|
87
|
-
* This should never happen, but let's make it sure.
|
|
88
|
-
* The fix would be for the user to add the fieldId on the field definition.
|
|
89
|
-
*/
|
|
90
|
-
if (!field.fieldId) {
|
|
91
|
-
throw new _error.default("Field does not have an fieldId.", "MISSING_FIELD_ID", {
|
|
92
|
-
field
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
const value = input[field.fieldId];
|
|
96
|
-
/**
|
|
97
|
-
* We set the default value on create input if value is not defined.
|
|
98
|
-
*/
|
|
99
|
-
acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
|
|
100
|
-
return acc;
|
|
101
|
-
}, {});
|
|
102
|
-
};
|
|
103
|
-
/**
|
|
104
|
-
* Cleans the update input entry data.
|
|
105
|
-
*/
|
|
106
|
-
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
107
|
-
return model.fields.reduce((acc, field) => {
|
|
108
|
-
/**
|
|
109
|
-
* This should never happen, but let's make it sure.
|
|
110
|
-
* The fix would be for the user to add the fieldId on the field definition.
|
|
111
|
-
*/
|
|
112
|
-
if (!field.fieldId) {
|
|
113
|
-
throw new _error.default("Field does not have an fieldId.", "MISSING_FIELD_ID", {
|
|
114
|
-
field
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* We cannot set default value here because user might want to update only certain field values.
|
|
119
|
-
*/
|
|
120
|
-
const value = input[field.fieldId];
|
|
121
|
-
if (value === undefined) {
|
|
122
|
-
return acc;
|
|
123
|
-
}
|
|
124
|
-
acc[field.fieldId] = value;
|
|
125
|
-
return acc;
|
|
126
|
-
}, {});
|
|
127
|
-
};
|
|
128
|
-
/**
|
|
129
|
-
* This method takes original entry meta and new input.
|
|
130
|
-
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
131
|
-
*/
|
|
132
|
-
const createEntryMeta = (input, original) => {
|
|
133
|
-
const meta = (0, _merge.default)(original || {}, input || {});
|
|
134
|
-
return (0, _utils.removeUndefinedValues)((0, _utils.removeNullValues)(meta));
|
|
135
|
-
};
|
|
136
|
-
const createEntryId = input => {
|
|
137
|
-
let entryId = (0, _mdbid.default)();
|
|
138
|
-
if (input.id) {
|
|
139
|
-
if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\-]+)([a-zA-Z0-9])$/) === null) {
|
|
140
|
-
throw new _error.default("The provided ID is not valid. It must be a string which can be A-Z, a-z, 0-9, - and it cannot start or end with a -.", "INVALID_ID", {
|
|
141
|
-
id: input.id
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
entryId = input.id;
|
|
145
|
-
}
|
|
146
|
-
const version = 1;
|
|
147
|
-
return {
|
|
148
|
-
entryId,
|
|
149
|
-
version,
|
|
150
|
-
id: (0, _utils.createIdentifier)({
|
|
151
|
-
id: entryId,
|
|
152
|
-
version
|
|
153
|
-
})
|
|
154
|
-
};
|
|
155
|
-
};
|
|
156
|
-
const increaseEntryIdVersion = id => {
|
|
157
|
-
const {
|
|
158
|
-
id: entryId,
|
|
159
|
-
version
|
|
160
|
-
} = (0, _utils.parseIdentifier)(id);
|
|
161
|
-
if (!version) {
|
|
162
|
-
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
163
|
-
id
|
|
164
|
-
});
|
|
18
|
+
var _filterAsync = require("../utils/filterAsync");
|
|
19
|
+
var _apiSecurity = require("@webiny/api-security");
|
|
20
|
+
var _constants = require("../constants");
|
|
21
|
+
var _entryDataFactories = require("./contentEntry/entryDataFactories");
|
|
22
|
+
const createSort = sort => {
|
|
23
|
+
if (Array.isArray(sort) && sort.filter(Boolean).length > 0) {
|
|
24
|
+
return sort;
|
|
165
25
|
}
|
|
166
|
-
return
|
|
167
|
-
entryId,
|
|
168
|
-
version: version + 1,
|
|
169
|
-
id: (0, _utils.createIdentifier)({
|
|
170
|
-
id: entryId,
|
|
171
|
-
version: version + 1
|
|
172
|
-
})
|
|
173
|
-
};
|
|
174
|
-
};
|
|
175
|
-
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
176
|
-
const transformEntryStatus = status => {
|
|
177
|
-
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
26
|
+
return ["revisionCreatedOn_DESC"];
|
|
178
27
|
};
|
|
179
28
|
const createContentEntryCrud = params => {
|
|
180
29
|
const {
|
|
181
30
|
storageOperations,
|
|
31
|
+
entriesPermissions,
|
|
32
|
+
modelsPermissions,
|
|
182
33
|
context,
|
|
183
|
-
getIdentity,
|
|
34
|
+
getIdentity: getSecurityIdentity,
|
|
184
35
|
getTenant,
|
|
185
36
|
getLocale
|
|
186
37
|
} = params;
|
|
187
|
-
const {
|
|
188
|
-
plugins
|
|
189
|
-
} = context;
|
|
190
|
-
const getCreatedBy = () => {
|
|
191
|
-
const identity = getIdentity();
|
|
192
|
-
return {
|
|
193
|
-
id: identity.id,
|
|
194
|
-
displayName: identity.displayName,
|
|
195
|
-
type: identity.type
|
|
196
|
-
};
|
|
197
|
-
};
|
|
198
38
|
|
|
199
39
|
/**
|
|
200
40
|
* Create
|
|
@@ -217,6 +57,13 @@ const createContentEntryCrud = params => {
|
|
|
217
57
|
const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
|
|
218
58
|
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
219
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Move
|
|
62
|
+
*/
|
|
63
|
+
const onEntryBeforeMove = (0, _pubsub.createTopic)("cms.onEntryBeforeMove");
|
|
64
|
+
const onEntryAfterMove = (0, _pubsub.createTopic)("cms.onEntryAfterMove");
|
|
65
|
+
const onEntryMoveError = (0, _pubsub.createTopic)("cms.onEntryMoveError");
|
|
66
|
+
|
|
220
67
|
/**
|
|
221
68
|
* Publish
|
|
222
69
|
*/
|
|
@@ -251,6 +98,12 @@ const createContentEntryCrud = params => {
|
|
|
251
98
|
const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
|
|
252
99
|
const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
|
|
253
100
|
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
101
|
+
/**
|
|
102
|
+
* Delete multiple entries
|
|
103
|
+
*/
|
|
104
|
+
const onEntryBeforeDeleteMultiple = (0, _pubsub.createTopic)("cms.onEntryBeforeDeleteMultiple");
|
|
105
|
+
const onEntryAfterDeleteMultiple = (0, _pubsub.createTopic)("cms.onEntryAfterDeleteMultiple");
|
|
106
|
+
const onEntryDeleteMultipleError = (0, _pubsub.createTopic)("cms.onEntryDeleteMultipleError");
|
|
254
107
|
|
|
255
108
|
/**
|
|
256
109
|
* Get entry
|
|
@@ -277,70 +130,65 @@ const createContentEntryCrud = params => {
|
|
|
277
130
|
context,
|
|
278
131
|
onEntryAfterDelete
|
|
279
132
|
});
|
|
280
|
-
const checkEntryPermissions = check => {
|
|
281
|
-
return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
|
|
282
|
-
};
|
|
283
133
|
|
|
284
134
|
/**
|
|
285
135
|
* A helper to delete the entire entry.
|
|
286
136
|
*/
|
|
287
137
|
const deleteEntryHelper = async params => {
|
|
288
|
-
|
|
289
|
-
|
|
138
|
+
const {
|
|
139
|
+
model,
|
|
140
|
+
entry
|
|
141
|
+
} = params;
|
|
142
|
+
try {
|
|
143
|
+
await onEntryBeforeDelete.publish({
|
|
144
|
+
entry,
|
|
145
|
+
model
|
|
146
|
+
});
|
|
147
|
+
await storageOperations.entries.delete(model, {
|
|
148
|
+
entry
|
|
149
|
+
});
|
|
150
|
+
await onEntryAfterDelete.publish({
|
|
151
|
+
entry,
|
|
152
|
+
model
|
|
153
|
+
});
|
|
154
|
+
} catch (ex) {
|
|
155
|
+
await onEntryDeleteError.publish({
|
|
156
|
+
entry,
|
|
290
157
|
model,
|
|
158
|
+
error: ex
|
|
159
|
+
});
|
|
160
|
+
throw new _error.default(ex.message || "Could not delete entry.", ex.code || "DELETE_ERROR", {
|
|
291
161
|
entry
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
await onEntryBeforeDelete.publish({
|
|
295
|
-
entry,
|
|
296
|
-
model
|
|
297
|
-
});
|
|
298
|
-
await storageOperations.entries.delete(model, {
|
|
299
|
-
entry
|
|
300
|
-
});
|
|
301
|
-
await onEntryAfterDelete.publish({
|
|
302
|
-
entry,
|
|
303
|
-
model
|
|
304
|
-
});
|
|
305
|
-
} catch (ex) {
|
|
306
|
-
await onEntryDeleteError.publish({
|
|
307
|
-
entry,
|
|
308
|
-
model,
|
|
309
|
-
error: ex
|
|
310
|
-
});
|
|
311
|
-
throw new _error.default(ex.message || "Could not delete entry.", ex.code || "DELETE_ERROR", {
|
|
312
|
-
entry
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
});
|
|
162
|
+
});
|
|
163
|
+
}
|
|
316
164
|
};
|
|
317
165
|
/**
|
|
318
166
|
* A helper to get entries by revision IDs
|
|
319
167
|
*/
|
|
320
|
-
const getEntriesByIds = async (
|
|
168
|
+
const getEntriesByIds = async (model, ids) => {
|
|
321
169
|
return context.benchmark.measure("headlessCms.crud.entries.getEntriesByIds", async () => {
|
|
322
|
-
|
|
170
|
+
await entriesPermissions.ensure({
|
|
323
171
|
rwd: "r"
|
|
324
172
|
});
|
|
325
|
-
await
|
|
326
|
-
|
|
327
|
-
model: initialModel,
|
|
328
|
-
plugins
|
|
173
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
174
|
+
model
|
|
329
175
|
});
|
|
330
176
|
const entries = await storageOperations.entries.getByIds(model, {
|
|
331
177
|
ids
|
|
332
178
|
});
|
|
333
|
-
return
|
|
179
|
+
return (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
180
|
+
return entriesPermissions.ensure({
|
|
181
|
+
owns: entry.revisionCreatedBy
|
|
182
|
+
}, {
|
|
183
|
+
throw: false
|
|
184
|
+
});
|
|
185
|
+
});
|
|
334
186
|
});
|
|
335
187
|
};
|
|
336
|
-
const getEntryById = async (
|
|
188
|
+
const getEntryById = async (model, id) => {
|
|
337
189
|
const where = {
|
|
338
190
|
id
|
|
339
191
|
};
|
|
340
|
-
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
341
|
-
model: initialModel,
|
|
342
|
-
plugins
|
|
343
|
-
});
|
|
344
192
|
await onEntryBeforeGet.publish({
|
|
345
193
|
where,
|
|
346
194
|
model
|
|
@@ -351,42 +199,46 @@ const createContentEntryCrud = params => {
|
|
|
351
199
|
}
|
|
352
200
|
return entry;
|
|
353
201
|
};
|
|
354
|
-
const getPublishedEntriesByIds = async (
|
|
355
|
-
|
|
202
|
+
const getPublishedEntriesByIds = async (model, ids) => {
|
|
203
|
+
await entriesPermissions.ensure({
|
|
356
204
|
rwd: "r"
|
|
357
205
|
});
|
|
358
|
-
await
|
|
359
|
-
|
|
360
|
-
model: initialModel,
|
|
361
|
-
plugins
|
|
206
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
207
|
+
model
|
|
362
208
|
});
|
|
363
209
|
const entries = await storageOperations.entries.getPublishedByIds(model, {
|
|
364
210
|
ids
|
|
365
211
|
});
|
|
366
|
-
return
|
|
212
|
+
return (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
213
|
+
return entriesPermissions.ensure({
|
|
214
|
+
owns: entry.revisionCreatedBy
|
|
215
|
+
}, {
|
|
216
|
+
throw: false
|
|
217
|
+
});
|
|
218
|
+
});
|
|
367
219
|
};
|
|
368
|
-
const getLatestEntriesByIds = async (
|
|
369
|
-
|
|
220
|
+
const getLatestEntriesByIds = async (model, ids) => {
|
|
221
|
+
await entriesPermissions.ensure({
|
|
370
222
|
rwd: "r"
|
|
371
223
|
});
|
|
372
|
-
await
|
|
373
|
-
|
|
374
|
-
model: initialModel,
|
|
375
|
-
plugins
|
|
224
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
225
|
+
model
|
|
376
226
|
});
|
|
377
227
|
const entries = await storageOperations.entries.getLatestByIds(model, {
|
|
378
228
|
ids
|
|
379
229
|
});
|
|
380
|
-
return
|
|
230
|
+
return (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
231
|
+
return entriesPermissions.ensure({
|
|
232
|
+
owns: entry.revisionCreatedBy
|
|
233
|
+
}, {
|
|
234
|
+
throw: false
|
|
235
|
+
});
|
|
236
|
+
});
|
|
381
237
|
};
|
|
382
|
-
const getEntry = async (
|
|
383
|
-
await
|
|
238
|
+
const getEntry = async (model, params) => {
|
|
239
|
+
await entriesPermissions.ensure({
|
|
384
240
|
rwd: "r"
|
|
385
241
|
});
|
|
386
|
-
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
387
|
-
model: initialModel,
|
|
388
|
-
plugins
|
|
389
|
-
});
|
|
390
242
|
const {
|
|
391
243
|
where,
|
|
392
244
|
sort
|
|
@@ -406,41 +258,42 @@ const createContentEntryCrud = params => {
|
|
|
406
258
|
}
|
|
407
259
|
return item;
|
|
408
260
|
};
|
|
409
|
-
const getEntryRevisions = async (
|
|
410
|
-
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
411
|
-
model: initialModel,
|
|
412
|
-
plugins
|
|
413
|
-
});
|
|
261
|
+
const getEntryRevisions = async (model, entryId) => {
|
|
414
262
|
return storageOperations.entries.getRevisions(model, {
|
|
415
263
|
id: entryId
|
|
416
264
|
});
|
|
417
265
|
};
|
|
418
|
-
const listEntries = async (
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
266
|
+
const listEntries = async (model, params) => {
|
|
267
|
+
try {
|
|
268
|
+
await entriesPermissions.ensure({
|
|
269
|
+
rwd: "r"
|
|
270
|
+
});
|
|
271
|
+
} catch {
|
|
272
|
+
throw new _apiSecurity.NotAuthorizedError({
|
|
273
|
+
data: {
|
|
274
|
+
reason: 'Not allowed to perform "read" on "cms.contentEntry".'
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
279
|
+
model
|
|
426
280
|
});
|
|
427
281
|
const {
|
|
428
282
|
where: initialWhere,
|
|
429
283
|
limit: initialLimit
|
|
430
284
|
} = params;
|
|
431
285
|
const limit = initialLimit && initialLimit > 0 ? initialLimit : 50;
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
const where = (0, _objectSpread2.default)({}, initialWhere);
|
|
286
|
+
const where = {
|
|
287
|
+
...initialWhere
|
|
288
|
+
};
|
|
436
289
|
/**
|
|
437
290
|
* Possibly only get records which are owned by current user.
|
|
438
291
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
439
292
|
*/
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
where.ownedBy = ownedBy;
|
|
293
|
+
if (await entriesPermissions.canAccessOnlyOwnRecords()) {
|
|
294
|
+
where.createdBy = getSecurityIdentity().id;
|
|
443
295
|
}
|
|
296
|
+
|
|
444
297
|
/**
|
|
445
298
|
* Where must contain either latest or published keys.
|
|
446
299
|
* We cannot list entries without one of those
|
|
@@ -469,11 +322,13 @@ const createContentEntryCrud = params => {
|
|
|
469
322
|
totalCount,
|
|
470
323
|
cursor,
|
|
471
324
|
items
|
|
472
|
-
} = await storageOperations.entries.list(model,
|
|
325
|
+
} = await storageOperations.entries.list(model, {
|
|
326
|
+
...params,
|
|
327
|
+
sort: createSort(params.sort),
|
|
473
328
|
limit,
|
|
474
329
|
where,
|
|
475
330
|
fields
|
|
476
|
-
})
|
|
331
|
+
});
|
|
477
332
|
const meta = {
|
|
478
333
|
hasMoreItems,
|
|
479
334
|
totalCount,
|
|
@@ -497,59 +352,26 @@ const createContentEntryCrud = params => {
|
|
|
497
352
|
});
|
|
498
353
|
}
|
|
499
354
|
};
|
|
500
|
-
const createEntry = async (
|
|
501
|
-
await
|
|
355
|
+
const createEntry = async (model, rawInput, options) => {
|
|
356
|
+
await entriesPermissions.ensure({
|
|
502
357
|
rwd: "w"
|
|
503
358
|
});
|
|
504
|
-
await
|
|
505
|
-
|
|
506
|
-
model: initialModel,
|
|
507
|
-
plugins
|
|
508
|
-
});
|
|
509
|
-
|
|
510
|
-
/**
|
|
511
|
-
* Make sure we only work with fields that are defined in the model.
|
|
512
|
-
*/
|
|
513
|
-
const initialInput = mapAndCleanCreateInputData(model, inputData);
|
|
514
|
-
await (0, _entryDataValidation.validateModelEntryData)({
|
|
515
|
-
context,
|
|
516
|
-
model,
|
|
517
|
-
data: initialInput
|
|
359
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
360
|
+
model
|
|
518
361
|
});
|
|
519
|
-
const
|
|
362
|
+
const {
|
|
363
|
+
entry,
|
|
364
|
+
input
|
|
365
|
+
} = await (0, _entryDataFactories.createEntryData)({
|
|
520
366
|
context,
|
|
521
367
|
model,
|
|
522
|
-
|
|
523
|
-
|
|
368
|
+
options,
|
|
369
|
+
rawInput,
|
|
370
|
+
getLocale,
|
|
371
|
+
getTenant,
|
|
372
|
+
getIdentity: getSecurityIdentity,
|
|
373
|
+
entriesPermissions
|
|
524
374
|
});
|
|
525
|
-
const locale = getLocale();
|
|
526
|
-
const owner = getCreatedBy();
|
|
527
|
-
const {
|
|
528
|
-
id,
|
|
529
|
-
entryId,
|
|
530
|
-
version
|
|
531
|
-
} = createEntryId(inputData);
|
|
532
|
-
/**
|
|
533
|
-
* There is a possibility that user sends an ID in the input, so we will use that one.
|
|
534
|
-
* There is no check if the ID is unique or not, that is up to the user.
|
|
535
|
-
*/
|
|
536
|
-
const entry = {
|
|
537
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
538
|
-
tenant: getTenant().id,
|
|
539
|
-
entryId,
|
|
540
|
-
id,
|
|
541
|
-
modelId: model.modelId,
|
|
542
|
-
locale: locale.code,
|
|
543
|
-
createdOn: new Date().toISOString(),
|
|
544
|
-
savedOn: new Date().toISOString(),
|
|
545
|
-
createdBy: owner,
|
|
546
|
-
ownedBy: owner,
|
|
547
|
-
modifiedBy: null,
|
|
548
|
-
version,
|
|
549
|
-
locked: false,
|
|
550
|
-
status: STATUS_DRAFT,
|
|
551
|
-
values: input
|
|
552
|
-
};
|
|
553
375
|
let storageEntry = null;
|
|
554
376
|
try {
|
|
555
377
|
await onEntryBeforeCreate.publish({
|
|
@@ -568,7 +390,7 @@ const createContentEntryCrud = params => {
|
|
|
568
390
|
model,
|
|
569
391
|
input
|
|
570
392
|
});
|
|
571
|
-
return
|
|
393
|
+
return entry;
|
|
572
394
|
} catch (ex) {
|
|
573
395
|
await onEntryCreateError.publish({
|
|
574
396
|
error: ex,
|
|
@@ -584,21 +406,14 @@ const createContentEntryCrud = params => {
|
|
|
584
406
|
});
|
|
585
407
|
}
|
|
586
408
|
};
|
|
587
|
-
const createEntryRevisionFrom = async (
|
|
588
|
-
|
|
409
|
+
const createEntryRevisionFrom = async (model, sourceId, rawInput, options) => {
|
|
410
|
+
await entriesPermissions.ensure({
|
|
589
411
|
rwd: "w"
|
|
590
412
|
});
|
|
591
|
-
await
|
|
592
|
-
|
|
593
|
-
model: initialModel,
|
|
594
|
-
plugins
|
|
413
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
414
|
+
model
|
|
595
415
|
});
|
|
596
416
|
|
|
597
|
-
/**
|
|
598
|
-
* Make sure we only work with fields that are defined in the model.
|
|
599
|
-
*/
|
|
600
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
601
|
-
|
|
602
417
|
/**
|
|
603
418
|
* Entries are identified by a common parent ID + Revision number.
|
|
604
419
|
*/
|
|
@@ -614,46 +429,31 @@ const createContentEntryCrud = params => {
|
|
|
614
429
|
if (!originalStorageEntry) {
|
|
615
430
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
616
431
|
}
|
|
432
|
+
if (!latestStorageEntry) {
|
|
433
|
+
throw new _handlerGraphql.NotFoundError(`Latest entry "${uniqueId}" of model "${model.modelId}" was not found.`);
|
|
434
|
+
}
|
|
617
435
|
|
|
618
436
|
/**
|
|
619
437
|
* We need to convert data from DB to its original form before using it further.
|
|
620
438
|
*/
|
|
621
439
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
context,
|
|
625
|
-
model,
|
|
626
|
-
data: initialValues,
|
|
627
|
-
entry: originalEntry
|
|
628
|
-
});
|
|
629
|
-
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
630
|
-
context,
|
|
631
|
-
model,
|
|
632
|
-
input: initialValues,
|
|
633
|
-
validateEntries: false
|
|
440
|
+
await entriesPermissions.ensure({
|
|
441
|
+
owns: originalEntry.createdBy
|
|
634
442
|
});
|
|
635
|
-
(0, _ownership.checkOwnership)(context, permission, originalEntry);
|
|
636
|
-
const identity = getIdentity();
|
|
637
|
-
const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;
|
|
638
443
|
const {
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
} =
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
modifiedBy: null,
|
|
653
|
-
locked: false,
|
|
654
|
-
publishedOn: undefined,
|
|
655
|
-
status: STATUS_DRAFT,
|
|
656
|
-
values
|
|
444
|
+
entry,
|
|
445
|
+
input
|
|
446
|
+
} = await (0, _entryDataFactories.createEntryRevisionFromData)({
|
|
447
|
+
sourceId,
|
|
448
|
+
model,
|
|
449
|
+
rawInput,
|
|
450
|
+
options,
|
|
451
|
+
context,
|
|
452
|
+
getIdentity: getSecurityIdentity,
|
|
453
|
+
getTenant,
|
|
454
|
+
getLocale,
|
|
455
|
+
originalEntry,
|
|
456
|
+
latestStorageEntry
|
|
657
457
|
});
|
|
658
458
|
let storageEntry = null;
|
|
659
459
|
try {
|
|
@@ -675,7 +475,7 @@ const createContentEntryCrud = params => {
|
|
|
675
475
|
original: originalEntry,
|
|
676
476
|
storageEntry: result
|
|
677
477
|
});
|
|
678
|
-
return
|
|
478
|
+
return entry;
|
|
679
479
|
} catch (ex) {
|
|
680
480
|
await onEntryCreateRevisionError.publish({
|
|
681
481
|
entry,
|
|
@@ -693,21 +493,14 @@ const createContentEntryCrud = params => {
|
|
|
693
493
|
});
|
|
694
494
|
}
|
|
695
495
|
};
|
|
696
|
-
const updateEntry = async (
|
|
697
|
-
|
|
496
|
+
const updateEntry = async (model, id, rawInput, metaInput, options) => {
|
|
497
|
+
await entriesPermissions.ensure({
|
|
698
498
|
rwd: "w"
|
|
699
499
|
});
|
|
700
|
-
await
|
|
701
|
-
|
|
702
|
-
model: initialModel,
|
|
703
|
-
plugins
|
|
500
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
501
|
+
model
|
|
704
502
|
});
|
|
705
503
|
|
|
706
|
-
/**
|
|
707
|
-
* Make sure we only work with fields that are defined in the model.
|
|
708
|
-
*/
|
|
709
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
710
|
-
|
|
711
504
|
/**
|
|
712
505
|
* The entry we are going to update.
|
|
713
506
|
*/
|
|
@@ -721,33 +514,22 @@ const createContentEntryCrud = params => {
|
|
|
721
514
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
722
515
|
}
|
|
723
516
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
724
|
-
await
|
|
725
|
-
|
|
726
|
-
model,
|
|
727
|
-
data: input,
|
|
728
|
-
entry: originalEntry
|
|
517
|
+
await entriesPermissions.ensure({
|
|
518
|
+
owns: originalEntry.revisionCreatedBy
|
|
729
519
|
});
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
520
|
+
const {
|
|
521
|
+
entry,
|
|
522
|
+
input
|
|
523
|
+
} = await (0, _entryDataFactories.createUpdateEntryData)({
|
|
734
524
|
model,
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
* We always send the full entry to the hooks and storage operations update.
|
|
744
|
-
*/
|
|
745
|
-
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
746
|
-
savedOn: new Date().toISOString(),
|
|
747
|
-
modifiedBy: getCreatedBy(),
|
|
748
|
-
values,
|
|
749
|
-
meta,
|
|
750
|
-
status: transformEntryStatus(originalEntry.status)
|
|
525
|
+
rawInput,
|
|
526
|
+
options,
|
|
527
|
+
context,
|
|
528
|
+
getIdentity: getSecurityIdentity,
|
|
529
|
+
getTenant,
|
|
530
|
+
getLocale,
|
|
531
|
+
originalEntry,
|
|
532
|
+
metaInput
|
|
751
533
|
});
|
|
752
534
|
let storageEntry = null;
|
|
753
535
|
try {
|
|
@@ -769,7 +551,7 @@ const createContentEntryCrud = params => {
|
|
|
769
551
|
input,
|
|
770
552
|
original: originalEntry
|
|
771
553
|
});
|
|
772
|
-
return
|
|
554
|
+
return entry;
|
|
773
555
|
} catch (ex) {
|
|
774
556
|
await onEntryUpdateError.publish({
|
|
775
557
|
entry,
|
|
@@ -786,44 +568,109 @@ const createContentEntryCrud = params => {
|
|
|
786
568
|
});
|
|
787
569
|
}
|
|
788
570
|
};
|
|
789
|
-
const
|
|
790
|
-
await
|
|
571
|
+
const validateEntry = async (model, id, inputData) => {
|
|
572
|
+
await entriesPermissions.ensure({
|
|
573
|
+
rwd: "w"
|
|
574
|
+
});
|
|
575
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
576
|
+
model
|
|
577
|
+
});
|
|
578
|
+
const input = (0, _entryDataFactories.mapAndCleanUpdatedInputData)(model, inputData || {});
|
|
579
|
+
let originalEntry;
|
|
580
|
+
if (id) {
|
|
581
|
+
/**
|
|
582
|
+
* The entry we are going to update.
|
|
583
|
+
*/
|
|
584
|
+
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
585
|
+
id
|
|
586
|
+
});
|
|
587
|
+
if (!originalStorageEntry) {
|
|
588
|
+
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
589
|
+
}
|
|
590
|
+
originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
591
|
+
}
|
|
592
|
+
const result = await (0, _entryDataValidation.validateModelEntryData)({
|
|
593
|
+
context,
|
|
594
|
+
model,
|
|
595
|
+
data: input,
|
|
596
|
+
entry: originalEntry
|
|
597
|
+
});
|
|
598
|
+
return result.length > 0 ? result : [];
|
|
599
|
+
};
|
|
600
|
+
const moveEntry = async (model, id, folderId) => {
|
|
601
|
+
await entriesPermissions.ensure({
|
|
791
602
|
rwd: "w"
|
|
792
603
|
});
|
|
793
|
-
await
|
|
794
|
-
|
|
795
|
-
model: initialModel,
|
|
796
|
-
plugins
|
|
604
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
605
|
+
model
|
|
797
606
|
});
|
|
798
607
|
/**
|
|
799
|
-
*
|
|
608
|
+
* The entry we are going to move to another folder.
|
|
800
609
|
*/
|
|
801
610
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
802
611
|
id
|
|
803
612
|
});
|
|
804
613
|
if (!originalStorageEntry) {
|
|
805
|
-
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found
|
|
614
|
+
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
806
615
|
}
|
|
807
|
-
const
|
|
616
|
+
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
808
617
|
/**
|
|
809
|
-
*
|
|
618
|
+
* No need to continue if the entry is already in the requested folder.
|
|
810
619
|
*/
|
|
811
|
-
if (
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
620
|
+
if (entry.location?.folderId === folderId) {
|
|
621
|
+
return entry;
|
|
622
|
+
}
|
|
623
|
+
try {
|
|
624
|
+
await onEntryBeforeMove.publish({
|
|
625
|
+
entry,
|
|
626
|
+
model,
|
|
627
|
+
folderId
|
|
815
628
|
});
|
|
629
|
+
await storageOperations.entries.move(model, id, folderId);
|
|
630
|
+
await onEntryAfterMove.publish({
|
|
631
|
+
entry,
|
|
632
|
+
model,
|
|
633
|
+
folderId
|
|
634
|
+
});
|
|
635
|
+
return entry;
|
|
636
|
+
} catch (ex) {
|
|
637
|
+
await onEntryMoveError.publish({
|
|
638
|
+
entry,
|
|
639
|
+
model,
|
|
640
|
+
folderId,
|
|
641
|
+
error: ex
|
|
642
|
+
});
|
|
643
|
+
throw _error.default.from(ex, {
|
|
644
|
+
message: `Could not move entry "${id}" of model "${model.modelId}".`,
|
|
645
|
+
code: "MOVE_ENTRY_ERROR"
|
|
646
|
+
});
|
|
647
|
+
}
|
|
648
|
+
};
|
|
649
|
+
const republishEntry = async (model, id) => {
|
|
650
|
+
await entriesPermissions.ensure({
|
|
651
|
+
rwd: "w"
|
|
652
|
+
});
|
|
653
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
654
|
+
model
|
|
655
|
+
});
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* Fetch the entry from the storage.
|
|
659
|
+
*/
|
|
660
|
+
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
661
|
+
id
|
|
662
|
+
});
|
|
663
|
+
if (!originalStorageEntry) {
|
|
664
|
+
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
816
665
|
}
|
|
817
|
-
const
|
|
666
|
+
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
667
|
+
const {
|
|
668
|
+
entry
|
|
669
|
+
} = await (0, _entryDataFactories.createRepublishEntryData)({
|
|
818
670
|
context,
|
|
819
671
|
model,
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
});
|
|
823
|
-
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
824
|
-
savedOn: new Date().toISOString(),
|
|
825
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
826
|
-
values
|
|
672
|
+
originalEntry,
|
|
673
|
+
getIdentity: getSecurityIdentity
|
|
827
674
|
});
|
|
828
675
|
const storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
829
676
|
/**
|
|
@@ -854,9 +701,9 @@ const createContentEntryCrud = params => {
|
|
|
854
701
|
await onEntryAfterRepublish.publish({
|
|
855
702
|
entry,
|
|
856
703
|
model,
|
|
857
|
-
storageEntry
|
|
704
|
+
storageEntry: result
|
|
858
705
|
});
|
|
859
|
-
return
|
|
706
|
+
return entry;
|
|
860
707
|
} catch (ex) {
|
|
861
708
|
await onEntryRepublishError.publish({
|
|
862
709
|
entry,
|
|
@@ -868,14 +715,12 @@ const createContentEntryCrud = params => {
|
|
|
868
715
|
});
|
|
869
716
|
}
|
|
870
717
|
};
|
|
871
|
-
const deleteEntryRevision = async (
|
|
872
|
-
|
|
718
|
+
const deleteEntryRevision = async (model, revisionId) => {
|
|
719
|
+
await entriesPermissions.ensure({
|
|
873
720
|
rwd: "d"
|
|
874
721
|
});
|
|
875
|
-
await
|
|
876
|
-
|
|
877
|
-
model: initialModel,
|
|
878
|
-
plugins
|
|
722
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
723
|
+
model
|
|
879
724
|
});
|
|
880
725
|
const {
|
|
881
726
|
id: entryId,
|
|
@@ -887,34 +732,54 @@ const createContentEntryCrud = params => {
|
|
|
887
732
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
888
733
|
id: entryId
|
|
889
734
|
});
|
|
890
|
-
const
|
|
735
|
+
const storagePreviousEntry = await storageOperations.entries.getPreviousRevision(model, {
|
|
891
736
|
entryId,
|
|
892
737
|
version: version
|
|
893
738
|
});
|
|
894
739
|
if (!storageEntryToDelete) {
|
|
895
740
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
896
741
|
}
|
|
897
|
-
|
|
742
|
+
await entriesPermissions.ensure({
|
|
743
|
+
owns: storageEntryToDelete.revisionCreatedBy
|
|
744
|
+
});
|
|
898
745
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
899
746
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
747
|
+
|
|
900
748
|
/**
|
|
901
|
-
* If targeted record is the latest entry record and there is no previous one, we need
|
|
902
|
-
*
|
|
749
|
+
* If targeted record is the latest entry record and there is no previous one, we need
|
|
750
|
+
* to run full delete with hooks. In this case, `deleteRevision` hooks are not fired.
|
|
903
751
|
*/
|
|
904
|
-
if (entryToDelete.id === latestEntryRevisionId && !
|
|
752
|
+
if (entryToDelete.id === latestEntryRevisionId && !storagePreviousEntry) {
|
|
905
753
|
return await deleteEntryHelper({
|
|
906
754
|
model,
|
|
907
755
|
entry: entryToDelete
|
|
908
756
|
});
|
|
909
757
|
}
|
|
910
758
|
/**
|
|
911
|
-
* If targeted record is latest entry revision, set the previous one as the new latest
|
|
759
|
+
* If targeted record is the latest entry revision, set the previous one as the new latest.
|
|
912
760
|
*/
|
|
913
761
|
let entryToSetAsLatest = null;
|
|
914
762
|
let storageEntryToSetAsLatest = null;
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
763
|
+
let updatedEntryToSetAsLatest = null;
|
|
764
|
+
let storageUpdatedEntryToSetAsLatest = null;
|
|
765
|
+
if (entryToDelete.id === latestEntryRevisionId && storagePreviousEntry) {
|
|
766
|
+
entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, storagePreviousEntry);
|
|
767
|
+
storageEntryToSetAsLatest = storagePreviousEntry;
|
|
768
|
+
|
|
769
|
+
/**
|
|
770
|
+
* Since we're setting a different revision as the latest, we need to update entry-level meta
|
|
771
|
+
* fields. The values are taken from the latest revision we're about to delete. The update of the
|
|
772
|
+
* new latest revision is performed within storage operations.
|
|
773
|
+
*/
|
|
774
|
+
const pickedEntryLevelMetaFields = (0, _constants.pickEntryMetaFields)(entryToDelete, _constants.isEntryLevelEntryMetaField);
|
|
775
|
+
updatedEntryToSetAsLatest = {
|
|
776
|
+
...entryToSetAsLatest,
|
|
777
|
+
...pickedEntryLevelMetaFields
|
|
778
|
+
};
|
|
779
|
+
storageUpdatedEntryToSetAsLatest = {
|
|
780
|
+
...storageEntryToSetAsLatest,
|
|
781
|
+
...pickedEntryLevelMetaFields
|
|
782
|
+
};
|
|
918
783
|
}
|
|
919
784
|
try {
|
|
920
785
|
await onEntryRevisionBeforeDelete.publish({
|
|
@@ -924,8 +789,8 @@ const createContentEntryCrud = params => {
|
|
|
924
789
|
await storageOperations.entries.deleteRevision(model, {
|
|
925
790
|
entry: entryToDelete,
|
|
926
791
|
storageEntry: storageEntryToDelete,
|
|
927
|
-
latestEntry:
|
|
928
|
-
latestStorageEntry:
|
|
792
|
+
latestEntry: updatedEntryToSetAsLatest,
|
|
793
|
+
latestStorageEntry: storageUpdatedEntryToSetAsLatest
|
|
929
794
|
});
|
|
930
795
|
await onEntryRevisionAfterDelete.publish({
|
|
931
796
|
entry: entryToDelete,
|
|
@@ -941,41 +806,139 @@ const createContentEntryCrud = params => {
|
|
|
941
806
|
error: ex,
|
|
942
807
|
entry: entryToDelete,
|
|
943
808
|
storageEntry: storageEntryToDelete,
|
|
944
|
-
latestEntry:
|
|
945
|
-
latestStorageEntry:
|
|
809
|
+
latestEntry: updatedEntryToSetAsLatest,
|
|
810
|
+
latestStorageEntry: storageUpdatedEntryToSetAsLatest
|
|
811
|
+
});
|
|
812
|
+
}
|
|
813
|
+
};
|
|
814
|
+
const deleteMultipleEntries = async (model, params) => {
|
|
815
|
+
const {
|
|
816
|
+
entries: input
|
|
817
|
+
} = params;
|
|
818
|
+
const maxDeletableEntries = 50;
|
|
819
|
+
const entryIdList = new Set();
|
|
820
|
+
for (const id of input) {
|
|
821
|
+
const {
|
|
822
|
+
id: entryId
|
|
823
|
+
} = (0, _utils.parseIdentifier)(id);
|
|
824
|
+
entryIdList.add(entryId);
|
|
825
|
+
}
|
|
826
|
+
const ids = Array.from(entryIdList);
|
|
827
|
+
if (ids.length > maxDeletableEntries) {
|
|
828
|
+
throw new _error.default("Cannot delete more than 50 entries at once.", "DELETE_ENTRIES_MAX", {
|
|
829
|
+
entries: ids
|
|
830
|
+
});
|
|
831
|
+
}
|
|
832
|
+
await entriesPermissions.ensure({
|
|
833
|
+
rwd: "d"
|
|
834
|
+
});
|
|
835
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
836
|
+
model
|
|
837
|
+
});
|
|
838
|
+
const {
|
|
839
|
+
items: entries
|
|
840
|
+
} = await storageOperations.entries.list(model, {
|
|
841
|
+
where: {
|
|
842
|
+
latest: true,
|
|
843
|
+
entryId_in: ids
|
|
844
|
+
},
|
|
845
|
+
limit: maxDeletableEntries + 1
|
|
846
|
+
});
|
|
847
|
+
/**
|
|
848
|
+
* We do not want to allow deleting entries that user does not own or cannot access.
|
|
849
|
+
*/
|
|
850
|
+
const items = (await (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
851
|
+
return entriesPermissions.ensure({
|
|
852
|
+
owns: entry.createdBy
|
|
853
|
+
}, {
|
|
854
|
+
throw: false
|
|
855
|
+
});
|
|
856
|
+
})).map(entry => entry.id);
|
|
857
|
+
try {
|
|
858
|
+
await onEntryBeforeDeleteMultiple.publish({
|
|
859
|
+
entries,
|
|
860
|
+
ids,
|
|
861
|
+
model
|
|
862
|
+
});
|
|
863
|
+
await storageOperations.entries.deleteMultipleEntries(model, {
|
|
864
|
+
entries: items
|
|
865
|
+
});
|
|
866
|
+
await onEntryAfterDeleteMultiple.publish({
|
|
867
|
+
entries,
|
|
868
|
+
ids,
|
|
869
|
+
model
|
|
870
|
+
});
|
|
871
|
+
return items.map(id => {
|
|
872
|
+
return {
|
|
873
|
+
id
|
|
874
|
+
};
|
|
875
|
+
});
|
|
876
|
+
} catch (ex) {
|
|
877
|
+
await onEntryDeleteMultipleError.publish({
|
|
878
|
+
entries,
|
|
879
|
+
ids,
|
|
880
|
+
model,
|
|
881
|
+
error: ex
|
|
882
|
+
});
|
|
883
|
+
throw new _error.default(ex.message, ex.code || "DELETE_ENTRIES_MULTIPLE_ERROR", {
|
|
884
|
+
error: ex,
|
|
885
|
+
entries
|
|
946
886
|
});
|
|
947
887
|
}
|
|
948
888
|
};
|
|
949
|
-
const deleteEntry = async (
|
|
950
|
-
|
|
889
|
+
const deleteEntry = async (model, id, options) => {
|
|
890
|
+
await entriesPermissions.ensure({
|
|
951
891
|
rwd: "d"
|
|
952
892
|
});
|
|
953
|
-
await
|
|
954
|
-
|
|
955
|
-
model: initialModel,
|
|
956
|
-
plugins
|
|
893
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
894
|
+
model
|
|
957
895
|
});
|
|
896
|
+
const {
|
|
897
|
+
force
|
|
898
|
+
} = options || {};
|
|
958
899
|
const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
959
|
-
id
|
|
900
|
+
id
|
|
960
901
|
});
|
|
961
|
-
|
|
962
|
-
|
|
902
|
+
/**
|
|
903
|
+
* If there is no entry, and we do not force the deletion, just throw an error.
|
|
904
|
+
*/
|
|
905
|
+
if (!storageEntry && !force) {
|
|
906
|
+
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
907
|
+
}
|
|
908
|
+
/**
|
|
909
|
+
* In the case we are forcing the deletion, we do not need the storageEntry to exist as it might be an error when loading single database record.
|
|
910
|
+
*
|
|
911
|
+
* This happens, sometimes, in the Elasticsearch system as the entry might get deleted from the DynamoDB but not from the Elasticsearch.
|
|
912
|
+
* This is due to high load on the Elasticsearch at the time of the deletion.
|
|
913
|
+
*/
|
|
914
|
+
//
|
|
915
|
+
else if (!storageEntry && force) {
|
|
916
|
+
const {
|
|
917
|
+
id: entryId
|
|
918
|
+
} = (0, _utils.parseIdentifier)(id);
|
|
919
|
+
return await deleteEntryHelper({
|
|
920
|
+
model,
|
|
921
|
+
entry: {
|
|
922
|
+
id,
|
|
923
|
+
entryId
|
|
924
|
+
}
|
|
925
|
+
});
|
|
963
926
|
}
|
|
964
|
-
|
|
927
|
+
await entriesPermissions.ensure({
|
|
928
|
+
owns: storageEntry.createdBy
|
|
929
|
+
});
|
|
965
930
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
966
931
|
return await deleteEntryHelper({
|
|
967
932
|
model,
|
|
968
933
|
entry
|
|
969
934
|
});
|
|
970
935
|
};
|
|
971
|
-
const publishEntry = async (
|
|
972
|
-
|
|
936
|
+
const publishEntry = async (model, id) => {
|
|
937
|
+
await entriesPermissions.ensure({
|
|
973
938
|
pw: "p"
|
|
974
939
|
});
|
|
975
|
-
await
|
|
976
|
-
|
|
977
|
-
model: initialModel,
|
|
978
|
-
plugins
|
|
940
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
941
|
+
model
|
|
979
942
|
});
|
|
980
943
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
981
944
|
id
|
|
@@ -983,18 +946,32 @@ const createContentEntryCrud = params => {
|
|
|
983
946
|
if (!originalStorageEntry) {
|
|
984
947
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
985
948
|
}
|
|
986
|
-
|
|
949
|
+
await entriesPermissions.ensure({
|
|
950
|
+
owns: originalStorageEntry.revisionCreatedBy
|
|
951
|
+
});
|
|
987
952
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
953
|
+
|
|
954
|
+
// We need the latest entry to get the latest entry-level meta fields.
|
|
955
|
+
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
956
|
+
id: originalEntry.entryId
|
|
957
|
+
});
|
|
958
|
+
if (!latestStorageEntry) {
|
|
959
|
+
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
960
|
+
}
|
|
961
|
+
const latestEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, latestStorageEntry);
|
|
962
|
+
const {
|
|
963
|
+
entry
|
|
964
|
+
} = await (0, _entryDataFactories.createPublishEntryData)({
|
|
965
|
+
context,
|
|
966
|
+
model,
|
|
967
|
+
originalEntry,
|
|
968
|
+
latestEntry,
|
|
969
|
+
getIdentity: getSecurityIdentity
|
|
994
970
|
});
|
|
995
971
|
let storageEntry = null;
|
|
996
972
|
try {
|
|
997
973
|
await onEntryBeforePublish.publish({
|
|
974
|
+
original: originalEntry,
|
|
998
975
|
entry,
|
|
999
976
|
model
|
|
1000
977
|
});
|
|
@@ -1004,13 +981,15 @@ const createContentEntryCrud = params => {
|
|
|
1004
981
|
storageEntry
|
|
1005
982
|
});
|
|
1006
983
|
await onEntryAfterPublish.publish({
|
|
984
|
+
original: originalEntry,
|
|
1007
985
|
entry,
|
|
1008
986
|
storageEntry: result,
|
|
1009
987
|
model
|
|
1010
988
|
});
|
|
1011
|
-
return
|
|
989
|
+
return entry;
|
|
1012
990
|
} catch (ex) {
|
|
1013
991
|
await onEntryPublishError.publish({
|
|
992
|
+
original: originalEntry,
|
|
1014
993
|
entry,
|
|
1015
994
|
model,
|
|
1016
995
|
error: ex
|
|
@@ -1024,14 +1003,10 @@ const createContentEntryCrud = params => {
|
|
|
1024
1003
|
});
|
|
1025
1004
|
}
|
|
1026
1005
|
};
|
|
1027
|
-
const unpublishEntry = async (
|
|
1028
|
-
|
|
1006
|
+
const unpublishEntry = async (model, id) => {
|
|
1007
|
+
await entriesPermissions.ensure({
|
|
1029
1008
|
pw: "u"
|
|
1030
1009
|
});
|
|
1031
|
-
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
1032
|
-
model: initialModel,
|
|
1033
|
-
plugins
|
|
1034
|
-
});
|
|
1035
1010
|
const {
|
|
1036
1011
|
id: entryId
|
|
1037
1012
|
} = (0, _utils.parseIdentifier)(id);
|
|
@@ -1046,10 +1021,17 @@ const createContentEntryCrud = params => {
|
|
|
1046
1021
|
entry: originalStorageEntry
|
|
1047
1022
|
});
|
|
1048
1023
|
}
|
|
1049
|
-
|
|
1024
|
+
await entriesPermissions.ensure({
|
|
1025
|
+
owns: originalStorageEntry.revisionCreatedBy
|
|
1026
|
+
});
|
|
1050
1027
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1051
|
-
const
|
|
1052
|
-
|
|
1028
|
+
const {
|
|
1029
|
+
entry
|
|
1030
|
+
} = await (0, _entryDataFactories.createUnpublishEntryData)({
|
|
1031
|
+
context,
|
|
1032
|
+
model,
|
|
1033
|
+
originalEntry,
|
|
1034
|
+
getIdentity: getSecurityIdentity
|
|
1053
1035
|
});
|
|
1054
1036
|
let storageEntry = null;
|
|
1055
1037
|
try {
|
|
@@ -1067,7 +1049,7 @@ const createContentEntryCrud = params => {
|
|
|
1067
1049
|
storageEntry: result,
|
|
1068
1050
|
model
|
|
1069
1051
|
});
|
|
1070
|
-
return
|
|
1052
|
+
return entry;
|
|
1071
1053
|
} catch (ex) {
|
|
1072
1054
|
await onEntryUnpublishError.publish({
|
|
1073
1055
|
entry,
|
|
@@ -1082,73 +1064,97 @@ const createContentEntryCrud = params => {
|
|
|
1082
1064
|
});
|
|
1083
1065
|
}
|
|
1084
1066
|
};
|
|
1085
|
-
|
|
1067
|
+
const getUniqueFieldValues = async (model, params) => {
|
|
1068
|
+
await entriesPermissions.ensure({
|
|
1069
|
+
rwd: "r"
|
|
1070
|
+
});
|
|
1071
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
1072
|
+
model
|
|
1073
|
+
});
|
|
1074
|
+
const {
|
|
1075
|
+
where: initialWhere,
|
|
1076
|
+
fieldId
|
|
1077
|
+
} = params;
|
|
1078
|
+
const where = {
|
|
1079
|
+
...initialWhere
|
|
1080
|
+
};
|
|
1086
1081
|
/**
|
|
1087
|
-
*
|
|
1082
|
+
* Possibly only get records which are owned by current user.
|
|
1083
|
+
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
1088
1084
|
*/
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
onBeforeEntryUpdate: onEntryBeforeUpdate,
|
|
1094
|
-
onAfterEntryUpdate: onEntryAfterUpdate,
|
|
1095
|
-
onBeforeEntryDelete: onEntryBeforeDelete,
|
|
1096
|
-
onAfterEntryDelete: onEntryAfterDelete,
|
|
1097
|
-
onBeforeEntryDeleteRevision: onEntryRevisionBeforeDelete,
|
|
1098
|
-
onAfterEntryDeleteRevision: onEntryRevisionAfterDelete,
|
|
1099
|
-
onBeforeEntryPublish: onEntryBeforePublish,
|
|
1100
|
-
onAfterEntryPublish: onEntryAfterPublish,
|
|
1101
|
-
onBeforeEntryUnpublish: onEntryBeforeUnpublish,
|
|
1102
|
-
onAfterEntryUnpublish: onEntryAfterUnpublish,
|
|
1103
|
-
onBeforeEntryGet: onEntryBeforeGet,
|
|
1104
|
-
onBeforeEntryList: onEntryBeforeList,
|
|
1085
|
+
if (await entriesPermissions.canAccessOnlyOwnRecords()) {
|
|
1086
|
+
where.createdBy = getSecurityIdentity().id;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1105
1089
|
/**
|
|
1106
|
-
*
|
|
1107
|
-
*
|
|
1108
|
-
|
|
1090
|
+
* Where must contain either latest or published keys.
|
|
1091
|
+
* We cannot list entries without one of those
|
|
1092
|
+
*/
|
|
1093
|
+
if (where.latest && where.published) {
|
|
1094
|
+
throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
|
|
1095
|
+
where
|
|
1096
|
+
});
|
|
1097
|
+
} else if (!where.latest && !where.published) {
|
|
1098
|
+
throw new _error.default("Cannot list entries if we do not have latest or published defined.", "LIST_ENTRIES_ERROR", {
|
|
1099
|
+
where
|
|
1100
|
+
});
|
|
1101
|
+
}
|
|
1102
|
+
/**
|
|
1103
|
+
* We need to verify that the field in question is searchable.
|
|
1109
1104
|
*/
|
|
1105
|
+
const fields = (0, _searchableFields.getSearchableFields)({
|
|
1106
|
+
fields: model.fields,
|
|
1107
|
+
plugins: context.plugins,
|
|
1108
|
+
input: []
|
|
1109
|
+
});
|
|
1110
|
+
if (!fields.includes(fieldId)) {
|
|
1111
|
+
throw new _error.default("Cannot list unique entry field values if the field is not searchable.", "LIST_UNIQUE_ENTRY_VALUES_ERROR", {
|
|
1112
|
+
fieldId
|
|
1113
|
+
});
|
|
1114
|
+
}
|
|
1115
|
+
try {
|
|
1116
|
+
return await storageOperations.entries.getUniqueFieldValues(model, {
|
|
1117
|
+
where,
|
|
1118
|
+
fieldId
|
|
1119
|
+
});
|
|
1120
|
+
} catch (ex) {
|
|
1121
|
+
throw new _error.default("Error while fetching unique entry values from storage.", "LIST_UNIQUE_ENTRY_VALUES_ERROR", {
|
|
1122
|
+
error: {
|
|
1123
|
+
message: ex.message,
|
|
1124
|
+
code: ex.code,
|
|
1125
|
+
data: ex.data
|
|
1126
|
+
},
|
|
1127
|
+
model,
|
|
1128
|
+
where,
|
|
1129
|
+
fieldId
|
|
1130
|
+
});
|
|
1131
|
+
}
|
|
1132
|
+
};
|
|
1133
|
+
return {
|
|
1110
1134
|
onEntryBeforeCreate,
|
|
1111
1135
|
onEntryAfterCreate,
|
|
1112
1136
|
onEntryCreateError,
|
|
1113
|
-
/**
|
|
1114
|
-
* Create revision
|
|
1115
|
-
*/
|
|
1116
1137
|
onEntryRevisionBeforeCreate: onEntryBeforeCreateRevision,
|
|
1117
1138
|
onEntryRevisionAfterCreate,
|
|
1118
1139
|
onEntryRevisionCreateError: onEntryCreateRevisionError,
|
|
1119
|
-
/**
|
|
1120
|
-
* Update
|
|
1121
|
-
*/
|
|
1122
1140
|
onEntryBeforeUpdate,
|
|
1123
1141
|
onEntryAfterUpdate,
|
|
1124
1142
|
onEntryUpdateError,
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1143
|
+
onEntryBeforeMove,
|
|
1144
|
+
onEntryAfterMove,
|
|
1145
|
+
onEntryMoveError,
|
|
1128
1146
|
onEntryBeforeDelete,
|
|
1129
1147
|
onEntryAfterDelete,
|
|
1130
1148
|
onEntryDeleteError,
|
|
1131
|
-
/**
|
|
1132
|
-
* Delete entry revision
|
|
1133
|
-
*/
|
|
1134
1149
|
onEntryRevisionBeforeDelete,
|
|
1135
1150
|
onEntryRevisionAfterDelete,
|
|
1136
1151
|
onEntryRevisionDeleteError,
|
|
1137
|
-
/**
|
|
1138
|
-
* Publish
|
|
1139
|
-
*/
|
|
1140
1152
|
onEntryBeforePublish,
|
|
1141
1153
|
onEntryAfterPublish,
|
|
1142
1154
|
onEntryPublishError,
|
|
1143
|
-
/**
|
|
1144
|
-
* Republish
|
|
1145
|
-
*/
|
|
1146
1155
|
onEntryBeforeRepublish,
|
|
1147
1156
|
onEntryAfterRepublish,
|
|
1148
1157
|
onEntryRepublishError,
|
|
1149
|
-
/**
|
|
1150
|
-
* Unpublish
|
|
1151
|
-
*/
|
|
1152
1158
|
onEntryBeforeUnpublish,
|
|
1153
1159
|
onEntryAfterUnpublish,
|
|
1154
1160
|
onEntryUnpublishError,
|
|
@@ -1208,38 +1214,50 @@ const createContentEntryCrud = params => {
|
|
|
1208
1214
|
});
|
|
1209
1215
|
},
|
|
1210
1216
|
async listLatestEntries(model, params) {
|
|
1211
|
-
const where =
|
|
1212
|
-
return this.listEntries(model,
|
|
1213
|
-
sort: ["createdOn_DESC"]
|
|
1214
|
-
|
|
1215
|
-
where:
|
|
1217
|
+
const where = params?.where || {};
|
|
1218
|
+
return this.listEntries(model, {
|
|
1219
|
+
sort: ["createdOn_DESC"],
|
|
1220
|
+
...(params || {}),
|
|
1221
|
+
where: {
|
|
1222
|
+
...where,
|
|
1216
1223
|
latest: true
|
|
1217
|
-
}
|
|
1218
|
-
})
|
|
1224
|
+
}
|
|
1225
|
+
});
|
|
1219
1226
|
},
|
|
1220
1227
|
async listPublishedEntries(model, params) {
|
|
1221
|
-
const where =
|
|
1222
|
-
return this.listEntries(model,
|
|
1223
|
-
sort: ["createdOn_DESC"]
|
|
1224
|
-
|
|
1225
|
-
where:
|
|
1228
|
+
const where = params?.where || {};
|
|
1229
|
+
return this.listEntries(model, {
|
|
1230
|
+
sort: ["createdOn_DESC"],
|
|
1231
|
+
...(params || {}),
|
|
1232
|
+
where: {
|
|
1233
|
+
...where,
|
|
1226
1234
|
published: true
|
|
1227
|
-
}
|
|
1228
|
-
})
|
|
1235
|
+
}
|
|
1236
|
+
});
|
|
1229
1237
|
},
|
|
1230
|
-
async createEntry(model, input) {
|
|
1238
|
+
async createEntry(model, input, options) {
|
|
1231
1239
|
return context.benchmark.measure("headlessCms.crud.entries.createEntry", async () => {
|
|
1232
|
-
return createEntry(model, input);
|
|
1240
|
+
return createEntry(model, input, options);
|
|
1233
1241
|
});
|
|
1234
1242
|
},
|
|
1235
|
-
async createEntryRevisionFrom(model, sourceId, input) {
|
|
1243
|
+
async createEntryRevisionFrom(model, sourceId, input, options) {
|
|
1236
1244
|
return context.benchmark.measure("headlessCms.crud.entries.createEntryRevisionFrom", async () => {
|
|
1237
|
-
return createEntryRevisionFrom(model, sourceId, input);
|
|
1245
|
+
return createEntryRevisionFrom(model, sourceId, input, options);
|
|
1238
1246
|
});
|
|
1239
1247
|
},
|
|
1240
|
-
async updateEntry(model, id, input, meta) {
|
|
1248
|
+
async updateEntry(model, id, input, meta, options) {
|
|
1241
1249
|
return context.benchmark.measure("headlessCms.crud.entries.updateEntry", async () => {
|
|
1242
|
-
return updateEntry(model, id, input, meta);
|
|
1250
|
+
return updateEntry(model, id, input, meta, options);
|
|
1251
|
+
});
|
|
1252
|
+
},
|
|
1253
|
+
async validateEntry(model, id, input) {
|
|
1254
|
+
return context.benchmark.measure("headlessCms.crud.entries.validateEntry", async () => {
|
|
1255
|
+
return validateEntry(model, id, input);
|
|
1256
|
+
});
|
|
1257
|
+
},
|
|
1258
|
+
async moveEntry(model, id, folderId) {
|
|
1259
|
+
return context.benchmark.measure("headlessCms.crud.entries.moveEntry", async () => {
|
|
1260
|
+
return moveEntry(model, id, folderId);
|
|
1243
1261
|
});
|
|
1244
1262
|
},
|
|
1245
1263
|
/**
|
|
@@ -1256,9 +1274,14 @@ const createContentEntryCrud = params => {
|
|
|
1256
1274
|
return deleteEntryRevision(model, id);
|
|
1257
1275
|
});
|
|
1258
1276
|
},
|
|
1259
|
-
async deleteEntry(model, entryId) {
|
|
1277
|
+
async deleteEntry(model, entryId, options) {
|
|
1260
1278
|
return context.benchmark.measure("headlessCms.crud.entries.deleteEntry", async () => {
|
|
1261
|
-
return deleteEntry(model, entryId);
|
|
1279
|
+
return deleteEntry(model, entryId, options);
|
|
1280
|
+
});
|
|
1281
|
+
},
|
|
1282
|
+
async deleteMultipleEntries(model, ids) {
|
|
1283
|
+
return context.benchmark.measure("headlessCms.crud.entries.deleteMultipleEntries", async () => {
|
|
1284
|
+
return deleteMultipleEntries(model, ids);
|
|
1262
1285
|
});
|
|
1263
1286
|
},
|
|
1264
1287
|
async publishEntry(model, id) {
|
|
@@ -1270,7 +1293,14 @@ const createContentEntryCrud = params => {
|
|
|
1270
1293
|
return context.benchmark.measure("headlessCms.crud.entries.unpublishEntry", async () => {
|
|
1271
1294
|
return unpublishEntry(model, id);
|
|
1272
1295
|
});
|
|
1296
|
+
},
|
|
1297
|
+
async getUniqueFieldValues(model, params) {
|
|
1298
|
+
return context.benchmark.measure("headlessCms.crud.entries.getUniqueFieldValues", async () => {
|
|
1299
|
+
return getUniqueFieldValues(model, params);
|
|
1300
|
+
});
|
|
1273
1301
|
}
|
|
1274
1302
|
};
|
|
1275
1303
|
};
|
|
1276
|
-
exports.createContentEntryCrud = createContentEntryCrud;
|
|
1304
|
+
exports.createContentEntryCrud = createContentEntryCrud;
|
|
1305
|
+
|
|
1306
|
+
//# sourceMappingURL=contentEntry.crud.js.map
|