@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,110 +1,42 @@
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
7
  exports.createModelsCrud = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
12
9
  var _dataloader = _interopRequireDefault(require("dataloader"));
13
-
10
+ var _error = _interopRequireDefault(require("@webiny/error"));
14
11
  var _handlerGraphql = require("@webiny/handler-graphql");
15
-
16
12
  var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
17
-
18
- var _models = require("./contentModel/models");
19
-
20
- var _createFieldModels = require("./contentModel/createFieldModels");
21
-
22
- var _error = _interopRequireDefault(require("@webiny/error"));
23
-
24
13
  var _pubsub = require("@webiny/pubsub");
25
-
26
14
  var _beforeCreate = require("./contentModel/beforeCreate");
27
-
28
15
  var _beforeUpdate = require("./contentModel/beforeUpdate");
29
-
30
16
  var _beforeDelete = require("./contentModel/beforeDelete");
31
-
32
17
  var _afterCreate = require("./contentModel/afterCreate");
33
-
34
18
  var _afterUpdate = require("./contentModel/afterUpdate");
35
-
36
19
  var _afterDelete = require("./contentModel/afterDelete");
37
-
38
20
  var _afterCreateFrom = require("./contentModel/afterCreateFrom");
39
-
40
21
  var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
41
-
42
22
  var _permissions = require("../utils/permissions");
43
-
44
23
  var _filterAsync = require("../utils/filterAsync");
45
-
46
24
  var _ownership = require("../utils/ownership");
47
-
48
25
  var _access = require("../utils/access");
49
-
50
- var _validateModelFields = require("./contentModel/validateModelFields");
51
-
52
- var _semver = _interopRequireDefault(require("semver"));
53
-
54
- 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; }
55
-
56
- 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; }
57
-
26
+ var _validation = require("./contentModel/validation");
27
+ var _utils = require("@webiny/utils");
58
28
  /**
59
- * TODO: remove for 5.34.0
60
- * Required because of the 5.33.0 upgrade.
61
- * Until the upgrade is done, API will break because there is no storageId assigned.
29
+ * Given a model, return an array of tags ensuring the `type` tag is set.
62
30
  */
63
- const featureVersion = _semver.default.coerce("5.33.0");
64
-
65
- const attachStorageIdToFields = fields => {
66
- return fields.map(field => {
67
- var _field$settings;
68
-
69
- if ((_field$settings = field.settings) !== null && _field$settings !== void 0 && _field$settings.fields) {
70
- field.settings.fields = attachStorageIdToFields(field.settings.fields);
71
- }
72
-
73
- if (!field.storageId) {
74
- field.storageId = field.fieldId;
75
- }
76
-
77
- return field;
78
- });
79
- };
80
-
81
- const attachStorageIdToModelFields = model => {
82
- if (!model.webinyVersion) {
83
- return model.fields;
31
+ const ensureTypeTag = model => {
32
+ // Let's make sure we have a `type` tag assigned.
33
+ // If `type` tag is not set, set it to a default one (`model`).
34
+ const tags = model.tags || [];
35
+ if (!tags.some(tag => tag.startsWith("type:"))) {
36
+ tags.push("type:model");
84
37
  }
85
-
86
- const version = _semver.default.coerce(model.webinyVersion);
87
-
88
- if (!version) {
89
- return model.fields;
90
- }
91
- /**
92
- * Unfortunately we need to check for beta and next.
93
- * TODO remove after 5.33.0
94
- */
95
-
96
-
97
- if (model.webinyVersion.match(/beta|next/)) {
98
- return attachStorageIdToFields(model.fields);
99
- }
100
-
101
- if (_semver.default.compare(version, featureVersion) >= 0) {
102
- return model.fields;
103
- }
104
-
105
- return attachStorageIdToFields(model.fields);
38
+ return tags;
106
39
  };
107
-
108
40
  const createModelsCrud = params => {
109
41
  const {
110
42
  getTenant,
@@ -122,106 +54,81 @@ const createModelsCrud = params => {
122
54
  }
123
55
  });
124
56
  return [models.map(model => {
125
- return _objectSpread(_objectSpread({}, model), {}, {
126
- fields: attachStorageIdToModelFields(model),
57
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
58
+ tags: ensureTypeTag(model),
127
59
  tenant: model.tenant || getTenant().id,
128
60
  locale: model.locale || getLocale().code
129
61
  });
130
62
  })];
131
63
  })
