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