@webiny/api-headless-cms 0.0.0-unstable.97a151f74d → 0.0.0-unstable.99666aeb00

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