@webiny/api-headless-cms 0.0.0-unstable.d4f203fa97 → 0.0.0-unstable.d7f521b032
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/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 +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 +219 -269
- 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 +9 -13
- 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 +42 -25
- 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 +8 -19
- 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 +0 -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 -28
- package/parameters/context.js +0 -4
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +0 -11
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +0 -8
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +1 -8
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +0 -11
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
- package/plugins/CmsGraphQLSchemaPlugin.js +12 -0
- package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js +28 -0
- package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
- package/plugins/CmsGroupPlugin.js +0 -8
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
- package/plugins/CmsModelFieldConverterPlugin.js +0 -5
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.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 +235 -57
- 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.js +14 -34
- 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/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,57 +1,39 @@
|
|
|
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.createContentEntryCrud = exports.STATUS_UNPUBLISHED = exports.STATUS_PUBLISHED = exports.STATUS_DRAFT = void 0;
|
|
9
|
-
|
|
10
8
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
-
|
|
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
|
-
|
|
25
|
+
var _searchableFields = require("./contentEntry/searchableFields");
|
|
44
26
|
/**
|
|
45
27
|
* Package mdbid does not have types.
|
|
46
28
|
*/
|
|
47
29
|
// @ts-ignore
|
|
30
|
+
|
|
48
31
|
const STATUS_DRAFT = "draft";
|
|
49
32
|
exports.STATUS_DRAFT = STATUS_DRAFT;
|
|
50
33
|
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
|
-
|
|
55
37
|
/**
|
|
56
38
|
* Used for some fields to convert their values.
|
|
57
39
|
*/
|
|
@@ -59,45 +41,35 @@ const convertDefaultValue = (field, value) => {
|
|
|
59
41
|
switch (field.type) {
|
|
60
42
|
case "boolean":
|
|
61
43
|
return Boolean(value);
|
|
62
|
-
|
|
63
44
|
case "number":
|
|
64
45
|
return Number(value);
|
|
65
|
-
|
|
66
46
|
default:
|
|
67
47
|
return value;
|
|
68
48
|
}
|
|
69
49
|
};
|
|
70
|
-
|
|
71
50
|
const getDefaultValue = field => {
|
|
72
51
|
const {
|
|
73
52
|
settings,
|
|
74
53
|
multipleValues
|
|
75
54
|
} = field;
|
|
76
|
-
|
|
77
55
|
if (settings && settings.defaultValue !== undefined) {
|
|
78
56
|
return convertDefaultValue(field, settings.defaultValue);
|
|
79
57
|
}
|
|
80
|
-
|
|
81
58
|
const {
|
|
82
59
|
predefinedValues
|
|
83
60
|
} = field;
|
|
84
|
-
|
|
85
61
|
if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
|
|
86
62
|
return undefined;
|
|
87
63
|
}
|
|
88
|
-
|
|
89
64
|
if (!multipleValues) {
|
|
90
65
|
const selectedValue = predefinedValues.values.find(value => {
|
|
91
66
|
return !!value.selected;
|
|
92
67
|
});
|
|
93
|
-
|
|
94
68
|
if (selectedValue) {
|
|
95
69
|
return convertDefaultValue(field, selectedValue.value);
|
|
96
70
|
}
|
|
97
|
-
|
|
98
71
|
return undefined;
|
|
99
72
|
}
|
|
100
|
-
|
|
101
73
|
return predefinedValues.values.filter(({
|
|
102
74
|
selected
|
|
103
75
|
}) => !!selected).map(({
|
|
@@ -109,8 +81,6 @@ const getDefaultValue = field => {
|
|
|
109
81
|
/**
|
|
110
82
|
* Cleans and adds default values to create input data.
|
|
111
83
|
*/
|
|
112
|
-
|
|
113
|
-
|
|
114
84
|
const mapAndCleanCreateInputData = (model, input) => {
|
|
115
85
|
return model.fields.reduce((acc, field) => {
|
|
116
86
|
/**
|
|
@@ -122,12 +92,10 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
122
92
|
field
|
|
123
93
|
});
|
|
124
94
|
}
|
|
125
|
-
|
|
126
95
|
const value = input[field.fieldId];
|
|
127
96
|
/**
|
|
128
97
|
* We set the default value on create input if value is not defined.
|
|
129
98
|
*/
|
|
130
|
-
|
|
131
99
|
acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
|
|
132
100
|
return acc;
|
|
133
101
|
}, {});
|
|
@@ -135,8 +103,6 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
135
103
|
/**
|
|
136
104
|
* Cleans the update input entry data.
|
|
137
105
|
*/
|
|
138
|
-
|
|
139
|
-
|
|
140
106
|
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
141
107
|
return model.fields.reduce((acc, field) => {
|
|
142
108
|
/**
|
|
@@ -151,14 +117,10 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
151
117
|
/**
|
|
152
118
|
* We cannot set default value here because user might want to update only certain field values.
|
|
153
119
|
*/
|
|
154
|
-
|
|
155
|
-
|
|
156
120
|
const value = input[field.fieldId];
|
|
157
|
-
|
|
158
121
|
if (value === undefined) {
|
|
159
122
|
return acc;
|
|
160
123
|
}
|
|
161
|
-
|
|
162
124
|
acc[field.fieldId] = value;
|
|
163
125
|
return acc;
|
|
164
126
|
}, {});
|
|
@@ -167,26 +129,29 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
167
129
|
* This method takes original entry meta and new input.
|
|
168
130
|
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
169
131
|
*/
|
|
170
|
-
|
|
171
|
-
|
|
172
132
|
const createEntryMeta = (input, original) => {
|
|
173
133
|
const meta = (0, _merge.default)(original || {}, input || {});
|
|
174
|
-
|
|
175
134
|
for (const key in meta) {
|
|
176
135
|
if (meta[key] !== undefined || meta[key] !== null) {
|
|
177
136
|
continue;
|
|
178
137
|
}
|
|
179
|
-
|
|
180
138
|
delete meta[key];
|
|
181
139
|
}
|
|
182
|
-
|
|
183
140
|
return meta;
|
|
184
141
|
};
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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;
|
|
188
153
|
return {
|
|
189
|
-
entryId,
|
|
154
|
+
entryId: entryId,
|
|
190
155
|
version,
|
|
191
156
|
id: (0, _utils.createIdentifier)({
|
|
192
157
|
id: entryId,
|
|
@@ -194,19 +159,16 @@ const createEntryId = version => {
|
|
|
194
159
|
})
|
|
195
160
|
};
|
|
196
161
|
};
|
|
197
|
-
|
|
198
162
|
const increaseEntryIdVersion = id => {
|
|
199
163
|
const {
|
|
200
164
|
id: entryId,
|
|
201
165
|
version
|
|
202
166
|
} = (0, _utils.parseIdentifier)(id);
|
|
203
|
-
|
|
204
167
|
if (!version) {
|
|
205
168
|
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
206
169
|
id
|
|
207
170
|
});
|
|
208
171
|
}
|
|
209
|
-
|
|
210
172
|
return {
|
|
211
173
|
entryId,
|
|
212
174
|
version: version + 1,
|
|
@@ -216,42 +178,10 @@ const increaseEntryIdVersion = id => {
|
|
|
216
178
|
})
|
|
217
179
|
};
|
|
218
180
|
};
|
|
219
|
-
|
|
220
|
-
const getSearchableFields = params => {
|
|
221
|
-
const {
|
|
222
|
-
plugins,
|
|
223
|
-
model,
|
|
224
|
-
fields
|
|
225
|
-
} = params;
|
|
226
|
-
const fieldPluginMap = plugins.byType("cms-model-field-to-graphql").reduce((collection, field) => {
|
|
227
|
-
collection[field.fieldType] = field;
|
|
228
|
-
return collection;
|
|
229
|
-
}, {});
|
|
230
|
-
return model.fields.filter(field => {
|
|
231
|
-
if (!field.fieldId) {
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
const plugin = fieldPluginMap[field.type];
|
|
236
|
-
|
|
237
|
-
if (!plugin) {
|
|
238
|
-
return false;
|
|
239
|
-
} else if (!plugin.fullTextSearch) {
|
|
240
|
-
return false;
|
|
241
|
-
} else if (!fields || fields.length === 0) {
|
|
242
|
-
return true;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
return fields.includes(field.fieldId);
|
|
246
|
-
}).map(field => field.fieldId);
|
|
247
|
-
};
|
|
248
|
-
|
|
249
181
|
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
250
|
-
|
|
251
182
|
const transformEntryStatus = status => {
|
|
252
183
|
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
253
184
|
};
|
|
254
|
-
|
|
255
185
|
const createContentEntryCrud = params => {
|
|
256
186
|
const {
|
|
257
187
|
storageOperations,
|
|
@@ -261,43 +191,71 @@ const createContentEntryCrud = params => {
|
|
|
261
191
|
} = params;
|
|
262
192
|
const {
|
|
263
193
|
plugins
|
|
264
|
-
} = context;
|
|
194
|
+
} = context;
|
|
265
195
|
|
|
196
|
+
/**
|
|
197
|
+
* Create
|
|
198
|
+
*/
|
|
266
199
|
const onEntryBeforeCreate = (0, _pubsub.createTopic)("cms.onEntryBeforeCreate");
|
|
267
200
|
const onEntryAfterCreate = (0, _pubsub.createTopic)("cms.onEntryAfterCreate");
|
|
268
|
-
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
|
|
201
|
+
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
|
|
269
202
|
|
|
203
|
+
/**
|
|
204
|
+
* Create new revision
|
|
205
|
+
*/
|
|
270
206
|
const onEntryBeforeCreateRevision = (0, _pubsub.createTopic)("cms.onEntryBeforeCreateRevision");
|
|
271
207
|
const onEntryRevisionAfterCreate = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterCreate");
|
|
272
|
-
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
|
|
208
|
+
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
|
|
273
209
|
|
|
210
|
+
/**
|
|
211
|
+
* Update
|
|
212
|
+
*/
|
|
274
213
|
const onEntryBeforeUpdate = (0, _pubsub.createTopic)("cms.onEntryBeforeUpdate");
|
|
275
214
|
const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
|
|
276
|
-
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
215
|
+
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
277
216
|
|
|
217
|
+
/**
|
|
218
|
+
* Publish
|
|
219
|
+
*/
|
|
278
220
|
const onEntryBeforePublish = (0, _pubsub.createTopic)("cms.onEntryBeforePublish");
|
|
279
|
-
const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.
|
|
280
|
-
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
|
|
221
|
+
const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublish");
|
|
222
|
+
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
|
|
281
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
|
+
*/
|
|
282
234
|
const onEntryBeforeUnpublish = (0, _pubsub.createTopic)("cms.onEntryBeforeUnpublish");
|
|
283
235
|
const onEntryAfterUnpublish = (0, _pubsub.createTopic)("cms.onEntryAfterUnpublish");
|
|
284
|
-
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
|
|
236
|
+
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
|
|
285
237
|
|
|
238
|
+
/**
|
|
239
|
+
* Delete
|
|
240
|
+
*/
|
|
286
241
|
const onEntryBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryBeforeDelete");
|
|
287
242
|
const onEntryAfterDelete = (0, _pubsub.createTopic)("cms.onEntryAfterDelete");
|
|
288
|
-
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
|
|
243
|
+
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
|
|
289
244
|
|
|
245
|
+
// delete revision
|
|
290
246
|
const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
|
|
291
247
|
const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
|
|
292
|
-
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
248
|
+
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
293
249
|
|
|
294
|
-
|
|
250
|
+
// get
|
|
251
|
+
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet");
|
|
295
252
|
|
|
253
|
+
// list
|
|
296
254
|
const onEntryBeforeList = (0, _pubsub.createTopic)("cms.onEntryBeforeList");
|
|
255
|
+
|
|
297
256
|
/**
|
|
298
257
|
* We need to assign some default behaviors.
|
|
299
258
|
*/
|
|
300
|
-
|
|
301
259
|
(0, _beforeCreate.assignBeforeEntryCreate)({
|
|
302
260
|
context,
|
|
303
261
|
onEntryBeforeCreate
|
|
@@ -310,21 +268,18 @@ const createContentEntryCrud = params => {
|
|
|
310
268
|
context,
|
|
311
269
|
onEntryAfterDelete
|
|
312
270
|
});
|
|
313
|
-
|
|
314
271
|
const checkEntryPermissions = check => {
|
|
315
272
|
return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
|
|
316
273
|
};
|
|
274
|
+
|
|
317
275
|
/**
|
|
318
276
|
* A helper to delete the entire entry.
|
|
319
277
|
*/
|
|
320
|
-
|
|
321
|
-
|
|
322
278
|
const deleteEntry = async params => {
|
|
323
279
|
const {
|
|
324
280
|
model,
|
|
325
281
|
entry
|
|
326
282
|
} = params;
|
|
327
|
-
|
|
328
283
|
try {
|
|
329
284
|
await onEntryBeforeDelete.publish({
|
|
330
285
|
entry,
|
|
@@ -351,8 +306,6 @@ const createContentEntryCrud = params => {
|
|
|
351
306
|
/**
|
|
352
307
|
* A helper to get entries by revision IDs
|
|
353
308
|
*/
|
|
354
|
-
|
|
355
|
-
|
|
356
309
|
const getEntriesByIds = async (initialModel, ids) => {
|
|
357
310
|
const permission = await checkEntryPermissions({
|
|
358
311
|
rwd: "r"
|
|
@@ -367,7 +320,6 @@ const createContentEntryCrud = params => {
|
|
|
367
320
|
});
|
|
368
321
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
369
322
|
};
|
|
370
|
-
|
|
371
323
|
return {
|
|
372
324
|
/**
|
|
373
325
|
* Deprecated - will be removed in 5.35.0
|
|
@@ -388,39 +340,62 @@ const createContentEntryCrud = params => {
|
|
|
388
340
|
onAfterEntryUnpublish: onEntryAfterUnpublish,
|
|
389
341
|
onBeforeEntryGet: onEntryBeforeGet,
|
|
390
342
|
onBeforeEntryList: onEntryBeforeList,
|
|
391
|
-
|
|
392
343
|
/**
|
|
393
344
|
* Released in 5.34.0
|
|
345
|
+
*
|
|
346
|
+
* Create
|
|
394
347
|
*/
|
|
395
348
|
onEntryBeforeCreate,
|
|
396
349
|
onEntryAfterCreate,
|
|
397
350
|
onEntryCreateError,
|
|
351
|
+
/**
|
|
352
|
+
* Create revision
|
|
353
|
+
*/
|
|
398
354
|
onEntryRevisionBeforeCreate: onEntryBeforeCreateRevision,
|
|
399
355
|
onEntryRevisionAfterCreate,
|
|
400
356
|
onEntryRevisionCreateError: onEntryCreateRevisionError,
|
|
357
|
+
/**
|
|
358
|
+
* Update
|
|
359
|
+
*/
|
|
401
360
|
onEntryBeforeUpdate,
|
|
402
361
|
onEntryAfterUpdate,
|
|
403
362
|
onEntryUpdateError,
|
|
363
|
+
/**
|
|
364
|
+
* Delete whole entry
|
|
365
|
+
*/
|
|
404
366
|
onEntryBeforeDelete,
|
|
405
367
|
onEntryAfterDelete,
|
|
406
368
|
onEntryDeleteError,
|
|
369
|
+
/**
|
|
370
|
+
* Delete entry revision
|
|
371
|
+
*/
|
|
407
372
|
onEntryRevisionBeforeDelete,
|
|
408
373
|
onEntryRevisionAfterDelete,
|
|
409
374
|
onEntryRevisionDeleteError,
|
|
375
|
+
/**
|
|
376
|
+
* Publish
|
|
377
|
+
*/
|
|
410
378
|
onEntryBeforePublish,
|
|
411
379
|
onEntryAfterPublish,
|
|
412
380
|
onEntryPublishError,
|
|
381
|
+
/**
|
|
382
|
+
* Republish
|
|
383
|
+
*/
|
|
384
|
+
onEntryBeforeRepublish,
|
|
385
|
+
onEntryAfterRepublish,
|
|
386
|
+
onEntryRepublishError,
|
|
387
|
+
/**
|
|
388
|
+
* Unpublish
|
|
389
|
+
*/
|
|
413
390
|
onEntryBeforeUnpublish,
|
|
414
391
|
onEntryAfterUnpublish,
|
|
415
392
|
onEntryUnpublishError,
|
|
416
393
|
onEntryBeforeGet,
|
|
417
394
|
onEntryBeforeList,
|
|
418
|
-
|
|
419
395
|
/**
|
|
420
396
|
* Get entries by exact revision IDs from the database.
|
|
421
397
|
*/
|
|
422
398
|
getEntriesByIds: getEntriesByIds,
|
|
423
|
-
|
|
424
399
|
/**
|
|
425
400
|
* Get a single entry by revision ID from the database.
|
|
426
401
|
*/
|
|
@@ -437,14 +412,11 @@ const createContentEntryCrud = params => {
|
|
|
437
412
|
model
|
|
438
413
|
});
|
|
439
414
|
const [entry] = await getEntriesByIds(model, [id]);
|
|
440
|
-
|
|
441
415
|
if (!entry) {
|
|
442
416
|
throw new _handlerGraphql.NotFoundError(`Entry by ID "${id}" not found.`);
|
|
443
417
|
}
|
|
444
|
-
|
|
445
418
|
return entry;
|
|
446
419
|
},
|
|
447
|
-
|
|
448
420
|
/**
|
|
449
421
|
* Get published revisions by entry IDs.
|
|
450
422
|
*/
|
|
@@ -462,9 +434,8 @@ const createContentEntryCrud = params => {
|
|
|
462
434
|
});
|
|
463
435
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
464
436
|
},
|
|
465
|
-
|
|
466
437
|
/**
|
|
467
|
-
* Get latest revisions by entry IDs.
|
|
438
|
+
* Get the latest revisions by entry IDs.
|
|
468
439
|
*/
|
|
469
440
|
async getLatestEntriesByIds(initialModel, ids) {
|
|
470
441
|
const permission = await checkEntryPermissions({
|
|
@@ -480,7 +451,6 @@ const createContentEntryCrud = params => {
|
|
|
480
451
|
});
|
|
481
452
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
482
453
|
},
|
|
483
|
-
|
|
484
454
|
async getEntryRevisions(initialModel, entryId) {
|
|
485
455
|
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
486
456
|
model: initialModel,
|
|
@@ -490,7 +460,6 @@ const createContentEntryCrud = params => {
|
|
|
490
460
|
id: entryId
|
|
491
461
|
});
|
|
492
462
|
},
|
|
493
|
-
|
|
494
463
|
/**
|
|
495
464
|
* TODO determine if this method is required at all.
|
|
496
465
|
*
|
|
@@ -517,14 +486,11 @@ const createContentEntryCrud = params => {
|
|
|
517
486
|
sort,
|
|
518
487
|
limit: 1
|
|
519
488
|
});
|
|
520
|
-
|
|
521
489
|
if (items.length === 0) {
|
|
522
490
|
throw new _handlerGraphql.NotFoundError(`Entry not found!`);
|
|
523
491
|
}
|
|
524
|
-
|
|
525
492
|
return items[0];
|
|
526
493
|
},
|
|
527
|
-
|
|
528
494
|
/**
|
|
529
495
|
* @description Should not be used directly. Internal use only!
|
|
530
496
|
*
|
|
@@ -540,20 +506,19 @@ const createContentEntryCrud = params => {
|
|
|
540
506
|
plugins
|
|
541
507
|
});
|
|
542
508
|
const {
|
|
543
|
-
where: initialWhere
|
|
509
|
+
where: initialWhere,
|
|
510
|
+
limit: initialLimit
|
|
544
511
|
} = params;
|
|
512
|
+
const limit = initialLimit && initialLimit > 0 ? initialLimit : 50;
|
|
545
513
|
/**
|
|
546
514
|
* We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
|
|
547
515
|
*/
|
|
548
|
-
|
|
549
516
|
const where = (0, _objectSpread2.default)({}, initialWhere);
|
|
550
517
|
/**
|
|
551
518
|
* Possibly only get records which are owned by current user.
|
|
552
519
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
553
520
|
*/
|
|
554
|
-
|
|
555
521
|
const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
|
|
556
|
-
|
|
557
522
|
if (ownedBy !== undefined) {
|
|
558
523
|
where.ownedBy = ownedBy;
|
|
559
524
|
}
|
|
@@ -561,8 +526,6 @@ const createContentEntryCrud = params => {
|
|
|
561
526
|
* Where must contain either latest or published keys.
|
|
562
527
|
* We cannot list entries without one of those
|
|
563
528
|
*/
|
|
564
|
-
|
|
565
|
-
|
|
566
529
|
if (where.latest && where.published) {
|
|
567
530
|
throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
|
|
568
531
|
where
|
|
@@ -572,13 +535,11 @@ const createContentEntryCrud = params => {
|
|
|
572
535
|
where
|
|
573
536
|
});
|
|
574
537
|
}
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
model,
|
|
538
|
+
const fields = (0, _searchableFields.getSearchableFields)({
|
|
539
|
+
fields: model.fields,
|
|
578
540
|
plugins: context.plugins,
|
|
579
|
-
|
|
541
|
+
input: params.fields || []
|
|
580
542
|
});
|
|
581
|
-
|
|
582
543
|
try {
|
|
583
544
|
await onEntryBeforeList.publish({
|
|
584
545
|
where,
|
|
@@ -590,13 +551,13 @@ const createContentEntryCrud = params => {
|
|
|
590
551
|
cursor,
|
|
591
552
|
items
|
|
592
553
|
} = await storageOperations.entries.list(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
|
|
554
|
+
limit,
|
|
593
555
|
where,
|
|
594
556
|
fields
|
|
595
557
|
}));
|
|
596
558
|
const meta = {
|
|
597
559
|
hasMoreItems,
|
|
598
560
|
totalCount,
|
|
599
|
-
|
|
600
561
|
/**
|
|
601
562
|
* Cursor should be null if there are no more items to load.
|
|
602
563
|
* Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
|
|
@@ -617,7 +578,6 @@ const createContentEntryCrud = params => {
|
|
|
617
578
|
});
|
|
618
579
|
}
|
|
619
580
|
},
|
|
620
|
-
|
|
621
581
|
async listLatestEntries(model, params) {
|
|
622
582
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
623
583
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -628,7 +588,6 @@ const createContentEntryCrud = params => {
|
|
|
628
588
|
})
|
|
629
589
|
}));
|
|
630
590
|
},
|
|
631
|
-
|
|
632
591
|
async listPublishedEntries(model, params) {
|
|
633
592
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
634
593
|
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
@@ -639,7 +598,6 @@ const createContentEntryCrud = params => {
|
|
|
639
598
|
})
|
|
640
599
|
}));
|
|
641
600
|
},
|
|
642
|
-
|
|
643
601
|
async createEntry(initialModel, inputData) {
|
|
644
602
|
await checkEntryPermissions({
|
|
645
603
|
rwd: "w"
|
|
@@ -649,10 +607,10 @@ const createContentEntryCrud = params => {
|
|
|
649
607
|
model: initialModel,
|
|
650
608
|
plugins
|
|
651
609
|
});
|
|
610
|
+
|
|
652
611
|
/**
|
|
653
612
|
* Make sure we only work with fields that are defined in the model.
|
|
654
613
|
*/
|
|
655
|
-
|
|
656
614
|
const initialInput = mapAndCleanCreateInputData(model, inputData);
|
|
657
615
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
658
616
|
context,
|
|
@@ -672,11 +630,15 @@ const createContentEntryCrud = params => {
|
|
|
672
630
|
displayName: identity.displayName,
|
|
673
631
|
type: identity.type
|
|
674
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
|
+
*/
|
|
675
637
|
const {
|
|
676
638
|
id,
|
|
677
639
|
entryId,
|
|
678
640
|
version
|
|
679
|
-
} = createEntryId(
|
|
641
|
+
} = createEntryId(inputData);
|
|
680
642
|
const entry = {
|
|
681
643
|
webinyVersion: context.WEBINY_VERSION,
|
|
682
644
|
tenant: getTenant().id,
|
|
@@ -694,7 +656,6 @@ const createContentEntryCrud = params => {
|
|
|
694
656
|
values: input
|
|
695
657
|
};
|
|
696
658
|
let storageEntry = null;
|
|
697
|
-
|
|
698
659
|
try {
|
|
699
660
|
await onEntryBeforeCreate.publish({
|
|
700
661
|
entry,
|
|
@@ -728,7 +689,6 @@ const createContentEntryCrud = params => {
|
|
|
728
689
|
});
|
|
729
690
|
}
|
|
730
691
|
},
|
|
731
|
-
|
|
732
692
|
async createEntryRevisionFrom(initialModel, sourceId, inputData) {
|
|
733
693
|
const permission = await checkEntryPermissions({
|
|
734
694
|
rwd: "w"
|
|
@@ -738,15 +698,15 @@ const createContentEntryCrud = params => {
|
|
|
738
698
|
model: initialModel,
|
|
739
699
|
plugins
|
|
740
700
|
});
|
|
701
|
+
|
|
741
702
|
/**
|
|
742
703
|
* Make sure we only work with fields that are defined in the model.
|
|
743
704
|
*/
|
|
744
|
-
|
|
745
705
|
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
706
|
+
|
|
746
707
|
/**
|
|
747
708
|
* Entries are identified by a common parent ID + Revision number.
|
|
748
709
|
*/
|
|
749
|
-
|
|
750
710
|
const {
|
|
751
711
|
id: uniqueId
|
|
752
712
|
} = (0, _utils.parseIdentifier)(sourceId);
|
|
@@ -756,15 +716,13 @@ const createContentEntryCrud = params => {
|
|
|
756
716
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
757
717
|
id: uniqueId
|
|
758
718
|
});
|
|
759
|
-
|
|
760
719
|
if (!originalStorageEntry) {
|
|
761
720
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
762
721
|
}
|
|
722
|
+
|
|
763
723
|
/**
|
|
764
724
|
* We need to convert data from DB to its original form before using it further.
|
|
765
725
|
*/
|
|
766
|
-
|
|
767
|
-
|
|
768
726
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
769
727
|
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
770
728
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
@@ -802,7 +760,6 @@ const createContentEntryCrud = params => {
|
|
|
802
760
|
values
|
|
803
761
|
});
|
|
804
762
|
let storageEntry = null;
|
|
805
|
-
|
|
806
763
|
try {
|
|
807
764
|
await onEntryBeforeCreateRevision.publish({
|
|
808
765
|
input,
|
|
@@ -826,6 +783,7 @@ const createContentEntryCrud = params => {
|
|
|
826
783
|
} catch (ex) {
|
|
827
784
|
await onEntryCreateRevisionError.publish({
|
|
828
785
|
entry,
|
|
786
|
+
original: originalEntry,
|
|
829
787
|
model,
|
|
830
788
|
input,
|
|
831
789
|
error: ex
|
|
@@ -839,7 +797,6 @@ const createContentEntryCrud = params => {
|
|
|
839
797
|
});
|
|
840
798
|
}
|
|
841
799
|
},
|
|
842
|
-
|
|
843
800
|
async updateEntry(initialModel, id, inputData, metaInput) {
|
|
844
801
|
const permission = await checkEntryPermissions({
|
|
845
802
|
rwd: "w"
|
|
@@ -849,27 +806,24 @@ const createContentEntryCrud = params => {
|
|
|
849
806
|
model: initialModel,
|
|
850
807
|
plugins
|
|
851
808
|
});
|
|
809
|
+
|
|
852
810
|
/**
|
|
853
811
|
* Make sure we only work with fields that are defined in the model.
|
|
854
812
|
*/
|
|
855
|
-
|
|
856
813
|
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
814
|
+
|
|
857
815
|
/**
|
|
858
816
|
* The entry we are going to update.
|
|
859
817
|
*/
|
|
860
|
-
|
|
861
818
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
862
819
|
id
|
|
863
820
|
});
|
|
864
|
-
|
|
865
821
|
if (!originalStorageEntry) {
|
|
866
822
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
867
823
|
}
|
|
868
|
-
|
|
869
824
|
if (originalStorageEntry.locked) {
|
|
870
825
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
871
826
|
}
|
|
872
|
-
|
|
873
827
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
874
828
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
875
829
|
context,
|
|
@@ -888,12 +842,10 @@ const createContentEntryCrud = params => {
|
|
|
888
842
|
/**
|
|
889
843
|
* If users wants to remove a key from meta values, they need to send meta key with the null value.
|
|
890
844
|
*/
|
|
891
|
-
|
|
892
845
|
const meta = createEntryMeta(metaInput, originalEntry.meta);
|
|
893
846
|
/**
|
|
894
847
|
* We always send the full entry to the hooks and storage operations update.
|
|
895
848
|
*/
|
|
896
|
-
|
|
897
849
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
898
850
|
savedOn: new Date().toISOString(),
|
|
899
851
|
values,
|
|
@@ -901,7 +853,6 @@ const createContentEntryCrud = params => {
|
|
|
901
853
|
status: transformEntryStatus(originalEntry.status)
|
|
902
854
|
});
|
|
903
855
|
let storageEntry = null;
|
|
904
|
-
|
|
905
856
|
try {
|
|
906
857
|
await onEntryBeforeUpdate.publish({
|
|
907
858
|
entry,
|
|
@@ -938,7 +889,10 @@ const createContentEntryCrud = params => {
|
|
|
938
889
|
});
|
|
939
890
|
}
|
|
940
891
|
},
|
|
941
|
-
|
|
892
|
+
/**
|
|
893
|
+
* Method used internally. Not documented and should not be used in users systems.
|
|
894
|
+
* @internal
|
|
895
|
+
*/
|
|
942
896
|
async republishEntry(initialModel, id) {
|
|
943
897
|
await checkEntryPermissions({
|
|
944
898
|
rwd: "w"
|
|
@@ -951,27 +905,22 @@ const createContentEntryCrud = params => {
|
|
|
951
905
|
/**
|
|
952
906
|
* Fetch the entry from the storage.
|
|
953
907
|
*/
|
|
954
|
-
|
|
955
908
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
956
909
|
id
|
|
957
910
|
});
|
|
958
|
-
|
|
959
911
|
if (!originalStorageEntry) {
|
|
960
912
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
961
913
|
}
|
|
962
|
-
|
|
963
914
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
964
915
|
/**
|
|
965
916
|
* We can only process published entries.
|
|
966
917
|
*/
|
|
967
|
-
|
|
968
918
|
if (originalEntry.status !== "published") {
|
|
969
919
|
throw new _error.default("Entry with given ID is not published!", "NOT_PUBLISHED_ERROR", {
|
|
970
920
|
id,
|
|
971
921
|
original: originalEntry
|
|
972
922
|
});
|
|
973
923
|
}
|
|
974
|
-
|
|
975
924
|
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
976
925
|
context,
|
|
977
926
|
model,
|
|
@@ -987,7 +936,6 @@ const createContentEntryCrud = params => {
|
|
|
987
936
|
/**
|
|
988
937
|
* First we need to update existing entry.
|
|
989
938
|
*/
|
|
990
|
-
|
|
991
939
|
try {
|
|
992
940
|
await storageOperations.entries.update(model, {
|
|
993
941
|
entry,
|
|
@@ -1001,20 +949,32 @@ const createContentEntryCrud = params => {
|
|
|
1001
949
|
/**
|
|
1002
950
|
* Then we move onto publishing it again.
|
|
1003
951
|
*/
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
952
|
try {
|
|
1007
|
-
|
|
953
|
+
await onEntryBeforeRepublish.publish({
|
|
954
|
+
entry,
|
|
955
|
+
model
|
|
956
|
+
});
|
|
957
|
+
const result = await storageOperations.entries.publish(model, {
|
|
1008
958
|
entry,
|
|
1009
959
|
storageEntry
|
|
1010
960
|
});
|
|
961
|
+
await onEntryAfterRepublish.publish({
|
|
962
|
+
entry,
|
|
963
|
+
model,
|
|
964
|
+
storageEntry
|
|
965
|
+
});
|
|
966
|
+
return result;
|
|
1011
967
|
} catch (ex) {
|
|
968
|
+
await onEntryRepublishError.publish({
|
|
969
|
+
entry,
|
|
970
|
+
model,
|
|
971
|
+
error: ex
|
|
972
|
+
});
|
|
1012
973
|
throw new _error.default("Could not publish existing entry while re-publishing.", "REPUBLISH_PUBLISH_ERROR", {
|
|
1013
974
|
entry
|
|
1014
975
|
});
|
|
1015
976
|
}
|
|
1016
977
|
},
|
|
1017
|
-
|
|
1018
978
|
async deleteEntryRevision(initialModel, revisionId) {
|
|
1019
979
|
const permission = await checkEntryPermissions({
|
|
1020
980
|
rwd: "d"
|
|
@@ -1038,11 +998,9 @@ const createContentEntryCrud = params => {
|
|
|
1038
998
|
entryId,
|
|
1039
999
|
version: version
|
|
1040
1000
|
});
|
|
1041
|
-
|
|
1042
1001
|
if (!storageEntryToDelete) {
|
|
1043
1002
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
1044
1003
|
}
|
|
1045
|
-
|
|
1046
1004
|
(0, _ownership.checkOwnership)(context, permission, storageEntryToDelete);
|
|
1047
1005
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
1048
1006
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
@@ -1050,7 +1008,6 @@ const createContentEntryCrud = params => {
|
|
|
1050
1008
|
* If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.
|
|
1051
1009
|
* At this point deleteRevision hooks are not fired.
|
|
1052
1010
|
*/
|
|
1053
|
-
|
|
1054
1011
|
if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {
|
|
1055
1012
|
return await deleteEntry({
|
|
1056
1013
|
model,
|
|
@@ -1060,16 +1017,12 @@ const createContentEntryCrud = params => {
|
|
|
1060
1017
|
/**
|
|
1061
1018
|
* If targeted record is latest entry revision, set the previous one as the new latest
|
|
1062
1019
|
*/
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
1020
|
let entryToSetAsLatest = null;
|
|
1066
1021
|
let storageEntryToSetAsLatest = null;
|
|
1067
|
-
|
|
1068
1022
|
if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {
|
|
1069
1023
|
entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, previousStorageEntry);
|
|
1070
1024
|
storageEntryToSetAsLatest = previousStorageEntry;
|
|
1071
1025
|
}
|
|
1072
|
-
|
|
1073
1026
|
try {
|
|
1074
1027
|
await onEntryRevisionBeforeDelete.publish({
|
|
1075
1028
|
entry: entryToDelete,
|
|
@@ -1100,7 +1053,6 @@ const createContentEntryCrud = params => {
|
|
|
1100
1053
|
});
|
|
1101
1054
|
}
|
|
1102
1055
|
},
|
|
1103
|
-
|
|
1104
1056
|
async deleteEntry(initialModel, entryId) {
|
|
1105
1057
|
const permission = await checkEntryPermissions({
|
|
1106
1058
|
rwd: "d"
|
|
@@ -1113,11 +1065,9 @@ const createContentEntryCrud = params => {
|
|
|
1113
1065
|
const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
1114
1066
|
id: entryId
|
|
1115
1067
|
});
|
|
1116
|
-
|
|
1117
1068
|
if (!storageEntry) {
|
|
1118
1069
|
throw new _handlerGraphql.NotFoundError(`Entry "${entryId}" was not found!`);
|
|
1119
1070
|
}
|
|
1120
|
-
|
|
1121
1071
|
(0, _ownership.checkOwnership)(context, permission, storageEntry);
|
|
1122
1072
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
1123
1073
|
return await deleteEntry({
|
|
@@ -1125,7 +1075,6 @@ const createContentEntryCrud = params => {
|
|
|
1125
1075
|
entry
|
|
1126
1076
|
});
|
|
1127
1077
|
},
|
|
1128
|
-
|
|
1129
1078
|
async publishEntry(initialModel, id) {
|
|
1130
1079
|
const permission = await checkEntryPermissions({
|
|
1131
1080
|
pw: "p"
|
|
@@ -1138,11 +1087,9 @@ const createContentEntryCrud = params => {
|
|
|
1138
1087
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1139
1088
|
id
|
|
1140
1089
|
});
|
|
1141
|
-
|
|
1142
1090
|
if (!originalStorageEntry) {
|
|
1143
1091
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
1144
1092
|
}
|
|
1145
|
-
|
|
1146
1093
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1147
1094
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1148
1095
|
const currentDate = new Date().toISOString();
|
|
@@ -1153,7 +1100,6 @@ const createContentEntryCrud = params => {
|
|
|
1153
1100
|
publishedOn: currentDate
|
|
1154
1101
|
});
|
|
1155
1102
|
let storageEntry = null;
|
|
1156
|
-
|
|
1157
1103
|
try {
|
|
1158
1104
|
await onEntryBeforePublish.publish({
|
|
1159
1105
|
entry,
|
|
@@ -1185,7 +1131,6 @@ const createContentEntryCrud = params => {
|
|
|
1185
1131
|
});
|
|
1186
1132
|
}
|
|
1187
1133
|
},
|
|
1188
|
-
|
|
1189
1134
|
async unpublishEntry(initialModel, id) {
|
|
1190
1135
|
const permission = await checkEntryPermissions({
|
|
1191
1136
|
pw: "u"
|
|
@@ -1200,24 +1145,20 @@ const createContentEntryCrud = params => {
|
|
|
1200
1145
|
const originalStorageEntry = await storageOperations.entries.getPublishedRevisionByEntryId(model, {
|
|
1201
1146
|
id: entryId
|
|
1202
1147
|
});
|
|
1203
|
-
|
|
1204
1148
|
if (!originalStorageEntry) {
|
|
1205
1149
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1206
1150
|
}
|
|
1207
|
-
|
|
1208
1151
|
if (originalStorageEntry.id !== id) {
|
|
1209
1152
|
throw new _error.default(`Entry is not published.`, "UNPUBLISH_ERROR", {
|
|
1210
1153
|
entry: originalStorageEntry
|
|
1211
1154
|
});
|
|
1212
1155
|
}
|
|
1213
|
-
|
|
1214
1156
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1215
1157
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1216
1158
|
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
1217
1159
|
status: STATUS_UNPUBLISHED
|
|
1218
1160
|
});
|
|
1219
1161
|
let storageEntry = null;
|
|
1220
|
-
|
|
1221
1162
|
try {
|
|
1222
1163
|
await onEntryBeforeUnpublish.publish({
|
|
1223
1164
|
entry,
|
|
@@ -1248,8 +1189,6 @@ const createContentEntryCrud = params => {
|
|
|
1248
1189
|
});
|
|
1249
1190
|
}
|
|
1250
1191
|
}
|
|
1251
|
-
|
|
1252
1192
|
};
|
|
1253
1193
|
};
|
|
1254
|
-
|
|
1255
1194
|
exports.createContentEntryCrud = createContentEntryCrud;
|