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