@webiny/api-headless-cms 5.37.8 → 5.38.0-beta.1

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 (308) hide show
  1. package/constants.js +3 -1
  2. package/context.js +10 -17
  3. package/context.js.map +1 -1
  4. package/crud/contentEntry/afterDelete.js +3 -1
  5. package/crud/contentEntry/beforeCreate.js +3 -1
  6. package/crud/contentEntry/beforeUpdate.js +3 -1
  7. package/crud/contentEntry/entryDataValidation.d.ts +4 -2
  8. package/crud/contentEntry/entryDataValidation.js +220 -47
  9. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  10. package/crud/contentEntry/markLockedFields.js +3 -1
  11. package/crud/contentEntry/referenceFieldsMapping.d.ts +6 -0
  12. package/crud/contentEntry/referenceFieldsMapping.js +118 -97
  13. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  14. package/crud/contentEntry/searchableFields.js +5 -3
  15. package/crud/contentEntry/searchableFields.js.map +1 -1
  16. package/crud/contentEntry.crud.js +68 -64
  17. package/crud/contentEntry.crud.js.map +1 -1
  18. package/crud/contentModel/beforeCreate.d.ts +1 -1
  19. package/crud/contentModel/beforeCreate.js +11 -9
  20. package/crud/contentModel/beforeCreate.js.map +1 -1
  21. package/crud/contentModel/beforeDelete.js +3 -1
  22. package/crud/contentModel/beforeUpdate.d.ts +1 -1
  23. package/crud/contentModel/beforeUpdate.js +3 -6
  24. package/crud/contentModel/beforeUpdate.js.map +1 -1
  25. package/crud/contentModel/compatibility/modelApiName.js +3 -1
  26. package/crud/contentModel/contentModelManagerFactory.js +3 -1
  27. package/crud/contentModel/createFieldStorageId.js +3 -1
  28. package/crud/contentModel/defaultFields.js +3 -1
  29. package/crud/contentModel/ensureTypeTag.d.ts +5 -0
  30. package/crud/contentModel/ensureTypeTag.js +21 -0
  31. package/crud/contentModel/ensureTypeTag.js.map +1 -0
  32. package/crud/contentModel/fields/descriptionField.js +3 -1
  33. package/crud/contentModel/fields/imageField.js +3 -1
  34. package/crud/contentModel/fields/titleField.js +3 -1
  35. package/crud/contentModel/listModelsFromDatabase.d.ts +10 -0
  36. package/crud/contentModel/listModelsFromDatabase.js +39 -0
  37. package/crud/contentModel/listModelsFromDatabase.js.map +1 -0
  38. package/crud/contentModel/validate/endingAllowed.js +3 -1
  39. package/crud/contentModel/validate/isModelEndingAllowed.js +4 -2
  40. package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -1
  41. package/crud/contentModel/validate/modelId.js +3 -1
  42. package/crud/contentModel/validate/pluralApiName.js +3 -1
  43. package/crud/contentModel/validate/singularApiName.js +3 -1
  44. package/crud/contentModel/validateModel.js +3 -1
  45. package/crud/contentModel/validateModel.js.map +1 -1
  46. package/crud/contentModel/validateModelFields.js +3 -1
  47. package/crud/contentModel/validation.d.ts +339 -58
  48. package/crud/contentModel/validation.js +71 -11
  49. package/crud/contentModel/validation.js.map +1 -1
  50. package/crud/contentModel.crud.js +80 -156
  51. package/crud/contentModel.crud.js.map +1 -1
  52. package/crud/contentModelGroup/beforeCreate.d.ts +1 -1
  53. package/crud/contentModelGroup/beforeCreate.js +15 -1
  54. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  55. package/crud/contentModelGroup/beforeDelete.js +3 -1
  56. package/crud/contentModelGroup/beforeUpdate.js +3 -1
  57. package/crud/contentModelGroup/listGroupsFromDatabase.d.ts +8 -0
  58. package/crud/contentModelGroup/listGroupsFromDatabase.js +22 -0
  59. package/crud/contentModelGroup/listGroupsFromDatabase.js.map +1 -0
  60. package/crud/contentModelGroup/validation.d.ts +9 -6
  61. package/crud/contentModelGroup/validation.js +5 -2
  62. package/crud/contentModelGroup/validation.js.map +1 -1
  63. package/crud/contentModelGroup.crud.js +89 -110
  64. package/crud/contentModelGroup.crud.js.map +1 -1
  65. package/crud/system.crud.js +4 -7
  66. package/crud/system.crud.js.map +1 -1
  67. package/export/crud/exporting.d.ts +3 -0
  68. package/export/crud/exporting.js +50 -0
  69. package/export/crud/exporting.js.map +1 -0
  70. package/export/crud/importing.d.ts +3 -0
  71. package/export/crud/importing.js +79 -0
  72. package/export/crud/importing.js.map +1 -0
  73. package/export/crud/imports/importData.d.ts +14 -0
  74. package/export/crud/imports/importData.js +25 -0
  75. package/export/crud/imports/importData.js.map +1 -0
  76. package/export/crud/imports/importGroups.d.ts +8 -0
  77. package/export/crud/imports/importGroups.js +99 -0
  78. package/export/crud/imports/importGroups.js.map +1 -0
  79. package/export/crud/imports/importModels.d.ts +8 -0
  80. package/export/crud/imports/importModels.js +134 -0
  81. package/export/crud/imports/importModels.js.map +1 -0
  82. package/export/crud/imports/validateGroups.d.ts +8 -0
  83. package/export/crud/imports/validateGroups.js +106 -0
  84. package/export/crud/imports/validateGroups.js.map +1 -0
  85. package/export/crud/imports/validateInput.d.ts +19 -0
  86. package/export/crud/imports/validateInput.js +49 -0
  87. package/export/crud/imports/validateInput.js.map +1 -0
  88. package/export/crud/imports/validateModels.d.ts +9 -0
  89. package/export/crud/imports/validateModels.js +204 -0
  90. package/export/crud/imports/validateModels.js.map +1 -0
  91. package/export/crud/index.d.ts +4 -0
  92. package/export/crud/index.js +15 -0
  93. package/export/crud/index.js.map +1 -0
  94. package/export/crud/sanitize.d.ts +4 -0
  95. package/export/crud/sanitize.js +35 -0
  96. package/export/crud/sanitize.js.map +1 -0
  97. package/export/graphql/index.d.ts +3 -0
  98. package/export/graphql/index.js +188 -0
  99. package/export/graphql/index.js.map +1 -0
  100. package/export/index.d.ts +2 -0
  101. package/export/index.js +29 -0
  102. package/export/index.js.map +1 -0
  103. package/export/types.d.ts +111 -0
  104. package/export/types.js +22 -0
  105. package/export/types.js.map +1 -0
  106. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +3 -1
  107. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +3 -1
  108. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +3 -1
  109. package/fieldConverters/index.js +3 -1
  110. package/graphql/buildSchemaPlugins.js +3 -1
  111. package/graphql/checkEndpointAccess.js +3 -1
  112. package/graphql/createExecutableSchema.js +3 -1
  113. package/graphql/createRequestBody.js +3 -1
  114. package/graphql/formatErrorPayload.js +3 -1
  115. package/graphql/generateSchema.js +3 -1
  116. package/graphql/getSchema.d.ts +0 -1
  117. package/graphql/getSchema.js +23 -13
  118. package/graphql/getSchema.js.map +1 -1
  119. package/graphql/graphQLHandlerFactory.js +3 -1
  120. package/graphql/handleRequest.js +3 -5
  121. package/graphql/handleRequest.js.map +1 -1
  122. package/graphql/index.d.ts +1 -1
  123. package/graphql/index.js +4 -2
  124. package/graphql/index.js.map +1 -1
  125. package/graphql/schema/baseContentSchema.js +3 -1
  126. package/graphql/schema/baseSchema.d.ts +2 -3
  127. package/graphql/schema/baseSchema.js +58 -2
  128. package/graphql/schema/baseSchema.js.map +1 -1
  129. package/graphql/schema/contentEntries.js +4 -2
  130. package/graphql/schema/contentEntries.js.map +1 -1
  131. package/graphql/schema/contentModelGroups.js +4 -1
  132. package/graphql/schema/contentModelGroups.js.map +1 -1
  133. package/graphql/schema/contentModels.js +5 -5
  134. package/graphql/schema/contentModels.js.map +1 -1
  135. package/graphql/schema/createFieldResolvers.js +3 -1
  136. package/graphql/schema/createFieldTypePluginRecords.js +3 -1
  137. package/graphql/schema/createManageResolvers.js +7 -1
  138. package/graphql/schema/createManageResolvers.js.map +1 -1
  139. package/graphql/schema/createManageSDL.js +8 -4
  140. package/graphql/schema/createManageSDL.js.map +1 -1
  141. package/graphql/schema/createPreviewResolvers.js +3 -1
  142. package/graphql/schema/createReadResolvers.js +3 -1
  143. package/graphql/schema/createReadSDL.js +3 -1
  144. package/graphql/schema/resolvers/commonFieldResolvers.js +3 -1
  145. package/graphql/schema/resolvers/manage/resolveCreate.d.ts +2 -1
  146. package/graphql/schema/resolvers/manage/resolveCreate.js +4 -2
  147. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  148. package/graphql/schema/resolvers/manage/resolveCreateFrom.d.ts +2 -1
  149. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +4 -2
  150. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  151. package/graphql/schema/resolvers/manage/resolveDelete.js +3 -1
  152. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +3 -1
  153. package/graphql/schema/resolvers/manage/resolveGet.js +3 -1
  154. package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -1
  155. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -1
  156. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +3 -1
  157. package/graphql/schema/resolvers/manage/resolveList.js +3 -1
  158. package/graphql/schema/resolvers/manage/resolveMove.js +3 -1
  159. package/graphql/schema/resolvers/manage/resolvePublish.js +3 -1
  160. package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -1
  161. package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -1
  162. package/graphql/schema/resolvers/manage/resolveUpdate.d.ts +2 -1
  163. package/graphql/schema/resolvers/manage/resolveUpdate.js +4 -2
  164. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  165. package/graphql/schema/resolvers/manage/resolveValidate.d.ts +8 -0
  166. package/graphql/schema/resolvers/manage/resolveValidate.js +20 -0
  167. package/graphql/schema/resolvers/manage/resolveValidate.js.map +1 -0
  168. package/graphql/schema/resolvers/preview/resolveGet.js +3 -1
  169. package/graphql/schema/resolvers/preview/resolveList.js +3 -1
  170. package/graphql/schema/resolvers/read/resolveGet.js +3 -1
  171. package/graphql/schema/resolvers/read/resolveList.js +3 -1
  172. package/graphql/schema/schemaPlugins.js +3 -1
  173. package/graphql/system.js +3 -1
  174. package/graphqlFields/boolean.js +3 -1
  175. package/graphqlFields/datetime.js +4 -3
  176. package/graphqlFields/datetime.js.map +1 -1
  177. package/graphqlFields/dynamicZone/dynamicZoneField.js +29 -6
  178. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
  179. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +3 -1
  180. package/graphqlFields/dynamicZone/index.js +3 -1
  181. package/graphqlFields/file.js +3 -1
  182. package/graphqlFields/helpers.d.ts +0 -1
  183. package/graphqlFields/helpers.js +6 -18
  184. package/graphqlFields/helpers.js.map +1 -1
  185. package/graphqlFields/index.js +3 -1
  186. package/graphqlFields/longText.js +14 -3
  187. package/graphqlFields/longText.js.map +1 -1
  188. package/graphqlFields/number.js +3 -1
  189. package/graphqlFields/object.js +5 -17
  190. package/graphqlFields/object.js.map +1 -1
  191. package/graphqlFields/ref.js +4 -2
  192. package/graphqlFields/ref.js.map +1 -1
  193. package/graphqlFields/richText.js +3 -1
  194. package/graphqlFields/text.js +3 -1
  195. package/index.d.ts +1 -1
  196. package/index.js +5 -2
  197. package/index.js.map +1 -1
  198. package/modelManager/DefaultCmsModelManager.js +3 -1
  199. package/modelManager/index.js +3 -1
  200. package/package.json +18 -19
  201. package/parameters/context.js +3 -1
  202. package/parameters/header.js +3 -1
  203. package/parameters/index.js +3 -1
  204. package/parameters/manual.js +3 -1
  205. package/parameters/path.js +3 -1
  206. package/plugins/CmsGraphQLSchemaPlugin.js +3 -1
  207. package/plugins/CmsGraphQLSchemaSorterPlugin.js +3 -1
  208. package/plugins/CmsGroupPlugin.d.ts +6 -3
  209. package/plugins/CmsGroupPlugin.js +7 -2
  210. package/plugins/CmsGroupPlugin.js.map +1 -1
  211. package/plugins/CmsModelFieldConverterPlugin.js +3 -1
  212. package/plugins/CmsModelPlugin.d.ts +2 -2
  213. package/plugins/CmsModelPlugin.js +6 -2
  214. package/plugins/CmsModelPlugin.js.map +1 -1
  215. package/plugins/CmsParametersPlugin.js +3 -1
  216. package/plugins/StorageOperationsCmsModelPlugin.js +3 -1
  217. package/plugins/StorageTransformPlugin.js +3 -1
  218. package/plugins/index.js +3 -1
  219. package/storage/default.js +3 -1
  220. package/storage/object.js +3 -1
  221. package/types.d.ts +62 -230
  222. package/types.js +3 -17
  223. package/types.js.map +1 -1
  224. package/utils/access.js +3 -1
  225. package/utils/caching/Cache.d.ts +2 -0
  226. package/utils/caching/Cache.js +53 -0
  227. package/utils/caching/Cache.js.map +1 -0
  228. package/utils/caching/CacheKey.d.ts +3 -0
  229. package/utils/caching/CacheKey.js +41 -0
  230. package/utils/caching/CacheKey.js.map +1 -0
  231. package/utils/caching/index.d.ts +2 -0
  232. package/utils/caching/index.js +29 -0
  233. package/utils/caching/index.js.map +1 -0
  234. package/utils/caching/types.d.ts +9 -0
  235. package/utils/caching/types.js +7 -0
  236. package/utils/caching/types.js.map +1 -0
  237. package/utils/converters/Converter.js +3 -1
  238. package/utils/converters/ConverterCollection.js +3 -1
  239. package/utils/converters/valueKeyStorageConverter.js +3 -1
  240. package/utils/createTypeFromFields.js +6 -1
  241. package/utils/createTypeFromFields.js.map +1 -1
  242. package/utils/createTypeName.js +3 -1
  243. package/utils/entryStorage.js +3 -1
  244. package/utils/filterAsync.js +3 -1
  245. package/utils/getBaseFieldType.js +3 -1
  246. package/utils/getEntryDescription.js +3 -1
  247. package/utils/getEntryImage.js +3 -1
  248. package/utils/getEntryTitle.js +3 -1
  249. package/utils/getSchemaFromFieldPlugins.js +3 -1
  250. package/utils/incrementEntryIdVersion.js +3 -1
  251. package/utils/index.d.ts +1 -0
  252. package/utils/index.js +18 -0
  253. package/utils/index.js.map +1 -0
  254. package/utils/permissions/EntriesPermissions.js +3 -1
  255. package/utils/permissions/ModelGroupsPermissions.js +3 -1
  256. package/utils/permissions/ModelsPermissions.js +3 -1
  257. package/utils/renderFields.js +3 -1
  258. package/utils/renderGetFilterFields.js +3 -1
  259. package/utils/renderInputFields.js +3 -1
  260. package/utils/renderListFilterFields.js +3 -1
  261. package/utils/renderSortEnum.js +3 -1
  262. package/utils/toSlug.js +3 -1
  263. package/validators/dateGte.js +3 -1
  264. package/validators/dateLte.js +3 -1
  265. package/validators/gte.js +3 -1
  266. package/validators/in.js +3 -1
  267. package/validators/index.js +4 -3
  268. package/validators/index.js.map +1 -1
  269. package/validators/lte.js +3 -1
  270. package/validators/maxLength.js +3 -1
  271. package/validators/minLength.js +3 -1
  272. package/validators/pattern.js +3 -1
  273. package/validators/patternPlugins/email.js +3 -1
  274. package/validators/patternPlugins/index.js +3 -1
  275. package/validators/patternPlugins/lowerCase.js +3 -1
  276. package/validators/patternPlugins/lowerCaseSpace.js +3 -1
  277. package/validators/patternPlugins/upperCase.js +3 -1
  278. package/validators/patternPlugins/upperCaseSpace.js +3 -1
  279. package/validators/patternPlugins/url.js +3 -1
  280. package/validators/required.js +3 -1
  281. package/validators/timeGte.js +3 -1
  282. package/validators/timeLte.js +3 -1
  283. package/validators/unique.js +4 -2
  284. package/validators/unique.js.map +1 -1
  285. package/crud/contentModel/afterCreate.d.ts +0 -8
  286. package/crud/contentModel/afterCreate.js +0 -16
  287. package/crud/contentModel/afterCreate.js.map +0 -1
  288. package/crud/contentModel/afterCreateFrom.d.ts +0 -8
  289. package/crud/contentModel/afterCreateFrom.js +0 -16
  290. package/crud/contentModel/afterCreateFrom.js.map +0 -1
  291. package/crud/contentModel/afterDelete.d.ts +0 -8
  292. package/crud/contentModel/afterDelete.js +0 -16
  293. package/crud/contentModel/afterDelete.js.map +0 -1
  294. package/crud/contentModel/afterUpdate.d.ts +0 -8
  295. package/crud/contentModel/afterUpdate.js +0 -16
  296. package/crud/contentModel/afterUpdate.js.map +0 -1
  297. package/crud/contentModel/validateLayout.d.ts +0 -2
  298. package/crud/contentModel/validateLayout.js +0 -28
  299. package/crud/contentModel/validateLayout.js.map +0 -1
  300. package/crud/settings.crud.d.ts +0 -12
  301. package/crud/settings.crud.js +0 -62
  302. package/crud/settings.crud.js.map +0 -1
  303. package/utils/permissions/SettingsPermissions.d.ts +0 -4
  304. package/utils/permissions/SettingsPermissions.js +0 -9
  305. package/utils/permissions/SettingsPermissions.js.map +0 -1
  306. package/validators/dynamicZone.d.ts +0 -2
  307. package/validators/dynamicZone.js +0 -20
  308. package/validators/dynamicZone.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_dataloader","_interopRequireDefault","require","_error","_handlerGraphql","_contentModelManagerFactory","_pubsub","_beforeCreate","_beforeUpdate","_beforeDelete","_afterCreate","_afterUpdate","_afterDelete","_afterCreateFrom","_CmsModelPlugin","_filterAsync","_validation","_utils","_defaultFields","_modelApiName","_excluded","ensureTypeTag","model","tags","some","tag","startsWith","push","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","modelsPermissions","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","_objectSpread2","default","singularApiName","ensureSingularApiName","pluralApiName","ensurePluralApiName","listModelsCache","Map","clearModelsCache","loader","Object","values","clearAll","clear","managers","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","rwd","ensure","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","modelTenant","modelLocale","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","_getIdentity","key","JSON","stringify","identity","security","isAuthorizationEnabled","undefined","has","cachedModelList","benchmark","measure","filterAsync","ownsModel","owns","createdBy","throw","canAccessModel","getModel","ensureCanAccessModel","getModelManager","target","m","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","createModel","input","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","_removeUndefinedValue","removeUndefinedValues","data","defaultFields","_objectWithoutProperties2","assignModelDefaultFields","group","withoutAuthorization","cms","getGroup","titleFieldId","descriptionFieldId","imageFieldId","description","name","displayName","createdOn","Date","toISOString","savedOn","lockedFields","publish","createdModel","create","ex","updateModel","original","createModelUpdateValidation","keys","length","groupId","groupData","resultModel","update","updateModelDirect","initialModel","createModelFrom","createModelCreateFromValidation","i18n","groups","icon","deleteModel","delete","WebinyError","message","initializeModel","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","userInput","getEntryManager","getManagers","getEntryManagers","exports"],"sources":["contentModel.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelGroup,\n CmsModelManager,\n CmsModelUpdateInput,\n HeadlessCmsStorageOperations,\n OnModelAfterCreateFromTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelBeforeCreateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelDeleteErrorTopicParams,\n OnModelInitializeParams,\n OnModelUpdateErrorTopicParams\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError, removeUndefinedValues } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport {\n ensurePluralApiName,\n ensureSingularApiName\n} from \"./contentModel/compatibility/modelApiName\";\nimport { ModelsPermissions } from \"~/utils/permissions/ModelsPermissions\";\n\n/**\n * Given a model, return an array of tags ensuring the `type` tag is set.\n */\nconst ensureTypeTag = (model: Pick<CmsModel, \"tags\">) => {\n // Let's make sure we have a `type` tag assigned.\n // If `type` tag is not set, set it to a default one (`model`).\n const tags = model.tags || [];\n if (!tags.some(tag => tag.startsWith(\"type:\"))) {\n tags.push(\"type:model\");\n }\n\n return tags;\n};\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n modelsPermissions: ModelsPermissions;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, modelsPermissions, context } =\n params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code,\n /**\n * TODO: remove in v5.36.0\n * This is for backward compatibility while migrations are not yet executed.\n */\n singularApiName: ensureSingularApiName(model),\n pluralApiName: ensurePluralApiName(model)\n };\n })\n ];\n })\n };\n\n const listModelsCache = new Map<string, Promise<CmsModel[]>>();\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\n listModelsCache.clear();\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (rwd: string) => {\n return modelsPermissions.ensure({ rwd });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: modelTenant, locale: modelLocale } = plugin.contentModel;\n if (modelTenant && modelTenant !== tenant) {\n return false;\n } else if (modelLocale && modelLocale !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(plugin.contentModel),\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string) => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels: CmsModel[] = await loaders.listModels.load(\"listModels\");\n const pluginsModels = getModelsAsPlugins();\n return databaseModels.concat(pluginsModels);\n };\n /**\n * The list models cache is a key -> Promise pair so it the listModels() can be called multiple times but executed only once.\n */\n const listModels = async () => {\n /**\n * Maybe we can cache based on permissions, not the identity id?\n *\n * TODO: @adrian please check if possible.\n */\n const key = JSON.stringify({\n tenant: getTenant().id,\n locale: getLocale().code,\n identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined\n });\n if (listModelsCache.has(key)) {\n return listModelsCache.get(key) as Promise<CmsModel[]>;\n }\n const cachedModelList = async () => {\n return context.benchmark.measure(\"headlessCms.crud.models.listModels\", async () => {\n const models = await modelsList();\n return filterAsync(models, async model => {\n const ownsModel = await modelsPermissions.ensure(\n { owns: model.createdBy },\n { throw: false }\n );\n\n if (!ownsModel) {\n return false;\n }\n\n return modelsPermissions.canAccessModel({\n model\n });\n });\n });\n };\n\n listModelsCache.set(key, cachedModelList());\n\n return listModelsCache.get(key) as Promise<CmsModel[]>;\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n return context.benchmark.measure(\"headlessCms.crud.models.getModel\", async () => {\n await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n await modelsPermissions.ensure({ owns: model.createdBy });\n await modelsPermissions.ensureCanAccessModel({\n model\n });\n\n return model;\n });\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n /**\n * Create\n */\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n const onModelCreateError = createTopic<OnModelCreateErrorTopicParams>(\"cms.onModelCreateError\");\n /**\n * Create from / clone\n */\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n const onModelCreateFromError = createTopic<OnModelCreateFromErrorParams>(\n \"cms.onModelCreateFromError\"\n );\n /**\n * Update\n */\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n const onModelUpdateError = createTopic<OnModelUpdateErrorTopicParams>(\"cms.onModelUpdateError\");\n /**\n * Delete\n */\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n const onModelDeleteError = createTopic<OnModelDeleteErrorTopicParams>(\"cms.onModelDeleteError\");\n /**\n * Initialize\n */\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n context,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n context\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n /**\n * CRUD methods\n */\n const createModel: CmsModelContext[\"createModel\"] = async input => {\n await checkModelPermissions(\"w\");\n\n const result = await createModelCreateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n /**\n * We need to extract the defaultFields because it is not for the CmsModel object.\n */\n const { defaultFields, ...data } = removeUndefinedValues(result.data);\n if (defaultFields) {\n assignModelDefaultFields(data);\n }\n\n const group = await context.security.withoutAuthorization(async () => {\n return context.cms.getGroup(data.group);\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...data,\n modelId: data.modelId || \"\",\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n titleFieldId: \"id\",\n descriptionFieldId: null,\n imageFieldId: null,\n description: data.description || \"\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeCreate.publish({\n input: data,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n clearModelsCache();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input: data,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input: data,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const updateModel: CmsModelContext[\"updateModel\"] = async (modelId, input) => {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const result = await createModelUpdateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n if (Object.keys(data).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModelGroup = {\n id: original.group.id,\n name: original.group.name\n };\n const groupId = data.group;\n if (groupId) {\n const groupData = await context.security.withoutAuthorization(async () => {\n return context.cms.getGroup(groupId);\n });\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${groupId}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const model: CmsModel = {\n ...original,\n ...data,\n titleFieldId:\n data.titleFieldId === undefined\n ? original.titleFieldId\n : (data.titleFieldId as string),\n descriptionFieldId:\n data.descriptionFieldId === undefined\n ? original.descriptionFieldId\n : data.descriptionFieldId,\n imageFieldId:\n data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,\n group,\n description: data.description || original.description,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n savedOn: new Date().toISOString()\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input: data,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input: data,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: data,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n };\n const updateModelDirect: CmsModelContext[\"updateModelDirect\"] = async params => {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n clearModelsCache();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const createModelFrom: CmsModelContext[\"createModelFrom\"] = async (modelId, input) => {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const result = await createModelCreateFromValidation().safeParseAsync({\n ...input,\n description: input.description || original.description\n });\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n const locale = await context.i18n.getLocale(data.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${data.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: data.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\",\n description: data.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeCreateFrom.publish({\n input: data,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n clearModelsCache();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input: data,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input: data,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const deleteModel: CmsModelContext[\"deleteModel\"] = async modelId => {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n try {\n await onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n clearModelsCache();\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n } catch (ex) {\n await onModelDeleteError.publish({\n model,\n error: ex\n });\n throw ex;\n }\n };\n const initializeModel: CmsModelContext[\"initializeModel\"] = async (modelId, data) => {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model, data });\n\n return true;\n };\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelCreateError,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelCreateFromError,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelUpdateError,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelDeleteError,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(input) {\n return context.benchmark.measure(\"headlessCms.crud.models.createModel\", async () => {\n return createModel(input);\n });\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.updateModelDirect\",\n async () => {\n return updateModelDirect(params);\n }\n );\n },\n async createModelFrom(modelId, userInput) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.createModelFrom\",\n async () => {\n return createModelFrom(modelId, userInput);\n }\n );\n },\n async updateModel(modelId, input) {\n return context.benchmark.measure(\"headlessCms.crud.models.updateModel\", async () => {\n return updateModel(modelId, input);\n });\n },\n async deleteModel(modelId) {\n return context.benchmark.measure(\"headlessCms.crud.models.deleteModel\", async () => {\n return deleteModel(modelId);\n });\n },\n async initializeModel(modelId, data) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.initializeModel\",\n async () => {\n return initializeModel(modelId, data);\n }\n );\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_handlerGraphql","_contentModelManagerFactory","_pubsub","_beforeCreate","_beforeUpdate","_beforeDelete","_CmsModelPlugin","_filterAsync","_validation","_utils","_defaultFields","_utils2","_ensureTypeTag","_listModelsFromDatabase","_excluded","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","modelsPermissions","context","listPluginModelsCache","createMemoryCache","listAllModelsCache","clearModelsCache","clear","managers","Map","updateManager","model","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","rwd","ensure","getModelsAsPlugins","tenant","locale","modelPlugins","plugins","byType","CmsModelPlugin","type","cacheKey","createCacheKey","models","map","contentModel","pluralApiName","singularApiName","savedOn","getOrSet","filter","plugin","modelTenant","modelLocale","_objectSpread2","default","tags","ensureTypeTag","webinyVersion","WEBINY_VERSION","getModelFromCache","listModels","find","m","NotFoundError","id","code","_getIdentity","pluginModels","identity","security","isAuthorizationEnabled","undefined","benchmark","measure","databaseModels","listModelsFromDatabase","concat","filterAsync","ownsModel","owns","createdBy","throw","canAccessModel","getModel","withoutAuthorization","ensureCanAccessModel","getEntryManager","target","has","get","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelBeforeUpdate","assignModelBeforeDelete","createModel","input","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","_removeUndefinedValue","removeUndefinedValues","data","defaultFields","_objectWithoutProperties2","assignModelDefaultFields","group","cms","getGroup","titleFieldId","descriptionFieldId","imageFieldId","description","name","displayName","createdOn","Date","toISOString","lockedFields","publish","createdModel","create","ex","updateModel","original","createModelUpdateValidation","Object","keys","length","groupId","groupData","resultModel","update","updateModelDirect","initialModel","createModelFrom","createModelCreateFromValidation","i18n","groups","icon","deleteModel","delete","WebinyError","message","initializeModel","userInput","getEntryManagers","exports"],"sources":["contentModel.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelGroup,\n CmsModelManager,\n CmsModelUpdateInput,\n HeadlessCmsStorageOperations,\n OnModelAfterCreateFromTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelBeforeCreateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelDeleteErrorTopicParams,\n OnModelInitializeParams,\n OnModelUpdateErrorTopicParams\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError, removeUndefinedValues } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport { ModelsPermissions } from \"~/utils/permissions/ModelsPermissions\";\nimport { createCacheKey, createMemoryCache } from \"~/utils\";\nimport { ensureTypeTag } from \"./contentModel/ensureTypeTag\";\nimport { listModelsFromDatabase } from \"~/crud/contentModel/listModelsFromDatabase\";\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n modelsPermissions: ModelsPermissions;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, modelsPermissions, context } =\n params;\n\n const listPluginModelsCache = createMemoryCache<CmsModel[]>();\n const listAllModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const clearModelsCache = (): void => {\n listAllModelsCache.clear();\n listPluginModelsCache.clear();\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = async (rwd: string) => {\n return modelsPermissions.ensure({ rwd });\n };\n\n const getModelsAsPlugins = (tenant: string, locale: string): CmsModel[] => {\n const modelPlugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n const cacheKey = createCacheKey({\n tenant,\n locale,\n models: modelPlugins.map(({ contentModel: model }) => {\n return `${model.modelId}#${model.pluralApiName}#${model.singularApiName}#${\n model.savedOn || \"unknown\"\n }`;\n })\n });\n return listPluginModelsCache.getOrSet(cacheKey, () => {\n return (\n modelPlugins\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: modelTenant, locale: modelLocale } = plugin.contentModel;\n if (modelTenant && modelTenant !== tenant) {\n return false;\n } else if (modelLocale && modelLocale !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(plugin.contentModel),\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n });\n };\n\n const getModelFromCache = async (modelId: string) => {\n const models = await listModels();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n /**\n * The list models cache is a key -> Promise pair so it the listModels() can be called multiple times but executed only once.\n */\n const listModels = async () => {\n /**\n * Maybe we can cache based on permissions, not the identity id?\n *\n * TODO: @adrian please check if possible.\n */\n const tenant = getTenant().id;\n const locale = getLocale().code;\n const pluginModels = getModelsAsPlugins(tenant, locale);\n const cacheKey = createCacheKey({\n tenant,\n locale,\n identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined,\n plugins: pluginModels.map(model => {\n return `${model.modelId}#${model.pluralApiName}#${model.singularApiName}#${\n model.savedOn || \"unknown\"\n }`;\n })\n });\n\n return listAllModelsCache.getOrSet(cacheKey, async () => {\n return context.benchmark.measure(\"headlessCms.crud.models.listModels\", async () => {\n const databaseModels = await listModelsFromDatabase(params);\n const models = databaseModels.concat(pluginModels);\n /**\n * Filter models based on permissions.\n */\n return filterAsync(models, async model => {\n const ownsModel = await modelsPermissions.ensure(\n { owns: model.createdBy },\n { throw: false }\n );\n\n if (!ownsModel) {\n return false;\n }\n\n return modelsPermissions.canAccessModel({\n model\n });\n });\n });\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n return context.benchmark.measure(\"headlessCms.crud.models.getModel\", async () => {\n await checkModelPermissions(\"r\");\n\n const model = await context.security.withoutAuthorization(async () => {\n return await getModelFromCache(modelId);\n });\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n await modelsPermissions.ensure({ owns: model.createdBy });\n await modelsPermissions.ensureCanAccessModel({\n model\n });\n\n return model;\n });\n };\n\n const getEntryManager: CmsModelContext[\"getEntryManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const model = await getModelFromCache(modelId);\n return await updateManager(context, model);\n };\n\n /**\n * Create\n */\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n const onModelCreateError = createTopic<OnModelCreateErrorTopicParams>(\"cms.onModelCreateError\");\n /**\n * Create from / clone\n */\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n const onModelCreateFromError = createTopic<OnModelCreateFromErrorParams>(\n \"cms.onModelCreateFromError\"\n );\n /**\n * Update\n */\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n const onModelUpdateError = createTopic<OnModelUpdateErrorTopicParams>(\"cms.onModelUpdateError\");\n /**\n * Delete\n */\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n const onModelDeleteError = createTopic<OnModelDeleteErrorTopicParams>(\"cms.onModelDeleteError\");\n /**\n * Initialize\n */\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n context,\n storageOperations\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n context\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n\n /**\n * CRUD methods\n */\n const createModel: CmsModelContext[\"createModel\"] = async input => {\n await checkModelPermissions(\"w\");\n\n const result = await createModelCreateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n /**\n * We need to extract the defaultFields because it is not for the CmsModel object.\n */\n const { defaultFields, ...data } = removeUndefinedValues(result.data);\n if (defaultFields) {\n assignModelDefaultFields(data);\n }\n\n const group = await context.cms.getGroup(data.group);\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...data,\n modelId: data.modelId || \"\",\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n titleFieldId: \"id\",\n descriptionFieldId: null,\n imageFieldId: null,\n description: data.description || \"\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeCreate.publish({\n input: data,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n clearModelsCache();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input: data,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input: data,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const updateModel: CmsModelContext[\"updateModel\"] = async (modelId, input) => {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const result = await createModelUpdateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n if (Object.keys(data).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModelGroup = {\n id: original.group.id,\n name: original.group.name\n };\n const groupId = data.group;\n if (groupId) {\n const groupData = await context.cms.getGroup(groupId);\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const model: CmsModel = {\n ...original,\n ...data,\n titleFieldId:\n data.titleFieldId === undefined\n ? original.titleFieldId\n : (data.titleFieldId as string),\n descriptionFieldId:\n data.descriptionFieldId === undefined\n ? original.descriptionFieldId\n : data.descriptionFieldId,\n imageFieldId:\n data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,\n group,\n description: data.description || original.description,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n savedOn: new Date().toISOString()\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input: data,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input: data,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: data,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n };\n const updateModelDirect: CmsModelContext[\"updateModelDirect\"] = async params => {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n clearModelsCache();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const createModelFrom: CmsModelContext[\"createModelFrom\"] = async (modelId, input) => {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const result = await createModelCreateFromValidation().safeParseAsync({\n ...input,\n description: input.description || original.description\n });\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n const locale = await context.i18n.getLocale(data.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${data.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: data.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\",\n description: data.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeCreateFrom.publish({\n input: data,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n clearModelsCache();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input: data,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input: data,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const deleteModel: CmsModelContext[\"deleteModel\"] = async modelId => {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n try {\n await onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n clearModelsCache();\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n } catch (ex) {\n await onModelDeleteError.publish({\n model,\n error: ex\n });\n throw ex;\n }\n };\n const initializeModel: CmsModelContext[\"initializeModel\"] = async (modelId, data) => {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model, data });\n\n return true;\n };\n return {\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelCreateError,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelCreateFromError,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelUpdateError,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelDeleteError,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(input) {\n return context.benchmark.measure(\"headlessCms.crud.models.createModel\", async () => {\n return createModel(input);\n });\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.updateModelDirect\",\n async () => {\n return updateModelDirect(params);\n }\n );\n },\n async createModelFrom(modelId, userInput) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.createModelFrom\",\n async () => {\n return createModelFrom(modelId, userInput);\n }\n );\n },\n async updateModel(modelId, input) {\n return context.benchmark.measure(\"headlessCms.crud.models.updateModel\", async () => {\n return updateModel(modelId, input);\n });\n },\n async deleteModel(modelId) {\n return context.benchmark.measure(\"headlessCms.crud.models.deleteModel\", async () => {\n return deleteModel(modelId);\n });\n },\n async initializeModel(modelId, data) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.initializeModel\",\n async () => {\n return initializeModel(modelId, data);\n }\n );\n },\n getEntryManager,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { OnGroupBeforeCreateTopicParams, HeadlessCmsStorageOperations } from "../../types";
1
+ import { HeadlessCmsStorageOperations, OnGroupBeforeCreateTopicParams } from "../../types";
2
2
  import { Topic } from "@webiny/pubsub/types";
3
3
  import { PluginsContainer } from "@webiny/plugins";
4
4
  interface AssignBeforeGroupCreateParams {
@@ -19,6 +19,18 @@ const assignBeforeGroupCreate = params => {
19
19
  const {
20
20
  group
21
21
  } = params;
22
+ if (group.id) {
23
+ const groups = await storageOperations.groups.list({
24
+ where: {
25
+ tenant: group.tenant,
26
+ locale: group.locale,
27
+ id: group.id
28
+ }
29
+ });
30
+ if (groups.length > 0) {
31
+ throw new _error.default(`Cms Group with the id "${group.id}" already exists.`, "ID_ALREADY_EXISTS");
32
+ }
33
+ }
22
34
  if (group.slug && group.slug.trim()) {
23
35
  const groups = await storageOperations.groups.list({
24
36
  where: {
@@ -51,4 +63,6 @@ const assignBeforeGroupCreate = params => {
51
63
  }
52
64
  });
53
65
  };
54
- exports.assignBeforeGroupCreate = assignBeforeGroupCreate;
66
+ exports.assignBeforeGroupCreate = assignBeforeGroupCreate;
67
+
68
+ //# sourceMappingURL=beforeCreate.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_toSlug","_CmsGroupPlugin","_utils","assignBeforeGroupCreate","params","onGroupBeforeCreate","plugins","storageOperations","subscribe","group","slug","trim","groups","list","where","tenant","locale","length","WebinyError","toSlug","name","generateAlphaNumericId","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","Error","exports"],"sources":["beforeCreate.ts"],"sourcesContent":["import { OnGroupBeforeCreateTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { toSlug } from \"~/utils/toSlug\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { generateAlphaNumericId } from \"@webiny/utils\";\n\ninterface AssignBeforeGroupCreateParams {\n onGroupBeforeCreate: Topic<OnGroupBeforeCreateTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupCreate = (params: AssignBeforeGroupCreateParams) => {\n const { onGroupBeforeCreate, plugins, storageOperations } = params;\n\n onGroupBeforeCreate.subscribe(async params => {\n const { group } = params;\n\n if (group.slug && group.slug.trim()) {\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug: group.slug\n }\n });\n if (groups.length > 0) {\n throw new WebinyError(\n `Cms Group with the slug \"${group.slug}\" already exists.`,\n \"SLUG_ALREADY_EXISTS\"\n );\n }\n } else {\n const slug = toSlug(group.name);\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug\n }\n });\n\n if (groups.length === 0) {\n group.slug = slug;\n } else {\n group.slug = `${slug}-${generateAlphaNumericId(8)}`;\n }\n }\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(\n `Cannot create \"${group.slug}\" content model group because one is already registered via a plugin.`\n );\n }\n });\n};\n"],"mappings":";;;;;;;AAGA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAOO,MAAMI,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC,OAAO;IAAEC;EAAkB,CAAC,GAAGH,MAAM;EAElEC,mBAAmB,CAACG,SAAS,CAAC,MAAMJ,MAAM,IAAI;IAC1C,MAAM;MAAEK;IAAM,CAAC,GAAGL,MAAM;IAExB,IAAIK,KAAK,CAACC,IAAI,IAAID,KAAK,CAACC,IAAI,CAACC,IAAI,CAAC,CAAC,EAAE;MACjC,MAAMC,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MAAM;UACpBC,MAAM,EAAEP,KAAK,CAACO,MAAM;UACpBN,IAAI,EAAED,KAAK,CAACC;QAChB;MACJ,CAAC,CAAC;MACF,IAAIE,MAAM,CAACK,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,IAAIC,cAAW,CAChB,4BAA2BT,KAAK,CAACC,IAAK,mBAAkB,EACzD,qBACJ,CAAC;MACL;IACJ,CAAC,MAAM;MACH,MAAMA,IAAI,GAAG,IAAAS,cAAM,EAACV,KAAK,CAACW,IAAI,CAAC;MAC/B,MAAMR,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MAAM;UACpBC,MAAM,EAAEP,KAAK,CAACO,MAAM;UACpBN;QACJ;MACJ,CAAC,CAAC;MAEF,IAAIE,MAAM,CAACK,MAAM,KAAK,CAAC,EAAE;QACrBR,KAAK,CAACC,IAAI,GAAGA,IAAI;MACrB,CAAC,MAAM;QACHD,KAAK,CAACC,IAAI,GAAI,GAAEA,IAAK,IAAG,IAAAW,6BAAsB,EAAC,CAAC,CAAE,EAAC;MACvD;IACJ;IAEA,MAAMC,WAAW,GAAGhB,OAAO,CACtBiB,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,iBAAiB,CAAClB,IAAI,KAAKD,KAAK,CAACC,IAAI,CAAC;IAE7D,IAAIY,WAAW,EAAE;MACb,MAAM,IAAIO,KAAK,CACV,kBAAiBpB,KAAK,CAACC,IAAK,uEACjC,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAACoB,OAAA,CAAA3B,uBAAA,GAAAA,uBAAA"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_toSlug","_CmsGroupPlugin","_utils","assignBeforeGroupCreate","params","onGroupBeforeCreate","plugins","storageOperations","subscribe","group","id","groups","list","where","tenant","locale","length","WebinyError","slug","trim","toSlug","name","generateAlphaNumericId","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","Error","exports"],"sources":["beforeCreate.ts"],"sourcesContent":["import { HeadlessCmsStorageOperations, OnGroupBeforeCreateTopicParams } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { toSlug } from \"~/utils/toSlug\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { generateAlphaNumericId } from \"@webiny/utils\";\n\ninterface AssignBeforeGroupCreateParams {\n onGroupBeforeCreate: Topic<OnGroupBeforeCreateTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupCreate = (params: AssignBeforeGroupCreateParams) => {\n const { onGroupBeforeCreate, plugins, storageOperations } = params;\n\n onGroupBeforeCreate.subscribe(async params => {\n const { group } = params;\n\n if (group.id) {\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n id: group.id\n }\n });\n if (groups.length > 0) {\n throw new WebinyError(\n `Cms Group with the id \"${group.id}\" already exists.`,\n \"ID_ALREADY_EXISTS\"\n );\n }\n }\n\n if (group.slug && group.slug.trim()) {\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug: group.slug\n }\n });\n if (groups.length > 0) {\n throw new WebinyError(\n `Cms Group with the slug \"${group.slug}\" already exists.`,\n \"SLUG_ALREADY_EXISTS\"\n );\n }\n } else {\n const slug = toSlug(group.name);\n const groups = await storageOperations.groups.list({\n where: {\n tenant: group.tenant,\n locale: group.locale,\n slug\n }\n });\n\n if (groups.length === 0) {\n group.slug = slug;\n } else {\n group.slug = `${slug}-${generateAlphaNumericId(8)}`;\n }\n }\n\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n\n if (groupPlugin) {\n throw new Error(\n `Cannot create \"${group.slug}\" content model group because one is already registered via a plugin.`\n );\n }\n });\n};\n"],"mappings":";;;;;;;AAGA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAOO,MAAMI,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC,OAAO;IAAEC;EAAkB,CAAC,GAAGH,MAAM;EAElEC,mBAAmB,CAACG,SAAS,CAAC,MAAMJ,MAAM,IAAI;IAC1C,MAAM;MAAEK;IAAM,CAAC,GAAGL,MAAM;IAExB,IAAIK,KAAK,CAACC,EAAE,EAAE;MACV,MAAMC,MAAM,GAAG,MAAMJ,iBAAiB,CAACI,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEL,KAAK,CAACK,MAAM;UACpBC,MAAM,EAAEN,KAAK,CAACM,MAAM;UACpBL,EAAE,EAAED,KAAK,CAACC;QACd;MACJ,CAAC,CAAC;MACF,IAAIC,MAAM,CAACK,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,IAAIC,cAAW,CAChB,0BAAyBR,KAAK,CAACC,EAAG,mBAAkB,EACrD,mBACJ,CAAC;MACL;IACJ;IAEA,IAAID,KAAK,CAACS,IAAI,IAAIT,KAAK,CAACS,IAAI,CAACC,IAAI,CAAC,CAAC,EAAE;MACjC,MAAMR,MAAM,GAAG,MAAMJ,iBAAiB,CAACI,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEL,KAAK,CAACK,MAAM;UACpBC,MAAM,EAAEN,KAAK,CAACM,MAAM;UACpBG,IAAI,EAAET,KAAK,CAACS;QAChB;MACJ,CAAC,CAAC;MACF,IAAIP,MAAM,CAACK,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,IAAIC,cAAW,CAChB,4BAA2BR,KAAK,CAACS,IAAK,mBAAkB,EACzD,qBACJ,CAAC;MACL;IACJ,CAAC,MAAM;MACH,MAAMA,IAAI,GAAG,IAAAE,cAAM,EAACX,KAAK,CAACY,IAAI,CAAC;MAC/B,MAAMV,MAAM,GAAG,MAAMJ,iBAAiB,CAACI,MAAM,CAACC,IAAI,CAAC;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEL,KAAK,CAACK,MAAM;UACpBC,MAAM,EAAEN,KAAK,CAACM,MAAM;UACpBG;QACJ;MACJ,CAAC,CAAC;MAEF,IAAIP,MAAM,CAACK,MAAM,KAAK,CAAC,EAAE;QACrBP,KAAK,CAACS,IAAI,GAAGA,IAAI;MACrB,CAAC,MAAM;QACHT,KAAK,CAACS,IAAI,GAAI,GAAEA,IAAK,IAAG,IAAAI,6BAAsB,EAAC,CAAC,CAAE,EAAC;MACvD;IACJ;IAEA,MAAMC,WAAW,GAAGjB,OAAO,CACtBkB,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,iBAAiB,CAACX,IAAI,KAAKT,KAAK,CAACS,IAAI,CAAC;IAE7D,IAAIK,WAAW,EAAE;MACb,MAAM,IAAIO,KAAK,CACV,kBAAiBrB,KAAK,CAACS,IAAK,uEACjC,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAACa,OAAA,CAAA5B,uBAAA,GAAAA,uBAAA"}
@@ -37,4 +37,6 @@ const assignBeforeGroupDelete = params => {
37
37
  }
38
38
  });
39
39
  };
40
- exports.assignBeforeGroupDelete = assignBeforeGroupDelete;
40
+ exports.assignBeforeGroupDelete = assignBeforeGroupDelete;
41
+
42
+ //# sourceMappingURL=beforeDelete.js.map
@@ -20,4 +20,6 @@ const assignBeforeGroupUpdate = params => {
20
20
  throw new Error(`Cms Groups defined via plugins cannot be updated.`);
21
21
  });
