@webiny/api-headless-cms 0.0.0-unstable.611c5af35e → 0.0.0-unstable.615a930a68

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 (277) hide show
  1. package/context.js +15 -0
  2. package/context.js.map +1 -1
  3. package/crud/contentEntry/afterDelete.js +5 -0
  4. package/crud/contentEntry/afterDelete.js.map +1 -1
  5. package/crud/contentEntry/beforeCreate.js +3 -0
  6. package/crud/contentEntry/beforeCreate.js.map +1 -1
  7. package/crud/contentEntry/beforeUpdate.js +3 -0
  8. package/crud/contentEntry/beforeUpdate.js.map +1 -1
  9. package/crud/contentEntry/entryDataValidation.js +40 -1
  10. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  11. package/crud/contentEntry/markLockedFields.js +25 -2
  12. package/crud/contentEntry/markLockedFields.js.map +1 -1
  13. package/crud/contentEntry/referenceFieldsMapping.js +59 -5
  14. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  15. package/crud/contentEntry/searchableFields.d.ts +9 -0
  16. package/crud/contentEntry/searchableFields.js +83 -0
  17. package/crud/contentEntry/searchableFields.js.map +1 -0
  18. package/crud/contentEntry.crud.js +146 -55
  19. package/crud/contentEntry.crud.js.map +1 -1
  20. package/crud/contentModel/afterCreate.js +2 -0
  21. package/crud/contentModel/afterCreate.js.map +1 -1
  22. package/crud/contentModel/afterCreateFrom.js +2 -0
  23. package/crud/contentModel/afterCreateFrom.js.map +1 -1
  24. package/crud/contentModel/afterDelete.js +2 -0
  25. package/crud/contentModel/afterDelete.js.map +1 -1
  26. package/crud/contentModel/afterUpdate.js +2 -0
  27. package/crud/contentModel/afterUpdate.js.map +1 -1
  28. package/crud/contentModel/beforeCreate.js +32 -4
  29. package/crud/contentModel/beforeCreate.js.map +1 -1
  30. package/crud/contentModel/beforeDelete.js +10 -0
  31. package/crud/contentModel/beforeDelete.js.map +1 -1
  32. package/crud/contentModel/beforeUpdate.js +5 -0
  33. package/crud/contentModel/beforeUpdate.js.map +1 -1
  34. package/crud/contentModel/contentModelManagerFactory.js +7 -0
  35. package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
  36. package/crud/contentModel/createFieldModels.js +6 -0
  37. package/crud/contentModel/createFieldModels.js.map +1 -1
  38. package/crud/contentModel/createFieldStorageId.js +2 -0
  39. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  40. package/crud/contentModel/fieldIdValidation.js +5 -0
  41. package/crud/contentModel/fieldIdValidation.js.map +1 -1
  42. package/crud/contentModel/idValidation.js +5 -0
  43. package/crud/contentModel/idValidation.js.map +1 -1
  44. package/crud/contentModel/models.js +8 -1
  45. package/crud/contentModel/models.js.map +1 -1
  46. package/crud/contentModel/systemFields.js.map +1 -1
  47. package/crud/contentModel/validateLayout.js +8 -0
  48. package/crud/contentModel/validateLayout.js.map +1 -1
  49. package/crud/contentModel/validateModel.js +8 -0
  50. package/crud/contentModel/validateModel.js.map +1 -1
  51. package/crud/contentModel/validateModelFields.js +60 -8
  52. package/crud/contentModel/validateModelFields.js.map +1 -1
  53. package/crud/contentModel.crud.js +96 -11
  54. package/crud/contentModel.crud.js.map +1 -1
  55. package/crud/contentModelGroup/beforeCreate.js +12 -0
  56. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  57. package/crud/contentModelGroup/beforeDelete.js +8 -0
  58. package/crud/contentModelGroup/beforeDelete.js.map +1 -1
  59. package/crud/contentModelGroup/beforeUpdate.js +5 -0
  60. package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  61. package/crud/contentModelGroup.crud.js +47 -10
  62. package/crud/contentModelGroup.crud.js.map +1 -1
  63. package/crud/index.js +16 -0
  64. package/crud/index.js.map +1 -1
  65. package/crud/settings.crud.js +12 -0
  66. package/crud/settings.crud.js.map +1 -1
  67. package/crud/system.crud.js +37 -2
  68. package/crud/system.crud.js.map +1 -1
  69. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +13 -0
  70. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
  71. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +53 -0
  72. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  73. package/fieldConverters/index.js +4 -0
  74. package/fieldConverters/index.js.map +1 -1
  75. package/graphql/buildSchemaPlugins.js +9 -5
  76. package/graphql/buildSchemaPlugins.js.map +1 -1
  77. package/graphql/graphQLHandlerFactory.js +28 -3
  78. package/graphql/graphQLHandlerFactory.js.map +1 -1
  79. package/graphql/index.js +8 -1
  80. package/graphql/index.js.map +1 -1
  81. package/graphql/schema/baseContentSchema.js +9 -1
  82. package/graphql/schema/baseContentSchema.js.map +1 -1
  83. package/graphql/schema/contentEntries.js +42 -2
  84. package/graphql/schema/contentEntries.js.map +1 -1
  85. package/graphql/schema/contentModelGroups.js +19 -2
  86. package/graphql/schema/contentModelGroups.js.map +1 -1
  87. package/graphql/schema/contentModels.js +18 -2
  88. package/graphql/schema/contentModels.js.map +1 -1
  89. package/graphql/schema/createFieldResolvers.js +21 -3
  90. package/graphql/schema/createFieldResolvers.js.map +1 -1
  91. package/graphql/schema/createManageResolvers.js +26 -0
  92. package/graphql/schema/createManageResolvers.js.map +1 -1
  93. package/graphql/schema/createManageSDL.js +17 -2
  94. package/graphql/schema/createManageSDL.js.map +1 -1
  95. package/graphql/schema/createPreviewResolvers.js +10 -0
  96. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  97. package/graphql/schema/createReadResolvers.js +10 -0
  98. package/graphql/schema/createReadResolvers.js.map +1 -1
  99. package/graphql/schema/createReadSDL.js +13 -1
  100. package/graphql/schema/createReadSDL.js.map +1 -1
  101. package/graphql/schema/resolvers/commonFieldResolvers.js +2 -0
  102. package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
  103. package/graphql/schema/resolvers/manage/resolveCreate.js +3 -0
  104. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  105. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +3 -0
  106. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  107. package/graphql/schema/resolvers/manage/resolveDelete.js +6 -0
  108. package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
  109. package/graphql/schema/resolvers/manage/resolveGet.js +16 -0
  110. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  111. package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -0
  112. package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  113. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -0
  114. package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  115. package/graphql/schema/resolvers/manage/resolveList.js +3 -0
  116. package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
  117. package/graphql/schema/resolvers/manage/resolvePublish.js +3 -0
  118. package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
  119. package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -0
  120. package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  121. package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -0
  122. package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  123. package/graphql/schema/resolvers/manage/resolveUpdate.js +3 -0
  124. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  125. package/graphql/schema/resolvers/preview/resolveGet.js +8 -0
  126. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  127. package/graphql/schema/resolvers/preview/resolveList.js +3 -0
  128. package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
  129. package/graphql/schema/resolvers/read/resolveGet.js +8 -0
  130. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  131. package/graphql/schema/resolvers/read/resolveList.js +3 -0
  132. package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
  133. package/graphql/schema/schemaPlugins.js +19 -5
  134. package/graphql/schema/schemaPlugins.js.map +1 -1
  135. package/graphql/system.js +14 -1
  136. package/graphql/system.js.map +1 -1
  137. package/graphqlFields/boolean.js +12 -0
  138. package/graphqlFields/boolean.js.map +1 -1
  139. package/graphqlFields/datetime.js +17 -0
  140. package/graphqlFields/datetime.js.map +1 -1
  141. package/graphqlFields/file.js +8 -0
  142. package/graphqlFields/file.js.map +1 -1
  143. package/graphqlFields/helpers.js +10 -0
  144. package/graphqlFields/helpers.js.map +1 -1
  145. package/graphqlFields/index.js +11 -0
  146. package/graphqlFields/index.js.map +1 -1
  147. package/graphqlFields/longText.js +10 -0
  148. package/graphqlFields/longText.js.map +1 -1
  149. package/graphqlFields/number.js +16 -0
  150. package/graphqlFields/number.js.map +1 -1
  151. package/graphqlFields/object.js +137 -21
  152. package/graphqlFields/object.js.map +1 -1
  153. package/graphqlFields/ref.js +51 -17
  154. package/graphqlFields/ref.js.map +1 -1
  155. package/graphqlFields/richText.js +9 -0
  156. package/graphqlFields/richText.js.map +1 -1
  157. package/graphqlFields/text.js +11 -0
  158. package/graphqlFields/text.js.map +1 -1
  159. package/index.js +19 -0
  160. package/index.js.map +1 -1
  161. package/modelManager/DefaultCmsModelManager.js +16 -0
  162. package/modelManager/DefaultCmsModelManager.js.map +1 -1
  163. package/modelManager/index.js +4 -0
  164. package/modelManager/index.js.map +1 -1
  165. package/package.json +24 -24
  166. package/parameters/context.js +4 -0
  167. package/parameters/context.js.map +1 -1
  168. package/parameters/header.js +11 -0
  169. package/parameters/header.js.map +1 -1
  170. package/parameters/index.js +8 -0
  171. package/parameters/index.js.map +1 -1
  172. package/parameters/manual.js +8 -1
  173. package/parameters/manual.js.map +1 -1
  174. package/parameters/path.js +11 -0
  175. package/parameters/path.js.map +1 -1
  176. package/plugins/CmsGroupPlugin.js +8 -0
  177. package/plugins/CmsGroupPlugin.js.map +1 -1
  178. package/plugins/CmsModelFieldConverterPlugin.js +5 -0
  179. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  180. package/plugins/CmsModelPlugin.js +38 -2
  181. package/plugins/CmsModelPlugin.js.map +1 -1
  182. package/plugins/CmsParametersPlugin.js +7 -0
  183. package/plugins/CmsParametersPlugin.js.map +1 -1
  184. package/plugins/StorageTransformPlugin.d.ts +1 -1
  185. package/plugins/StorageTransformPlugin.js +9 -0
  186. package/plugins/StorageTransformPlugin.js.map +1 -1
  187. package/plugins/index.js +10 -0
  188. package/plugins/index.js.map +1 -1
  189. package/storage/default.js +3 -0
  190. package/storage/default.js.map +1 -1
  191. package/storage/object.js +18 -0
  192. package/storage/object.js.map +1 -1
  193. package/types.d.ts +9 -1
  194. package/types.js +62 -0
  195. package/types.js.map +1 -1
  196. package/upgrades/5.33.0/index.js +26 -3
  197. package/upgrades/5.33.0/index.js.map +1 -1
  198. package/upgrades/index.js +3 -0
  199. package/upgrades/index.js.map +1 -1
  200. package/utils/access.js +25 -11
  201. package/utils/access.js.map +1 -1
  202. package/utils/converters/Converter.js +13 -0
  203. package/utils/converters/Converter.js.map +1 -1
  204. package/utils/converters/ConverterCollection.js +32 -9
  205. package/utils/converters/ConverterCollection.js.map +1 -1
  206. package/utils/converters/valueKeyStorageConverter.js +26 -0
  207. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  208. package/utils/createTypeName.js +8 -0
  209. package/utils/createTypeName.js.map +1 -1
  210. package/utils/entryStorage.js +26 -10
  211. package/utils/entryStorage.js.map +1 -1
  212. package/utils/filterAsync.js +5 -0
  213. package/utils/filterAsync.js.map +1 -1
  214. package/utils/filterModelFields.js +9 -3
  215. package/utils/filterModelFields.js.map +1 -1
  216. package/utils/getEntryTitle.js +9 -0
  217. package/utils/getEntryTitle.js.map +1 -1
  218. package/utils/getSchemaFromFieldPlugins.js +6 -2
  219. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  220. package/utils/ownership.js +8 -0
  221. package/utils/ownership.js.map +1 -1
  222. package/utils/permissions.js +23 -8
  223. package/utils/permissions.js.map +1 -1
  224. package/utils/pluralizedTypeName.js +6 -0
  225. package/utils/pluralizedTypeName.js.map +1 -1
  226. package/utils/renderFields.js +8 -0
  227. package/utils/renderFields.js.map +1 -1
  228. package/utils/renderGetFilterFields.js +11 -0
  229. package/utils/renderGetFilterFields.js.map +1 -1
  230. package/utils/renderInputFields.js +8 -0
  231. package/utils/renderInputFields.js.map +1 -1
  232. package/utils/renderListFilterFields.js +11 -2
  233. package/utils/renderListFilterFields.js.map +1 -1
  234. package/utils/renderSortEnum.js +7 -0
  235. package/utils/renderSortEnum.js.map +1 -1
  236. package/utils/toSlug.js +4 -0
  237. package/utils/toSlug.js.map +1 -1
  238. package/validators/dateGte.js +7 -0
  239. package/validators/dateGte.js.map +1 -1
  240. package/validators/dateLte.js +7 -0
  241. package/validators/dateLte.js.map +1 -1
  242. package/validators/gte.js +8 -0
  243. package/validators/gte.js.map +1 -1
  244. package/validators/in.js +8 -0
  245. package/validators/in.js.map +1 -1
  246. package/validators/index.js +15 -0
  247. package/validators/index.js.map +1 -1
  248. package/validators/lte.js +8 -0
  249. package/validators/lte.js.map +1 -1
  250. package/validators/maxLength.js +8 -0
  251. package/validators/maxLength.js.map +1 -1
  252. package/validators/minLength.js +8 -0
  253. package/validators/minLength.js.map +1 -1
  254. package/validators/pattern.js +9 -0
  255. package/validators/pattern.js.map +1 -1
  256. package/validators/patternPlugins/email.js +2 -0
  257. package/validators/patternPlugins/email.js.map +1 -1
  258. package/validators/patternPlugins/index.js +8 -0
  259. package/validators/patternPlugins/index.js.map +1 -1
  260. package/validators/patternPlugins/lowerCase.js +2 -0
  261. package/validators/patternPlugins/lowerCase.js.map +1 -1
  262. package/validators/patternPlugins/lowerCaseSpace.js +2 -0
  263. package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
  264. package/validators/patternPlugins/upperCase.js +2 -0
  265. package/validators/patternPlugins/upperCase.js.map +1 -1
  266. package/validators/patternPlugins/upperCaseSpace.js +2 -0
  267. package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
  268. package/validators/patternPlugins/url.js +2 -0
  269. package/validators/patternPlugins/url.js.map +1 -1
  270. package/validators/required.js +5 -0
  271. package/validators/required.js.map +1 -1
  272. package/validators/timeGte.js +8 -0
  273. package/validators/timeGte.js.map +1 -1
  274. package/validators/timeLte.js +8 -0
  275. package/validators/timeLte.js.map +1 -1
  276. package/validators/unique.js +7 -0
  277. package/validators/unique.js.map +1 -1
