@webiny/api-headless-cms 0.0.0-unstable.5e7233243f → 0.0.0-unstable.606fc9c866

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 (442) hide show
  1. package/context.d.ts +5 -2
  2. package/context.js +63 -29
  3. package/context.js.map +1 -1
  4. package/crud/contentEntry/afterDelete.d.ts +2 -2
  5. package/crud/contentEntry/afterDelete.js +2 -7
  6. package/crud/contentEntry/afterDelete.js.map +1 -1
  7. package/crud/contentEntry/beforeCreate.d.ts +2 -2
  8. package/crud/contentEntry/beforeCreate.js +2 -5
  9. package/crud/contentEntry/beforeCreate.js.map +1 -1
  10. package/crud/contentEntry/beforeUpdate.d.ts +2 -2
  11. package/crud/contentEntry/beforeUpdate.js +2 -5
  12. package/crud/contentEntry/beforeUpdate.js.map +1 -1
  13. package/crud/contentEntry/entryDataValidation.js +4 -47
  14. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  15. package/crud/contentEntry/markLockedFields.d.ts +1 -1
  16. package/crud/contentEntry/markLockedFields.js +25 -39
  17. package/crud/contentEntry/markLockedFields.js.map +1 -1
  18. package/crud/contentEntry/referenceFieldsMapping.js +48 -77
  19. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  20. package/crud/contentEntry/searchableFields.d.ts +9 -0
  21. package/crud/contentEntry/searchableFields.js +72 -0
  22. package/crud/contentEntry/searchableFields.js.map +1 -0
  23. package/crud/contentEntry.crud.d.ts +8 -7
  24. package/crud/contentEntry.crud.js +1002 -1022
  25. package/crud/contentEntry.crud.js.map +1 -1
  26. package/crud/contentModel/afterCreate.d.ts +3 -3
  27. package/crud/contentModel/afterCreate.js +5 -7
  28. package/crud/contentModel/afterCreate.js.map +1 -1
  29. package/crud/contentModel/afterCreateFrom.d.ts +3 -3
  30. package/crud/contentModel/afterCreateFrom.js +5 -7
  31. package/crud/contentModel/afterCreateFrom.js.map +1 -1
  32. package/crud/contentModel/afterDelete.d.ts +3 -3
  33. package/crud/contentModel/afterDelete.js +5 -7
  34. package/crud/contentModel/afterDelete.js.map +1 -1
  35. package/crud/contentModel/afterUpdate.d.ts +3 -3
  36. package/crud/contentModel/afterUpdate.js +5 -7
  37. package/crud/contentModel/afterUpdate.js.map +1 -1
  38. package/crud/contentModel/beforeCreate.d.ts +5 -6
  39. package/crud/contentModel/beforeCreate.js +53 -119
  40. package/crud/contentModel/beforeCreate.js.map +1 -1
  41. package/crud/contentModel/beforeDelete.d.ts +3 -3
  42. package/crud/contentModel/beforeDelete.js +7 -21
  43. package/crud/contentModel/beforeDelete.js.map +1 -1
  44. package/crud/contentModel/beforeUpdate.d.ts +4 -6
  45. package/crud/contentModel/beforeUpdate.js +38 -15
  46. package/crud/contentModel/beforeUpdate.js.map +1 -1
  47. package/crud/contentModel/compatibility/modelApiName.d.ts +3 -0
  48. package/crud/contentModel/compatibility/modelApiName.js +24 -0
  49. package/crud/contentModel/compatibility/modelApiName.js.map +1 -0
  50. package/crud/contentModel/contentModelManagerFactory.js +0 -7
  51. package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
  52. package/crud/contentModel/createFieldStorageId.js +4 -3
  53. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  54. package/crud/contentModel/defaultFields.d.ts +5 -0
  55. package/crud/contentModel/defaultFields.js +58 -0
  56. package/crud/contentModel/defaultFields.js.map +1 -0
  57. package/crud/contentModel/fields/descriptionField.d.ts +2 -0
  58. package/crud/contentModel/fields/descriptionField.js +42 -0
  59. package/crud/contentModel/fields/descriptionField.js.map +1 -0
  60. package/crud/contentModel/fields/imageField.d.ts +2 -0
  61. package/crud/contentModel/fields/imageField.js +46 -0
  62. package/crud/contentModel/fields/imageField.js.map +1 -0
  63. package/crud/contentModel/fields/titleField.d.ts +2 -0
  64. package/crud/contentModel/fields/titleField.js +58 -0
  65. package/crud/contentModel/fields/titleField.js.map +1 -0
  66. package/crud/contentModel/validate/endingAllowed.d.ts +6 -0
  67. package/crud/contentModel/validate/endingAllowed.js +26 -0
  68. package/crud/contentModel/validate/endingAllowed.js.map +1 -0
  69. package/crud/contentModel/validate/isModelEndingAllowed.d.ts +6 -0
  70. package/crud/contentModel/validate/isModelEndingAllowed.js +24 -0
  71. package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -0
  72. package/crud/contentModel/validate/modelId.d.ts +11 -0
  73. package/crud/contentModel/validate/modelId.js +36 -0
  74. package/crud/contentModel/validate/modelId.js.map +1 -0
  75. package/crud/contentModel/validate/pluralApiName.d.ts +7 -0
  76. package/crud/contentModel/validate/pluralApiName.js +24 -0
  77. package/crud/contentModel/validate/pluralApiName.js.map +1 -0
  78. package/crud/contentModel/validate/singularApiName.d.ts +7 -0
  79. package/crud/contentModel/validate/singularApiName.js +24 -0
  80. package/crud/contentModel/validate/singularApiName.js.map +1 -0
  81. package/crud/contentModel/validateLayout.js +0 -8
  82. package/crud/contentModel/validateLayout.js.map +1 -1
  83. package/crud/contentModel/validateModel.d.ts +4 -4
  84. package/crud/contentModel/validateModel.js +7 -12
  85. package/crud/contentModel/validateModel.js.map +1 -1
  86. package/crud/contentModel/validateModelFields.d.ts +4 -4
  87. package/crud/contentModel/validateModelFields.js +133 -154
  88. package/crud/contentModel/validateModelFields.js.map +1 -1
  89. package/crud/contentModel/validation.d.ts +551 -0
  90. package/crud/contentModel/validation.js +145 -0
  91. package/crud/contentModel/validation.js.map +1 -0
  92. package/crud/contentModel.crud.js +410 -375
  93. package/crud/contentModel.crud.js.map +1 -1
  94. package/crud/contentModelGroup/beforeCreate.d.ts +2 -2
  95. package/crud/contentModelGroup/beforeCreate.js +3 -15
  96. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  97. package/crud/contentModelGroup/beforeDelete.d.ts +2 -2
  98. package/crud/contentModelGroup/beforeDelete.js +3 -11
  99. package/crud/contentModelGroup/beforeDelete.js.map +1 -1
  100. package/crud/contentModelGroup/beforeUpdate.d.ts +2 -2
  101. package/crud/contentModelGroup/beforeUpdate.js +2 -7
  102. package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  103. package/crud/contentModelGroup/validation.d.ts +30 -0
  104. package/crud/contentModelGroup/validation.js +34 -0
  105. package/crud/contentModelGroup/validation.js.map +1 -0
  106. package/crud/contentModelGroup.crud.js +227 -221
  107. package/crud/contentModelGroup.crud.js.map +1 -1
  108. package/crud/settings.crud.d.ts +1 -1
  109. package/crud/settings.crud.js +8 -30
  110. package/crud/settings.crud.js.map +1 -1
  111. package/crud/system.crud.js +55 -138
  112. package/crud/system.crud.js.map +1 -1
  113. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +1 -14
  114. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
  115. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
  116. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +203 -0
  117. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
  118. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +16 -71
  119. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  120. package/fieldConverters/index.d.ts +2 -1
  121. package/fieldConverters/index.js +2 -5
  122. package/fieldConverters/index.js.map +1 -1
  123. package/graphql/buildSchemaPlugins.d.ts +8 -3
  124. package/graphql/buildSchemaPlugins.js +6 -14
  125. package/graphql/buildSchemaPlugins.js.map +1 -1
  126. package/graphql/checkEndpointAccess.d.ts +2 -0
  127. package/graphql/checkEndpointAccess.js +18 -0
  128. package/graphql/checkEndpointAccess.js.map +1 -0
  129. package/graphql/createExecutableSchema.d.ts +6 -0
  130. package/graphql/createExecutableSchema.js +29 -0
  131. package/graphql/createExecutableSchema.js.map +1 -0
  132. package/graphql/createRequestBody.d.ts +2 -0
  133. package/graphql/createRequestBody.js +14 -0
  134. package/graphql/createRequestBody.js.map +1 -0
  135. package/graphql/formatErrorPayload.d.ts +1 -0
  136. package/graphql/formatErrorPayload.js +25 -0
  137. package/graphql/formatErrorPayload.js.map +1 -0
  138. package/graphql/generateSchema.d.ts +8 -0
  139. package/graphql/generateSchema.js +31 -0
  140. package/graphql/generateSchema.js.map +1 -0
  141. package/graphql/getSchema.d.ts +17 -0
  142. package/graphql/getSchema.js +102 -0
  143. package/graphql/getSchema.js.map +1 -0
  144. package/graphql/graphQLHandlerFactory.js +7 -130
  145. package/graphql/graphQLHandlerFactory.js.map +1 -1
  146. package/graphql/handleRequest.d.ts +11 -0
  147. package/graphql/handleRequest.js +81 -0
  148. package/graphql/handleRequest.js.map +1 -0
  149. package/graphql/index.d.ts +1 -3
  150. package/graphql/index.js +2 -46
  151. package/graphql/index.js.map +1 -1
  152. package/graphql/schema/baseContentSchema.d.ts +6 -2
  153. package/graphql/schema/baseContentSchema.js +15 -29
  154. package/graphql/schema/baseContentSchema.js.map +1 -1
  155. package/graphql/schema/baseSchema.d.ts +3 -0
  156. package/graphql/schema/baseSchema.js +53 -0
  157. package/graphql/schema/baseSchema.js.map +1 -0
  158. package/graphql/schema/contentEntries.d.ts +6 -2
  159. package/graphql/schema/contentEntries.js +119 -108
  160. package/graphql/schema/contentEntries.js.map +1 -1
  161. package/graphql/schema/contentModelGroups.d.ts +6 -2
  162. package/graphql/schema/contentModelGroups.js +16 -29
  163. package/graphql/schema/contentModelGroups.js.map +1 -1
  164. package/graphql/schema/contentModels.d.ts +6 -2
  165. package/graphql/schema/contentModels.js +77 -22
  166. package/graphql/schema/contentModels.js.map +1 -1
  167. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  168. package/graphql/schema/createFieldResolvers.js +26 -38
  169. package/graphql/schema/createFieldResolvers.js.map +1 -1
  170. package/graphql/schema/createManageResolvers.d.ts +1 -1
  171. package/graphql/schema/createManageResolvers.js +42 -60
  172. package/graphql/schema/createManageResolvers.js.map +1 -1
  173. package/graphql/schema/createManageSDL.d.ts +3 -0
  174. package/graphql/schema/createManageSDL.js +66 -73
  175. package/graphql/schema/createManageSDL.js.map +1 -1
  176. package/graphql/schema/createPreviewResolvers.js +6 -24
  177. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  178. package/graphql/schema/createReadResolvers.js +11 -24
  179. package/graphql/schema/createReadResolvers.js.map +1 -1
  180. package/graphql/schema/createReadSDL.d.ts +3 -0
  181. package/graphql/schema/createReadSDL.js +33 -35
  182. package/graphql/schema/createReadSDL.js.map +1 -1
  183. package/graphql/schema/resolvers/commonFieldResolvers.d.ts +3 -2
  184. package/graphql/schema/resolvers/commonFieldResolvers.js +2 -3
  185. package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
  186. package/graphql/schema/resolvers/manage/resolveCreate.js +0 -3
  187. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  188. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +0 -3
  189. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  190. package/graphql/schema/resolvers/manage/resolveDelete.js +0 -6
  191. package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
  192. package/graphql/schema/resolvers/manage/resolveGet.js +5 -25
  193. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  194. package/graphql/schema/resolvers/manage/resolveGetByIds.js +0 -3
  195. package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  196. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +0 -3
  197. package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  198. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.d.ts +4 -0
  199. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +18 -0
  200. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -0
  201. package/graphql/schema/resolvers/manage/resolveList.js +0 -3
  202. package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
  203. package/graphql/schema/resolvers/manage/resolvePublish.js +0 -3
  204. package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
  205. package/graphql/schema/resolvers/manage/resolveRepublish.js +0 -3
  206. package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  207. package/graphql/schema/resolvers/manage/resolveUnpublish.js +0 -3
  208. package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  209. package/graphql/schema/resolvers/manage/resolveUpdate.js +0 -3
  210. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  211. package/graphql/schema/resolvers/preview/resolveGet.js +3 -15
  212. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  213. package/graphql/schema/resolvers/preview/resolveList.js +0 -3
  214. package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
  215. package/graphql/schema/resolvers/read/resolveGet.js +3 -15
  216. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  217. package/graphql/schema/resolvers/read/resolveList.js +0 -3
  218. package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
  219. package/graphql/schema/schemaPlugins.d.ts +8 -3
  220. package/graphql/schema/schemaPlugins.js +64 -66
  221. package/graphql/schema/schemaPlugins.js.map +1 -1
  222. package/graphql/system.js +55 -87
  223. package/graphql/system.js.map +1 -1
  224. package/graphqlFields/boolean.js +0 -12
  225. package/graphqlFields/boolean.js.map +1 -1
  226. package/graphqlFields/datetime.js +0 -17
  227. package/graphqlFields/datetime.js.map +1 -1
  228. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
  229. package/graphqlFields/dynamicZone/dynamicZoneField.js +243 -0
  230. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
  231. package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
  232. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +63 -0
  233. package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
  234. package/graphqlFields/dynamicZone/index.d.ts +2 -0
  235. package/graphqlFields/dynamicZone/index.js +19 -0
  236. package/graphqlFields/dynamicZone/index.js.map +1 -0
  237. package/graphqlFields/file.js +0 -8
  238. package/graphqlFields/file.js.map +1 -1
  239. package/graphqlFields/helpers.js +0 -10
  240. package/graphqlFields/helpers.js.map +1 -1
  241. package/graphqlFields/index.d.ts +1 -1
  242. package/graphqlFields/index.js +2 -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 +4 -12
  247. package/graphqlFields/number.js.map +1 -1
  248. package/graphqlFields/object.js +132 -99
  249. package/graphqlFields/object.js.map +1 -1
  250. package/graphqlFields/ref.js +90 -114
  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 +0 -11
  255. package/graphqlFields/text.js.map +1 -1
  256. package/index.d.ts +5 -3
  257. package/index.js +27 -27
  258. package/index.js.map +1 -1
  259. package/modelManager/DefaultCmsModelManager.d.ts +7 -7
  260. package/modelManager/DefaultCmsModelManager.js +1 -17
  261. package/modelManager/DefaultCmsModelManager.js.map +1 -1
  262. package/modelManager/index.js +0 -4
  263. package/modelManager/index.js.map +1 -1
  264. package/package.json +30 -32
  265. package/parameters/context.js +0 -4
  266. package/parameters/context.js.map +1 -1
  267. package/parameters/header.js +1 -12
  268. package/parameters/header.js.map +1 -1
  269. package/parameters/index.js +0 -8
  270. package/parameters/index.js.map +1 -1
  271. package/parameters/manual.js +7 -15
  272. package/parameters/manual.js.map +1 -1
  273. package/parameters/path.js +1 -12
  274. package/parameters/path.js.map +1 -1
  275. package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
  276. package/plugins/CmsGraphQLSchemaPlugin.js +12 -0
  277. package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
  278. package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
  279. package/plugins/CmsGraphQLSchemaSorterPlugin.js +28 -0
  280. package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
  281. package/plugins/CmsGroupPlugin.js +1 -9
  282. package/plugins/CmsGroupPlugin.js.map +1 -1
  283. package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
  284. package/plugins/CmsModelFieldConverterPlugin.js +1 -6
  285. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  286. package/plugins/CmsModelPlugin.d.ts +27 -5
  287. package/plugins/CmsModelPlugin.js +46 -51
  288. package/plugins/CmsModelPlugin.js.map +1 -1
  289. package/plugins/CmsParametersPlugin.js +1 -8
  290. package/plugins/CmsParametersPlugin.js.map +1 -1
  291. package/plugins/StorageOperationsCmsModelPlugin.d.ts +23 -0
  292. package/plugins/StorageOperationsCmsModelPlugin.js +42 -0
  293. package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -0
  294. package/plugins/StorageTransformPlugin.d.ts +11 -11
  295. package/plugins/StorageTransformPlugin.js +1 -10
  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 +7 -27
  303. package/storage/object.js.map +1 -1
  304. package/types.d.ts +642 -239
  305. package/types.js +67 -72
  306. package/types.js.map +1 -1
  307. package/utils/access.js +11 -25
  308. package/utils/access.js.map +1 -1
  309. package/utils/converters/Converter.js +1 -14
  310. package/utils/converters/Converter.js.map +1 -1
  311. package/utils/converters/ConverterCollection.d.ts +7 -0
  312. package/utils/converters/ConverterCollection.js +36 -32
  313. package/utils/converters/ConverterCollection.js.map +1 -1
  314. package/utils/converters/valueKeyStorageConverter.d.ts +1 -5
  315. package/utils/converters/valueKeyStorageConverter.js +23 -50
  316. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  317. package/utils/createTypeFromFields.d.ts +16 -0
  318. package/utils/createTypeFromFields.js +66 -0
  319. package/utils/createTypeFromFields.js.map +1 -0
  320. package/utils/createTypeName.d.ts +0 -2
  321. package/utils/createTypeName.js +5 -20
  322. package/utils/createTypeName.js.map +1 -1
  323. package/utils/entryStorage.js +25 -42
  324. package/utils/entryStorage.js.map +1 -1
  325. package/utils/filterAsync.js +0 -5
  326. package/utils/filterAsync.js.map +1 -1
  327. package/utils/getBaseFieldType.d.ts +4 -0
  328. package/utils/getBaseFieldType.js +10 -0
  329. package/utils/getBaseFieldType.js.map +1 -0
  330. package/utils/getEntryDescription.d.ts +2 -0
  331. package/utils/getEntryDescription.js +17 -0
  332. package/utils/getEntryDescription.js.map +1 -0
  333. package/utils/getEntryImage.d.ts +2 -0
  334. package/utils/getEntryImage.js +17 -0
  335. package/utils/getEntryImage.js.map +1 -0
  336. package/utils/getEntryTitle.js +0 -9
  337. package/utils/getEntryTitle.js.map +1 -1
  338. package/utils/getSchemaFromFieldPlugins.d.ts +4 -7
  339. package/utils/getSchemaFromFieldPlugins.js +23 -19
  340. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  341. package/utils/incrementEntryIdVersion.d.ts +5 -0
  342. package/utils/incrementEntryIdVersion.js +29 -0
  343. package/utils/incrementEntryIdVersion.js.map +1 -0
  344. package/utils/ownership.d.ts +3 -3
  345. package/utils/ownership.js +0 -8
  346. package/utils/ownership.js.map +1 -1
  347. package/utils/permissions.js +7 -26
  348. package/utils/permissions.js.map +1 -1
  349. package/utils/renderFields.d.ts +2 -1
  350. package/utils/renderFields.js +10 -10
  351. package/utils/renderFields.js.map +1 -1
  352. package/utils/renderGetFilterFields.js +6 -14
  353. package/utils/renderGetFilterFields.js.map +1 -1
  354. package/utils/renderInputFields.d.ts +2 -1
  355. package/utils/renderInputFields.js +6 -9
  356. package/utils/renderInputFields.js.map +1 -1
  357. package/utils/renderListFilterFields.js +10 -9
  358. package/utils/renderListFilterFields.js.map +1 -1
  359. package/utils/renderSortEnum.d.ts +7 -4
  360. package/utils/renderSortEnum.js +21 -11
  361. package/utils/renderSortEnum.js.map +1 -1
  362. package/utils/toSlug.js +1 -5
  363. package/utils/toSlug.js.map +1 -1
  364. package/validators/dateGte.js +0 -7
  365. package/validators/dateGte.js.map +1 -1
  366. package/validators/dateLte.js +0 -7
  367. package/validators/dateLte.js.map +1 -1
  368. package/validators/dynamicZone.d.ts +2 -0
  369. package/validators/dynamicZone.js +20 -0
  370. package/validators/dynamicZone.js.map +1 -0
  371. package/validators/gte.js +0 -8
  372. package/validators/gte.js.map +1 -1
  373. package/validators/in.js +0 -8
  374. package/validators/in.js.map +1 -1
  375. package/validators/index.js +2 -16
  376. package/validators/index.js.map +1 -1
  377. package/validators/lte.js +0 -8
  378. package/validators/lte.js.map +1 -1
  379. package/validators/maxLength.js +0 -8
  380. package/validators/maxLength.js.map +1 -1
  381. package/validators/minLength.js +0 -8
  382. package/validators/minLength.js.map +1 -1
  383. package/validators/pattern.js +0 -9
  384. package/validators/pattern.js.map +1 -1
  385. package/validators/patternPlugins/email.js +0 -2
  386. package/validators/patternPlugins/email.js.map +1 -1
  387. package/validators/patternPlugins/index.js +0 -8
  388. package/validators/patternPlugins/index.js.map +1 -1
  389. package/validators/patternPlugins/lowerCase.js +0 -2
  390. package/validators/patternPlugins/lowerCase.js.map +1 -1
  391. package/validators/patternPlugins/lowerCaseSpace.js +0 -2
  392. package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
  393. package/validators/patternPlugins/upperCase.js +0 -2
  394. package/validators/patternPlugins/upperCase.js.map +1 -1
  395. package/validators/patternPlugins/upperCaseSpace.js +0 -2
  396. package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
  397. package/validators/patternPlugins/url.js +0 -2
  398. package/validators/patternPlugins/url.js.map +1 -1
  399. package/validators/required.js +0 -5
  400. package/validators/required.js.map +1 -1
  401. package/validators/timeGte.js +0 -8
  402. package/validators/timeGte.js.map +1 -1
  403. package/validators/timeLte.js +0 -8
  404. package/validators/timeLte.js.map +1 -1
  405. package/validators/unique.js +1 -8
  406. package/validators/unique.js.map +1 -1
  407. package/crud/contentModel/createFieldModels.d.ts +0 -2
  408. package/crud/contentModel/createFieldModels.js +0 -26
  409. package/crud/contentModel/createFieldModels.js.map +0 -1
  410. package/crud/contentModel/fieldIdValidation.d.ts +0 -1
  411. package/crud/contentModel/fieldIdValidation.js +0 -25
  412. package/crud/contentModel/fieldIdValidation.js.map +0 -1
  413. package/crud/contentModel/idValidation.d.ts +0 -1
  414. package/crud/contentModel/idValidation.js +0 -22
  415. package/crud/contentModel/idValidation.js.map +0 -1
  416. package/crud/contentModel/models.d.ts +0 -4
  417. package/crud/contentModel/models.js +0 -180
  418. package/crud/contentModel/models.js.map +0 -1
  419. package/crud/contentModel/systemFields.d.ts +0 -1
  420. package/crud/contentModel/systemFields.js +0 -8
  421. package/crud/contentModel/systemFields.js.map +0 -1
  422. package/crud/index.d.ts +0 -6
  423. package/crud/index.js +0 -89
  424. package/crud/index.js.map +0 -1
  425. package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
  426. package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
  427. package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
  428. package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
  429. package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
  430. package/graphql/schema/resolvers/manage/resolveRequestReview.js.map +0 -1
  431. package/upgrades/5.33.0/index.d.ts +0 -3
  432. package/upgrades/5.33.0/index.js +0 -186
  433. package/upgrades/5.33.0/index.js.map +0 -1
  434. package/upgrades/index.d.ts +0 -1
  435. package/upgrades/index.js +0 -12
  436. package/upgrades/index.js.map +0 -1
  437. package/utils/filterModelFields.d.ts +0 -16
  438. package/utils/filterModelFields.js +0 -81
  439. package/utils/filterModelFields.js.map +0 -1
  440. package/utils/pluralizedTypeName.d.ts +0 -1
  441. package/utils/pluralizedTypeName.js +0 -26
  442. package/utils/pluralizedTypeName.js.map +0 -1
