@webiny/api-headless-cms 0.0.0-unstable.1e66d121db → 0.0.0-unstable.611c5af35e

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