@webiny/api-headless-cms 0.0.0-unstable.5e7233243f → 0.0.0-unstable.60a863e033
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 +55 -25
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.d.ts +2 -2
- package/crud/contentEntry/afterDelete.js +2 -7
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.d.ts +2 -2
- package/crud/contentEntry/beforeCreate.js +2 -5
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.d.ts +2 -2
- package/crud/contentEntry/beforeUpdate.js +2 -5
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.js +4 -47
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +22 -39
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +15 -73
- 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.d.ts +0 -2
- package/crud/contentEntry.crud.js +292 -395
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/afterCreate.d.ts +3 -3
- package/crud/contentModel/afterCreate.js +5 -7
- package/crud/contentModel/afterCreate.js.map +1 -1
- package/crud/contentModel/afterCreateFrom.d.ts +3 -3
- package/crud/contentModel/afterCreateFrom.js +5 -7
- package/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/crud/contentModel/afterDelete.d.ts +3 -3
- package/crud/contentModel/afterDelete.js +5 -7
- package/crud/contentModel/afterDelete.js.map +1 -1
- package/crud/contentModel/afterUpdate.d.ts +3 -3
- package/crud/contentModel/afterUpdate.js +5 -7
- package/crud/contentModel/afterUpdate.js.map +1 -1
- package/crud/contentModel/beforeCreate.d.ts +5 -6
- package/crud/contentModel/beforeCreate.js +17 -46
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.d.ts +3 -3
- package/crud/contentModel/beforeDelete.js +6 -16
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.d.ts +4 -6
- package/crud/contentModel/beforeUpdate.js +7 -12
- 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/models.js +12 -0
- package/crud/contentModel/models.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 +7 -12
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.d.ts +3 -4
- package/crud/contentModel/validateModelFields.js +121 -104
- 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 +278 -304
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.d.ts +2 -2
- package/crud/contentModelGroup/beforeCreate.js +3 -15
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.d.ts +2 -2
- package/crud/contentModelGroup/beforeDelete.js +3 -11
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.d.ts +2 -2
- package/crud/contentModelGroup/beforeUpdate.js +2 -7
- 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 +96 -118
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/settings.crud.js +3 -20
- package/crud/settings.crud.js.map +1 -1
- package/crud/system.crud.js +61 -84
- package/crud/system.crud.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +1 -14
- 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 +16 -71
- 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 +91 -75
- 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 +14 -22
- 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 +40 -66
- 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 +24 -37
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.js +4 -44
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.d.ts +2 -0
- package/graphql/schema/createManageSDL.js +13 -26
- 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 +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 +5 -25
- 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 +3 -15
- 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 +3 -15
- 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 +113 -99
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +52 -104
- 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.d.ts +7 -7
- package/modelManager/DefaultCmsModelManager.js +1 -17
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +0 -4
- package/modelManager/index.js.map +1 -1
- package/package.json +31 -32
- package/parameters/context.js +0 -4
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +1 -12
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +0 -8
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +7 -15
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +1 -12
- 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 +1 -9
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
- package/plugins/CmsModelFieldConverterPlugin.js +1 -6
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +6 -2
- package/plugins/CmsModelPlugin.js +18 -49
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +1 -8
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.d.ts +11 -11
- package/plugins/StorageTransformPlugin.js +1 -10
- 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 +7 -27
- package/storage/object.js.map +1 -1
- package/types.d.ts +504 -179
- package/types.js +62 -71
- package/types.js.map +1 -1
- package/upgrades/5.33.0/index.js +8 -35
- 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 +1 -14
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.d.ts +7 -0
- package/utils/converters/ConverterCollection.js +36 -32
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +3 -33
- 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 +3 -10
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +25 -42
- 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 +7 -26
- package/utils/permissions.js.map +1 -1
- package/utils/pluralizedTypeName.js +1 -7
- 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 +10 -9
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.d.ts +7 -4
- package/utils/renderSortEnum.js +21 -11
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +1 -5
- 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 +1 -8
- package/validators/unique.js.map +1 -1
- package/crud/index.d.ts +0 -6
- package/crud/index.js +0 -89
- 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 -81
- package/utils/filterModelFields.js.map +0 -1
|
@@ -1,49 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.createContentEntryCrud = exports.STATUS_UNPUBLISHED = exports.
|
|
9
|
-
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
7
|
+
exports.createContentEntryCrud = exports.STATUS_UNPUBLISHED = exports.STATUS_PUBLISHED = exports.STATUS_DRAFT = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
12
9
|
var _mdbid = _interopRequireDefault(require("mdbid"));
|
|
13
|
-
|
|
14
10
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
|
-
|
|
16
11
|
var _entryDataValidation = require("./contentEntry/entryDataValidation");
|
|
17
|
-
|
|
18
12
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
19
|
-
|
|
20
13
|
var _pubsub = require("@webiny/pubsub");
|
|
21
|
-
|
|
22
14
|
var _beforeCreate = require("./contentEntry/beforeCreate");
|
|
23
|
-
|
|
24
15
|
var _beforeUpdate = require("./contentEntry/beforeUpdate");
|
|
25
|
-
|
|
26
16
|
var _utils = require("@webiny/utils");
|
|
27
|
-
|
|
28
17
|
var _afterDelete = require("./contentEntry/afterDelete");
|
|
29
|
-
|
|
30
18
|
var _referenceFieldsMapping = require("./contentEntry/referenceFieldsMapping");
|
|
31
|
-
|
|
32
19
|
var _merge = _interopRequireDefault(require("lodash/merge"));
|
|
33
|
-
|
|
34
20
|
var _permissions = require("../utils/permissions");
|
|
35
|
-
|
|
36
21
|
var _access = require("../utils/access");
|
|
37
|
-
|
|
38
22
|
var _ownership = require("../utils/ownership");
|
|
39
|
-
|
|
40
23
|
var _entryStorage = require("../utils/entryStorage");
|
|
41
|
-
|
|
42
24
|
var _valueKeyStorageConverter = require("../utils/converters/valueKeyStorageConverter");
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
25
|
+
var _searchableFields = require("./contentEntry/searchableFields");
|
|
26
|
+
/**
|
|
27
|
+
* Package mdbid does not have types.
|
|
28
|
+
*/
|
|
29
|
+
// @ts-ignore
|
|
47
30
|
|
|
48
31
|
const STATUS_DRAFT = "draft";
|
|
49
32
|
exports.STATUS_DRAFT = STATUS_DRAFT;
|
|
@@ -51,11 +34,6 @@ const STATUS_PUBLISHED = "published";
|
|
|
51
34
|
exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
|
|
52
35
|
const STATUS_UNPUBLISHED = "unpublished";
|
|
53
36
|
exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
|
|
54
|
-
const STATUS_CHANGES_REQUESTED = "changesRequested";
|
|
55
|
-
exports.STATUS_CHANGES_REQUESTED = STATUS_CHANGES_REQUESTED;
|
|
56
|
-
const STATUS_REVIEW_REQUESTED = "reviewRequested";
|
|
57
|
-
exports.STATUS_REVIEW_REQUESTED = STATUS_REVIEW_REQUESTED;
|
|
58
|
-
|
|
59
37
|
/**
|
|
60
38
|
* Used for some fields to convert their values.
|
|
61
39
|
*/
|
|
@@ -63,45 +41,35 @@ const convertDefaultValue = (field, value) => {
|
|
|
63
41
|
switch (field.type) {
|
|
64
42
|
case "boolean":
|
|
65
43
|
return Boolean(value);
|
|
66
|
-
|
|
67
44
|
case "number":
|
|
68
45
|
return Number(value);
|
|
69
|
-
|
|
70
46
|
default:
|
|
71
47
|
return value;
|
|
72
48
|
}
|
|
73
49
|
};
|
|
74
|
-
|
|
75
50
|
const getDefaultValue = field => {
|
|
76
51
|
const {
|
|
77
52
|
settings,
|
|
78
53
|
multipleValues
|
|
79
54
|
} = field;
|
|
80
|
-
|
|
81
55
|
if (settings && settings.defaultValue !== undefined) {
|
|
82
56
|
return convertDefaultValue(field, settings.defaultValue);
|
|
83
57
|
}
|
|
84
|
-
|
|
85
58
|
const {
|
|
86
59
|
predefinedValues
|
|
87
60
|
} = field;
|
|
88
|
-
|
|
89
61
|
if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
|
|
90
62
|
return undefined;
|
|
91
63
|
}
|
|
92
|
-
|
|
93
64
|
if (!multipleValues) {
|
|
94
65
|
const selectedValue = predefinedValues.values.find(value => {
|
|
95
66
|
return !!value.selected;
|
|
96
67
|
});
|
|
97
|
-
|
|
98
68
|
if (selectedValue) {
|
|
99
69
|
return convertDefaultValue(field, selectedValue.value);
|
|
100
70
|
}
|
|
101
|
-
|
|
102
71
|
return undefined;
|
|
103
72
|
}
|
|
104
|
-
|
|
105
73
|
return predefinedValues.values.filter(({
|
|
106
74
|
selected
|
|
107
75
|
}) => !!selected).map(({
|
|
@@ -113,8 +81,6 @@ const getDefaultValue = field => {
|
|
|
113
81
|
/**
|
|
114
82
|
* Cleans and adds default values to create input data.
|
|
115
83
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
84
|
const mapAndCleanCreateInputData = (model, input) => {
|
|
119
85
|
return model.fields.reduce((acc, field) => {
|
|
120
86
|
/**
|
|
@@ -126,12 +92,10 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
126
92
|
field
|
|
127
93
|
});
|
|
128
94
|
}
|
|
129
|
-
|
|
130
95
|
const value = input[field.fieldId];
|
|
131
96
|
/**
|
|
132
97
|
* We set the default value on create input if value is not defined.
|
|
133
98
|
*/
|
|
134
|
-
|
|
135
99
|
acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
|
|
136
100
|
return acc;
|
|
137
101
|
}, {});
|
|
@@ -139,8 +103,6 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
139
103
|
/**
|
|
140
104
|
* Cleans the update input entry data.
|
|
141
105
|
*/
|
|
142
|
-
|
|
143
|
-
|
|
144
106
|
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
145
107
|
return model.fields.reduce((acc, field) => {
|
|
146
108
|
/**
|
|
@@ -155,14 +117,10 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
155
117
|
/**
|
|
156
118
|
* We cannot set default value here because user might want to update only certain field values.
|
|
157
119
|
*/
|
|
158
|
-
|
|
159
|
-
|
|
160
120
|
const value = input[field.fieldId];
|
|
161
|
-
|
|
162
121
|
if (value === undefined) {
|
|
163
122
|
return acc;
|
|
164
123
|
}
|
|
165
|
-
|
|
166
124
|
acc[field.fieldId] = value;
|
|
167
125
|
return acc;
|
|
168
126
|
}, {});
|
|
@@ -171,26 +129,29 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
171
129
|
* This method takes original entry meta and new input.
|
|
172
130
|
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
173
131
|
*/
|
|
174
|
-
|
|
175
|
-
|
|
176
132
|
const createEntryMeta = (input, original) => {
|
|
177
133
|
const meta = (0, _merge.default)(original || {}, input || {});
|
|
178
|
-
|
|
179
134
|
for (const key in meta) {
|
|
180
135
|
if (meta[key] !== undefined || meta[key] !== null) {
|
|
181
136
|
continue;
|
|
182
137
|
}
|
|
183
|
-
|
|
184
138
|
delete meta[key];
|
|
185
139
|
}
|
|
186
|
-
|
|
187
140
|
return meta;
|
|
188
141
|
};
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
142
|
+
const createEntryId = input => {
|
|
143
|
+
let entryId = (0, _mdbid.default)();
|
|
144
|
+
if (input.id) {
|
|
145
|
+
if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\-]+)([a-zA-Z0-9])$/) === null) {
|
|
146
|
+
throw new _error.default("The provided ID is not valid. It must be a string which can A-Z, a-z, 0-9, - and it cannot start or end with a -.", "INVALID_ID", {
|
|
147
|
+
id: input.id
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
entryId = input.id;
|
|
151
|
+
}
|
|
152
|
+
const version = 1;
|
|
192
153
|
return {
|
|
193
|
-
entryId,
|
|
154
|
+
entryId: entryId,
|
|
194
155
|
version,
|
|
195
156
|
id: (0, _utils.createIdentifier)({
|
|
196
157
|
id: entryId,
|
|
@@ -198,19 +159,16 @@ const createEntryId = version => {
|
|
|
198
159
|
})
|
|
199
160
|
};
|
|
200
161
|
};
|
|
201
|
-
|
|
202
162
|
const increaseEntryIdVersion = id => {
|
|
203
163
|
const {
|
|
204
164
|
id: entryId,
|
|
205
165
|
version
|
|
206
166
|
} = (0, _utils.parseIdentifier)(id);
|
|
207
|
-
|
|
208
167
|
if (!version) {
|
|
209
168
|
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
210
169
|
id
|
|
211
170
|
});
|
|
212
171
|
}
|
|
213
|
-
|
|
214
172
|
return {
|
|
215
173
|
entryId,
|
|
216
174
|
version: version + 1,
|
|
@@ -220,36 +178,10 @@ const increaseEntryIdVersion = id => {
|
|
|
220
178
|
})
|
|
221
179
|
};
|
|
222
180
|
};
|
|
223
|
-
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
plugins,
|
|
227
|
-
model,
|
|
228
|
-
fields
|
|
229
|
-
} = params;
|
|
230
|
-
const fieldPluginMap = plugins.byType("cms-model-field-to-graphql").reduce((collection, field) => {
|
|
231
|
-
collection[field.fieldType] = field;
|
|
232
|
-
return collection;
|
|
233
|
-
}, {});
|
|
234
|
-
return model.fields.filter(field => {
|
|
235
|
-
if (!field.fieldId) {
|
|
236
|
-
return false;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
const plugin = fieldPluginMap[field.type];
|
|
240
|
-
|
|
241
|
-
if (!plugin) {
|
|
242
|
-
return false;
|
|
243
|
-
} else if (!plugin.fullTextSearch) {
|
|
244
|
-
return false;
|
|
245
|
-
} else if (!fields || fields.length === 0) {
|
|
246
|
-
return true;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
return fields.includes(field.fieldId);
|
|
250
|
-
}).map(field => field.fieldId);
|
|
181
|
+
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
182
|
+
const transformEntryStatus = status => {
|
|
183
|
+
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
251
184
|
};
|
|
252
|
-
|
|
253
185
|
const createContentEntryCrud = params => {
|
|
254
186
|
const {
|
|
255
187
|
storageOperations,
|
|
@@ -260,70 +192,112 @@ const createContentEntryCrud = params => {
|
|
|
260
192
|
const {
|
|
261
193
|
plugins
|
|
262
194
|
} = context;
|
|
263
|
-
|
|
264
|
-
const onAfterEntryCreate = (0, _pubsub.createTopic)();
|
|
265
|
-
const onBeforeEntryCreateRevision = (0, _pubsub.createTopic)();
|
|
266
|
-
const onAfterEntryCreateRevision = (0, _pubsub.createTopic)();
|
|
267
|
-
const onBeforeEntryUpdate = (0, _pubsub.createTopic)();
|
|
268
|
-
const onAfterEntryUpdate = (0, _pubsub.createTopic)();
|
|
269
|
-
const onBeforeEntryPublish = (0, _pubsub.createTopic)();
|
|
270
|
-
const onAfterEntryPublish = (0, _pubsub.createTopic)();
|
|
271
|
-
const onBeforeEntryUnpublish = (0, _pubsub.createTopic)();
|
|
272
|
-
const onAfterEntryUnpublish = (0, _pubsub.createTopic)();
|
|
273
|
-
const onBeforeEntryRequestChanges = (0, _pubsub.createTopic)();
|
|
274
|
-
const onAfterEntryRequestChanges = (0, _pubsub.createTopic)();
|
|
275
|
-
const onBeforeEntryRequestReview = (0, _pubsub.createTopic)();
|
|
276
|
-
const onAfterEntryRequestReview = (0, _pubsub.createTopic)();
|
|
277
|
-
const onBeforeEntryDelete = (0, _pubsub.createTopic)();
|
|
278
|
-
const onAfterEntryDelete = (0, _pubsub.createTopic)();
|
|
279
|
-
const onBeforeEntryDeleteRevision = (0, _pubsub.createTopic)();
|
|
280
|
-
const onAfterEntryDeleteRevision = (0, _pubsub.createTopic)();
|
|
281
|
-
const onBeforeEntryGet = (0, _pubsub.createTopic)();
|
|
282
|
-
const onBeforeEntryList = (0, _pubsub.createTopic)();
|
|
195
|
+
|
|
283
196
|
/**
|
|
284
|
-
*
|
|
197
|
+
* Create
|
|
198
|
+
*/
|
|
199
|
+
const onEntryBeforeCreate = (0, _pubsub.createTopic)("cms.onEntryBeforeCreate");
|
|
200
|
+
const onEntryAfterCreate = (0, _pubsub.createTopic)("cms.onEntryAfterCreate");
|
|
201
|
+
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Create new revision
|
|
205
|
+
*/
|
|
206
|
+
const onEntryBeforeCreateRevision = (0, _pubsub.createTopic)("cms.onEntryBeforeCreateRevision");
|
|
207
|
+
const onEntryRevisionAfterCreate = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterCreate");
|
|
208
|
+
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Update
|
|
212
|
+
*/
|
|
213
|
+
const onEntryBeforeUpdate = (0, _pubsub.createTopic)("cms.onEntryBeforeUpdate");
|
|
214
|
+
const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
|
|
215
|
+
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Publish
|
|
219
|
+
*/
|
|
220
|
+
const onEntryBeforePublish = (0, _pubsub.createTopic)("cms.onEntryBeforePublish");
|
|
221
|
+
const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublish");
|
|
222
|
+
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Republish
|
|
226
|
+
*/
|
|
227
|
+
const onEntryBeforeRepublish = (0, _pubsub.createTopic)("cms.onEntryBeforeRepublish");
|
|
228
|
+
const onEntryAfterRepublish = (0, _pubsub.createTopic)("cms.onEntryAfterRepublish");
|
|
229
|
+
const onEntryRepublishError = (0, _pubsub.createTopic)("cms.onEntryRepublishError");
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Unpublish
|
|
233
|
+
*/
|
|
234
|
+
const onEntryBeforeUnpublish = (0, _pubsub.createTopic)("cms.onEntryBeforeUnpublish");
|
|
235
|
+
const onEntryAfterUnpublish = (0, _pubsub.createTopic)("cms.onEntryAfterUnpublish");
|
|
236
|
+
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Delete
|
|
285
240
|
*/
|
|
241
|
+
const onEntryBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryBeforeDelete");
|
|
242
|
+
const onEntryAfterDelete = (0, _pubsub.createTopic)("cms.onEntryAfterDelete");
|
|
243
|
+
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
|
|
244
|
+
|
|
245
|
+
// delete revision
|
|
246
|
+
const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
|
|
247
|
+
const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
|
|
248
|
+
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
286
249
|
|
|
250
|
+
// get
|
|
251
|
+
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet");
|
|
252
|
+
|
|
253
|
+
// list
|
|
254
|
+
const onEntryBeforeList = (0, _pubsub.createTopic)("cms.onEntryBeforeList");
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* We need to assign some default behaviors.
|
|
258
|
+
*/
|
|
287
259
|
(0, _beforeCreate.assignBeforeEntryCreate)({
|
|
288
260
|
context,
|
|
289
|
-
|
|
261
|
+
onEntryBeforeCreate
|
|
290
262
|
});
|
|
291
263
|
(0, _beforeUpdate.assignBeforeEntryUpdate)({
|
|
292
264
|
context,
|
|
293
|
-
|
|
265
|
+
onEntryBeforeUpdate
|
|
294
266
|
});
|
|
295
267
|
(0, _afterDelete.assignAfterEntryDelete)({
|
|
296
268
|
context,
|
|
297
|
-
|
|
269
|
+
onEntryAfterDelete
|
|
298
270
|
});
|
|
299
|
-
|
|
300
271
|
const checkEntryPermissions = check => {
|
|
301
272
|
return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
|
|
302
273
|
};
|
|
274
|
+
|
|
303
275
|
/**
|
|
304
276
|
* A helper to delete the entire entry.
|
|
305
277
|
*/
|
|
306
|
-
|
|
307
|
-
|
|
308
278
|
const deleteEntry = async params => {
|
|
309
279
|
const {
|
|
310
280
|
model,
|
|
311
281
|
entry
|
|
312
282
|
} = params;
|
|
313
|
-
|
|
314
283
|
try {
|
|
315
|
-
await
|
|
284
|
+
await onEntryBeforeDelete.publish({
|
|
316
285
|
entry,
|
|
317
286
|
model
|
|
318
287
|
});
|
|
319
288
|
await storageOperations.entries.delete(model, {
|
|
320
289
|
entry
|
|
321
290
|
});
|
|
322
|
-
await
|
|
291
|
+
await onEntryAfterDelete.publish({
|
|
323
292
|
entry,
|
|
324
293
|
model
|
|
325
294
|
});
|
|
326
295
|
} catch (ex) {
|
|
296
|
+
await onEntryDeleteError.publish({
|
|
297
|
+
entry,
|
|
298
|
+
model,
|
|
299
|
+
error: ex
|
|
300
|
+
});
|
|
327
301
|
throw new _error.default(ex.message || "Could not delete entry.", ex.code || "DELETE_ERROR", {
|
|
328
302
|
entry
|
|
329
303
|
});
|
|
@@ -332,8 +306,6 @@ const createContentEntryCrud = params => {
|
|
|
332
306
|
/**
|
|
333
307
|
* A helper to get entries by revision IDs
|
|
334
308
|
*/
|
|
335
|
-
|
|
336
|
-
|
|
337
309
|
const getEntriesByIds = async (initialModel, ids) => {
|
|
338
310
|
const permission = await checkEntryPermissions({
|
|
339
311
|
rwd: "r"
|
|
@@ -348,38 +320,86 @@ const createContentEntryCrud = params => {
|
|
|
348
320
|
});
|
|
349
321
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
350
322
|
};
|
|
351
|
-
|
|
352
323
|
return {
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
324
|
+
/**
|
|
325
|
+
* Deprecated - will be removed in 5.35.0
|
|
326
|
+
*/
|
|
327
|
+
onBeforeEntryCreate: onEntryBeforeCreate,
|
|
328
|
+
onAfterEntryCreate: onEntryAfterCreate,
|
|
329
|
+
onBeforeEntryCreateRevision: onEntryBeforeCreateRevision,
|
|
330
|
+
onAfterEntryCreateRevision: onEntryRevisionAfterCreate,
|
|
331
|
+
onBeforeEntryUpdate: onEntryBeforeUpdate,
|
|
332
|
+
onAfterEntryUpdate: onEntryAfterUpdate,
|
|
333
|
+
onBeforeEntryDelete: onEntryBeforeDelete,
|
|
334
|
+
onAfterEntryDelete: onEntryAfterDelete,
|
|
335
|
+
onBeforeEntryDeleteRevision: onEntryRevisionBeforeDelete,
|
|
336
|
+
onAfterEntryDeleteRevision: onEntryRevisionAfterDelete,
|
|
337
|
+
onBeforeEntryPublish: onEntryBeforePublish,
|
|
338
|
+
onAfterEntryPublish: onEntryAfterPublish,
|
|
339
|
+
onBeforeEntryUnpublish: onEntryBeforeUnpublish,
|
|
340
|
+
onAfterEntryUnpublish: onEntryAfterUnpublish,
|
|
341
|
+
onBeforeEntryGet: onEntryBeforeGet,
|
|
342
|
+
onBeforeEntryList: onEntryBeforeList,
|
|
343
|
+
/**
|
|
344
|
+
* Released in 5.34.0
|
|
345
|
+
*
|
|
346
|
+
* Create
|
|
347
|
+
*/
|
|
348
|
+
onEntryBeforeCreate,
|
|
349
|
+
onEntryAfterCreate,
|
|
350
|
+
onEntryCreateError,
|
|
351
|
+
/**
|
|
352
|
+
* Create revision
|
|
353
|
+
*/
|
|
354
|
+
onEntryRevisionBeforeCreate: onEntryBeforeCreateRevision,
|
|
355
|
+
onEntryRevisionAfterCreate,
|
|
356
|
+
onEntryRevisionCreateError: onEntryCreateRevisionError,
|
|
357
|
+
/**
|
|
358
|
+
* Update
|
|
359
|
+
*/
|
|
360
|
+
onEntryBeforeUpdate,
|
|
361
|
+
onEntryAfterUpdate,
|
|
362
|
+
onEntryUpdateError,
|
|
363
|
+
/**
|
|
364
|
+
* Delete whole entry
|
|
365
|
+
*/
|
|
366
|
+
onEntryBeforeDelete,
|
|
367
|
+
onEntryAfterDelete,
|
|
368
|
+
onEntryDeleteError,
|
|
369
|
+
/**
|
|
370
|
+
* Delete entry revision
|
|
371
|
+
*/
|
|
372
|
+
onEntryRevisionBeforeDelete,
|
|
373
|
+
onEntryRevisionAfterDelete,
|
|
374
|
+
onEntryRevisionDeleteError,
|
|
375
|
+
/**
|
|
376
|
+
* Publish
|
|
377
|
+
*/
|
|
378
|
+
onEntryBeforePublish,
|
|
379
|
+
onEntryAfterPublish,
|
|
380
|
+
onEntryPublishError,
|
|
381
|
+
/**
|
|
382
|
+
* Republish
|
|
383
|
+
*/
|
|
384
|
+
onEntryBeforeRepublish,
|
|
385
|
+
onEntryAfterRepublish,
|
|
386
|
+
onEntryRepublishError,
|
|
387
|
+
/**
|
|
388
|
+
* Unpublish
|
|
389
|
+
*/
|
|
390
|
+
onEntryBeforeUnpublish,
|
|
391
|
+
onEntryAfterUnpublish,
|
|
392
|
+
onEntryUnpublishError,
|
|
393
|
+
onEntryBeforeGet,
|
|
394
|
+
onEntryBeforeList,
|
|
374
395
|
/**
|
|
375
396
|
* Get entries by exact revision IDs from the database.
|
|
376
397
|
*/
|
|
377
398
|
getEntriesByIds: getEntriesByIds,
|
|
378
|
-
|
|
379
399
|
/**
|
|
380
400
|
* Get a single entry by revision ID from the database.
|
|
381
401
|
*/
|
|
382
|
-
|
|
402
|
+
async getEntryById(initialModel, id) {
|
|
383
403
|
const where = {
|
|
384
404
|
id
|
|
385
405
|
};
|
|
@@ -387,23 +407,20 @@ const createContentEntryCrud = params => {
|
|
|
387
407
|
model: initialModel,
|
|
388
408
|
plugins
|
|
389
409
|
});
|
|
390
|
-
await
|
|
410
|
+
await onEntryBeforeGet.publish({
|
|
391
411
|
where,
|
|
392
412
|
model
|
|
393
413
|
});
|
|
394
414
|
const [entry] = await getEntriesByIds(model, [id]);
|
|
395
|
-
|
|
396
415
|
if (!entry) {
|
|
397
416
|
throw new _handlerGraphql.NotFoundError(`Entry by ID "${id}" not found.`);
|
|
398
417
|
}
|
|
399
|
-
|
|
400
418
|
return entry;
|
|
401
419
|
},
|
|
402
|
-
|
|
403
420
|
/**
|
|
404
421
|
* Get published revisions by entry IDs.
|
|
405
422
|
*/
|
|
406
|
-
|
|
423
|
+
async getPublishedEntriesByIds(initialModel, ids) {
|
|
407
424
|
const permission = await checkEntryPermissions({
|
|
408
425
|
rwd: "r"
|
|
409
426
|
});
|
|
@@ -417,11 +434,10 @@ const createContentEntryCrud = params => {
|
|
|
417
434
|
});
|
|
418
435
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
419
436
|
},
|
|
420
|
-
|
|
421
437
|
/**
|
|
422
|
-
* Get latest revisions by entry IDs.
|
|
438
|
+
* Get the latest revisions by entry IDs.
|
|
423
439
|
*/
|
|
424
|
-
|
|
440
|
+
async getLatestEntriesByIds(initialModel, ids) {
|
|
425
441
|
const permission = await checkEntryPermissions({
|
|
426
442
|
rwd: "r"
|
|
427
443
|
});
|
|
@@ -435,7 +451,7 @@ const createContentEntryCrud = params => {
|
|
|
435
451
|
});
|
|
436
452
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
437
453
|
},
|
|
438
|
-
|
|
454
|
+
async getEntryRevisions(initialModel, entryId) {
|
|
439
455
|
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
440
456
|
model: initialModel,
|
|
441
457
|
plugins
|
|
@@ -444,13 +460,12 @@ const createContentEntryCrud = params => {
|
|
|
444
460
|
id: entryId
|
|
445
461
|
});
|
|
446
462
|
},
|
|
447
|
-
|
|
448
463
|
/**
|
|
449
464
|
* TODO determine if this method is required at all.
|
|
450
465
|
*
|
|
451
466
|
* @internal
|
|
452
467
|
*/
|
|
453
|
-
|
|
468
|
+
async getEntry(initialModel, params) {
|
|
454
469
|
await checkEntryPermissions({
|
|
455
470
|
rwd: "r"
|
|
456
471
|
});
|
|
@@ -462,29 +477,26 @@ const createContentEntryCrud = params => {
|
|
|
462
477
|
where,
|
|
463
478
|
sort
|
|
464
479
|
} = params;
|
|
465
|
-
await
|
|
480
|
+
await onEntryBeforeGet.publish({
|
|
466
481
|
where,
|
|
467
482
|
model
|
|
468
483
|
});
|
|
469
|
-
const [items] = await
|
|
484
|
+
const [items] = await this.listEntries(model, {
|
|
470
485
|
where,
|
|
471
486
|
sort,
|
|
472
487
|
limit: 1
|
|
473
488
|
});
|
|
474
|
-
|
|
475
489
|
if (items.length === 0) {
|
|
476
490
|
throw new _handlerGraphql.NotFoundError(`Entry not found!`);
|
|
477
491
|
}
|
|
478
|
-
|
|
479
492
|
return items[0];
|
|
480
493
|
},
|
|
481
|
-
|
|
482
494
|
/**
|
|
483
495
|
* @description Should not be used directly. Internal use only!
|
|
484
496
|
*
|
|
485
497
|
* @internal
|
|
486
498
|
*/
|
|
487
|
-
|
|
499
|
+
async listEntries(initialModel, params) {
|
|
488
500
|
const permission = await checkEntryPermissions({
|
|
489
501
|
rwd: "r"
|
|
490
502
|
});
|
|
@@ -494,21 +506,19 @@ const createContentEntryCrud = params => {
|
|
|
494
506
|
plugins
|
|
495
507
|
});
|
|
496
508
|
const {
|
|
497
|
-
where: initialWhere
|
|
509
|
+
where: initialWhere,
|
|
510
|
+
limit: initialLimit
|
|
498
511
|
} = params;
|
|
512
|
+
const limit = initialLimit && initialLimit > 0 ? initialLimit : 50;
|
|
499
513
|
/**
|
|
500
514
|
* We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
|
|
501
515
|
*/
|
|
502
|
-
|
|
503
|
-
const where = _objectSpread({}, initialWhere);
|
|
516
|
+
const where = (0, _objectSpread2.default)({}, initialWhere);
|
|
504
517
|
/**
|
|
505
518
|
* Possibly only get records which are owned by current user.
|
|
506
519
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
507
520
|
*/
|
|
508
|
-
|
|
509
|
-
|
|
510
521
|
const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
|
|
511
|
-
|
|
512
522
|
if (ownedBy !== undefined) {
|
|
513
523
|
where.ownedBy = ownedBy;
|
|
514
524
|
}
|
|
@@ -516,8 +526,6 @@ const createContentEntryCrud = params => {
|
|
|
516
526
|
* Where must contain either latest or published keys.
|
|
517
527
|
* We cannot list entries without one of those
|
|
518
528
|
*/
|
|
519
|
-
|
|
520
|
-
|
|
521
529
|
if (where.latest && where.published) {
|
|
522
530
|
throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
|
|
523
531
|
where
|
|
@@ -527,15 +535,13 @@ const createContentEntryCrud = params => {
|
|
|
527
535
|
where
|
|
528
536
|
});
|
|
529
537
|
}
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
model,
|
|
538
|
+
const fields = (0, _searchableFields.getSearchableFields)({
|
|
539
|
+
fields: model.fields,
|
|
533
540
|
plugins: context.plugins,
|
|
534
|
-
|
|
541
|
+
input: params.fields || []
|
|
535
542
|
});
|
|
536
|
-
|
|
537
543
|
try {
|
|
538
|
-
await
|
|
544
|
+
await onEntryBeforeList.publish({
|
|
539
545
|
where,
|
|
540
546
|
model
|
|
541
547
|
});
|
|
@@ -544,14 +550,14 @@ const createContentEntryCrud = params => {
|
|
|
544
550
|
totalCount,
|
|
545
551
|
cursor,
|
|
546
552
|
items
|
|
547
|
-
} = await storageOperations.entries.list(model,
|
|
553
|
+
} = await storageOperations.entries.list(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
|
|
554
|
+
limit,
|
|
548
555
|
where,
|
|
549
556
|
fields
|
|
550
557
|
}));
|
|
551
558
|
const meta = {
|
|
552
559
|
hasMoreItems,
|
|
553
560
|
totalCount,
|
|
554
|
-
|
|
555
561
|
/**
|
|
556
562
|
* Cursor should be null if there are no more items to load.
|
|
557
563
|
* Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
|
|
@@ -562,33 +568,37 @@ const createContentEntryCrud = params => {
|
|
|
562
568
|
} catch (ex) {
|
|
563
569
|
throw new _error.default("Error while fetching entries from storage.", "LIST_ENTRIES_ERROR", {
|
|
564
570
|
params,
|
|
565
|
-
error:
|
|
571
|
+
error: {
|
|
572
|
+
message: ex.message,
|
|
573
|
+
code: ex.code,
|
|
574
|
+
data: ex.data
|
|
575
|
+
},
|
|
566
576
|
model,
|
|
567
577
|
fields
|
|
568
578
|
});
|
|
569
579
|
}
|
|
570
580
|
},
|
|
571
|
-
|
|
581
|
+
async listLatestEntries(model, params) {
|
|
572
582
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
573
|
-
return
|
|
583
|
+
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
574
584
|
sort: ["createdOn_DESC"]
|
|
575
585
|
}, params || {}), {}, {
|
|
576
|
-
where:
|
|
586
|
+
where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where), {}, {
|
|
577
587
|
latest: true
|
|
578
588
|
})
|
|
579
589
|
}));
|
|
580
590
|
},
|
|
581
|
-
|
|
591
|
+
async listPublishedEntries(model, params) {
|
|
582
592
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
583
|
-
return
|
|
593
|
+
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
584
594
|
sort: ["createdOn_DESC"]
|
|
585
595
|
}, params || {}), {}, {
|
|
586
|
-
where:
|
|
596
|
+
where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where), {}, {
|
|
587
597
|
published: true
|
|
588
598
|
})
|
|
589
599
|
}));
|
|
590
600
|
},
|
|
591
|
-
|
|
601
|
+
async createEntry(initialModel, inputData) {
|
|
592
602
|
await checkEntryPermissions({
|
|
593
603
|
rwd: "w"
|
|
594
604
|
});
|
|
@@ -597,10 +607,10 @@ const createContentEntryCrud = params => {
|
|
|
597
607
|
model: initialModel,
|
|
598
608
|
plugins
|
|
599
609
|
});
|
|
610
|
+
|
|
600
611
|
/**
|
|
601
612
|
* Make sure we only work with fields that are defined in the model.
|
|
602
613
|
*/
|
|
603
|
-
|
|
604
614
|
const initialInput = mapAndCleanCreateInputData(model, inputData);
|
|
605
615
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
606
616
|
context,
|
|
@@ -614,17 +624,21 @@ const createContentEntryCrud = params => {
|
|
|
614
624
|
validateEntries: true
|
|
615
625
|
});
|
|
616
626
|
const identity = context.security.getIdentity();
|
|
617
|
-
const locale =
|
|
627
|
+
const locale = this.getLocale();
|
|
618
628
|
const owner = {
|
|
619
629
|
id: identity.id,
|
|
620
630
|
displayName: identity.displayName,
|
|
621
631
|
type: identity.type
|
|
622
632
|
};
|
|
633
|
+
/**
|
|
634
|
+
* There is a possibility that user sends an ID in the input, so we will use that one.
|
|
635
|
+
* There is no check if the ID is unique or not, that is up to the user.
|
|
636
|
+
*/
|
|
623
637
|
const {
|
|
624
638
|
id,
|
|
625
639
|
entryId,
|
|
626
640
|
version
|
|
627
|
-
} = createEntryId(
|
|
641
|
+
} = createEntryId(inputData);
|
|
628
642
|
const entry = {
|
|
629
643
|
webinyVersion: context.WEBINY_VERSION,
|
|
630
644
|
tenant: getTenant().id,
|
|
@@ -642,9 +656,8 @@ const createContentEntryCrud = params => {
|
|
|
642
656
|
values: input
|
|
643
657
|
};
|
|
644
658
|
let storageEntry = null;
|
|
645
|
-
|
|
646
659
|
try {
|
|
647
|
-
await
|
|
660
|
+
await onEntryBeforeCreate.publish({
|
|
648
661
|
entry,
|
|
649
662
|
input,
|
|
650
663
|
model
|
|
@@ -654,7 +667,7 @@ const createContentEntryCrud = params => {
|
|
|
654
667
|
entry,
|
|
655
668
|
storageEntry
|
|
656
669
|
});
|
|
657
|
-
await
|
|
670
|
+
await onEntryAfterCreate.publish({
|
|
658
671
|
entry,
|
|
659
672
|
storageEntry: result,
|
|
660
673
|
model,
|
|
@@ -662,6 +675,12 @@ const createContentEntryCrud = params => {
|
|
|
662
675
|
});
|
|
663
676
|
return result;
|
|
664
677
|
} catch (ex) {
|
|
678
|
+
await onEntryCreateError.publish({
|
|
679
|
+
error: ex,
|
|
680
|
+
entry,
|
|
681
|
+
model,
|
|
682
|
+
input
|
|
683
|
+
});
|
|
665
684
|
throw new _error.default(ex.message || "Could not create content entry.", ex.code || "CREATE_ENTRY_ERROR", ex.data || {
|
|
666
685
|
error: ex,
|
|
667
686
|
input,
|
|
@@ -670,7 +689,7 @@ const createContentEntryCrud = params => {
|
|
|
670
689
|
});
|
|
671
690
|
}
|
|
672
691
|
},
|
|
673
|
-
|
|
692
|
+
async createEntryRevisionFrom(initialModel, sourceId, inputData) {
|
|
674
693
|
const permission = await checkEntryPermissions({
|
|
675
694
|
rwd: "w"
|
|
676
695
|
});
|
|
@@ -679,15 +698,15 @@ const createContentEntryCrud = params => {
|
|
|
679
698
|
model: initialModel,
|
|
680
699
|
plugins
|
|
681
700
|
});
|
|
701
|
+
|
|
682
702
|
/**
|
|
683
703
|
* Make sure we only work with fields that are defined in the model.
|
|
684
704
|
*/
|
|
685
|
-
|
|
686
705
|
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
706
|
+
|
|
687
707
|
/**
|
|
688
708
|
* Entries are identified by a common parent ID + Revision number.
|
|
689
709
|
*/
|
|
690
|
-
|
|
691
710
|
const {
|
|
692
711
|
id: uniqueId
|
|
693
712
|
} = (0, _utils.parseIdentifier)(sourceId);
|
|
@@ -697,19 +716,15 @@ const createContentEntryCrud = params => {
|
|
|
697
716
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
698
717
|
id: uniqueId
|
|
699
718
|
});
|
|
700
|
-
|
|
701
719
|
if (!originalStorageEntry) {
|
|
702
720
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
703
721
|
}
|
|
722
|
+
|
|
704
723
|
/**
|
|
705
724
|
* We need to convert data from DB to its original form before using it further.
|
|
706
725
|
*/
|
|
707
|
-
|
|
708
|
-
|
|
709
726
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
710
|
-
|
|
711
|
-
const initialValues = _objectSpread(_objectSpread({}, originalEntry.values), input);
|
|
712
|
-
|
|
727
|
+
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
713
728
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
714
729
|
context,
|
|
715
730
|
model,
|
|
@@ -729,8 +744,7 @@ const createContentEntryCrud = params => {
|
|
|
729
744
|
id,
|
|
730
745
|
version: nextVersion
|
|
731
746
|
} = increaseEntryIdVersion(latestId);
|
|
732
|
-
|
|
733
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
747
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
734
748
|
id,
|
|
735
749
|
version: nextVersion,
|
|
736
750
|
savedOn: new Date().toISOString(),
|
|
@@ -745,11 +759,9 @@ const createContentEntryCrud = params => {
|
|
|
745
759
|
status: STATUS_DRAFT,
|
|
746
760
|
values
|
|
747
761
|
});
|
|
748
|
-
|
|
749
762
|
let storageEntry = null;
|
|
750
|
-
|
|
751
763
|
try {
|
|
752
|
-
await
|
|
764
|
+
await onEntryBeforeCreateRevision.publish({
|
|
753
765
|
input,
|
|
754
766
|
entry,
|
|
755
767
|
original: originalEntry,
|
|
@@ -760,7 +772,7 @@ const createContentEntryCrud = params => {
|
|
|
760
772
|
entry,
|
|
761
773
|
storageEntry
|
|
762
774
|
});
|
|
763
|
-
await
|
|
775
|
+
await onEntryRevisionAfterCreate.publish({
|
|
764
776
|
input,
|
|
765
777
|
entry,
|
|
766
778
|
model,
|
|
@@ -769,6 +781,13 @@ const createContentEntryCrud = params => {
|
|
|
769
781
|
});
|
|
770
782
|
return result;
|
|
771
783
|
} catch (ex) {
|
|
784
|
+
await onEntryCreateRevisionError.publish({
|
|
785
|
+
entry,
|
|
786
|
+
original: originalEntry,
|
|
787
|
+
model,
|
|
788
|
+
input,
|
|
789
|
+
error: ex
|
|
790
|
+
});
|
|
772
791
|
throw new _error.default(ex.message || "Could not create entry from existing one.", ex.code || "CREATE_FROM_REVISION_ERROR", {
|
|
773
792
|
error: ex,
|
|
774
793
|
entry,
|
|
@@ -778,7 +797,7 @@ const createContentEntryCrud = params => {
|
|
|
778
797
|
});
|
|
779
798
|
}
|
|
780
799
|
},
|
|
781
|
-
|
|
800
|
+
async updateEntry(initialModel, id, inputData, metaInput) {
|
|
782
801
|
const permission = await checkEntryPermissions({
|
|
783
802
|
rwd: "w"
|
|
784
803
|
});
|
|
@@ -787,27 +806,24 @@ const createContentEntryCrud = params => {
|
|
|
787
806
|
model: initialModel,
|
|
788
807
|
plugins
|
|
789
808
|
});
|
|
809
|
+
|
|
790
810
|
/**
|
|
791
811
|
* Make sure we only work with fields that are defined in the model.
|
|
792
812
|
*/
|
|
793
|
-
|
|
794
813
|
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
814
|
+
|
|
795
815
|
/**
|
|
796
816
|
* The entry we are going to update.
|
|
797
817
|
*/
|
|
798
|
-
|
|
799
818
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
800
819
|
id
|
|
801
820
|
});
|
|
802
|
-
|
|
803
821
|
if (!originalStorageEntry) {
|
|
804
822
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
805
823
|
}
|
|
806
|
-
|
|
807
824
|
if (originalStorageEntry.locked) {
|
|
808
825
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
809
826
|
}
|
|
810
|
-
|
|
811
827
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
812
828
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
813
829
|
context,
|
|
@@ -816,9 +832,7 @@ const createContentEntryCrud = params => {
|
|
|
816
832
|
entry: originalEntry
|
|
817
833
|
});
|
|
818
834
|
(0, _ownership.checkOwnership)(context, permission, originalEntry);
|
|
819
|
-
|
|
820
|
-
const initialValues = _objectSpread(_objectSpread({}, originalEntry.values), input);
|
|
821
|
-
|
|
835
|
+
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
822
836
|
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
823
837
|
context,
|
|
824
838
|
model,
|
|
@@ -828,22 +842,19 @@ const createContentEntryCrud = params => {
|
|
|
828
842
|
/**
|
|
829
843
|
* If users wants to remove a key from meta values, they need to send meta key with the null value.
|
|
830
844
|
*/
|
|
831
|
-
|
|
832
845
|
const meta = createEntryMeta(metaInput, originalEntry.meta);
|
|
833
846
|
/**
|
|
834
847
|
* We always send the full entry to the hooks and storage operations update.
|
|
835
848
|
*/
|
|
836
|
-
|
|
837
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
849
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
838
850
|
savedOn: new Date().toISOString(),
|
|
839
851
|
values,
|
|
840
|
-
meta
|
|
852
|
+
meta,
|
|
853
|
+
status: transformEntryStatus(originalEntry.status)
|
|
841
854
|
});
|
|
842
|
-
|
|
843
855
|
let storageEntry = null;
|
|
844
|
-
|
|
845
856
|
try {
|
|
846
|
-
await
|
|
857
|
+
await onEntryBeforeUpdate.publish({
|
|
847
858
|
entry,
|
|
848
859
|
model,
|
|
849
860
|
input,
|
|
@@ -854,7 +865,7 @@ const createContentEntryCrud = params => {
|
|
|
854
865
|
entry,
|
|
855
866
|
storageEntry
|
|
856
867
|
});
|
|
857
|
-
await
|
|
868
|
+
await onEntryAfterUpdate.publish({
|
|
858
869
|
entry,
|
|
859
870
|
storageEntry: result,
|
|
860
871
|
model,
|
|
@@ -863,6 +874,12 @@ const createContentEntryCrud = params => {
|
|
|
863
874
|
});
|
|
864
875
|
return result;
|
|
865
876
|
} catch (ex) {
|
|
877
|
+
await onEntryUpdateError.publish({
|
|
878
|
+
entry,
|
|
879
|
+
model,
|
|
880
|
+
input,
|
|
881
|
+
error: ex
|
|
882
|
+
});
|
|
866
883
|
throw new _error.default(ex.message || "Could not update existing entry.", ex.code || "UPDATE_ERROR", {
|
|
867
884
|
error: ex,
|
|
868
885
|
entry,
|
|
@@ -872,7 +889,11 @@ const createContentEntryCrud = params => {
|
|
|
872
889
|
});
|
|
873
890
|
}
|
|
874
891
|
},
|
|
875
|
-
|
|
892
|
+
/**
|
|
893
|
+
* Method used internally. Not documented and should not be used in users systems.
|
|
894
|
+
* @internal
|
|
895
|
+
*/
|
|
896
|
+
async republishEntry(initialModel, id) {
|
|
876
897
|
await checkEntryPermissions({
|
|
877
898
|
rwd: "w"
|
|
878
899
|
});
|
|
@@ -884,45 +905,37 @@ const createContentEntryCrud = params => {
|
|
|
884
905
|
/**
|
|
885
906
|
* Fetch the entry from the storage.
|
|
886
907
|
*/
|
|
887
|
-
|
|
888
908
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
889
909
|
id
|
|
890
910
|
});
|
|
891
|
-
|
|
892
911
|
if (!originalStorageEntry) {
|
|
893
912
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
894
913
|
}
|
|
895
|
-
|
|
896
914
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
897
915
|
/**
|
|
898
916
|
* We can only process published entries.
|
|
899
917
|
*/
|
|
900
|
-
|
|
901
918
|
if (originalEntry.status !== "published") {
|
|
902
919
|
throw new _error.default("Entry with given ID is not published!", "NOT_PUBLISHED_ERROR", {
|
|
903
920
|
id,
|
|
904
921
|
original: originalEntry
|
|
905
922
|
});
|
|
906
923
|
}
|
|
907
|
-
|
|
908
924
|
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
909
925
|
context,
|
|
910
926
|
model,
|
|
911
927
|
input: originalEntry.values,
|
|
912
928
|
validateEntries: false
|
|
913
929
|
});
|
|
914
|
-
|
|
915
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
930
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
916
931
|
savedOn: new Date().toISOString(),
|
|
917
932
|
webinyVersion: context.WEBINY_VERSION,
|
|
918
933
|
values
|
|
919
934
|
});
|
|
920
|
-
|
|
921
935
|
const storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
922
936
|
/**
|
|
923
937
|
* First we need to update existing entry.
|
|
924
938
|
*/
|
|
925
|
-
|
|
926
939
|
try {
|
|
927
940
|
await storageOperations.entries.update(model, {
|
|
928
941
|
entry,
|
|
@@ -936,20 +949,33 @@ const createContentEntryCrud = params => {
|
|
|
936
949
|
/**
|
|
937
950
|
* Then we move onto publishing it again.
|
|
938
951
|
*/
|
|
939
|
-
|
|
940
|
-
|
|
941
952
|
try {
|
|
942
|
-
|
|
953
|
+
await onEntryBeforeRepublish.publish({
|
|
943
954
|
entry,
|
|
955
|
+
model
|
|
956
|
+
});
|
|
957
|
+
const result = await storageOperations.entries.publish(model, {
|
|
958
|
+
entry,
|
|
959
|
+
storageEntry
|
|
960
|
+
});
|
|
961
|
+
await onEntryAfterRepublish.publish({
|
|
962
|
+
entry,
|
|
963
|
+
model,
|
|
944
964
|
storageEntry
|
|
945
965
|
});
|
|
966
|
+
return result;
|
|
946
967
|
} catch (ex) {
|
|
968
|
+
await onEntryRepublishError.publish({
|
|
969
|
+
entry,
|
|
970
|
+
model,
|
|
971
|
+
error: ex
|
|
972
|
+
});
|
|
947
973
|
throw new _error.default("Could not publish existing entry while re-publishing.", "REPUBLISH_PUBLISH_ERROR", {
|
|
948
974
|
entry
|
|
949
975
|
});
|
|
950
976
|
}
|
|
951
977
|
},
|
|
952
|
-
|
|
978
|
+
async deleteEntryRevision(initialModel, revisionId) {
|
|
953
979
|
const permission = await checkEntryPermissions({
|
|
954
980
|
rwd: "d"
|
|
955
981
|
});
|
|
@@ -972,11 +998,9 @@ const createContentEntryCrud = params => {
|
|
|
972
998
|
entryId,
|
|
973
999
|
version: version
|
|
974
1000
|
});
|
|
975
|
-
|
|
976
1001
|
if (!storageEntryToDelete) {
|
|
977
1002
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
978
1003
|
}
|
|
979
|
-
|
|
980
1004
|
(0, _ownership.checkOwnership)(context, permission, storageEntryToDelete);
|
|
981
1005
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
982
1006
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
@@ -984,7 +1008,6 @@ const createContentEntryCrud = params => {
|
|
|
984
1008
|
* If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.
|
|
985
1009
|
* At this point deleteRevision hooks are not fired.
|
|
986
1010
|
*/
|
|
987
|
-
|
|
988
1011
|
if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {
|
|
989
1012
|
return await deleteEntry({
|
|
990
1013
|
model,
|
|
@@ -994,18 +1017,14 @@ const createContentEntryCrud = params => {
|
|
|
994
1017
|
/**
|
|
995
1018
|
* If targeted record is latest entry revision, set the previous one as the new latest
|
|
996
1019
|
*/
|
|
997
|
-
|
|
998
|
-
|
|
999
1020
|
let entryToSetAsLatest = null;
|
|
1000
1021
|
let storageEntryToSetAsLatest = null;
|
|
1001
|
-
|
|
1002
1022
|
if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {
|
|
1003
1023
|
entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, previousStorageEntry);
|
|
1004
1024
|
storageEntryToSetAsLatest = previousStorageEntry;
|
|
1005
1025
|
}
|
|
1006
|
-
|
|
1007
1026
|
try {
|
|
1008
|
-
await
|
|
1027
|
+
await onEntryRevisionBeforeDelete.publish({
|
|
1009
1028
|
entry: entryToDelete,
|
|
1010
1029
|
model
|
|
1011
1030
|
});
|
|
@@ -1015,11 +1034,16 @@ const createContentEntryCrud = params => {
|
|
|
1015
1034
|
latestEntry: entryToSetAsLatest,
|
|
1016
1035
|
latestStorageEntry: storageEntryToSetAsLatest
|
|
1017
1036
|
});
|
|
1018
|
-
await
|
|
1037
|
+
await onEntryRevisionAfterDelete.publish({
|
|
1019
1038
|
entry: entryToDelete,
|
|
1020
1039
|
model
|
|
1021
1040
|
});
|
|
1022
1041
|
} catch (ex) {
|
|
1042
|
+
await onEntryRevisionDeleteError.publish({
|
|
1043
|
+
entry: entryToDelete,
|
|
1044
|
+
model,
|
|
1045
|
+
error: ex
|
|
1046
|
+
});
|
|
1023
1047
|
throw new _error.default(ex.message, ex.code || "DELETE_REVISION_ERROR", {
|
|
1024
1048
|
error: ex,
|
|
1025
1049
|
entry: entryToDelete,
|
|
@@ -1029,7 +1053,7 @@ const createContentEntryCrud = params => {
|
|
|
1029
1053
|
});
|
|
1030
1054
|
}
|
|
1031
1055
|
},
|
|
1032
|
-
|
|
1056
|
+
async deleteEntry(initialModel, entryId) {
|
|
1033
1057
|
const permission = await checkEntryPermissions({
|
|
1034
1058
|
rwd: "d"
|
|
1035
1059
|
});
|
|
@@ -1041,11 +1065,9 @@ const createContentEntryCrud = params => {
|
|
|
1041
1065
|
const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
1042
1066
|
id: entryId
|
|
1043
1067
|
});
|
|
1044
|
-
|
|
1045
1068
|
if (!storageEntry) {
|
|
1046
1069
|
throw new _handlerGraphql.NotFoundError(`Entry "${entryId}" was not found!`);
|
|
1047
1070
|
}
|
|
1048
|
-
|
|
1049
1071
|
(0, _ownership.checkOwnership)(context, permission, storageEntry);
|
|
1050
1072
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
1051
1073
|
return await deleteEntry({
|
|
@@ -1053,7 +1075,7 @@ const createContentEntryCrud = params => {
|
|
|
1053
1075
|
entry
|
|
1054
1076
|
});
|
|
1055
1077
|
},
|
|
1056
|
-
|
|
1078
|
+
async publishEntry(initialModel, id) {
|
|
1057
1079
|
const permission = await checkEntryPermissions({
|
|
1058
1080
|
pw: "p"
|
|
1059
1081
|
});
|
|
@@ -1065,26 +1087,21 @@ const createContentEntryCrud = params => {
|
|
|
1065
1087
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1066
1088
|
id
|
|
1067
1089
|
});
|
|
1068
|
-
|
|
1069
1090
|
if (!originalStorageEntry) {
|
|
1070
1091
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
1071
1092
|
}
|
|
1072
|
-
|
|
1073
1093
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1074
1094
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1075
1095
|
const currentDate = new Date().toISOString();
|
|
1076
|
-
|
|
1077
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
1096
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
1078
1097
|
status: STATUS_PUBLISHED,
|
|
1079
1098
|
locked: true,
|
|
1080
1099
|
savedOn: currentDate,
|
|
1081
1100
|
publishedOn: currentDate
|
|
1082
1101
|
});
|
|
1083
|
-
|
|
1084
1102
|
let storageEntry = null;
|
|
1085
|
-
|
|
1086
1103
|
try {
|
|
1087
|
-
await
|
|
1104
|
+
await onEntryBeforePublish.publish({
|
|
1088
1105
|
entry,
|
|
1089
1106
|
model
|
|
1090
1107
|
});
|
|
@@ -1093,13 +1110,18 @@ const createContentEntryCrud = params => {
|
|
|
1093
1110
|
entry,
|
|
1094
1111
|
storageEntry
|
|
1095
1112
|
});
|
|
1096
|
-
await
|
|
1113
|
+
await onEntryAfterPublish.publish({
|
|
1097
1114
|
entry,
|
|
1098
1115
|
storageEntry: result,
|
|
1099
1116
|
model
|
|
1100
1117
|
});
|
|
1101
1118
|
return result;
|
|
1102
1119
|
} catch (ex) {
|
|
1120
|
+
await onEntryPublishError.publish({
|
|
1121
|
+
entry,
|
|
1122
|
+
model,
|
|
1123
|
+
error: ex
|
|
1124
|
+
});
|
|
1103
1125
|
throw new _error.default(ex.message || "Could not publish entry.", ex.code || "PUBLISH_ERROR", {
|
|
1104
1126
|
error: ex,
|
|
1105
1127
|
entry,
|
|
@@ -1109,130 +1131,7 @@ const createContentEntryCrud = params => {
|
|
|
1109
1131
|
});
|
|
1110
1132
|
}
|
|
1111
1133
|
},
|
|
1112
|
-
|
|
1113
|
-
const permission = await checkEntryPermissions({
|
|
1114
|
-
pw: "c"
|
|
1115
|
-
});
|
|
1116
|
-
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
1117
|
-
model: initialModel,
|
|
1118
|
-
plugins
|
|
1119
|
-
});
|
|
1120
|
-
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1121
|
-
id
|
|
1122
|
-
});
|
|
1123
|
-
|
|
1124
|
-
if (!originalStorageEntry) {
|
|
1125
|
-
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1126
|
-
}
|
|
1127
|
-
|
|
1128
|
-
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1129
|
-
|
|
1130
|
-
if (originalEntry.status !== STATUS_REVIEW_REQUESTED) {
|
|
1131
|
-
throw new _error.default("Cannot request changes on an entry that's not under review.", "ENTRY_NOT_UNDER_REVIEW");
|
|
1132
|
-
}
|
|
1133
|
-
|
|
1134
|
-
const identity = context.security.getIdentity();
|
|
1135
|
-
|
|
1136
|
-
if (originalEntry.ownedBy.id === identity.id) {
|
|
1137
|
-
throw new _error.default("You cannot request changes on your own entry.", "CANNOT_REQUEST_CHANGES_ON_OWN_ENTRY");
|
|
1138
|
-
}
|
|
1139
|
-
|
|
1140
|
-
(0, _ownership.checkOwnership)(context, permission, originalEntry);
|
|
1141
|
-
|
|
1142
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
1143
|
-
status: STATUS_CHANGES_REQUESTED
|
|
1144
|
-
});
|
|
1145
|
-
|
|
1146
|
-
let storageEntry = null;
|
|
1147
|
-
|
|
1148
|
-
try {
|
|
1149
|
-
await onBeforeEntryRequestChanges.publish({
|
|
1150
|
-
entry,
|
|
1151
|
-
model
|
|
1152
|
-
});
|
|
1153
|
-
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
1154
|
-
const result = await storageOperations.entries.requestChanges(model, {
|
|
1155
|
-
entry,
|
|
1156
|
-
storageEntry
|
|
1157
|
-
});
|
|
1158
|
-
await onAfterEntryRequestChanges.publish({
|
|
1159
|
-
entry,
|
|
1160
|
-
storageEntry: result,
|
|
1161
|
-
model
|
|
1162
|
-
});
|
|
1163
|
-
return result;
|
|
1164
|
-
} catch (ex) {
|
|
1165
|
-
throw new _error.default(ex.message || "Could not request changes for the entry.", ex.code || "REQUEST_CHANGES_ERROR", {
|
|
1166
|
-
entry,
|
|
1167
|
-
originalEntry
|
|
1168
|
-
});
|
|
1169
|
-
}
|
|
1170
|
-
},
|
|
1171
|
-
requestEntryReview: async (initialModel, id) => {
|
|
1172
|
-
const permission = await checkEntryPermissions({
|
|
1173
|
-
pw: "r"
|
|
1174
|
-
});
|
|
1175
|
-
const {
|
|
1176
|
-
id: entryId
|
|
1177
|
-
} = (0, _utils.parseIdentifier)(id);
|
|
1178
|
-
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
1179
|
-
model: initialModel,
|
|
1180
|
-
plugins
|
|
1181
|
-
});
|
|
1182
|
-
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1183
|
-
id
|
|
1184
|
-
});
|
|
1185
|
-
const latestEntryRevision = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
1186
|
-
id: entryId
|
|
1187
|
-
});
|
|
1188
|
-
|
|
1189
|
-
if (!originalStorageEntry) {
|
|
1190
|
-
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1191
|
-
} else if (!latestEntryRevision) {
|
|
1192
|
-
throw new _handlerGraphql.NotFoundError(`Entry "${id}" does not have latest record`);
|
|
1193
|
-
}
|
|
1194
|
-
|
|
1195
|
-
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1196
|
-
const allowedStatuses = [STATUS_DRAFT, STATUS_CHANGES_REQUESTED];
|
|
1197
|
-
|
|
1198
|
-
if (!allowedStatuses.includes(originalEntry.status)) {
|
|
1199
|
-
throw new _error.default("Cannot request review - entry is not a draft nor was a change request issued.", "REQUEST_REVIEW_ERROR", {
|
|
1200
|
-
entry: originalEntry
|
|
1201
|
-
});
|
|
1202
|
-
}
|
|
1203
|
-
|
|
1204
|
-
(0, _ownership.checkOwnership)(context, permission, originalEntry);
|
|
1205
|
-
|
|
1206
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
1207
|
-
status: STATUS_REVIEW_REQUESTED
|
|
1208
|
-
});
|
|
1209
|
-
|
|
1210
|
-
let storageEntry = null;
|
|
1211
|
-
|
|
1212
|
-
try {
|
|
1213
|
-
await onBeforeEntryRequestReview.publish({
|
|
1214
|
-
entry,
|
|
1215
|
-
model
|
|
1216
|
-
});
|
|
1217
|
-
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
1218
|
-
const result = await storageOperations.entries.requestReview(model, {
|
|
1219
|
-
entry,
|
|
1220
|
-
storageEntry
|
|
1221
|
-
});
|
|
1222
|
-
await onAfterEntryRequestReview.publish({
|
|
1223
|
-
entry,
|
|
1224
|
-
storageEntry: result,
|
|
1225
|
-
model
|
|
1226
|
-
});
|
|
1227
|
-
return result;
|
|
1228
|
-
} catch (ex) {
|
|
1229
|
-
throw new _error.default(ex.message || "Could not request review on the entry.", ex.code || "REQUEST_REVIEW_ERROR", {
|
|
1230
|
-
originalEntry,
|
|
1231
|
-
entry
|
|
1232
|
-
});
|
|
1233
|
-
}
|
|
1234
|
-
},
|
|
1235
|
-
unpublishEntry: async (initialModel, id) => {
|
|
1134
|
+
async unpublishEntry(initialModel, id) {
|
|
1236
1135
|
const permission = await checkEntryPermissions({
|
|
1237
1136
|
pw: "u"
|
|
1238
1137
|
});
|
|
@@ -1246,28 +1145,22 @@ const createContentEntryCrud = params => {
|
|
|
1246
1145
|
const originalStorageEntry = await storageOperations.entries.getPublishedRevisionByEntryId(model, {
|
|
1247
1146
|
id: entryId
|
|
1248
1147
|
});
|
|
1249
|
-
|
|
1250
1148
|
if (!originalStorageEntry) {
|
|
1251
1149
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1252
1150
|
}
|
|
1253
|
-
|
|
1254
1151
|
if (originalStorageEntry.id !== id) {
|
|
1255
1152
|
throw new _error.default(`Entry is not published.`, "UNPUBLISH_ERROR", {
|
|
1256
1153
|
entry: originalStorageEntry
|
|
1257
1154
|
});
|
|
1258
1155
|
}
|
|
1259
|
-
|
|
1260
1156
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1261
1157
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1262
|
-
|
|
1263
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
1158
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
1264
1159
|
status: STATUS_UNPUBLISHED
|
|
1265
1160
|
});
|
|
1266
|
-
|
|
1267
1161
|
let storageEntry = null;
|
|
1268
|
-
|
|
1269
1162
|
try {
|
|
1270
|
-
await
|
|
1163
|
+
await onEntryBeforeUnpublish.publish({
|
|
1271
1164
|
entry,
|
|
1272
1165
|
model
|
|
1273
1166
|
});
|
|
@@ -1276,13 +1169,18 @@ const createContentEntryCrud = params => {
|
|
|
1276
1169
|
entry,
|
|
1277
1170
|
storageEntry
|
|
1278
1171
|
});
|
|
1279
|
-
await
|
|
1172
|
+
await onEntryAfterUnpublish.publish({
|
|
1280
1173
|
entry,
|
|
1281
1174
|
storageEntry: result,
|
|
1282
1175
|
model
|
|
1283
1176
|
});
|
|
1284
1177
|
return result;
|
|
1285
1178
|
} catch (ex) {
|
|
1179
|
+
await onEntryUnpublishError.publish({
|
|
1180
|
+
entry,
|
|
1181
|
+
model,
|
|
1182
|
+
error: ex
|
|
1183
|
+
});
|
|
1286
1184
|
throw new _error.default(ex.message || "Could not unpublish entry.", ex.code || "UNPUBLISH_ERROR", {
|
|
1287
1185
|
originalEntry,
|
|
1288
1186
|
originalStorageEntry,
|
|
@@ -1293,5 +1191,4 @@ const createContentEntryCrud = params => {
|
|
|
1293
1191
|
}
|
|
1294
1192
|
};
|
|
1295
1193
|
};
|
|
1296
|
-
|
|
1297
1194
|
exports.createContentEntryCrud = createContentEntryCrud;
|