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

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