@webiny/api-headless-cms 0.0.0-unstable.1e66d121db → 0.0.0-unstable.2696f9d9e8
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.d.ts +5 -2
- package/context.js +100 -25
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.js +2 -5
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.js +2 -3
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.js +2 -3
- 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 +222 -83
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.d.ts +1 -1
- package/crud/contentEntry/markLockedFields.js +34 -37
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.d.ts +6 -0
- package/crud/contentEntry/referenceFieldsMapping.js +145 -145
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.d.ts +9 -0
- package/crud/contentEntry/searchableFields.js +73 -0
- package/crud/contentEntry/searchableFields.js.map +1 -0
- package/crud/contentEntry.crud.d.ts +9 -5
- package/crud/contentEntry.crud.js +1121 -1070
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/beforeCreate.d.ts +2 -3
- package/crud/contentModel/beforeCreate.js +53 -117
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.d.ts +1 -1
- package/crud/contentModel/beforeDelete.js +3 -15
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.d.ts +2 -4
- package/crud/contentModel/beforeUpdate.js +32 -12
- 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 +2 -7
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +6 -3
- 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 +4 -4
- package/crud/contentModel/validateModel.js +8 -11
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.d.ts +4 -4
- package/crud/contentModel/validateModelFields.js +136 -152
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +872 -0
- package/crud/contentModel/validation.js +205 -0
- package/crud/contentModel/validation.js.map +1 -0
- package/crud/contentModel.crud.d.ts +2 -0
- package/crud/contentModel.crud.js +436 -445
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.d.ts +1 -1
- package/crud/contentModelGroup/beforeCreate.js +14 -12
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.js +2 -8
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.js +2 -5
- 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 +33 -0
- package/crud/contentModelGroup/validation.js +37 -0
- package/crud/contentModelGroup/validation.js.map +1 -0
- package/crud/contentModelGroup.crud.d.ts +3 -1
- package/crud/contentModelGroup.crud.js +291 -289
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/system.crud.js +8 -106
- 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 +3 -19
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +200 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +46 -90
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.d.ts +2 -1
- package/fieldConverters/index.js +4 -5
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.d.ts +8 -3
- package/graphql/buildSchemaPlugins.js +9 -11
- 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 +6 -0
- package/graphql/createExecutableSchema.js +31 -0
- package/graphql/createExecutableSchema.js.map +1 -0
- 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.d.ts +8 -0
- package/graphql/generateSchema.js +33 -0
- package/graphql/generateSchema.js.map +1 -0
- package/graphql/getSchema.d.ts +16 -0
- package/graphql/getSchema.js +118 -0
- package/graphql/getSchema.js.map +1 -0
- package/graphql/graphQLHandlerFactory.js +8 -129
- 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 -3
- package/graphql/index.js +4 -46
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.d.ts +6 -2
- package/graphql/schema/baseContentSchema.js +20 -29
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/baseSchema.d.ts +2 -0
- package/graphql/schema/baseSchema.js +146 -0
- package/graphql/schema/baseSchema.js.map +1 -0
- package/graphql/schema/contentEntries.d.ts +6 -2
- package/graphql/schema/contentEntries.js +160 -111
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.d.ts +6 -2
- package/graphql/schema/contentModelGroups.js +20 -30
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.d.ts +6 -2
- package/graphql/schema/contentModels.js +81 -26
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +2 -2
- package/graphql/schema/createFieldResolvers.js +29 -40
- 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 +59 -52
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +3 -0
- package/graphql/schema/createManageSDL.js +119 -81
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +9 -22
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +14 -22
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.d.ts +3 -0
- package/graphql/schema/createReadSDL.js +57 -48
- 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 +3 -4
- 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 +3 -4
- 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 +15 -9
- 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 +11 -20
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js +2 -3
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js +2 -3
- 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 +2 -3
- 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 +2 -3
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js +2 -3
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js +2 -3
- 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 +3 -4
- 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/{resolveRequestChanges.js → resolveValidate.js} +5 -6
- package/graphql/schema/resolvers/manage/resolveValidate.js.map +1 -0
- package/graphql/schema/resolvers/preview/resolveGet.js +5 -12
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveList.js +2 -3
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +5 -12
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveList.js +2 -3
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
- package/graphql/schema/schemaPlugins.d.ts +8 -3
- package/graphql/schema/schemaPlugins.js +60 -69
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.d.ts +2 -5
- package/graphql/system.js +58 -98
- package/graphql/system.js.map +1 -1
- package/graphqlFields/boolean.js +2 -12
- package/graphqlFields/boolean.js.map +1 -1
- package/graphqlFields/datetime.js +4 -21
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js +266 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +111 -0
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
- package/graphqlFields/dynamicZone/index.d.ts +2 -0
- package/graphqlFields/dynamicZone/index.js +21 -0
- package/graphqlFields/dynamicZone/index.js.map +1 -0
- package/graphqlFields/file.js +2 -8
- package/graphqlFields/file.js.map +1 -1
- package/graphqlFields/helpers.d.ts +0 -1
- package/graphqlFields/helpers.js +5 -27
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/index.d.ts +1 -1
- package/graphqlFields/index.js +5 -12
- 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 +13 -12
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +7 -12
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +114 -101
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +111 -119
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText.js +2 -9
- package/graphqlFields/richText.js.map +1 -1
- package/graphqlFields/text.js +4 -11
- package/graphqlFields/text.js.map +1 -1
- package/index.d.ts +6 -3
- package/index.js +43 -29
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +2 -20
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +2 -4
- package/modelManager/index.js.map +1 -1
- package/package.json +36 -43
- package/parameters/context.js +3 -5
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +6 -16
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +3 -9
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +9 -11
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +3 -13
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
- package/plugins/CmsGraphQLSchemaPlugin.js +13 -0
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +27 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
- package/plugins/CmsGroupPlugin.d.ts +6 -3
- package/plugins/CmsGroupPlugin.js +7 -13
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
- package/plugins/CmsModelFieldConverterPlugin.js +5 -9
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +25 -5
- package/plugins/CmsModelPlugin.js +72 -57
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +6 -10
- package/plugins/CmsParametersPlugin.js.map +1 -1
- 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 +13 -13
- package/plugins/StorageTransformPlugin.js +3 -13
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.d.ts +3 -0
- package/plugins/index.js +36 -11
- package/plugins/index.js.map +1 -1
- package/storage/default.js +2 -3
- 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 +11 -27
- package/storage/object.js.map +1 -1
- package/types.d.ts +755 -384
- package/types.js +83 -90
- package/types.js.map +1 -1
- package/utils/access.d.ts +9 -8
- package/utils/access.js +11 -75
- 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 +3 -17
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.d.ts +7 -0
- package/utils/converters/ConverterCollection.js +43 -31
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.d.ts +1 -5
- package/utils/converters/valueKeyStorageConverter.js +32 -45
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +16 -0
- package/utils/createTypeFromFields.js +71 -0
- package/utils/createTypeFromFields.js.map +1 -0
- package/utils/createTypeName.d.ts +0 -2
- package/utils/createTypeName.js +4 -17
- 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 +27 -38
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +8 -12
- package/utils/filterAsync.js.map +1 -1
- package/utils/getBaseFieldType.d.ts +2 -0
- package/utils/getBaseFieldType.js +12 -0
- package/utils/getBaseFieldType.js.map +1 -0
- 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 -10
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.d.ts +14 -6
- package/utils/getSchemaFromFieldPlugins.js +39 -17
- 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 +14 -11
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.d.ts +2 -2
- package/utils/renderGetFilterFields.js +10 -30
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.d.ts +4 -2
- package/utils/renderInputFields.js +21 -14
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.d.ts +3 -1
- package/utils/renderListFilterFields.js +27 -30
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +9 -5
- package/utils/renderSortEnum.js +29 -12
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +2 -4
- package/utils/toSlug.js.map +1 -1
- package/validators/dateGte.js +2 -7
- package/validators/dateGte.js.map +1 -1
- package/validators/dateLte.js +2 -7
- package/validators/dateLte.js.map +1 -1
- package/validators/gte.js +3 -10
- package/validators/gte.js.map +1 -1
- package/validators/in.js +3 -10
- package/validators/in.js.map +1 -1
- package/validators/index.js +2 -15
- package/validators/index.js.map +1 -1
- package/validators/lte.js +3 -10
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +3 -10
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +3 -10
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +4 -11
- package/validators/pattern.js.map +1 -1
- package/validators/patternPlugins/email.js +2 -2
- package/validators/patternPlugins/email.js.map +1 -1
- package/validators/patternPlugins/index.js +2 -8
- package/validators/patternPlugins/index.js.map +1 -1
- package/validators/patternPlugins/lowerCase.js +2 -2
- package/validators/patternPlugins/lowerCase.js.map +1 -1
- package/validators/patternPlugins/lowerCaseSpace.js +2 -2
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/validators/patternPlugins/upperCase.js +2 -2
- package/validators/patternPlugins/upperCase.js.map +1 -1
- package/validators/patternPlugins/upperCaseSpace.js +2 -2
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/validators/patternPlugins/url.js +2 -2
- package/validators/patternPlugins/url.js.map +1 -1
- package/validators/required.js +2 -5
- package/validators/required.js.map +1 -1
- package/validators/timeGte.js +3 -10
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +3 -10
- package/validators/timeLte.js.map +1 -1
- package/validators/unique.js +3 -8
- package/validators/unique.js.map +1 -1
- package/crud/contentModel/afterCreate.d.ts +0 -8
- package/crud/contentModel/afterCreate.js +0 -18
- package/crud/contentModel/afterCreate.js.map +0 -1
- package/crud/contentModel/afterCreateFrom.d.ts +0 -8
- package/crud/contentModel/afterCreateFrom.js +0 -18
- package/crud/contentModel/afterCreateFrom.js.map +0 -1
- package/crud/contentModel/afterDelete.d.ts +0 -8
- package/crud/contentModel/afterDelete.js +0 -18
- package/crud/contentModel/afterDelete.js.map +0 -1
- package/crud/contentModel/afterUpdate.d.ts +0 -8
- package/crud/contentModel/afterUpdate.js +0 -18
- 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 -180
- 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 -36
- package/crud/contentModel/validateLayout.js.map +0 -1
- package/crud/index.d.ts +0 -6
- package/crud/index.js +0 -85
- package/crud/index.js.map +0 -1
- package/crud/settings.crud.d.ts +0 -10
- package/crud/settings.crud.js +0 -83
- package/crud/settings.crud.js.map +0 -1
- package/graphql/schema/resolvers/commonFieldResolvers.d.ts +0 -6
- package/graphql/schema/resolvers/commonFieldResolvers.js +0 -14
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +0 -1
- package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
- package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
- package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
- package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
- package/graphql/schema/resolvers/manage/resolveRequestReview.js.map +0 -1
- package/upgrades/5.33.0/index.d.ts +0 -3
- package/upgrades/5.33.0/index.js +0 -182
- package/upgrades/5.33.0/index.js.map +0 -1
- package/upgrades/index.d.ts +0 -1
- package/upgrades/index.js +0 -12
- package/upgrades/index.js.map +0 -1
- package/utils/filterModelFields.d.ts +0 -16
- package/utils/filterModelFields.js +0 -77
- package/utils/filterModelFields.js.map +0 -1
- package/utils/ownership.d.ts +0 -8
- package/utils/ownership.js +0 -41
- package/utils/ownership.js.map +0 -1
- package/utils/permissions.d.ts +0 -7
- package/utils/permissions.js +0 -106
- package/utils/permissions.js.map +0 -1
- package/utils/pluralizedTypeName.d.ts +0 -1
- package/utils/pluralizedTypeName.js +0 -26
- package/utils/pluralizedTypeName.js.map +0 -1
|
@@ -1,404 +1,377 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.createModelsCrud = void 0;
|
|
9
|
-
|
|
10
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
|
|
12
|
-
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
13
|
-
|
|
8
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
14
9
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
|
-
|
|
16
10
|
var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
|
|
17
|
-
|
|
18
|
-
var _models = require("./contentModel/models");
|
|
19
|
-
|
|
20
|
-
var _createFieldModels = require("./contentModel/createFieldModels");
|
|
21
|
-
|
|
22
|
-
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
23
|
-
|
|
24
11
|
var _pubsub = require("@webiny/pubsub");
|
|
25
|
-
|
|
26
12
|
var _beforeCreate = require("./contentModel/beforeCreate");
|
|
27
|
-
|
|
28
13
|
var _beforeUpdate = require("./contentModel/beforeUpdate");
|
|
29
|
-
|
|
30
14
|
var _beforeDelete = require("./contentModel/beforeDelete");
|
|
31
|
-
|
|
32
|
-
var _afterCreate = require("./contentModel/afterCreate");
|
|
33
|
-
|
|
34
|
-
var _afterUpdate = require("./contentModel/afterUpdate");
|
|
35
|
-
|
|
36
|
-
var _afterDelete = require("./contentModel/afterDelete");
|
|
37
|
-
|
|
38
|
-
var _afterCreateFrom = require("./contentModel/afterCreateFrom");
|
|
39
|
-
|
|
40
15
|
var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
|
|
41
|
-
|
|
42
|
-
var
|
|
43
|
-
|
|
16
|
+
var _validation = require("./contentModel/validation");
|
|
17
|
+
var _utils = require("@webiny/utils");
|
|
18
|
+
var _defaultFields = require("./contentModel/defaultFields");
|
|
19
|
+
var _utils2 = require("../utils");
|
|
20
|
+
var _ensureTypeTag = require("./contentModel/ensureTypeTag");
|
|
21
|
+
var _listModelsFromDatabase = require("./contentModel/listModelsFromDatabase");
|
|
44
22
|
var _filterAsync = require("../utils/filterAsync");
|
|
45
|
-
|
|
46
|
-
var _ownership = require("../utils/ownership");
|
|
47
|
-
|
|
48
|
-
var _access = require("../utils/access");
|
|
49
|
-
|
|
50
|
-
var _validateModelFields = require("./contentModel/validateModelFields");
|
|
51
|
-
|
|
52
|
-
var _semver = _interopRequireDefault(require("semver"));
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* TODO: remove for 5.34.0
|
|
56
|
-
* Required because of the 5.33.0 upgrade.
|
|
57
|
-
* Until the upgrade is done, API will break because there is no storageId assigned.
|
|
58
|
-
*/
|
|
59
|
-
const featureVersion = _semver.default.coerce("5.33.0");
|
|
60
|
-
|
|
61
|
-
const attachStorageIdToFields = fields => {
|
|
62
|
-
return fields.map(field => {
|
|
63
|
-
var _field$settings;
|
|
64
|
-
|
|
65
|
-
if ((_field$settings = field.settings) !== null && _field$settings !== void 0 && _field$settings.fields) {
|
|
66
|
-
field.settings.fields = attachStorageIdToFields(field.settings.fields);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (!field.storageId) {
|
|
70
|
-
field.storageId = field.fieldId;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return field;
|
|
74
|
-
});
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const attachStorageIdToModelFields = model => {
|
|
78
|
-
if (!model.webinyVersion) {
|
|
79
|
-
return model.fields;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const version = _semver.default.coerce(model.webinyVersion);
|
|
83
|
-
|
|
84
|
-
if (!version) {
|
|
85
|
-
return model.fields;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Unfortunately we need to check for beta and next.
|
|
89
|
-
* TODO remove after 5.33.0
|
|
90
|
-
*/
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (model.webinyVersion.match(/beta|next/)) {
|
|
94
|
-
return attachStorageIdToFields(model.fields);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (_semver.default.compare(version, featureVersion) >= 0) {
|
|
98
|
-
return model.fields;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return attachStorageIdToFields(model.fields);
|
|
102
|
-
};
|
|
103
|
-
|
|
104
23
|
const createModelsCrud = params => {
|
|
105
24
|
const {
|
|
106
25
|
getTenant,
|
|
107
26
|
getIdentity,
|
|
108
27
|
getLocale,
|
|
109
28
|
storageOperations,
|
|
29
|
+
modelsPermissions,
|
|
110
30
|
context
|
|
111
31
|
} = params;
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
where: {
|
|
116
|
-
tenant: getTenant().id,
|
|
117
|
-
locale: getLocale().code
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
return [models.map(model => {
|
|
121
|
-
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
122
|
-
fields: attachStorageIdToModelFields(model),
|
|
123
|
-
tenant: model.tenant || getTenant().id,
|
|
124
|
-
locale: model.locale || getLocale().code
|
|
125
|
-
});
|
|
126
|
-
})];
|
|
127
|
-
})
|
|
128
|
-
};
|
|
129
|
-
|
|
32
|
+
const listPluginModelsCache = (0, _utils2.createMemoryCache)();
|
|
33
|
+
const listFilteredModelsCache = (0, _utils2.createMemoryCache)();
|
|
34
|
+
const listDatabaseModelsCache = (0, _utils2.createMemoryCache)();
|
|
130
35
|
const clearModelsCache = () => {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
36
|
+
listDatabaseModelsCache.clear();
|
|
37
|
+
listFilteredModelsCache.clear();
|
|
134
38
|
};
|
|
135
|
-
|
|
136
39
|
const managers = new Map();
|
|
137
|
-
|
|
138
40
|
const updateManager = async (context, model) => {
|
|
139
41
|
const manager = await (0, _contentModelManagerFactory.contentModelManagerFactory)(context, model);
|
|
140
42
|
managers.set(model.modelId, manager);
|
|
141
43
|
return manager;
|
|
142
44
|
};
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
rwd: check
|
|
45
|
+
const checkModelPermissions = async rwd => {
|
|
46
|
+
return modelsPermissions.ensure({
|
|
47
|
+
rwd
|
|
147
48
|
});
|
|
148
49
|
};
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* We need to filter out models that are not for this tenant or locale.
|
|
156
|
-
* If it does not have tenant or locale define, it is for every locale and tenant
|
|
157
|
-
*/
|
|
158
|
-
.filter(plugin => {
|
|
159
|
-
const {
|
|
160
|
-
tenant: t,
|
|
161
|
-
locale: l
|
|
162
|
-
} = plugin.contentModel;
|
|
163
|
-
|
|
164
|
-
if (t && t !== tenant) {
|
|
165
|
-
return false;
|
|
166
|
-
} else if (l && l !== locale) {
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return true;
|
|
171
|
-
}).map(plugin => {
|
|
172
|
-
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
|
|
173
|
-
tenant,
|
|
174
|
-
locale,
|
|
175
|
-
webinyVersion: context.WEBINY_VERSION
|
|
176
|
-
});
|
|
50
|
+
const filterModel = async model => {
|
|
51
|
+
const ownsModel = await modelsPermissions.ensure({
|
|
52
|
+
owns: model.createdBy
|
|
53
|
+
}, {
|
|
54
|
+
throw: false
|
|
177
55
|
});
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
*/
|
|
181
|
-
|
|
182
|
-
for (const model of models) {
|
|
183
|
-
(0, _validateModelFields.validateModelFields)({
|
|
184
|
-
model,
|
|
185
|
-
plugins: context.plugins
|
|
186
|
-
});
|
|
56
|
+
if (!ownsModel) {
|
|
57
|
+
return false;
|
|
187
58
|
}
|
|
188
|
-
|
|
189
|
-
|
|
59
|
+
return modelsPermissions.canAccessModel({
|
|
60
|
+
model
|
|
61
|
+
});
|
|
190
62
|
};
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
modelId
|
|
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
|
|
203
74
|
});
|
|
204
|
-
|
|
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);
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
const getModelFromCache = async modelId => {
|
|
104
|
+
const models = await listModels();
|
|
105
|
+
const model = models.find(m => m.modelId === modelId);
|
|
205
106
|
if (!model) {
|
|
206
107
|
throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
|
|
207
108
|
}
|
|
208
|
-
|
|
209
|
-
|
|
109
|
+
return {
|
|
110
|
+
...model,
|
|
111
|
+
tags: (0, _ensureTypeTag.ensureTypeTag)(model),
|
|
210
112
|
tenant: model.tenant || getTenant().id,
|
|
211
113
|
locale: model.locale || getLocale().code
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
const modelsList = async () => {
|
|
216
|
-
const databaseModels = await loaders.listModels.load("listModels");
|
|
217
|
-
const pluginsModels = getModelsAsPlugins();
|
|
218
|
-
return databaseModels.concat(pluginsModels);
|
|
114
|
+
};
|
|
219
115
|
};
|
|
220
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
|
+
*/
|
|
221
123
|
const listModels = async () => {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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);
|
|
230
148
|
});
|
|
231
149
|
};
|
|
232
|
-
|
|
233
150
|
const getModel = async modelId => {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
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
|
+
});
|
|
239
167
|
};
|
|
240
|
-
|
|
241
|
-
const getModelManager = async target => {
|
|
168
|
+
const getEntryManager = async target => {
|
|
242
169
|
const modelId = typeof target === "string" ? target : target.modelId;
|
|
243
|
-
|
|
244
170
|
if (managers.has(modelId)) {
|
|
245
171
|
return managers.get(modelId);
|
|
246
172
|
}
|
|
247
|
-
|
|
248
|
-
const models = await modelsList();
|
|
249
|
-
const model = models.find(m => m.modelId === modelId);
|
|
250
|
-
|
|
251
|
-
if (!model) {
|
|
252
|
-
throw new _handlerGraphql.NotFoundError(`There is no content model "${modelId}".`);
|
|
253
|
-
}
|
|
254
|
-
|
|
173
|
+
const model = await getModelFromCache(modelId);
|
|
255
174
|
return await updateManager(context, model);
|
|
256
|
-
};
|
|
257
|
-
|
|
175
|
+
};
|
|
258
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Create
|
|
179
|
+
*/
|
|
259
180
|
const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
|
|
260
|
-
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
261
|
-
|
|
181
|
+
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
182
|
+
const onModelCreateError = (0, _pubsub.createTopic)("cms.onModelCreateError");
|
|
183
|
+
/**
|
|
184
|
+
* Create from / clone
|
|
185
|
+
*/
|
|
262
186
|
const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
|
|
263
|
-
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
264
|
-
|
|
187
|
+
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
188
|
+
const onModelCreateFromError = (0, _pubsub.createTopic)("cms.onModelCreateFromError");
|
|
189
|
+
/**
|
|
190
|
+
* Update
|
|
191
|
+
*/
|
|
265
192
|
const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
|
|
266
|
-
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
267
|
-
|
|
193
|
+
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
194
|
+
const onModelUpdateError = (0, _pubsub.createTopic)("cms.onModelUpdateError");
|
|
195
|
+
/**
|
|
196
|
+
* Delete
|
|
197
|
+
*/
|
|
268
198
|
const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
|
|
269
199
|
const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
|
|
200
|
+
const onModelDeleteError = (0, _pubsub.createTopic)("cms.onModelDeleteError");
|
|
201
|
+
/**
|
|
202
|
+
* Initialize
|
|
203
|
+
*/
|
|
204
|
+
const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
|
|
270
205
|
/**
|
|
271
206
|
* We need to assign some default behaviors.
|
|
272
207
|
*/
|
|
273
|
-
|
|
274
208
|
(0, _beforeCreate.assignModelBeforeCreate)({
|
|
275
209
|
onModelBeforeCreate,
|
|
276
210
|
onModelBeforeCreateFrom,
|
|
277
|
-
plugins: context.plugins,
|
|
278
|
-
storageOperations
|
|
279
|
-
});
|
|
280
|
-
(0, _afterCreate.assignModelAfterCreate)({
|
|
281
211
|
context,
|
|
282
|
-
|
|
212
|
+
storageOperations
|
|
283
213
|
});
|
|
284
214
|
(0, _beforeUpdate.assignModelBeforeUpdate)({
|
|
285
215
|
onModelBeforeUpdate,
|
|
286
|
-
|
|
287
|
-
storageOperations
|
|
288
|
-
});
|
|
289
|
-
(0, _afterUpdate.assignModelAfterUpdate)({
|
|
290
|
-
context,
|
|
291
|
-
onModelAfterUpdate
|
|
292
|
-
});
|
|
293
|
-
(0, _afterCreateFrom.assignModelAfterCreateFrom)({
|
|
294
|
-
context,
|
|
295
|
-
onModelAfterCreateFrom
|
|
216
|
+
context
|
|
296
217
|
});
|
|
297
218
|
(0, _beforeDelete.assignModelBeforeDelete)({
|
|
298
219
|
onModelBeforeDelete,
|
|
299
220
|
plugins: context.plugins,
|
|
300
221
|
storageOperations
|
|
301
222
|
});
|
|
302
|
-
(0, _afterDelete.assignModelAfterDelete)({
|
|
303
|
-
context,
|
|
304
|
-
onModelAfterDelete
|
|
305
|
-
});
|
|
306
|
-
return {
|
|
307
|
-
/**
|
|
308
|
-
* Deprecated - will be removed in 5.36.0
|
|
309
|
-
*/
|
|
310
|
-
onBeforeModelCreate: onModelBeforeCreate,
|
|
311
|
-
onAfterModelCreate: onModelAfterCreate,
|
|
312
|
-
onBeforeModelCreateFrom: onModelBeforeCreateFrom,
|
|
313
|
-
onAfterModelCreateFrom: onModelAfterCreateFrom,
|
|
314
|
-
onBeforeModelUpdate: onModelBeforeUpdate,
|
|
315
|
-
onAfterModelUpdate: onModelAfterUpdate,
|
|
316
|
-
onBeforeModelDelete: onModelBeforeDelete,
|
|
317
|
-
onAfterModelDelete: onModelAfterDelete,
|
|
318
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
|
+
}
|
|
319
233
|
/**
|
|
320
|
-
*
|
|
234
|
+
* We need to extract the defaultFields because it is not for the CmsModel object.
|
|
321
235
|
*/
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
name: group.name
|
|
359
|
-
},
|
|
360
|
-
createdBy: {
|
|
361
|
-
id: identity.id,
|
|
362
|
-
displayName: identity.displayName,
|
|
363
|
-
type: identity.type
|
|
364
|
-
},
|
|
365
|
-
createdOn: new Date().toISOString(),
|
|
366
|
-
savedOn: new Date().toISOString(),
|
|
367
|
-
fields,
|
|
368
|
-
lockedFields: [],
|
|
369
|
-
layout: input.layout || [],
|
|
370
|
-
webinyVersion: context.WEBINY_VERSION
|
|
371
|
-
};
|
|
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 {
|
|
372
272
|
await onModelBeforeCreate.publish({
|
|
373
|
-
input,
|
|
273
|
+
input: data,
|
|
374
274
|
model
|
|
375
275
|
});
|
|
376
276
|
const createdModel = await storageOperations.models.create({
|
|
377
277
|
model
|
|
378
278
|
});
|
|
379
|
-
|
|
279
|
+
clearModelsCache();
|
|
380
280
|
await updateManager(context, model);
|
|
381
281
|
await onModelAfterCreate.publish({
|
|
382
|
-
input,
|
|
282
|
+
input: data,
|
|
383
283
|
model: createdModel
|
|
384
284
|
});
|
|
385
285
|
return createdModel;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
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
|
|
401
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 {
|
|
402
375
|
await onModelBeforeUpdate.publish({
|
|
403
376
|
input: {},
|
|
404
377
|
original,
|
|
@@ -408,159 +381,110 @@ const createModelsCrud = params => {
|
|
|
408
381
|
model
|
|
409
382
|
});
|
|
410
383
|
await updateManager(context, resultModel);
|
|
411
|
-
|
|
384
|
+
clearModelsCache();
|
|
412
385
|
await onModelAfterUpdate.publish({
|
|
413
386
|
input: {},
|
|
414
387
|
original,
|
|
415
388
|
model: resultModel
|
|
416
389
|
});
|
|
417
390
|
return resultModel;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
*/
|
|
425
|
-
|
|
426
|
-
const original = await getModel(modelId);
|
|
427
|
-
const createdData = new _models.CreateContentModelModelFrom().populate({
|
|
428
|
-
name: data.name,
|
|
429
|
-
modelId: data.modelId,
|
|
430
|
-
description: data.description || original.description,
|
|
431
|
-
group: data.group,
|
|
432
|
-
locale: data.locale
|
|
433
|
-
});
|
|
434
|
-
await createdData.validate();
|
|
435
|
-
const input = await createdData.toJSON();
|
|
436
|
-
const locale = await context.i18n.getLocale(input.locale || original.locale);
|
|
437
|
-
|
|
438
|
-
if (!locale) {
|
|
439
|
-
throw new _handlerGraphql.NotFoundError(`There is no locale "${input.locale}".`);
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
443
|
-
*/
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
const group = await context.cms.storageOperations.groups.get({
|
|
447
|
-
id: input.group,
|
|
448
|
-
tenant: original.tenant,
|
|
449
|
-
locale: locale.code
|
|
450
|
-
});
|
|
451
|
-
|
|
452
|
-
if (!group) {
|
|
453
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
const identity = getIdentity();
|
|
457
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
|
|
458
|
-
locale: locale.code,
|
|
459
|
-
group: {
|
|
460
|
-
id: group.id,
|
|
461
|
-
name: group.name
|
|
462
|
-
},
|
|
463
|
-
name: input.name,
|
|
464
|
-
modelId: input.modelId || "",
|
|
465
|
-
description: input.description || "",
|
|
466
|
-
createdBy: {
|
|
467
|
-
id: identity.id,
|
|
468
|
-
displayName: identity.displayName,
|
|
469
|
-
type: identity.type
|
|
470
|
-
},
|
|
471
|
-
createdOn: new Date().toISOString(),
|
|
472
|
-
savedOn: new Date().toISOString(),
|
|
473
|
-
lockedFields: [],
|
|
474
|
-
webinyVersion: context.WEBINY_VERSION
|
|
391
|
+
} catch (ex) {
|
|
392
|
+
await onModelUpdateError.publish({
|
|
393
|
+
input: {},
|
|
394
|
+
original,
|
|
395
|
+
model,
|
|
396
|
+
error: ex
|
|
475
397
|
});
|
|
398
|
+
throw ex;
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
const createModelFrom = async (modelId, input) => {
|
|
402
|
+
await checkModelPermissions("w");
|
|
403
|
+
/**
|
|
404
|
+
* Get a model record; this will also perform ownership validation.
|
|
405
|
+
*/
|
|
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
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
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 {
|
|
476
455
|
await onModelBeforeCreateFrom.publish({
|
|
477
|
-
input,
|
|
456
|
+
input: data,
|
|
478
457
|
model,
|
|
479
458
|
original
|
|
480
459
|
});
|
|
481
460
|
const createdModel = await storageOperations.models.create({
|
|
482
461
|
model
|
|
483
462
|
});
|
|
484
|
-
|
|
463
|
+
clearModelsCache();
|
|
485
464
|
await updateManager(context, model);
|
|
486
465
|
await onModelAfterCreateFrom.publish({
|
|
487
|
-
input,
|
|
466
|
+
input: data,
|
|
488
467
|
original,
|
|
489
468
|
model: createdModel
|
|
490
469
|
});
|
|
491
470
|
return createdModel;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
await checkModelPermissions("w"); // Get a model record; this will also perform ownership validation.
|
|
496
|
-
|
|
497
|
-
const original = await getModel(modelId);
|
|
498
|
-
const updatedData = new _models.UpdateContentModelModel().populate(inputData);
|
|
499
|
-
await updatedData.validate();
|
|
500
|
-
const input = await updatedData.toJSON({
|
|
501
|
-
onlyDirty: true
|
|
502
|
-
});
|
|
503
|
-
|
|
504
|
-
if (Object.keys(input).length === 0) {
|
|
505
|
-
/**
|
|
506
|
-
* We need to return the original if nothing is to be updated.
|
|
507
|
-
*/
|
|
508
|
-
return original;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
let group = {
|
|
512
|
-
id: original.group.id,
|
|
513
|
-
name: original.group.name
|
|
514
|
-
};
|
|
515
|
-
|
|
516
|
-
if (input.group) {
|
|
517
|
-
context.security.disableAuthorization();
|
|
518
|
-
const groupData = await context.cms.getGroup(input.group);
|
|
519
|
-
context.security.enableAuthorization();
|
|
520
|
-
|
|
521
|
-
if (!groupData) {
|
|
522
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
group = {
|
|
526
|
-
id: groupData.id,
|
|
527
|
-
name: groupData.name
|
|
528
|
-
};
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
const fields = await (0, _createFieldModels.createFieldModels)(inputData.fields);
|
|
532
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input), {}, {
|
|
533
|
-
group,
|
|
534
|
-
tenant: original.tenant || getTenant().id,
|
|
535
|
-
locale: original.locale || getLocale().code,
|
|
536
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
537
|
-
fields,
|
|
538
|
-
savedOn: new Date().toISOString()
|
|
539
|
-
});
|
|
540
|
-
await onModelBeforeUpdate.publish({
|
|
541
|
-
input,
|
|
542
|
-
original,
|
|
543
|
-
model
|
|
544
|
-
});
|
|
545
|
-
const resultModel = await storageOperations.models.update({
|
|
546
|
-
model
|
|
547
|
-
});
|
|
548
|
-
await updateManager(context, resultModel);
|
|
549
|
-
await onModelAfterUpdate.publish({
|
|
550
|
-
input,
|
|
471
|
+
} catch (ex) {
|
|
472
|
+
await onModelCreateFromError.publish({
|
|
473
|
+
input: data,
|
|
551
474
|
original,
|
|
552
|
-
model
|
|
475
|
+
model,
|
|
476
|
+
error: ex
|
|
553
477
|
});
|
|
554
|
-
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
478
|
+
throw ex;
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
const deleteModel = async modelId => {
|
|
482
|
+
await checkModelPermissions("d");
|
|
483
|
+
const model = await getModel(modelId);
|
|
484
|
+
try {
|
|
560
485
|
await onModelBeforeDelete.publish({
|
|
561
486
|
model
|
|
562
487
|
});
|
|
563
|
-
|
|
564
488
|
try {
|
|
565
489
|
await storageOperations.models.delete({
|
|
566
490
|
model
|
|
@@ -571,20 +495,87 @@ const createModelsCrud = params => {
|
|
|
571
495
|
modelId: model.modelId
|
|
572
496
|
});
|
|
573
497
|
}
|
|
574
|
-
|
|
498
|
+
clearModelsCache();
|
|
575
499
|
await onModelAfterDelete.publish({
|
|
576
500
|
model
|
|
577
501
|
});
|
|
578
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 {
|
|
525
|
+
onModelBeforeCreate,
|
|
526
|
+
onModelAfterCreate,
|
|
527
|
+
onModelCreateError,
|
|
528
|
+
onModelBeforeCreateFrom,
|
|
529
|
+
onModelAfterCreateFrom,
|
|
530
|
+
onModelCreateFromError,
|
|
531
|
+
onModelBeforeUpdate,
|
|
532
|
+
onModelAfterUpdate,
|
|
533
|
+
onModelUpdateError,
|
|
534
|
+
onModelBeforeDelete,
|
|
535
|
+
onModelAfterDelete,
|
|
536
|
+
onModelDeleteError,
|
|
537
|
+
onModelInitialize,
|
|
538
|
+
clearModelsCache,
|
|
539
|
+
getModel,
|
|
540
|
+
listModels,
|
|
541
|
+
async createModel(input) {
|
|
542
|
+
return context.benchmark.measure("headlessCms.crud.models.createModel", async () => {
|
|
543
|
+
return createModel(input);
|
|
544
|
+
});
|
|
579
545
|
},
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
546
|
+
/**
|
|
547
|
+
* Method does not check for permissions or ownership.
|
|
548
|
+
* @internal
|
|
549
|
+
*/
|
|
550
|
+
async updateModelDirect(params) {
|
|
551
|
+
return context.benchmark.measure("headlessCms.crud.models.updateModelDirect", async () => {
|
|
552
|
+
return updateModelDirect(params);
|
|
553
|
+
});
|
|
554
|
+
},
|
|
555
|
+
async createModelFrom(modelId, userInput) {
|
|
556
|
+
return context.benchmark.measure("headlessCms.crud.models.createModelFrom", async () => {
|
|
557
|
+
return createModelFrom(modelId, userInput);
|
|
558
|
+
});
|
|
559
|
+
},
|
|
560
|
+
async updateModel(modelId, input) {
|
|
561
|
+
return context.benchmark.measure("headlessCms.crud.models.updateModel", async () => {
|
|
562
|
+
return updateModel(modelId, input);
|
|
563
|
+
});
|
|
564
|
+
},
|
|
565
|
+
async deleteModel(modelId) {
|
|
566
|
+
return context.benchmark.measure("headlessCms.crud.models.deleteModel", async () => {
|
|
567
|
+
return deleteModel(modelId);
|
|
568
|
+
});
|
|
569
|
+
},
|
|
570
|
+
async initializeModel(modelId, data) {
|
|
571
|
+
return context.benchmark.measure("headlessCms.crud.models.initializeModel", async () => {
|
|
572
|
+
return initializeModel(modelId, data);
|
|
573
|
+
});
|
|
584
574
|
},
|
|
585
|
-
|
|
575
|
+
getEntryManager,
|
|
586
576
|
getEntryManagers: () => managers
|
|
587
577
|
};
|
|
588
578
|
};
|
|
579
|
+
exports.createModelsCrud = createModelsCrud;
|
|
589
580
|
|
|
590
|
-
|
|
581
|
+
//# sourceMappingURL=contentModel.crud.js.map
|