@@ -1,73 +1,29 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.createModelGroupsCrud = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _fields = require("@commodo/fields");
13
-
14
- var _validation = require("@webiny/validation");
15
-
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
+ var _dataloader = _interopRequireDefault(require("dataloader"));
16
10
  var _mdbid = _interopRequireDefault(require("mdbid"));
17
-
18
- var _handlerGraphql = require("@webiny/handler-graphql");
19
-
20
11
  var _error = _interopRequireDefault(require("@webiny/error"));
21
-
12
+ var _handlerGraphql = require("@webiny/handler-graphql");
22
13
  var _CmsGroupPlugin = require("../plugins/CmsGroupPlugin");
23
-
24
14
  var _pubsub = require("@webiny/pubsub");
25
-
26
15
  var _beforeUpdate = require("./contentModelGroup/beforeUpdate");
27
-
28
16
  var _beforeCreate = require("./contentModelGroup/beforeCreate");
29
-
30
17
  var _beforeDelete = require("./contentModelGroup/beforeDelete");
31
-
32
- var _dataloader = _interopRequireDefault(require("dataloader"));
33
-
34
18
  var _permissions = require("../utils/permissions");
35
-
36
19
  var _ownership = require("../utils/ownership");
37
-
38
20
  var _access = require("../utils/access");
