@webiny/api-headless-cms 0.0.0-unstable.6e5425ee89 → 0.0.0-unstable.78f581c1d2

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 (272) hide show
  1. package/context.js +15 -0
  2. package/context.js.map +1 -1
  3. package/crud/contentEntry/afterDelete.js +5 -0
  4. package/crud/contentEntry/afterDelete.js.map +1 -1
  5. package/crud/contentEntry/beforeCreate.js +3 -0
  6. package/crud/contentEntry/beforeCreate.js.map +1 -1
  7. package/crud/contentEntry/beforeUpdate.js +3 -0
  8. package/crud/contentEntry/beforeUpdate.js.map +1 -1
  9. package/crud/contentEntry/entryDataValidation.js +40 -1
  10. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  11. package/crud/contentEntry/markLockedFields.js +25 -2
  12. package/crud/contentEntry/markLockedFields.js.map +1 -1
  13. package/crud/contentEntry/referenceFieldsMapping.js +59 -5
  14. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  15. package/crud/contentEntry.crud.js +145 -27
  16. package/crud/contentEntry.crud.js.map +1 -1
  17. package/crud/contentModel/afterCreate.js +2 -0
  18. package/crud/contentModel/afterCreate.js.map +1 -1
  19. package/crud/contentModel/afterCreateFrom.js +2 -0
  20. package/crud/contentModel/afterCreateFrom.js.map +1 -1
  21. package/crud/contentModel/afterDelete.js +2 -0
  22. package/crud/contentModel/afterDelete.js.map +1 -1
  23. package/crud/contentModel/afterUpdate.js +2 -0
  24. package/crud/contentModel/afterUpdate.js.map +1 -1
  25. package/crud/contentModel/beforeCreate.js +32 -4
  26. package/crud/contentModel/beforeCreate.js.map +1 -1
  27. package/crud/contentModel/beforeDelete.js +10 -0
  28. package/crud/contentModel/beforeDelete.js.map +1 -1
  29. package/crud/contentModel/beforeUpdate.js +5 -0
  30. package/crud/contentModel/beforeUpdate.js.map +1 -1
  31. package/crud/contentModel/contentModelManagerFactory.js +7 -0
  32. package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
  33. package/crud/contentModel/createFieldModels.js +6 -0
  34. package/crud/contentModel/createFieldModels.js.map +1 -1
  35. package/crud/contentModel/createFieldStorageId.js +2 -0
  36. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  37. package/crud/contentModel/fieldIdValidation.js +5 -0
  38. package/crud/contentModel/fieldIdValidation.js.map +1 -1
  39. package/crud/contentModel/idValidation.js +5 -0
  40. package/crud/contentModel/idValidation.js.map +1 -1
  41. package/crud/contentModel/models.js +8 -1
  42. package/crud/contentModel/models.js.map +1 -1
  43. package/crud/contentModel/systemFields.js.map +1 -1
  44. package/crud/contentModel/validateLayout.js +8 -0
  45. package/crud/contentModel/validateLayout.js.map +1 -1
  46. package/crud/contentModel/validateModel.js +8 -0
  47. package/crud/contentModel/validateModel.js.map +1 -1
  48. package/crud/contentModel/validateModelFields.js +60 -8
  49. package/crud/contentModel/validateModelFields.js.map +1 -1
  50. package/crud/contentModel.crud.js +96 -11
  51. package/crud/contentModel.crud.js.map +1 -1
  52. package/crud/contentModelGroup/beforeCreate.js +12 -0
  53. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  54. package/crud/contentModelGroup/beforeDelete.js +8 -0
  55. package/crud/contentModelGroup/beforeDelete.js.map +1 -1
  56. package/crud/contentModelGroup/beforeUpdate.js +5 -0
  57. package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  58. package/crud/contentModelGroup.crud.js +47 -10
  59. package/crud/contentModelGroup.crud.js.map +1 -1
  60. package/crud/index.js +16 -0
  61. package/crud/index.js.map +1 -1
  62. package/crud/settings.crud.js +12 -0
  63. package/crud/settings.crud.js.map +1 -1
  64. package/crud/system.crud.js +37 -2
  65. package/crud/system.crud.js.map +1 -1
  66. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +13 -0
  67. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
  68. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +53 -0
  69. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  70. package/fieldConverters/index.js +4 -0
  71. package/fieldConverters/index.js.map +1 -1
  72. package/graphql/buildSchemaPlugins.js +9 -5
  73. package/graphql/buildSchemaPlugins.js.map +1 -1
  74. package/graphql/graphQLHandlerFactory.js +28 -3
  75. package/graphql/graphQLHandlerFactory.js.map +1 -1
  76. package/graphql/index.js +8 -1
  77. package/graphql/index.js.map +1 -1
  78. package/graphql/schema/baseContentSchema.js +9 -1
  79. package/graphql/schema/baseContentSchema.js.map +1 -1
  80. package/graphql/schema/contentEntries.js +42 -2
  81. package/graphql/schema/contentEntries.js.map +1 -1
  82. package/graphql/schema/contentModelGroups.js +19 -2
  83. package/graphql/schema/contentModelGroups.js.map +1 -1
  84. package/graphql/schema/contentModels.js +18 -2
  85. package/graphql/schema/contentModels.js.map +1 -1
  86. package/graphql/schema/createFieldResolvers.js +21 -3
  87. package/graphql/schema/createFieldResolvers.js.map +1 -1
  88. package/graphql/schema/createManageResolvers.js +26 -0
  89. package/graphql/schema/createManageResolvers.js.map +1 -1
  90. package/graphql/schema/createManageSDL.js +14 -1
  91. package/graphql/schema/createManageSDL.js.map +1 -1
  92. package/graphql/schema/createPreviewResolvers.js +10 -0
  93. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  94. package/graphql/schema/createReadResolvers.js +10 -0
  95. package/graphql/schema/createReadResolvers.js.map +1 -1
  96. package/graphql/schema/createReadSDL.js +10 -0
  97. package/graphql/schema/createReadSDL.js.map +1 -1
  98. package/graphql/schema/resolvers/commonFieldResolvers.js +2 -0
  99. package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
  100. package/graphql/schema/resolvers/manage/resolveCreate.js +3 -0
  101. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  102. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +3 -0
  103. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  104. package/graphql/schema/resolvers/manage/resolveDelete.js +6 -0
  105. package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
  106. package/graphql/schema/resolvers/manage/resolveGet.js +16 -0
  107. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  108. package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -0
  109. package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  110. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -0
  111. package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  112. package/graphql/schema/resolvers/manage/resolveList.js +3 -0
  113. package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
  114. package/graphql/schema/resolvers/manage/resolvePublish.js +3 -0
  115. package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
  116. package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -0
  117. package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  118. package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -0
  119. package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  120. package/graphql/schema/resolvers/manage/resolveUpdate.js +3 -0
  121. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  122. package/graphql/schema/resolvers/preview/resolveGet.js +8 -0
  123. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  124. package/graphql/schema/resolvers/preview/resolveList.js +3 -0
  125. package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
  126. package/graphql/schema/resolvers/read/resolveGet.js +8 -0
  127. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  128. package/graphql/schema/resolvers/read/resolveList.js +3 -0
  129. package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
  130. package/graphql/schema/schemaPlugins.js +19 -5
  131. package/graphql/schema/schemaPlugins.js.map +1 -1
  132. package/graphql/system.js +14 -1
  133. package/graphql/system.js.map +1 -1
  134. package/graphqlFields/boolean.js +12 -0
  135. package/graphqlFields/boolean.js.map +1 -1
  136. package/graphqlFields/datetime.js +17 -0
  137. package/graphqlFields/datetime.js.map +1 -1
  138. package/graphqlFields/file.js +8 -0
  139. package/graphqlFields/file.js.map +1 -1
  140. package/graphqlFields/helpers.js +10 -0
  141. package/graphqlFields/helpers.js.map +1 -1
  142. package/graphqlFields/index.js +11 -0
  143. package/graphqlFields/index.js.map +1 -1
  144. package/graphqlFields/longText.js +10 -0
  145. package/graphqlFields/longText.js.map +1 -1
  146. package/graphqlFields/number.js +12 -0
  147. package/graphqlFields/number.js.map +1 -1
  148. package/graphqlFields/object.js +36 -6
  149. package/graphqlFields/object.js.map +1 -1
  150. package/graphqlFields/ref.js +51 -17
  151. package/graphqlFields/ref.js.map +1 -1
  152. package/graphqlFields/richText.js +9 -0
  153. package/graphqlFields/richText.js.map +1 -1
  154. package/graphqlFields/text.js +11 -0
  155. package/graphqlFields/text.js.map +1 -1
  156. package/index.js +19 -0
  157. package/index.js.map +1 -1
  158. package/modelManager/DefaultCmsModelManager.js +16 -0
  159. package/modelManager/DefaultCmsModelManager.js.map +1 -1
  160. package/modelManager/index.js +4 -0
  161. package/modelManager/index.js.map +1 -1
  162. package/package.json +24 -24
  163. package/parameters/context.js +4 -0
  164. package/parameters/context.js.map +1 -1
  165. package/parameters/header.js +11 -0
  166. package/parameters/header.js.map +1 -1
  167. package/parameters/index.js +8 -0
  168. package/parameters/index.js.map +1 -1
  169. package/parameters/manual.js +8 -1
  170. package/parameters/manual.js.map +1 -1
  171. package/parameters/path.js +11 -0
  172. package/parameters/path.js.map +1 -1
  173. package/plugins/CmsGroupPlugin.js +8 -0
  174. package/plugins/CmsGroupPlugin.js.map +1 -1
  175. package/plugins/CmsModelFieldConverterPlugin.js +5 -0
  176. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  177. package/plugins/CmsModelPlugin.js +38 -2
  178. package/plugins/CmsModelPlugin.js.map +1 -1
  179. package/plugins/CmsParametersPlugin.js +7 -0
  180. package/plugins/CmsParametersPlugin.js.map +1 -1
  181. package/plugins/StorageTransformPlugin.js +9 -0
  182. package/plugins/StorageTransformPlugin.js.map +1 -1
  183. package/plugins/index.js +10 -0
  184. package/plugins/index.js.map +1 -1
  185. package/storage/default.js +3 -0
  186. package/storage/default.js.map +1 -1
  187. package/storage/object.js +18 -0
  188. package/storage/object.js.map +1 -1
  189. package/types.js +62 -0
  190. package/types.js.map +1 -1
  191. package/upgrades/5.33.0/index.js +26 -3
  192. package/upgrades/5.33.0/index.js.map +1 -1
  193. package/upgrades/index.js +3 -0
  194. package/upgrades/index.js.map +1 -1
  195. package/utils/access.js +25 -11
  196. package/utils/access.js.map +1 -1
  197. package/utils/converters/Converter.js +13 -0
  198. package/utils/converters/Converter.js.map +1 -1
  199. package/utils/converters/ConverterCollection.js +32 -9
  200. package/utils/converters/ConverterCollection.js.map +1 -1
  201. package/utils/converters/valueKeyStorageConverter.js +26 -0
  202. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  203. package/utils/createTypeName.js +8 -0
  204. package/utils/createTypeName.js.map +1 -1
  205. package/utils/entryStorage.js +26 -10
  206. package/utils/entryStorage.js.map +1 -1
  207. package/utils/filterAsync.js +5 -0
  208. package/utils/filterAsync.js.map +1 -1
  209. package/utils/filterModelFields.js +9 -3
  210. package/utils/filterModelFields.js.map +1 -1
  211. package/utils/getEntryTitle.js +9 -0
  212. package/utils/getEntryTitle.js.map +1 -1
  213. package/utils/getSchemaFromFieldPlugins.js +6 -2
  214. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  215. package/utils/ownership.js +8 -0
  216. package/utils/ownership.js.map +1 -1
  217. package/utils/permissions.js +23 -8
  218. package/utils/permissions.js.map +1 -1
  219. package/utils/pluralizedTypeName.js +6 -0
  220. package/utils/pluralizedTypeName.js.map +1 -1
  221. package/utils/renderFields.js +8 -0
  222. package/utils/renderFields.js.map +1 -1
  223. package/utils/renderGetFilterFields.js +11 -0
  224. package/utils/renderGetFilterFields.js.map +1 -1
  225. package/utils/renderInputFields.js +8 -0
  226. package/utils/renderInputFields.js.map +1 -1
  227. package/utils/renderListFilterFields.js +9 -1
  228. package/utils/renderListFilterFields.js.map +1 -1
  229. package/utils/renderSortEnum.js +7 -0
  230. package/utils/renderSortEnum.js.map +1 -1
  231. package/utils/toSlug.js +4 -0
  232. package/utils/toSlug.js.map +1 -1
  233. package/validators/dateGte.js +7 -0
  234. package/validators/dateGte.js.map +1 -1
  235. package/validators/dateLte.js +7 -0
  236. package/validators/dateLte.js.map +1 -1
  237. package/validators/gte.js +8 -0
  238. package/validators/gte.js.map +1 -1
  239. package/validators/in.js +8 -0
  240. package/validators/in.js.map +1 -1
  241. package/validators/index.js +15 -0
  242. package/validators/index.js.map +1 -1
  243. package/validators/lte.js +8 -0
  244. package/validators/lte.js.map +1 -1
  245. package/validators/maxLength.js +8 -0
  246. package/validators/maxLength.js.map +1 -1
  247. package/validators/minLength.js +8 -0
  248. package/validators/minLength.js.map +1 -1
  249. package/validators/pattern.js +9 -0
  250. package/validators/pattern.js.map +1 -1
  251. package/validators/patternPlugins/email.js +2 -0
  252. package/validators/patternPlugins/email.js.map +1 -1
  253. package/validators/patternPlugins/index.js +8 -0
  254. package/validators/patternPlugins/index.js.map +1 -1
  255. package/validators/patternPlugins/lowerCase.js +2 -0
  256. package/validators/patternPlugins/lowerCase.js.map +1 -1
  257. package/validators/patternPlugins/lowerCaseSpace.js +2 -0
  258. package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
  259. package/validators/patternPlugins/upperCase.js +2 -0
  260. package/validators/patternPlugins/upperCase.js.map +1 -1
  261. package/validators/patternPlugins/upperCaseSpace.js +2 -0
  262. package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
  263. package/validators/patternPlugins/url.js +2 -0
  264. package/validators/patternPlugins/url.js.map +1 -1
  265. package/validators/required.js +5 -0
  266. package/validators/required.js.map +1 -1
  267. package/validators/timeGte.js +8 -0
  268. package/validators/timeGte.js.map +1 -1
  269. package/validators/timeLte.js +8 -0
  270. package/validators/timeLte.js.map +1 -1
  271. package/validators/unique.js +7 -0
  272. package/validators/unique.js.map +1 -1
