@webiny/api-headless-cms 0.0.0-unstable.da99e0b846 → 0.0.0-unstable.de38392959
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 +73 -36
- 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 +4 -3
- package/crud/contentEntry.crud.js +557 -463
- 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.js +3 -1
- 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 +570 -249
- package/crud/contentModel/validation.js +71 -11
- 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.js +3 -1
- package/graphql/checkEndpointAccess.js.map +1 -1
- package/graphql/createExecutableSchema.js +3 -1
- package/graphql/createExecutableSchema.js.map +1 -1
- package/graphql/createRequestBody.js +3 -1
- package/graphql/createRequestBody.js.map +1 -1
- package/graphql/formatErrorPayload.js +3 -1
- package/graphql/formatErrorPayload.js.map +1 -1
- package/graphql/generateSchema.js +3 -1
- package/graphql/generateSchema.js.map +1 -1
- package/graphql/getSchema.d.ts +0 -1
- package/graphql/getSchema.js +35 -19
- package/graphql/getSchema.js.map +1 -1
- package/graphql/graphQLHandlerFactory.js +3 -1
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/handleRequest.js +3 -5
- package/graphql/handleRequest.js.map +1 -1
- 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 +75 -25
- 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 +28 -16
- 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 +2 -1
- package/index.js +20 -5
- 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 +56 -27
- 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.js +5 -6
- package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -1
- 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 +1 -0
- package/plugins/index.js +14 -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 +397 -273
- 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.js +16 -6
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.js +7 -2
- package/utils/createTypeFromFields.js.map +1 -1
- package/utils/createTypeName.js +3 -1
- 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,193 +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
17
|
var _searchableFields = require("./contentEntry/searchableFields");
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const STATUS_PUBLISHED = "published";
|
|
33
|
-
exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
|
|
34
|
-
const STATUS_UNPUBLISHED = "unpublished";
|
|
35
|
-
exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
|
|
36
|
-
/**
|
|
37
|
-
* Used for some fields to convert their values.
|
|
38
|
-
*/
|
|
39
|
-
const convertDefaultValue = (field, value) => {
|
|
40
|
-
switch (field.type) {
|
|
41
|
-
case "boolean":
|
|
42
|
-
return Boolean(value);
|
|
43
|
-
case "number":
|
|
44
|
-
return Number(value);
|
|
45
|
-
default:
|
|
46
|
-
return value;
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
const getDefaultValue = field => {
|
|
50
|
-
const {
|
|
51
|
-
settings,
|
|
52
|
-
multipleValues
|
|
53
|
-
} = field;
|
|
54
|
-
if (settings && settings.defaultValue !== undefined) {
|
|
55
|
-
return convertDefaultValue(field, settings.defaultValue);
|
|
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;
|
|
56
25
|
}
|
|
57
|
-
|
|
58
|
-
predefinedValues
|
|
59
|
-
} = field;
|
|
60
|
-
if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
|
|
61
|
-
return undefined;
|
|
62
|
-
}
|
|
63
|
-
if (!multipleValues) {
|
|
64
|
-
const selectedValue = predefinedValues.values.find(value => {
|
|
65
|
-
return !!value.selected;
|
|
66
|
-
});
|
|
67
|
-
if (selectedValue) {
|
|
68
|
-
return convertDefaultValue(field, selectedValue.value);
|
|
69
|
-
}
|
|
70
|
-
return undefined;
|
|
71
|
-
}
|
|
72
|
-
return predefinedValues.values.filter(({
|
|
73
|
-
selected
|
|
74
|
-
}) => !!selected).map(({
|
|
75
|
-
value
|
|
76
|
-
}) => {
|
|
77
|
-
return convertDefaultValue(field, value);
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
/**
|
|
81
|
-
* Cleans and adds default values to create input data.
|
|
82
|
-
*/
|
|
83
|
-
const mapAndCleanCreateInputData = (model, input) => {
|
|
84
|
-
return model.fields.reduce((acc, field) => {
|
|
85
|
-
/**
|
|
86
|
-
* This should never happen, but let's make it sure.
|
|
87
|
-
* The fix would be for the user to add the fieldId on the field definition.
|
|
88
|
-
*/
|
|
89
|
-
if (!field.fieldId) {
|
|
90
|
-
throw new _error.default("Field does not have an fieldId.", "MISSING_FIELD_ID", {
|
|
91
|
-
field
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
const value = input[field.fieldId];
|
|
95
|
-
/**
|
|
96
|
-
* We set the default value on create input if value is not defined.
|
|
97
|
-
*/
|
|
98
|
-
acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
|
|
99
|
-
return acc;
|
|
100
|
-
}, {});
|
|
101
|
-
};
|
|
102
|
-
/**
|
|
103
|
-
* Cleans the update input entry data.
|
|
104
|
-
*/
|
|
105
|
-
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
106
|
-
return model.fields.reduce((acc, field) => {
|
|
107
|
-
/**
|
|
108
|
-
* This should never happen, but let's make it sure.
|
|
109
|
-
* The fix would be for the user to add the fieldId on the field definition.
|
|
110
|
-
*/
|
|
111
|
-
if (!field.fieldId) {
|
|
112
|
-
throw new _error.default("Field does not have an fieldId.", "MISSING_FIELD_ID", {
|
|
113
|
-
field
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* We cannot set default value here because user might want to update only certain field values.
|
|
118
|
-
*/
|
|
119
|
-
const value = input[field.fieldId];
|
|
120
|
-
if (value === undefined) {
|
|
121
|
-
return acc;
|
|
122
|
-
}
|
|
123
|
-
acc[field.fieldId] = value;
|
|
124
|
-
return acc;
|
|
125
|
-
}, {});
|
|
126
|
-
};
|
|
127
|
-
/**
|
|
128
|
-
* This method takes original entry meta and new input.
|
|
129
|
-
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
130
|
-
*/
|
|
131
|
-
const createEntryMeta = (input, original) => {
|
|
132
|
-
const meta = (0, _merge.default)(original || {}, input || {});
|
|
133
|
-
return (0, _utils.removeUndefinedValues)((0, _utils.removeNullValues)(meta));
|
|
134
|
-
};
|
|
135
|
-
const createEntryId = input => {
|
|
136
|
-
let entryId = (0, _mdbid.default)();
|
|
137
|
-
if (input.id) {
|
|
138
|
-
if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\-]+)([a-zA-Z0-9])$/) === null) {
|
|
139
|
-
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", {
|
|
140
|
-
id: input.id
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
entryId = input.id;
|
|
144
|
-
}
|
|
145
|
-
const version = 1;
|
|
146
|
-
return {
|
|
147
|
-
entryId,
|
|
148
|
-
version,
|
|
149
|
-
id: (0, _utils.createIdentifier)({
|
|
150
|
-
id: entryId,
|
|
151
|
-
version
|
|
152
|
-
})
|
|
153
|
-
};
|
|
154
|
-
};
|
|
155
|
-
const increaseEntryIdVersion = id => {
|
|
156
|
-
const {
|
|
157
|
-
id: entryId,
|
|
158
|
-
version
|
|
159
|
-
} = (0, _utils.parseIdentifier)(id);
|
|
160
|
-
if (!version) {
|
|
161
|
-
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
162
|
-
id
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
return {
|
|
166
|
-
entryId,
|
|
167
|
-
version: version + 1,
|
|
168
|
-
id: (0, _utils.createIdentifier)({
|
|
169
|
-
id: entryId,
|
|
170
|
-
version: version + 1
|
|
171
|
-
})
|
|
172
|
-
};
|
|
173
|
-
};
|
|
174
|
-
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
175
|
-
const transformEntryStatus = status => {
|
|
176
|
-
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
26
|
+
return ["revisionCreatedOn_DESC"];
|
|
177
27
|
};
|
|
178
28
|
const createContentEntryCrud = params => {
|
|
179
29
|
const {
|
|
180
30
|
storageOperations,
|
|
31
|
+
entriesPermissions,
|
|
32
|
+
modelsPermissions,
|
|
181
33
|
context,
|
|
182
|
-
getIdentity,
|
|
34
|
+
getIdentity: getSecurityIdentity,
|
|
183
35
|
getTenant,
|
|
184
36
|
getLocale
|
|
185
37
|
} = params;
|
|
186
|
-
const getCreatedBy = () => {
|
|
187
|
-
const identity = getIdentity();
|
|
188
|
-
return {
|
|
189
|
-
id: identity.id,
|
|
190
|
-
displayName: identity.displayName,
|
|
191
|
-
type: identity.type
|
|
192
|
-
};
|
|
193
|
-
};
|
|
194
38
|
|
|
195
39
|
/**
|
|
196
40
|
* Create
|
|
@@ -213,6 +57,13 @@ const createContentEntryCrud = params => {
|
|
|
213
57
|
const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
|
|
214
58
|
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
215
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
|
+
|
|
216
67
|
/**
|
|
217
68
|
* Publish
|
|
218
69
|
*/
|
|
@@ -247,6 +98,12 @@ const createContentEntryCrud = params => {
|
|
|
247
98
|
const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
|
|
248
99
|
const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
|
|
249
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");
|
|
250
107
|
|
|
251
108
|
/**
|
|
252
109
|
* Get entry
|
|
@@ -273,56 +130,59 @@ const createContentEntryCrud = params => {
|
|
|
273
130
|
context,
|
|
274
131
|
onEntryAfterDelete
|
|
275
132
|
});
|
|
276
|
-
const checkEntryPermissions = check => {
|
|
277
|
-
return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
|
|
278
|
-
};
|
|
279
133
|
|
|
280
134
|
/**
|
|
281
135
|
* A helper to delete the entire entry.
|
|
282
136
|
*/
|
|
283
137
|
const deleteEntryHelper = async params => {
|
|
284
|
-
|
|
285
|
-
|
|
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,
|
|
286
157
|
model,
|
|
158
|
+
error: ex
|
|
159
|
+
});
|
|
160
|
+
throw new _error.default(ex.message || "Could not delete entry.", ex.code || "DELETE_ERROR", {
|
|
287
161
|
entry
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
await onEntryBeforeDelete.publish({
|
|
291
|
-
entry,
|
|
292
|
-
model
|
|
293
|
-
});
|
|
294
|
-
await storageOperations.entries.delete(model, {
|
|
295
|
-
entry
|
|
296
|
-
});
|
|
297
|
-
await onEntryAfterDelete.publish({
|
|
298
|
-
entry,
|
|
299
|
-
model
|
|
300
|
-
});
|
|
301
|
-
} catch (ex) {
|
|
302
|
-
await onEntryDeleteError.publish({
|
|
303
|
-
entry,
|
|
304
|
-
model,
|
|
305
|
-
error: ex
|
|
306
|
-
});
|
|
307
|
-
throw new _error.default(ex.message || "Could not delete entry.", ex.code || "DELETE_ERROR", {
|
|
308
|
-
entry
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
});
|
|
162
|
+
});
|
|
163
|
+
}
|
|
312
164
|
};
|
|
313
165
|
/**
|
|
314
166
|
* A helper to get entries by revision IDs
|
|
315
167
|
*/
|
|
316
168
|
const getEntriesByIds = async (model, ids) => {
|
|
317
169
|
return context.benchmark.measure("headlessCms.crud.entries.getEntriesByIds", async () => {
|
|
318
|
-
|
|
170
|
+
await entriesPermissions.ensure({
|
|
319
171
|
rwd: "r"
|
|
320
172
|
});
|
|
321
|
-
await
|
|
173
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
174
|
+
model
|
|
175
|
+
});
|
|
322
176
|
const entries = await storageOperations.entries.getByIds(model, {
|
|
323
177
|
ids
|
|
324
178
|
});
|
|
325
|
-
return
|
|
179
|
+
return (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
180
|
+
return entriesPermissions.ensure({
|
|
181
|
+
owns: entry.revisionCreatedBy
|
|
182
|
+
}, {
|
|
183
|
+
throw: false
|
|
184
|
+
});
|
|
185
|
+
});
|
|
326
186
|
});
|
|
327
187
|
};
|
|
328
188
|
const getEntryById = async (model, id) => {
|
|
@@ -340,27 +200,43 @@ const createContentEntryCrud = params => {
|
|
|
340
200
|
return entry;
|
|
341
201
|
};
|
|
342
202
|
const getPublishedEntriesByIds = async (model, ids) => {
|
|
343
|
-
|
|
203
|
+
await entriesPermissions.ensure({
|
|
344
204
|
rwd: "r"
|
|
345
205
|
});
|
|
346
|
-
await
|
|
206
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
207
|
+
model
|
|
208
|
+
});
|
|
347
209
|
const entries = await storageOperations.entries.getPublishedByIds(model, {
|
|
348
210
|
ids
|
|
349
211
|
});
|
|
350
|
-
return
|
|
212
|
+
return (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
213
|
+
return entriesPermissions.ensure({
|
|
214
|
+
owns: entry.revisionCreatedBy
|
|
215
|
+
}, {
|
|
216
|
+
throw: false
|
|
217
|
+
});
|
|
218
|
+
});
|
|
351
219
|
};
|
|
352
220
|
const getLatestEntriesByIds = async (model, ids) => {
|
|
353
|
-
|
|
221
|
+
await entriesPermissions.ensure({
|
|
354
222
|
rwd: "r"
|
|
355
223
|
});
|
|
356
|
-
await
|
|
224
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
225
|
+
model
|
|
226
|
+
});
|
|
357
227
|
const entries = await storageOperations.entries.getLatestByIds(model, {
|
|
358
228
|
ids
|
|
359
229
|
});
|
|
360
|
-
return
|
|
230
|
+
return (0, _filterAsync.filterAsync)(entries, async entry => {
|
|
231
|
+
return entriesPermissions.ensure({
|
|
232
|
+
owns: entry.revisionCreatedBy
|
|
233
|
+
}, {
|
|
234
|
+
throw: false
|
|
235
|
+
});
|
|
236
|
+
});
|
|
361
237
|
};
|
|
362
238
|
const getEntry = async (model, params) => {
|
|
363
|
-
await
|
|
239
|
+
await entriesPermissions.ensure({
|
|
364
240
|
rwd: "r"
|
|
365
241
|
});
|
|
366
242
|
const {
|
|
@@ -388,27 +264,36 @@ const createContentEntryCrud = params => {
|
|
|
388
264
|
});
|
|
389
265
|
};
|
|
390
266
|
const listEntries = async (model, params) => {
|
|
391
|
-
|
|
392
|
-
|
|
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
|
|
393
280
|
});
|
|
394
|
-
await (0, _access.checkModelAccess)(context, model);
|
|
395
281
|
const {
|
|
396
282
|
where: initialWhere,
|
|
397
283
|
limit: initialLimit
|
|
398
284
|
} = params;
|
|
399
285
|
const limit = initialLimit && initialLimit > 0 ? initialLimit : 50;
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
const where = (0, _objectSpread2.default)({}, initialWhere);
|
|
286
|
+
const where = {
|
|
287
|
+
...initialWhere
|
|
288
|
+
};
|
|
404
289
|
/**
|
|
405
290
|
* Possibly only get records which are owned by current user.
|
|
406
291
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
407
292
|
*/
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
where.ownedBy = ownedBy;
|
|
293
|
+
if (await entriesPermissions.canAccessOnlyOwnRecords()) {
|
|
294
|
+
where.createdBy = getSecurityIdentity().id;
|
|
411
295
|
}
|
|
296
|
+
|
|
412
297
|
/**
|
|
413
298
|
* Where must contain either latest or published keys.
|
|
414
299
|
* We cannot list entries without one of those
|
|
@@ -437,11 +322,13 @@ const createContentEntryCrud = params => {
|
|
|
437
322
|
totalCount,
|
|
438
323
|
cursor,
|
|
439
324
|
items
|
|
440
|
-
} = await storageOperations.entries.list(model,
|
|
325
|
+
} = await storageOperations.entries.list(model, {
|
|
326
|
+
...params,
|
|
327
|
+
sort: createSort(params.sort),
|
|
441
328
|
limit,
|
|
442
329
|
where,
|
|
443
330
|
fields
|
|
444
|
-
})
|
|
331
|
+
});
|
|
445
332
|
const meta = {
|
|
446
333
|
hasMoreItems,
|
|
447
334
|
totalCount,
|
|
@@ -465,55 +352,26 @@ const createContentEntryCrud = params => {
|
|
|
465
352
|
});
|
|
466
353
|
}
|
|
467
354
|
};
|
|
468
|
-
const createEntry = async (model,
|
|
469
|
-
await
|
|
355
|
+
const createEntry = async (model, rawInput, options) => {
|
|
356
|
+
await entriesPermissions.ensure({
|
|
470
357
|
rwd: "w"
|
|
471
358
|
});
|
|
472
|
-
await
|
|
473
|
-
|
|
474
|
-
/**
|
|
475
|
-
* Make sure we only work with fields that are defined in the model.
|
|
476
|
-
*/
|
|
477
|
-
const initialInput = mapAndCleanCreateInputData(model, inputData);
|
|
478
|
-
await (0, _entryDataValidation.validateModelEntryData)({
|
|
479
|
-
context,
|
|
480
|
-
model,
|
|
481
|
-
data: initialInput
|
|
359
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
360
|
+
model
|
|
482
361
|
});
|
|
483
|
-
const
|
|
362
|
+
const {
|
|
363
|
+
entry,
|
|
364
|
+
input
|
|
365
|
+
} = await (0, _entryDataFactories.createEntryData)({
|
|
484
366
|
context,
|
|
485
367
|
model,
|
|
486
|
-
|
|
487
|
-
|
|
368
|
+
options,
|
|
369
|
+
rawInput,
|
|
370
|
+
getLocale,
|
|
371
|
+
getTenant,
|
|
372
|
+
getIdentity: getSecurityIdentity,
|
|
373
|
+
entriesPermissions
|
|
488
374
|
});
|
|
489
|
-
const locale = getLocale();
|
|
490
|
-
const owner = getCreatedBy();
|
|
491
|
-
const {
|
|
492
|
-
id,
|
|
493
|
-
entryId,
|
|
494
|
-
version
|
|
495
|
-
} = createEntryId(inputData);
|
|
496
|
-
/**
|
|
497
|
-
* There is a possibility that user sends an ID in the input, so we will use that one.
|
|
498
|
-
* There is no check if the ID is unique or not, that is up to the user.
|
|
499
|
-
*/
|
|
500
|
-
const entry = {
|
|
501
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
502
|
-
tenant: getTenant().id,
|
|
503
|
-
entryId,
|
|
504
|
-
id,
|
|
505
|
-
modelId: model.modelId,
|
|
506
|
-
locale: locale.code,
|
|
507
|
-
createdOn: new Date().toISOString(),
|
|
508
|
-
savedOn: new Date().toISOString(),
|
|
509
|
-
createdBy: owner,
|
|
510
|
-
ownedBy: owner,
|
|
511
|
-
modifiedBy: null,
|
|
512
|
-
version,
|
|
513
|
-
locked: false,
|
|
514
|
-
status: STATUS_DRAFT,
|
|
515
|
-
values: input
|
|
516
|
-
};
|
|
517
375
|
let storageEntry = null;
|
|
518
376
|
try {
|
|
519
377
|
await onEntryBeforeCreate.publish({
|
|
@@ -532,7 +390,7 @@ const createContentEntryCrud = params => {
|
|
|
532
390
|
model,
|
|
533
391
|
input
|
|
534
392
|
});
|
|
535
|
-
return
|
|
393
|
+
return entry;
|
|
536
394
|
} catch (ex) {
|
|
537
395
|
await onEntryCreateError.publish({
|
|
538
396
|
error: ex,
|
|
@@ -548,16 +406,13 @@ const createContentEntryCrud = params => {
|
|
|
548
406
|
});
|
|
549
407
|
}
|
|
550
408
|
};
|
|
551
|
-
const createEntryRevisionFrom = async (model, sourceId,
|
|
552
|
-
|
|
409
|
+
const createEntryRevisionFrom = async (model, sourceId, rawInput, options) => {
|
|
410
|
+
await entriesPermissions.ensure({
|
|
553
411
|
rwd: "w"
|
|
554
412
|
});
|
|
555
|
-
await
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
* Make sure we only work with fields that are defined in the model.
|
|
559
|
-
*/
|
|
560
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
413
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
414
|
+
model
|
|
415
|
+
});
|
|
561
416
|
|
|
562
417
|
/**
|
|
563
418
|
* Entries are identified by a common parent ID + Revision number.
|
|
@@ -574,46 +429,31 @@ const createContentEntryCrud = params => {
|
|
|
574
429
|
if (!originalStorageEntry) {
|
|
575
430
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
576
431
|
}
|
|
432
|
+
if (!latestStorageEntry) {
|
|
433
|
+
throw new _handlerGraphql.NotFoundError(`Latest entry "${uniqueId}" of model "${model.modelId}" was not found.`);
|
|
434
|
+
}
|
|
577
435
|
|
|
578
436
|
/**
|
|
579
437
|
* We need to convert data from DB to its original form before using it further.
|
|
580
438
|
*/
|
|
581
439
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
context,
|
|
585
|
-
model,
|
|
586
|
-
data: initialValues,
|
|
587
|
-
entry: originalEntry
|
|
440
|
+
await entriesPermissions.ensure({
|
|
441
|
+
owns: originalEntry.createdBy
|
|
588
442
|
});
|
|
589
|
-
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
590
|
-
context,
|
|
591
|
-
model,
|
|
592
|
-
input: initialValues,
|
|
593
|
-
validateEntries: false
|
|
594
|
-
});
|
|
595
|
-
(0, _ownership.checkOwnership)(context, permission, originalEntry);
|
|
596
|
-
const identity = getIdentity();
|
|
597
|
-
const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;
|
|
598
443
|
const {
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
} =
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
modifiedBy: null,
|
|
613
|
-
locked: false,
|
|
614
|
-
publishedOn: undefined,
|
|
615
|
-
status: STATUS_DRAFT,
|
|
616
|
-
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
|
|
617
457
|
});
|
|
618
458
|
let storageEntry = null;
|
|
619
459
|
try {
|
|
@@ -635,7 +475,7 @@ const createContentEntryCrud = params => {
|
|
|
635
475
|
original: originalEntry,
|
|
636
476
|
storageEntry: result
|
|
637
477
|
});
|
|
638
|
-
return
|
|
478
|
+
return entry;
|
|
639
479
|
} catch (ex) {
|
|
640
480
|
await onEntryCreateRevisionError.publish({
|
|
641
481
|
entry,
|
|
@@ -653,16 +493,13 @@ const createContentEntryCrud = params => {
|
|
|
653
493
|
});
|
|
654
494
|
}
|
|
655
495
|
};
|
|
656
|
-
const updateEntry = async (model, id,
|
|
657
|
-
|
|
496
|
+
const updateEntry = async (model, id, rawInput, metaInput, options) => {
|
|
497
|
+
await entriesPermissions.ensure({
|
|
658
498
|
rwd: "w"
|
|
659
499
|
});
|
|
660
|
-
await
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
* Make sure we only work with fields that are defined in the model.
|
|
664
|
-
*/
|
|
665
|
-
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
500
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
501
|
+
model
|
|
502
|
+
});
|
|
666
503
|
|
|
667
504
|
/**
|
|
668
505
|
* The entry we are going to update.
|
|
@@ -677,33 +514,22 @@ const createContentEntryCrud = params => {
|
|
|
677
514
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
678
515
|
}
|
|
679
516
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
680
|
-
await
|
|
681
|
-
|
|
682
|
-
model,
|
|
683
|
-
data: input,
|
|
684
|
-
entry: originalEntry
|
|
517
|
+
await entriesPermissions.ensure({
|
|
518
|
+
owns: originalEntry.revisionCreatedBy
|
|
685
519
|
});
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
520
|
+
const {
|
|
521
|
+
entry,
|
|
522
|
+
input
|
|
523
|
+
} = await (0, _entryDataFactories.createUpdateEntryData)({
|
|
690
524
|
model,
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
* We always send the full entry to the hooks and storage operations update.
|
|
700
|
-
*/
|
|
701
|
-
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
702
|
-
savedOn: new Date().toISOString(),
|
|
703
|
-
modifiedBy: getCreatedBy(),
|
|
704
|
-
values,
|
|
705
|
-
meta,
|
|
706
|
-
status: transformEntryStatus(originalEntry.status)
|
|
525
|
+
rawInput,
|
|
526
|
+
options,
|
|
527
|
+
context,
|
|
528
|
+
getIdentity: getSecurityIdentity,
|
|
529
|
+
getTenant,
|
|
530
|
+
getLocale,
|
|
531
|
+
originalEntry,
|
|
532
|
+
metaInput
|
|
707
533
|
});
|
|
708
534
|
let storageEntry = null;
|
|
709
535
|
try {
|
|
@@ -725,7 +551,7 @@ const createContentEntryCrud = params => {
|
|
|
725
551
|
input,
|
|
726
552
|
original: originalEntry
|
|
727
553
|
});
|
|
728
|
-
return
|
|
554
|
+
return entry;
|
|
729
555
|
} catch (ex) {
|
|
730
556
|
await onEntryUpdateError.publish({
|
|
731
557
|
entry,
|
|
@@ -742,40 +568,109 @@ const createContentEntryCrud = params => {
|
|
|
742
568
|
});
|
|
743
569
|
}
|
|
744
570
|
};
|
|
745
|
-
const
|
|
746
|
-
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({
|
|
747
602
|
rwd: "w"
|
|
748
603
|
});
|
|
749
|
-
await
|
|
604
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
605
|
+
model
|
|
606
|
+
});
|
|
750
607
|
/**
|
|
751
|
-
*
|
|
608
|
+
* The entry we are going to move to another folder.
|
|
752
609
|
*/
|
|
753
610
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
754
611
|
id
|
|
755
612
|
});
|
|
756
613
|
if (!originalStorageEntry) {
|
|
757
|
-
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found
|
|
614
|
+
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
758
615
|
}
|
|
759
|
-
const
|
|
616
|
+
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
760
617
|
/**
|
|
761
|
-
*
|
|
618
|
+
* No need to continue if the entry is already in the requested folder.
|
|
762
619
|
*/
|
|
763
|
-
if (
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
620
|
+
if (entry.location?.folderId === folderId) {
|
|
621
|
+
return entry;
|
|
622
|
+
}
|
|
623
|
+
try {
|
|
624
|
+
await onEntryBeforeMove.publish({
|
|
625
|
+
entry,
|
|
626
|
+
model,
|
|
627
|
+
folderId
|
|
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
|
|
767
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!`);
|
|
768
665
|
}
|
|
769
|
-
const
|
|
666
|
+
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
667
|
+
const {
|
|
668
|
+
entry
|
|
669
|
+
} = await (0, _entryDataFactories.createRepublishEntryData)({
|
|
770
670
|
context,
|
|
771
671
|
model,
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
});
|
|
775
|
-
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
776
|
-
savedOn: new Date().toISOString(),
|
|
777
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
778
|
-
values
|
|
672
|
+
originalEntry,
|
|
673
|
+
getIdentity: getSecurityIdentity
|
|
779
674
|
});
|
|
780
675
|
const storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
781
676
|
/**
|
|
@@ -806,9 +701,9 @@ const createContentEntryCrud = params => {
|
|
|
806
701
|
await onEntryAfterRepublish.publish({
|
|
807
702
|
entry,
|
|
808
703
|
model,
|
|
809
|
-
storageEntry
|
|
704
|
+
storageEntry: result
|
|
810
705
|
});
|
|
811
|
-
return
|
|
706
|
+
return entry;
|
|
812
707
|
} catch (ex) {
|
|
813
708
|
await onEntryRepublishError.publish({
|
|
814
709
|
entry,
|
|
@@ -821,10 +716,12 @@ const createContentEntryCrud = params => {
|
|
|
821
716
|
}
|
|
822
717
|
};
|
|
823
718
|
const deleteEntryRevision = async (model, revisionId) => {
|
|
824
|
-
|
|
719
|
+
await entriesPermissions.ensure({
|
|
825
720
|
rwd: "d"
|
|
826
721
|
});
|
|
827
|
-
await
|
|
722
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
723
|
+
model
|
|
724
|
+
});
|
|
828
725
|
const {
|
|
829
726
|
id: entryId,
|
|
830
727
|
version
|
|
@@ -835,34 +732,54 @@ const createContentEntryCrud = params => {
|
|
|
835
732
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
836
733
|
id: entryId
|
|
837
734
|
});
|
|
838
|
-
const
|
|
735
|
+
const storagePreviousEntry = await storageOperations.entries.getPreviousRevision(model, {
|
|
839
736
|
entryId,
|
|
840
737
|
version: version
|
|
841
738
|
});
|
|
842
739
|
if (!storageEntryToDelete) {
|
|
843
740
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
844
741
|
}
|
|
845
|
-
|
|
742
|
+
await entriesPermissions.ensure({
|
|
743
|
+
owns: storageEntryToDelete.revisionCreatedBy
|
|
744
|
+
});
|
|
846
745
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
847
746
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
747
|
+
|
|
848
748
|
/**
|
|
849
|
-
* If targeted record is the latest entry record and there is no previous one, we need
|
|
850
|
-
*
|
|
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.
|
|
851
751
|
*/
|
|
852
|
-
if (entryToDelete.id === latestEntryRevisionId && !
|
|
752
|
+
if (entryToDelete.id === latestEntryRevisionId && !storagePreviousEntry) {
|
|
853
753
|
return await deleteEntryHelper({
|
|
854
754
|
model,
|
|
855
755
|
entry: entryToDelete
|
|
856
756
|
});
|
|
857
757
|
}
|
|
858
758
|
/**
|
|
859
|
-
* 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.
|
|
860
760
|
*/
|
|
861
761
|
let entryToSetAsLatest = null;
|
|
862
762
|
let storageEntryToSetAsLatest = null;
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
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
|
+
};
|
|
866
783
|
}
|
|
867
784
|
try {
|
|
868
785
|
await onEntryRevisionBeforeDelete.publish({
|
|
@@ -872,8 +789,8 @@ const createContentEntryCrud = params => {
|
|
|
872
789
|
await storageOperations.entries.deleteRevision(model, {
|
|
873
790
|
entry: entryToDelete,
|
|
874
791
|
storageEntry: storageEntryToDelete,
|
|
875
|
-
latestEntry:
|
|
876
|
-
latestStorageEntry:
|
|
792
|
+
latestEntry: updatedEntryToSetAsLatest,
|
|
793
|
+
latestStorageEntry: storageUpdatedEntryToSetAsLatest
|
|
877
794
|
});
|
|
878
795
|
await onEntryRevisionAfterDelete.publish({
|
|
879
796
|
entry: entryToDelete,
|
|
@@ -889,23 +806,127 @@ const createContentEntryCrud = params => {
|
|
|
889
806
|
error: ex,
|
|
890
807
|
entry: entryToDelete,
|
|
891
808
|
storageEntry: storageEntryToDelete,
|
|
892
|
-
latestEntry:
|
|
893
|
-
latestStorageEntry:
|
|
809
|
+
latestEntry: updatedEntryToSetAsLatest,
|
|
810
|
+
latestStorageEntry: storageUpdatedEntryToSetAsLatest
|
|
894
811
|
});
|
|
895
812
|
}
|
|
896
813
|
};
|
|
897
|
-
const
|
|
898
|
-
const
|
|
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({
|
|
899
833
|
rwd: "d"
|
|
900
834
|
});
|
|
901
|
-
await
|
|
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
|
|
886
|
+
});
|
|
887
|
+
}
|
|
888
|
+
};
|
|
889
|
+
const deleteEntry = async (model, id, options) => {
|
|
890
|
+
await entriesPermissions.ensure({
|
|
891
|
+
rwd: "d"
|
|
892
|
+
});
|
|
893
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
894
|
+
model
|
|
895
|
+
});
|
|
896
|
+
const {
|
|
897
|
+
force
|
|
898
|
+
} = options || {};
|
|
902
899
|
const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
903
|
-
id
|
|
900
|
+
id
|
|
904
901
|
});
|
|
905
|
-
|
|
906
|
-
|
|
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
|
+
});
|
|
907
926
|
}
|
|
908
|
-
|
|
927
|
+
await entriesPermissions.ensure({
|
|
928
|
+
owns: storageEntry.createdBy
|
|
929
|
+
});
|
|
909
930
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
910
931
|
return await deleteEntryHelper({
|
|
911
932
|
model,
|
|
@@ -913,28 +934,44 @@ const createContentEntryCrud = params => {
|
|
|
913
934
|
});
|
|
914
935
|
};
|
|
915
936
|
const publishEntry = async (model, id) => {
|
|
916
|
-
|
|
937
|
+
await entriesPermissions.ensure({
|
|
917
938
|
pw: "p"
|
|
918
939
|
});
|
|
919
|
-
await
|
|
940
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
941
|
+
model
|
|
942
|
+
});
|
|
920
943
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
921
944
|
id
|
|
922
945
|
});
|
|
923
946
|
if (!originalStorageEntry) {
|
|
924
947
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
925
948
|
}
|
|
926
|
-
|
|
949
|
+
await entriesPermissions.ensure({
|
|
950
|
+
owns: originalStorageEntry.revisionCreatedBy
|
|
951
|
+
});
|
|
927
952
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
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
|
|
934
970
|
});
|
|
935
971
|
let storageEntry = null;
|
|
936
972
|
try {
|
|
937
973
|
await onEntryBeforePublish.publish({
|
|
974
|
+
original: originalEntry,
|
|
938
975
|
entry,
|
|
939
976
|
model
|
|
940
977
|
});
|
|
@@ -944,13 +981,15 @@ const createContentEntryCrud = params => {
|
|
|
944
981
|
storageEntry
|
|
945
982
|
});
|
|
946
983
|
await onEntryAfterPublish.publish({
|
|
984
|
+
original: originalEntry,
|
|
947
985
|
entry,
|
|
948
986
|
storageEntry: result,
|
|
949
987
|
model
|
|
950
988
|
});
|
|
951
|
-
return
|
|
989
|
+
return entry;
|
|
952
990
|
} catch (ex) {
|
|
953
991
|
await onEntryPublishError.publish({
|
|
992
|
+
original: originalEntry,
|
|
954
993
|
entry,
|
|
955
994
|
model,
|
|
956
995
|
error: ex
|
|
@@ -965,7 +1004,7 @@ const createContentEntryCrud = params => {
|
|
|
965
1004
|
}
|
|
966
1005
|
};
|
|
967
1006
|
const unpublishEntry = async (model, id) => {
|
|
968
|
-
|
|
1007
|
+
await entriesPermissions.ensure({
|
|
969
1008
|
pw: "u"
|
|
970
1009
|
});
|
|
971
1010
|
const {
|
|
@@ -982,10 +1021,17 @@ const createContentEntryCrud = params => {
|
|
|
982
1021
|
entry: originalStorageEntry
|
|
983
1022
|
});
|
|
984
1023
|
}
|
|
985
|
-
|
|
1024
|
+
await entriesPermissions.ensure({
|
|
1025
|
+
owns: originalStorageEntry.revisionCreatedBy
|
|
1026
|
+
});
|
|
986
1027
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
987
|
-
const
|
|
988
|
-
|
|
1028
|
+
const {
|
|
1029
|
+
entry
|
|
1030
|
+
} = await (0, _entryDataFactories.createUnpublishEntryData)({
|
|
1031
|
+
context,
|
|
1032
|
+
model,
|
|
1033
|
+
originalEntry,
|
|
1034
|
+
getIdentity: getSecurityIdentity
|
|
989
1035
|
});
|
|
990
1036
|
let storageEntry = null;
|
|
991
1037
|
try {
|
|
@@ -1003,7 +1049,7 @@ const createContentEntryCrud = params => {
|
|
|
1003
1049
|
storageEntry: result,
|
|
1004
1050
|
model
|
|
1005
1051
|
});
|
|
1006
|
-
return
|
|
1052
|
+
return entry;
|
|
1007
1053
|
} catch (ex) {
|
|
1008
1054
|
await onEntryUnpublishError.publish({
|
|
1009
1055
|
entry,
|
|
@@ -1018,73 +1064,97 @@ const createContentEntryCrud = params => {
|
|
|
1018
1064
|
});
|
|
1019
1065
|
}
|
|
1020
1066
|
};
|
|
1021
|
-
|
|
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
|
+
};
|
|
1022
1081
|
/**
|
|
1023
|
-
*
|
|
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.
|
|
1024
1084
|
*/
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
onBeforeEntryUpdate: onEntryBeforeUpdate,
|
|
1030
|
-
onAfterEntryUpdate: onEntryAfterUpdate,
|
|
1031
|
-
onBeforeEntryDelete: onEntryBeforeDelete,
|
|
1032
|
-
onAfterEntryDelete: onEntryAfterDelete,
|
|
1033
|
-
onBeforeEntryDeleteRevision: onEntryRevisionBeforeDelete,
|
|
1034
|
-
onAfterEntryDeleteRevision: onEntryRevisionAfterDelete,
|
|
1035
|
-
onBeforeEntryPublish: onEntryBeforePublish,
|
|
1036
|
-
onAfterEntryPublish: onEntryAfterPublish,
|
|
1037
|
-
onBeforeEntryUnpublish: onEntryBeforeUnpublish,
|
|
1038
|
-
onAfterEntryUnpublish: onEntryAfterUnpublish,
|
|
1039
|
-
onBeforeEntryGet: onEntryBeforeGet,
|
|
1040
|
-
onBeforeEntryList: onEntryBeforeList,
|
|
1085
|
+
if (await entriesPermissions.canAccessOnlyOwnRecords()) {
|
|
1086
|
+
where.createdBy = getSecurityIdentity().id;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1041
1089
|
/**
|
|
1042
|
-
*
|
|
1043
|
-
*
|
|
1044
|
-
|
|
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.
|
|
1045
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 {
|
|
1046
1134
|
onEntryBeforeCreate,
|
|
1047
1135
|
onEntryAfterCreate,
|
|
1048
1136
|
onEntryCreateError,
|
|
1049
|
-
/**
|
|
1050
|
-
* Create revision
|
|
1051
|
-
*/
|
|
1052
1137
|
onEntryRevisionBeforeCreate: onEntryBeforeCreateRevision,
|
|
1053
1138
|
onEntryRevisionAfterCreate,
|
|
1054
1139
|
onEntryRevisionCreateError: onEntryCreateRevisionError,
|
|
1055
|
-
/**
|
|
1056
|
-
* Update
|
|
1057
|
-
*/
|
|
1058
1140
|
onEntryBeforeUpdate,
|
|
1059
1141
|
onEntryAfterUpdate,
|
|
1060
1142
|
onEntryUpdateError,
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1143
|
+
onEntryBeforeMove,
|
|
1144
|
+
onEntryAfterMove,
|
|
1145
|
+
onEntryMoveError,
|
|
1064
1146
|
onEntryBeforeDelete,
|
|
1065
1147
|
onEntryAfterDelete,
|
|
1066
1148
|
onEntryDeleteError,
|
|
1067
|
-
/**
|
|
1068
|
-
* Delete entry revision
|
|
1069
|
-
*/
|
|
1070
1149
|
onEntryRevisionBeforeDelete,
|
|
1071
1150
|
onEntryRevisionAfterDelete,
|
|
1072
1151
|
onEntryRevisionDeleteError,
|
|
1073
|
-
/**
|
|
1074
|
-
* Publish
|
|
1075
|
-
*/
|
|
1076
1152
|
onEntryBeforePublish,
|
|
1077
1153
|
onEntryAfterPublish,
|
|
1078
1154
|
onEntryPublishError,
|
|
1079
|
-
/**
|
|
1080
|
-
* Republish
|
|
1081
|
-
*/
|
|
1082
1155
|
onEntryBeforeRepublish,
|
|
1083
1156
|
onEntryAfterRepublish,
|
|
1084
1157
|
onEntryRepublishError,
|
|
1085
|
-
/**
|
|
1086
|
-
* Unpublish
|
|
1087
|
-
*/
|
|
1088
1158
|
onEntryBeforeUnpublish,
|
|
1089
1159
|
onEntryAfterUnpublish,
|
|
1090
1160
|
onEntryUnpublishError,
|
|
@@ -1144,38 +1214,50 @@ const createContentEntryCrud = params => {
|
|
|
1144
1214
|
});
|
|
1145
1215
|
},
|
|
1146
1216
|
async listLatestEntries(model, params) {
|
|
1147
|
-
const where =
|
|
1148
|
-
return this.listEntries(model,
|
|
1149
|
-
sort: ["createdOn_DESC"]
|
|
1150
|
-
|
|
1151
|
-
where:
|
|
1217
|
+
const where = params?.where || {};
|
|
1218
|
+
return this.listEntries(model, {
|
|
1219
|
+
sort: ["createdOn_DESC"],
|
|
1220
|
+
...(params || {}),
|
|
1221
|
+
where: {
|
|
1222
|
+
...where,
|
|
1152
1223
|
latest: true
|
|
1153
|
-
}
|
|
1154
|
-
})
|
|
1224
|
+
}
|
|
1225
|
+
});
|
|
1155
1226
|
},
|
|
1156
1227
|
async listPublishedEntries(model, params) {
|
|
1157
|
-
const where =
|
|
1158
|
-
return this.listEntries(model,
|
|
1159
|
-
sort: ["createdOn_DESC"]
|
|
1160
|
-
|
|
1161
|
-
where:
|
|
1228
|
+
const where = params?.where || {};
|
|
1229
|
+
return this.listEntries(model, {
|
|
1230
|
+
sort: ["createdOn_DESC"],
|
|
1231
|
+
...(params || {}),
|
|
1232
|
+
where: {
|
|
1233
|
+
...where,
|
|
1162
1234
|
published: true
|
|
1163
|
-
}
|
|
1164
|
-
})
|
|
1235
|
+
}
|
|
1236
|
+
});
|
|
1165
1237
|
},
|
|
1166
|
-
async createEntry(model, input) {
|
|
1238
|
+
async createEntry(model, input, options) {
|
|
1167
1239
|
return context.benchmark.measure("headlessCms.crud.entries.createEntry", async () => {
|
|
1168
|
-
return createEntry(model, input);
|
|
1240
|
+
return createEntry(model, input, options);
|
|
1169
1241
|
});
|
|
1170
1242
|
},
|
|
1171
|
-
async createEntryRevisionFrom(model, sourceId, input) {
|
|
1243
|
+
async createEntryRevisionFrom(model, sourceId, input, options) {
|
|
1172
1244
|
return context.benchmark.measure("headlessCms.crud.entries.createEntryRevisionFrom", async () => {
|
|
1173
|
-
return createEntryRevisionFrom(model, sourceId, input);
|
|
1245
|
+
return createEntryRevisionFrom(model, sourceId, input, options);
|
|
1174
1246
|
});
|
|
1175
1247
|
},
|
|
1176
|
-
async updateEntry(model, id, input, meta) {
|
|
1248
|
+
async updateEntry(model, id, input, meta, options) {
|
|
1177
1249
|
return context.benchmark.measure("headlessCms.crud.entries.updateEntry", async () => {
|
|
1178
|
-
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);
|
|
1179
1261
|
});
|
|
1180
1262
|
},
|
|
1181
1263
|
/**
|
|
@@ -1192,9 +1274,14 @@ const createContentEntryCrud = params => {
|
|
|
1192
1274
|
return deleteEntryRevision(model, id);
|
|
1193
1275
|
});
|
|
1194
1276
|
},
|
|
1195
|
-
async deleteEntry(model, entryId) {
|
|
1277
|
+
async deleteEntry(model, entryId, options) {
|
|
1196
1278
|
return context.benchmark.measure("headlessCms.crud.entries.deleteEntry", async () => {
|
|
1197
|
-
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);
|
|
1198
1285
|
});
|
|
1199
1286
|
},
|
|
1200
1287
|
async publishEntry(model, id) {
|
|
@@ -1206,7 +1293,14 @@ const createContentEntryCrud = params => {
|
|
|
1206
1293
|
return context.benchmark.measure("headlessCms.crud.entries.unpublishEntry", async () => {
|
|
1207
1294
|
return unpublishEntry(model, id);
|
|
1208
1295
|
});
|
|
1296
|
+
},
|
|
1297
|
+
async getUniqueFieldValues(model, params) {
|
|
1298
|
+
return context.benchmark.measure("headlessCms.crud.entries.getUniqueFieldValues", async () => {
|
|
1299
|
+
return getUniqueFieldValues(model, params);
|
|
1300
|
+
});
|
|
1209
1301
|
}
|
|
1210
1302
|
};
|
|
1211
1303
|
};
|
|
1212
|
-
exports.createContentEntryCrud = createContentEntryCrud;
|
|
1304
|
+
exports.createContentEntryCrud = createContentEntryCrud;
|
|
1305
|
+
|
|
1306
|
+
//# sourceMappingURL=contentEntry.crud.js.map
|