39
-
40
- var _toSlug = require("../utils/toSlug");
41
-
42
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
-
44
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
45
-
46
- const CreateContentModelGroupModel = (0, _fields.withFields)({
47
- name: (0, _fields.string)({
48
- validation: _validation.validation.create("required,maxLength:100")
49
- }),
50
- slug: (0, _fields.string)({
51
- validation: _validation.validation.create("maxLength:100")
52
- }),
53
- description: (0, _fields.string)({
54
- validation: _validation.validation.create("maxLength:255")
55
- }),
56
- icon: (0, _fields.string)({
57
- validation: _validation.validation.create("required,maxLength:255")
58
- })
59
- })();
60
- const UpdateContentModelGroupModel = (0, _fields.withFields)({
61
- name: (0, _fields.string)({
62
- validation: _validation.validation.create("maxLength:100")
63
- }),
64
- description: (0, _fields.string)({
65
- validation: _validation.validation.create("maxLength:255")
66
- }),
67
- icon: (0, _fields.string)({
68
- validation: _validation.validation.create("maxLength:255")
69
- })
70
- })();
21
+ var _validation = require("./contentModelGroup/validation");
22
+ var _utils = require("@webiny/utils");
23
+ /**
24
+ * Package mdbid does not have types.
25
+ */
26
+ // @ts-ignore
71
27
 
