@webiny/api-headless-cms 0.0.0-unstable.5e7233243f → 0.0.0-unstable.6e5425ee89

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