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

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 (232) hide show
  1. package/context.d.ts +5 -2
  2. package/context.js +63 -8
  3. package/context.js.map +1 -1
  4. package/crud/contentEntry/afterDelete.d.ts +2 -2
  5. package/crud/contentEntry/afterDelete.js +2 -2
  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 -2
  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 -2
  12. package/crud/contentEntry/beforeUpdate.js.map +1 -1
  13. package/crud/contentEntry/entryDataValidation.js +3 -7
  14. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  15. package/crud/contentEntry/markLockedFields.js +10 -11
  16. package/crud/contentEntry/markLockedFields.js.map +1 -1
  17. package/crud/contentEntry/referenceFieldsMapping.js +11 -13
  18. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  19. package/crud/contentEntry/searchableFields.d.ts +9 -0
  20. package/crud/contentEntry/searchableFields.js +83 -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 +253 -270
  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 -5
  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 -5
  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 -5
  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 -5
  36. package/crud/contentModel/afterUpdate.js.map +1 -1
  37. package/crud/contentModel/beforeCreate.d.ts +4 -4
  38. package/crud/contentModel/beforeCreate.js +10 -10
  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 -6
  42. package/crud/contentModel/beforeDelete.js.map +1 -1
  43. package/crud/contentModel/beforeUpdate.d.ts +3 -3
  44. package/crud/contentModel/beforeUpdate.js +5 -5
  45. package/crud/contentModel/beforeUpdate.js.map +1 -1
  46. package/crud/contentModel/createFieldStorageId.js +5 -1
  47. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  48. package/crud/contentModel/models.js +12 -0
  49. package/crud/contentModel/models.js.map +1 -1
  50. package/crud/contentModel/validateModel.js +1 -1
  51. package/crud/contentModel/validateModelFields.js +47 -42
  52. package/crud/contentModel/validateModelFields.js.map +1 -1
  53. package/crud/contentModel/validation.d.ts +477 -0
  54. package/crud/contentModel/validation.js +109 -0
  55. package/crud/contentModel/validation.js.map +1 -0
  56. package/crud/contentModel.crud.js +287 -211
  57. package/crud/contentModel.crud.js.map +1 -1
  58. package/crud/contentModelGroup/beforeCreate.d.ts +2 -2
  59. package/crud/contentModelGroup/beforeCreate.js +3 -3
  60. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  61. package/crud/contentModelGroup/beforeDelete.d.ts +2 -2
  62. package/crud/contentModelGroup/beforeDelete.js +3 -3
  63. package/crud/contentModelGroup/beforeDelete.js.map +1 -1
  64. package/crud/contentModelGroup/beforeUpdate.d.ts +2 -2
  65. package/crud/contentModelGroup/beforeUpdate.js +2 -2
  66. package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  67. package/crud/contentModelGroup/validation.d.ts +30 -0
  68. package/crud/contentModelGroup/validation.js +43 -0
  69. package/crud/contentModelGroup/validation.js.map +1 -0
  70. package/crud/contentModelGroup.crud.js +102 -82
  71. package/crud/contentModelGroup.crud.js.map +1 -1
  72. package/crud/settings.crud.js +3 -8
  73. package/crud/settings.crud.js.map +1 -1
  74. package/crud/system.crud.js +63 -51
  75. package/crud/system.crud.js.map +1 -1
  76. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +1 -1
  77. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
  78. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +239 -0
  79. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
  80. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +17 -19
  81. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  82. package/fieldConverters/index.d.ts +2 -1
  83. package/fieldConverters/index.js +3 -1
  84. package/fieldConverters/index.js.map +1 -1
  85. package/graphql/buildSchemaPlugins.d.ts +2 -2
  86. package/graphql/buildSchemaPlugins.js.map +1 -1
  87. package/graphql/graphQLHandlerFactory.js +59 -29
  88. package/graphql/graphQLHandlerFactory.js.map +1 -1
  89. package/graphql/index.d.ts +2 -2
  90. package/graphql/index.js +49 -38
  91. package/graphql/index.js.map +1 -1
  92. package/graphql/schema/baseContentSchema.d.ts +2 -2
  93. package/graphql/schema/baseContentSchema.js +8 -12
  94. package/graphql/schema/baseContentSchema.js.map +1 -1
  95. package/graphql/schema/contentEntries.d.ts +2 -2
  96. package/graphql/schema/contentEntries.js +6 -6
  97. package/graphql/schema/contentEntries.js.map +1 -1
  98. package/graphql/schema/contentModelGroups.d.ts +2 -2
  99. package/graphql/schema/contentModelGroups.js +3 -3
  100. package/graphql/schema/contentModelGroups.js.map +1 -1
  101. package/graphql/schema/contentModels.d.ts +2 -2
  102. package/graphql/schema/contentModels.js +42 -4
  103. package/graphql/schema/contentModels.js.map +1 -1
  104. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  105. package/graphql/schema/createFieldResolvers.js +26 -16
  106. package/graphql/schema/createFieldResolvers.js.map +1 -1
  107. package/graphql/schema/createManageResolvers.js +4 -18
  108. package/graphql/schema/createManageResolvers.js.map +1 -1
  109. package/graphql/schema/createManageSDL.d.ts +2 -0
  110. package/graphql/schema/createManageSDL.js +11 -12
  111. package/graphql/schema/createManageSDL.js.map +1 -1
  112. package/graphql/schema/createPreviewResolvers.js +3 -7
  113. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  114. package/graphql/schema/createReadResolvers.js +8 -7
  115. package/graphql/schema/createReadResolvers.js.map +1 -1
  116. package/graphql/schema/createReadSDL.d.ts +2 -0
  117. package/graphql/schema/createReadSDL.js +11 -5
  118. package/graphql/schema/createReadSDL.js.map +1 -1
  119. package/graphql/schema/resolvers/manage/resolveGet.js +5 -9
  120. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  121. package/graphql/schema/resolvers/preview/resolveGet.js +3 -7
  122. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  123. package/graphql/schema/resolvers/read/resolveGet.js +3 -7
  124. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  125. package/graphql/schema/schemaPlugins.d.ts +2 -2
  126. package/graphql/schema/schemaPlugins.js +11 -8
  127. package/graphql/schema/schemaPlugins.js.map +1 -1
  128. package/graphql/system.js +79 -82
  129. package/graphql/system.js.map +1 -1
  130. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
  131. package/graphqlFields/dynamicZone/dynamicZoneField.js +234 -0
  132. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
  133. package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
  134. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +79 -0
  135. package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
  136. package/graphqlFields/dynamicZone/index.d.ts +2 -0
  137. package/graphqlFields/dynamicZone/index.js +21 -0
  138. package/graphqlFields/dynamicZone/index.js.map +1 -0
  139. package/graphqlFields/index.d.ts +1 -1
  140. package/graphqlFields/index.js +3 -1
  141. package/graphqlFields/index.js.map +1 -1
  142. package/graphqlFields/number.js +4 -0
  143. package/graphqlFields/number.js.map +1 -1
  144. package/graphqlFields/object.js +123 -73
  145. package/graphqlFields/object.js.map +1 -1
  146. package/graphqlFields/ref.js +38 -56
  147. package/graphqlFields/ref.js.map +1 -1
  148. package/index.d.ts +3 -3
  149. package/index.js +4 -8
  150. package/index.js.map +1 -1
  151. package/modelManager/DefaultCmsModelManager.d.ts +7 -7
  152. package/modelManager/DefaultCmsModelManager.js +1 -1
  153. package/package.json +30 -31
  154. package/parameters/header.js +1 -1
  155. package/parameters/manual.js +7 -8
  156. package/parameters/manual.js.map +1 -1
  157. package/parameters/path.js +1 -1
  158. package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
  159. package/plugins/CmsGraphQLSchemaPlugin.js +17 -0
  160. package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
  161. package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
  162. package/plugins/CmsGraphQLSchemaSorterPlugin.js +38 -0
  163. package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
  164. package/plugins/CmsGroupPlugin.js +1 -1
  165. package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
  166. package/plugins/CmsModelFieldConverterPlugin.js +1 -1
  167. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  168. package/plugins/CmsModelPlugin.d.ts +6 -2
  169. package/plugins/CmsModelPlugin.js +18 -13
  170. package/plugins/CmsModelPlugin.js.map +1 -1
  171. package/plugins/CmsParametersPlugin.js +1 -1
  172. package/plugins/StorageTransformPlugin.d.ts +11 -11
  173. package/plugins/StorageTransformPlugin.js +1 -1
  174. package/plugins/StorageTransformPlugin.js.map +1 -1
  175. package/plugins/index.d.ts +2 -0
  176. package/plugins/index.js +26 -0
  177. package/plugins/index.js.map +1 -1
  178. package/storage/object.js +7 -8
  179. package/storage/object.js.map +1 -1
  180. package/types.d.ts +469 -180
  181. package/types.js +55 -9
  182. package/types.js.map +1 -1
  183. package/upgrades/5.33.0/index.js +5 -9
  184. package/upgrades/5.33.0/index.js.map +1 -1
  185. package/utils/converters/Converter.js +1 -1
  186. package/utils/converters/ConverterCollection.d.ts +7 -0
  187. package/utils/converters/ConverterCollection.js +36 -8
  188. package/utils/converters/ConverterCollection.js.map +1 -1
  189. package/utils/converters/valueKeyStorageConverter.js +3 -7
  190. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  191. package/utils/createTypeFromFields.d.ts +15 -0
  192. package/utils/createTypeFromFields.js +75 -0
  193. package/utils/createTypeFromFields.js.map +1 -0
  194. package/utils/createTypeName.js +4 -2
  195. package/utils/createTypeName.js.map +1 -1
  196. package/utils/entryStorage.js +17 -18
  197. package/utils/entryStorage.js.map +1 -1
  198. package/utils/filterModelFields.js +5 -9
  199. package/utils/filterModelFields.js.map +1 -1
  200. package/utils/getBaseFieldType.d.ts +4 -0
  201. package/utils/getBaseFieldType.js +12 -0
  202. package/utils/getBaseFieldType.js.map +1 -0
  203. package/utils/permissions.js +1 -5
  204. package/utils/permissions.js.map +1 -1
  205. package/utils/pluralizedTypeName.js +1 -1
  206. package/utils/renderFields.js +3 -1
  207. package/utils/renderFields.js.map +1 -1
  208. package/utils/renderGetFilterFields.js +8 -3
  209. package/utils/renderGetFilterFields.js.map +1 -1
  210. package/utils/renderInputFields.js +3 -1
  211. package/utils/renderInputFields.js.map +1 -1
  212. package/utils/renderListFilterFields.js +12 -2
  213. package/utils/renderListFilterFields.js.map +1 -1
  214. package/utils/renderSortEnum.d.ts +7 -4
  215. package/utils/renderSortEnum.js +23 -4
  216. package/utils/renderSortEnum.js.map +1 -1
  217. package/utils/toSlug.js +1 -1
  218. package/validators/dynamicZone.d.ts +2 -0
  219. package/validators/dynamicZone.js +24 -0
  220. package/validators/dynamicZone.js.map +1 -0
  221. package/validators/index.js +3 -1
  222. package/validators/index.js.map +1 -1
  223. package/validators/unique.js +1 -1
  224. package/crud/index.d.ts +0 -6
  225. package/crud/index.js +0 -89
  226. package/crud/index.js.map +0 -1
  227. package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
  228. package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
  229. package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
  230. package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
  231. package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
  232. package/graphql/schema/resolvers/manage/resolveRequestReview.js.map +0 -1
