@webiny/api-headless-cms 0.0.0-unstable.d7f521b032 → 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 +88 -47
- 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.d.ts +1 -1
- package/crud/contentEntry/markLockedFields.js +20 -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 +9 -5
- package/crud/contentEntry.crud.js +1093 -981
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/beforeCreate.d.ts +1 -1
- package/crud/contentModel/beforeCreate.js +50 -85
- 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 +31 -6
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/compatibility/modelApiName.d.ts +3 -0
- package/crud/contentModel/compatibility/modelApiName.js +26 -0
- package/crud/contentModel/compatibility/modelApiName.js.map +1 -0
- 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.d.ts +5 -0
- package/crud/contentModel/defaultFields.js +60 -0
- package/crud/contentModel/defaultFields.js.map +1 -0
- 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.d.ts +2 -0
- package/crud/contentModel/fields/descriptionField.js +44 -0
- package/crud/contentModel/fields/descriptionField.js.map +1 -0
- package/crud/contentModel/fields/imageField.d.ts +2 -0
- package/crud/contentModel/fields/imageField.js +44 -0
- package/crud/contentModel/fields/imageField.js.map +1 -0
- package/crud/contentModel/fields/titleField.d.ts +2 -0
- package/crud/contentModel/fields/titleField.js +60 -0
- package/crud/contentModel/fields/titleField.js.map +1 -0
- 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.d.ts +6 -0
- package/crud/contentModel/validate/endingAllowed.js +28 -0
- package/crud/contentModel/validate/endingAllowed.js.map +1 -0
- package/crud/contentModel/validate/isModelEndingAllowed.d.ts +6 -0
- package/crud/contentModel/validate/isModelEndingAllowed.js +26 -0
- package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -0
- package/crud/contentModel/validate/modelId.d.ts +11 -0
- package/crud/contentModel/validate/modelId.js +38 -0
- package/crud/contentModel/validate/modelId.js.map +1 -0
- package/crud/contentModel/validate/pluralApiName.d.ts +7 -0
- package/crud/contentModel/validate/pluralApiName.js +26 -0
- package/crud/contentModel/validate/pluralApiName.js.map +1 -0
- package/crud/contentModel/validate/singularApiName.d.ts +7 -0
- package/crud/contentModel/validate/singularApiName.js +26 -0
- package/crud/contentModel/validate/singularApiName.js.map +1 -0
- package/crud/contentModel/validateModel.d.ts +1 -0
- package/crud/contentModel/validateModel.js +3 -1
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.d.ts +2 -1
- package/crud/contentModel/validateModelFields.js +27 -64
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +595 -200
- package/crud/contentModel/validation.js +125 -17
- package/crud/contentModel/validation.js.map +1 -1
- package/crud/contentModel.crud.d.ts +2 -0
- package/crud/contentModel.crud.js +437 -411
- 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 +272 -228
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/system.crud.js +8 -71
- 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.d.ts +2 -3
- 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 +9 -146
- 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 +10 -15
- 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 +134 -59
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.js +12 -9
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +33 -14
- 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 +60 -27
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +1 -0
- package/graphql/schema/createManageSDL.js +116 -69
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +10 -13
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +11 -14
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.d.ts +1 -0
- package/graphql/schema/createReadSDL.js +51 -38
- 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 +10 -17
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.d.ts +2 -5
- package/graphql/system.js +4 -28
- 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 +86 -28
- 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 +33 -34
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +68 -28
- 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 +5 -2
- package/index.js +44 -6
- 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 -40
- 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 +25 -5
- package/plugins/CmsModelPlugin.js +75 -20
- 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 +510 -334
- package/types.js +21 -21
- 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 +34 -21
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +1 -0
- package/utils/createTypeFromFields.js +14 -7
- 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 +2 -0
- package/utils/getEntryDescription.js +19 -0
- package/utils/getEntryDescription.js.map +1 -0
- package/utils/getEntryImage.d.ts +2 -0
- package/utils/getEntryImage.js +19 -0
- package/utils/getEntryImage.js.map +1 -0
- 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.d.ts +5 -0
- package/utils/incrementEntryIdVersion.js +31 -0
- package/utils/incrementEntryIdVersion.js.map +1 -0
- 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 +4 -2
- package/utils/renderFields.js +13 -3
- 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 +4 -2
- package/utils/renderInputFields.js +20 -6
- 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 -71
- package/crud/settings.crud.js.map +0 -1
- package/graphql/schema/resolvers/commonFieldResolvers.d.ts +0 -6
- package/graphql/schema/resolvers/commonFieldResolvers.js +0 -12
- 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 -159
- package/upgrades/5.33.0/index.js.map +0 -1
- package/upgrades/index.d.ts +0 -1
- package/upgrades/index.js +0 -9
- 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 -20
- 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
|
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.createModelsCrud = void 0;
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
-
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
10
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
11
9
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
12
10
|
var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
|
|
@@ -14,58 +12,29 @@ var _pubsub = require("@webiny/pubsub");
|
|
|
14
12
|
var _beforeCreate = require("./contentModel/beforeCreate");
|
|
15
13
|
var _beforeUpdate = require("./contentModel/beforeUpdate");
|
|
16
14
|
var _beforeDelete = require("./contentModel/beforeDelete");
|
|
17
|
-
var _afterCreate = require("./contentModel/afterCreate");
|
|
18
|
-
var _afterUpdate = require("./contentModel/afterUpdate");
|
|
19
|
-
var _afterDelete = require("./contentModel/afterDelete");
|
|
20
|
-
var _afterCreateFrom = require("./contentModel/afterCreateFrom");
|
|
21
15
|
var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
|
|
22
|
-
var _permissions = require("../utils/permissions");
|
|
23
|
-
var _filterAsync = require("../utils/filterAsync");
|
|
24
|
-
var _ownership = require("../utils/ownership");
|
|
25
|
-
var _access = require("../utils/access");
|
|
26
16
|
var _validation = require("./contentModel/validation");
|
|
27
17
|
var _utils = require("@webiny/utils");
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// If `type` tag is not set, set it to a default one (`model`).
|
|
34
|
-
const tags = model.tags || [];
|
|
35
|
-
if (!tags.some(tag => tag.startsWith("type:"))) {
|
|
36
|
-
tags.push("type:model");
|
|
37
|
-
}
|
|
38
|
-
return tags;
|
|
39
|
-
};
|
|
18
|
+
var _defaultFields = require("./contentModel/defaultFields");
|
|
19
|
+
var _utils2 = require("../utils");
|
|
20
|
+
var _ensureTypeTag = require("./contentModel/ensureTypeTag");
|
|
21
|
+
var _listModelsFromDatabase = require("./contentModel/listModelsFromDatabase");
|
|
22
|
+
var _filterAsync = require("../utils/filterAsync");
|
|
40
23
|
const createModelsCrud = params => {
|
|
41
24
|
const {
|
|
42
25
|
getTenant,
|
|
43
26
|
getIdentity,
|
|
44
27
|
getLocale,
|
|
45
28
|
storageOperations,
|
|
29
|
+
modelsPermissions,
|
|
46
30
|
context
|
|
47
31
|
} = params;
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
where: {
|
|
52
|
-
tenant: getTenant().id,
|
|
53
|
-
locale: getLocale().code
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
return [models.map(model => {
|
|
57
|
-
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
58
|
-
tags: ensureTypeTag(model),
|
|
59
|
-
tenant: model.tenant || getTenant().id,
|
|
60
|
-
locale: model.locale || getLocale().code
|
|
61
|
-
});
|
|
62
|
-
})];
|
|
63
|
-
})
|
|
64
|
-
};
|
|
32
|
+
const listPluginModelsCache = (0, _utils2.createMemoryCache)();
|
|
33
|
+
const listFilteredModelsCache = (0, _utils2.createMemoryCache)();
|
|
34
|
+
const listDatabaseModelsCache = (0, _utils2.createMemoryCache)();
|
|
65
35
|
const clearModelsCache = () => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
36
|
+
listDatabaseModelsCache.clear();
|
|
37
|
+
listFilteredModelsCache.clear();
|
|
69
38
|
};
|
|
70
39
|
const managers = new Map();
|
|
71
40
|
const updateManager = async (context, model) => {
|
|
@@ -73,89 +42,135 @@ const createModelsCrud = params => {
|
|
|
73
42
|
managers.set(model.modelId, manager);
|
|
74
43
|
return manager;
|
|
75
44
|
};
|
|
76
|
-
const checkModelPermissions =
|
|
77
|
-
return
|
|
78
|
-
rwd
|
|
45
|
+
const checkModelPermissions = async rwd => {
|
|
46
|
+
return modelsPermissions.ensure({
|
|
47
|
+
rwd
|
|
79
48
|
});
|
|
80
49
|
};
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
* We need to filter out models that are not for this tenant or locale.
|
|
87
|
-
* If it does not have tenant or locale define, it is for every locale and tenant
|
|
88
|
-
*/.filter(plugin => {
|
|
89
|
-
const {
|
|
90
|
-
tenant: modelTenant,
|
|
91
|
-
locale: modelLocale
|
|
92
|
-
} = plugin.contentModel;
|
|
93
|
-
if (modelTenant && modelTenant !== tenant) {
|
|
94
|
-
return false;
|
|
95
|
-
} else if (modelLocale && modelLocale !== locale) {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
return true;
|
|
99
|
-
}).map(plugin => {
|
|
100
|
-
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
|
|
101
|
-
tags: ensureTypeTag(plugin.contentModel),
|
|
102
|
-
tenant,
|
|
103
|
-
locale,
|
|
104
|
-
webinyVersion: context.WEBINY_VERSION
|
|
105
|
-
});
|
|
50
|
+
const filterModel = async model => {
|
|
51
|
+
const ownsModel = await modelsPermissions.ensure({
|
|
52
|
+
owns: model.createdBy
|
|
53
|
+
}, {
|
|
54
|
+
throw: false
|
|
106
55
|
});
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);
|
|
110
|
-
if (pluginModel) {
|
|
111
|
-
return pluginModel;
|
|
56
|
+
if (!ownsModel) {
|
|
57
|
+
return false;
|
|
112
58
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
59
|
+
return modelsPermissions.canAccessModel({
|
|
60
|
+
model
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
const listPluginModels = async (tenant, locale) => {
|
|
64
|
+
const modelPlugins = context.plugins.byType(_CmsModelPlugin.CmsModelPlugin.type);
|
|
65
|
+
const cacheKey = (0, _utils2.createCacheKey)({
|
|
66
|
+
tenant,
|
|
67
|
+
locale,
|
|
68
|
+
models: modelPlugins.map(({
|
|
69
|
+
contentModel: model
|
|
70
|
+
}) => {
|
|
71
|
+
return `${model.modelId}#${model.pluralApiName}#${model.singularApiName}#${model.savedOn || "unknown"}`;
|
|
72
|
+
}).join("/"),
|
|
73
|
+
identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined
|
|
74
|
+
});
|
|
75
|
+
return listPluginModelsCache.getOrSet(cacheKey, async () => {
|
|
76
|
+
const models = modelPlugins
|
|
77
|
+
/**
|
|
78
|
+
* We need to filter out models that are not for this tenant or locale.
|
|
79
|
+
* If it does not have tenant or locale define, it is for every locale and tenant
|
|
80
|
+
*/.filter(plugin => {
|
|
81
|
+
const {
|
|
82
|
+
tenant: modelTenant,
|
|
83
|
+
locale: modelLocale
|
|
84
|
+
} = plugin.contentModel;
|
|
85
|
+
if (modelTenant && modelTenant !== tenant) {
|
|
86
|
+
return false;
|
|
87
|
+
} else if (modelLocale && modelLocale !== locale) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
}).map(plugin => {
|
|
92
|
+
return {
|
|
93
|
+
...plugin.contentModel,
|
|
94
|
+
tags: (0, _ensureTypeTag.ensureTypeTag)(plugin.contentModel),
|
|
95
|
+
tenant,
|
|
96
|
+
locale,
|
|
97
|
+
webinyVersion: context.WEBINY_VERSION
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
return (0, _filterAsync.filterAsync)(models, filterModel);
|
|
117
101
|
});
|
|
102
|
+
};
|
|
103
|
+
const getModelFromCache = async modelId => {
|
|
104
|
+
const models = await listModels();
|
|
105
|
+
const model = models.find(m => m.modelId === modelId);
|
|
118
106
|
if (!model) {
|
|
119
107
|
throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
|
|
120
108
|
}
|
|
121
|
-
return
|
|
122
|
-
|
|
109
|
+
return {
|
|
110
|
+
...model,
|
|
111
|
+
tags: (0, _ensureTypeTag.ensureTypeTag)(model),
|
|
123
112
|
tenant: model.tenant || getTenant().id,
|
|
124
113
|
locale: model.locale || getLocale().code
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
const modelsList = async () => {
|
|
128
|
-
const databaseModels = await loaders.listModels.load("listModels");
|
|
129
|
-
const pluginsModels = getModelsAsPlugins();
|
|
130
|
-
return databaseModels.concat(pluginsModels);
|
|
114
|
+
};
|
|
131
115
|
};
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* The list models cache is a key -> Promise pair so it the listModels() can be called multiple times but executed only once.
|
|
119
|
+
*
|
|
120
|
+
* We always fetch the plugins and database models separately.
|
|
121
|
+
* Then we combine them and run access filtering on them
|
|
122
|
+
*/
|
|
132
123
|
const listModels = async () => {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
124
|
+
return context.benchmark.measure("headlessCms.crud.models.listModels", async () => {
|
|
125
|
+
/**
|
|
126
|
+
* Maybe we can cache based on permissions, not the identity id?
|
|
127
|
+
*
|
|
128
|
+
* TODO: @adrian please check if possible.
|
|
129
|
+
*/
|
|
130
|
+
const tenant = getTenant().id;
|
|
131
|
+
const locale = getLocale().code;
|
|
132
|
+
const pluginModels = await listPluginModels(tenant, locale);
|
|
133
|
+
const dbCacheKey = (0, _utils2.createCacheKey)({
|
|
134
|
+
tenant,
|
|
135
|
+
locale
|
|
136
|
+
});
|
|
137
|
+
const databaseModels = await listDatabaseModelsCache.getOrSet(dbCacheKey, async () => {
|
|
138
|
+
return await (0, _listModelsFromDatabase.listModelsFromDatabase)(params);
|
|
139
|
+
});
|
|
140
|
+
const filteredCacheKey = (0, _utils2.createCacheKey)({
|
|
141
|
+
dbCacheKey: dbCacheKey.get(),
|
|
142
|
+
identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined
|
|
143
|
+
});
|
|
144
|
+
const filteredModels = await listFilteredModelsCache.getOrSet(filteredCacheKey, async () => {
|
|
145
|
+
return (0, _filterAsync.filterAsync)(databaseModels, filterModel);
|
|
146
|
+
});
|
|
147
|
+
return filteredModels.concat(pluginModels);
|
|
140
148
|
});
|
|
141
149
|
};
|
|
142
150
|
const getModel = async modelId => {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
151
|
+
return context.benchmark.measure("headlessCms.crud.models.getModel", async () => {
|
|
152
|
+
await checkModelPermissions("r");
|
|
153
|
+
const model = await context.security.withoutAuthorization(async () => {
|
|
154
|
+
return await getModelFromCache(modelId);
|
|
155
|
+
});
|
|
156
|
+
if (!model) {
|
|
157
|
+
throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
|
|
158
|
+
}
|
|
159
|
+
await modelsPermissions.ensure({
|
|
160
|
+
owns: model.createdBy
|
|
161
|
+
});
|
|
162
|
+
await modelsPermissions.ensureCanAccessModel({
|
|
163
|
+
model
|
|
164
|
+
});
|
|
165
|
+
return model;
|
|
166
|
+
});
|
|
148
167
|
};
|
|
149
|
-
const
|
|
168
|
+
const getEntryManager = async target => {
|
|
150
169
|
const modelId = typeof target === "string" ? target : target.modelId;
|
|
151
170
|
if (managers.has(modelId)) {
|
|
152
171
|
return managers.get(modelId);
|
|
153
172
|
}
|
|
154
|
-
const
|
|
155
|
-
const model = models.find(m => m.modelId === modelId);
|
|
156
|
-
if (!model) {
|
|
157
|
-
throw new _handlerGraphql.NotFoundError(`There is no content model "${modelId}".`);
|
|
158
|
-
}
|
|
173
|
+
const model = await getModelFromCache(modelId);
|
|
159
174
|
return await updateManager(context, model);
|
|
160
175
|
};
|
|
161
176
|
|
|
@@ -196,46 +211,317 @@ const createModelsCrud = params => {
|
|
|
196
211
|
context,
|
|
197
212
|
storageOperations
|
|
198
213
|
});
|
|
199
|
-
(0, _afterCreate.assignModelAfterCreate)({
|
|
200
|
-
context,
|
|
201
|
-
onModelAfterCreate
|
|
202
|
-
});
|
|
203
214
|
(0, _beforeUpdate.assignModelBeforeUpdate)({
|
|
204
215
|
onModelBeforeUpdate,
|
|
205
216
|
context
|
|
206
217
|
});
|
|
207
|
-
(0, _afterUpdate.assignModelAfterUpdate)({
|
|
208
|
-
context,
|
|
209
|
-
onModelAfterUpdate
|
|
210
|
-
});
|
|
211
|
-
(0, _afterCreateFrom.assignModelAfterCreateFrom)({
|
|
212
|
-
context,
|
|
213
|
-
onModelAfterCreateFrom
|
|
214
|
-
});
|
|
215
218
|
(0, _beforeDelete.assignModelBeforeDelete)({
|
|
216
219
|
onModelBeforeDelete,
|
|
217
220
|
plugins: context.plugins,
|
|
218
221
|
storageOperations
|
|
219
222
|
});
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* CRUD methods
|
|
226
|
+
*/
|
|
227
|
+
const createModel = async input => {
|
|
228
|
+
await checkModelPermissions("w");
|
|
229
|
+
const result = await (0, _validation.createModelCreateValidation)().safeParseAsync(input);
|
|
230
|
+
if (!result.success) {
|
|
231
|
+
throw (0, _utils.createZodError)(result.error);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* We need to extract the defaultFields because it is not for the CmsModel object.
|
|
235
|
+
*/
|
|
236
|
+
const {
|
|
237
|
+
defaultFields,
|
|
238
|
+
...data
|
|
239
|
+
} = (0, _utils.removeUndefinedValues)(result.data);
|
|
240
|
+
if (defaultFields) {
|
|
241
|
+
(0, _defaultFields.assignModelDefaultFields)(data);
|
|
242
|
+
}
|
|
243
|
+
const group = await context.cms.getGroup(data.group);
|
|
244
|
+
const identity = getIdentity();
|
|
245
|
+
const model = {
|
|
246
|
+
...data,
|
|
247
|
+
modelId: data.modelId || "",
|
|
248
|
+
singularApiName: data.singularApiName,
|
|
249
|
+
pluralApiName: data.pluralApiName,
|
|
250
|
+
titleFieldId: "id",
|
|
251
|
+
descriptionFieldId: null,
|
|
252
|
+
imageFieldId: null,
|
|
253
|
+
description: data.description || "",
|
|
254
|
+
locale: getLocale().code,
|
|
255
|
+
tenant: getTenant().id,
|
|
256
|
+
group: {
|
|
257
|
+
id: group.id,
|
|
258
|
+
name: group.name
|
|
259
|
+
},
|
|
260
|
+
createdBy: {
|
|
261
|
+
id: identity.id,
|
|
262
|
+
displayName: identity.displayName,
|
|
263
|
+
type: identity.type
|
|
264
|
+
},
|
|
265
|
+
createdOn: new Date().toISOString(),
|
|
266
|
+
savedOn: new Date().toISOString(),
|
|
267
|
+
lockedFields: [],
|
|
268
|
+
webinyVersion: context.WEBINY_VERSION
|
|
269
|
+
};
|
|
270
|
+
model.tags = (0, _ensureTypeTag.ensureTypeTag)(model);
|
|
271
|
+
try {
|
|
272
|
+
await onModelBeforeCreate.publish({
|
|
273
|
+
input: data,
|
|
274
|
+
model
|
|
275
|
+
});
|
|
276
|
+
const createdModel = await storageOperations.models.create({
|
|
277
|
+
model
|
|
278
|
+
});
|
|
279
|
+
clearModelsCache();
|
|
280
|
+
await updateManager(context, model);
|
|
281
|
+
await onModelAfterCreate.publish({
|
|
282
|
+
input: data,
|
|
283
|
+
model: createdModel
|
|
284
|
+
});
|
|
285
|
+
return createdModel;
|
|
286
|
+
} catch (ex) {
|
|
287
|
+
await onModelCreateError.publish({
|
|
288
|
+
input: data,
|
|
289
|
+
model,
|
|
290
|
+
error: ex
|
|
291
|
+
});
|
|
292
|
+
throw ex;
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
const updateModel = async (modelId, input) => {
|
|
296
|
+
await checkModelPermissions("w");
|
|
297
|
+
|
|
298
|
+
// Get a model record; this will also perform ownership validation.
|
|
299
|
+
const original = await getModel(modelId);
|
|
300
|
+
const result = await (0, _validation.createModelUpdateValidation)().safeParseAsync(input);
|
|
301
|
+
if (!result.success) {
|
|
302
|
+
throw (0, _utils.createZodError)(result.error);
|
|
303
|
+
}
|
|
304
|
+
const data = (0, _utils.removeUndefinedValues)(result.data);
|
|
305
|
+
if (Object.keys(data).length === 0) {
|
|
306
|
+
/**
|
|
307
|
+
* We need to return the original if nothing is to be updated.
|
|
308
|
+
*/
|
|
309
|
+
return original;
|
|
310
|
+
}
|
|
311
|
+
let group = {
|
|
312
|
+
id: original.group.id,
|
|
313
|
+
name: original.group.name
|
|
314
|
+
};
|
|
315
|
+
const groupId = data.group;
|
|
316
|
+
if (groupId) {
|
|
317
|
+
const groupData = await context.cms.getGroup(groupId);
|
|
318
|
+
group = {
|
|
319
|
+
id: groupData.id,
|
|
320
|
+
name: groupData.name
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
const model = {
|
|
324
|
+
...original,
|
|
325
|
+
...data,
|
|
326
|
+
titleFieldId: data.titleFieldId === undefined ? original.titleFieldId : data.titleFieldId,
|
|
327
|
+
descriptionFieldId: data.descriptionFieldId === undefined ? original.descriptionFieldId : data.descriptionFieldId,
|
|
328
|
+
imageFieldId: data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,
|
|
329
|
+
group,
|
|
330
|
+
description: data.description || original.description,
|
|
331
|
+
tenant: original.tenant || getTenant().id,
|
|
332
|
+
locale: original.locale || getLocale().code,
|
|
333
|
+
webinyVersion: context.WEBINY_VERSION,
|
|
334
|
+
savedOn: new Date().toISOString()
|
|
335
|
+
};
|
|
336
|
+
model.tags = (0, _ensureTypeTag.ensureTypeTag)(model);
|
|
337
|
+
try {
|
|
338
|
+
await onModelBeforeUpdate.publish({
|
|
339
|
+
input: data,
|
|
340
|
+
original,
|
|
341
|
+
model
|
|
342
|
+
});
|
|
343
|
+
const resultModel = await storageOperations.models.update({
|
|
344
|
+
model
|
|
345
|
+
});
|
|
346
|
+
await updateManager(context, resultModel);
|
|
347
|
+
await onModelAfterUpdate.publish({
|
|
348
|
+
input: data,
|
|
349
|
+
original,
|
|
350
|
+
model: resultModel
|
|
351
|
+
});
|
|
352
|
+
return resultModel;
|
|
353
|
+
} catch (ex) {
|
|
354
|
+
await onModelUpdateError.publish({
|
|
355
|
+
input: data,
|
|
356
|
+
model,
|
|
357
|
+
original,
|
|
358
|
+
error: ex
|
|
359
|
+
});
|
|
360
|
+
throw ex;
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
const updateModelDirect = async params => {
|
|
364
|
+
const {
|
|
365
|
+
model: initialModel,
|
|
366
|
+
original
|
|
367
|
+
} = params;
|
|
368
|
+
const model = {
|
|
369
|
+
...initialModel,
|
|
370
|
+
tenant: initialModel.tenant || getTenant().id,
|
|
371
|
+
locale: initialModel.locale || getLocale().code,
|
|
372
|
+
webinyVersion: context.WEBINY_VERSION
|
|
373
|
+
};
|
|
374
|
+
try {
|
|
375
|
+
await onModelBeforeUpdate.publish({
|
|
376
|
+
input: {},
|
|
377
|
+
original,
|
|
378
|
+
model
|
|
379
|
+
});
|
|
380
|
+
const resultModel = await storageOperations.models.update({
|
|
381
|
+
model
|
|
382
|
+
});
|
|
383
|
+
await updateManager(context, resultModel);
|
|
384
|
+
clearModelsCache();
|
|
385
|
+
await onModelAfterUpdate.publish({
|
|
386
|
+
input: {},
|
|
387
|
+
original,
|
|
388
|
+
model: resultModel
|
|
389
|
+
});
|
|
390
|
+
return resultModel;
|
|
391
|
+
} catch (ex) {
|
|
392
|
+
await onModelUpdateError.publish({
|
|
393
|
+
input: {},
|
|
394
|
+
original,
|
|
395
|
+
model,
|
|
396
|
+
error: ex
|
|
397
|
+
});
|
|
398
|
+
throw ex;
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
const createModelFrom = async (modelId, input) => {
|
|
402
|
+
await checkModelPermissions("w");
|
|
225
403
|
/**
|
|
226
|
-
*
|
|
404
|
+
* Get a model record; this will also perform ownership validation.
|
|
227
405
|
*/
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
406
|
+
const original = await getModel(modelId);
|
|
407
|
+
const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync({
|
|
408
|
+
...input,
|
|
409
|
+
description: input.description || original.description
|
|
410
|
+
});
|
|
411
|
+
if (!result.success) {
|
|
412
|
+
throw (0, _utils.createZodError)(result.error);
|
|
413
|
+
}
|
|
414
|
+
const data = (0, _utils.removeUndefinedValues)(result.data);
|
|
415
|
+
const locale = await context.i18n.getLocale(data.locale || original.locale);
|
|
416
|
+
if (!locale) {
|
|
417
|
+
throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
|
|
418
|
+
}
|
|
236
419
|
/**
|
|
237
|
-
*
|
|
420
|
+
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
238
421
|
*/
|
|
422
|
+
const group = await context.cms.storageOperations.groups.get({
|
|
423
|
+
id: data.group,
|
|
424
|
+
tenant: original.tenant,
|
|
425
|
+
locale: locale.code
|
|
426
|
+
});
|
|
427
|
+
if (!group) {
|
|
428
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
429
|
+
}
|
|
430
|
+
const identity = getIdentity();
|
|
431
|
+
const model = {
|
|
432
|
+
...original,
|
|
433
|
+
singularApiName: data.singularApiName,
|
|
434
|
+
pluralApiName: data.pluralApiName,
|
|
435
|
+
locale: locale.code,
|
|
436
|
+
group: {
|
|
437
|
+
id: group.id,
|
|
438
|
+
name: group.name
|
|
439
|
+
},
|
|
440
|
+
icon: data.icon,
|
|
441
|
+
name: data.name,
|
|
442
|
+
modelId: data.modelId || "",
|
|
443
|
+
description: data.description || "",
|
|
444
|
+
createdBy: {
|
|
445
|
+
id: identity.id,
|
|
446
|
+
displayName: identity.displayName,
|
|
447
|
+
type: identity.type
|
|
448
|
+
},
|
|
449
|
+
createdOn: new Date().toISOString(),
|
|
450
|
+
savedOn: new Date().toISOString(),
|
|
451
|
+
lockedFields: [],
|
|
452
|
+
webinyVersion: context.WEBINY_VERSION
|
|
453
|
+
};
|
|
454
|
+
try {
|
|
455
|
+
await onModelBeforeCreateFrom.publish({
|
|
456
|
+
input: data,
|
|
457
|
+
model,
|
|
458
|
+
original
|
|
459
|
+
});
|
|
460
|
+
const createdModel = await storageOperations.models.create({
|
|
461
|
+
model
|
|
462
|
+
});
|
|
463
|
+
clearModelsCache();
|
|
464
|
+
await updateManager(context, model);
|
|
465
|
+
await onModelAfterCreateFrom.publish({
|
|
466
|
+
input: data,
|
|
467
|
+
original,
|
|
468
|
+
model: createdModel
|
|
469
|
+
});
|
|
470
|
+
return createdModel;
|
|
471
|
+
} catch (ex) {
|
|
472
|
+
await onModelCreateFromError.publish({
|
|
473
|
+
input: data,
|
|
474
|
+
original,
|
|
475
|
+
model,
|
|
476
|
+
error: ex
|
|
477
|
+
});
|
|
478
|
+
throw ex;
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
const deleteModel = async modelId => {
|
|
482
|
+
await checkModelPermissions("d");
|
|
483
|
+
const model = await getModel(modelId);
|
|
484
|
+
try {
|
|
485
|
+
await onModelBeforeDelete.publish({
|
|
486
|
+
model
|
|
487
|
+
});
|
|
488
|
+
try {
|
|
489
|
+
await storageOperations.models.delete({
|
|
490
|
+
model
|
|
491
|
+
});
|
|
492
|
+
} catch (ex) {
|
|
493
|
+
throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
|
|
494
|
+
error: ex,
|
|
495
|
+
modelId: model.modelId
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
clearModelsCache();
|
|
499
|
+
await onModelAfterDelete.publish({
|
|
500
|
+
model
|
|
501
|
+
});
|
|
502
|
+
managers.delete(model.modelId);
|
|
503
|
+
} catch (ex) {
|
|
504
|
+
await onModelDeleteError.publish({
|
|
505
|
+
model,
|
|
506
|
+
error: ex
|
|
507
|
+
});
|
|
508
|
+
throw ex;
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
const initializeModel = async (modelId, data) => {
|
|
512
|
+
/**
|
|
513
|
+
* We require that users have write permissions to initialize models.
|
|
514
|
+
* Maybe introduce another permission for it?
|
|
515
|
+
*/
|
|
516
|
+
await checkModelPermissions("w");
|
|
517
|
+
const model = await getModel(modelId);
|
|
518
|
+
await onModelInitialize.publish({
|
|
519
|
+
model,
|
|
520
|
+
data
|
|
521
|
+
});
|
|
522
|
+
return true;
|
|
523
|
+
};
|
|
524
|
+
return {
|
|
239
525
|
onModelBeforeCreate,
|
|
240
526
|
onModelAfterCreate,
|
|
241
527
|
onModelCreateError,
|
|
@@ -253,303 +539,43 @@ const createModelsCrud = params => {
|
|
|
253
539
|
getModel,
|
|
254
540
|
listModels,
|
|
255
541
|
async createModel(input) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
throw (0, _utils.createZodError)(result.error);
|
|
260
|
-
}
|
|
261
|
-
const data = result.data;
|
|
262
|
-
context.security.disableAuthorization();
|
|
263
|
-
const group = await context.cms.getGroup(data.group);
|
|
264
|
-
context.security.enableAuthorization();
|
|
265
|
-
if (!group) {
|
|
266
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
267
|
-
}
|
|
268
|
-
const identity = getIdentity();
|
|
269
|
-
const model = {
|
|
270
|
-
name: data.name,
|
|
271
|
-
description: data.description || "",
|
|
272
|
-
modelId: data.modelId || "",
|
|
273
|
-
titleFieldId: "id",
|
|
274
|
-
locale: getLocale().code,
|
|
275
|
-
tenant: getTenant().id,
|
|
276
|
-
group: {
|
|
277
|
-
id: group.id,
|
|
278
|
-
name: group.name
|
|
279
|
-
},
|
|
280
|
-
createdBy: {
|
|
281
|
-
id: identity.id,
|
|
282
|
-
displayName: identity.displayName,
|
|
283
|
-
type: identity.type
|
|
284
|
-
},
|
|
285
|
-
createdOn: new Date().toISOString(),
|
|
286
|
-
savedOn: new Date().toISOString(),
|
|
287
|
-
fields: data.fields,
|
|
288
|
-
lockedFields: [],
|
|
289
|
-
layout: data.layout || [],
|
|
290
|
-
tags: [...(data.tags || [])],
|
|
291
|
-
webinyVersion: context.WEBINY_VERSION
|
|
292
|
-
};
|
|
293
|
-
model.tags = ensureTypeTag(model);
|
|
294
|
-
try {
|
|
295
|
-
await onModelBeforeCreate.publish({
|
|
296
|
-
input: data,
|
|
297
|
-
model
|
|
298
|
-
});
|
|
299
|
-
const createdModel = await storageOperations.models.create({
|
|
300
|
-
model
|
|
301
|
-
});
|
|
302
|
-
loaders.listModels.clearAll();
|
|
303
|
-
await updateManager(context, model);
|
|
304
|
-
await onModelAfterCreate.publish({
|
|
305
|
-
input: data,
|
|
306
|
-
model: createdModel
|
|
307
|
-
});
|
|
308
|
-
return createdModel;
|
|
309
|
-
} catch (ex) {
|
|
310
|
-
await onModelCreateError.publish({
|
|
311
|
-
input: data,
|
|
312
|
-
model,
|
|
313
|
-
error: ex
|
|
314
|
-
});
|
|
315
|
-
throw ex;
|
|
316
|
-
}
|
|
542
|
+
return context.benchmark.measure("headlessCms.crud.models.createModel", async () => {
|
|
543
|
+
return createModel(input);
|
|
544
|
+
});
|
|
317
545
|
},
|
|
318
546
|
/**
|
|
319
547
|
* Method does not check for permissions or ownership.
|
|
320
548
|
* @internal
|
|
321
549
|
*/
|
|
322
550
|
async updateModelDirect(params) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
original
|
|
326
|
-
} = params;
|
|
327
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialModel), {}, {
|
|
328
|
-
tenant: initialModel.tenant || getTenant().id,
|
|
329
|
-
locale: initialModel.locale || getLocale().code,
|
|
330
|
-
webinyVersion: context.WEBINY_VERSION
|
|
551
|
+
return context.benchmark.measure("headlessCms.crud.models.updateModelDirect", async () => {
|
|
552
|
+
return updateModelDirect(params);
|
|
331
553
|
});
|
|
332
|
-
try {
|
|
333
|
-
await onModelBeforeUpdate.publish({
|
|
334
|
-
input: {},
|
|
335
|
-
original,
|
|
336
|
-
model
|
|
337
|
-
});
|
|
338
|
-
const resultModel = await storageOperations.models.update({
|
|
339
|
-
model
|
|
340
|
-
});
|
|
341
|
-
await updateManager(context, resultModel);
|
|
342
|
-
loaders.listModels.clearAll();
|
|
343
|
-
await onModelAfterUpdate.publish({
|
|
344
|
-
input: {},
|
|
345
|
-
original,
|
|
346
|
-
model: resultModel
|
|
347
|
-
});
|
|
348
|
-
return resultModel;
|
|
349
|
-
} catch (ex) {
|
|
350
|
-
await onModelUpdateError.publish({
|
|
351
|
-
input: {},
|
|
352
|
-
original,
|
|
353
|
-
model,
|
|
354
|
-
error: ex
|
|
355
|
-
});
|
|
356
|
-
throw ex;
|
|
357
|
-
}
|
|
358
554
|
},
|
|
359
555
|
async createModelFrom(modelId, userInput) {
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
* Get a model record; this will also perform ownership validation.
|
|
363
|
-
*/
|
|
364
|
-
const original = await getModel(modelId);
|
|
365
|
-
const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync({
|
|
366
|
-
name: userInput.name,
|
|
367
|
-
modelId: userInput.modelId,
|
|
368
|
-
description: userInput.description || original.description,
|
|
369
|
-
group: userInput.group,
|
|
370
|
-
locale: userInput.locale
|
|
371
|
-
});
|
|
372
|
-
if (!result.success) {
|
|
373
|
-
throw (0, _utils.createZodError)(result.error);
|
|
374
|
-
}
|
|
375
|
-
const data = result.data;
|
|
376
|
-
const locale = await context.i18n.getLocale(data.locale || original.locale);
|
|
377
|
-
if (!locale) {
|
|
378
|
-
throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
382
|
-
*/
|
|
383
|
-
const group = await context.cms.storageOperations.groups.get({
|
|
384
|
-
id: data.group,
|
|
385
|
-
tenant: original.tenant,
|
|
386
|
-
locale: locale.code
|
|
556
|
+
return context.benchmark.measure("headlessCms.crud.models.createModelFrom", async () => {
|
|
557
|
+
return createModelFrom(modelId, userInput);
|
|
387
558
|
});
|
|
388
|
-
if (!group) {
|
|
389
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
390
|
-
}
|
|
391
|
-
const identity = getIdentity();
|
|
392
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
|
|
393
|
-
locale: locale.code,
|
|
394
|
-
group: {
|
|
395
|
-
id: group.id,
|
|
396
|
-
name: group.name
|
|
397
|
-
},
|
|
398
|
-
name: data.name,
|
|
399
|
-
modelId: data.modelId || "",
|
|
400
|
-
description: data.description || "",
|
|
401
|
-
createdBy: {
|
|
402
|
-
id: identity.id,
|
|
403
|
-
displayName: identity.displayName,
|
|
404
|
-
type: identity.type
|
|
405
|
-
},
|
|
406
|
-
createdOn: new Date().toISOString(),
|
|
407
|
-
savedOn: new Date().toISOString(),
|
|
408
|
-
lockedFields: [],
|
|
409
|
-
webinyVersion: context.WEBINY_VERSION
|
|
410
|
-
});
|
|
411
|
-
try {
|
|
412
|
-
await onModelBeforeCreateFrom.publish({
|
|
413
|
-
input: data,
|
|
414
|
-
model,
|
|
415
|
-
original
|
|
416
|
-
});
|
|
417
|
-
const createdModel = await storageOperations.models.create({
|
|
418
|
-
model
|
|
419
|
-
});
|
|
420
|
-
loaders.listModels.clearAll();
|
|
421
|
-
await updateManager(context, model);
|
|
422
|
-
await onModelAfterCreateFrom.publish({
|
|
423
|
-
input: data,
|
|
424
|
-
original,
|
|
425
|
-
model: createdModel
|
|
426
|
-
});
|
|
427
|
-
return createdModel;
|
|
428
|
-
} catch (ex) {
|
|
429
|
-
await onModelCreateFromError.publish({
|
|
430
|
-
input: data,
|
|
431
|
-
original,
|
|
432
|
-
model,
|
|
433
|
-
error: ex
|
|
434
|
-
});
|
|
435
|
-
throw ex;
|
|
436
|
-
}
|
|
437
559
|
},
|
|
438
560
|
async updateModel(modelId, input) {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
const original = await getModel(modelId);
|
|
443
|
-
const result = await (0, _validation.createModelUpdateValidation)().safeParseAsync(input);
|
|
444
|
-
if (!result.success) {
|
|
445
|
-
throw (0, _utils.createZodError)(result.error);
|
|
446
|
-
}
|
|
447
|
-
const data = result.data;
|
|
448
|
-
if (Object.keys(data).length === 0) {
|
|
449
|
-
/**
|
|
450
|
-
* We need to return the original if nothing is to be updated.
|
|
451
|
-
*/
|
|
452
|
-
return original;
|
|
453
|
-
}
|
|
454
|
-
let group = {
|
|
455
|
-
id: original.group.id,
|
|
456
|
-
name: original.group.name
|
|
457
|
-
};
|
|
458
|
-
if (data.group) {
|
|
459
|
-
context.security.disableAuthorization();
|
|
460
|
-
const groupData = await context.cms.getGroup(data.group);
|
|
461
|
-
context.security.enableAuthorization();
|
|
462
|
-
if (!groupData) {
|
|
463
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
464
|
-
}
|
|
465
|
-
group = {
|
|
466
|
-
id: groupData.id,
|
|
467
|
-
name: groupData.name
|
|
468
|
-
};
|
|
469
|
-
}
|
|
470
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
|
|
471
|
-
group,
|
|
472
|
-
description: data.description || original.description,
|
|
473
|
-
tenant: original.tenant || getTenant().id,
|
|
474
|
-
locale: original.locale || getLocale().code,
|
|
475
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
476
|
-
savedOn: new Date().toISOString()
|
|
477
|
-
});
|
|
478
|
-
model.tags = ensureTypeTag(model);
|
|
479
|
-
try {
|
|
480
|
-
await onModelBeforeUpdate.publish({
|
|
481
|
-
input: data,
|
|
482
|
-
original,
|
|
483
|
-
model
|
|
484
|
-
});
|
|
485
|
-
const resultModel = await storageOperations.models.update({
|
|
486
|
-
model
|
|
487
|
-
});
|
|
488
|
-
await updateManager(context, resultModel);
|
|
489
|
-
await onModelAfterUpdate.publish({
|
|
490
|
-
input: data,
|
|
491
|
-
original,
|
|
492
|
-
model: resultModel
|
|
493
|
-
});
|
|
494
|
-
return resultModel;
|
|
495
|
-
} catch (ex) {
|
|
496
|
-
await onModelUpdateError.publish({
|
|
497
|
-
input: data,
|
|
498
|
-
model,
|
|
499
|
-
original,
|
|
500
|
-
error: ex
|
|
501
|
-
});
|
|
502
|
-
throw ex;
|
|
503
|
-
}
|
|
561
|
+
return context.benchmark.measure("headlessCms.crud.models.updateModel", async () => {
|
|
562
|
+
return updateModel(modelId, input);
|
|
563
|
+
});
|
|
504
564
|
},
|
|
505
565
|
async deleteModel(modelId) {
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
await onModelBeforeDelete.publish({
|
|
510
|
-
model
|
|
511
|
-
});
|
|
512
|
-
try {
|
|
513
|
-
await storageOperations.models.delete({
|
|
514
|
-
model
|
|
515
|
-
});
|
|
516
|
-
} catch (ex) {
|
|
517
|
-
throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
|
|
518
|
-
error: ex,
|
|
519
|
-
modelId: model.modelId
|
|
520
|
-
});
|
|
521
|
-
}
|
|
522
|
-
await onModelAfterDelete.publish({
|
|
523
|
-
model
|
|
524
|
-
});
|
|
525
|
-
managers.delete(model.modelId);
|
|
526
|
-
} catch (ex) {
|
|
527
|
-
await onModelDeleteError.publish({
|
|
528
|
-
model,
|
|
529
|
-
error: ex
|
|
530
|
-
});
|
|
531
|
-
throw ex;
|
|
532
|
-
}
|
|
566
|
+
return context.benchmark.measure("headlessCms.crud.models.deleteModel", async () => {
|
|
567
|
+
return deleteModel(modelId);
|
|
568
|
+
});
|
|
533
569
|
},
|
|
534
570
|
async initializeModel(modelId, data) {
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
* Maybe introduce another permission for it?
|
|
538
|
-
*/
|
|
539
|
-
await checkModelPermissions("w");
|
|
540
|
-
const model = await getModel(modelId);
|
|
541
|
-
await onModelInitialize.publish({
|
|
542
|
-
model,
|
|
543
|
-
data
|
|
571
|
+
return context.benchmark.measure("headlessCms.crud.models.initializeModel", async () => {
|
|
572
|
+
return initializeModel(modelId, data);
|
|
544
573
|
});
|
|
545
|
-
return true;
|
|
546
|
-
},
|
|
547
|
-
getModelManager,
|
|
548
|
-
getEntryManager: async model => {
|
|
549
|
-
return getModelManager(model);
|
|
550
574
|
},
|
|
551
|
-
|
|
575
|
+
getEntryManager,
|
|
552
576
|
getEntryManagers: () => managers
|
|
553
577
|
};
|
|
554
578
|
};
|
|
555
|
-
exports.createModelsCrud = createModelsCrud;
|
|
579
|
+
exports.createModelsCrud = createModelsCrud;
|
|
580
|
+
|
|
581
|
+
//# sourceMappingURL=contentModel.crud.js.map
|