@webiny/api-headless-cms 0.0.0-unstable.d7f521b032 → 0.0.0-unstable.de38392959

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