@@ -1,26 +1,22 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.createModelsCrud = void 0;
9
9
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
11
 
12
12
  var _dataloader = _interopRequireDefault(require("dataloader"));
13
13
 
14
+ var _error = _interopRequireDefault(require("@webiny/error"));
15
+
14
16
  var _handlerGraphql = require("@webiny/handler-graphql");
15
17
 
16
18
  var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
17
19
 
18
- var _models = require("./contentModel/models");
19
-
20
- var _createFieldModels = require("./contentModel/createFieldModels");
21
-
22
- var _error = _interopRequireDefault(require("@webiny/error"));
23
-
24
20
  var _pubsub = require("@webiny/pubsub");
25
21
 
26
22
  var _beforeCreate = require("./contentModel/beforeCreate");
@@ -49,60 +45,23 @@ var _access = require("../utils/access");
49
45
 
50
46
  var _validateModelFields = require("./contentModel/validateModelFields");
51
47
 
52
- var _semver = _interopRequireDefault(require("semver"));
48
+ var _validation = require("./contentModel/validation");
53
49
 
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; }
50
+ var _utils = require("@webiny/utils");
57
51
 
58
52
  /**
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.
53
+ * Given a model, return an array of tags ensuring the `type` tag is set.
62
54
  */
63
- const featureVersion = _semver.default.coerce("5.33.0");
64
-
65
- const attachStorageIdToFields = fields => {
66
- return fields.map(field => {
67
- var _field$settings;
55
+ const ensureTypeTag = model => {
56
+ // Let's make sure we have a `type` tag assigned.
57
+ // If `type` tag is not set, set it to a default one (`model`).
58
+ const tags = model.tags || [];
68
59
 
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;
60
+ if (!tags.some(tag => tag.startsWith("type:"))) {
61
+ tags.push("type:model");
84
62
  }
85
63
 
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);
64
+ return tags;
106
65
  };
107
66
 
108
67
  const createModelsCrud = params => {
@@ -122,8 +81,8 @@ const createModelsCrud = params => {
122
81
  }
123
82
  });
124
83
  return [models.map(model => {
125
- return _objectSpread(_objectSpread({}, model), {}, {
126
- fields: attachStorageIdToModelFields(model),
84
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
85
+ tags: ensureTypeTag(model),
127
86
  tenant: model.tenant || getTenant().id,
128
87
  locale: model.locale || getLocale().code
129
88
  });
@@ -161,19 +120,20 @@ const createModelsCrud = params => {
161
120
  */
162
121
  .filter(plugin => {
163
122
  const {
164
- tenant: t,
165
- locale: l
123
+ tenant: modelTenant,
124
+ locale: modelLocale
166
125
  } = plugin.contentModel;
167
126
 
168
- if (t && t !== tenant) {
127
+ if (modelTenant && modelTenant !== tenant) {
169
128
  return false;
170
- } else if (l && l !== locale) {
129
+ } else if (modelLocale && modelLocale !== locale) {
171
130
  return false;
172
131
  }
173
132
 
174
133
  return true;
175
134
  }).map(plugin => {
176
- return _objectSpread(_objectSpread({}, plugin.contentModel), {}, {
135
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
136
+ tags: ensureTypeTag(plugin.contentModel),
177
137
  tenant,
178
138
  locale,
179
139
  webinyVersion: context.WEBINY_VERSION
@@ -210,7 +170,8 @@ const createModelsCrud = params => {
210
170
  throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
211
171
  }
212
172
 
213
- return _objectSpread(_objectSpread({}, model), {}, {
173
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
174
+ tags: ensureTypeTag(model),
214
175
  tenant: model.tenant || getTenant().id,
215
176
  locale: model.locale || getLocale().code
216
177
  });
@@ -258,83 +219,131 @@ const createModelsCrud = params => {
258
219
 
259
220
  return await updateManager(context, model);
260
221
  };
222
+ /**
223
+ * Create
224
+ */
225
+
226
+
227
+ const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
228
+ const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
229
+ const onModelCreateError = (0, _pubsub.createTopic)("cms.onModelCreateError");
230
+ /**
231
+ * Create from / clone
232
+ */
261
233
 
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)();
234
+ const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
235
+ const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
236
+ const onModelCreateFromError = (0, _pubsub.createTopic)("cms.onModelCreateFromError");
237
+ /**
238
+ * Update
239
+ */
240
+
241
+ const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
242
+ const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
243
+ const onModelUpdateError = (0, _pubsub.createTopic)("cms.onModelUpdateError");
244
+ /**
245
+ * Delete
246
+ */
247
+
248
+ const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
249
+ const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
250
+ const onModelDeleteError = (0, _pubsub.createTopic)("cms.onModelDeleteError");
251
+ /**
252
+ * Initialize
253
+ */
254
+
255
+ const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
270
256
  /**
271
257
  * We need to assign some default behaviors.
272
258
  */
273
259
 
274
- (0, _beforeCreate.assignBeforeModelCreate)({
275
- onBeforeModelCreate,
276
- onBeforeModelCreateFrom,
260
+ (0, _beforeCreate.assignModelBeforeCreate)({
261
+ onModelBeforeCreate,
262
+ onModelBeforeCreateFrom,
277
263
  plugins: context.plugins,
278
264
  storageOperations
279
265
  });
280
- (0, _afterCreate.assignAfterModelCreate)({
266
+ (0, _afterCreate.assignModelAfterCreate)({
281
267
  context,
282
- onAfterModelCreate
268
+ onModelAfterCreate
283
269
  });
284
- (0, _beforeUpdate.assignBeforeModelUpdate)({
285
- onBeforeModelUpdate,
270
+ (0, _beforeUpdate.assignModelBeforeUpdate)({
271
+ onModelBeforeUpdate,
286
272
  plugins: context.plugins,
287
273
  storageOperations
288
274
  });
289
- (0, _afterUpdate.assignAfterModelUpdate)({
275
+ (0, _afterUpdate.assignModelAfterUpdate)({
290
276
  context,
291
- onAfterModelUpdate
277
+ onModelAfterUpdate
292
278
  });
293
- (0, _afterCreateFrom.assignAfterModelCreateFrom)({
279
+ (0, _afterCreateFrom.assignModelAfterCreateFrom)({
294
280
  context,
295
- onAfterModelCreateFrom
281
+ onModelAfterCreateFrom
296
282
  });
297
- (0, _beforeDelete.assignBeforeModelDelete)({
298
- onBeforeModelDelete,
283
+ (0, _beforeDelete.assignModelBeforeDelete)({
284
+ onModelBeforeDelete,
299
285
  plugins: context.plugins,
300
286
  storageOperations
301
287
  });
302
- (0, _afterDelete.assignAfterModelDelete)({
288
+ (0, _afterDelete.assignModelAfterDelete)({
303
289
  context,
304
- onAfterModelDelete
290
+ onModelAfterDelete
305
291
  });
306
292
  return {
307
- onBeforeModelCreate,
308
- onAfterModelCreate,
309
- onBeforeModelCreateFrom,
310
- onAfterModelCreateFrom,
311
- onBeforeModelUpdate,
312
- onAfterModelUpdate,
313
- onBeforeModelDelete,
314
- onAfterModelDelete,
293
+ /**
294
+ * Deprecated - will be removed in 5.36.0
295
+ */
296
+ onBeforeModelCreate: onModelBeforeCreate,
297
+ onAfterModelCreate: onModelAfterCreate,
298
+ onBeforeModelCreateFrom: onModelBeforeCreateFrom,
299
+ onAfterModelCreateFrom: onModelAfterCreateFrom,
300
+ onBeforeModelUpdate: onModelBeforeUpdate,
301
+ onAfterModelUpdate: onModelAfterUpdate,
302
+ onBeforeModelDelete: onModelBeforeDelete,
303
+ onAfterModelDelete: onModelAfterDelete,
304
+
305
+ /**
306
+ * Released in 5.34.0
307
+ */
308
+ onModelBeforeCreate,
309
+ onModelAfterCreate,
310
+ onModelCreateError,
311
+ onModelBeforeCreateFrom,
312
+ onModelAfterCreateFrom,
313
+ onModelCreateFromError,
314
+ onModelBeforeUpdate,
315
+ onModelAfterUpdate,
316
+ onModelUpdateError,
317
+ onModelBeforeDelete,
318
+ onModelAfterDelete,
319
+ onModelDeleteError,
320
+ onModelInitialize,
315
321
  clearModelsCache,
316
322
  getModel,
317
323
  listModels,
318
324
 
319
- async createModel(inputData) {
325
+ async createModel(input) {
320
326
  await checkModelPermissions("w");
321
- const createdData = new _models.CreateContentModelModel().populate(inputData);
322
- await createdData.validate();
323
- const input = await createdData.toJSON();
327
+ const result = await (0, _validation.createModelCreateValidation)().safeParseAsync(input);
328
+
329
+ if (!result.success) {
330
+ throw (0, _utils.createZodError)(result.error);
331
+ }
332
+
333
+ const data = result.data;
324
334
  context.security.disableAuthorization();
325
- const group = await context.cms.getGroup(input.group);
335
+ const group = await context.cms.getGroup(data.group);
326
336
  context.security.enableAuthorization();
327
337
 
328
338
  if (!group) {
329
- throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
339
+ throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
330
340
  }
331
341
 
332
- const fields = await (0, _createFieldModels.createFieldModels)(input.fields);
333
342
  const identity = getIdentity();
334
343
  const model = {
335
- name: input.name,
336
- description: input.description || "",
337
- modelId: input.modelId || "",
344
+ name: data.name,
345
+ description: data.description || "",
346
+ modelId: data.modelId || "",
338
347
  titleFieldId: "id",
339
348
  locale: getLocale().code,
340
349
  tenant: getTenant().id,
@@ -349,25 +358,37 @@ const createModelsCrud = params => {
349
358
  },
350
359
  createdOn: new Date().toISOString(),
351
360
  savedOn: new Date().toISOString(),
352
- fields,
361
+ fields: data.fields,
353
362
  lockedFields: [],
354
- layout: input.layout || [],
363
+ layout: data.layout || [],
364
+ tags: [...(data.tags || [])],
355
365
  webinyVersion: context.WEBINY_VERSION
356
366
  };
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;
367
+ model.tags = ensureTypeTag(model);
368
+
369
+ try {
370
+ await onModelBeforeCreate.publish({
371
+ input: data,
372
+ model
373
+ });
374
+ const createdModel = await storageOperations.models.create({
375
+ model
376
+ });
377
+ loaders.listModels.clearAll();
378
+ await updateManager(context, model);
379
+ await onModelAfterCreate.publish({
380
+ input: data,
381
+ model: createdModel
382
+ });
383
+ return createdModel;
384
+ } catch (ex) {
385
+ await onModelCreateError.publish({
386
+ input: data,
387
+ model,
388
+ error: ex
389
+ });
390
+ throw ex;
391
+ }
371
392
  },
372
393
 
373
394
  /**
@@ -379,51 +400,64 @@ const createModelsCrud = params => {
379
400
  model: initialModel,
380
401
  original
381
402
  } = params;
382
-
383
- const model = _objectSpread(_objectSpread({}, initialModel), {}, {
403
+ const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, initialModel), {}, {
384
404
  tenant: initialModel.tenant || getTenant().id,
385
405
  locale: initialModel.locale || getLocale().code,
386
406
  webinyVersion: context.WEBINY_VERSION
387
407
  });
388
408
 
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;
409
+ try {
410
+ await onModelBeforeUpdate.publish({
411
+ input: {},
412
+ original,
413
+ model
414
+ });
415
+ const resultModel = await storageOperations.models.update({
416
+ model
417
+ });
418
+ await updateManager(context, resultModel);
419
+ loaders.listModels.clearAll();
420
+ await onModelAfterUpdate.publish({
421
+ input: {},
422
+ original,
423
+ model: resultModel
424
+ });
425
+ return resultModel;
426
+ } catch (ex) {
427
+ await onModelUpdateError.publish({
428
+ input: {},
429
+ original,
430
+ model,
431
+ error: ex
432
+ });
433
+ throw ex;
434
+ }
405
435
  },
406
436
 
407
- async createModelFrom(modelId, data) {
437
+ async createModelFrom(modelId, userInput) {
408
438
  await checkModelPermissions("w");
409
439
  /**
410
440
  * Get a model record; this will also perform ownership validation.
411
441
  */
412
442
 
413
443
  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
444
+ const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync({
445
+ name: userInput.name,
446
+ modelId: userInput.modelId,
447
+ description: userInput.description || original.description,
448
+ group: userInput.group,
449
+ locale: userInput.locale
420
450
  });
421
- await createdData.validate();
422
- const input = await createdData.toJSON();
423
- const locale = await context.i18n.getLocale(input.locale || original.locale);
451
+
452
+ if (!result.success) {
453
+ throw (0, _utils.createZodError)(result.error);
454
+ }
455
+
456
+ const data = result.data;
457
+ const locale = await context.i18n.getLocale(data.locale || original.locale);
424
458
 
425
459
  if (!locale) {
426
- throw new _handlerGraphql.NotFoundError(`There is no locale "${input.locale}".`);
460
+ throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
427
461
  }
428
462
  /**
429
463
  * Use storage operations directly because we cannot get group from different locale via context methods.
@@ -431,26 +465,25 @@ const createModelsCrud = params => {
431
465
 
432
466
 
433
467
  const group = await context.cms.storageOperations.groups.get({
434
- id: input.group,
468
+ id: data.group,
435
469
  tenant: original.tenant,
436
470
  locale: locale.code
437
471
  });
438
472
 
439
473
  if (!group) {
440
- throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
474
+ throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
441
475
  }
442
476
 
443
477
  const identity = getIdentity();
444
-
445
- const model = _objectSpread(_objectSpread({}, original), {}, {
478
+ const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
446
479
  locale: locale.code,
447
480
  group: {
448
481
  id: group.id,
449
482
  name: group.name
450
483
  },
451
- name: input.name,
452
- modelId: input.modelId || "",
453
- description: input.description || "",
484
+ name: data.name,
485
+ modelId: data.modelId || "",
486
+ description: data.description || "",
454
487
  createdBy: {
455
488
  id: identity.id,
456
489
  displayName: identity.displayName,
@@ -462,35 +495,47 @@ const createModelsCrud = params => {
462
495
  webinyVersion: context.WEBINY_VERSION
463
496
  });
464
497
 
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;
498
+ try {
499
+ await onModelBeforeCreateFrom.publish({
500
+ input: data,
501
+ model,
502
+ original
503
+ });
504
+ const createdModel = await storageOperations.models.create({
505
+ model
506
+ });
507
+ loaders.listModels.clearAll();
508
+ await updateManager(context, model);
509
+ await onModelAfterCreateFrom.publish({
510
+ input: data,
511
+ original,
512
+ model: createdModel
513
+ });
514
+ return createdModel;
515
+ } catch (ex) {
516
+ await onModelCreateFromError.publish({
517
+ input: data,
518
+ original,
519
+ model,
520
+ error: ex
521
+ });
522
+ throw ex;
523
+ }
481
524
  },
482
525
 
483
- async updateModel(modelId, inputData) {
526
+ async updateModel(modelId, input) {
484
527
  await checkModelPermissions("w"); // Get a model record; this will also perform ownership validation.
485
528
 
486
529
  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
- });
530
+ const result = await (0, _validation.createModelUpdateValidation)().safeParseAsync(input);
531
+
532
+ if (!result.success) {
533
+ throw (0, _utils.createZodError)(result.error);
534
+ }
492
535
 
493
- if (Object.keys(input).length === 0) {
536
+ const data = result.data;
537
+
538
+ if (Object.keys(data).length === 0) {
494
539
  /**
495
540
  * We need to return the original if nothing is to be updated.
496
541
  */
@@ -502,13 +547,13 @@ const createModelsCrud = params => {
502
547
  name: original.group.name
503
548
  };
504
549
 
505
- if (input.group) {
550
+ if (data.group) {
506
551
  context.security.disableAuthorization();
507
- const groupData = await context.cms.getGroup(input.group);
552
+ const groupData = await context.cms.getGroup(data.group);
508
553
  context.security.enableAuthorization();
509
554
 
510
555
  if (!groupData) {
511
- throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
556
+ throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
512
557
  }
513
558
 
514
559
  group = {
@@ -517,56 +562,87 @@ const createModelsCrud = params => {
517
562
  };
518
563
  }
519
564
 
520
- const fields = await (0, _createFieldModels.createFieldModels)(inputData.fields);
521
-
522
- const model = _objectSpread(_objectSpread(_objectSpread({}, original), input), {}, {
565
+ const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
523
566
  group,
524
567
  tenant: original.tenant || getTenant().id,
525
568
  locale: original.locale || getLocale().code,
526
569
  webinyVersion: context.WEBINY_VERSION,
527
- fields,
528
570
  savedOn: new Date().toISOString()
529
571
  });
572
+ model.tags = ensureTypeTag(model);
530
573
 
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;
574
+ try {
575
+ await onModelBeforeUpdate.publish({
576
+ input: data,
577
+ original,
578
+ model
579
+ });
580
+ const resultModel = await storageOperations.models.update({
581
+ model
582
+ });
583
+ await updateManager(context, resultModel);
584
+ await onModelAfterUpdate.publish({
585
+ input: data,
586
+ original,
587
+ model: resultModel
588
+ });
589
+ return resultModel;
590
+ } catch (ex) {
591
+ await onModelUpdateError.publish({
592
+ input: data,
593
+ model,
594
+ original,
595
+ error: ex
596
+ });
597
+ throw ex;
598
+ }
546
599
  },
547
600
 
548
601
  async deleteModel(modelId) {
549
602
  await checkModelPermissions("d");
550
603
  const model = await getModel(modelId);
551
- await onBeforeModelDelete.publish({
552
- model
553
- });
554
604
 
555
605
  try {
556
- await storageOperations.models.delete({
606
+ await onModelBeforeDelete.publish({
607
+ model
608
+ });
609
+
610
+ try {
611
+ await storageOperations.models.delete({
612
+ model
613
+ });
614
+ } catch (ex) {
615
+ throw new _error.default(ex.message || "Could not delete the content model", ex.code || "CONTENT_MODEL_DELETE_ERROR", {
616
+ error: ex,
617
+ modelId: model.modelId
618
+ });
619
+ }
620
+
621
+ await onModelAfterDelete.publish({
557
622
  model
558
623
  });
624
+ managers.delete(model.modelId);
559
625
  } 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
626
+ await onModelDeleteError.publish({
627
+ model,
628
+ error: ex
563
629
  });
630
+ throw ex;
564
631
  }
632
+ },
565
633
 
566
- await onAfterModelDelete.publish({
567
- model
634
+ async initializeModel(modelId, data) {
635
+ /**
636
+ * We require that users have write permissions to initialize models.
637
+ * Maybe introduce another permission for it?
638
+ */
639
+ await checkModelPermissions("w");
640
+ const model = await getModel(modelId);
641
+ await onModelInitialize.publish({
642
+ model,
643
+ data
568
644
  });
569
- managers.delete(model.modelId);
645
+ return true;
570
646
  },
571
647
 
572
648
  getModelManager,