@webiny/api-headless-cms 0.0.0-unstable.5e7233243f → 0.0.0-unstable.60a863e033

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