@webiny/api-headless-cms 0.0.0-unstable.aad28a72ae → 0.0.0-unstable.acacc54f0e

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