@webiny/api-headless-cms 0.0.0-unstable.990c3ab1b6 → 0.0.0-unstable.aa00eecd97

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