22
22
  };
23
- exports.assignBeforeGroupUpdate = assignBeforeGroupUpdate;
23
+ exports.assignBeforeGroupUpdate = assignBeforeGroupUpdate;
24
+
25
+ //# sourceMappingURL=beforeUpdate.js.map
@@ -0,0 +1,8 @@
1
+ import { HeadlessCmsStorageOperations } from "../../types";
2
+ interface Params {
3
+ storageOperations: HeadlessCmsStorageOperations;
4
+ tenant: string;
5
+ locale: string;
6
+ }
7
+ export declare const listGroupsFromDatabase: (params: Params) => Promise<import("../../types").CmsGroup[]>;
8
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.listGroupsFromDatabase = void 0;
7
+ const listGroupsFromDatabase = async params => {
8
+ const {
9
+ storageOperations,
10
+ tenant,
11
+ locale
12
+ } = params;
13
+ return await storageOperations.groups.list({
14
+ where: {
15
+ tenant,
16
+ locale
17
+ }
18
+ });
19
+ };
20
+ exports.listGroupsFromDatabase = listGroupsFromDatabase;
21
+
22
+ //# sourceMappingURL=listGroupsFromDatabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["listGroupsFromDatabase","params","storageOperations","tenant","locale","groups","list","where","exports"],"sources":["listGroupsFromDatabase.ts"],"sourcesContent":["import { HeadlessCmsStorageOperations } from \"~/types\";\n\ninterface Params {\n storageOperations: HeadlessCmsStorageOperations;\n tenant: string;\n locale: string;\n}\n\nexport const listGroupsFromDatabase = async (params: Params) => {\n const { storageOperations, tenant, locale } = params;\n\n return await storageOperations.groups.list({\n where: {\n tenant,\n locale\n }\n });\n};\n"],"mappings":";;;;;;AAQO,MAAMA,sBAAsB,GAAG,MAAOC,MAAc,IAAK;EAC5D,MAAM;IAAEC,iBAAiB;IAAEC,MAAM;IAAEC;EAAO,CAAC,GAAGH,MAAM;EAEpD,OAAO,MAAMC,iBAAiB,CAACG,MAAM,CAACC,IAAI,CAAC;IACvCC,KAAK,EAAE;MACHJ,MAAM;MACNC;IACJ;EACJ,CAAC,CAAC;AACN,CAAC;AAACI,OAAA,CAAAR,sBAAA,GAAAA,sBAAA"}
@@ -1,30 +1,33 @@
1
1
  import zod from "zod";