@@ -1,55 +1,86 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.createModelsCrud = void 0;
9
+
8
10
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
9
12
  var _dataloader = _interopRequireDefault(require("dataloader"));
13
+
10
14
  var _handlerGraphql = require("@webiny/handler-graphql");
15
+
11
16
  var _contentModelManagerFactory = require("./contentModel/contentModelManagerFactory");
17
+
12
18
  var _models = require("./contentModel/models");
19
+
13
20
  var _createFieldModels = require("./contentModel/createFieldModels");
21
+
14
22
  var _error = _interopRequireDefault(require("@webiny/error"));
23
+
15
24
  var _pubsub = require("@webiny/pubsub");
25
+
16
26
  var _beforeCreate = require("./contentModel/beforeCreate");
27
+
17
28
  var _beforeUpdate = require("./contentModel/beforeUpdate");
29
+
18
30
  var _beforeDelete = require("./contentModel/beforeDelete");
31
+
19
32
  var _afterCreate = require("./contentModel/afterCreate");
33
+
20
34
  var _afterUpdate = require("./contentModel/afterUpdate");
35
+
21
36
  var _afterDelete = require("./contentModel/afterDelete");
37
+
22
38
  var _afterCreateFrom = require("./contentModel/afterCreateFrom");
39
+
23
40
  var _CmsModelPlugin = require("../plugins/CmsModelPlugin");
