@webiny/api-headless-cms 0.0.0-mt-2 → 0.0.0-unstable.13771d80a8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/context.d.ts +6 -0
- package/context.js +94 -0
- package/context.js.map +1 -0
- package/crud/contentEntry/afterDelete.d.ts +8 -0
- package/{content/plugins/crud → crud}/contentEntry/afterDelete.js +2 -7
- package/crud/contentEntry/afterDelete.js.map +1 -0
- package/crud/contentEntry/beforeCreate.d.ts +8 -0
- package/{content/plugins/crud → crud}/contentEntry/beforeCreate.js +2 -5
- package/crud/contentEntry/beforeCreate.js.map +1 -0
- package/crud/contentEntry/beforeUpdate.d.ts +8 -0
- package/{content/plugins/crud → crud}/contentEntry/beforeUpdate.js +2 -5
- package/crud/contentEntry/beforeUpdate.js.map +1 -0
- package/crud/contentEntry/entryDataValidation.d.ts +10 -0
- package/{content/plugins/crud → crud}/contentEntry/entryDataValidation.js +22 -49
- package/crud/contentEntry/entryDataValidation.js.map +1 -0
- package/{content/plugins/crud → crud}/contentEntry/markLockedFields.d.ts +3 -2
- package/{content/plugins/crud → crud}/contentEntry/markLockedFields.js +29 -43
- package/crud/contentEntry/markLockedFields.js.map +1 -0
- package/crud/contentEntry/referenceFieldsMapping.d.ts +13 -0
- package/crud/contentEntry/referenceFieldsMapping.js +236 -0
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -0
- package/crud/contentEntry/searchableFields.d.ts +9 -0
- package/crud/contentEntry/searchableFields.js +72 -0
- package/crud/contentEntry/searchableFields.js.map +1 -0
- package/{content/plugins/crud → crud}/contentEntry.crud.d.ts +6 -9
- package/crud/contentEntry.crud.js +1202 -0
- package/crud/contentEntry.crud.js.map +1 -0
- package/crud/contentModel/afterCreate.d.ts +8 -0
- package/crud/contentModel/afterCreate.js +16 -0
- package/crud/contentModel/afterCreate.js.map +1 -0
- package/crud/contentModel/afterCreateFrom.d.ts +8 -0
- package/crud/contentModel/afterCreateFrom.js +16 -0
- package/crud/contentModel/afterCreateFrom.js.map +1 -0
- package/crud/contentModel/afterDelete.d.ts +8 -0
- package/crud/contentModel/afterDelete.js +16 -0
- package/crud/contentModel/afterDelete.js.map +1 -0
- package/crud/contentModel/afterUpdate.d.ts +8 -0
- package/crud/contentModel/afterUpdate.js +16 -0
- package/crud/contentModel/afterUpdate.js.map +1 -0
- package/crud/contentModel/beforeCreate.d.ts +14 -0
- package/{content/plugins/crud → crud}/contentModel/beforeCreate.js +62 -39
- package/crud/contentModel/beforeCreate.js.map +1 -0
- package/crud/contentModel/beforeDelete.d.ts +10 -0
- package/{content/plugins/crud → crud}/contentModel/beforeDelete.js +13 -19
- package/crud/contentModel/beforeDelete.js.map +1 -0
- package/crud/contentModel/beforeUpdate.d.ts +8 -0
- package/crud/contentModel/beforeUpdate.js +36 -0
- package/crud/contentModel/beforeUpdate.js.map +1 -0
- package/crud/contentModel/compatibility/modelApiName.d.ts +3 -0
- package/crud/contentModel/compatibility/modelApiName.js +24 -0
- package/crud/contentModel/compatibility/modelApiName.js.map +1 -0
- package/crud/contentModel/contentModelManagerFactory.d.ts +2 -0
- package/{content/plugins/crud → crud}/contentModel/contentModelManagerFactory.js +0 -7
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -0
- package/crud/contentModel/createFieldModels.d.ts +2 -0
- package/{content/plugins/crud → crud}/contentModel/createFieldModels.js +6 -2
- package/crud/contentModel/createFieldModels.js.map +1 -0
- package/crud/contentModel/createFieldStorageId.d.ts +2 -0
- package/crud/contentModel/createFieldStorageId.js +17 -0
- package/crud/contentModel/createFieldStorageId.js.map +1 -0
- package/crud/contentModel/defaultFields.d.ts +5 -0
- package/crud/contentModel/defaultFields.js +58 -0
- package/crud/contentModel/defaultFields.js.map +1 -0
- package/crud/contentModel/fieldIdValidation.d.ts +1 -0
- package/crud/contentModel/fieldIdValidation.js +25 -0
- package/crud/contentModel/fieldIdValidation.js.map +1 -0
- package/crud/contentModel/fields/descriptionField.d.ts +2 -0
- package/crud/contentModel/fields/descriptionField.js +42 -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 +46 -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 +58 -0
- package/crud/contentModel/fields/titleField.js.map +1 -0
- package/crud/contentModel/idValidation.d.ts +1 -0
- package/{content/plugins/crud → crud}/contentModel/idValidation.js +3 -3
- package/crud/contentModel/idValidation.js.map +1 -0
- package/{content/plugins/crud → crud}/contentModel/models.d.ts +2 -1
- package/{content/plugins/crud → crud}/contentModel/models.js +76 -25
- package/crud/contentModel/models.js.map +1 -0
- package/crud/contentModel/systemFields.d.ts +1 -0
- package/crud/contentModel/systemFields.js +8 -0
- package/crud/contentModel/systemFields.js.map +1 -0
- package/crud/contentModel/validateLayout.d.ts +2 -0
- package/{content/plugins/crud → crud}/contentModel/validateLayout.js +1 -11
- package/crud/contentModel/validateLayout.js.map +1 -0
- package/crud/contentModel/validateModel.d.ts +9 -0
- package/crud/contentModel/validateModel.js +27 -0
- package/crud/contentModel/validateModel.js.map +1 -0
- package/crud/contentModel/validateModelFields.d.ts +9 -0
- package/crud/contentModel/validateModelFields.js +343 -0
- package/crud/contentModel/validateModelFields.js.map +1 -0
- package/crud/contentModel/validation.d.ts +519 -0
- package/crud/contentModel/validation.js +145 -0
- package/crud/contentModel/validation.js.map +1 -0
- package/{content/plugins/crud → crud}/contentModel.crud.d.ts +3 -3
- package/crud/contentModel.crud.js +578 -0
- package/crud/contentModel.crud.js.map +1 -0
- package/crud/contentModelGroup/beforeCreate.d.ts +10 -0
- package/{content/plugins/crud → crud}/contentModelGroup/beforeCreate.js +8 -20
- package/crud/contentModelGroup/beforeCreate.js.map +1 -0
- package/crud/contentModelGroup/beforeDelete.d.ts +10 -0
- package/{content/plugins/crud → crud}/contentModelGroup/beforeDelete.js +4 -12
- package/crud/contentModelGroup/beforeDelete.js.map +1 -0
- package/crud/contentModelGroup/beforeUpdate.d.ts +9 -0
- package/{content/plugins/crud → crud}/contentModelGroup/beforeUpdate.js +3 -8
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -0
- package/crud/contentModelGroup/validation.d.ts +30 -0
- package/crud/contentModelGroup/validation.js +34 -0
- package/crud/contentModelGroup/validation.js.map +1 -0
- package/{content/plugins/crud → crud}/contentModelGroup.crud.d.ts +3 -3
- package/crud/contentModelGroup.crud.js +324 -0
- package/crud/contentModelGroup.crud.js.map +1 -0
- package/{plugins/crud → crud}/settings.crud.d.ts +3 -3
- package/crud/settings.crud.js +71 -0
- package/crud/settings.crud.js.map +1 -0
- package/{plugins/crud → crud}/system.crud.d.ts +6 -3
- package/crud/system.crud.js +126 -0
- package/crud/system.crud.js.map +1 -0
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.d.ts +7 -0
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +53 -0
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +203 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.d.ts +11 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +251 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/index.d.ts +4 -0
- package/fieldConverters/index.js +13 -0
- package/fieldConverters/index.js.map +1 -0
- package/graphql/buildSchemaPlugins.d.ts +11 -0
- package/graphql/buildSchemaPlugins.js +19 -0
- package/graphql/buildSchemaPlugins.js.map +1 -0
- package/graphql/createExecutableSchema.d.ts +7 -0
- package/graphql/createExecutableSchema.js +29 -0
- package/graphql/createExecutableSchema.js.map +1 -0
- package/graphql/generateSchema.d.ts +8 -0
- package/graphql/generateSchema.js +31 -0
- package/graphql/generateSchema.js.map +1 -0
- package/graphql/graphQLHandlerFactory.d.ts +5 -0
- package/graphql/graphQLHandlerFactory.js +179 -0
- package/graphql/graphQLHandlerFactory.js.map +1 -0
- package/graphql/index.d.ts +3 -0
- package/graphql/index.js +13 -0
- package/graphql/index.js.map +1 -0
- package/graphql/schema/baseContentSchema.d.ts +7 -0
- package/graphql/schema/baseContentSchema.js +66 -0
- package/graphql/schema/baseContentSchema.js.map +1 -0
- package/graphql/schema/baseSchema.d.ts +3 -0
- package/graphql/schema/baseSchema.js +53 -0
- package/graphql/schema/baseSchema.js.map +1 -0
- package/graphql/schema/contentEntries.d.ts +7 -0
- package/graphql/schema/contentEntries.js +362 -0
- package/graphql/schema/contentEntries.js.map +1 -0
- package/graphql/schema/contentModelGroups.d.ts +7 -0
- package/{content/plugins → graphql}/schema/contentModelGroups.js +39 -33
- package/graphql/schema/contentModelGroups.js.map +1 -0
- package/graphql/schema/contentModels.d.ts +7 -0
- package/{content/plugins → graphql}/schema/contentModels.js +121 -29
- package/graphql/schema/contentModels.js.map +1 -0
- package/graphql/schema/createFieldResolvers.d.ts +20 -0
- package/graphql/schema/createFieldResolvers.js +110 -0
- package/graphql/schema/createFieldResolvers.js.map +1 -0
- package/graphql/schema/createManageResolvers.d.ts +12 -0
- package/graphql/schema/createManageResolvers.js +127 -0
- package/graphql/schema/createManageResolvers.js.map +1 -0
- package/graphql/schema/createManageSDL.d.ts +13 -0
- package/graphql/schema/createManageSDL.js +157 -0
- package/graphql/schema/createManageSDL.js.map +1 -0
- package/graphql/schema/createPreviewResolvers.d.ts +12 -0
- package/graphql/schema/createPreviewResolvers.js +44 -0
- package/graphql/schema/createPreviewResolvers.js.map +1 -0
- package/graphql/schema/createReadResolvers.d.ts +12 -0
- package/graphql/schema/createReadResolvers.js +49 -0
- package/graphql/schema/createReadResolvers.js.map +1 -0
- package/graphql/schema/createReadSDL.d.ts +13 -0
- package/graphql/schema/createReadSDL.js +100 -0
- package/graphql/schema/createReadSDL.js.map +1 -0
- package/graphql/schema/resolvers/commonFieldResolvers.d.ts +7 -0
- package/{content/plugins → graphql}/schema/resolvers/commonFieldResolvers.js +2 -3
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveCreate.d.ts +7 -0
- package/{content/plugins → graphql}/schema/resolvers/manage/resolveCreate.js +2 -7
- package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveCreateFrom.d.ts +8 -0
- package/{content/plugins → graphql}/schema/resolvers/manage/resolveCreateFrom.js +2 -7
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveDelete.d.ts +7 -0
- package/{content/plugins → graphql}/schema/resolvers/manage/resolveDelete.js +8 -12
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveGet.d.ts +7 -0
- package/graphql/schema/resolvers/manage/resolveGet.js +63 -0
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveGetByIds.d.ts +7 -0
- package/{content/plugins → graphql}/schema/resolvers/manage/resolveGetByIds.js +2 -7
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveGetRevisions.d.ts +7 -0
- package/{content/plugins → graphql}/schema/resolvers/manage/resolveGetRevisions.js +2 -7
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveList.d.ts +4 -0
- package/{content/plugins/schema/resolvers/preview → graphql/schema/resolvers/manage}/resolveList.js +2 -7
- package/graphql/schema/resolvers/manage/resolveList.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolvePublish.d.ts +7 -0
- package/{content/plugins → graphql}/schema/resolvers/manage/resolvePublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveRepublish.d.ts +7 -0
- package/{content/plugins/schema/resolvers/manage/resolveGet.js → graphql/schema/resolvers/manage/resolveRepublish.js} +4 -7
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveUnpublish.d.ts +7 -0
- package/{content/plugins → graphql}/schema/resolvers/manage/resolveUnpublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -0
- package/graphql/schema/resolvers/manage/resolveUpdate.d.ts +8 -0
- package/{content/plugins → graphql}/schema/resolvers/manage/resolveUpdate.js +2 -7
- package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -0
- package/graphql/schema/resolvers/preview/resolveGet.d.ts +4 -0
- package/graphql/schema/resolvers/preview/resolveGet.js +26 -0
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -0
- package/graphql/schema/resolvers/preview/resolveList.d.ts +4 -0
- package/{content/plugins/schema/resolvers/manage → graphql/schema/resolvers/preview}/resolveList.js +2 -7
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -0
- package/graphql/schema/resolvers/read/resolveGet.d.ts +4 -0
- package/graphql/schema/resolvers/read/resolveGet.js +26 -0
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -0
- package/graphql/schema/resolvers/read/resolveList.d.ts +4 -0
- package/{content/plugins → graphql}/schema/resolvers/read/resolveList.js +2 -7
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -0
- package/graphql/schema/schemaPlugins.d.ts +8 -0
- package/graphql/schema/schemaPlugins.js +109 -0
- package/graphql/schema/schemaPlugins.js.map +1 -0
- package/graphql/system.d.ts +6 -0
- package/{plugins/graphql → graphql}/system.js +39 -24
- package/graphql/system.js.map +1 -0
- package/graphqlFields/boolean.d.ts +2 -0
- package/graphqlFields/boolean.js +57 -0
- package/graphqlFields/boolean.js.map +1 -0
- package/graphqlFields/datetime.d.ts +2 -0
- package/graphqlFields/datetime.js +78 -0
- package/graphqlFields/datetime.js.map +1 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js +216 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +63 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
- package/graphqlFields/dynamicZone/index.d.ts +2 -0
- package/graphqlFields/dynamicZone/index.js +19 -0
- package/graphqlFields/dynamicZone/index.js.map +1 -0
- package/graphqlFields/file.d.ts +2 -0
- package/graphqlFields/file.js +42 -0
- package/graphqlFields/file.js.map +1 -0
- package/graphqlFields/helpers.d.ts +6 -0
- package/graphqlFields/helpers.js +39 -0
- package/graphqlFields/helpers.js.map +1 -0
- package/graphqlFields/index.d.ts +2 -0
- package/graphqlFields/index.js +18 -0
- package/graphqlFields/index.js.map +1 -0
- package/graphqlFields/longText.d.ts +2 -0
- package/graphqlFields/longText.js +53 -0
- package/graphqlFields/longText.js.map +1 -0
- package/graphqlFields/number.d.ts +2 -0
- package/graphqlFields/number.js +67 -0
- package/graphqlFields/number.js.map +1 -0
- package/graphqlFields/object.d.ts +2 -0
- package/graphqlFields/object.js +245 -0
- package/graphqlFields/object.js.map +1 -0
- package/graphqlFields/ref.d.ts +2 -0
- package/graphqlFields/ref.js +255 -0
- package/graphqlFields/ref.js.map +1 -0
- package/graphqlFields/richText.d.ts +2 -0
- package/graphqlFields/richText.js +47 -0
- package/graphqlFields/richText.js.map +1 -0
- package/graphqlFields/text.d.ts +2 -0
- package/graphqlFields/text.js +62 -0
- package/graphqlFields/text.js.map +1 -0
- package/index.d.ts +10 -12
- package/index.js +74 -55
- package/index.js.map +1 -0
- package/modelManager/DefaultCmsModelManager.d.ts +14 -0
- package/{content/plugins/modelManager → modelManager}/DefaultCmsModelManager.js +10 -24
- package/modelManager/DefaultCmsModelManager.js.map +1 -0
- package/modelManager/index.d.ts +2 -0
- package/{content/plugins/modelManager → modelManager}/index.js +3 -7
- package/modelManager/index.js.map +1 -0
- package/package.json +37 -38
- package/parameters/context.d.ts +2 -0
- package/parameters/context.js +18 -0
- package/parameters/context.js.map +1 -0
- package/parameters/header.d.ts +2 -0
- package/parameters/header.js +44 -0
- package/parameters/header.js.map +1 -0
- package/parameters/index.d.ts +4 -0
- package/parameters/index.js +49 -0
- package/parameters/index.js.map +1 -0
- package/parameters/manual.d.ts +6 -0
- package/parameters/manual.js +37 -0
- package/parameters/manual.js.map +1 -0
- package/parameters/path.d.ts +2 -0
- package/parameters/path.js +40 -0
- package/parameters/path.js.map +1 -0
- package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
- package/plugins/CmsGraphQLSchemaPlugin.js +12 -0
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +28 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
- package/plugins/CmsGroupPlugin.d.ts +13 -0
- package/{content/plugins → plugins}/CmsGroupPlugin.js +7 -9
- package/plugins/CmsGroupPlugin.js.map +1 -0
- package/plugins/CmsModelFieldConverterPlugin.d.ts +14 -0
- package/plugins/CmsModelFieldConverterPlugin.js +12 -0
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -0
- package/plugins/CmsModelPlugin.d.ts +55 -0
- package/plugins/CmsModelPlugin.js +169 -0
- package/plugins/CmsModelPlugin.js.map +1 -0
- package/plugins/CmsParametersPlugin.d.ts +20 -0
- package/plugins/CmsParametersPlugin.js +21 -0
- package/plugins/CmsParametersPlugin.js.map +1 -0
- package/plugins/StorageTransformPlugin.d.ts +31 -0
- package/{content/plugins/storage → plugins}/StorageTransformPlugin.js +2 -10
- package/plugins/StorageTransformPlugin.js.map +1 -0
- package/plugins/index.d.ts +7 -0
- package/plugins/index.js +82 -0
- package/plugins/index.js.map +1 -0
- package/storage/default.d.ts +2 -0
- package/storage/default.js +24 -0
- package/storage/default.js.map +1 -0
- package/storage/object.d.ts +2 -0
- package/storage/object.js +108 -0
- package/storage/object.js.map +1 -0
- package/types.d.ts +951 -405
- package/types.js +105 -62
- package/types.js.map +1 -0
- package/upgrades/5.33.0/index.d.ts +3 -0
- package/upgrades/5.33.0/index.js +182 -0
- package/upgrades/5.33.0/index.js.map +1 -0
- package/upgrades/index.d.ts +1 -0
- package/upgrades/index.js +12 -0
- package/upgrades/index.js.map +1 -0
- package/utils/access.d.ts +8 -0
- package/utils/access.js +76 -0
- package/utils/access.js.map +1 -0
- package/utils/converters/Converter.d.ts +27 -0
- package/utils/converters/Converter.js +58 -0
- package/utils/converters/Converter.js.map +1 -0
- package/utils/converters/ConverterCollection.d.ts +31 -0
- package/utils/converters/ConverterCollection.js +119 -0
- package/utils/converters/ConverterCollection.js.map +1 -0
- package/utils/converters/valueKeyStorageConverter.d.ts +18 -0
- package/utils/converters/valueKeyStorageConverter.js +123 -0
- package/utils/converters/valueKeyStorageConverter.js.map +1 -0
- package/utils/createTypeFromFields.d.ts +16 -0
- package/utils/createTypeFromFields.js +67 -0
- package/utils/createTypeFromFields.js.map +1 -0
- package/{content/plugins/utils → utils}/createTypeName.d.ts +3 -3
- package/{content/plugins/utils → utils}/createTypeName.js +3 -10
- package/utils/createTypeName.js.map +1 -0
- package/{content/plugins/utils → utils}/entryStorage.d.ts +3 -3
- package/{content/plugins/utils → utils}/entryStorage.js +26 -47
- package/utils/entryStorage.js.map +1 -0
- package/utils/filterAsync.d.ts +1 -0
- package/utils/filterAsync.js +18 -0
- package/utils/filterAsync.js.map +1 -0
- package/utils/getBaseFieldType.d.ts +4 -0
- package/utils/getBaseFieldType.js +10 -0
- package/utils/getBaseFieldType.js.map +1 -0
- package/utils/getEntryDescription.d.ts +2 -0
- package/utils/getEntryDescription.js +17 -0
- package/utils/getEntryDescription.js.map +1 -0
- package/utils/getEntryImage.d.ts +2 -0
- package/utils/getEntryImage.js +17 -0
- package/utils/getEntryImage.js.map +1 -0
- package/utils/getEntryTitle.d.ts +2 -0
- package/{content/plugins/utils → utils}/getEntryTitle.js +7 -15
- package/utils/getEntryTitle.js.map +1 -0
- package/utils/getSchemaFromFieldPlugins.d.ts +9 -0
- package/utils/getSchemaFromFieldPlugins.js +39 -0
- package/utils/getSchemaFromFieldPlugins.js.map +1 -0
- package/utils/ownership.d.ts +8 -0
- package/utils/ownership.js +33 -0
- package/utils/ownership.js.map +1 -0
- package/utils/permissions.d.ts +7 -0
- package/utils/permissions.js +91 -0
- package/utils/permissions.js.map +1 -0
- package/utils/pluralizedTypeName.d.ts +1 -0
- package/{content/plugins/utils → utils}/pluralizedTypeName.js +1 -1
- package/utils/pluralizedTypeName.js.map +1 -0
- package/utils/removeNullValues.d.ts +1 -0
- package/utils/removeNullValues.js +17 -0
- package/utils/removeNullValues.js.map +1 -0
- package/utils/removeUndefinedValues.d.ts +1 -0
- package/utils/removeUndefinedValues.js +17 -0
- package/utils/removeUndefinedValues.js.map +1 -0
- package/utils/renderFields.d.ts +16 -0
- package/{content/plugins/utils → utils}/renderFields.js +14 -12
- package/utils/renderFields.js.map +1 -0
- package/utils/renderGetFilterFields.d.ts +10 -0
- package/utils/renderGetFilterFields.js +48 -0
- package/utils/renderGetFilterFields.js.map +1 -0
- package/utils/renderInputFields.d.ts +15 -0
- package/{content/plugins/utils → utils}/renderInputFields.js +7 -10
- package/utils/renderInputFields.js.map +1 -0
- package/utils/renderListFilterFields.d.ts +11 -0
- package/{content/plugins/utils → utils}/renderListFilterFields.js +36 -22
- package/utils/renderListFilterFields.js.map +1 -0
- package/utils/renderSortEnum.d.ts +12 -0
- package/utils/renderSortEnum.js +42 -0
- package/utils/renderSortEnum.js.map +1 -0
- package/utils/toSlug.d.ts +1 -0
- package/utils/toSlug.js +16 -0
- package/utils/toSlug.js.map +1 -0
- package/validators/dateGte.d.ts +2 -0
- package/{content/plugins/validators → validators}/dateGte.js +4 -11
- package/validators/dateGte.js.map +1 -0
- package/validators/dateLte.d.ts +2 -0
- package/{content/plugins/validators → validators}/dateLte.js +4 -11
- package/validators/dateLte.js.map +1 -0
- package/validators/dynamicZone.d.ts +2 -0
- package/validators/dynamicZone.js +20 -0
- package/validators/dynamicZone.js.map +1 -0
- package/validators/gte.d.ts +2 -0
- package/validators/gte.js +28 -0
- package/validators/gte.js.map +1 -0
- package/validators/in.d.ts +2 -0
- package/validators/in.js +28 -0
- package/validators/in.js.map +1 -0
- package/validators/index.d.ts +1 -0
- package/validators/index.js +22 -0
- package/validators/index.js.map +1 -0
- package/validators/lte.d.ts +2 -0
- package/validators/lte.js +28 -0
- package/validators/lte.js.map +1 -0
- package/validators/maxLength.d.ts +2 -0
- package/validators/maxLength.js +28 -0
- package/validators/maxLength.js.map +1 -0
- package/validators/minLength.d.ts +2 -0
- package/validators/minLength.js +28 -0
- package/validators/minLength.js.map +1 -0
- package/validators/pattern.d.ts +2 -0
- package/validators/pattern.js +41 -0
- package/validators/pattern.js.map +1 -0
- package/validators/patternPlugins/email.d.ts +2 -0
- package/validators/patternPlugins/email.js +18 -0
- package/validators/patternPlugins/email.js.map +1 -0
- package/validators/patternPlugins/index.d.ts +2 -0
- package/validators/patternPlugins/index.js +16 -0
- package/validators/patternPlugins/index.js.map +1 -0
- package/validators/patternPlugins/lowerCase.d.ts +2 -0
- package/validators/patternPlugins/lowerCase.js +18 -0
- package/validators/patternPlugins/lowerCase.js.map +1 -0
- package/validators/patternPlugins/lowerCaseSpace.d.ts +2 -0
- package/validators/patternPlugins/lowerCaseSpace.js +18 -0
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -0
- package/validators/patternPlugins/upperCase.d.ts +2 -0
- package/validators/patternPlugins/upperCase.js +18 -0
- package/validators/patternPlugins/upperCase.js.map +1 -0
- package/validators/patternPlugins/upperCaseSpace.d.ts +2 -0
- package/validators/patternPlugins/upperCaseSpace.js +18 -0
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -0
- package/validators/patternPlugins/url.d.ts +2 -0
- package/validators/patternPlugins/url.js +18 -0
- package/validators/patternPlugins/url.js.map +1 -0
- package/validators/required.d.ts +2 -0
- package/validators/required.js +22 -0
- package/validators/required.js.map +1 -0
- package/validators/timeGte.d.ts +2 -0
- package/{content/plugins/validators → validators}/timeGte.js +5 -11
- package/validators/timeGte.js.map +1 -0
- package/validators/timeLte.d.ts +2 -0
- package/{content/plugins/validators → validators}/timeLte.js +5 -11
- package/validators/timeLte.js.map +1 -0
- package/validators/unique.d.ts +6 -0
- package/validators/unique.js +56 -0
- package/validators/unique.js.map +1 -0
- package/content/contextSetup.d.ts +0 -4
- package/content/contextSetup.js +0 -65
- package/content/graphQLHandlerFactory.d.ts +0 -5
- package/content/graphQLHandlerFactory.js +0 -173
- package/content/plugins/CmsGroupPlugin.d.ts +0 -11
- package/content/plugins/CmsModelPlugin.d.ts +0 -11
- package/content/plugins/CmsModelPlugin.js +0 -24
- package/content/plugins/buildSchemaPlugins.d.ts +0 -7
- package/content/plugins/buildSchemaPlugins.js +0 -29
- package/content/plugins/crud/contentEntry/afterDelete.d.ts +0 -7
- package/content/plugins/crud/contentEntry/beforeCreate.d.ts +0 -7
- package/content/plugins/crud/contentEntry/beforeUpdate.d.ts +0 -7
- package/content/plugins/crud/contentEntry/entryDataValidation.d.ts +0 -4
- package/content/plugins/crud/contentEntry.crud.js +0 -931
- package/content/plugins/crud/contentModel/afterCreate.d.ts +0 -7
- package/content/plugins/crud/contentModel/afterCreate.js +0 -18
- package/content/plugins/crud/contentModel/afterDelete.d.ts +0 -7
- package/content/plugins/crud/contentModel/afterDelete.js +0 -18
- package/content/plugins/crud/contentModel/afterUpdate.d.ts +0 -7
- package/content/plugins/crud/contentModel/afterUpdate.js +0 -18
- package/content/plugins/crud/contentModel/beforeCreate.d.ts +0 -9
- package/content/plugins/crud/contentModel/beforeDelete.d.ts +0 -9
- package/content/plugins/crud/contentModel/beforeUpdate.d.ts +0 -9
- package/content/plugins/crud/contentModel/beforeUpdate.js +0 -128
- package/content/plugins/crud/contentModel/contentModelManagerFactory.d.ts +0 -2
- package/content/plugins/crud/contentModel/createFieldModels.d.ts +0 -2
- package/content/plugins/crud/contentModel/idValidation.d.ts +0 -2
- package/content/plugins/crud/contentModel/validateLayout.d.ts +0 -2
- package/content/plugins/crud/contentModel.crud.js +0 -425
- package/content/plugins/crud/contentModelGroup/beforeCreate.d.ts +0 -9
- package/content/plugins/crud/contentModelGroup/beforeDelete.d.ts +0 -9
- package/content/plugins/crud/contentModelGroup/beforeUpdate.d.ts +0 -8
- package/content/plugins/crud/contentModelGroup.crud.js +0 -351
- package/content/plugins/crud/index.d.ts +0 -6
- package/content/plugins/crud/index.js +0 -100
- package/content/plugins/graphqlFields/boolean.d.ts +0 -3
- package/content/plugins/graphqlFields/boolean.js +0 -69
- package/content/plugins/graphqlFields/datetime.d.ts +0 -3
- package/content/plugins/graphqlFields/datetime.js +0 -83
- package/content/plugins/graphqlFields/file.d.ts +0 -3
- package/content/plugins/graphqlFields/file.js +0 -49
- package/content/plugins/graphqlFields/index.d.ts +0 -2
- package/content/plugins/graphqlFields/index.js +0 -30
- package/content/plugins/graphqlFields/longText.d.ts +0 -3
- package/content/plugins/graphqlFields/longText.js +0 -62
- package/content/plugins/graphqlFields/number.d.ts +0 -3
- package/content/plugins/graphqlFields/number.js +0 -75
- package/content/plugins/graphqlFields/object.d.ts +0 -3
- package/content/plugins/graphqlFields/object.js +0 -180
- package/content/plugins/graphqlFields/ref.d.ts +0 -3
- package/content/plugins/graphqlFields/ref.js +0 -205
- package/content/plugins/graphqlFields/richText.d.ts +0 -3
- package/content/plugins/graphqlFields/richText.js +0 -55
- package/content/plugins/graphqlFields/text.d.ts +0 -3
- package/content/plugins/graphqlFields/text.js +0 -72
- package/content/plugins/internalSecurity/InternalAuthenticationPlugin.d.ts +0 -8
- package/content/plugins/internalSecurity/InternalAuthenticationPlugin.js +0 -54
- package/content/plugins/internalSecurity/InternalAuthorizationPlugin.d.ts +0 -7
- package/content/plugins/internalSecurity/InternalAuthorizationPlugin.js +0 -35
- package/content/plugins/modelManager/DefaultCmsModelManager.d.ts +0 -15
- package/content/plugins/modelManager/index.d.ts +0 -3
- package/content/plugins/schema/baseSchema.d.ts +0 -4
- package/content/plugins/schema/baseSchema.js +0 -98
- package/content/plugins/schema/contentEntries.d.ts +0 -4
- package/content/plugins/schema/contentEntries.js +0 -166
- package/content/plugins/schema/contentModelGroups.d.ts +0 -4
- package/content/plugins/schema/contentModels.d.ts +0 -4
- package/content/plugins/schema/createFieldResolvers.d.ts +0 -19
- package/content/plugins/schema/createFieldResolvers.js +0 -92
- package/content/plugins/schema/createManageResolvers.d.ts +0 -11
- package/content/plugins/schema/createManageResolvers.js +0 -135
- package/content/plugins/schema/createManageSDL.d.ts +0 -9
- package/content/plugins/schema/createManageSDL.js +0 -153
- package/content/plugins/schema/createPreviewResolvers.d.ts +0 -10
- package/content/plugins/schema/createPreviewResolvers.js +0 -55
- package/content/plugins/schema/createReadResolvers.d.ts +0 -10
- package/content/plugins/schema/createReadResolvers.js +0 -55
- package/content/plugins/schema/createReadSDL.d.ts +0 -9
- package/content/plugins/schema/createReadSDL.js +0 -96
- package/content/plugins/schema/resolvers/commonFieldResolvers.d.ts +0 -6
- package/content/plugins/schema/resolvers/manage/resolveCreate.d.ts +0 -6
- package/content/plugins/schema/resolvers/manage/resolveCreateFrom.d.ts +0 -7
- package/content/plugins/schema/resolvers/manage/resolveDelete.d.ts +0 -2
- package/content/plugins/schema/resolvers/manage/resolveGet.d.ts +0 -2
- package/content/plugins/schema/resolvers/manage/resolveGetByIds.d.ts +0 -2
- package/content/plugins/schema/resolvers/manage/resolveGetRevisions.d.ts +0 -2
- package/content/plugins/schema/resolvers/manage/resolveList.d.ts +0 -2
- package/content/plugins/schema/resolvers/manage/resolvePublish.d.ts +0 -2
- package/content/plugins/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -6
- package/content/plugins/schema/resolvers/manage/resolveRequestChanges.js +0 -23
- package/content/plugins/schema/resolvers/manage/resolveRequestReview.d.ts +0 -6
- package/content/plugins/schema/resolvers/manage/resolveRequestReview.js +0 -23
- package/content/plugins/schema/resolvers/manage/resolveUnpublish.d.ts +0 -2
- package/content/plugins/schema/resolvers/manage/resolveUpdate.d.ts +0 -7
- package/content/plugins/schema/resolvers/preview/resolveGet.d.ts +0 -2
- package/content/plugins/schema/resolvers/preview/resolveGet.js +0 -38
- package/content/plugins/schema/resolvers/preview/resolveList.d.ts +0 -2
- package/content/plugins/schema/resolvers/read/resolveGet.d.ts +0 -2
- package/content/plugins/schema/resolvers/read/resolveGet.js +0 -38
- package/content/plugins/schema/resolvers/read/resolveList.d.ts +0 -2
- package/content/plugins/schema/schemaPlugins.d.ts +0 -3
- package/content/plugins/schema/schemaPlugins.js +0 -92
- package/content/plugins/storage/StorageTransformPlugin.d.ts +0 -30
- package/content/plugins/storage/default.d.ts +0 -3
- package/content/plugins/storage/default.js +0 -28
- package/content/plugins/storage/object.d.ts +0 -3
- package/content/plugins/storage/object.js +0 -119
- package/content/plugins/utils/getEntryTitle.d.ts +0 -2
- package/content/plugins/utils/getSchemaFromFieldPlugins.d.ts +0 -11
- package/content/plugins/utils/getSchemaFromFieldPlugins.js +0 -30
- package/content/plugins/utils/pluralizedTypeName.d.ts +0 -1
- package/content/plugins/utils/renderFields.d.ts +0 -16
- package/content/plugins/utils/renderGetFilterFields.d.ts +0 -9
- package/content/plugins/utils/renderGetFilterFields.js +0 -41
- package/content/plugins/utils/renderInputFields.d.ts +0 -14
- package/content/plugins/utils/renderListFilterFields.d.ts +0 -10
- package/content/plugins/utils/renderSortEnum.d.ts +0 -9
- package/content/plugins/utils/renderSortEnum.js +0 -32
- package/content/plugins/validators/dateGte.d.ts +0 -3
- package/content/plugins/validators/dateLte.d.ts +0 -3
- package/content/plugins/validators/gte.d.ts +0 -3
- package/content/plugins/validators/gte.js +0 -32
- package/content/plugins/validators/in.d.ts +0 -3
- package/content/plugins/validators/in.js +0 -32
- package/content/plugins/validators/index.d.ts +0 -2
- package/content/plugins/validators/index.js +0 -36
- package/content/plugins/validators/lte.d.ts +0 -3
- package/content/plugins/validators/lte.js +0 -32
- package/content/plugins/validators/maxLength.d.ts +0 -3
- package/content/plugins/validators/maxLength.js +0 -32
- package/content/plugins/validators/minLength.d.ts +0 -3
- package/content/plugins/validators/minLength.js +0 -32
- package/content/plugins/validators/pattern.d.ts +0 -3
- package/content/plugins/validators/pattern.js +0 -47
- package/content/plugins/validators/patternPlugins/email.d.ts +0 -3
- package/content/plugins/validators/patternPlugins/email.js +0 -17
- package/content/plugins/validators/patternPlugins/index.d.ts +0 -2
- package/content/plugins/validators/patternPlugins/index.js +0 -19
- package/content/plugins/validators/patternPlugins/lowerCase.d.ts +0 -3
- package/content/plugins/validators/patternPlugins/lowerCase.js +0 -17
- package/content/plugins/validators/patternPlugins/upperCase.d.ts +0 -3
- package/content/plugins/validators/patternPlugins/upperCase.js +0 -17
- package/content/plugins/validators/patternPlugins/url.d.ts +0 -3
- package/content/plugins/validators/patternPlugins/url.js +0 -17
- package/content/plugins/validators/required.d.ts +0 -3
- package/content/plugins/validators/required.js +0 -25
- package/content/plugins/validators/timeGte.d.ts +0 -3
- package/content/plugins/validators/timeLte.d.ts +0 -3
- package/migrateCMSPermissions.d.ts +0 -17
- package/migrateCMSPermissions.js +0 -193
- package/plugins/context.d.ts +0 -4
- package/plugins/context.js +0 -34
- package/plugins/crud/index.d.ts +0 -6
- package/plugins/crud/index.js +0 -100
- package/plugins/crud/settings.crud.js +0 -93
- package/plugins/crud/system.crud.js +0 -182
- package/plugins/graphql/system.d.ts +0 -17
- package/plugins/graphql.d.ts +0 -2
- package/plugins/graphql.js +0 -79
- package/plugins/upgrades/index.d.ts +0 -2
- package/plugins/upgrades/index.js +0 -14
- package/plugins/upgrades/v5.5.0/helpers.d.ts +0 -6
- package/plugins/upgrades/v5.5.0/helpers.js +0 -10
- package/plugins/upgrades/v5.5.0/index.d.ts +0 -4
- package/plugins/upgrades/v5.5.0/index.js +0 -129
- package/transformers.d.ts +0 -2
- package/transformers.js +0 -25
- package/utils.d.ts +0 -25
- package/utils.js +0 -251
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createModelsCrud = void 0;
|
|
8
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
9
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
10
|
+
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
11
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
12
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
13
|
+
var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
|
|
14
|
+
var _pubsub = require("@webiny/pubsub");
|
|
15
|
+
var _beforeCreate = require("./contentModel/beforeCreate");
|
|
16
|
+
var _beforeUpdate = require("./contentModel/beforeUpdate");
|
|
17
|
+
var _beforeDelete = require("./contentModel/beforeDelete");
|
|
18
|
+
var _afterCreate = require("./contentModel/afterCreate");
|
|
19
|
+
var _afterUpdate = require("./contentModel/afterUpdate");
|
|
20
|
+
var _afterDelete = require("./contentModel/afterDelete");
|
|
21
|
+
var _afterCreateFrom = require("./contentModel/afterCreateFrom");
|
|
22
|
+
var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
|
|
23
|
+
var _permissions = require("../utils/permissions");
|
|
24
|
+
var _filterAsync = require("../utils/filterAsync");
|
|
25
|
+
var _ownership = require("../utils/ownership");
|
|
26
|
+
var _access = require("../utils/access");
|
|
27
|
+
var _validation = require("./contentModel/validation");
|
|
28
|
+
var _utils = require("@webiny/utils");
|
|
29
|
+
var _defaultFields = require("./contentModel/defaultFields");
|
|
30
|
+
var _removeUndefinedValues = require("../utils/removeUndefinedValues");
|
|
31
|
+
var _modelApiName = require("./contentModel/compatibility/modelApiName");
|
|
32
|
+
const _excluded = ["defaultFields"];
|
|
33
|
+
/**
|
|
34
|
+
* Given a model, return an array of tags ensuring the `type` tag is set.
|
|
35
|
+
*/
|
|
36
|
+
const ensureTypeTag = model => {
|
|
37
|
+
// Let's make sure we have a `type` tag assigned.
|
|
38
|
+
// If `type` tag is not set, set it to a default one (`model`).
|
|
39
|
+
const tags = model.tags || [];
|
|
40
|
+
if (!tags.some(tag => tag.startsWith("type:"))) {
|
|
41
|
+
tags.push("type:model");
|
|
42
|
+
}
|
|
43
|
+
return tags;
|
|
44
|
+
};
|
|
45
|
+
const createModelsCrud = params => {
|
|
46
|
+
const {
|
|
47
|
+
getTenant,
|
|
48
|
+
getIdentity,
|
|
49
|
+
getLocale,
|
|
50
|
+
storageOperations,
|
|
51
|
+
context
|
|
52
|
+
} = params;
|
|
53
|
+
const loaders = {
|
|
54
|
+
listModels: new _dataloader.default(async () => {
|
|
55
|
+
const models = await storageOperations.models.list({
|
|
56
|
+
where: {
|
|
57
|
+
tenant: getTenant().id,
|
|
58
|
+
locale: getLocale().code
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
return [models.map(model => {
|
|
62
|
+
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
63
|
+
tags: ensureTypeTag(model),
|
|
64
|
+
tenant: model.tenant || getTenant().id,
|
|
65
|
+
locale: model.locale || getLocale().code,
|
|
66
|
+
/**
|
|
67
|
+
* TODO: remove in v5.36.0
|
|
68
|
+
* This is for backward compatibility while migrations are not yet executed.
|
|
69
|
+
*/
|
|
70
|
+
singularApiName: (0, _modelApiName.ensureSingularApiName)(model),
|
|
71
|
+
pluralApiName: (0, _modelApiName.ensurePluralApiName)(model)
|
|
72
|
+
});
|
|
73
|
+
})];
|
|
74
|
+
})
|
|
75
|
+
};
|
|
76
|
+
const clearModelsCache = () => {
|
|
77
|
+
for (const loader of Object.values(loaders)) {
|
|
78
|
+
loader.clearAll();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const managers = new Map();
|
|
82
|
+
const updateManager = async (context, model) => {
|
|
83
|
+
const manager = await (0, _contentModelManagerFactory.contentModelManagerFactory)(context, model);
|
|
84
|
+
managers.set(model.modelId, manager);
|
|
85
|
+
return manager;
|
|
86
|
+
};
|
|
87
|
+
const checkModelPermissions = check => {
|
|
88
|
+
return (0, _permissions.checkPermissions)(context, "cms.contentModel", {
|
|
89
|
+
rwd: check
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
const getModelsAsPlugins = () => {
|
|
93
|
+
const tenant = getTenant().id;
|
|
94
|
+
const locale = getLocale().code;
|
|
95
|
+
return context.plugins.byType(_CmsModelPlugin.CmsModelPlugin.type)
|
|
96
|
+
/**
|
|
97
|
+
* We need to filter out models that are not for this tenant or locale.
|
|
98
|
+
* If it does not have tenant or locale define, it is for every locale and tenant
|
|
99
|
+
*/.filter(plugin => {
|
|
100
|
+
const {
|
|
101
|
+
tenant: modelTenant,
|
|
102
|
+
locale: modelLocale
|
|
103
|
+
} = plugin.contentModel;
|
|
104
|
+
if (modelTenant && modelTenant !== tenant) {
|
|
105
|
+
return false;
|
|
106
|
+
} else if (modelLocale && modelLocale !== locale) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}).map(plugin => {
|
|
111
|
+
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
|
|
112
|
+
tags: ensureTypeTag(plugin.contentModel),
|
|
113
|
+
tenant,
|
|
114
|
+
locale,
|
|
115
|
+
webinyVersion: context.WEBINY_VERSION
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
const modelsGet = async modelId => {
|
|
120
|
+
const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);
|
|
121
|
+
if (pluginModel) {
|
|
122
|
+
return pluginModel;
|
|
123
|
+
}
|
|
124
|
+
const model = await storageOperations.models.get({
|
|
125
|
+
tenant: getTenant().id,
|
|
126
|
+
locale: getLocale().code,
|
|
127
|
+
modelId
|
|
128
|
+
});
|
|
129
|
+
if (!model) {
|
|
130
|
+
throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
|
|
131
|
+
}
|
|
132
|
+
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
133
|
+
tags: ensureTypeTag(model),
|
|
134
|
+
tenant: model.tenant || getTenant().id,
|
|
135
|
+
locale: model.locale || getLocale().code
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
const modelsList = async () => {
|
|
139
|
+
const databaseModels = await loaders.listModels.load("listModels");
|
|
140
|
+
const pluginsModels = getModelsAsPlugins();
|
|
141
|
+
return databaseModels.concat(pluginsModels);
|
|
142
|
+
};
|
|
143
|
+
const listModels = async () => {
|
|
144
|
+
const permission = await checkModelPermissions("r");
|
|
145
|
+
const models = await modelsList();
|
|
146
|
+
return (0, _filterAsync.filterAsync)(models, async model => {
|
|
147
|
+
if (!(0, _ownership.validateOwnership)(context, permission, model)) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
return (0, _access.validateModelAccess)(context, model);
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
const getModel = async modelId => {
|
|
154
|
+
const permission = await checkModelPermissions("r");
|
|
155
|
+
const model = await modelsGet(modelId);
|
|
156
|
+
(0, _ownership.checkOwnership)(context, permission, model);
|
|
157
|
+
await (0, _access.checkModelAccess)(context, model);
|
|
158
|
+
return model;
|
|
159
|
+
};
|
|
160
|
+
const getModelManager = async target => {
|
|
161
|
+
const modelId = typeof target === "string" ? target : target.modelId;
|
|
162
|
+
if (managers.has(modelId)) {
|
|
163
|
+
return managers.get(modelId);
|
|
164
|
+
}
|
|
165
|
+
const models = await modelsList();
|
|
166
|
+
const model = models.find(m => m.modelId === modelId);
|
|
167
|
+
if (!model) {
|
|
168
|
+
throw new _handlerGraphql.NotFoundError(`There is no content model "${modelId}".`);
|
|
169
|
+
}
|
|
170
|
+
return await updateManager(context, model);
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Create
|
|
175
|
+
*/
|
|
176
|
+
const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
|
|
177
|
+
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
178
|
+
const onModelCreateError = (0, _pubsub.createTopic)("cms.onModelCreateError");
|
|
179
|
+
/**
|
|
180
|
+
* Create from / clone
|
|
181
|
+
*/
|
|
182
|
+
const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
|
|
183
|
+
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
184
|
+
const onModelCreateFromError = (0, _pubsub.createTopic)("cms.onModelCreateFromError");
|
|
185
|
+
/**
|
|
186
|
+
* Update
|
|
187
|
+
*/
|
|
188
|
+
const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
|
|
189
|
+
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
190
|
+
const onModelUpdateError = (0, _pubsub.createTopic)("cms.onModelUpdateError");
|
|
191
|
+
/**
|
|
192
|
+
* Delete
|
|
193
|
+
*/
|
|
194
|
+
const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
|
|
195
|
+
const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
|
|
196
|
+
const onModelDeleteError = (0, _pubsub.createTopic)("cms.onModelDeleteError");
|
|
197
|
+
/**
|
|
198
|
+
* Initialize
|
|
199
|
+
*/
|
|
200
|
+
const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
|
|
201
|
+
/**
|
|
202
|
+
* We need to assign some default behaviors.
|
|
203
|
+
*/
|
|
204
|
+
(0, _beforeCreate.assignModelBeforeCreate)({
|
|
205
|
+
onModelBeforeCreate,
|
|
206
|
+
onModelBeforeCreateFrom,
|
|
207
|
+
context,
|
|
208
|
+
storageOperations
|
|
209
|
+
});
|
|
210
|
+
(0, _afterCreate.assignModelAfterCreate)({
|
|
211
|
+
context,
|
|
212
|
+
onModelAfterCreate
|
|
213
|
+
});
|
|
214
|
+
(0, _beforeUpdate.assignModelBeforeUpdate)({
|
|
215
|
+
onModelBeforeUpdate,
|
|
216
|
+
context
|
|
217
|
+
});
|
|
218
|
+
(0, _afterUpdate.assignModelAfterUpdate)({
|
|
219
|
+
context,
|
|
220
|
+
onModelAfterUpdate
|
|
221
|
+
});
|
|
222
|
+
(0, _afterCreateFrom.assignModelAfterCreateFrom)({
|
|
223
|
+
context,
|
|
224
|
+
onModelAfterCreateFrom
|
|
225
|
+
});
|
|
226
|
+
(0, _beforeDelete.assignModelBeforeDelete)({
|
|
227
|
+
onModelBeforeDelete,
|
|
228
|
+
plugins: context.plugins,
|
|
229
|
+
storageOperations
|
|
230
|
+
});
|
|
231
|
+
(0, _afterDelete.assignModelAfterDelete)({
|
|
232
|
+
context,
|
|
233
|
+
onModelAfterDelete
|
|
234
|
+
});
|
|
235
|
+
return {
|
|
236
|
+
/**
|
|
237
|
+
* Deprecated - will be removed in 5.36.0
|
|
238
|
+
*/
|
|
239
|
+
onBeforeModelCreate: onModelBeforeCreate,
|
|
240
|
+
onAfterModelCreate: onModelAfterCreate,
|
|
241
|
+
onBeforeModelCreateFrom: onModelBeforeCreateFrom,
|
|
242
|
+
onAfterModelCreateFrom: onModelAfterCreateFrom,
|
|
243
|
+
onBeforeModelUpdate: onModelBeforeUpdate,
|
|
244
|
+
onAfterModelUpdate: onModelAfterUpdate,
|
|
245
|
+
onBeforeModelDelete: onModelBeforeDelete,
|
|
246
|
+
onAfterModelDelete: onModelAfterDelete,
|
|
247
|
+
/**
|
|
248
|
+
* Released in 5.34.0
|
|
249
|
+
*/
|
|
250
|
+
onModelBeforeCreate,
|
|
251
|
+
onModelAfterCreate,
|
|
252
|
+
onModelCreateError,
|
|
253
|
+
onModelBeforeCreateFrom,
|
|
254
|
+
onModelAfterCreateFrom,
|
|
255
|
+
onModelCreateFromError,
|
|
256
|
+
onModelBeforeUpdate,
|
|
257
|
+
onModelAfterUpdate,
|
|
258
|
+
onModelUpdateError,
|
|
259
|
+
onModelBeforeDelete,
|
|
260
|
+
onModelAfterDelete,
|
|
261
|
+
onModelDeleteError,
|
|
262
|
+
onModelInitialize,
|
|
263
|
+
clearModelsCache,
|
|
264
|
+
getModel,
|
|
265
|
+
listModels,
|
|
266
|
+
async createModel(input) {
|
|
267
|
+
await checkModelPermissions("w");
|
|
268
|
+
const result = await (0, _validation.createModelCreateValidation)().safeParseAsync(input);
|
|
269
|
+
if (!result.success) {
|
|
270
|
+
throw (0, _utils.createZodError)(result.error);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* We need to extract the defaultFields because it is not for the CmsModel object.
|
|
274
|
+
*/
|
|
275
|
+
const _removeUndefinedValue = (0, _removeUndefinedValues.removeUndefinedValues)(result.data),
|
|
276
|
+
{
|
|
277
|
+
defaultFields
|
|
278
|
+
} = _removeUndefinedValue,
|
|
279
|
+
data = (0, _objectWithoutProperties2.default)(_removeUndefinedValue, _excluded);
|
|
280
|
+
if (defaultFields) {
|
|
281
|
+
(0, _defaultFields.assignModelDefaultFields)(data);
|
|
282
|
+
}
|
|
283
|
+
context.security.disableAuthorization();
|
|
284
|
+
const group = await context.cms.getGroup(data.group);
|
|
285
|
+
context.security.enableAuthorization();
|
|
286
|
+
if (!group) {
|
|
287
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
288
|
+
}
|
|
289
|
+
const identity = getIdentity();
|
|
290
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
|
|
291
|
+
modelId: data.modelId || "",
|
|
292
|
+
singularApiName: data.singularApiName,
|
|
293
|
+
pluralApiName: data.pluralApiName,
|
|
294
|
+
titleFieldId: "id",
|
|
295
|
+
descriptionFieldId: null,
|
|
296
|
+
imageFieldId: null,
|
|
297
|
+
description: data.description || "",
|
|
298
|
+
locale: getLocale().code,
|
|
299
|
+
tenant: getTenant().id,
|
|
300
|
+
group: {
|
|
301
|
+
id: group.id,
|
|
302
|
+
name: group.name
|
|
303
|
+
},
|
|
304
|
+
createdBy: {
|
|
305
|
+
id: identity.id,
|
|
306
|
+
displayName: identity.displayName,
|
|
307
|
+
type: identity.type
|
|
308
|
+
},
|
|
309
|
+
createdOn: new Date().toISOString(),
|
|
310
|
+
savedOn: new Date().toISOString(),
|
|
311
|
+
lockedFields: [],
|
|
312
|
+
webinyVersion: context.WEBINY_VERSION
|
|
313
|
+
});
|
|
314
|
+
model.tags = ensureTypeTag(model);
|
|
315
|
+
try {
|
|
316
|
+
await onModelBeforeCreate.publish({
|
|
317
|
+
input: data,
|
|
318
|
+
model
|
|
319
|
+
});
|
|
320
|
+
const createdModel = await storageOperations.models.create({
|
|
321
|
+
model
|
|
322
|
+
});
|
|
323
|
+
loaders.listModels.clearAll();
|
|
324
|
+
await updateManager(context, model);
|
|
325
|
+
await onModelAfterCreate.publish({
|
|
326
|
+
input: data,
|
|
327
|
+
model: createdModel
|
|
328
|
+
});
|
|
329
|
+
return createdModel;
|
|
330
|
+
} catch (ex) {
|
|
331
|
+
await onModelCreateError.publish({
|
|
332
|
+
input: data,
|
|
333
|
+
model,
|
|
334
|
+
error: ex
|
|
335
|
+
});
|
|
336
|
+
throw ex;
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
/**
|
|
340
|
+
* Method does not check for permissions or ownership.
|
|
341
|
+
* @internal
|
|
342
|
+
*/
|
|
343
|
+
async updateModelDirect(params) {
|
|
344
|
+
const {
|
|
345
|
+
model: initialModel,
|
|
346
|
+
original
|
|
347
|
+
} = params;
|
|
348
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialModel), {}, {
|
|
349
|
+
tenant: initialModel.tenant || getTenant().id,
|
|
350
|
+
locale: initialModel.locale || getLocale().code,
|
|
351
|
+
webinyVersion: context.WEBINY_VERSION
|
|
352
|
+
});
|
|
353
|
+
try {
|
|
354
|
+
await onModelBeforeUpdate.publish({
|
|
355
|
+
input: {},
|
|
356
|
+
original,
|
|
357
|
+
model
|
|
358
|
+
});
|
|
359
|
+
const resultModel = await storageOperations.models.update({
|
|
360
|
+
model
|
|
361
|
+
});
|
|
362
|
+
await updateManager(context, resultModel);
|
|
363
|
+
loaders.listModels.clearAll();
|
|
364
|
+
await onModelAfterUpdate.publish({
|
|
365
|
+
input: {},
|
|
366
|
+
original,
|
|
367
|
+
model: resultModel
|
|
368
|
+
});
|
|
369
|
+
return resultModel;
|
|
370
|
+
} catch (ex) {
|
|
371
|
+
await onModelUpdateError.publish({
|
|
372
|
+
input: {},
|
|
373
|
+
original,
|
|
374
|
+
model,
|
|
375
|
+
error: ex
|
|
376
|
+
});
|
|
377
|
+
throw ex;
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
async createModelFrom(modelId, userInput) {
|
|
381
|
+
await checkModelPermissions("w");
|
|
382
|
+
/**
|
|
383
|
+
* Get a model record; this will also perform ownership validation.
|
|
384
|
+
*/
|
|
385
|
+
const original = await getModel(modelId);
|
|
386
|
+
const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync((0, _objectSpread2.default)((0, _objectSpread2.default)({}, userInput), {}, {
|
|
387
|
+
description: userInput.description || original.description
|
|
388
|
+
}));
|
|
389
|
+
if (!result.success) {
|
|
390
|
+
throw (0, _utils.createZodError)(result.error);
|
|
391
|
+
}
|
|
392
|
+
const data = (0, _removeUndefinedValues.removeUndefinedValues)(result.data);
|
|
393
|
+
const locale = await context.i18n.getLocale(data.locale || original.locale);
|
|
394
|
+
if (!locale) {
|
|
395
|
+
throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
399
|
+
*/
|
|
400
|
+
const group = await context.cms.storageOperations.groups.get({
|
|
401
|
+
id: data.group,
|
|
402
|
+
tenant: original.tenant,
|
|
403
|
+
locale: locale.code
|
|
404
|
+
});
|
|
405
|
+
if (!group) {
|
|
406
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
407
|
+
}
|
|
408
|
+
const identity = getIdentity();
|
|
409
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
|
|
410
|
+
singularApiName: data.singularApiName,
|
|
411
|
+
pluralApiName: data.pluralApiName,
|
|
412
|
+
locale: locale.code,
|
|
413
|
+
group: {
|
|
414
|
+
id: group.id,
|
|
415
|
+
name: group.name
|
|
416
|
+
},
|
|
417
|
+
icon: data.icon,
|
|
418
|
+
name: data.name,
|
|
419
|
+
modelId: data.modelId || "",
|
|
420
|
+
description: data.description || "",
|
|
421
|
+
createdBy: {
|
|
422
|
+
id: identity.id,
|
|
423
|
+
displayName: identity.displayName,
|
|
424
|
+
type: identity.type
|
|
425
|
+
},
|
|
426
|
+
createdOn: new Date().toISOString(),
|
|
427
|
+
savedOn: new Date().toISOString(),
|
|
428
|
+
lockedFields: [],
|
|
429
|
+
webinyVersion: context.WEBINY_VERSION
|
|
430
|
+
});
|
|
431
|
+
try {
|
|
432
|
+
await onModelBeforeCreateFrom.publish({
|
|
433
|
+
input: data,
|
|
434
|
+
model,
|
|
435
|
+
original
|
|
436
|
+
});
|
|
437
|
+
const createdModel = await storageOperations.models.create({
|
|
438
|
+
model
|
|
439
|
+
});
|
|
440
|
+
loaders.listModels.clearAll();
|
|
441
|
+
await updateManager(context, model);
|
|
442
|
+
await onModelAfterCreateFrom.publish({
|
|
443
|
+
input: data,
|
|
444
|
+
original,
|
|
445
|
+
model: createdModel
|
|
446
|
+
});
|
|
447
|
+
return createdModel;
|
|
448
|
+
} catch (ex) {
|
|
449
|
+
await onModelCreateFromError.publish({
|
|
450
|
+
input: data,
|
|
451
|
+
original,
|
|
452
|
+
model,
|
|
453
|
+
error: ex
|
|
454
|
+
});
|
|
455
|
+
throw ex;
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
async updateModel(modelId, input) {
|
|
459
|
+
await checkModelPermissions("w");
|
|
460
|
+
|
|
461
|
+
// Get a model record; this will also perform ownership validation.
|
|
462
|
+
const original = await getModel(modelId);
|
|
463
|
+
const result = await (0, _validation.createModelUpdateValidation)().safeParseAsync(input);
|
|
464
|
+
if (!result.success) {
|
|
465
|
+
throw (0, _utils.createZodError)(result.error);
|
|
466
|
+
}
|
|
467
|
+
const data = (0, _removeUndefinedValues.removeUndefinedValues)(result.data);
|
|
468
|
+
if (Object.keys(data).length === 0) {
|
|
469
|
+
/**
|
|
470
|
+
* We need to return the original if nothing is to be updated.
|
|
471
|
+
*/
|
|
472
|
+
return original;
|
|
473
|
+
}
|
|
474
|
+
let group = {
|
|
475
|
+
id: original.group.id,
|
|
476
|
+
name: original.group.name
|
|
477
|
+
};
|
|
478
|
+
if (data.group) {
|
|
479
|
+
context.security.disableAuthorization();
|
|
480
|
+
const groupData = await context.cms.getGroup(data.group);
|
|
481
|
+
context.security.enableAuthorization();
|
|
482
|
+
if (!groupData) {
|
|
483
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
484
|
+
}
|
|
485
|
+
group = {
|
|
486
|
+
id: groupData.id,
|
|
487
|
+
name: groupData.name
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
|
|
491
|
+
titleFieldId: data.titleFieldId === undefined ? original.titleFieldId : data.titleFieldId,
|
|
492
|
+
descriptionFieldId: data.descriptionFieldId === undefined ? original.descriptionFieldId : data.descriptionFieldId,
|
|
493
|
+
imageFieldId: data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,
|
|
494
|
+
group,
|
|
495
|
+
description: data.description || original.description,
|
|
496
|
+
tenant: original.tenant || getTenant().id,
|
|
497
|
+
locale: original.locale || getLocale().code,
|
|
498
|
+
webinyVersion: context.WEBINY_VERSION,
|
|
499
|
+
savedOn: new Date().toISOString()
|
|
500
|
+
});
|
|
501
|
+
model.tags = ensureTypeTag(model);
|
|
502
|
+
try {
|
|
503
|
+
await onModelBeforeUpdate.publish({
|
|
504
|
+
input: data,
|
|
505
|
+
original,
|
|
506
|
+
model
|
|
507
|
+
});
|
|
508
|
+
const resultModel = await storageOperations.models.update({
|
|
509
|
+
model
|
|
510
|
+
});
|
|
511
|
+
await updateManager(context, resultModel);
|
|
512
|
+
await onModelAfterUpdate.publish({
|
|
513
|
+
input: data,
|
|
514
|
+
original,
|
|
515
|
+
model: resultModel
|
|
516
|
+
});
|
|
517
|
+
return resultModel;
|
|
518
|
+
} catch (ex) {
|
|
519
|
+
await onModelUpdateError.publish({
|
|
520
|
+
input: data,
|
|
521
|
+
model,
|
|
522
|
+
original,
|
|
523
|
+
error: ex
|
|
524
|
+
});
|
|
525
|
+
throw ex;
|
|
526
|
+
}
|
|
527
|
+
},
|
|
528
|
+
async deleteModel(modelId) {
|
|
529
|
+
await checkModelPermissions("d");
|
|
530
|
+
const model = await getModel(modelId);
|
|
531
|
+
try {
|
|
532
|
+
await onModelBeforeDelete.publish({
|
|
533
|
+
model
|
|
534
|
+
});
|
|
535
|
+
try {
|
|
536
|
+
await storageOperations.models.delete({
|
|
537
|
+
model
|
|
538
|
+
});
|
|
539
|
+
} catch (ex) {
|
|
540
|
+
throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
|
|
541
|
+
error: ex,
|
|
542
|
+
modelId: model.modelId
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
await onModelAfterDelete.publish({
|
|
546
|
+
model
|
|
547
|
+
});
|
|
548
|
+
managers.delete(model.modelId);
|
|
549
|
+
} catch (ex) {
|
|
550
|
+
await onModelDeleteError.publish({
|
|
551
|
+
model,
|
|
552
|
+
error: ex
|
|
553
|
+
});
|
|
554
|
+
throw ex;
|
|
555
|
+
}
|
|
556
|
+
},
|
|
557
|
+
async initializeModel(modelId, data) {
|
|
558
|
+
/**
|
|
559
|
+
* We require that users have write permissions to initialize models.
|
|
560
|
+
* Maybe introduce another permission for it?
|
|
561
|
+
*/
|
|
562
|
+
await checkModelPermissions("w");
|
|
563
|
+
const model = await getModel(modelId);
|
|
564
|
+
await onModelInitialize.publish({
|
|
565
|
+
model,
|
|
566
|
+
data
|
|
567
|
+
});
|
|
568
|
+
return true;
|
|
569
|
+
},
|
|
570
|
+
getModelManager,
|
|
571
|
+
getEntryManager: async model => {
|
|
572
|
+
return getModelManager(model);
|
|
573
|
+
},
|
|
574
|
+
getManagers: () => managers,
|
|
575
|
+
getEntryManagers: () => managers
|
|
576
|
+
};
|
|
577
|
+
};
|
|
578
|
+
exports.createModelsCrud = createModelsCrud;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ensureTypeTag","model","tags","some","tag","startsWith","push","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","singularApiName","ensureSingularApiName","pluralApiName","ensurePluralApiName","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","modelTenant","modelLocale","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","input","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","removeUndefinedValues","data","defaultFields","assignModelDefaultFields","security","disableAuthorization","group","cms","getGroup","enableAuthorization","identity","titleFieldId","descriptionFieldId","imageFieldId","description","name","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","publish","createdModel","create","ex","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","userInput","createModelCreateFromValidation","i18n","groups","icon","updateModel","createModelUpdateValidation","keys","length","groupData","undefined","deleteModel","delete","WebinyError","message","initializeModel","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n HeadlessCmsStorageOperations,\n OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelInitializeParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelUpdateInput,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelUpdateErrorTopicParams,\n OnModelDeleteErrorTopicParams,\n CmsModelGroup\n} from \"~/types\";\n\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport { removeUndefinedValues } from \"~/utils/removeUndefinedValues\";\nimport {\n ensurePluralApiName,\n ensureSingularApiName\n} from \"./contentModel/compatibility/modelApiName\";\n\n/**\n * Given a model, return an array of tags ensuring the `type` tag is set.\n */\nconst ensureTypeTag = (model: Pick<CmsModel, \"tags\">) => {\n // Let's make sure we have a `type` tag assigned.\n // If `type` tag is not set, set it to a default one (`model`).\n const tags = model.tags || [];\n if (!tags.some(tag => tag.startsWith(\"type:\"))) {\n tags.push(\"type:model\");\n }\n\n return tags;\n};\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code,\n /**\n * TODO: remove in v5.36.0\n * This is for backward compatibility while migrations are not yet executed.\n */\n singularApiName: ensureSingularApiName(model),\n pluralApiName: ensurePluralApiName(model)\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string) => {\n return checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: modelTenant, locale: modelLocale } = plugin.contentModel;\n if (modelTenant && modelTenant !== tenant) {\n return false;\n } else if (modelLocale && modelLocale !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(plugin.contentModel),\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string) => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels: CmsModel[] = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n checkOwnership(context, permission, model);\n await checkModelAccess(context, model);\n\n return model;\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n /**\n * Create\n */\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n const onModelCreateError = createTopic<OnModelCreateErrorTopicParams>(\"cms.onModelCreateError\");\n /**\n * Create from / clone\n */\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n const onModelCreateFromError = createTopic<OnModelCreateFromErrorParams>(\n \"cms.onModelCreateFromError\"\n );\n /**\n * Update\n */\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n const onModelUpdateError = createTopic<OnModelUpdateErrorTopicParams>(\"cms.onModelUpdateError\");\n /**\n * Delete\n */\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n const onModelDeleteError = createTopic<OnModelDeleteErrorTopicParams>(\"cms.onModelDeleteError\");\n /**\n * Initialize\n */\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n context,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n context\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelCreateError,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelCreateFromError,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelUpdateError,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelDeleteError,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(input) {\n await checkModelPermissions(\"w\");\n\n const result = await createModelCreateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n /**\n * We need to extract the defaultFields because it is not for the CmsModel object.\n */\n const { defaultFields, ...data } = removeUndefinedValues(result.data);\n if (defaultFields) {\n assignModelDefaultFields(data);\n }\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(data.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...data,\n modelId: data.modelId || \"\",\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n titleFieldId: \"id\",\n descriptionFieldId: null,\n imageFieldId: null,\n description: data.description || \"\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeCreate.publish({\n input: data,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input: data,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input: data,\n model,\n error: ex\n });\n throw ex;\n }\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n },\n async createModelFrom(modelId, userInput) {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const result = await createModelCreateFromValidation().safeParseAsync({\n ...userInput,\n description: userInput.description || original.description\n });\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n const locale = await context.i18n.getLocale(data.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${data.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: data.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\",\n description: data.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeCreateFrom.publish({\n input: data,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input: data,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input: data,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n },\n async updateModel(modelId, input) {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const result = await createModelUpdateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n if (Object.keys(data).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModelGroup = {\n id: original.group.id,\n name: original.group.name\n };\n if (data.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(data.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const model: CmsModel = {\n ...original,\n ...data,\n titleFieldId:\n data.titleFieldId === undefined\n ? original.titleFieldId\n : (data.titleFieldId as string),\n descriptionFieldId:\n data.descriptionFieldId === undefined\n ? original.descriptionFieldId\n : data.descriptionFieldId,\n imageFieldId:\n data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,\n group,\n description: data.description || original.description,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n savedOn: new Date().toISOString()\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input: data,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input: data,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: data,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n try {\n await onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n } catch (ex) {\n await onModelDeleteError.publish({\n model,\n error: ex\n });\n throw ex;\n }\n },\n async initializeModel(modelId, data) {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model, data });\n\n return true;\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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"}
|