72
28
  const createModelGroupsCrud = params => {
73
29
  const {
@@ -82,7 +38,7 @@ const createModelGroupsCrud = params => {
82
38
  const tenant = getTenant().id;
83
39
  const locale = getLocale().code;
84
40
  const pluginsGroups = getGroupsAsPlugins().map(group => {
85
- return _objectSpread(_objectSpread({}, group), {}, {
41
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, group), {}, {
86
42
  tenant: group.tenant || tenant,
87
43
  locale: group.locale || locale
88
44
  });
@@ -96,13 +52,11 @@ const createModelGroupsCrud = params => {
96
52
  return [groups.concat(pluginsGroups)];
97
53
  })
98
54
  };
99
-
100
55
  const clearGroupsCache = () => {
101
56
  for (const loader of Object.values(dataLoaders)) {
102
57
  loader.clearAll();
103
58
  }
104
59
  };
105
-
106
60
  const getGroupsAsPlugins = () => {
107
61
  const tenant = getTenant().id;
108
62
  const locale = getLocale().code;
@@ -110,237 +64,289 @@ const createModelGroupsCrud = params => {
110
64
  /**
111
65
  * We need to filter out groups that are not for this tenant or locale.
112
66
  * If it does not have tenant or locale define, it is for every locale and tenant
113
- */
114
- .filter(plugin => {
67
+ */.filter(plugin => {
115
68
  const {
116
69
  tenant: t,
117
70
  locale: l
118
71
  } = plugin.contentModelGroup;
119
-
120
72
  if (t && t !== tenant) {
121
73
  return false;
122
74
  } else if (l && l !== locale) {
123
75
  return false;
124
76
  }
125
-
126
77
  return true;
127
78
  }).map(plugin => {
128
- return _objectSpread(_objectSpread({}, plugin.contentModelGroup), {}, {
79
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModelGroup), {}, {
129
80
  tenant,
130
81
  locale,
131
82
  webinyVersion: context.WEBINY_VERSION
132
83
  });
133
84
  });
134
85
  };
135
-
136
86
  const checkPermissions = check => {
137
87
  return (0, _permissions.checkPermissions)(context, "cms.contentModelGroup", {
138
88
  rwd: check
139
89
  });
140
90
  };
141
-
142
- const groupsGet = async id => {
91
+ const getGroupViaDataLoader = async id => {
143
92
  const groups = await dataLoaders.listGroups.load("listGroups");
144
93
  const group = groups.find(g => g.id === id);
145
-
146
94
  if (!group) {
147
95
  throw new _handlerGraphql.NotFoundError(`Cms Group "${id}" was not found!`);
148
96
  }
149
-
150
97
  return group;
151
98
  };
152
-
153
- const groupsList = async params => {
99
+ const listGroupsViaDataLoader = async params => {
154
100
  const {
155
101
  where
156
102
  } = params || {};
157
-
158
103
  try {
159
104
  return await dataLoaders.listGroups.load("listGroups");
160
105
  } catch (ex) {
161
- throw new _error.default(ex.message, ex.code || "LIST_ERROR", _objectSpread(_objectSpread({}, ex.data || {}), {}, {
106
+ throw new _error.default(ex.message, ex.code || "LIST_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
162
107
  where
163
108
  }));
164
109
  }
165
110
  };
166
111
 
167
- const onBeforeCreate = (0, _pubsub.createTopic)();
168
- const onAfterCreate = (0, _pubsub.createTopic)();
169
- const onBeforeUpdate = (0, _pubsub.createTopic)();
170
- const onAfterUpdate = (0, _pubsub.createTopic)();
171
- const onBeforeDelete = (0, _pubsub.createTopic)();
172
- const onAfterDelete = (0, _pubsub.createTopic)();
173
112
  /**
174
- * We need to assign some default behaviors.
113
+ * Create
114
+ */
115
+ const onGroupBeforeCreate = (0, _pubsub.createTopic)("cms.onGroupBeforeCreate");
116
+ const onGroupAfterCreate = (0, _pubsub.createTopic)("cms.onGroupAfterCreate");
117
+ const onGroupCreateError = (0, _pubsub.createTopic)("cms.onGroupCreateError");
118
+ /**
119
+ * Update
175
120
  */
121
+ const onGroupBeforeUpdate = (0, _pubsub.createTopic)("cms.onGroupBeforeUpdate");
122
+ const onGroupAfterUpdate = (0, _pubsub.createTopic)("cms.onGroupAfterUpdate");
123
+ const onGroupUpdateError = (0, _pubsub.createTopic)("cms.onGroupUpdateError");
124
+ /**
125
+ * Delete
126
+ */
127
+ const onGroupBeforeDelete = (0, _pubsub.createTopic)("cms.onGroupBeforeDelete");
128
+ const onGroupAfterDelete = (0, _pubsub.createTopic)("cms.onGroupAfterDelete");
129
+ const onGroupDeleteError = (0, _pubsub.createTopic)("cms.onGroupDeleteError");
176
130
 
131
+ /**
132
+ * We need to assign some default behaviors.
133
+ */
177
134
  (0, _beforeCreate.assignBeforeGroupCreate)({
178
- onBeforeCreate,
135
+ onGroupBeforeCreate,
179
136
  plugins: context.plugins,
180
137
  storageOperations
181
138
  });
182
139
  (0, _beforeUpdate.assignBeforeGroupUpdate)({
183
- onBeforeUpdate,
140
+ onGroupBeforeUpdate,
184
141
  plugins: context.plugins
185
142
  });
186
143
  (0, _beforeDelete.assignBeforeGroupDelete)({
187
- onBeforeDelete,
144
+ onGroupBeforeDelete,
188
145
  plugins: context.plugins,
189
146
  storageOperations
190
147
  });
148
+ /**
149
+ * CRUD Methods
150
+ */
151
+ const getGroup = async id => {
152
+ const permission = await checkPermissions("r");
153
+ const group = await getGroupViaDataLoader(id);
154
+ (0, _ownership.checkOwnership)(context, permission, group);
155
+ (0, _access.validateGroupAccess)(context, permission, group);
156
+ return group;
157
+ };
158
+ const listGroups = async params => {
159
+ const {
160
+ where
161
+ } = params || {};
162
+ const {
163
+ tenant,
164
+ locale
165
+ } = where || {};
166
+ const permission = await checkPermissions("r");
167
+ const response = await listGroupsViaDataLoader((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params || {}), {}, {
168
+ where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where || {}), {}, {
169
+ tenant: tenant || getTenant().id,
170
+ locale: locale || getLocale().code
171
+ })
172
+ }));
173
+ return response.filter(group => {
174
+ if (!(0, _ownership.validateOwnership)(context, permission, group)) {
175
+ return false;
176
+ }
177
+ return (0, _access.validateGroupAccess)(context, permission, group);
178
+ });
179
+ };
180
+ const createGroup = async input => {
181
+ await checkPermissions("w");
182
+ const result = await (0, _validation.createGroupCreateValidation)().safeParseAsync(input);
183
+ if (!result.success) {
184
+ throw (0, _utils.createZodError)(result.error);
185
+ }
186
+ const data = result.data;
187
+ const identity = getIdentity();
188
+ const id = (0, _mdbid.default)();
189
+ const group = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
190
+ id,
191
+ tenant: getTenant().id,
192
+ locale: getLocale().code,
193
+ createdOn: new Date().toISOString(),
194
+ savedOn: new Date().toISOString(),
195
+ createdBy: {
196
+ id: identity.id,
197
+ displayName: identity.displayName,
198
+ type: identity.type
199
+ },
200
+ webinyVersion: context.WEBINY_VERSION
201
+ });
202
+ try {
203
+ await onGroupBeforeCreate.publish({
204
+ group
205
+ });
206
+ const result = await storageOperations.groups.create({
207
+ group
208
+ });
209
+ clearGroupsCache();
210
+ await onGroupAfterCreate.publish({
211
+ group: result
212
+ });
213
+ return group;
214
+ } catch (ex) {
215
+ await onGroupCreateError.publish({
216
+ input,
217
+ group,
218
+ error: ex
219
+ });
220
+ throw new _error.default(ex.message || "Could not save data model group.", ex.code || "ERROR_ON_CREATE", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
221
+ group,
222
+ input
223
+ }));
224
+ }
225
+ };
226
+ const updateGroup = async (id, input) => {
227
+ const permission = await checkPermissions("w");
228
+ const original = await getGroupViaDataLoader(id);
229
+ (0, _ownership.checkOwnership)(context, permission, original);
230
+ const result = await (0, _validation.createGroupUpdateValidation)().safeParseAsync(input);
231
+ if (!result.success) {
232
+ throw (0, _utils.createZodError)(result.error);
233
+ }
234
+ const data = result.data;
235
+
236
+ /**
237
+ * No need to continue if no values were changed
238
+ */
239
+ if (Object.keys(data).length === 0) {
240
+ return original;
241
+ }
242
+ const group = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
243
+ locale: getLocale().code,
244
+ tenant: getTenant().id,
245
+ savedOn: new Date().toISOString()
246
+ });
247
+ try {
248
+ await onGroupBeforeUpdate.publish({
249
+ original,
250
+ group
251
+ });
252
+ const updatedGroup = await storageOperations.groups.update({
253
+ group
254
+ });
255
+ clearGroupsCache();
256
+ await onGroupAfterUpdate.publish({
257
+ original,
258
+ group: updatedGroup
259
+ });
260
+ return updatedGroup;
261
+ } catch (ex) {
262
+ await onGroupUpdateError.publish({
263
+ input,
264
+ original,
265
+ group,
266
+ error: ex
267
+ });
268
+ throw new _error.default(ex.message, ex.code || "UPDATE_ERROR", {
269
+ error: ex,
270
+ original,
271
+ group,
272
+ input
273
+ });
274
+ }
275
+ };
276
+ const deleteGroup = async id => {
277
+ const permission = await checkPermissions("d");
278
+ const group = await getGroupViaDataLoader(id);
279
+ (0, _ownership.checkOwnership)(context, permission, group);
280
+ try {
281
+ await onGroupBeforeDelete.publish({
282
+ group
283
+ });
284
+ await storageOperations.groups.delete({
285
+ group
286
+ });
287
+ clearGroupsCache();
288
+ await onGroupAfterDelete.publish({
289
+ group
290
+ });
291
+ } catch (ex) {
292
+ await onGroupDeleteError.publish({
293
+ group,
294
+ error: ex
295
+ });
296
+ throw new _error.default(ex.message, ex.code || "DELETE_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
297
+ id
298
+ }));
299
+ }
300
+ return true;
301
+ };
191
302
  return {
192
- onBeforeGroupCreate: onBeforeCreate,
193
- onAfterGroupCreate: onAfterCreate,
194
- onBeforeGroupUpdate: onBeforeUpdate,
195
- onAfterGroupUpdate: onAfterUpdate,
196
- onBeforeGroupDelete: onBeforeDelete,
197
- onAfterGroupDelete: onAfterDelete,
303
+ /**
304
+ * Deprecated - will be removed in 5.36.0
305
+ */
306
+ onBeforeGroupCreate: onGroupBeforeCreate,
307
+ onAfterGroupCreate: onGroupAfterCreate,
308
+ onBeforeGroupUpdate: onGroupBeforeUpdate,
309
+ onAfterGroupUpdate: onGroupAfterUpdate,
310
+ onBeforeGroupDelete: onGroupBeforeDelete,
311
+ onAfterGroupDelete: onGroupAfterDelete,
312
+ /**
313
+ * Released in 5.34.0
314
+ */
315
+ onGroupBeforeCreate,
316
+ onGroupAfterCreate,
317
+ onGroupCreateError,
318
+ onGroupBeforeUpdate,
319
+ onGroupAfterUpdate,
320
+ onGroupUpdateError,
321
+ onGroupBeforeDelete,
322
+ onGroupAfterDelete,
323
+ onGroupDeleteError,
198
324
  clearGroupsCache,
199
325
  getGroup: async id => {
200
- const permission = await checkPermissions("r");
201
- const group = await groupsGet(id);
202
- (0, _ownership.checkOwnership)(context, permission, group);
203
- (0, _access.validateGroupAccess)(context, permission, group);
204
- return group;
326
+ return context.benchmark.measure("headlessCms.crud.groups.getGroup", async () => {
327
+ return getGroup(id);
328
+ });
205
329
  },
206
330
  listGroups: async params => {
207
- const {
208
- where
209
- } = params || {};
210
- const {
211
- tenant,
212
- locale
213
- } = where || {};
214
- const permission = await checkPermissions("r");
215
- const response = await groupsList(_objectSpread(_objectSpread({}, params || {}), {}, {
216
- where: _objectSpread(_objectSpread({}, where || {}), {}, {
217
- tenant: tenant || getTenant().id,
218
- locale: locale || getLocale().code
219
- })
220
- }));
221
- return response.filter(group => {
222
- if (!(0, _ownership.validateOwnership)(context, permission, group)) {
223
- return false;
224
- }
225
-
226
- return (0, _access.validateGroupAccess)(context, permission, group);
331
+ return context.benchmark.measure("headlessCms.crud.groups.listGroups", async () => {
332
+ return listGroups(params);
227
333
  });
228
334
  },
229
- createGroup: async inputData => {
230
- await checkPermissions("w");
231
- const createdData = new CreateContentModelGroupModel().populate(_objectSpread(_objectSpread({}, inputData), {}, {
232
- slug: inputData.slug ? (0, _toSlug.toSlug)(inputData.slug) : "",
233
- description: inputData.description || ""
234
- }));
235
- await createdData.validate();
236
- const input = await createdData.toJSON();
237
- const identity = getIdentity();
238
- const id = (0, _mdbid.default)();
239
-
240
- const group = _objectSpread(_objectSpread({}, input), {}, {
241
- id,
242
- tenant: getTenant().id,
243
- locale: getLocale().code,
244
- createdOn: new Date().toISOString(),
245
- savedOn: new Date().toISOString(),
246
- createdBy: {
247
- id: identity.id,
248
- displayName: identity.displayName,
249
- type: identity.type
250
- },
251
- webinyVersion: context.WEBINY_VERSION
335
+ createGroup: async input => {
336
+ return context.benchmark.measure("headlessCms.crud.groups.createGroup", async () => {
337
+ return createGroup(input);
252
338
  });
253
-
254
- try {
255
- await onBeforeCreate.publish({
256
- group
257
- });
258
- const result = await storageOperations.groups.create({
259
- group
260
- });
261
- clearGroupsCache();
262
- await onAfterCreate.publish({
263
- group: result
264
- });
265
- return group;
266
- } catch (ex) {
267
- throw new _error.default(ex.message || "Could not save data model group.", ex.code || "ERROR_ON_CREATE", _objectSpread(_objectSpread({}, ex.data || {}), {}, {
268
- group,
269
- input
270
- }));
271
- }
272
339
  },
273
- updateGroup: async (id, inputData) => {
274
- const permission = await checkPermissions("w");
275
- const original = await groupsGet(id);
276
- (0, _ownership.checkOwnership)(context, permission, original);
277
- const input = new UpdateContentModelGroupModel().populate(inputData);
278
- await input.validate();
279
- const updatedDataJson = await input.toJSON({
280
- onlyDirty: true
281
- });
282
- /**
283
- * No need to continue if no values were changed
284
- */
285
-
286
- if (Object.keys(updatedDataJson).length === 0) {
287
- return original;
288
- }
289
-
290
- const group = _objectSpread(_objectSpread(_objectSpread({}, original), updatedDataJson), {}, {
291
- locale: getLocale().code,
292
- tenant: getTenant().id,
293
- savedOn: new Date().toISOString()
340
+ updateGroup: async (id, input) => {
341
+ return context.benchmark.measure("headlessCms.crud.groups.updateGroup", async () => {
342
+ return updateGroup(id, input);
294
343
  });
295
-
296
- try {
297
- await onBeforeUpdate.publish({
298
- original,
299
- group
300
- });
301
- const updatedGroup = await storageOperations.groups.update({
302
- group
303
- });
304
- clearGroupsCache();
305
- await onAfterUpdate.publish({
306
- original,
307
- group: updatedGroup
308
- });
309
- return updatedGroup;
310
- } catch (ex) {
311
- throw new _error.default(ex.message, ex.code || "UPDATE_ERROR", {
312
- error: ex,
313
- original,
314
- group,
315
- input
316
- });
317
- }
318
344
  },
319
345
  deleteGroup: async id => {
320
- const permission = await checkPermissions("d");
321
- const group = await groupsGet(id);
322
- (0, _ownership.checkOwnership)(context, permission, group);
323
-
324
- try {
325
- await onBeforeDelete.publish({
326
- group
327
- });
328
- await storageOperations.groups.delete({
329
- group
330
- });
331
- clearGroupsCache();
332
- await onAfterDelete.publish({
333
- group
334
- });
335
- } catch (ex) {
336
- throw new _error.default(ex.message, ex.code || "DELETE_ERROR", _objectSpread(_objectSpread({}, ex.data || {}), {}, {
337
- id
338
- }));
339
- }
340
-
341
- return true;
346
+ return context.benchmark.measure("headlessCms.crud.groups.deleteGroup", async () => {
347
+ return deleteGroup(id);
348
+ });
342
349
  }
343
350
  };
344
351
  };
345
-
346
352
  exports.createModelGroupsCrud = createModelGroupsCrud;
@@ -1 +1 @@
1
- {"version":3,"names":["CreateContentModelGroupModel","withFields","name","string","validation","create","slug","description","icon","UpdateContentModelGroupModel","createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","dataLoaders","listGroups","DataLoader","tenant","id","locale","code","pluginsGroups","getGroupsAsPlugins","map","group","groups","list","where","concat","clearGroupsCache","loader","Object","values","clearAll","plugins","byType","CmsGroupPlugin","type","filter","plugin","t","l","contentModelGroup","webinyVersion","WEBINY_VERSION","checkPermissions","check","baseCheckPermissions","rwd","groupsGet","load","find","g","NotFoundError","groupsList","ex","WebinyError","message","data","onBeforeCreate","createTopic","onAfterCreate","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","assignBeforeGroupCreate","assignBeforeGroupUpdate","assignBeforeGroupDelete","onBeforeGroupCreate","onAfterGroupCreate","onBeforeGroupUpdate","onAfterGroupUpdate","onBeforeGroupDelete","onAfterGroupDelete","getGroup","permission","checkOwnership","validateGroupAccess","response","validateOwnership","createGroup","inputData","createdData","populate","toSlug","validate","input","toJSON","identity","mdbid","createdOn","Date","toISOString","savedOn","createdBy","displayName","publish","result","updateGroup","original","updatedDataJson","onlyDirty","keys","length","updatedGroup","update","error","deleteGroup","delete"],"sources":["contentModelGroup.crud.ts"],"sourcesContent":["/**\n * Package @commodo/fields does not have types.\n */\n// @ts-ignore\nimport { withFields, string } from \"@commodo/fields\";\nimport { validation } from \"@webiny/validation\";\n/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport {\n CmsGroupContext,\n CmsGroupListParams,\n CmsGroupPermission,\n CmsGroup,\n CmsContext,\n HeadlessCmsStorageOperations,\n CmsGroupCreateInput,\n BeforeGroupCreateTopicParams,\n AfterGroupCreateTopicParams,\n BeforeGroupUpdateTopicParams,\n AfterGroupUpdateTopicParams,\n BeforeGroupDeleteTopicParams,\n AfterGroupDeleteTopicParams\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeGroupUpdate } from \"./contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"./contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"./contentModelGroup/beforeDelete\";\nimport DataLoader from \"dataloader\";\nimport { checkPermissions as baseCheckPermissions } from \"~/utils/permissions\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { validateGroupAccess } from \"~/utils/access\";\nimport { toSlug } from \"~/utils/toSlug\";\n\nconst CreateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"required,maxLength:100\") }),\n slug: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"required,maxLength:255\") })\n})();\n\nconst UpdateContentModelGroupModel = withFields({\n name: string({ validation: validation.create(\"maxLength:100\") }),\n description: string({ validation: validation.create(\"maxLength:255\") }),\n icon: string({ validation: validation.create(\"maxLength:255\") })\n})();\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const dataLoaders = {\n listGroups: new DataLoader(async () => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const pluginsGroups = getGroupsAsPlugins().map(group => {\n return {\n ...group,\n tenant: group.tenant || tenant,\n locale: group.locale || locale\n };\n });\n\n const groups = await storageOperations.groups.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n\n return [groups.concat(pluginsGroups)];\n })\n };\n\n const clearGroupsCache = (): void => {\n for (const loader of Object.values(dataLoaders)) {\n loader.clearAll();\n }\n };\n\n const getGroupsAsPlugins = (): CmsGroup[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n /**\n * We need to filter out groups that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModelGroup;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModelGroup,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const checkPermissions = (check: string): Promise<CmsGroupPermission> => {\n return baseCheckPermissions(context, \"cms.contentModelGroup\", { rwd: check });\n };\n\n const groupsGet = async (id: string) => {\n const groups = await dataLoaders.listGroups.load(\"listGroups\");\n\n const group = groups.find(g => g.id === id);\n\n if (!group) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n return group;\n };\n\n const groupsList = async (params: CmsGroupListParams) => {\n const { where } = params || {};\n\n try {\n return await dataLoaders.listGroups.load(\"listGroups\");\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"LIST_ERROR\", {\n ...(ex.data || {}),\n where\n });\n }\n };\n\n const onBeforeCreate = createTopic<BeforeGroupCreateTopicParams>();\n const onAfterCreate = createTopic<AfterGroupCreateTopicParams>();\n const onBeforeUpdate = createTopic<BeforeGroupUpdateTopicParams>();\n const onAfterUpdate = createTopic<AfterGroupUpdateTopicParams>();\n const onBeforeDelete = createTopic<BeforeGroupDeleteTopicParams>();\n const onAfterDelete = createTopic<AfterGroupDeleteTopicParams>();\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n\n return {\n onBeforeGroupCreate: onBeforeCreate,\n onAfterGroupCreate: onAfterCreate,\n onBeforeGroupUpdate: onBeforeUpdate,\n onAfterGroupUpdate: onAfterUpdate,\n onBeforeGroupDelete: onBeforeDelete,\n onAfterGroupDelete: onAfterDelete,\n clearGroupsCache,\n getGroup: async id => {\n const permission = await checkPermissions(\"r\");\n\n const group = await groupsGet(id);\n checkOwnership(context, permission, group);\n validateGroupAccess(context, permission, group);\n\n return group;\n },\n listGroups: async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n const permission = await checkPermissions(\"r\");\n\n const response = await groupsList({\n ...(params || {}),\n where: {\n ...(where || {}),\n tenant: tenant || getTenant().id,\n locale: locale || getLocale().code\n }\n });\n\n return response.filter(group => {\n if (!validateOwnership(context, permission, group)) {\n return false;\n }\n return validateGroupAccess(context, permission, group);\n });\n },\n createGroup: async inputData => {\n await checkPermissions(\"w\");\n\n const createdData = new CreateContentModelGroupModel().populate({\n ...inputData,\n slug: inputData.slug ? toSlug(inputData.slug) : \"\",\n description: inputData.description || \"\"\n });\n await createdData.validate();\n const input: CmsGroupCreateInput & { slug: string; description: string } =\n await createdData.toJSON();\n\n const identity = getIdentity();\n\n const id = mdbid();\n const group: CmsGroup = {\n ...input,\n id,\n tenant: getTenant().id,\n locale: getLocale().code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n webinyVersion: context.WEBINY_VERSION\n };\n try {\n await onBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n group\n });\n\n clearGroupsCache();\n\n await onAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not save data model group.\",\n ex.code || \"ERROR_ON_CREATE\",\n {\n ...(ex.data || {}),\n group,\n input\n }\n );\n }\n },\n updateGroup: async (id, inputData) => {\n const permission = await checkPermissions(\"w\");\n\n const original = await groupsGet(id);\n\n checkOwnership(context, permission, original);\n\n const input = new UpdateContentModelGroupModel().populate(inputData);\n await input.validate();\n\n const updatedDataJson: Partial<CmsGroup> = await input.toJSON({\n onlyDirty: true\n });\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(updatedDataJson).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...updatedDataJson,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n group\n });\n clearGroupsCache();\n\n await onAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n },\n deleteGroup: async id => {\n const permission = await checkPermissions(\"d\");\n\n const group = await groupsGet(id);\n\n checkOwnership(context, permission, group);\n\n try {\n await onBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n clearGroupsCache();\n\n await onAfterDelete.publish({\n group\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n }\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["createModelGroupsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","dataLoaders","listGroups","DataLoader","tenant","id","locale","code","pluginsGroups","getGroupsAsPlugins","map","group","groups","list","where","concat","clearGroupsCache","loader","Object","values","clearAll","plugins","byType","CmsGroupPlugin","type","filter","plugin","t","l","contentModelGroup","webinyVersion","WEBINY_VERSION","checkPermissions","check","baseCheckPermissions","rwd","getGroupViaDataLoader","load","find","g","NotFoundError","listGroupsViaDataLoader","ex","WebinyError","message","data","onGroupBeforeCreate","createTopic","onGroupAfterCreate","onGroupCreateError","onGroupBeforeUpdate","onGroupAfterUpdate","onGroupUpdateError","onGroupBeforeDelete","onGroupAfterDelete","onGroupDeleteError","assignBeforeGroupCreate","assignBeforeGroupUpdate","assignBeforeGroupDelete","getGroup","permission","checkOwnership","validateGroupAccess","response","validateOwnership","createGroup","input","result","createGroupCreateValidation","safeParseAsync","success","createZodError","error","identity","mdbid","createdOn","Date","toISOString","savedOn","createdBy","displayName","publish","create","updateGroup","original","createGroupUpdateValidation","keys","length","updatedGroup","update","deleteGroup","delete","onBeforeGroupCreate","onAfterGroupCreate","onBeforeGroupUpdate","onAfterGroupUpdate","onBeforeGroupDelete","onAfterGroupDelete","benchmark","measure"],"sources":["contentModelGroup.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\n/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsGroupContext,\n CmsGroupListParams,\n CmsGroupPermission,\n CmsGroup,\n CmsContext,\n HeadlessCmsStorageOperations,\n OnGroupBeforeCreateTopicParams,\n OnGroupAfterCreateTopicParams,\n OnGroupBeforeUpdateTopicParams,\n OnGroupAfterUpdateTopicParams,\n OnGroupBeforeDeleteTopicParams,\n OnGroupAfterDeleteTopicParams,\n OnGroupCreateErrorTopicParams,\n OnGroupUpdateErrorTopicParams,\n OnGroupDeleteErrorTopicParams\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeGroupUpdate } from \"./contentModelGroup/beforeUpdate\";\nimport { assignBeforeGroupCreate } from \"./contentModelGroup/beforeCreate\";\nimport { assignBeforeGroupDelete } from \"./contentModelGroup/beforeDelete\";\nimport { checkPermissions as baseCheckPermissions } from \"~/utils/permissions\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { validateGroupAccess } from \"~/utils/access\";\nimport {\n createGroupCreateValidation,\n createGroupUpdateValidation\n} from \"~/crud/contentModelGroup/validation\";\nimport { createZodError } from \"@webiny/utils\";\n\nexport interface CreateModelGroupsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelGroupsCrud = (params: CreateModelGroupsCrudParams): CmsGroupContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const dataLoaders = {\n listGroups: new DataLoader(async () => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const pluginsGroups = getGroupsAsPlugins().map(group => {\n return {\n ...group,\n tenant: group.tenant || tenant,\n locale: group.locale || locale\n };\n });\n\n const groups = await storageOperations.groups.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n\n return [groups.concat(pluginsGroups)];\n })\n };\n\n const clearGroupsCache = (): void => {\n for (const loader of Object.values(dataLoaders)) {\n loader.clearAll();\n }\n };\n\n const getGroupsAsPlugins = (): CmsGroup[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n /**\n * We need to filter out groups that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModelGroup;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModelGroup,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const checkPermissions = (check: string): Promise<CmsGroupPermission> => {\n return baseCheckPermissions(context, \"cms.contentModelGroup\", { rwd: check });\n };\n\n const getGroupViaDataLoader = async (id: string) => {\n const groups = await dataLoaders.listGroups.load(\"listGroups\");\n\n const group = groups.find(g => g.id === id);\n\n if (!group) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n return group;\n };\n\n const listGroupsViaDataLoader = async (params: CmsGroupListParams) => {\n const { where } = params || {};\n\n try {\n return await dataLoaders.listGroups.load(\"listGroups\");\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"LIST_ERROR\", {\n ...(ex.data || {}),\n where\n });\n }\n };\n\n /**\n * Create\n */\n const onGroupBeforeCreate =\n createTopic<OnGroupBeforeCreateTopicParams>(\"cms.onGroupBeforeCreate\");\n const onGroupAfterCreate = createTopic<OnGroupAfterCreateTopicParams>(\"cms.onGroupAfterCreate\");\n const onGroupCreateError = createTopic<OnGroupCreateErrorTopicParams>(\"cms.onGroupCreateError\");\n /**\n * Update\n */\n const onGroupBeforeUpdate =\n createTopic<OnGroupBeforeUpdateTopicParams>(\"cms.onGroupBeforeUpdate\");\n const onGroupAfterUpdate = createTopic<OnGroupAfterUpdateTopicParams>(\"cms.onGroupAfterUpdate\");\n const onGroupUpdateError = createTopic<OnGroupUpdateErrorTopicParams>(\"cms.onGroupUpdateError\");\n /**\n * Delete\n */\n const onGroupBeforeDelete =\n createTopic<OnGroupBeforeDeleteTopicParams>(\"cms.onGroupBeforeDelete\");\n const onGroupAfterDelete = createTopic<OnGroupAfterDeleteTopicParams>(\"cms.onGroupAfterDelete\");\n const onGroupDeleteError = createTopic<OnGroupDeleteErrorTopicParams>(\"cms.onGroupDeleteError\");\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeGroupCreate({\n onGroupBeforeCreate,\n plugins: context.plugins,\n storageOperations\n });\n assignBeforeGroupUpdate({\n onGroupBeforeUpdate,\n plugins: context.plugins\n });\n assignBeforeGroupDelete({\n onGroupBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n /**\n * CRUD Methods\n */\n const getGroup: CmsGroupContext[\"getGroup\"] = async id => {\n const permission = await checkPermissions(\"r\");\n\n const group = await getGroupViaDataLoader(id);\n checkOwnership(context, permission, group);\n validateGroupAccess(context, permission, group);\n\n return group;\n };\n const listGroups: CmsGroupContext[\"listGroups\"] = async params => {\n const { where } = params || {};\n\n const { tenant, locale } = where || {};\n const permission = await checkPermissions(\"r\");\n\n const response = await listGroupsViaDataLoader({\n ...(params || {}),\n where: {\n ...(where || {}),\n tenant: tenant || getTenant().id,\n locale: locale || getLocale().code\n }\n });\n\n return response.filter(group => {\n if (!validateOwnership(context, permission, group)) {\n return false;\n }\n return validateGroupAccess(context, permission, group);\n });\n };\n const createGroup: CmsGroupContext[\"createGroup\"] = async input => {\n await checkPermissions(\"w\");\n\n const result = await createGroupCreateValidation().safeParseAsync(input);\n\n if (!result.success) {\n throw createZodError(result.error);\n }\n const data = result.data;\n\n const identity = getIdentity();\n\n const id = mdbid();\n const group: CmsGroup = {\n ...data,\n id,\n tenant: getTenant().id,\n locale: getLocale().code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n webinyVersion: context.WEBINY_VERSION\n };\n try {\n await onGroupBeforeCreate.publish({\n group\n });\n\n const result = await storageOperations.groups.create({\n group\n });\n\n clearGroupsCache();\n\n await onGroupAfterCreate.publish({\n group: result\n });\n\n return group;\n } catch (ex) {\n await onGroupCreateError.publish({\n input,\n group,\n error: ex\n });\n throw new WebinyError(\n ex.message || \"Could not save data model group.\",\n ex.code || \"ERROR_ON_CREATE\",\n {\n ...(ex.data || {}),\n group,\n input\n }\n );\n }\n };\n const updateGroup: CmsGroupContext[\"updateGroup\"] = async (id, input) => {\n const permission = await checkPermissions(\"w\");\n\n const original = await getGroupViaDataLoader(id);\n\n checkOwnership(context, permission, original);\n\n const result = await createGroupUpdateValidation().safeParseAsync(input);\n\n if (!result.success) {\n throw createZodError(result.error);\n }\n const data = result.data;\n\n /**\n * No need to continue if no values were changed\n */\n if (Object.keys(data).length === 0) {\n return original;\n }\n\n const group: CmsGroup = {\n ...original,\n ...data,\n locale: getLocale().code,\n tenant: getTenant().id,\n savedOn: new Date().toISOString()\n };\n\n try {\n await onGroupBeforeUpdate.publish({\n original,\n group\n });\n\n const updatedGroup = await storageOperations.groups.update({\n group\n });\n clearGroupsCache();\n\n await onGroupAfterUpdate.publish({\n original,\n group: updatedGroup\n });\n\n return updatedGroup;\n } catch (ex) {\n await onGroupUpdateError.publish({\n input,\n original,\n group,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code || \"UPDATE_ERROR\", {\n error: ex,\n original,\n group,\n input\n });\n }\n };\n const deleteGroup: CmsGroupContext[\"deleteGroup\"] = async id => {\n const permission = await checkPermissions(\"d\");\n\n const group = await getGroupViaDataLoader(id);\n\n checkOwnership(context, permission, group);\n\n try {\n await onGroupBeforeDelete.publish({\n group\n });\n\n await storageOperations.groups.delete({ group });\n clearGroupsCache();\n\n await onGroupAfterDelete.publish({\n group\n });\n } catch (ex) {\n await onGroupDeleteError.publish({\n group,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code || \"DELETE_ERROR\", {\n ...(ex.data || {}),\n id\n });\n }\n\n return true;\n };\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeGroupCreate: onGroupBeforeCreate,\n onAfterGroupCreate: onGroupAfterCreate,\n onBeforeGroupUpdate: onGroupBeforeUpdate,\n onAfterGroupUpdate: onGroupAfterUpdate,\n onBeforeGroupDelete: onGroupBeforeDelete,\n onAfterGroupDelete: onGroupAfterDelete,\n /**\n * Released in 5.34.0\n */\n onGroupBeforeCreate,\n onGroupAfterCreate,\n onGroupCreateError,\n onGroupBeforeUpdate,\n onGroupAfterUpdate,\n onGroupUpdateError,\n onGroupBeforeDelete,\n onGroupAfterDelete,\n onGroupDeleteError,\n clearGroupsCache,\n getGroup: async id => {\n return context.benchmark.measure(\"headlessCms.crud.groups.getGroup\", async () => {\n return getGroup(id);\n });\n },\n listGroups: async params => {\n return context.benchmark.measure(\"headlessCms.crud.groups.listGroups\", async () => {\n return listGroups(params);\n });\n },\n createGroup: async input => {\n return context.benchmark.measure(\"headlessCms.crud.groups.createGroup\", async () => {\n return createGroup(input);\n });\n },\n updateGroup: async (id, input) => {\n return context.benchmark.measure(\"headlessCms.crud.groups.updateGroup\", async () => {\n return updateGroup(id, input);\n });\n },\n deleteGroup: async id => {\n return context.benchmark.measure(\"headlessCms.crud.groups.deleteGroup\", async () => {\n return deleteGroup(id);\n });\n }\n };\n};\n"],"mappings":"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"}