41
+
24
42
  var _permissions = require("../utils/permissions");
43
+
25
44
  var _filterAsync = require("../utils/filterAsync");
45
+
26
46
  var _ownership = require("../utils/ownership");
47
+
27
48
  var _access = require("../utils/access");
49
+
28
50
  var _validateModelFields = require("./contentModel/validateModelFields");
51
+
29
52
  var _semver = _interopRequireDefault(require("semver"));
53
+
30
54
  /**
31
55
  * TODO: remove for 5.34.0
32
56
  * Required because of the 5.33.0 upgrade.
33
57
  * Until the upgrade is done, API will break because there is no storageId assigned.
34
58
  */
35
59
  const featureVersion = _semver.default.coerce("5.33.0");
60
+
36
61
  const attachStorageIdToFields = fields => {
37
62
  return fields.map(field => {
38
63
  var _field$settings;
64
+
39
65
  if ((_field$settings = field.settings) !== null && _field$settings !== void 0 && _field$settings.fields) {
40
66
  field.settings.fields = attachStorageIdToFields(field.settings.fields);
41
67
  }
68
+
42
69
  if (!field.storageId) {
43
70
  field.storageId = field.fieldId;
44
71
  }
72
+
45
73
  return field;
46
74
  });
47
75
  };
76
+
48
77
  const attachStorageIdToModelFields = model => {
49
78
  if (!model.webinyVersion) {
50
79
  return model.fields;
51
80
  }
81
+
52
82
  const version = _semver.default.coerce(model.webinyVersion);
83
+
53
84
  if (!version) {
54
85
  return model.fields;
55
86
  }
@@ -57,14 +88,19 @@ const attachStorageIdToModelFields = model => {
57
88
  * Unfortunately we need to check for beta and next.
58
89
  * TODO remove after 5.33.0
59
90
  */
91
+
92
+
60
93
  if (model.webinyVersion.match(/beta|next/)) {
61
94
  return attachStorageIdToFields(model.fields);
62
95
  }
96
+
63
97
  if (_semver.default.compare(version, featureVersion) >= 0) {
64
98
  return model.fields;
65
99
  }
100
+
66
101
  return attachStorageIdToFields(model.fields);
67
102
  };
103
+
68
104
  const createModelsCrud = params => {
69
105
  const {
70
106
  getTenant,
@@ -90,22 +126,27 @@ const createModelsCrud = params => {
90
126
  })];
91
127
  })