@@ -1,38 +1,59 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.createContentEntryCrud = exports.STATUS_UNPUBLISHED = exports.STATUS_PUBLISHED = exports.STATUS_DRAFT = void 0;
9
+
8
10
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
9
12
  var _mdbid = _interopRequireDefault(require("mdbid"));
13
+
10
14
  var _handlerGraphql = require("@webiny/handler-graphql");
15
+
11
16
  var _entryDataValidation = require("./contentEntry/entryDataValidation");
17
+
12
18
  var _error = _interopRequireDefault(require("@webiny/error"));
19
+
13
20
  var _pubsub = require("@webiny/pubsub");
21
+
14
22
  var _beforeCreate = require("./contentEntry/beforeCreate");
23
+
15
24
  var _beforeUpdate = require("./contentEntry/beforeUpdate");
25
+
16
26
  var _utils = require("@webiny/utils");
27
+
17
28
  var _afterDelete = require("./contentEntry/afterDelete");
29
+
18
30
  var _referenceFieldsMapping = require("./contentEntry/referenceFieldsMapping");
31
+
19
32
  var _merge = _interopRequireDefault(require("lodash/merge"));
33
+
20
34
  var _permissions = require("../utils/permissions");
35
+
21
36
  var _access = require("../utils/access");
37
+
22
38
  var _ownership = require("../utils/ownership");
