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