2
2
  export declare const createGroupCreateValidation: () => zod.ZodObject<{
3
+ id: zod.ZodOptional<zod.ZodNullable<zod.ZodOptional<zod.ZodString>>>;
3
4
  name: zod.ZodString;
4
5
  slug: zod.ZodEffects<zod.ZodOptional<zod.ZodString>, string, string | undefined>;
5
- description: zod.ZodEffects<zod.ZodOptional<zod.ZodString>, string, string | undefined>;
6
+ description: zod.ZodEffects<zod.ZodOptional<zod.ZodNullable<zod.ZodOptional<zod.ZodString>>>, string, string | null | undefined>;
6
7
  icon: zod.ZodString;
7
8
  }, "strip", zod.ZodTypeAny, {
9
+ description: string;
8
10
  name: string;
9
11
  slug: string;
10
- description: string;
11
12
  icon: string;
13
+ id?: string | null | undefined;
12
14
  }, {
13
15
  name: string;
14
16
  icon: string;
17
+ id?: string | null | undefined;
15
18
  slug?: string | undefined;
16
- description?: string | undefined;
19
+ description?: string | null | undefined;
17
20
  }>;
18
21
  export declare const createGroupUpdateValidation: () => zod.ZodObject<{
19
22
  name: zod.ZodOptional<zod.ZodString>;
20
- description: zod.ZodOptional<zod.ZodString>;
23
+ description: zod.ZodOptional<zod.ZodNullable<zod.ZodOptional<zod.ZodString>>>;
21
24
  icon: zod.ZodOptional<zod.ZodString>;
22
25
  }, "strip", zod.ZodTypeAny, {
23
26
  name?: string | undefined;
24
- description?: string | undefined;
27
+ description?: string | null | undefined;
25
28
  icon?: string | undefined;
26
29
  }, {
27
30
  name?: string | undefined;
28
- description?: string | undefined;
31
+ description?: string | null | undefined;
29
32
  icon?: string | undefined;
30
33
  }>;