39
+
23
40
  var _entryStorage = require("../utils/entryStorage");
41
+
24
42
  var _valueKeyStorageConverter = require("../utils/converters/valueKeyStorageConverter");
43
+
44
+ var _searchableFields = require("./contentEntry/searchableFields");
45
+
25
46
  /**
26
47
  * Package mdbid does not have types.
27
48
  */
28
49
  // @ts-ignore
29
-
30
50
  const STATUS_DRAFT = "draft";
31
51
  exports.STATUS_DRAFT = STATUS_DRAFT;
32
52
  const STATUS_PUBLISHED = "published";
33
53
  exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
34
54
  const STATUS_UNPUBLISHED = "unpublished";
35
55
  exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
56
+
36
57
  /**
37
58
  * Used for some fields to convert their values.
38
59
  */
@@ -40,35 +61,45 @@ const convertDefaultValue = (field, value) => {
40
61
  switch (field.type) {
41
62
  case "boolean":
42
63
  return Boolean(value);
64
+
43
65
  case "number":
44
66
  return Number(value);
67
+
45
68
  default:
46
69
  return value;
47
70
  }
48
71
  };
72
+
49
73
  const getDefaultValue = field => {
50
74
  const {
51
75
  settings,
52
76
  multipleValues
53
77
  } = field;
78
+
54
79
  if (settings && settings.defaultValue !== undefined) {
55
80
  return convertDefaultValue(field, settings.defaultValue);
56
81
  }
82
+
57
83
  const {
58
84
  predefinedValues
59
85
  } = field;
86
+
60
87
  if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
61
88
  return undefined;
62
89
  }