132
64
  };
133
-
134
65
  const clearModelsCache = () => {
135
66
  for (const loader of Object.values(loaders)) {
136
67
  loader.clearAll();
137
68
  }
138
69
  };
139
-
140
70
  const managers = new Map();
141
-
142
71
  const updateManager = async (context, model) => {
143
72
  const manager = await (0, _contentModelManagerFactory.contentModelManagerFactory)(context, model);
144
73
  managers.set(model.modelId, manager);
145
74
  return manager;
146
75
  };
147
-
148
76
  const checkModelPermissions = check => {
149
77
  return (0, _permissions.checkPermissions)(context, "cms.contentModel", {
150
78
  rwd: check
151
79
  });
152
80
  };
153
-
154
81
  const getModelsAsPlugins = () => {
155
82
  const tenant = getTenant().id;
156
83
  const locale = getLocale().code;
157
- const models = context.plugins.byType(_CmsModelPlugin.CmsModelPlugin.type)
84
+ return context.plugins.byType(_CmsModelPlugin.CmsModelPlugin.type)
158
85
  /**
159
86
  * We need to filter out models that are not for this tenant or locale.
160
87
  * If it does not have tenant or locale define, it is for every locale and tenant
161
- */
162
- .filter(plugin => {
88
+ */.filter(plugin => {
163
89
  const {
164
- tenant: t,
165
- locale: l
90
+ tenant: modelTenant,
91
+ locale: modelLocale
166
92
  } = plugin.contentModel;
167
-
168
- if (t && t !== tenant) {
93
+ if (modelTenant && modelTenant !== tenant) {
169
94
  return false;
170
- } else if (l && l !== locale) {
95
+ } else if (modelLocale && modelLocale !== locale) {
171
96
  return false;
172
97
  }
173
-
174
98
  return true;
175
99
  }).map(plugin => {
176
- return _objectSpread(_objectSpread({}, plugin.contentModel), {}, {
100
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
101
+ tags: ensureTypeTag(plugin.contentModel),
177
102
  tenant,
178
103
  locale,
179
104
  webinyVersion: context.WEBINY_VERSION
180
105
  });
181
106
  });
182
- /**
183
- * Only point where we can truly validate the user model is in the runtime.
184
- */
185
-
186
- for (const model of models) {
187
- (0, _validateModelFields.validateModelFields)({
188
- model,
189
- plugins: context.plugins
190
- });
191
- }
192
-
193
- return models;
194
107
  };
195
-
196
108
  const modelsGet = async modelId => {
197
109
  const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);
198
-
199
110
  if (pluginModel) {
200
111
  return pluginModel;
201
112
  }
202
-
203
113
  const model = await storageOperations.models.get({
204
114
  tenant: getTenant().id,
205
115
  locale: getLocale().code,
206
116
  modelId
207
117
  });
208
-
209
118
  if (!model) {
210
119
  throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
211
120
  }
212
-
213
- return _objectSpread(_objectSpread({}, model), {}, {
121
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
122
+ tags: ensureTypeTag(model),
214
123
  tenant: model.tenant || getTenant().id,
215
124
  locale: model.locale || getLocale().code
216
125
  });
217
126
  };
218
-
219
127
  const modelsList = async () => {
220
128
  const databaseModels = await loaders.listModels.load("listModels");
221
129
  const pluginsModels = getModelsAsPlugins();
222
130
  return databaseModels.concat(pluginsModels);
223
131
  };
224
-
225
132
  const listModels = async () => {
226
133
  const permission = await checkModelPermissions("r");
227
134
  const models = await modelsList();
@@ -229,11 +136,9 @@ const createModelsCrud = params => {
229
136
  if (!(0, _ownership.validateOwnership)(context, permission, model)) {
230
137
  return false;
231
138
  }
232
-
233
139
  return (0, _access.validateModelAccess)(context, model);
234
140
  });
235
141
  };
236
-
237
142
  const getModel = async modelId => {
238
143
  const permission = await checkModelPermissions("r");
239
144
  const model = await modelsGet(modelId);
@@ -241,100 +146,130 @@ const createModelsCrud = params => {
241
146
  await (0, _access.checkModelAccess)(context, model);
242
147
  return model;
243
148
  };
244
-
245
149
  const getModelManager = async target => {
246
150
  const modelId = typeof target === "string" ? target : target.modelId;
247
-
248
151
  if (managers.has(modelId)) {
249
152
  return managers.get(modelId);
250
153
  }
251
-
252
154
  const models = await modelsList();
253
155
  const model = models.find(m => m.modelId === modelId);
254
-
255
156
  if (!model) {
256
157
  throw new _handlerGraphql.NotFoundError(`There is no content model "${modelId}".`);
257
158
  }
258
-
259
159
  return await updateManager(context, model);
260
160
  };
261
161
 
262
- const onBeforeModelCreate = (0, _pubsub.createTopic)();
263
- const onAfterModelCreate = (0, _pubsub.createTopic)();
264
- const onBeforeModelCreateFrom = (0, _pubsub.createTopic)();
265
- const onAfterModelCreateFrom = (0, _pubsub.createTopic)();
266
- const onBeforeModelUpdate = (0, _pubsub.createTopic)();
267
- const onAfterModelUpdate = (0, _pubsub.createTopic)();
268
- const onBeforeModelDelete = (0, _pubsub.createTopic)();
269
- const onAfterModelDelete = (0, _pubsub.createTopic)();
162
+ /**
163
+ * Create
164
+ */
165
+ const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
166
+ const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
167
+ const onModelCreateError = (0, _pubsub.createTopic)("cms.onModelCreateError");
168
+ /**
169
+ * Create from / clone
170
+ */
171
+ const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
172
+ const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
173
+ const onModelCreateFromError = (0, _pubsub.createTopic)("cms.onModelCreateFromError");
174
+ /**
175
+ * Update
176
+ */
177
+ const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
178
+ const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
179
+ const onModelUpdateError = (0, _pubsub.createTopic)("cms.onModelUpdateError");
180
+ /**
181
+ * Delete
182
+ */
183
+ const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
184
+ const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
185
+ const onModelDeleteError = (0, _pubsub.createTopic)("cms.onModelDeleteError");
186
+ /**
187
+ * Initialize
188
+ */
189
+ const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
270
190
  /**
271
191
  * We need to assign some default behaviors.
272
192
  */
273
-
274
- (0, _beforeCreate.assignBeforeModelCreate)({
275
- onBeforeModelCreate,
276
- onBeforeModelCreateFrom,
277
- plugins: context.plugins,
193
+ (0, _beforeCreate.assignModelBeforeCreate)({
194
+ onModelBeforeCreate,
195
+ onModelBeforeCreateFrom,
196
+ context,
278
197
  storageOperations
279
198
  });
280
- (0, _afterCreate.assignAfterModelCreate)({
199
+ (0, _afterCreate.assignModelAfterCreate)({
281
200
  context,
282
- onAfterModelCreate
201
+ onModelAfterCreate
283
202
  });
284
- (0, _beforeUpdate.assignBeforeModelUpdate)({
285
- onBeforeModelUpdate,
286
- plugins: context.plugins,
287
- storageOperations
203
+ (0, _beforeUpdate.assignModelBeforeUpdate)({
204
+ onModelBeforeUpdate,
205
+ context
288
206
  });
289
- (0, _afterUpdate.assignAfterModelUpdate)({
207
+ (0, _afterUpdate.assignModelAfterUpdate)({
290
208
  context,
291
- onAfterModelUpdate
209
+ onModelAfterUpdate
292
210
  });
293
- (0, _afterCreateFrom.assignAfterModelCreateFrom)({
211
+ (0, _afterCreateFrom.assignModelAfterCreateFrom)({
294
212
  context,
295
- onAfterModelCreateFrom
213
+ onModelAfterCreateFrom
296
214
  });
297
- (0, _beforeDelete.assignBeforeModelDelete)({
298
- onBeforeModelDelete,
215
+ (0, _beforeDelete.assignModelBeforeDelete)({
216
+ onModelBeforeDelete,
299
217
  plugins: context.plugins,
300
218
  storageOperations
301
219
  });
302
- (0, _afterDelete.assignAfterModelDelete)({
220
+ (0, _afterDelete.assignModelAfterDelete)({
303
221
  context,
304
- onAfterModelDelete
222
+ onModelAfterDelete
305
223
  });
306
224
  return {
307
- onBeforeModelCreate,
308
- onAfterModelCreate,
309
- onBeforeModelCreateFrom,
310
- onAfterModelCreateFrom,
311
- onBeforeModelUpdate,
312
- onAfterModelUpdate,
313
- onBeforeModelDelete,
314
- onAfterModelDelete,
225
+ /**
226
+ * Deprecated - will be removed in 5.36.0
227
+ */
228
+ onBeforeModelCreate: onModelBeforeCreate,
229
+ onAfterModelCreate: onModelAfterCreate,
230
+ onBeforeModelCreateFrom: onModelBeforeCreateFrom,
231
+ onAfterModelCreateFrom: onModelAfterCreateFrom,
232
+ onBeforeModelUpdate: onModelBeforeUpdate,
233
+ onAfterModelUpdate: onModelAfterUpdate,
234
+ onBeforeModelDelete: onModelBeforeDelete,
235
+ onAfterModelDelete: onModelAfterDelete,
236
+ /**
237
+ * Released in 5.34.0
238
+ */
239
+ onModelBeforeCreate,
240
+ onModelAfterCreate,
241
+ onModelCreateError,
242
+ onModelBeforeCreateFrom,
243
+ onModelAfterCreateFrom,
244
+ onModelCreateFromError,
245
+ onModelBeforeUpdate,
246
+ onModelAfterUpdate,
247
+ onModelUpdateError,
248
+ onModelBeforeDelete,
249
+ onModelAfterDelete,
250
+ onModelDeleteError,
251
+ onModelInitialize,
315
252
  clearModelsCache,
316
253
  getModel,
317
254
  listModels,
318
-
319
- async createModel(inputData) {
255
+ async createModel(input) {
320
256
  await checkModelPermissions("w");
321
- const createdData = new _models.CreateContentModelModel().populate(inputData);
322
- await createdData.validate();
323
- const input = await createdData.toJSON();
257
+ const result = await (0, _validation.createModelCreateValidation)().safeParseAsync(input);
258
+ if (!result.success) {
259
+ throw (0, _utils.createZodError)(result.error);
260
+ }
261
+ const data = result.data;
324
262
  context.security.disableAuthorization();
325
- const group = await context.cms.getGroup(input.group);
263
+ const group = await context.cms.getGroup(data.group);
326
264
  context.security.enableAuthorization();
327
-
328
265
  if (!group) {
329
- throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
266
+ throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
330
267
  }
331
-
332
- const fields = await (0, _createFieldModels.createFieldModels)(input.fields);
333
268
  const identity = getIdentity();
334
269
  const model = {
335
- name: input.name,
336
- description: input.description || "",
337
- modelId: input.modelId || "",
270
+ name: data.name,
271
+ description: data.description || "",
272
+ modelId: data.modelId || "",
338
273
  titleFieldId: "id",
339
274
  locale: getLocale().code,
340
275
  tenant: getTenant().id,
@@ -349,27 +284,37 @@ const createModelsCrud = params => {
349
284
  },
350
285
  createdOn: new Date().toISOString(),
351
286
  savedOn: new Date().toISOString(),
352
- fields,
287
+ fields: data.fields,
353
288
  lockedFields: [],
354
- layout: input.layout || [],
289
+ layout: data.layout || [],
290
+ tags: [...(data.tags || [])],
355
291
  webinyVersion: context.WEBINY_VERSION
356
292
  };
357
- await onBeforeModelCreate.publish({
358
- input,
359
- model
360
- });
361
- const createdModel = await storageOperations.models.create({
362
- model
363
- });
364
- loaders.listModels.clearAll();
365
- await updateManager(context, model);
366
- await onAfterModelCreate.publish({
367
- input,
368
- model: createdModel
369
- });
370
- return createdModel;
293
+ model.tags = ensureTypeTag(model);
294
+ try {
295
+ await onModelBeforeCreate.publish({
296
+ input: data,
297
+ model
298
+ });
299
+ const createdModel = await storageOperations.models.create({
300
+ model
301
+ });
302
+ loaders.listModels.clearAll();
303
+ await updateManager(context, model);
304
+ await onModelAfterCreate.publish({
305
+ input: data,
306
+ model: createdModel
307
+ });
308
+ return createdModel;
309
+ } catch (ex) {
310
+ await onModelCreateError.publish({
311
+ input: data,
312
+ model,
313
+ error: ex
314
+ });
315
+ throw ex;
316
+ }
371
317
  },
372
-
373
318
  /**
374
319
  * Method does not check for permissions or ownership.
375
320
  * @internal
@@ -379,78 +324,80 @@ const createModelsCrud = params => {
379
324
  model: initialModel,
380
325
  original
381
326
  } = params;
382
-
383
- const model = _objectSpread(_objectSpread({}, initialModel), {}, {
327
+ const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialModel), {}, {
384
328
  tenant: initialModel.tenant || getTenant().id,
385
329
  locale: initialModel.locale || getLocale().code,
386
330
  webinyVersion: context.WEBINY_VERSION
387
331
  });
388
-
389
- await onBeforeModelUpdate.publish({
390
- input: {},
391
- original,
392
- model
393
- });
394
- const resultModel = await storageOperations.models.update({
395
- model
396
- });
397
- await updateManager(context, resultModel);
398
- loaders.listModels.clearAll();
399
- await onAfterModelUpdate.publish({
400
- input: {},
401
- original,
402
- model: resultModel
403
- });
404
- return resultModel;
332
+ try {
333
+ await onModelBeforeUpdate.publish({
334
+ input: {},
335
+ original,
336
+ model
337
+ });
338
+ const resultModel = await storageOperations.models.update({
339
+ model
340
+ });
341
+ await updateManager(context, resultModel);
342
+ loaders.listModels.clearAll();
343
+ await onModelAfterUpdate.publish({
344
+ input: {},
345
+ original,
346
+ model: resultModel
347
+ });
348
+ return resultModel;
349
+ } catch (ex) {
350
+ await onModelUpdateError.publish({
351
+ input: {},
352
+ original,
353
+ model,
354
+ error: ex
355
+ });
356
+ throw ex;
357
+ }
405
358
  },
406
-
407
- async createModelFrom(modelId, data) {
359
+ async createModelFrom(modelId, userInput) {
408
360
  await checkModelPermissions("w");
409
361
  /**
410
362
  * Get a model record; this will also perform ownership validation.
411
363
  */
412
-
413
364
  const original = await getModel(modelId);
414
- const createdData = new _models.CreateContentModelModelFrom().populate({
415
- name: data.name,
416
- modelId: data.modelId,
417
- description: data.description || original.description,
418
- group: data.group,
419
- locale: data.locale
365
+ const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync({
366
+ name: userInput.name,
367
+ modelId: userInput.modelId,
368
+ description: userInput.description || original.description,
369
+ group: userInput.group,
370
+ locale: userInput.locale
420
371
  });
421
- await createdData.validate();
422
- const input = await createdData.toJSON();
423
- const locale = await context.i18n.getLocale(input.locale || original.locale);
424
-
372
+ if (!result.success) {
373
+ throw (0, _utils.createZodError)(result.error);
374
+ }
375
+ const data = result.data;
376
+ const locale = await context.i18n.getLocale(data.locale || original.locale);
425
377
  if (!locale) {
426
- throw new _handlerGraphql.NotFoundError(`There is no locale "${input.locale}".`);
378
+ throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
427
379
  }
428
380
  /**
429
381
  * Use storage operations directly because we cannot get group from different locale via context methods.
430
382
  */
431
-
432
-
433
383
  const group = await context.cms.storageOperations.groups.get({
434
- id: input.group,
384
+ id: data.group,
435
385
  tenant: original.tenant,
436
386
  locale: locale.code
437
387
  });
438
-
439
388
  if (!group) {
440
- throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
389
+ throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
441
390
  }
442
-
443
391
  const identity = getIdentity();
444
-
445
- const model = _objectSpread(_objectSpread({}, original), {}, {
392
+ const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
446
393
  locale: locale.code,
447
394
  group: {
448
395
  id: group.id,
449
396
  name: group.name
450
397
  },
451
- name: input.name,
452
- modelId: input.modelId || "",
453
- description: input.description || "",
398
+ name: data.name,
399
+ modelId: data.modelId || "",
400
+ description: data.description || "",
454
401
  createdBy: {
455
402
  id: identity.id,
456
403
  displayName: identity.displayName,
@@ -461,114 +408,142 @@ const createModelsCrud = params => {
461
408
  lockedFields: [],
462
409
  webinyVersion: context.WEBINY_VERSION
463
410
  });
464
-
465
- await onBeforeModelCreateFrom.publish({
466
- input,
467
- model,
468
- original
469
- });
470
- const createdModel = await storageOperations.models.create({
471
- model
472
- });
473
- loaders.listModels.clearAll();
474
- await updateManager(context, model);
475
- await onAfterModelCreateFrom.publish({
476
- input,
477
- original,
478
- model: createdModel
479
- });
480
- return createdModel;
411
+ try {
412
+ await onModelBeforeCreateFrom.publish({
413
+ input: data,
414
+ model,
415
+ original
416
+ });
417
+ const createdModel = await storageOperations.models.create({
418
+ model
419
+ });
420
+ loaders.listModels.clearAll();
421
+ await updateManager(context, model);
422
+ await onModelAfterCreateFrom.publish({
423
+ input: data,
424
+ original,
425
+ model: createdModel
426
+ });
427
+ return createdModel;
428
+ } catch (ex) {
429
+ await onModelCreateFromError.publish({
430
+ input: data,
431
+ original,
432
+ model,
433
+ error: ex
434
+ });
435
+ throw ex;
436
+ }
481
437
  },
438
+ async updateModel(modelId, input) {
439
+ await checkModelPermissions("w");
482
440
 
483
- async updateModel(modelId, inputData) {
484
- await checkModelPermissions("w"); // Get a model record; this will also perform ownership validation.
485
-
441
+ // Get a model record; this will also perform ownership validation.
486
442
  const original = await getModel(modelId);
487
- const updatedData = new _models.UpdateContentModelModel().populate(inputData);
488
- await updatedData.validate();
489
- const input = await updatedData.toJSON({
490
- onlyDirty: true
491
- });
492
-
493
- if (Object.keys(input).length === 0) {
443
+ const result = await (0, _validation.createModelUpdateValidation)().safeParseAsync(input);
444
+ if (!result.success) {
445
+ throw (0, _utils.createZodError)(result.error);
446
+ }
447
+ const data = result.data;
448
+ if (Object.keys(data).length === 0) {
494
449
  /**
495
450
  * We need to return the original if nothing is to be updated.
496
451
  */
497
452
  return original;
498
453
  }
499
-
500
454
  let group = {
501
455
  id: original.group.id,
502
456
  name: original.group.name
503
457
  };
504
-
505
- if (input.group) {
458
+ if (data.group) {
506
459
  context.security.disableAuthorization();
507
- const groupData = await context.cms.getGroup(input.group);
460
+ const groupData = await context.cms.getGroup(data.group);
508
461
  context.security.enableAuthorization();
509
-
510
462
  if (!groupData) {
511
- throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
463
+ throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
512
464
  }
513
-
514
465
  group = {
515
466
  id: groupData.id,
516
467
  name: groupData.name
517
468
  };
518
469
  }
519
-
520
- const fields = await (0, _createFieldModels.createFieldModels)(inputData.fields);
521
-
522
- const model = _objectSpread(_objectSpread(_objectSpread({}, original), input), {}, {
470
+ const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
523
471
  group,
472
+ description: data.description || original.description,
524
473
  tenant: original.tenant || getTenant().id,
525
474
  locale: original.locale || getLocale().code,
526
475
  webinyVersion: context.WEBINY_VERSION,
527
- fields,
528
476
  savedOn: new Date().toISOString()
529
477
  });
530
-
531
- await onBeforeModelUpdate.publish({
532
- input,
533
- original,
534
- model
535
- });
536
- const resultModel = await storageOperations.models.update({
537
- model
538
- });
539
- await updateManager(context, resultModel);
540
- await onAfterModelUpdate.publish({
541
- input,
542
- original,
543
- model: resultModel
544
- });
545
- return resultModel;
478
+ model.tags = ensureTypeTag(model);
479
+ try {
480
+ await onModelBeforeUpdate.publish({
481
+ input: data,
482
+ original,
483
+ model
484
+ });
485
+ const resultModel = await storageOperations.models.update({
486
+ model
487
+ });
488
+ await updateManager(context, resultModel);
489
+ await onModelAfterUpdate.publish({
490
+ input: data,
491
+ original,
492
+ model: resultModel
493
+ });
494
+ return resultModel;
495
+ } catch (ex) {
496
+ await onModelUpdateError.publish({
497
+ input: data,
498
+ model,
499
+ original,
500
+ error: ex
501
+ });
502
+ throw ex;
503
+ }
546
504
  },
547
-
548
505
  async deleteModel(modelId) {
549
506
  await checkModelPermissions("d");
550
507
  const model = await getModel(modelId);
551
- await onBeforeModelDelete.publish({
552
- model
553
- });
554
-
555
508
  try {
556
- await storageOperations.models.delete({
509
+ await onModelBeforeDelete.publish({
510
+ model
511
+ });
512
+ try {
513
+ await storageOperations.models.delete({
514
+ model
515
+ });
516
+ } catch (ex) {
517
+ throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
518
+ error: ex,
519
+ modelId: model.modelId
520
+ });
521
+ }
522
+ await onModelAfterDelete.publish({
557
523
  model
558
524
  });
525
+ managers.delete(model.modelId);
559
526
  } catch (ex) {
560
- throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
561
- error: ex,
562
- modelId: model.modelId
527
+ await onModelDeleteError.publish({
528
+ model,
529
+ error: ex
563
530
  });
531
+ throw ex;
564
532
  }
565
-
566
- await onAfterModelDelete.publish({
567
- model
533
+ },
534
+ async initializeModel(modelId, data) {
535
+ /**
536
+ * We require that users have write permissions to initialize models.
537
+ * Maybe introduce another permission for it?
538
+ */
539
+ await checkModelPermissions("w");
540
+ const model = await getModel(modelId);
541
+ await onModelInitialize.publish({
542
+ model,
543
+ data
568
544
  });
569
- managers.delete(model.modelId);
545
+ return true;
570
546
  },
571
-
572
547
  getModelManager,
573
548
  getEntryManager: async model => {
574
549
  return getModelManager(model);
@@ -577,5 +552,4 @@ const createModelsCrud = params => {
577
552
  getEntryManagers: () => managers
578
553
  };
579
554
  };
580
-
581
555
  exports.createModelsCrud = createModelsCrud;