@webiny/api-headless-cms 5.34.8 → 5.35.0-beta.0
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.js +47 -68
- 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 +5 -26
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +39 -66
- 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 +5 -2
- package/crud/contentEntry.crud.js +859 -941
- 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.js +39 -105
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.d.ts +1 -1
- package/crud/contentModel/beforeDelete.js +1 -15
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.js +31 -8
- 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 +0 -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/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 +1 -0
- package/crud/contentModel/validateModel.js +0 -8
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.d.ts +2 -1
- package/crud/contentModel/validateModelFields.js +25 -133
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +551 -0
- package/crud/contentModel/validation.js +145 -0
- package/crud/contentModel/validation.js.map +1 -0
- package/crud/contentModel.crud.js +354 -373
- 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 +177 -221
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/settings.crud.d.ts +1 -1
- package/crud/settings.crud.js +5 -22
- 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.js +0 -36
- package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +0 -53
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.js +0 -5
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.d.ts +2 -2
- package/graphql/buildSchemaPlugins.js +4 -9
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/checkEndpointAccess.d.ts +2 -0
- package/graphql/checkEndpointAccess.js +18 -0
- package/graphql/checkEndpointAccess.js.map +1 -0
- package/graphql/createExecutableSchema.d.ts +2 -3
- package/graphql/createExecutableSchema.js +2 -6
- package/graphql/createExecutableSchema.js.map +1 -1
- package/graphql/createRequestBody.d.ts +2 -0
- package/graphql/createRequestBody.js +14 -0
- package/graphql/createRequestBody.js.map +1 -0
- package/graphql/formatErrorPayload.d.ts +1 -0
- package/graphql/formatErrorPayload.js +25 -0
- package/graphql/formatErrorPayload.js.map +1 -0
- package/graphql/generateSchema.js +2 -9
- package/graphql/generateSchema.js.map +1 -1
- package/graphql/getSchema.d.ts +17 -0
- package/graphql/getSchema.js +102 -0
- package/graphql/getSchema.js.map +1 -0
- package/graphql/graphQLHandlerFactory.js +6 -173
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/handleRequest.d.ts +11 -0
- package/graphql/handleRequest.js +81 -0
- package/graphql/handleRequest.js.map +1 -0
- package/graphql/index.d.ts +1 -1
- package/graphql/index.js +0 -5
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.d.ts +2 -2
- package/graphql/schema/baseContentSchema.js +5 -19
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/baseSchema.d.ts +1 -1
- package/graphql/schema/baseSchema.js +5 -10
- package/graphql/schema/baseSchema.js.map +1 -1
- package/graphql/schema/contentEntries.d.ts +2 -2
- package/graphql/schema/contentEntries.js +98 -100
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.d.ts +2 -2
- package/graphql/schema/contentModelGroups.js +12 -29
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.d.ts +2 -2
- package/graphql/schema/contentModels.js +28 -31
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +7 -29
- 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 +1 -0
- package/graphql/schema/createManageSDL.js +56 -63
- 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 +4 -18
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.d.ts +1 -0
- package/graphql/schema/createReadSDL.js +24 -32
- 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 +2 -2
- package/graphql/schema/schemaPlugins.js +21 -30
- 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 +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.js +57 -48
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js +2 -18
- package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -1
- package/graphqlFields/dynamicZone/index.js +0 -2
- package/graphqlFields/dynamicZone/index.js.map +1 -1
- 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.js +0 -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 +21 -38
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +59 -65
- 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 +4 -2
- package/index.js +26 -22
- 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 +26 -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.js +0 -10
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -1
- package/plugins/CmsGroupPlugin.js +0 -8
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +0 -5
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +21 -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/StorageOperationsCmsModelPlugin.d.ts +23 -0
- package/plugins/StorageOperationsCmsModelPlugin.js +42 -0
- package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -0
- 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 -12
- package/plugins/index.js.map +1 -1
- package/storage/default.js +0 -3
- package/storage/default.js.map +1 -1
- package/storage/object.js +0 -19
- package/storage/object.js.map +1 -1
- package/types.d.ts +173 -79
- package/types.js +23 -73
- 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 +9 -33
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.d.ts +1 -5
- package/utils/converters/valueKeyStorageConverter.js +21 -44
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.d.ts +1 -0
- package/utils/createTypeFromFields.js +11 -20
- package/utils/createTypeFromFields.js.map +1 -1
- package/utils/createTypeName.d.ts +0 -2
- package/utils/createTypeName.js +2 -19
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +10 -26
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +0 -5
- package/utils/filterAsync.js.map +1 -1
- package/utils/getBaseFieldType.js +0 -2
- package/utils/getBaseFieldType.js.map +1 -1
- 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 +8 -10
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +0 -13
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.d.ts +2 -1
- package/utils/renderInputFields.js +4 -9
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +1 -10
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +0 -9
- 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.js +0 -4
- package/validators/dynamicZone.js.map +1 -1
- 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 +0 -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
|
@@ -1,52 +1,34 @@
|
|
|
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
|
-
|
|
8
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
9
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
|
|
12
10
|
var _dataloader = _interopRequireDefault(require("dataloader"));
|
|
13
|
-
|
|
11
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
14
12
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
|
-
|
|
16
13
|
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
14
|
var _pubsub = require("@webiny/pubsub");
|
|
25
|
-
|
|
26
15
|
var _beforeCreate = require("./contentModel/beforeCreate");
|
|
27
|
-
|
|
28
16
|
var _beforeUpdate = require("./contentModel/beforeUpdate");
|
|
29
|
-
|
|
30
17
|
var _beforeDelete = require("./contentModel/beforeDelete");
|
|
31
|
-
|
|
32
18
|
var _afterCreate = require("./contentModel/afterCreate");
|
|
33
|
-
|
|
34
19
|
var _afterUpdate = require("./contentModel/afterUpdate");
|
|
35
|
-
|
|
36
20
|
var _afterDelete = require("./contentModel/afterDelete");
|
|
37
|
-
|
|
38
21
|
var _afterCreateFrom = require("./contentModel/afterCreateFrom");
|
|
39
|
-
|
|
40
22
|
var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
|
|
41
|
-
|
|
42
23
|
var _permissions = require("../utils/permissions");
|
|
43
|
-
|
|
44
24
|
var _filterAsync = require("../utils/filterAsync");
|
|
45
|
-
|
|
46
25
|
var _ownership = require("../utils/ownership");
|
|
47
|
-
|
|
48
26
|
var _access = require("../utils/access");
|
|
49
|
-
|
|
27
|
+
var _validation = require("./contentModel/validation");
|
|
28
|
+
var _utils = require("@webiny/utils");
|
|
29
|
+
var _defaultFields = require("./contentModel/defaultFields");
|
|
30
|
+
var _modelApiName = require("./contentModel/compatibility/modelApiName");
|
|
31
|
+
const _excluded = ["defaultFields"];
|
|
50
32
|
/**
|
|
51
33
|
* Given a model, return an array of tags ensuring the `type` tag is set.
|
|
52
34
|
*/
|
|
@@ -54,14 +36,11 @@ const ensureTypeTag = model => {
|
|
|
54
36
|
// Let's make sure we have a `type` tag assigned.
|
|
55
37
|
// If `type` tag is not set, set it to a default one (`model`).
|
|
56
38
|
const tags = model.tags || [];
|
|
57
|
-
|
|
58
39
|
if (!tags.some(tag => tag.startsWith("type:"))) {
|
|
59
40
|
tags.push("type:model");
|
|
60
41
|
}
|
|
61
|
-
|
|
62
42
|
return tags;
|
|
63
43
|
};
|
|
64
|
-
|
|
65
44
|
const createModelsCrud = params => {
|
|
66
45
|
const {
|
|
67
46
|
getTenant,
|
|
@@ -82,32 +61,33 @@ const createModelsCrud = params => {
|
|
|
82
61
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
83
62
|
tags: ensureTypeTag(model),
|
|
84
63
|
tenant: model.tenant || getTenant().id,
|
|
85
|
-
locale: model.locale || getLocale().code
|
|
64
|
+
locale: model.locale || getLocale().code,
|
|
65
|
+
/**
|
|
66
|
+
* TODO: remove in v5.36.0
|
|
67
|
+
* This is for backward compatibility while migrations are not yet executed.
|
|
68
|
+
*/
|
|
69
|
+
singularApiName: (0, _modelApiName.ensureSingularApiName)(model),
|
|
70
|
+
pluralApiName: (0, _modelApiName.ensurePluralApiName)(model)
|
|
86
71
|
});
|
|
87
72
|
})];
|
|
88
73
|
})
|
|
89
74
|
};
|
|
90
|
-
|
|
91
75
|
const clearModelsCache = () => {
|
|
92
76
|
for (const loader of Object.values(loaders)) {
|
|
93
77
|
loader.clearAll();
|
|
94
78
|
}
|
|
95
79
|
};
|
|
96
|
-
|
|
97
80
|
const managers = new Map();
|
|
98
|
-
|
|
99
81
|
const updateManager = async (context, model) => {
|
|
100
82
|
const manager = await (0, _contentModelManagerFactory.contentModelManagerFactory)(context, model);
|
|
101
83
|
managers.set(model.modelId, manager);
|
|
102
84
|
return manager;
|
|
103
85
|
};
|
|
104
|
-
|
|
105
86
|
const checkModelPermissions = check => {
|
|
106
87
|
return (0, _permissions.checkPermissions)(context, "cms.contentModel", {
|
|
107
88
|
rwd: check
|
|
108
89
|
});
|
|
109
90
|
};
|
|
110
|
-
|
|
111
91
|
const getModelsAsPlugins = () => {
|
|
112
92
|
const tenant = getTenant().id;
|
|
113
93
|
const locale = getLocale().code;
|
|
@@ -115,19 +95,16 @@ const createModelsCrud = params => {
|
|
|
115
95
|
/**
|
|
116
96
|
* We need to filter out models that are not for this tenant or locale.
|
|
117
97
|
* If it does not have tenant or locale define, it is for every locale and tenant
|
|
118
|
-
|
|
119
|
-
.filter(plugin => {
|
|
98
|
+
*/.filter(plugin => {
|
|
120
99
|
const {
|
|
121
100
|
tenant: modelTenant,
|
|
122
101
|
locale: modelLocale
|
|
123
102
|
} = plugin.contentModel;
|
|
124
|
-
|
|
125
103
|
if (modelTenant && modelTenant !== tenant) {
|
|
126
104
|
return false;
|
|
127
105
|
} else if (modelLocale && modelLocale !== locale) {
|
|
128
106
|
return false;
|
|
129
107
|
}
|
|
130
|
-
|
|
131
108
|
return true;
|
|
132
109
|
}).map(plugin => {
|
|
133
110
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
|
|
@@ -138,111 +115,95 @@ const createModelsCrud = params => {
|
|
|
138
115
|
});
|
|
139
116
|
});
|
|
140
117
|
};
|
|
141
|
-
|
|
142
118
|
const modelsGet = async modelId => {
|
|
143
119
|
const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);
|
|
144
|
-
|
|
145
120
|
if (pluginModel) {
|
|
146
121
|
return pluginModel;
|
|
147
122
|
}
|
|
148
|
-
|
|
149
123
|
const model = await storageOperations.models.get({
|
|
150
124
|
tenant: getTenant().id,
|
|
151
125
|
locale: getLocale().code,
|
|
152
126
|
modelId
|
|
153
127
|
});
|
|
154
|
-
|
|
155
128
|
if (!model) {
|
|
156
129
|
throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
|
|
157
130
|
}
|
|
158
|
-
|
|
159
131
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
|
|
160
132
|
tags: ensureTypeTag(model),
|
|
161
133
|
tenant: model.tenant || getTenant().id,
|
|
162
134
|
locale: model.locale || getLocale().code
|
|
163
135
|
});
|
|
164
136
|
};
|
|
165
|
-
|
|
166
137
|
const modelsList = async () => {
|
|
167
138
|
const databaseModels = await loaders.listModels.load("listModels");
|
|
168
139
|
const pluginsModels = getModelsAsPlugins();
|
|
169
140
|
return databaseModels.concat(pluginsModels);
|
|
170
141
|
};
|
|
171
|
-
|
|
172
142
|
const listModels = async () => {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
143
|
+
return context.benchmark.measure("headlessCms.crud.models.listModels", async () => {
|
|
144
|
+
const permission = await checkModelPermissions("r");
|
|
145
|
+
const models = await modelsList();
|
|
146
|
+
return (0, _filterAsync.filterAsync)(models, async model => {
|
|
147
|
+
if (!(0, _ownership.validateOwnership)(context, permission, model)) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
return (0, _access.validateModelAccess)(context, model);
|
|
151
|
+
});
|
|
181
152
|
});
|
|
182
153
|
};
|
|
183
|
-
|
|
184
154
|
const getModel = async modelId => {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
155
|
+
return context.benchmark.measure("headlessCms.crud.models.getModel", async () => {
|
|
156
|
+
const permission = await checkModelPermissions("r");
|
|
157
|
+
const model = await modelsGet(modelId);
|
|
158
|
+
(0, _ownership.checkOwnership)(context, permission, model);
|
|
159
|
+
await (0, _access.checkModelAccess)(context, model);
|
|
160
|
+
return model;
|
|
161
|
+
});
|
|
190
162
|
};
|
|
191
|
-
|
|
192
163
|
const getModelManager = async target => {
|
|
193
164
|
const modelId = typeof target === "string" ? target : target.modelId;
|
|
194
|
-
|
|
195
165
|
if (managers.has(modelId)) {
|
|
196
166
|
return managers.get(modelId);
|
|
197
167
|
}
|
|
198
|
-
|
|
199
168
|
const models = await modelsList();
|
|
200
169
|
const model = models.find(m => m.modelId === modelId);
|
|
201
|
-
|
|
202
170
|
if (!model) {
|
|
203
171
|
throw new _handlerGraphql.NotFoundError(`There is no content model "${modelId}".`);
|
|
204
172
|
}
|
|
205
|
-
|
|
206
173
|
return await updateManager(context, model);
|
|
207
174
|
};
|
|
175
|
+
|
|
208
176
|
/**
|
|
209
177
|
* Create
|
|
210
178
|
*/
|
|
211
|
-
|
|
212
|
-
|
|
213
179
|
const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
|
|
214
180
|
const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
|
|
215
181
|
const onModelCreateError = (0, _pubsub.createTopic)("cms.onModelCreateError");
|
|
216
182
|
/**
|
|
217
183
|
* Create from / clone
|
|
218
184
|
*/
|
|
219
|
-
|
|
220
185
|
const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
|
|
221
186
|
const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
|
|
222
187
|
const onModelCreateFromError = (0, _pubsub.createTopic)("cms.onModelCreateFromError");
|
|
223
188
|
/**
|
|
224
189
|
* Update
|
|
225
190
|
*/
|
|
226
|
-
|
|
227
191
|
const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
|
|
228
192
|
const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
|
|
229
193
|
const onModelUpdateError = (0, _pubsub.createTopic)("cms.onModelUpdateError");
|
|
230
194
|
/**
|
|
231
195
|
* Delete
|
|
232
196
|
*/
|
|
233
|
-
|
|
234
197
|
const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
|
|
235
198
|
const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
|
|
236
199
|
const onModelDeleteError = (0, _pubsub.createTopic)("cms.onModelDeleteError");
|
|
237
200
|
/**
|
|
238
201
|
* Initialize
|
|
239
202
|
*/
|
|
240
|
-
|
|
241
203
|
const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
|
|
242
204
|
/**
|
|
243
205
|
* We need to assign some default behaviors.
|
|
244
206
|
*/
|
|
245
|
-
|
|
246
207
|
(0, _beforeCreate.assignModelBeforeCreate)({
|
|
247
208
|
onModelBeforeCreate,
|
|
248
209
|
onModelBeforeCreateFrom,
|
|
@@ -274,6 +235,311 @@ const createModelsCrud = params => {
|
|
|
274
235
|
context,
|
|
275
236
|
onModelAfterDelete
|
|
276
237
|
});
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* CRUD methods
|
|
241
|
+
*/
|
|
242
|
+
const createModel = async input => {
|
|
243
|
+
await checkModelPermissions("w");
|
|
244
|
+
const result = await (0, _validation.createModelCreateValidation)().safeParseAsync(input);
|
|
245
|
+
if (!result.success) {
|
|
246
|
+
throw (0, _utils.createZodError)(result.error);
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* We need to extract the defaultFields because it is not for the CmsModel object.
|
|
250
|
+
*/
|
|
251
|
+
const _removeUndefinedValue = (0, _utils.removeUndefinedValues)(result.data),
|
|
252
|
+
{
|
|
253
|
+
defaultFields
|
|
254
|
+
} = _removeUndefinedValue,
|
|
255
|
+
data = (0, _objectWithoutProperties2.default)(_removeUndefinedValue, _excluded);
|
|
256
|
+
if (defaultFields) {
|
|
257
|
+
(0, _defaultFields.assignModelDefaultFields)(data);
|
|
258
|
+
}
|
|
259
|
+
const group = await context.security.withoutAuthorization(async () => {
|
|
260
|
+
return context.cms.getGroup(data.group);
|
|
261
|
+
});
|
|
262
|
+
if (!group) {
|
|
263
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
264
|
+
}
|
|
265
|
+
const identity = getIdentity();
|
|
266
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
|
|
267
|
+
modelId: data.modelId || "",
|
|
268
|
+
singularApiName: data.singularApiName,
|
|
269
|
+
pluralApiName: data.pluralApiName,
|
|
270
|
+
titleFieldId: "id",
|
|
271
|
+
descriptionFieldId: null,
|
|
272
|
+
imageFieldId: null,
|
|
273
|
+
description: data.description || "",
|
|
274
|
+
locale: getLocale().code,
|
|
275
|
+
tenant: getTenant().id,
|
|
276
|
+
group: {
|
|
277
|
+
id: group.id,
|
|
278
|
+
name: group.name
|
|
279
|
+
},
|
|
280
|
+
createdBy: {
|
|
281
|
+
id: identity.id,
|
|
282
|
+
displayName: identity.displayName,
|
|
283
|
+
type: identity.type
|
|
284
|
+
},
|
|
285
|
+
createdOn: new Date().toISOString(),
|
|
286
|
+
savedOn: new Date().toISOString(),
|
|
287
|
+
lockedFields: [],
|
|
288
|
+
webinyVersion: context.WEBINY_VERSION
|
|
289
|
+
});
|
|
290
|
+
model.tags = ensureTypeTag(model);
|
|
291
|
+
try {
|
|
292
|
+
await onModelBeforeCreate.publish({
|
|
293
|
+
input: data,
|
|
294
|
+
model
|
|
295
|
+
});
|
|
296
|
+
const createdModel = await storageOperations.models.create({
|
|
297
|
+
model
|
|
298
|
+
});
|
|
299
|
+
loaders.listModels.clearAll();
|
|
300
|
+
await updateManager(context, model);
|
|
301
|
+
await onModelAfterCreate.publish({
|
|
302
|
+
input: data,
|
|
303
|
+
model: createdModel
|
|
304
|
+
});
|
|
305
|
+
return createdModel;
|
|
306
|
+
} catch (ex) {
|
|
307
|
+
await onModelCreateError.publish({
|
|
308
|
+
input: data,
|
|
309
|
+
model,
|
|
310
|
+
error: ex
|
|
311
|
+
});
|
|
312
|
+
throw ex;
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
const updateModel = async (modelId, input) => {
|
|
316
|
+
await checkModelPermissions("w");
|
|
317
|
+
|
|
318
|
+
// Get a model record; this will also perform ownership validation.
|
|
319
|
+
const original = await getModel(modelId);
|
|
320
|
+
const result = await (0, _validation.createModelUpdateValidation)().safeParseAsync(input);
|
|
321
|
+
if (!result.success) {
|
|
322
|
+
throw (0, _utils.createZodError)(result.error);
|
|
323
|
+
}
|
|
324
|
+
const data = (0, _utils.removeUndefinedValues)(result.data);
|
|
325
|
+
if (Object.keys(data).length === 0) {
|
|
326
|
+
/**
|
|
327
|
+
* We need to return the original if nothing is to be updated.
|
|
328
|
+
*/
|
|
329
|
+
return original;
|
|
330
|
+
}
|
|
331
|
+
let group = {
|
|
332
|
+
id: original.group.id,
|
|
333
|
+
name: original.group.name
|
|
334
|
+
};
|
|
335
|
+
const groupId = data.group;
|
|
336
|
+
if (groupId) {
|
|
337
|
+
const groupData = await context.security.withoutAuthorization(async () => {
|
|
338
|
+
return context.cms.getGroup(groupId);
|
|
339
|
+
});
|
|
340
|
+
if (!groupData) {
|
|
341
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${groupId}".`);
|
|
342
|
+
}
|
|
343
|
+
group = {
|
|
344
|
+
id: groupData.id,
|
|
345
|
+
name: groupData.name
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
|
|
349
|
+
titleFieldId: data.titleFieldId === undefined ? original.titleFieldId : data.titleFieldId,
|
|
350
|
+
descriptionFieldId: data.descriptionFieldId === undefined ? original.descriptionFieldId : data.descriptionFieldId,
|
|
351
|
+
imageFieldId: data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,
|
|
352
|
+
group,
|
|
353
|
+
description: data.description || original.description,
|
|
354
|
+
tenant: original.tenant || getTenant().id,
|
|
355
|
+
locale: original.locale || getLocale().code,
|
|
356
|
+
webinyVersion: context.WEBINY_VERSION,
|
|
357
|
+
savedOn: new Date().toISOString()
|
|
358
|
+
});
|
|
359
|
+
model.tags = ensureTypeTag(model);
|
|
360
|
+
try {
|
|
361
|
+
await onModelBeforeUpdate.publish({
|
|
362
|
+
input: data,
|
|
363
|
+
original,
|
|
364
|
+
model
|
|
365
|
+
});
|
|
366
|
+
const resultModel = await storageOperations.models.update({
|
|
367
|
+
model
|
|
368
|
+
});
|
|
369
|
+
await updateManager(context, resultModel);
|
|
370
|
+
await onModelAfterUpdate.publish({
|
|
371
|
+
input: data,
|
|
372
|
+
original,
|
|
373
|
+
model: resultModel
|
|
374
|
+
});
|
|
375
|
+
return resultModel;
|
|
376
|
+
} catch (ex) {
|
|
377
|
+
await onModelUpdateError.publish({
|
|
378
|
+
input: data,
|
|
379
|
+
model,
|
|
380
|
+
original,
|
|
381
|
+
error: ex
|
|
382
|
+
});
|
|
383
|
+
throw ex;
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
const updateModelDirect = async params => {
|
|
387
|
+
const {
|
|
388
|
+
model: initialModel,
|
|
389
|
+
original
|
|
390
|
+
} = params;
|
|
391
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialModel), {}, {
|
|
392
|
+
tenant: initialModel.tenant || getTenant().id,
|
|
393
|
+
locale: initialModel.locale || getLocale().code,
|
|
394
|
+
webinyVersion: context.WEBINY_VERSION
|
|
395
|
+
});
|
|
396
|
+
try {
|
|
397
|
+
await onModelBeforeUpdate.publish({
|
|
398
|
+
input: {},
|
|
399
|
+
original,
|
|
400
|
+
model
|
|
401
|
+
});
|
|
402
|
+
const resultModel = await storageOperations.models.update({
|
|
403
|
+
model
|
|
404
|
+
});
|
|
405
|
+
await updateManager(context, resultModel);
|
|
406
|
+
loaders.listModels.clearAll();
|
|
407
|
+
await onModelAfterUpdate.publish({
|
|
408
|
+
input: {},
|
|
409
|
+
original,
|
|
410
|
+
model: resultModel
|
|
411
|
+
});
|
|
412
|
+
return resultModel;
|
|
413
|
+
} catch (ex) {
|
|
414
|
+
await onModelUpdateError.publish({
|
|
415
|
+
input: {},
|
|
416
|
+
original,
|
|
417
|
+
model,
|
|
418
|
+
error: ex
|
|
419
|
+
});
|
|
420
|
+
throw ex;
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
const createModelFrom = async (modelId, input) => {
|
|
424
|
+
await checkModelPermissions("w");
|
|
425
|
+
/**
|
|
426
|
+
* Get a model record; this will also perform ownership validation.
|
|
427
|
+
*/
|
|
428
|
+
const original = await getModel(modelId);
|
|
429
|
+
const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync((0, _objectSpread2.default)((0, _objectSpread2.default)({}, input), {}, {
|
|
430
|
+
description: input.description || original.description
|
|
431
|
+
}));
|
|
432
|
+
if (!result.success) {
|
|
433
|
+
throw (0, _utils.createZodError)(result.error);
|
|
434
|
+
}
|
|
435
|
+
const data = (0, _utils.removeUndefinedValues)(result.data);
|
|
436
|
+
const locale = await context.i18n.getLocale(data.locale || original.locale);
|
|
437
|
+
if (!locale) {
|
|
438
|
+
throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
442
|
+
*/
|
|
443
|
+
const group = await context.cms.storageOperations.groups.get({
|
|
444
|
+
id: data.group,
|
|
445
|
+
tenant: original.tenant,
|
|
446
|
+
locale: locale.code
|
|
447
|
+
});
|
|
448
|
+
if (!group) {
|
|
449
|
+
throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
|
|
450
|
+
}
|
|
451
|
+
const identity = getIdentity();
|
|
452
|
+
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
|
|
453
|
+
singularApiName: data.singularApiName,
|
|
454
|
+
pluralApiName: data.pluralApiName,
|
|
455
|
+
locale: locale.code,
|
|
456
|
+
group: {
|
|
457
|
+
id: group.id,
|
|
458
|
+
name: group.name
|
|
459
|
+
},
|
|
460
|
+
icon: data.icon,
|
|
461
|
+
name: data.name,
|
|
462
|
+
modelId: data.modelId || "",
|
|
463
|
+
description: data.description || "",
|
|
464
|
+
createdBy: {
|
|
465
|
+
id: identity.id,
|
|
466
|
+
displayName: identity.displayName,
|
|
467
|
+
type: identity.type
|
|
468
|
+
},
|
|
469
|
+
createdOn: new Date().toISOString(),
|
|
470
|
+
savedOn: new Date().toISOString(),
|
|
471
|
+
lockedFields: [],
|
|
472
|
+
webinyVersion: context.WEBINY_VERSION
|
|
473
|
+
});
|
|
474
|
+
try {
|
|
475
|
+
await onModelBeforeCreateFrom.publish({
|
|
476
|
+
input: data,
|
|
477
|
+
model,
|
|
478
|
+
original
|
|
479
|
+
});
|
|
480
|
+
const createdModel = await storageOperations.models.create({
|
|
481
|
+
model
|
|
482
|
+
});
|
|
483
|
+
loaders.listModels.clearAll();
|
|
484
|
+
await updateManager(context, model);
|
|
485
|
+
await onModelAfterCreateFrom.publish({
|
|
486
|
+
input: data,
|
|
487
|
+
original,
|
|
488
|
+
model: createdModel
|
|
489
|
+
});
|
|
490
|
+
return createdModel;
|
|
491
|
+
} catch (ex) {
|
|
492
|
+
await onModelCreateFromError.publish({
|
|
493
|
+
input: data,
|
|
494
|
+
original,
|
|
495
|
+
model,
|
|
496
|
+
error: ex
|
|
497
|
+
});
|
|
498
|
+
throw ex;
|
|
499
|
+
}
|
|
500
|
+
};
|
|
501
|
+
const deleteModel = async modelId => {
|
|
502
|
+
await checkModelPermissions("d");
|
|
503
|
+
const model = await getModel(modelId);
|
|
504
|
+
try {
|
|
505
|
+
await onModelBeforeDelete.publish({
|
|
506
|
+
model
|
|
507
|
+
});
|
|
508
|
+
try {
|
|
509
|
+
await storageOperations.models.delete({
|
|
510
|
+
model
|
|
511
|
+
});
|
|
512
|
+
} catch (ex) {
|
|
513
|
+
throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
|
|
514
|
+
error: ex,
|
|
515
|
+
modelId: model.modelId
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
await onModelAfterDelete.publish({
|
|
519
|
+
model
|
|
520
|
+
});
|
|
521
|
+
managers.delete(model.modelId);
|
|
522
|
+
} catch (ex) {
|
|
523
|
+
await onModelDeleteError.publish({
|
|
524
|
+
model,
|
|
525
|
+
error: ex
|
|
526
|
+
});
|
|
527
|
+
throw ex;
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
const initializeModel = async (modelId, data) => {
|
|
531
|
+
/**
|
|
532
|
+
* We require that users have write permissions to initialize models.
|
|
533
|
+
* Maybe introduce another permission for it?
|
|
534
|
+
*/
|
|
535
|
+
await checkModelPermissions("w");
|
|
536
|
+
const model = await getModel(modelId);
|
|
537
|
+
await onModelInitialize.publish({
|
|
538
|
+
model,
|
|
539
|
+
data
|
|
540
|
+
});
|
|
541
|
+
return true;
|
|
542
|
+
};
|
|
277
543
|
return {
|
|
278
544
|
/**
|
|
279
545
|
* Deprecated - will be removed in 5.36.0
|
|
@@ -286,7 +552,6 @@ const createModelsCrud = params => {
|
|
|
286
552
|
onAfterModelUpdate: onModelAfterUpdate,
|
|
287
553
|
onBeforeModelDelete: onModelBeforeDelete,
|
|
288
554
|
onAfterModelDelete: onModelAfterDelete,
|
|
289
|
-
|
|
290
555
|
/**
|
|
291
556
|
* Released in 5.34.0
|
|
292
557
|
*/
|
|
@@ -306,323 +571,40 @@ const createModelsCrud = params => {
|
|
|
306
571
|
clearModelsCache,
|
|
307
572
|
getModel,
|
|
308
573
|
listModels,
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
await createdData.validate();
|
|
314
|
-
const input = await createdData.toJSON();
|
|
315
|
-
context.security.disableAuthorization();
|
|
316
|
-
const group = await context.cms.getGroup(input.group);
|
|
317
|
-
context.security.enableAuthorization();
|
|
318
|
-
|
|
319
|
-
if (!group) {
|
|
320
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
const fields = await (0, _createFieldModels.createFieldModels)(input.fields);
|
|
324
|
-
const identity = getIdentity();
|
|
325
|
-
const model = {
|
|
326
|
-
name: input.name,
|
|
327
|
-
description: input.description || "",
|
|
328
|
-
modelId: input.modelId || "",
|
|
329
|
-
titleFieldId: "id",
|
|
330
|
-
locale: getLocale().code,
|
|
331
|
-
tenant: getTenant().id,
|
|
332
|
-
group: {
|
|
333
|
-
id: group.id,
|
|
334
|
-
name: group.name
|
|
335
|
-
},
|
|
336
|
-
createdBy: {
|
|
337
|
-
id: identity.id,
|
|
338
|
-
displayName: identity.displayName,
|
|
339
|
-
type: identity.type
|
|
340
|
-
},
|
|
341
|
-
createdOn: new Date().toISOString(),
|
|
342
|
-
savedOn: new Date().toISOString(),
|
|
343
|
-
fields,
|
|
344
|
-
lockedFields: [],
|
|
345
|
-
layout: input.layout || [],
|
|
346
|
-
tags: [...(input.tags || [])],
|
|
347
|
-
webinyVersion: context.WEBINY_VERSION
|
|
348
|
-
};
|
|
349
|
-
model.tags = ensureTypeTag(model);
|
|
350
|
-
|
|
351
|
-
try {
|
|
352
|
-
await onModelBeforeCreate.publish({
|
|
353
|
-
input,
|
|
354
|
-
model
|
|
355
|
-
});
|
|
356
|
-
const createdModel = await storageOperations.models.create({
|
|
357
|
-
model
|
|
358
|
-
});
|
|
359
|
-
loaders.listModels.clearAll();
|
|
360
|
-
await updateManager(context, model);
|
|
361
|
-
await onModelAfterCreate.publish({
|
|
362
|
-
input,
|
|
363
|
-
model: createdModel
|
|
364
|
-
});
|
|
365
|
-
return createdModel;
|
|
366
|
-
} catch (ex) {
|
|
367
|
-
await onModelCreateError.publish({
|
|
368
|
-
input,
|
|
369
|
-
model,
|
|
370
|
-
error: ex
|
|
371
|
-
});
|
|
372
|
-
throw ex;
|
|
373
|
-
}
|
|
574
|
+
async createModel(input) {
|
|
575
|
+
return context.benchmark.measure("headlessCms.crud.models.createModel", async () => {
|
|
576
|
+
return createModel(input);
|
|
577
|
+
});
|
|
374
578
|
},
|
|
375
|
-
|
|
376
579
|
/**
|
|
377
580
|
* Method does not check for permissions or ownership.
|
|
378
581
|
* @internal
|
|
379
582
|
*/
|
|
380
583
|
async updateModelDirect(params) {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
original
|
|
384
|
-
} = params;
|
|
385
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialModel), {}, {
|
|
386
|
-
tenant: initialModel.tenant || getTenant().id,
|
|
387
|
-
locale: initialModel.locale || getLocale().code,
|
|
388
|
-
webinyVersion: context.WEBINY_VERSION
|
|
584
|
+
return context.benchmark.measure("headlessCms.crud.models.updateModelDirect", async () => {
|
|
585
|
+
return updateModelDirect(params);
|
|
389
586
|
});
|
|
390
|
-
|
|
391
|
-
try {
|
|
392
|
-
await onModelBeforeUpdate.publish({
|
|
393
|
-
input: {},
|
|
394
|
-
original,
|
|
395
|
-
model
|
|
396
|
-
});
|
|
397
|
-
const resultModel = await storageOperations.models.update({
|
|
398
|
-
model
|
|
399
|
-
});
|
|
400
|
-
await updateManager(context, resultModel);
|
|
401
|
-
loaders.listModels.clearAll();
|
|
402
|
-
await onModelAfterUpdate.publish({
|
|
403
|
-
input: {},
|
|
404
|
-
original,
|
|
405
|
-
model: resultModel
|
|
406
|
-
});
|
|
407
|
-
return resultModel;
|
|
408
|
-
} catch (ex) {
|
|
409
|
-
await onModelUpdateError.publish({
|
|
410
|
-
input: {},
|
|
411
|
-
original,
|
|
412
|
-
model,
|
|
413
|
-
error: ex
|
|
414
|
-
});
|
|
415
|
-
throw ex;
|
|
416
|
-
}
|
|
417
587
|
},
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
/**
|
|
422
|
-
* Get a model record; this will also perform ownership validation.
|
|
423
|
-
*/
|
|
424
|
-
|
|
425
|
-
const original = await getModel(modelId);
|
|
426
|
-
const createdData = new _models.CreateContentModelModelFrom().populate({
|
|
427
|
-
name: data.name,
|
|
428
|
-
modelId: data.modelId,
|
|
429
|
-
description: data.description || original.description,
|
|
430
|
-
group: data.group,
|
|
431
|
-
locale: data.locale
|
|
432
|
-
});
|
|
433
|
-
await createdData.validate();
|
|
434
|
-
const input = await createdData.toJSON();
|
|
435
|
-
const locale = await context.i18n.getLocale(input.locale || original.locale);
|
|
436
|
-
|
|
437
|
-
if (!locale) {
|
|
438
|
-
throw new _handlerGraphql.NotFoundError(`There is no locale "${input.locale}".`);
|
|
439
|
-
}
|
|
440
|
-
/**
|
|
441
|
-
* Use storage operations directly because we cannot get group from different locale via context methods.
|
|
442
|
-
*/
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
const group = await context.cms.storageOperations.groups.get({
|
|
446
|
-
id: input.group,
|
|
447
|
-
tenant: original.tenant,
|
|
448
|
-
locale: locale.code
|
|
449
|
-
});
|
|
450
|
-
|
|
451
|
-
if (!group) {
|
|
452
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
const identity = getIdentity();
|
|
456
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
|
|
457
|
-
locale: locale.code,
|
|
458
|
-
group: {
|
|
459
|
-
id: group.id,
|
|
460
|
-
name: group.name
|
|
461
|
-
},
|
|
462
|
-
name: input.name,
|
|
463
|
-
modelId: input.modelId || "",
|
|
464
|
-
description: input.description || "",
|
|
465
|
-
createdBy: {
|
|
466
|
-
id: identity.id,
|
|
467
|
-
displayName: identity.displayName,
|
|
468
|
-
type: identity.type
|
|
469
|
-
},
|
|
470
|
-
createdOn: new Date().toISOString(),
|
|
471
|
-
savedOn: new Date().toISOString(),
|
|
472
|
-
lockedFields: [],
|
|
473
|
-
webinyVersion: context.WEBINY_VERSION
|
|
588
|
+
async createModelFrom(modelId, userInput) {
|
|
589
|
+
return context.benchmark.measure("headlessCms.crud.models.createModelFrom", async () => {
|
|
590
|
+
return createModelFrom(modelId, userInput);
|
|
474
591
|
});
|
|
475
|
-
|
|
476
|
-
try {
|
|
477
|
-
await onModelBeforeCreateFrom.publish({
|
|
478
|
-
input,
|
|
479
|
-
model,
|
|
480
|
-
original
|
|
481
|
-
});
|
|
482
|
-
const createdModel = await storageOperations.models.create({
|
|
483
|
-
model
|
|
484
|
-
});
|
|
485
|
-
loaders.listModels.clearAll();
|
|
486
|
-
await updateManager(context, model);
|
|
487
|
-
await onModelAfterCreateFrom.publish({
|
|
488
|
-
input,
|
|
489
|
-
original,
|
|
490
|
-
model: createdModel
|
|
491
|
-
});
|
|
492
|
-
return createdModel;
|
|
493
|
-
} catch (ex) {
|
|
494
|
-
await onModelCreateFromError.publish({
|
|
495
|
-
input,
|
|
496
|
-
original,
|
|
497
|
-
model,
|
|
498
|
-
error: ex
|
|
499
|
-
});
|
|
500
|
-
throw ex;
|
|
501
|
-
}
|
|
502
592
|
},
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
const original = await getModel(modelId);
|
|
508
|
-
const updatedData = new _models.UpdateContentModelModel().populate(inputData);
|
|
509
|
-
await updatedData.validate();
|
|
510
|
-
const input = await updatedData.toJSON({
|
|
511
|
-
onlyDirty: true
|
|
593
|
+
async updateModel(modelId, input) {
|
|
594
|
+
return context.benchmark.measure("headlessCms.crud.models.updateModel", async () => {
|
|
595
|
+
return updateModel(modelId, input);
|
|
512
596
|
});
|
|
513
|
-
|
|
514
|
-
if (Object.keys(input).length === 0) {
|
|
515
|
-
/**
|
|
516
|
-
* We need to return the original if nothing is to be updated.
|
|
517
|
-
*/
|
|
518
|
-
return original;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
let group = {
|
|
522
|
-
id: original.group.id,
|
|
523
|
-
name: original.group.name
|
|
524
|
-
};
|
|
525
|
-
|
|
526
|
-
if (input.group) {
|
|
527
|
-
context.security.disableAuthorization();
|
|
528
|
-
const groupData = await context.cms.getGroup(input.group);
|
|
529
|
-
context.security.enableAuthorization();
|
|
530
|
-
|
|
531
|
-
if (!groupData) {
|
|
532
|
-
throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
group = {
|
|
536
|
-
id: groupData.id,
|
|
537
|
-
name: groupData.name
|
|
538
|
-
};
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
const fields = await (0, _createFieldModels.createFieldModels)(inputData.fields);
|
|
542
|
-
const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input), {}, {
|
|
543
|
-
group,
|
|
544
|
-
tenant: original.tenant || getTenant().id,
|
|
545
|
-
locale: original.locale || getLocale().code,
|
|
546
|
-
webinyVersion: context.WEBINY_VERSION,
|
|
547
|
-
fields,
|
|
548
|
-
savedOn: new Date().toISOString()
|
|
549
|
-
});
|
|
550
|
-
model.tags = ensureTypeTag(model);
|
|
551
|
-
|
|
552
|
-
try {
|
|
553
|
-
await onModelBeforeUpdate.publish({
|
|
554
|
-
input,
|
|
555
|
-
original,
|
|
556
|
-
model
|
|
557
|
-
});
|
|
558
|
-
const resultModel = await storageOperations.models.update({
|
|
559
|
-
model
|
|
560
|
-
});
|
|
561
|
-
await updateManager(context, resultModel);
|
|
562
|
-
await onModelAfterUpdate.publish({
|
|
563
|
-
input,
|
|
564
|
-
original,
|
|
565
|
-
model: resultModel
|
|
566
|
-
});
|
|
567
|
-
return resultModel;
|
|
568
|
-
} catch (ex) {
|
|
569
|
-
await onModelUpdateError.publish({
|
|
570
|
-
input,
|
|
571
|
-
model,
|
|
572
|
-
original,
|
|
573
|
-
error: ex
|
|
574
|
-
});
|
|
575
|
-
throw ex;
|
|
576
|
-
}
|
|
577
597
|
},
|
|
578
|
-
|
|
579
598
|
async deleteModel(modelId) {
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
try {
|
|
584
|
-
await onModelBeforeDelete.publish({
|
|
585
|
-
model
|
|
586
|
-
});
|
|
587
|
-
|
|
588
|
-
try {
|
|
589
|
-
await storageOperations.models.delete({
|
|
590
|
-
model
|
|
591
|
-
});
|
|
592
|
-
} catch (ex) {
|
|
593
|
-
throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
|
|
594
|
-
error: ex,
|
|
595
|
-
modelId: model.modelId
|
|
596
|
-
});
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
await onModelAfterDelete.publish({
|
|
600
|
-
model
|
|
601
|
-
});
|
|
602
|
-
managers.delete(model.modelId);
|
|
603
|
-
} catch (ex) {
|
|
604
|
-
await onModelDeleteError.publish({
|
|
605
|
-
model,
|
|
606
|
-
error: ex
|
|
607
|
-
});
|
|
608
|
-
throw ex;
|
|
609
|
-
}
|
|
599
|
+
return context.benchmark.measure("headlessCms.crud.models.deleteModel", async () => {
|
|
600
|
+
return deleteModel(modelId);
|
|
601
|
+
});
|
|
610
602
|
},
|
|
611
|
-
|
|
612
603
|
async initializeModel(modelId, data) {
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
* Maybe introduce another permission for it?
|
|
616
|
-
*/
|
|
617
|
-
await checkModelPermissions("w");
|
|
618
|
-
const model = await getModel(modelId);
|
|
619
|
-
await onModelInitialize.publish({
|
|
620
|
-
model,
|
|
621
|
-
data
|
|
604
|
+
return context.benchmark.measure("headlessCms.crud.models.initializeModel", async () => {
|
|
605
|
+
return initializeModel(modelId, data);
|
|
622
606
|
});
|
|
623
|
-
return true;
|
|
624
607
|
},
|
|
625
|
-
|
|
626
608
|
getModelManager,
|
|
627
609
|
getEntryManager: async model => {
|
|
628
610
|
return getModelManager(model);
|
|
@@ -631,5 +613,4 @@ const createModelsCrud = params => {
|
|
|
631
613
|
getEntryManagers: () => managers
|
|
632
614
|
};
|
|
633
615
|
};
|
|
634
|
-
|
|
635
616
|
exports.createModelsCrud = createModelsCrud;
|