90
+
63
91
  if (!multipleValues) {
64
92
  const selectedValue = predefinedValues.values.find(value => {
65
93
  return !!value.selected;
66
94
  });
95
+
67
96
  if (selectedValue) {
68
97
  return convertDefaultValue(field, selectedValue.value);
69
98
  }
99
+
70
100
  return undefined;
71
101
  }
102
+
72
103
  return predefinedValues.values.filter(({
73
104
  selected
74
105
  }) => !!selected).map(({
@@ -80,6 +111,8 @@ const getDefaultValue = field => {
80
111
  /**
81
112
  * Cleans and adds default values to create input data.
82
113
  */
114
+
115
+
83
116
  const mapAndCleanCreateInputData = (model, input) => {
84
117
  return model.fields.reduce((acc, field) => {
85
118
  /**
@@ -91,10 +124,12 @@ const mapAndCleanCreateInputData = (model, input) => {
91
124
  field
92
125
  });
93
126
  }
127
+
94
128
  const value = input[field.fieldId];
95
129
  /**
96
130
  * We set the default value on create input if value is not defined.
97
131
  */
132
+
98
133
  acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
99
134
  return acc;
100
135
  }, {});
@@ -102,6 +137,8 @@ const mapAndCleanCreateInputData = (model, input) => {
102
137
  /**
103
138
  * Cleans the update input entry data.
104
139
  */
140
+
141
+
105
142
  const mapAndCleanUpdatedInputData = (model, input) => {
106
143
  return model.fields.reduce((acc, field) => {
107
144
  /**
@@ -116,10 +153,14 @@ const mapAndCleanUpdatedInputData = (model, input) => {
116
153
  /**
117
154
  * We cannot set default value here because user might want to update only certain field values.
118
155
  */
156
+
157
+
119
158
  const value = input[field.fieldId];
159
+
120
160
  if (value === undefined) {
121
161
  return acc;
122
162
  }
163
+
123
164
  acc[field.fieldId] = value;
124
165
  return acc;
125
166
  }, {});
@@ -128,16 +169,22 @@ const mapAndCleanUpdatedInputData = (model, input) => {
128
169
  * This method takes original entry meta and new input.
129
170
  * When new meta is merged onto the existing one, everything that has undefined or null value is removed.
130
171
  */
172
+
173
+
131
174
  const createEntryMeta = (input, original) => {
132
175
  const meta = (0, _merge.default)(original || {}, input || {});
176
+
133
177
  for (const key in meta) {
134
178
  if (meta[key] !== undefined || meta[key] !== null) {
135
179
  continue;
136
180
  }
181
+
137
182
  delete meta[key];
138
183
  }
184
+
139
185
  return meta;
140
186
  };
187
+
141
188
  const createEntryId = version => {
142
189
  const entryId = (0, _mdbid.default)();
143
190
  return {
@@ -149,16 +196,19 @@ const createEntryId = version => {
149
196
  })
150
197
  };
151
198
  };
199
+
152
200
  const increaseEntryIdVersion = id => {
153
201
  const {
154
202
  id: entryId,
155
203
  version
156
204
  } = (0, _utils.parseIdentifier)(id);
205
+
157
206
  if (!version) {
158
207
  throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
159
208
  id
160
209
  });
161
210
  }
211
+
162
212
  return {
163
213
  entryId,
164
214
  version: version + 1,
@@ -168,35 +218,13 @@ const increaseEntryIdVersion = id => {
168
218
  })
169
219
  };
170
220
  };
171
- const getSearchableFields = params => {
172
- const {
173
- plugins,
174
- model,
175
- fields
176
- } = params;
177
- const fieldPluginMap = plugins.byType("cms-model-field-to-graphql").reduce((collection, field) => {
178
- collection[field.fieldType] = field;
179
- return collection;
180
- }, {});
181
- return model.fields.filter(field => {
182
- if (!field.fieldId) {
183
- return false;
184
- }
185
- const plugin = fieldPluginMap[field.type];
186
- if (!plugin) {
187
- return false;
188
- } else if (!plugin.fullTextSearch) {
189
- return false;
190
- } else if (!fields || fields.length === 0) {
191
- return true;
192
- }
193
- return fields.includes(field.fieldId);
194
- }).map(field => field.fieldId);
195
- };
221
+
196
222
  const allowedEntryStatus = ["draft", "published", "unpublished"];
223
+
197
224
  const transformEntryStatus = status => {
198
225
  return allowedEntryStatus.includes(status) ? status : "draft";
199
226
  };
227
+
200
228
  const createContentEntryCrud = params => {
201
229
  const {
202
230
  storageOperations,
@@ -206,52 +234,43 @@ const createContentEntryCrud = params => {
206
234
  } = params;
207
235
  const {
208
236
  plugins
209
- } = context;
237
+ } = context; // create
210
238
 
211
- // create
212
239
  const onEntryBeforeCreate = (0, _pubsub.createTopic)("cms.onEntryBeforeCreate");
213
240
  const onEntryAfterCreate = (0, _pubsub.createTopic)("cms.onEntryAfterCreate");
214
- const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
241
+ const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError"); // create revision
215
242
 
216
- // create revision
217
243
  const onEntryBeforeCreateRevision = (0, _pubsub.createTopic)("cms.onEntryBeforeCreateRevision");
218
244
  const onEntryRevisionAfterCreate = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterCreate");
219
- const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
245
+ const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError"); // update
220
246
 
221
- // update
222
247
  const onEntryBeforeUpdate = (0, _pubsub.createTopic)("cms.onEntryBeforeUpdate");
223
248
  const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
224
- const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
249
+ const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError"); // publish
225
250
 
226
- // publish
227
251
  const onEntryBeforePublish = (0, _pubsub.createTopic)("cms.onEntryBeforePublish");
228
252
  const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublic");
229
- const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
253
+ const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError"); // unpublish
230
254
 
231
- // unpublish
232
255
  const onEntryBeforeUnpublish = (0, _pubsub.createTopic)("cms.onEntryBeforeUnpublish");
233
256
  const onEntryAfterUnpublish = (0, _pubsub.createTopic)("cms.onEntryAfterUnpublish");
234
- const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
257
+ const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError"); // delete
235
258
 
236
- // delete
237
259
  const onEntryBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryBeforeDelete");
238
260
  const onEntryAfterDelete = (0, _pubsub.createTopic)("cms.onEntryAfterDelete");
239
- const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
261
+ const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError"); // delete revision
240
262
 
241
- // delete revision
242
263
  const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
243
264
  const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
244
- const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
265
+ const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError"); // get
245
266
 
246
- // get
247
- const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet");
267
+ const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet"); // list
248
268
 
249
- // list
250
269
  const onEntryBeforeList = (0, _pubsub.createTopic)("cms.onEntryBeforeList");
251
-
252
270
  /**
253
271
  * We need to assign some default behaviors.
254
272
  */
273
+
255
274
  (0, _beforeCreate.assignBeforeEntryCreate)({
256
275
  context,
257
276
  onEntryBeforeCreate
@@ -264,18 +283,21 @@ const createContentEntryCrud = params => {
264
283
  context,
265
284
  onEntryAfterDelete
266
285
  });
286
+
267
287
  const checkEntryPermissions = check => {
268
288
  return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
269
289
  };
270
-
271
290
  /**
272
291
  * A helper to delete the entire entry.
273
292
  */
293
+
294
+
274
295
  const deleteEntry = async params => {
275
296
  const {
276
297
  model,
277
298
  entry
278
299
  } = params;
300
+
279
301
  try {
280
302
  await onEntryBeforeDelete.publish({
281
303
  entry,
@@ -302,6 +324,8 @@ const createContentEntryCrud = params => {
302
324
  /**
303
325
  * A helper to get entries by revision IDs
304
326
  */
327
+
328
+
305
329
  const getEntriesByIds = async (initialModel, ids) => {
306
330
  const permission = await checkEntryPermissions({
307
331
  rwd: "r"
@@ -316,6 +340,7 @@ const createContentEntryCrud = params => {
316
340
  });
317
341
  return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
318
342
  };
343
+
319
344
  return {
320
345
  /**
321
346
  * Deprecated - will be removed in 5.35.0
@@ -336,6 +361,7 @@ const createContentEntryCrud = params => {
336
361
  onAfterEntryUnpublish: onEntryAfterUnpublish,
337
362
  onBeforeEntryGet: onEntryBeforeGet,
338
363
  onBeforeEntryList: onEntryBeforeList,
364
+
339
365
  /**
340
366
  * Released in 5.34.0
341
367
  */
@@ -362,10 +388,12 @@ const createContentEntryCrud = params => {
362
388
  onEntryUnpublishError,
363
389
  onEntryBeforeGet,
364
390
  onEntryBeforeList,
391
+
365
392
  /**
366
393
  * Get entries by exact revision IDs from the database.
367
394
  */
368
395
  getEntriesByIds: getEntriesByIds,
396
+
369
397
  /**
370
398
  * Get a single entry by revision ID from the database.
371
399
  */
@@ -382,11 +410,14 @@ const createContentEntryCrud = params => {
382
410
  model
383
411
  });
384
412
  const [entry] = await getEntriesByIds(model, [id]);
413
+
385
414
  if (!entry) {
386
415
  throw new _handlerGraphql.NotFoundError(`Entry by ID "${id}" not found.`);
387
416
  }
417
+
388
418
  return entry;
389
419
  },
420
+
390
421
  /**
391
422
  * Get published revisions by entry IDs.
392
423
  */
@@ -404,6 +435,7 @@ const createContentEntryCrud = params => {
404
435
  });
405
436
  return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
406
437
  },
438
+
407
439
  /**
408
440
  * Get latest revisions by entry IDs.
409
441
  */
@@ -421,6 +453,7 @@ const createContentEntryCrud = params => {
421
453
  });
422
454
  return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
423
455
  },
456
+
424
457
  async getEntryRevisions(initialModel, entryId) {
425
458
  const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
426
459
  model: initialModel,
@@ -430,6 +463,7 @@ const createContentEntryCrud = params => {
430
463
  id: entryId
431
464
  });
432
465
  },
466
+
433
467
  /**
434
468
  * TODO determine if this method is required at all.
435
469
  *
@@ -456,11 +490,14 @@ const createContentEntryCrud = params => {
456
490
  sort,
457
491
  limit: 1
458
492
  });
493
+
459
494
  if (items.length === 0) {
460
495
  throw new _handlerGraphql.NotFoundError(`Entry not found!`);
461
496
  }
497
+
462
498
  return items[0];
463
499
  },
500
+
464
501
  /**
465
502
  * @description Should not be used directly. Internal use only!
466
503
  *
@@ -481,12 +518,15 @@ const createContentEntryCrud = params => {
481
518
  /**
482
519
  * We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
483
520
  */
521
+
484
522
  const where = (0, _objectSpread2.default)({}, initialWhere);
485
523
  /**
486
524
  * Possibly only get records which are owned by current user.
487
525
  * Or if searching for the owner set that value - in the case that user can see other entries than their own.
488
526
  */
527
+
489
528
  const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
529
+
490
530
  if (ownedBy !== undefined) {
491
531
  where.ownedBy = ownedBy;
492
532
  }
@@ -494,6 +534,8 @@ const createContentEntryCrud = params => {
494
534
  * Where must contain either latest or published keys.
495
535
  * We cannot list entries without one of those
496
536
  */
537
+
538
+
497
539
  if (where.latest && where.published) {
498
540
  throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
499
541
  where
@@ -503,11 +545,13 @@ const createContentEntryCrud = params => {
503
545
  where
504
546
  });
505
547
  }
506
- const fields = getSearchableFields({
507
- model,
548
+
549
+ const fields = (0, _searchableFields.getSearchableFields)({
550
+ fields: model.fields,
508
551
  plugins: context.plugins,
509
- fields: params.fields || []
552
+ input: params.fields || []
510
553
  });
554
+
511
555
  try {
512
556
  await onEntryBeforeList.publish({
513
557
  where,
@@ -525,6 +569,7 @@ const createContentEntryCrud = params => {
525
569
  const meta = {
526
570
  hasMoreItems,
527
571
  totalCount,
572
+
528
573
  /**
529
574
  * Cursor should be null if there are no more items to load.
530
575
  * Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
@@ -545,6 +590,7 @@ const createContentEntryCrud = params => {
545
590
  });
546
591
  }
547
592
  },
593
+
548
594
  async listLatestEntries(model, params) {
549
595
  const where = (params === null || params === void 0 ? void 0 : params.where) || {};
550
596
  return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
@@ -555,6 +601,7 @@ const createContentEntryCrud = params => {
555
601
  })
556
602
  }));
557
603
  },
604
+
558
605
  async listPublishedEntries(model, params) {
559
606
  const where = (params === null || params === void 0 ? void 0 : params.where) || {};
560
607
  return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
@@ -565,6 +612,7 @@ const createContentEntryCrud = params => {
565
612
  })
566
613
  }));
567
614
  },
615
+
568
616
  async createEntry(initialModel, inputData) {
569
617
  await checkEntryPermissions({
570
618
  rwd: "w"
@@ -574,10 +622,10 @@ const createContentEntryCrud = params => {
574
622
  model: initialModel,
575
623
  plugins
576
624
  });
577
-
578
625
  /**
579
626
  * Make sure we only work with fields that are defined in the model.
580
627
  */
628
+
581
629
  const initialInput = mapAndCleanCreateInputData(model, inputData);
582
630
  await (0, _entryDataValidation.validateModelEntryData)({
583
631
  context,
@@ -619,6 +667,7 @@ const createContentEntryCrud = params => {
619
667
  values: input
620
668
  };
621
669
  let storageEntry = null;
670
+
622
671
  try {
623
672
  await onEntryBeforeCreate.publish({
624
673
  entry,
@@ -652,6 +701,7 @@ const createContentEntryCrud = params => {
652
701
  });
653
702
  }
654
703
  },
704
+
655
705
  async createEntryRevisionFrom(initialModel, sourceId, inputData) {
656
706
  const permission = await checkEntryPermissions({
657
707
  rwd: "w"
@@ -661,15 +711,15 @@ const createContentEntryCrud = params => {
661
711
  model: initialModel,
662
712
  plugins
663
713
  });
664
-
665
714
  /**
666
715
  * Make sure we only work with fields that are defined in the model.
667
716
  */
668
- const input = mapAndCleanUpdatedInputData(model, inputData);
669
717
 
718
+ const input = mapAndCleanUpdatedInputData(model, inputData);
670
719
  /**
671
720
  * Entries are identified by a common parent ID + Revision number.
672
721
  */
722
+
673
723
  const {
674
724
  id: uniqueId
675
725
  } = (0, _utils.parseIdentifier)(sourceId);
@@ -679,13 +729,15 @@ const createContentEntryCrud = params => {
679
729
  const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
680
730
  id: uniqueId
681
731
  });
732
+
682
733
  if (!originalStorageEntry) {
683
734
  throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
684
735
  }
685
-
686
736
  /**
687
737
  * We need to convert data from DB to its original form before using it further.
688
738
  */
739
+
740
+
689
741
  const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
690
742
  const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
691
743
  await (0, _entryDataValidation.validateModelEntryData)({
@@ -723,6 +775,7 @@ const createContentEntryCrud = params => {
723
775
  values
724
776
  });
725
777
  let storageEntry = null;
778
+
726
779
  try {
727
780
  await onEntryBeforeCreateRevision.publish({
728
781
  input,
@@ -759,6 +812,7 @@ const createContentEntryCrud = params => {
759
812
  });
760
813
  }
761
814
  },
815
+
762
816
  async updateEntry(initialModel, id, inputData, metaInput) {
763
817
  const permission = await checkEntryPermissions({
764
818
  rwd: "w"
@@ -768,24 +822,27 @@ const createContentEntryCrud = params => {
768
822
  model: initialModel,
769
823
  plugins
770
824
  });
771
-
772
825
  /**
773
826
  * Make sure we only work with fields that are defined in the model.
774
827
  */
775
- const input = mapAndCleanUpdatedInputData(model, inputData);
776
828
 
829
+ const input = mapAndCleanUpdatedInputData(model, inputData);
777
830
  /**
778
831
  * The entry we are going to update.
779
832
  */
833
+
780
834
  const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
781
835
  id
782
836
  });
837
+
783
838
  if (!originalStorageEntry) {
784
839
  throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
785
840
  }
841
+
786
842
  if (originalStorageEntry.locked) {
787
843
  throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
788
844
  }
845
+
789
846
  const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
790
847
  await (0, _entryDataValidation.validateModelEntryData)({
791
848
  context,
@@ -804,10 +861,12 @@ const createContentEntryCrud = params => {
804
861
  /**
805
862
  * If users wants to remove a key from meta values, they need to send meta key with the null value.
806
863
  */
864
+
807
865
  const meta = createEntryMeta(metaInput, originalEntry.meta);
808
866
  /**
809
867
  * We always send the full entry to the hooks and storage operations update.
810
868
  */
869
+
811
870
  const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
812
871
  savedOn: new Date().toISOString(),
813
872
  values,
@@ -815,6 +874,7 @@ const createContentEntryCrud = params => {
815
874
  status: transformEntryStatus(originalEntry.status)
816
875
  });
817
876
  let storageEntry = null;
877
+
818
878
  try {
819
879
  await onEntryBeforeUpdate.publish({
820
880
  entry,
@@ -851,6 +911,7 @@ const createContentEntryCrud = params => {
851
911
  });
852
912
  }
853
913
  },
914
+
854
915
  async republishEntry(initialModel, id) {
855
916
  await checkEntryPermissions({
856
917
  rwd: "w"
@@ -863,22 +924,27 @@ const createContentEntryCrud = params => {
863
924
  /**
864
925
  * Fetch the entry from the storage.
865
926
  */
927
+
866
928
  const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
867
929
  id
868
930
  });
931
+
869
932
  if (!originalStorageEntry) {
870
933
  throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
871
934
  }
935
+
872
936
  const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
873
937
  /**
874
938
  * We can only process published entries.
875
939
  */
940
+
876
941
  if (originalEntry.status !== "published") {
877
942
  throw new _error.default("Entry with given ID is not published!", "NOT_PUBLISHED_ERROR", {
878
943
  id,
879
944
  original: originalEntry
880
945
  });
881
946
  }
947
+
882
948
  const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
883
949
  context,
884
950
  model,
@@ -894,6 +960,7 @@ const createContentEntryCrud = params => {
894
960
  /**
895
961
  * First we need to update existing entry.
896
962
  */
963
+
897
964
  try {
898
965
  await storageOperations.entries.update(model, {
899
966
  entry,
@@ -907,6 +974,8 @@ const createContentEntryCrud = params => {
907
974
  /**
908
975
  * Then we move onto publishing it again.
909
976
  */
977
+
978
+
910
979
  try {
911
980
  return await storageOperations.entries.publish(model, {
912
981
  entry,
@@ -918,6 +987,7 @@ const createContentEntryCrud = params => {
918
987
  });
919
988
  }
920
989
  },
990
+
921
991
  async deleteEntryRevision(initialModel, revisionId) {
922
992
  const permission = await checkEntryPermissions({
923
993
  rwd: "d"
@@ -941,9 +1011,11 @@ const createContentEntryCrud = params => {
941
1011
  entryId,
942
1012
  version: version
943
1013
  });
1014
+
944
1015
  if (!storageEntryToDelete) {
945
1016
  throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
946
1017
  }
1018
+
947
1019
  (0, _ownership.checkOwnership)(context, permission, storageEntryToDelete);
948
1020
  const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
949
1021
  const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
@@ -951,6 +1023,7 @@ const createContentEntryCrud = params => {
951
1023
  * If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.
952
1024
  * At this point deleteRevision hooks are not fired.
953
1025
  */
1026
+
954
1027
  if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {
955
1028
  return await deleteEntry({
956
1029
  model,
@@ -960,12 +1033,16 @@ const createContentEntryCrud = params => {
960
1033
  /**
961
1034
  * If targeted record is latest entry revision, set the previous one as the new latest
962
1035
  */
1036
+
1037
+
963
1038
  let entryToSetAsLatest = null;
964
1039
  let storageEntryToSetAsLatest = null;
1040
+
965
1041
  if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {
966
1042
  entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, previousStorageEntry);
967
1043
  storageEntryToSetAsLatest = previousStorageEntry;
968
1044
  }
1045
+
969
1046
  try {
970
1047
  await onEntryRevisionBeforeDelete.publish({
971
1048
  entry: entryToDelete,
@@ -996,6 +1073,7 @@ const createContentEntryCrud = params => {
996
1073
  });
997
1074
  }
998
1075
  },
1076
+
999
1077
  async deleteEntry(initialModel, entryId) {
1000
1078
  const permission = await checkEntryPermissions({
1001
1079
  rwd: "d"
@@ -1008,9 +1086,11 @@ const createContentEntryCrud = params => {
1008
1086
  const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
1009
1087
  id: entryId
1010
1088
  });
1089
+
1011
1090
  if (!storageEntry) {
1012
1091
  throw new _handlerGraphql.NotFoundError(`Entry "${entryId}" was not found!`);
1013
1092
  }
1093
+
1014
1094
  (0, _ownership.checkOwnership)(context, permission, storageEntry);
1015
1095
  const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
1016
1096
  return await deleteEntry({
@@ -1018,6 +1098,7 @@ const createContentEntryCrud = params => {
1018
1098
  entry
1019
1099
  });
1020
1100
  },
1101
+
1021
1102
  async publishEntry(initialModel, id) {
1022
1103
  const permission = await checkEntryPermissions({
1023
1104
  pw: "p"
@@ -1030,9 +1111,11 @@ const createContentEntryCrud = params => {
1030
1111
  const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
1031
1112
  id
1032
1113
  });
1114
+
1033
1115
  if (!originalStorageEntry) {
1034
1116
  throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
1035
1117
  }
1118
+
1036
1119
  (0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
1037
1120
  const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
1038
1121
  const currentDate = new Date().toISOString();
@@ -1043,6 +1126,7 @@ const createContentEntryCrud = params => {
1043
1126
  publishedOn: currentDate
1044
1127
  });
1045
1128
  let storageEntry = null;
1129
+
1046
1130
  try {
1047
1131
  await onEntryBeforePublish.publish({
1048
1132
  entry,
@@ -1074,6 +1158,7 @@ const createContentEntryCrud = params => {
1074
1158
  });
1075
1159
  }
1076
1160
  },
1161
+
1077
1162
  async unpublishEntry(initialModel, id) {
1078
1163
  const permission = await checkEntryPermissions({
1079
1164
  pw: "u"
@@ -1088,20 +1173,24 @@ const createContentEntryCrud = params => {
1088
1173
  const originalStorageEntry = await storageOperations.entries.getPublishedRevisionByEntryId(model, {
1089
1174
  id: entryId
1090
1175
  });
1176
+
1091
1177
  if (!originalStorageEntry) {
1092
1178
  throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
1093
1179
  }
1180
+
1094
1181
  if (originalStorageEntry.id !== id) {
1095
1182
  throw new _error.default(`Entry is not published.`, "UNPUBLISH_ERROR", {
1096
1183
  entry: originalStorageEntry
1097
1184
  });
1098
1185
  }
1186
+
1099
1187
  (0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
1100
1188
  const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
1101
1189
  const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
1102
1190
  status: STATUS_UNPUBLISHED
1103
1191
  });
1104
1192
  let storageEntry = null;
1193
+
1105
1194
  try {
1106
1195
  await onEntryBeforeUnpublish.publish({
1107
1196
  entry,
@@ -1132,6 +1221,8 @@ const createContentEntryCrud = params => {
1132
1221
  });
1133
1222
  }
1134
1223
  }
1224
+
1135
1225
  };
1136
1226
  };
1227
+
1137
1228
  exports.createContentEntryCrud = createContentEntryCrud;