@@ -9,10 +9,11 @@ var _zod = _interopRequireDefault(require("zod"));
9
9
  var _toSlug = require("../../utils/toSlug");
10
10
  const str = _zod.default.string().trim();
11
11
  const name = str.max(100);
12
- const description = str.max(255).optional();
12
+ const description = str.max(255).optional().nullish();
13
13
  const icon = str.min(1).max(255);
14
14
  const createGroupCreateValidation = () => {
15
15
  return _zod.default.object({
16
+ id: str.optional().nullish(),
16
17
  name: name.min(1),
17
18
  slug: str.max(100).optional().transform(value => {
18
19
  return value ? (0, _toSlug.toSlug)(value) : "";
@@ -31,4 +32,6 @@ const createGroupUpdateValidation = () => {
31
32
  icon: icon.optional()
32
33
  });
33
34
  };
34
- exports.createGroupUpdateValidation = createGroupUpdateValidation;
35
+ exports.createGroupUpdateValidation = createGroupUpdateValidation;
36
+
37
+ //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_zod","_interopRequireDefault","require","_toSlug","str","zod","string","trim","name","max","description","optional","icon","min","createGroupCreateValidation","object","slug","transform","value","toSlug","exports","createGroupUpdateValidation"],"sources":["validation.ts"],"sourcesContent":["import zod from \"zod\";\nimport { toSlug } from \"~/utils/toSlug\";\n\nconst str = zod.string().trim();\n\nconst name = str.max(100);\nconst description = str.max(255).optional();\nconst icon = str.min(1).max(255);\n\nexport const createGroupCreateValidation = () => {\n return zod.object({\n name: name.min(1),\n slug: str\n .max(100)\n .optional()\n .transform(value => {\n return value ? toSlug(value) : \"\";\n }),\n description: description.transform(value => {\n return value || \"\";\n }),\n icon\n });\n};\n\nexport const createGroupUpdateValidation = () => {\n return zod.object({\n name: name.optional(),\n description,\n icon: icon.optional()\n });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,GAAG,GAAGC,YAAG,CAACC,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC;AAE/B,MAAMC,IAAI,GAAGJ,GAAG,CAACK,GAAG,CAAC,GAAG,CAAC;AACzB,MAAMC,WAAW,GAAGN,GAAG,CAACK,GAAG,CAAC,GAAG,CAAC,CAACE,QAAQ,CAAC,CAAC;AAC3C,MAAMC,IAAI,GAAGR,GAAG,CAACS,GAAG,CAAC,CAAC,CAAC,CAACJ,GAAG,CAAC,GAAG,CAAC;AAEzB,MAAMK,2BAA2B,GAAGA,CAAA,KAAM;EAC7C,OAAOT,YAAG,CAACU,MAAM,CAAC;IACdP,IAAI,EAAEA,IAAI,CAACK,GAAG,CAAC,CAAC,CAAC;IACjBG,IAAI,EAAEZ,GAAG,CACJK,GAAG,CAAC,GAAG,CAAC,CACRE,QAAQ,CAAC,CAAC,CACVM,SAAS,CAACC,KAAK,IAAI;MAChB,OAAOA,KAAK,GAAG,IAAAC,cAAM,EAACD,KAAK,CAAC,GAAG,EAAE;IACrC,CAAC,CAAC;IACNR,WAAW,EAAEA,WAAW,CAACO,SAAS,CAACC,KAAK,IAAI;MACxC,OAAOA,KAAK,IAAI,EAAE;IACtB,CAAC,CAAC;IACFN;EACJ,CAAC,CAAC;AACN,CAAC;AAACQ,OAAA,CAAAN,2BAAA,GAAAA,2BAAA;AAEK,MAAMO,2BAA2B,GAAGA,CAAA,KAAM;EAC7C,OAAOhB,YAAG,CAACU,MAAM,CAAC;IACdP,IAAI,EAAEA,IAAI,CAACG,QAAQ,CAAC,CAAC;IACrBD,WAAW;IACXE,IAAI,EAAEA,IAAI,CAACD,QAAQ,CAAC;EACxB,CAAC,CAAC;AACN,CAAC;AAACS,OAAA,CAAAC,2BAAA,GAAAA,2BAAA"}
1
+ {"version":3,"names":["_zod","_interopRequireDefault","require","_toSlug","str","zod","string","trim","name","max","description","optional","nullish","icon","min","createGroupCreateValidation","object","id","slug","transform","value","toSlug","exports","createGroupUpdateValidation"],"sources":["validation.ts"],"sourcesContent":["import zod from \"zod\";\nimport { toSlug } from \"~/utils/toSlug\";\n\nconst str = zod.string().trim();\n\nconst name = str.max(100);\nconst description = str.max(255).optional().nullish();\nconst icon = str.min(1).max(255);\n\nexport const createGroupCreateValidation = () => {\n return zod.object({\n id: str.optional().nullish(),\n name: name.min(1),\n slug: str\n .max(100)\n .optional()\n .transform(value => {\n return value ? toSlug(value) : \"\";\n }),\n description: description.transform(value => {\n return value || \"\";\n }),\n icon\n });\n};\n\nexport const createGroupUpdateValidation = () => {\n return zod.object({\n name: name.optional(),\n description,\n icon: icon.optional()\n });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,GAAG,GAAGC,YAAG,CAACC,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC;AAE/B,MAAMC,IAAI,GAAGJ,GAAG,CAACK,GAAG,CAAC,GAAG,CAAC;AACzB,MAAMC,WAAW,GAAGN,GAAG,CAACK,GAAG,CAAC,GAAG,CAAC,CAACE,QAAQ,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;AACrD,MAAMC,IAAI,GAAGT,GAAG,CAACU,GAAG,CAAC,CAAC,CAAC,CAACL,GAAG,CAAC,GAAG,CAAC;AAEzB,MAAMM,2BAA2B,GAAGA,CAAA,KAAM;EAC7C,OAAOV,YAAG,CAACW,MAAM,CAAC;IACdC,EAAE,EAAEb,GAAG,CAACO,QAAQ,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;IAC5BJ,IAAI,EAAEA,IAAI,CAACM,GAAG,CAAC,CAAC,CAAC;IACjBI,IAAI,EAAEd,GAAG,CACJK,GAAG,CAAC,GAAG,CAAC,CACRE,QAAQ,CAAC,CAAC,CACVQ,SAAS,CAACC,KAAK,IAAI;MAChB,OAAOA,KAAK,GAAG,IAAAC,cAAM,EAACD,KAAK,CAAC,GAAG,EAAE;IACrC,CAAC,CAAC;IACNV,WAAW,EAAEA,WAAW,CAACS,SAAS,CAACC,KAAK,IAAI;MACxC,OAAOA,KAAK,IAAI,EAAE;IACtB,CAAC,CAAC;IACFP;EACJ,CAAC,CAAC;AACN,CAAC;AAACS,OAAA,CAAAP,2BAAA,GAAAA,2BAAA;AAEK,MAAMQ,2BAA2B,GAAGA,CAAA,KAAM;EAC7C,OAAOlB,YAAG,CAACW,MAAM,CAAC;IACdR,IAAI,EAAEA,IAAI,CAACG,QAAQ,CAAC,CAAC;IACrBD,WAAW;IACXG,IAAI,EAAEA,IAAI,CAACF,QAAQ,CAAC;EACxB,CAAC,CAAC;AACN,CAAC;AAACW,OAAA,CAAAC,2BAAA,GAAAA,2BAAA"}