92
128
  };
129
+
93
130
  const clearModelsCache = () => {
94
131
  for (const loader of Object.values(loaders)) {
95
132
  loader.clearAll();
96
133
  }
97
134
  };
135
+
98
136
  const managers = new Map();
137
+
99
138
  const updateManager = async (context, model) => {
100
139
  const manager = await (0, _contentModelManagerFactory.contentModelManagerFactory)(context, model);
101
140
  managers.set(model.modelId, manager);
102
141
  return manager;
103
142
  };
143
+
104
144
  const checkModelPermissions = check => {
105
145
  return (0, _permissions.checkPermissions)(context, "cms.contentModel", {
106
146
  rwd: check
107
147
  });
108
148
  };
149
+
109
150
  const getModelsAsPlugins = () => {
110
151
  const tenant = getTenant().id;
111
152
  const locale = getLocale().code;
@@ -113,16 +154,19 @@ const createModelsCrud = params => {
113
154
  /**
114
155
  * We need to filter out models that are not for this tenant or locale.
115
156
  * If it does not have tenant or locale define, it is for every locale and tenant
116
- */.filter(plugin => {
157
+ */
158
+ .filter(plugin => {
117
159
  const {
118
160
  tenant: t,
119
161
  locale: l
120
162
  } = plugin.contentModel;
163
+
121
164
  if (t && t !== tenant) {
122
165
  return false;
123
166
  } else if (l && l !== locale) {
124
167
  return false;
125
168
  }
169
+
126
170
  return true;
127
171
  }).map(plugin => {
128
172
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModel), {}, {
@@ -134,37 +178,46 @@ const createModelsCrud = params => {
134
178
  /**
135
179
  * Only point where we can truly validate the user model is in the runtime.
136
180
  */
181
+
137
182
  for (const model of models) {
138
183
  (0, _validateModelFields.validateModelFields)({
139
184
  model,
140
185
  plugins: context.plugins
141
186
  });
142
187
  }
188
+
143
189
  return models;
144
190
  };
191
+
145
192
  const modelsGet = async modelId => {
146
193
  const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);
194
+
147
195
  if (pluginModel) {
148
196
  return pluginModel;
149
197
  }
198
+
150
199
  const model = await storageOperations.models.get({
151
200
  tenant: getTenant().id,
152
201
  locale: getLocale().code,
153
202
  modelId
154
203
  });
204
+
155
205
  if (!model) {
156
206
  throw new _handlerGraphql.NotFoundError(`Content model "${modelId}" was not found!`);
157
207
  }
208
+
158
209
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
159
210
  tenant: model.tenant || getTenant().id,
160
211
  locale: model.locale || getLocale().code
161
212
  });
162
213
  };
214
+
163
215
  const modelsList = async () => {
164
216
  const databaseModels = await loaders.listModels.load("listModels");
165
217
  const pluginsModels = getModelsAsPlugins();
166
218
  return databaseModels.concat(pluginsModels);
167
219
  };
220
+
168
221
  const listModels = async () => {
169
222
  const permission = await checkModelPermissions("r");
170
223
  const models = await modelsList();
@@ -172,9 +225,11 @@ const createModelsCrud = params => {
172
225
  if (!(0, _ownership.validateOwnership)(context, permission, model)) {
173
226
  return false;
174
227
  }
228
+
175
229
  return (0, _access.validateModelAccess)(context, model);
176
230
  });
177
231
  };
232
+
178
233
  const getModel = async modelId => {
179
234
  const permission = await checkModelPermissions("r");
180
235
  const model = await modelsGet(modelId);
@@ -182,35 +237,41 @@ const createModelsCrud = params => {
182
237
  await (0, _access.checkModelAccess)(context, model);
183
238
  return model;
184
239
  };
240
+
185
241
  const getModelManager = async target => {
186
242
  const modelId = typeof target === "string" ? target : target.modelId;
243
+
187
244
  if (managers.has(modelId)) {
188
245
  return managers.get(modelId);
189
246
  }
247
+
190
248
  const models = await modelsList();
191
249
  const model = models.find(m => m.modelId === modelId);
250
+
192
251
  if (!model) {
193
252
  throw new _handlerGraphql.NotFoundError(`There is no content model "${modelId}".`);
194
253
  }
254
+
195
255
  return await updateManager(context, model);
196
- };
256
+ }; // create
257
+
197
258
 
198
- // create
199
259
  const onModelBeforeCreate = (0, _pubsub.createTopic)("cms.onModelBeforeCreate");
200
- const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate");
201
- // create from
260
+ const onModelAfterCreate = (0, _pubsub.createTopic)("cms.onModelAfterCreate"); // create from
261
+
202
262
  const onModelBeforeCreateFrom = (0, _pubsub.createTopic)("cms.onModelBeforeCreateFrom");
203
- const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom");
204
- // update
263
+ const onModelAfterCreateFrom = (0, _pubsub.createTopic)("cms.onModelAfterCreateFrom"); // update
264
+
205
265
  const onModelBeforeUpdate = (0, _pubsub.createTopic)("cms.onModelBeforeUpdate");
206
- const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate");
207
- // delete
266
+ const onModelAfterUpdate = (0, _pubsub.createTopic)("cms.onModelAfterUpdate"); // delete
267
+
208
268
  const onModelBeforeDelete = (0, _pubsub.createTopic)("cms.onModelBeforeDelete");
209
269
  const onModelAfterDelete = (0, _pubsub.createTopic)("cms.onModelAfterDelete");
210
270
  const onModelInitialize = (0, _pubsub.createTopic)("cms.onModelInitialize");
211
271
  /**
212
272
  * We need to assign some default behaviors.
213
273
  */
274
+
214
275
  (0, _beforeCreate.assignModelBeforeCreate)({
215
276
  onModelBeforeCreate,
216
277
  onModelBeforeCreateFrom,
@@ -255,6 +316,7 @@ const createModelsCrud = params => {
255
316
  onAfterModelUpdate: onModelAfterUpdate,
256
317
  onBeforeModelDelete: onModelBeforeDelete,
257
318
  onAfterModelDelete: onModelAfterDelete,
319
+
258
320
  /**
259
321
  * Released in 5.34.0
260
322
  */
@@ -270,6 +332,7 @@ const createModelsCrud = params => {
270
332
  clearModelsCache,
271
333
  getModel,
272
334
  listModels,
335
+
273
336
  async createModel(inputData) {
274
337
  await checkModelPermissions("w");
275
338
  const createdData = new _models.CreateContentModelModel().populate(inputData);
@@ -278,9 +341,11 @@ const createModelsCrud = params => {
278
341
  context.security.disableAuthorization();
279
342
  const group = await context.cms.getGroup(input.group);
280
343
  context.security.enableAuthorization();
344
+
281
345
  if (!group) {
282
346
  throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
283
347
  }
348
+
284
349
  const fields = await (0, _createFieldModels.createFieldModels)(input.fields);
285
350
  const identity = getIdentity();
286
351
  const model = {
@@ -321,6 +386,7 @@ const createModelsCrud = params => {
321
386
  });
322
387
  return createdModel;
323
388
  },
389
+
324
390
  /**
325
391
  * Method does not check for permissions or ownership.
326
392
  * @internal
@@ -352,11 +418,13 @@ const createModelsCrud = params => {
352
418
  });
353
419
  return resultModel;
354
420
  },
421
+
355
422
  async createModelFrom(modelId, data) {
356
423
  await checkModelPermissions("w");
357
424
  /**
358
425
  * Get a model record; this will also perform ownership validation.
359
426
  */
427
+
360
428
  const original = await getModel(modelId);
361
429
  const createdData = new _models.CreateContentModelModelFrom().populate({
362
430
  name: data.name,
@@ -368,20 +436,25 @@ const createModelsCrud = params => {
368
436
  await createdData.validate();
369
437
  const input = await createdData.toJSON();
370
438
  const locale = await context.i18n.getLocale(input.locale || original.locale);
439
+
371
440
  if (!locale) {
372
441
  throw new _handlerGraphql.NotFoundError(`There is no locale "${input.locale}".`);
373
442
  }
374
443
  /**
375
444
  * Use storage operations directly because we cannot get group from different locale via context methods.
376
445
  */
446
+
447
+
377
448
  const group = await context.cms.storageOperations.groups.get({
378
449
  id: input.group,
379
450
  tenant: original.tenant,
380
451
  locale: locale.code
381
452
  });
453
+
382
454
  if (!group) {
383
455
  throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
384
456
  }
457
+
385
458
  const identity = getIdentity();
386
459
  const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
387
460
  locale: locale.code,
@@ -419,38 +492,44 @@ const createModelsCrud = params => {
419
492
  });
420
493
  return createdModel;
421
494
  },
495
+
422
496
  async updateModel(modelId, inputData) {
423
- await checkModelPermissions("w");
497
+ await checkModelPermissions("w"); // Get a model record; this will also perform ownership validation.
424
498
 
425
- // Get a model record; this will also perform ownership validation.
426
499
  const original = await getModel(modelId);
427
500
  const updatedData = new _models.UpdateContentModelModel().populate(inputData);
428
501
  await updatedData.validate();
429
502
  const input = await updatedData.toJSON({
430
503
  onlyDirty: true
431
504
  });
505
+
432
506
  if (Object.keys(input).length === 0) {
433
507
  /**
434
508
  * We need to return the original if nothing is to be updated.
435
509
  */
436
510
  return original;
437
511
  }
512
+
438
513
  let group = {
439
514
  id: original.group.id,
440
515
  name: original.group.name
441
516
  };
517
+
442
518
  if (input.group) {
443
519
  context.security.disableAuthorization();
444
520
  const groupData = await context.cms.getGroup(input.group);
445
521
  context.security.enableAuthorization();
522
+
446
523
  if (!groupData) {
447
524
  throw new _handlerGraphql.NotFoundError(`There is no group "${input.group}".`);
448
525
  }
526
+
449
527
  group = {
450
528
  id: groupData.id,
451
529
  name: groupData.name
452
530
  };
453
531
  }
532
+
454
533
  const fields = await (0, _createFieldModels.createFieldModels)(inputData.fields);
455
534
  const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input), {}, {
456
535
  group,
@@ -476,12 +555,14 @@ const createModelsCrud = params => {
476
555
  });
477
556
  return resultModel;
478
557
  },
558
+
479
559
  async deleteModel(modelId) {
480
560
  await checkModelPermissions("d");
481
561
  const model = await getModel(modelId);
482
562
  await onModelBeforeDelete.publish({
483
563
  model
484
564
  });
565
+
485
566
  try {
486
567
  await storageOperations.models.delete({
487
568
  model
@@ -492,11 +573,13 @@ const createModelsCrud = params => {
492
573
  modelId: model.modelId
493
574
  });
494
575
  }
576
+
495
577
  await onModelAfterDelete.publish({
496
578
  model
497
579
  });
498
580
  managers.delete(model.modelId);
499
581
  },
582
+
500
583
  async initializeModel(modelId) {
501
584
  /**
502
585
  * We require that users have write permissions to initialize models.
@@ -509,6 +592,7 @@ const createModelsCrud = params => {
509
592
  });
510
593
  return true;
511
594
  },
595
+
512
596
  getModelManager,
513
597
  getEntryManager: async model => {
514
598
  return getModelManager(model);
@@ -517,4 +601,5 @@ const createModelsCrud = params => {
517
601
  getEntryManagers: () => managers
518
602
  };
519
603
  };
604
+
520
605
  exports.createModelsCrud = createModelsCrud;
@@ -1 +1 @@
1
- {"version":3,"names":["featureVersion","semver","coerce","attachStorageIdToFields","fields","map","field","settings","storageId","fieldId","attachStorageIdToModelFields","model","webinyVersion","version","match","compare","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","WEBINY_VERSION","validateModelFields","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelBeforeUpdate","onModelAfterUpdate","onModelBeforeDelete","onModelAfterDelete","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","createFieldModels","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","layout","publish","createdModel","create","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","keys","length","groupData","deleteModel","delete","ex","WebinyError","message","error","initializeModel","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelInitializeParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput,\n CmsModelField\n} from \"~/types\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport WebinyError from \"@webiny/error\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport { validateModelFields } from \"~/crud/contentModel/validateModelFields\";\nimport semver, { SemVer } from \"semver\";\n\n/**\n * TODO: remove for 5.34.0\n * Required because of the 5.33.0 upgrade.\n * Until the upgrade is done, API will break because there is no storageId assigned.\n */\nconst featureVersion = semver.coerce(\"5.33.0\") as SemVer;\n\nconst attachStorageIdToFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.map(field => {\n if (field.settings?.fields) {\n field.settings.fields = attachStorageIdToFields(field.settings.fields);\n }\n if (!field.storageId) {\n field.storageId = field.fieldId;\n }\n return field;\n });\n};\n\nconst attachStorageIdToModelFields = (model: CmsModel): CmsModelField[] => {\n if (!model.webinyVersion) {\n return model.fields;\n }\n\n const version = semver.coerce(model.webinyVersion);\n if (!version) {\n return model.fields;\n }\n /**\n * Unfortunately we need to check for beta and next.\n * TODO remove after 5.33.0\n */\n if (model.webinyVersion.match(/beta|next/)) {\n return attachStorageIdToFields(model.fields);\n }\n if (semver.compare(version, featureVersion) >= 0) {\n return model.fields;\n }\n return attachStorageIdToFields(model.fields);\n};\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n fields: attachStorageIdToModelFields(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string): Promise<CmsModelPermission> => {\n return checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const models = context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModel;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n });\n /**\n * Only point where we can truly validate the user model is in the runtime.\n */\n for (const model of models) {\n validateModelFields({\n model,\n plugins: context.plugins\n });\n }\n return models;\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n checkOwnership(context, permission, model);\n await checkModelAccess(context, model);\n\n return model;\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n // create\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n // create from\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n // update\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n // delete\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const fields = await createFieldModels(input.fields);\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description || \"\",\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n fields,\n lockedFields: [],\n layout: input.layout || [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onModelBeforeCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async createModelFrom(modelId, data) {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onModelBeforeCreateFrom.publish({\n input,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n },\n async updateModel(modelId, inputData) {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const fields = await createFieldModels(inputData.fields);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields,\n savedOn: new Date().toISOString()\n };\n\n await onModelBeforeUpdate.publish({\n input,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n await onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n async initializeModel(modelId) {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model });\n\n return true;\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["featureVersion","semver","coerce","attachStorageIdToFields","fields","map","field","settings","storageId","fieldId","attachStorageIdToModelFields","model","webinyVersion","version","match","compare","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","WEBINY_VERSION","validateModelFields","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelBeforeUpdate","onModelAfterUpdate","onModelBeforeDelete","onModelAfterDelete","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","createFieldModels","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","layout","publish","createdModel","create","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","keys","length","groupData","deleteModel","delete","ex","WebinyError","message","error","initializeModel","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelInitializeParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput,\n CmsModelField\n} from \"~/types\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport WebinyError from \"@webiny/error\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport { validateModelFields } from \"~/crud/contentModel/validateModelFields\";\nimport semver, { SemVer } from \"semver\";\n\n/**\n * TODO: remove for 5.34.0\n * Required because of the 5.33.0 upgrade.\n * Until the upgrade is done, API will break because there is no storageId assigned.\n */\nconst featureVersion = semver.coerce(\"5.33.0\") as SemVer;\n\nconst attachStorageIdToFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.map(field => {\n if (field.settings?.fields) {\n field.settings.fields = attachStorageIdToFields(field.settings.fields);\n }\n if (!field.storageId) {\n field.storageId = field.fieldId;\n }\n return field;\n });\n};\n\nconst attachStorageIdToModelFields = (model: CmsModel): CmsModelField[] => {\n if (!model.webinyVersion) {\n return model.fields;\n }\n\n const version = semver.coerce(model.webinyVersion);\n if (!version) {\n return model.fields;\n }\n /**\n * Unfortunately we need to check for beta and next.\n * TODO remove after 5.33.0\n */\n if (model.webinyVersion.match(/beta|next/)) {\n return attachStorageIdToFields(model.fields);\n }\n if (semver.compare(version, featureVersion) >= 0) {\n return model.fields;\n }\n return attachStorageIdToFields(model.fields);\n};\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n fields: attachStorageIdToModelFields(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string): Promise<CmsModelPermission> => {\n return checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const models = context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModel;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n });\n /**\n * Only point where we can truly validate the user model is in the runtime.\n */\n for (const model of models) {\n validateModelFields({\n model,\n plugins: context.plugins\n });\n }\n return models;\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n checkOwnership(context, permission, model);\n await checkModelAccess(context, model);\n\n return model;\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n // create\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n // create from\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n // update\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n // delete\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const fields = await createFieldModels(input.fields);\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description || \"\",\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n fields,\n lockedFields: [],\n layout: input.layout || [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onModelBeforeCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async createModelFrom(modelId, data) {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onModelBeforeCreateFrom.publish({\n input,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n },\n async updateModel(modelId, inputData) {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const fields = await createFieldModels(inputData.fields);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields,\n savedOn: new Date().toISOString()\n };\n\n await onModelBeforeUpdate.publish({\n input,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n await onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n async initializeModel(modelId) {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model });\n\n return true;\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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"}
@@ -1,14 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.assignBeforeGroupCreate = void 0;
9
+
8
10
  var _error = _interopRequireDefault(require("@webiny/error"));
11
+
9
12
  var _toSlug = require("../../utils/toSlug");
13
+
10
14
  var _CmsGroupPlugin = require("../../plugins/CmsGroupPlugin");
15
+
11
16
  var _utils = require("@webiny/utils");
17
+
12
18
  const assignBeforeGroupCreate = params => {
13
19
  const {
14
20
  onGroupBeforeCreate,
@@ -19,6 +25,7 @@ const assignBeforeGroupCreate = params => {
19
25
  const {
20
26
  group
21
27
  } = params;
28
+
22
29
  if (group.slug && group.slug.trim()) {
23
30
  const groups = await storageOperations.groups.list({
24
31
  where: {
@@ -27,6 +34,7 @@ const assignBeforeGroupCreate = params => {
27
34
  slug: group.slug
28
35
  }
29
36
  });
37
+
30
38
  if (groups.length > 0) {
31
39
  throw new _error.default(`Cms Group with the slug "${group.slug}" already exists.`, "SLUG_ALREADY_EXISTS");
32
40
  }
@@ -39,16 +47,20 @@ const assignBeforeGroupCreate = params => {
39
47
  slug
40
48
  }
41
49
  });
50
+
42
51
  if (groups.length === 0) {
43
52
  group.slug = slug;
44
53
  } else {
45
54
  group.slug = `${slug}-${(0, _utils.generateAlphaNumericId)(8)}`;
46
55
  }
47
56
  }
57
+
48
58
  const groupPlugin = plugins.byType(_CmsGroupPlugin.CmsGroupPlugin.type).find(item => item.contentModelGroup.slug === group.slug);
59
+
49
60
  if (groupPlugin) {
50
61
  throw new Error(`Cannot create "${group.slug}" content model group because one is already registered via a plugin.`);
51
62
  }
52
63
  });
53
64
  };
65
+
54
66
  exports.assignBeforeGroupCreate = assignBeforeGroupCreate;