@webiny/api-headless-cms 0.0.0-unstable.615a930a68 → 0.0.0-unstable.6509387258
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 +5 -2
- package/context.js +60 -23
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.js +0 -5
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.js +0 -3
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.js +0 -3
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.js +1 -40
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.d.ts +1 -1
- package/crud/contentEntry/markLockedFields.js +19 -29
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +12 -64
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry/searchableFields.js +1 -12
- package/crud/contentEntry/searchableFields.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +4 -1
- package/crud/contentEntry.crud.js +964 -916
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/afterCreate.js +0 -2
- package/crud/contentModel/afterCreate.js.map +1 -1
- package/crud/contentModel/afterCreateFrom.js +0 -2
- package/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/crud/contentModel/afterDelete.js +0 -2
- package/crud/contentModel/afterDelete.js.map +1 -1
- package/crud/contentModel/afterUpdate.js +0 -2
- package/crud/contentModel/afterUpdate.js.map +1 -1
- package/crud/contentModel/beforeCreate.d.ts +2 -3
- package/crud/contentModel/beforeCreate.js +43 -109
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.js +0 -10
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.d.ts +2 -4
- package/crud/contentModel/beforeUpdate.js +33 -10
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- 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.js +0 -7
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +4 -3
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- 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/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/models.js +12 -0
- package/crud/contentModel/models.js.map +1 -1
- package/crud/contentModel/validate/endingAllowed.d.ts +6 -0
- package/crud/contentModel/validate/endingAllowed.js +26 -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 +24 -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 +36 -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 +24 -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 +24 -0
- package/crud/contentModel/validate/singularApiName.js.map +1 -0
- package/crud/contentModel/validateLayout.js +0 -8
- package/crud/contentModel/validateLayout.js.map +1 -1
- package/crud/contentModel/validateModel.d.ts +4 -4
- package/crud/contentModel/validateModel.js +6 -11
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.d.ts +4 -4
- package/crud/contentModel/validateModelFields.js +130 -147
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +519 -0
- package/crud/contentModel/validation.js +145 -0
- package/crud/contentModel/validation.js.map +1 -0
- package/crud/contentModel.crud.js +373 -362
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.js +0 -12
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.js +0 -8
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.js +0 -5
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/crud/contentModelGroup/validation.d.ts +30 -0
- package/crud/contentModelGroup/validation.js +34 -0
- package/crud/contentModelGroup/validation.js.map +1 -0
- package/crud/contentModelGroup.crud.js +194 -208
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/settings.crud.js +0 -12
- package/crud/settings.crud.js.map +1 -1
- package/crud/system.crud.js +1 -96
- package/crud/system.crud.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +0 -13
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +203 -0
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +0 -53
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.d.ts +2 -1
- package/fieldConverters/index.js +2 -5
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.d.ts +8 -3
- package/graphql/buildSchemaPlugins.js +6 -14
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/createExecutableSchema.d.ts +6 -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.js +102 -71
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/index.d.ts +1 -3
- package/graphql/index.js +2 -46
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.d.ts +6 -2
- package/graphql/schema/baseContentSchema.js +10 -20
- package/graphql/schema/baseContentSchema.js.map +1 -1
- 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 +6 -2
- package/graphql/schema/contentEntries.js +118 -107
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.d.ts +6 -2
- package/graphql/schema/contentModelGroups.js +16 -29
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.d.ts +6 -2
- package/graphql/schema/contentModels.js +62 -26
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.d.ts +1 -1
- package/graphql/schema/createFieldResolvers.js +20 -27
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.d.ts +1 -1
- package/graphql/schema/createManageResolvers.js +33 -43
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +3 -0
- package/graphql/schema/createManageSDL.js +63 -68
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +3 -17
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +8 -17
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.d.ts +3 -0
- package/graphql/schema/createReadSDL.js +32 -36
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/commonFieldResolvers.d.ts +3 -2
- package/graphql/schema/resolvers/commonFieldResolvers.js +2 -3
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +0 -6
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGet.js +0 -16
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveList.js +0 -3
- package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUpdate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveGet.js +0 -8
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveList.js +0 -3
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +0 -8
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveList.js +0 -3
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
- package/graphql/schema/schemaPlugins.d.ts +8 -3
- package/graphql/schema/schemaPlugins.js +64 -66
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.js +55 -87
- package/graphql/system.js.map +1 -1
- package/graphqlFields/boolean.js +0 -12
- package/graphqlFields/boolean.js.map +1 -1
- package/graphqlFields/datetime.js +0 -17
- package/graphqlFields/datetime.js.map +1 -1
- 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.js +0 -8
- package/graphqlFields/file.js.map +1 -1
- package/graphqlFields/helpers.js +0 -10
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/index.d.ts +1 -1
- package/graphqlFields/index.js +2 -12
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/longText.js +0 -10
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +0 -12
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +62 -115
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +86 -106
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText.js +0 -9
- package/graphqlFields/richText.js.map +1 -1
- package/graphqlFields/text.js +0 -11
- package/graphqlFields/text.js.map +1 -1
- package/index.d.ts +5 -3
- package/index.js +24 -28
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.js +0 -16
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +0 -4
- package/modelManager/index.js.map +1 -1
- package/package.json +27 -28
- package/parameters/context.js +0 -4
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +0 -11
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +0 -8
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +1 -8
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +0 -11
- package/parameters/path.js.map +1 -1
- 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.js +0 -8
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
- package/plugins/CmsModelFieldConverterPlugin.js +0 -5
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +19 -3
- package/plugins/CmsModelPlugin.js +30 -40
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +0 -7
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.d.ts +11 -11
- package/plugins/StorageTransformPlugin.js +0 -9
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.d.ts +2 -0
- package/plugins/index.js +22 -10
- package/plugins/index.js.map +1 -1
- package/storage/default.js +0 -3
- package/storage/default.js.map +1 -1
- package/storage/object.js +4 -20
- package/storage/object.js.map +1 -1
- package/types.d.ts +309 -81
- package/types.js +63 -70
- package/types.js.map +1 -1
- package/utils/access.js +11 -25
- package/utils/access.js.map +1 -1
- package/utils/converters/Converter.js +0 -13
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.js +14 -34
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.d.ts +2 -2
- package/utils/converters/valueKeyStorageConverter.js +8 -27
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +16 -0
- package/utils/createTypeFromFields.js +67 -0
- package/utils/createTypeFromFields.js.map +1 -0
- package/utils/createTypeName.js +2 -9
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +22 -35
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +0 -5
- package/utils/filterAsync.js.map +1 -1
- 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.js +0 -9
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.d.ts +4 -7
- package/utils/getSchemaFromFieldPlugins.js +23 -19
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/incrementEntryIdVersion.d.ts +5 -0
- package/utils/incrementEntryIdVersion.js +29 -0
- package/utils/incrementEntryIdVersion.js.map +1 -0
- package/utils/ownership.d.ts +3 -3
- package/utils/ownership.js +0 -8
- package/utils/ownership.js.map +1 -1
- package/utils/permissions.js +8 -23
- package/utils/permissions.js.map +1 -1
- package/utils/renderFields.d.ts +2 -1
- package/utils/renderFields.js +10 -10
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +6 -14
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.d.ts +2 -1
- package/utils/renderInputFields.js +6 -9
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +2 -9
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +7 -4
- package/utils/renderSortEnum.js +21 -11
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +0 -4
- package/utils/toSlug.js.map +1 -1
- package/validators/dateGte.js +0 -7
- package/validators/dateGte.js.map +1 -1
- package/validators/dateLte.js +0 -7
- package/validators/dateLte.js.map +1 -1
- package/validators/dynamicZone.d.ts +2 -0
- package/validators/dynamicZone.js +20 -0
- package/validators/dynamicZone.js.map +1 -0
- package/validators/gte.js +0 -8
- package/validators/gte.js.map +1 -1
- package/validators/in.js +0 -8
- package/validators/in.js.map +1 -1
- package/validators/index.js +2 -16
- package/validators/index.js.map +1 -1
- package/validators/lte.js +0 -8
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +0 -8
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +0 -8
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +0 -9
- package/validators/pattern.js.map +1 -1
- package/validators/patternPlugins/email.js +0 -2
- package/validators/patternPlugins/email.js.map +1 -1
- package/validators/patternPlugins/index.js +0 -8
- package/validators/patternPlugins/index.js.map +1 -1
- package/validators/patternPlugins/lowerCase.js +0 -2
- package/validators/patternPlugins/lowerCase.js.map +1 -1
- package/validators/patternPlugins/lowerCaseSpace.js +0 -2
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/validators/patternPlugins/upperCase.js +0 -2
- package/validators/patternPlugins/upperCase.js.map +1 -1
- package/validators/patternPlugins/upperCaseSpace.js +0 -2
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/validators/patternPlugins/url.js +0 -2
- package/validators/patternPlugins/url.js.map +1 -1
- package/validators/required.js +0 -5
- package/validators/required.js.map +1 -1
- package/validators/timeGte.js +0 -8
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +0 -8
- package/validators/timeLte.js.map +1 -1
- package/validators/unique.js +0 -7
- package/validators/unique.js.map +1 -1
- package/crud/index.d.ts +0 -6
- package/crud/index.js +0 -85
- package/crud/index.js.map +0 -1
- package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
- package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
- 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/utils/filterModelFields.d.ts +0 -16
- package/utils/filterModelFields.js +0 -77
- package/utils/filterModelFields.js.map +0 -1
|
@@ -1,78 +1,29 @@
|
|
|
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.createModelGroupsCrud = void 0;
|
|
9
|
-
|
|
10
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
|
|
12
|
-
var _fields = require("@commodo/fields");
|
|
13
|
-
|
|
14
|
-
var _validation = require("@webiny/validation");
|
|
15
|
-
|
|
9
|
+
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
16
10
|
var _mdbid = _interopRequireDefault(require("mdbid"));
|
|
17
|
-
|
|
18
|
-
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
19
|
-
|
|
20
11
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
21
|
-
|
|
12
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
22
13
|
var _CmsGroupPlugin = require("../plugins/CmsGroupPlugin");
|
|
23
|
-
|
|
24
14
|
var _pubsub = require("@webiny/pubsub");
|
|
25
|
-
|
|
26
15
|
var _beforeUpdate = require("./contentModelGroup/beforeUpdate");
|
|
27
|
-
|
|
28
16
|
var _beforeCreate = require("./contentModelGroup/beforeCreate");
|
|
29
|
-
|
|
30
17
|
var _beforeDelete = require("./contentModelGroup/beforeDelete");
|
|
31
|
-
|
|
32
|
-
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
33
|
-
|
|
34
18
|
var _permissions = require("../utils/permissions");
|
|
35
|
-
|
|
36
19
|
var _ownership = require("../utils/ownership");
|
|
37
|
-
|
|
38
20
|
var _access = require("../utils/access");
|
|
39
|
-
|
|
40
|
-
var
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Package @commodo/fields does not have types.
|
|
44
|
-
*/
|
|
45
|
-
// @ts-ignore
|
|
46
|
-
|
|
21
|
+
var _validation = require("./contentModelGroup/validation");
|
|
22
|
+
var _utils = require("@webiny/utils");
|
|
47
23
|
/**
|
|
48
24
|
* Package mdbid does not have types.
|
|
49
25
|
*/
|
|
50
26
|
// @ts-ignore
|
|
51
|
-
const CreateContentModelGroupModel = (0, _fields.withFields)({
|
|
52
|
-
name: (0, _fields.string)({
|
|
53
|
-
validation: _validation.validation.create("required,maxLength:100")
|
|
54
|
-
}),
|
|
55
|
-
slug: (0, _fields.string)({
|
|
56
|
-
validation: _validation.validation.create("maxLength:100")
|
|
57
|
-
}),
|
|
58
|
-
description: (0, _fields.string)({
|
|
59
|
-
validation: _validation.validation.create("maxLength:255")
|
|
60
|
-
}),
|
|
61
|
-
icon: (0, _fields.string)({
|
|
62
|
-
validation: _validation.validation.create("required,maxLength:255")
|
|
63
|
-
})
|
|
64
|
-
})();
|
|
65
|
-
const UpdateContentModelGroupModel = (0, _fields.withFields)({
|
|
66
|
-
name: (0, _fields.string)({
|
|
67
|
-
validation: _validation.validation.create("maxLength:100")
|
|
68
|
-
}),
|
|
69
|
-
description: (0, _fields.string)({
|
|
70
|
-
validation: _validation.validation.create("maxLength:255")
|
|
71
|
-
}),
|
|
72
|
-
icon: (0, _fields.string)({
|
|
73
|
-
validation: _validation.validation.create("maxLength:255")
|
|
74
|
-
})
|
|
75
|
-
})();
|
|
76
27
|
|
|
77
28
|
const createModelGroupsCrud = params => {
|
|
78
29
|
const {
|
|
@@ -101,13 +52,11 @@ const createModelGroupsCrud = params => {
|
|
|
101
52
|
return [groups.concat(pluginsGroups)];
|
|
102
53
|
})
|
|
103
54
|
};
|
|
104
|
-
|
|
105
55
|
const clearGroupsCache = () => {
|
|
106
56
|
for (const loader of Object.values(dataLoaders)) {
|
|
107
57
|
loader.clearAll();
|
|
108
58
|
}
|
|
109
59
|
};
|
|
110
|
-
|
|
111
60
|
const getGroupsAsPlugins = () => {
|
|
112
61
|
const tenant = getTenant().id;
|
|
113
62
|
const locale = getLocale().code;
|
|
@@ -115,19 +64,16 @@ const createModelGroupsCrud = params => {
|
|
|
115
64
|
/**
|
|
116
65
|
* We need to filter out groups that are not for this tenant or locale.
|
|
117
66
|
* If it does not have tenant or locale define, it is for every locale and tenant
|
|
118
|
-
|
|
119
|
-
.filter(plugin => {
|
|
67
|
+
*/.filter(plugin => {
|
|
120
68
|
const {
|
|
121
69
|
tenant: t,
|
|
122
70
|
locale: l
|
|
123
71
|
} = plugin.contentModelGroup;
|
|
124
|
-
|
|
125
72
|
if (t && t !== tenant) {
|
|
126
73
|
return false;
|
|
127
74
|
} else if (l && l !== locale) {
|
|
128
75
|
return false;
|
|
129
76
|
}
|
|
130
|
-
|
|
131
77
|
return true;
|
|
132
78
|
}).map(plugin => {
|
|
133
79
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModelGroup), {}, {
|
|
@@ -137,29 +83,23 @@ const createModelGroupsCrud = params => {
|
|
|
137
83
|
});
|
|
138
84
|
});
|
|
139
85
|
};
|
|
140
|
-
|
|
141
86
|
const checkPermissions = check => {
|
|
142
87
|
return (0, _permissions.checkPermissions)(context, "cms.contentModelGroup", {
|
|
143
88
|
rwd: check
|
|
144
89
|
});
|
|
145
90
|
};
|
|
146
|
-
|
|
147
|
-
const groupsGet = async id => {
|
|
91
|
+
const getGroupViaDataLoader = async id => {
|
|
148
92
|
const groups = await dataLoaders.listGroups.load("listGroups");
|
|
149
93
|
const group = groups.find(g => g.id === id);
|
|
150
|
-
|
|
151
94
|
if (!group) {
|
|
152
95
|
throw new _handlerGraphql.NotFoundError(`Cms Group "${id}" was not found!`);
|
|
153
96
|
}
|
|
154
|
-
|
|
155
97
|
return group;
|
|
156
98
|
};
|
|
157
|
-
|
|
158
|
-
const groupsList = async params => {
|
|
99
|
+
const listGroupsViaDataLoader = async params => {
|
|
159
100
|
const {
|
|
160
101
|
where
|
|
161
102
|
} = params || {};
|
|
162
|
-
|
|
163
103
|
try {
|
|
164
104
|
return await dataLoaders.listGroups.load("listGroups");
|
|
165
105
|
} catch (ex) {
|
|
@@ -167,21 +107,30 @@ const createModelGroupsCrud = params => {
|
|
|
167
107
|
where
|
|
168
108
|
}));
|
|
169
109
|
}
|
|
170
|
-
};
|
|
171
|
-
|
|
110
|
+
};
|
|
172
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Create
|
|
114
|
+
*/
|
|
173
115
|
const onGroupBeforeCreate = (0, _pubsub.createTopic)("cms.onGroupBeforeCreate");
|
|
174
|
-
const onGroupAfterCreate = (0, _pubsub.createTopic)("cms.onGroupAfterCreate");
|
|
175
|
-
|
|
116
|
+
const onGroupAfterCreate = (0, _pubsub.createTopic)("cms.onGroupAfterCreate");
|
|
117
|
+
const onGroupCreateError = (0, _pubsub.createTopic)("cms.onGroupCreateError");
|
|
118
|
+
/**
|
|
119
|
+
* Update
|
|
120
|
+
*/
|
|
176
121
|
const onGroupBeforeUpdate = (0, _pubsub.createTopic)("cms.onGroupBeforeUpdate");
|
|
177
|
-
const onGroupAfterUpdate = (0, _pubsub.createTopic)("cms.onGroupAfterUpdate");
|
|
178
|
-
|
|
122
|
+
const onGroupAfterUpdate = (0, _pubsub.createTopic)("cms.onGroupAfterUpdate");
|
|
123
|
+
const onGroupUpdateError = (0, _pubsub.createTopic)("cms.onGroupUpdateError");
|
|
124
|
+
/**
|
|
125
|
+
* Delete
|
|
126
|
+
*/
|
|
179
127
|
const onGroupBeforeDelete = (0, _pubsub.createTopic)("cms.onGroupBeforeDelete");
|
|
180
128
|
const onGroupAfterDelete = (0, _pubsub.createTopic)("cms.onGroupAfterDelete");
|
|
129
|
+
const onGroupDeleteError = (0, _pubsub.createTopic)("cms.onGroupDeleteError");
|
|
130
|
+
|
|
181
131
|
/**
|
|
182
132
|
* We need to assign some default behaviors.
|
|
183
133
|
*/
|
|
184
|
-
|
|
185
134
|
(0, _beforeCreate.assignBeforeGroupCreate)({
|
|
186
135
|
onGroupBeforeCreate,
|
|
187
136
|
plugins: context.plugins,
|
|
@@ -196,6 +145,160 @@ const createModelGroupsCrud = params => {
|
|
|
196
145
|
plugins: context.plugins,
|
|
197
146
|
storageOperations
|
|
198
147
|
});
|
|
148
|
+
/**
|
|
149
|
+
* CRUD Methods
|
|
150
|
+
*/
|
|
151
|
+
const getGroup = async id => {
|
|
152
|
+
const permission = await checkPermissions("r");
|
|
153
|
+
const group = await getGroupViaDataLoader(id);
|
|
154
|
+
(0, _ownership.checkOwnership)(context, permission, group);
|
|
155
|
+
(0, _access.validateGroupAccess)(context, permission, group);
|
|
156
|
+
return group;
|
|
157
|
+
};
|
|
158
|
+
const listGroups = async params => {
|
|
159
|
+
const {
|
|
160
|
+
where
|
|
161
|
+
} = params || {};
|
|
162
|
+
const {
|
|
163
|
+
tenant,
|
|
164
|
+
locale
|
|
165
|
+
} = where || {};
|
|
166
|
+
const permission = await checkPermissions("r");
|
|
167
|
+
const response = await listGroupsViaDataLoader((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params || {}), {}, {
|
|
168
|
+
where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where || {}), {}, {
|
|
169
|
+
tenant: tenant || getTenant().id,
|
|
170
|
+
locale: locale || getLocale().code
|
|
171
|
+
})
|
|
172
|
+
}));
|
|
173
|
+
return response.filter(group => {
|
|
174
|
+
if (!(0, _ownership.validateOwnership)(context, permission, group)) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
return (0, _access.validateGroupAccess)(context, permission, group);
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
const createGroup = async input => {
|
|
181
|
+
await checkPermissions("w");
|
|
182
|
+
const result = await (0, _validation.createGroupCreateValidation)().safeParseAsync(input);
|
|
183
|
+
if (!result.success) {
|
|
184
|
+
throw (0, _utils.createZodError)(result.error);
|
|
185
|
+
}
|
|
186
|
+
const data = result.data;
|
|
187
|
+
const identity = getIdentity();
|
|
188
|
+
const id = (0, _mdbid.default)();
|
|
189
|
+
const group = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
|
|
190
|
+
id,
|
|
191
|
+
tenant: getTenant().id,
|
|
192
|
+
locale: getLocale().code,
|
|
193
|
+
createdOn: new Date().toISOString(),
|
|
194
|
+
savedOn: new Date().toISOString(),
|
|
195
|
+
createdBy: {
|
|
196
|
+
id: identity.id,
|
|
197
|
+
displayName: identity.displayName,
|
|
198
|
+
type: identity.type
|
|
199
|
+
},
|
|
200
|
+
webinyVersion: context.WEBINY_VERSION
|
|
201
|
+
});
|
|
202
|
+
try {
|
|
203
|
+
await onGroupBeforeCreate.publish({
|
|
204
|
+
group
|
|
205
|
+
});
|
|
206
|
+
const result = await storageOperations.groups.create({
|
|
207
|
+
group
|
|
208
|
+
});
|
|
209
|
+
clearGroupsCache();
|
|
210
|
+
await onGroupAfterCreate.publish({
|
|
211
|
+
group: result
|
|
212
|
+
});
|
|
213
|
+
return group;
|
|
214
|
+
} catch (ex) {
|
|
215
|
+
await onGroupCreateError.publish({
|
|
216
|
+
input,
|
|
217
|
+
group,
|
|
218
|
+
error: ex
|
|
219
|
+
});
|
|
220
|
+
throw new _error.default(ex.message || "Could not save data model group.", ex.code || "ERROR_ON_CREATE", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
|
|
221
|
+
group,
|
|
222
|
+
input
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
const updateGroup = async (id, input) => {
|
|
227
|
+
const permission = await checkPermissions("w");
|
|
228
|
+
const original = await getGroupViaDataLoader(id);
|
|
229
|
+
(0, _ownership.checkOwnership)(context, permission, original);
|
|
230
|
+
const result = await (0, _validation.createGroupUpdateValidation)().safeParseAsync(input);
|
|
231
|
+
if (!result.success) {
|
|
232
|
+
throw (0, _utils.createZodError)(result.error);
|
|
233
|
+
}
|
|
234
|
+
const data = result.data;
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* No need to continue if no values were changed
|
|
238
|
+
*/
|
|
239
|
+
if (Object.keys(data).length === 0) {
|
|
240
|
+
return original;
|
|
241
|
+
}
|
|
242
|
+
const group = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
|
|
243
|
+
locale: getLocale().code,
|
|
244
|
+
tenant: getTenant().id,
|
|
245
|
+
savedOn: new Date().toISOString()
|
|
246
|
+
});
|
|
247
|
+
try {
|
|
248
|
+
await onGroupBeforeUpdate.publish({
|
|
249
|
+
original,
|
|
250
|
+
group
|
|
251
|
+
});
|
|
252
|
+
const updatedGroup = await storageOperations.groups.update({
|
|
253
|
+
group
|
|
254
|
+
});
|
|
255
|
+
clearGroupsCache();
|
|
256
|
+
await onGroupAfterUpdate.publish({
|
|
257
|
+
original,
|
|
258
|
+
group: updatedGroup
|
|
259
|
+
});
|
|
260
|
+
return updatedGroup;
|
|
261
|
+
} catch (ex) {
|
|
262
|
+
await onGroupUpdateError.publish({
|
|
263
|
+
input,
|
|
264
|
+
original,
|
|
265
|
+
group,
|
|
266
|
+
error: ex
|
|
267
|
+
});
|
|
268
|
+
throw new _error.default(ex.message, ex.code || "UPDATE_ERROR", {
|
|
269
|
+
error: ex,
|
|
270
|
+
original,
|
|
271
|
+
group,
|
|
272
|
+
input
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
const deleteGroup = async id => {
|
|
277
|
+
const permission = await checkPermissions("d");
|
|
278
|
+
const group = await getGroupViaDataLoader(id);
|
|
279
|
+
(0, _ownership.checkOwnership)(context, permission, group);
|
|
280
|
+
try {
|
|
281
|
+
await onGroupBeforeDelete.publish({
|
|
282
|
+
group
|
|
283
|
+
});
|
|
284
|
+
await storageOperations.groups.delete({
|
|
285
|
+
group
|
|
286
|
+
});
|
|
287
|
+
clearGroupsCache();
|
|
288
|
+
await onGroupAfterDelete.publish({
|
|
289
|
+
group
|
|
290
|
+
});
|
|
291
|
+
} catch (ex) {
|
|
292
|
+
await onGroupDeleteError.publish({
|
|
293
|
+
group,
|
|
294
|
+
error: ex
|
|
295
|
+
});
|
|
296
|
+
throw new _error.default(ex.message, ex.code || "DELETE_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
|
|
297
|
+
id
|
|
298
|
+
}));
|
|
299
|
+
}
|
|
300
|
+
return true;
|
|
301
|
+
};
|
|
199
302
|
return {
|
|
200
303
|
/**
|
|
201
304
|
* Deprecated - will be removed in 5.36.0
|
|
@@ -206,161 +309,44 @@ const createModelGroupsCrud = params => {
|
|
|
206
309
|
onAfterGroupUpdate: onGroupAfterUpdate,
|
|
207
310
|
onBeforeGroupDelete: onGroupBeforeDelete,
|
|
208
311
|
onAfterGroupDelete: onGroupAfterDelete,
|
|
209
|
-
|
|
210
312
|
/**
|
|
211
313
|
* Released in 5.34.0
|
|
212
314
|
*/
|
|
213
315
|
onGroupBeforeCreate,
|
|
214
316
|
onGroupAfterCreate,
|
|
317
|
+
onGroupCreateError,
|
|
215
318
|
onGroupBeforeUpdate,
|
|
216
319
|
onGroupAfterUpdate,
|
|
320
|
+
onGroupUpdateError,
|
|
217
321
|
onGroupBeforeDelete,
|
|
218
322
|
onGroupAfterDelete,
|
|
323
|
+
onGroupDeleteError,
|
|
219
324
|
clearGroupsCache,
|
|
220
325
|
getGroup: async id => {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
(0, _access.validateGroupAccess)(context, permission, group);
|
|
225
|
-
return group;
|
|
326
|
+
return context.benchmark.measure("headlessCms.crud.groups.getGroup", async () => {
|
|
327
|
+
return getGroup(id);
|
|
328
|
+
});
|
|
226
329
|
},
|
|
227
330
|
listGroups: async params => {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
} = params || {};
|
|
231
|
-
const {
|
|
232
|
-
tenant,
|
|
233
|
-
locale
|
|
234
|
-
} = where || {};
|
|
235
|
-
const permission = await checkPermissions("r");
|
|
236
|
-
const response = await groupsList((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params || {}), {}, {
|
|
237
|
-
where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where || {}), {}, {
|
|
238
|
-
tenant: tenant || getTenant().id,
|
|
239
|
-
locale: locale || getLocale().code
|
|
240
|
-
})
|
|
241
|
-
}));
|
|
242
|
-
return response.filter(group => {
|
|
243
|
-
if (!(0, _ownership.validateOwnership)(context, permission, group)) {
|
|
244
|
-
return false;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
return (0, _access.validateGroupAccess)(context, permission, group);
|
|
331
|
+
return context.benchmark.measure("headlessCms.crud.groups.listGroups", async () => {
|
|
332
|
+
return listGroups(params);
|
|
248
333
|
});
|
|
249
334
|
},
|
|
250
|
-
createGroup: async
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
slug: inputData.slug ? (0, _toSlug.toSlug)(inputData.slug) : "",
|
|
254
|
-
description: inputData.description || ""
|
|
255
|
-
}));
|
|
256
|
-
await createdData.validate();
|
|
257
|
-
const input = await createdData.toJSON();
|
|
258
|
-
const identity = getIdentity();
|
|
259
|
-
const id = (0, _mdbid.default)();
|
|
260
|
-
const group = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, input), {}, {
|
|
261
|
-
id,
|
|
262
|
-
tenant: getTenant().id,
|
|
263
|
-
locale: getLocale().code,
|
|
264
|
-
createdOn: new Date().toISOString(),
|
|
265
|
-
savedOn: new Date().toISOString(),
|
|
266
|
-
createdBy: {
|
|
267
|
-
id: identity.id,
|
|
268
|
-
displayName: identity.displayName,
|
|
269
|
-
type: identity.type
|
|
270
|
-
},
|
|
271
|
-
webinyVersion: context.WEBINY_VERSION
|
|
335
|
+
createGroup: async input => {
|
|
336
|
+
return context.benchmark.measure("headlessCms.crud.groups.createGroup", async () => {
|
|
337
|
+
return createGroup(input);
|
|
272
338
|
});
|
|
273
|
-
|
|
274
|
-
try {
|
|
275
|
-
await onGroupBeforeCreate.publish({
|
|
276
|
-
group
|
|
277
|
-
});
|
|
278
|
-
const result = await storageOperations.groups.create({
|
|
279
|
-
group
|
|
280
|
-
});
|
|
281
|
-
clearGroupsCache();
|
|
282
|
-
await onGroupAfterCreate.publish({
|
|
283
|
-
group: result
|
|
284
|
-
});
|
|
285
|
-
return group;
|
|
286
|
-
} catch (ex) {
|
|
287
|
-
throw new _error.default(ex.message || "Could not save data model group.", ex.code || "ERROR_ON_CREATE", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
|
|
288
|
-
group,
|
|
289
|
-
input
|
|
290
|
-
}));
|
|
291
|
-
}
|
|
292
339
|
},
|
|
293
|
-
updateGroup: async (id,
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
(0, _ownership.checkOwnership)(context, permission, original);
|
|
297
|
-
const input = new UpdateContentModelGroupModel().populate(inputData);
|
|
298
|
-
await input.validate();
|
|
299
|
-
const updatedDataJson = await input.toJSON({
|
|
300
|
-
onlyDirty: true
|
|
340
|
+
updateGroup: async (id, input) => {
|
|
341
|
+
return context.benchmark.measure("headlessCms.crud.groups.updateGroup", async () => {
|
|
342
|
+
return updateGroup(id, input);
|
|
301
343
|
});
|
|
302
|
-
/**
|
|
303
|
-
* No need to continue if no values were changed
|
|
304
|
-
*/
|
|
305
|
-
|
|
306
|
-
if (Object.keys(updatedDataJson).length === 0) {
|
|
307
|
-
return original;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
const group = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), updatedDataJson), {}, {
|
|
311
|
-
locale: getLocale().code,
|
|
312
|
-
tenant: getTenant().id,
|
|
313
|
-
savedOn: new Date().toISOString()
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
try {
|
|
317
|
-
await onGroupBeforeUpdate.publish({
|
|
318
|
-
original,
|
|
319
|
-
group
|
|
320
|
-
});
|
|
321
|
-
const updatedGroup = await storageOperations.groups.update({
|
|
322
|
-
group
|
|
323
|
-
});
|
|
324
|
-
clearGroupsCache();
|
|
325
|
-
await onGroupAfterUpdate.publish({
|
|
326
|
-
original,
|
|
327
|
-
group: updatedGroup
|
|
328
|
-
});
|
|
329
|
-
return updatedGroup;
|
|
330
|
-
} catch (ex) {
|
|
331
|
-
throw new _error.default(ex.message, ex.code || "UPDATE_ERROR", {
|
|
332
|
-
error: ex,
|
|
333
|
-
original,
|
|
334
|
-
group,
|
|
335
|
-
input
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
344
|
},
|
|
339
345
|
deleteGroup: async id => {
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
try {
|
|
345
|
-
await onGroupBeforeDelete.publish({
|
|
346
|
-
group
|
|
347
|
-
});
|
|
348
|
-
await storageOperations.groups.delete({
|
|
349
|
-
group
|
|
350
|
-
});
|
|
351
|
-
clearGroupsCache();
|
|
352
|
-
await onGroupAfterDelete.publish({
|
|
353
|
-
group
|
|
354
|
-
});
|
|
355
|
-
} catch (ex) {
|
|
356
|
-
throw new _error.default(ex.message, ex.code || "DELETE_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
|
|
357
|
-
id
|
|
358
|
-
}));
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
return true;
|
|
346
|
+
return context.benchmark.measure("headlessCms.crud.groups.deleteGroup", async () => {
|
|
347
|
+
return deleteGroup(id);
|
|
348
|
+
});
|
|
362
349
|
}
|
|
363
350
|
};
|
|
364
351
|
};
|
|
365
|
-
|
|
366
352
|
exports.createModelGroupsCrud = createModelGroupsCrud;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CreateContentModelGroupModel","withFields","name","string","validation","create","slug","description","icon","UpdateContentModelGroupModel","createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","dataLoaders","listGroups","DataLoader","tenant","id","locale","code","pluginsGroups","getGroupsAsPlugins","map","group","groups","list","where","concat","clearGroupsCache","loader","Object","values","clearAll","plugins","byType","CmsGroupPlugin","type","filter","plugin","t","l","contentModelGroup","webinyVersion","WEBINY_VERSION","checkPermissions","check","baseCheckPermissions","rwd","groupsGet","load","find","g","NotFoundError","groupsList","ex","WebinyError","message","data","onGroupBeforeCreate","createTopic","onGroupAfterCreate","onGroupBeforeUpdate","onGroupAfterUpdate","onGroupBeforeDelete","onGroupAfterDelete","assignBeforeGroupCreate","assignBeforeGroupUpdate","assignBeforeGroupDelete","onBeforeGroupCreate","onAfterGroupCreate","onBeforeGroupUpdate","onAfterGroupUpdate","onBeforeGroupDelete","onAfterGroupDelete","getGroup","permission","checkOwnership","validateGroupAccess","response","validateOwnership","createGroup","inputData","createdData","populate","toSlug","validate","input","toJSON","identity","mdbid","createdOn","Date","toISOString","savedOn","createdBy","displayName","publish","result","updateGroup","original","updatedDataJson","onlyDirty","keys","length","updatedGroup","update","error","deleteGroup","delete"],"sources":["contentModelGroup.crud.ts"],"sourcesContent":["/**\n * Package @commodo/fields does not have types.\n */\n// @ts-ignore\nimport { withFields, string } from \"@commodo/fields\";\nimport { validation } from \"@webiny/validation\";\n/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport {\n CmsGroupContext,\n CmsGroupListParams,\n CmsGroupPermission,\n CmsGroup,\n CmsContext,\n HeadlessCmsStorageOperations,\n CmsGroupCreateInput,\n OnGroupBeforeCreateTopicParams,\n OnGroupAfterCreateTopicParams,\n OnGroupBeforeUpdateTopicParams,\n OnGroupAfterUpdateTopicParams,\n OnGroupBeforeDeleteTopicParams,\n OnGroupAfterDeleteTopicParams\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\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 { assignBeforeGroupUpdate } from \"./contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"./contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"./contentModelGroup/beforeDelete\";\nimport DataLoader from \"dataloader\";\nimport { checkPermissions as baseCheckPermissions } from \"~/utils/permissions\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { validateGroupAccess } from \"~/utils/access\";\nimport { toSlug } from \"~/utils/toSlug\";\n\nconst CreateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"required,maxLength:100\") }),\n slug: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"required,maxLength:255\") })\n})();\n\nconst UpdateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"maxLength:255\") })\n})();\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const dataLoaders = {\n listGroups: new DataLoader(async () => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const pluginsGroups = getGroupsAsPlugins().map(group => {\n return {\n ...group,\n tenant: group.tenant || tenant,\n locale: group.locale || locale\n };\n });\n\n const groups = await storageOperations.groups.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n\n return [groups.concat(pluginsGroups)];\n })\n };\n\n const clearGroupsCache = (): void => {\n for (const loader of Object.values(dataLoaders)) {\n loader.clearAll();\n }\n };\n\n const getGroupsAsPlugins = (): CmsGroup[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n /**\n * We need to filter out groups 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: t, locale: l } = plugin.contentModelGroup;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModelGroup,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const checkPermissions = (check: string): Promise<CmsGroupPermission> => {\n return baseCheckPermissions(context, \"cms.contentModelGroup\", { rwd: check });\n };\n\n const groupsGet = async (id: string) => {\n const groups = await dataLoaders.listGroups.load(\"listGroups\");\n\n const group = groups.find(g => g.id === id);\n\n if (!group) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n return group;\n };\n\n const groupsList = async (params: CmsGroupListParams) => {\n const { where } = params || {};\n\n try {\n return await dataLoaders.listGroups.load(\"listGroups\");\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"LIST_ERROR\", {\n ...(ex.data || {}),\n where\n });\n }\n };\n\n // create\n const onGroupBeforeCreate =\n createTopic<OnGroupBeforeCreateTopicParams>(\"cms.onGroupBeforeCreate\");\n const onGroupAfterCreate = createTopic<OnGroupAfterCreateTopicParams>(\"cms.onGroupAfterCreate\");\n // update\n const onGroupBeforeUpdate =\n createTopic<OnGroupBeforeUpdateTopicParams>(\"cms.onGroupBeforeUpdate\");\n const onGroupAfterUpdate = createTopic<OnGroupAfterUpdateTopicParams>(\"cms.onGroupAfterUpdate\");\n // delete\n const onGroupBeforeDelete =\n createTopic<OnGroupBeforeDeleteTopicParams>(\"cms.onGroupBeforeDelete\");\n const onGroupAfterDelete = createTopic<OnGroupAfterDeleteTopicParams>(\"cms.onGroupAfterDelete\");\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onGroupBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onGroupBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onGroupBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeGroupCreate: onGroupBeforeCreate,\n onAfterGroupCreate: onGroupAfterCreate,\n onBeforeGroupUpdate: onGroupBeforeUpdate,\n onAfterGroupUpdate: onGroupAfterUpdate,\n onBeforeGroupDelete: onGroupBeforeDelete,\n onAfterGroupDelete: onGroupAfterDelete,\n /**\n * Released in 5.34.0\n */\n onGroupBeforeCreate,\n onGroupAfterCreate,\n onGroupBeforeUpdate,\n onGroupAfterUpdate,\n onGroupBeforeDelete,\n onGroupAfterDelete,\n clearGroupsCache,\n getGroup: async id => {\n const permission = await checkPermissions(\"r\");\n\n const group = await groupsGet(id);\n checkOwnership(context, permission, group);\n validateGroupAccess(context, permission, group);\n\n return group;\n },\n listGroups: async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n const permission = await checkPermissions(\"r\");\n\n const response = await groupsList({\n ...(params || {}),\n where: {\n ...(where || {}),\n tenant: tenant || getTenant().id,\n locale: locale || getLocale().code\n }\n });\n\n return response.filter(group => {\n if (!validateOwnership(context, permission, group)) {\n return false;\n }\n return validateGroupAccess(context, permission, group);\n });\n },\n createGroup: async inputData => {\n await checkPermissions(\"w\");\n\n const createdData = new CreateContentModelGroupModel().populate({\n ...inputData,\n slug: inputData.slug ? toSlug(inputData.slug) : \"\",\n description: inputData.description || \"\"\n });\n await createdData.validate();\n const input: CmsGroupCreateInput & { slug: string; description: string } =\n await createdData.toJSON();\n\n const identity = getIdentity();\n\n const id = mdbid();\n const group: CmsGroup = {\n ...input,\n id,\n tenant: getTenant().id,\n locale: getLocale().code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n webinyVersion: context.WEBINY_VERSION\n };\n try {\n await onGroupBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n group\n });\n\n clearGroupsCache();\n\n await onGroupAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not save data model group.\",\n ex.code || \"ERROR_ON_CREATE\",\n {\n ...(ex.data || {}),\n group,\n input\n }\n );\n }\n },\n updateGroup: async (id, inputData) => {\n const permission = await checkPermissions(\"w\");\n\n const original = await groupsGet(id);\n\n checkOwnership(context, permission, original);\n\n const input = new UpdateContentModelGroupModel().populate(inputData);\n await input.validate();\n\n const updatedDataJson: Partial<CmsGroup> = await input.toJSON({\n onlyDirty: true\n });\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(updatedDataJson).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...updatedDataJson,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onGroupBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n group\n });\n clearGroupsCache();\n\n await onGroupAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n },\n deleteGroup: async id => {\n const permission = await checkPermissions(\"d\");\n\n const group = await groupsGet(id);\n\n checkOwnership(context, permission, group);\n\n try {\n await onGroupBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n clearGroupsCache();\n\n await onGroupAfterDelete.publish({\n group\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n }\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","dataLoaders","listGroups","DataLoader","tenant","id","locale","code","pluginsGroups","getGroupsAsPlugins","map","group","groups","list","where","concat","clearGroupsCache","loader","Object","values","clearAll","plugins","byType","CmsGroupPlugin","type","filter","plugin","t","l","contentModelGroup","webinyVersion","WEBINY_VERSION","checkPermissions","check","baseCheckPermissions","rwd","getGroupViaDataLoader","load","find","g","NotFoundError","listGroupsViaDataLoader","ex","WebinyError","message","data","onGroupBeforeCreate","createTopic","onGroupAfterCreate","onGroupCreateError","onGroupBeforeUpdate","onGroupAfterUpdate","onGroupUpdateError","onGroupBeforeDelete","onGroupAfterDelete","onGroupDeleteError","assignBeforeGroupCreate","assignBeforeGroupUpdate","assignBeforeGroupDelete","getGroup","permission","checkOwnership","validateGroupAccess","response","validateOwnership","createGroup","input","result","createGroupCreateValidation","safeParseAsync","success","createZodError","error","identity","mdbid","createdOn","Date","toISOString","savedOn","createdBy","displayName","publish","create","updateGroup","original","createGroupUpdateValidation","keys","length","updatedGroup","update","deleteGroup","delete","onBeforeGroupCreate","onAfterGroupCreate","onBeforeGroupUpdate","onAfterGroupUpdate","onBeforeGroupDelete","onAfterGroupDelete","benchmark","measure"],"sources":["contentModelGroup.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\n/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsGroupContext,\n CmsGroupListParams,\n CmsGroupPermission,\n CmsGroup,\n CmsContext,\n HeadlessCmsStorageOperations,\n OnGroupBeforeCreateTopicParams,\n OnGroupAfterCreateTopicParams,\n OnGroupBeforeUpdateTopicParams,\n OnGroupAfterUpdateTopicParams,\n OnGroupBeforeDeleteTopicParams,\n OnGroupAfterDeleteTopicParams,\n OnGroupCreateErrorTopicParams,\n OnGroupUpdateErrorTopicParams,\n OnGroupDeleteErrorTopicParams\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\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 { assignBeforeGroupUpdate } from \"./contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"./contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"./contentModelGroup/beforeDelete\";\nimport { checkPermissions as baseCheckPermissions } from \"~/utils/permissions\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { validateGroupAccess } from \"~/utils/access\";\nimport {\n createGroupCreateValidation,\n createGroupUpdateValidation\n} from \"~/crud/contentModelGroup/validation\";\nimport { createZodError } from \"@webiny/utils\";\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const dataLoaders = {\n listGroups: new DataLoader(async () => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const pluginsGroups = getGroupsAsPlugins().map(group => {\n return {\n ...group,\n tenant: group.tenant || tenant,\n locale: group.locale || locale\n };\n });\n\n const groups = await storageOperations.groups.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n\n return [groups.concat(pluginsGroups)];\n })\n };\n\n const clearGroupsCache = (): void => {\n for (const loader of Object.values(dataLoaders)) {\n loader.clearAll();\n }\n };\n\n const getGroupsAsPlugins = (): CmsGroup[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n /**\n * We need to filter out groups 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: t, locale: l } = plugin.contentModelGroup;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModelGroup,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const checkPermissions = (check: string): Promise<CmsGroupPermission> => {\n return baseCheckPermissions(context, \"cms.contentModelGroup\", { rwd: check });\n };\n\n const getGroupViaDataLoader = async (id: string) => {\n const groups = await dataLoaders.listGroups.load(\"listGroups\");\n\n const group = groups.find(g => g.id === id);\n\n if (!group) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n return group;\n };\n\n const listGroupsViaDataLoader = async (params: CmsGroupListParams) => {\n const { where } = params || {};\n\n try {\n return await dataLoaders.listGroups.load(\"listGroups\");\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"LIST_ERROR\", {\n ...(ex.data || {}),\n where\n });\n }\n };\n\n /**\n * Create\n */\n const onGroupBeforeCreate =\n createTopic<OnGroupBeforeCreateTopicParams>(\"cms.onGroupBeforeCreate\");\n const onGroupAfterCreate = createTopic<OnGroupAfterCreateTopicParams>(\"cms.onGroupAfterCreate\");\n const onGroupCreateError = createTopic<OnGroupCreateErrorTopicParams>(\"cms.onGroupCreateError\");\n /**\n * Update\n */\n const onGroupBeforeUpdate =\n createTopic<OnGroupBeforeUpdateTopicParams>(\"cms.onGroupBeforeUpdate\");\n const onGroupAfterUpdate = createTopic<OnGroupAfterUpdateTopicParams>(\"cms.onGroupAfterUpdate\");\n const onGroupUpdateError = createTopic<OnGroupUpdateErrorTopicParams>(\"cms.onGroupUpdateError\");\n /**\n * Delete\n */\n const onGroupBeforeDelete =\n createTopic<OnGroupBeforeDeleteTopicParams>(\"cms.onGroupBeforeDelete\");\n const onGroupAfterDelete = createTopic<OnGroupAfterDeleteTopicParams>(\"cms.onGroupAfterDelete\");\n const onGroupDeleteError = createTopic<OnGroupDeleteErrorTopicParams>(\"cms.onGroupDeleteError\");\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onGroupBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onGroupBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onGroupBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n /**\n * CRUD Methods\n */\n const getGroup: CmsGroupContext[\"getGroup\"] = async id => {\n const permission = await checkPermissions(\"r\");\n\n const group = await getGroupViaDataLoader(id);\n checkOwnership(context, permission, group);\n validateGroupAccess(context, permission, group);\n\n return group;\n };\n const listGroups: CmsGroupContext[\"listGroups\"] = async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n const permission = await checkPermissions(\"r\");\n\n const response = await listGroupsViaDataLoader({\n ...(params || {}),\n where: {\n ...(where || {}),\n tenant: tenant || getTenant().id,\n locale: locale || getLocale().code\n }\n });\n\n return response.filter(group => {\n if (!validateOwnership(context, permission, group)) {\n return false;\n }\n return validateGroupAccess(context, permission, group);\n });\n };\n const createGroup: CmsGroupContext[\"createGroup\"] = async input => {\n await checkPermissions(\"w\");\n\n const result = await createGroupCreateValidation().safeParseAsync(input);\n\n if (!result.success) {\n throw createZodError(result.error);\n }\n const data = result.data;\n\n const identity = getIdentity();\n\n const id = mdbid();\n const group: CmsGroup = {\n ...data,\n id,\n tenant: getTenant().id,\n locale: getLocale().code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n webinyVersion: context.WEBINY_VERSION\n };\n try {\n await onGroupBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n group\n });\n\n clearGroupsCache();\n\n await onGroupAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\n await onGroupCreateError.publish({\n input,\n group,\n error: ex\n });\n throw new WebinyError(\n ex.message || \"Could not save data model group.\",\n ex.code || \"ERROR_ON_CREATE\",\n {\n ...(ex.data || {}),\n group,\n input\n }\n );\n }\n };\n const updateGroup: CmsGroupContext[\"updateGroup\"] = async (id, input) => {\n const permission = await checkPermissions(\"w\");\n\n const original = await getGroupViaDataLoader(id);\n\n checkOwnership(context, permission, original);\n\n const result = await createGroupUpdateValidation().safeParseAsync(input);\n\n if (!result.success) {\n throw createZodError(result.error);\n }\n const data = result.data;\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(data).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...data,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onGroupBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n group\n });\n clearGroupsCache();\n\n await onGroupAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n await onGroupUpdateError.publish({\n input,\n original,\n group,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n };\n const deleteGroup: CmsGroupContext[\"deleteGroup\"] = async id => {\n const permission = await checkPermissions(\"d\");\n\n const group = await getGroupViaDataLoader(id);\n\n checkOwnership(context, permission, group);\n\n try {\n await onGroupBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n clearGroupsCache();\n\n await onGroupAfterDelete.publish({\n group\n });\n } catch (ex) {\n await onGroupDeleteError.publish({\n group,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n };\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeGroupCreate: onGroupBeforeCreate,\n onAfterGroupCreate: onGroupAfterCreate,\n onBeforeGroupUpdate: onGroupBeforeUpdate,\n onAfterGroupUpdate: onGroupAfterUpdate,\n onBeforeGroupDelete: onGroupBeforeDelete,\n onAfterGroupDelete: onGroupAfterDelete,\n /**\n * Released in 5.34.0\n */\n onGroupBeforeCreate,\n onGroupAfterCreate,\n onGroupCreateError,\n onGroupBeforeUpdate,\n onGroupAfterUpdate,\n onGroupUpdateError,\n onGroupBeforeDelete,\n onGroupAfterDelete,\n onGroupDeleteError,\n clearGroupsCache,\n getGroup: async id => {\n return context.benchmark.measure(\"headlessCms.crud.groups.getGroup\", async () => {\n return getGroup(id);\n });\n },\n listGroups: async params => {\n return context.benchmark.measure(\"headlessCms.crud.groups.listGroups\", async () => {\n return listGroups(params);\n });\n },\n createGroup: async input => {\n return context.benchmark.measure(\"headlessCms.crud.groups.createGroup\", async () => {\n return createGroup(input);\n });\n },\n updateGroup: async (id, input) => {\n return context.benchmark.measure(\"headlessCms.crud.groups.updateGroup\", async () => {\n return updateGroup(id, input);\n });\n },\n deleteGroup: async id => {\n return context.benchmark.measure(\"headlessCms.crud.groups.deleteGroup\", async () => {\n return deleteGroup(id);\n });\n }\n };\n};\n"],"mappings":"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"}
|