@webiny/api-headless-cms 5.33.5 → 5.34.0-beta.0

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 (195) hide show
  1. package/context.js +3 -7
  2. package/context.js.map +1 -1
  3. package/crud/contentEntry/afterDelete.d.ts +2 -2
  4. package/crud/contentEntry/afterDelete.js +2 -2
  5. package/crud/contentEntry/afterDelete.js.map +1 -1
  6. package/crud/contentEntry/beforeCreate.d.ts +2 -2
  7. package/crud/contentEntry/beforeCreate.js +2 -2
  8. package/crud/contentEntry/beforeCreate.js.map +1 -1
  9. package/crud/contentEntry/beforeUpdate.d.ts +2 -2
  10. package/crud/contentEntry/beforeUpdate.js +2 -2
  11. package/crud/contentEntry/beforeUpdate.js.map +1 -1
  12. package/crud/contentEntry/entryDataValidation.js +3 -7
  13. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  14. package/crud/contentEntry/markLockedFields.js +10 -11
  15. package/crud/contentEntry/markLockedFields.js.map +1 -1
  16. package/crud/contentEntry/referenceFieldsMapping.js +11 -13
  17. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  18. package/crud/contentEntry/searchableFields.d.ts +9 -0
  19. package/crud/contentEntry/searchableFields.js +83 -0
  20. package/crud/contentEntry/searchableFields.js.map +1 -0
  21. package/crud/contentEntry.crud.d.ts +0 -2
  22. package/crud/contentEntry.crud.js +249 -269
  23. package/crud/contentEntry.crud.js.map +1 -1
  24. package/crud/contentModel/afterCreate.d.ts +3 -3
  25. package/crud/contentModel/afterCreate.js +5 -5
  26. package/crud/contentModel/afterCreate.js.map +1 -1
  27. package/crud/contentModel/afterCreateFrom.d.ts +3 -3
  28. package/crud/contentModel/afterCreateFrom.js +5 -5
  29. package/crud/contentModel/afterCreateFrom.js.map +1 -1
  30. package/crud/contentModel/afterDelete.d.ts +3 -3
  31. package/crud/contentModel/afterDelete.js +5 -5
  32. package/crud/contentModel/afterDelete.js.map +1 -1
  33. package/crud/contentModel/afterUpdate.d.ts +3 -3
  34. package/crud/contentModel/afterUpdate.js +5 -5
  35. package/crud/contentModel/afterUpdate.js.map +1 -1
  36. package/crud/contentModel/beforeCreate.d.ts +4 -4
  37. package/crud/contentModel/beforeCreate.js +10 -10
  38. package/crud/contentModel/beforeCreate.js.map +1 -1
  39. package/crud/contentModel/beforeDelete.d.ts +3 -3
  40. package/crud/contentModel/beforeDelete.js +6 -6
  41. package/crud/contentModel/beforeDelete.js.map +1 -1
  42. package/crud/contentModel/beforeUpdate.d.ts +3 -3
  43. package/crud/contentModel/beforeUpdate.js +5 -5
  44. package/crud/contentModel/beforeUpdate.js.map +1 -1
  45. package/crud/contentModel/createFieldStorageId.js +5 -1
  46. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  47. package/crud/contentModel/models.js +12 -0
  48. package/crud/contentModel/models.js.map +1 -1
  49. package/crud/contentModel/validateModel.js +1 -1
  50. package/crud/contentModel/validateModelFields.js +42 -34
  51. package/crud/contentModel/validateModelFields.js.map +1 -1
  52. package/crud/contentModel.crud.js +222 -169
  53. package/crud/contentModel.crud.js.map +1 -1
  54. package/crud/contentModelGroup/beforeCreate.d.ts +2 -2
  55. package/crud/contentModelGroup/beforeCreate.js +3 -3
  56. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  57. package/crud/contentModelGroup/beforeDelete.d.ts +2 -2
  58. package/crud/contentModelGroup/beforeDelete.js +3 -3
  59. package/crud/contentModelGroup/beforeDelete.js.map +1 -1
  60. package/crud/contentModelGroup/beforeUpdate.d.ts +2 -2
  61. package/crud/contentModelGroup/beforeUpdate.js +2 -2
  62. package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  63. package/crud/contentModelGroup.crud.js +87 -37
  64. package/crud/contentModelGroup.crud.js.map +1 -1
  65. package/crud/index.js +3 -7
  66. package/crud/index.js.map +1 -1
  67. package/crud/settings.crud.js +3 -8
  68. package/crud/settings.crud.js.map +1 -1
  69. package/crud/system.crud.js +63 -51
  70. package/crud/system.crud.js.map +1 -1
  71. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +1 -1
  72. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
  73. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +239 -0
  74. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
  75. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +17 -19
  76. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  77. package/fieldConverters/index.d.ts +2 -1
  78. package/fieldConverters/index.js +3 -1
  79. package/fieldConverters/index.js.map +1 -1
  80. package/graphql/graphQLHandlerFactory.js +21 -17
  81. package/graphql/graphQLHandlerFactory.js.map +1 -1
  82. package/graphql/index.d.ts +1 -1
  83. package/graphql/schema/baseContentSchema.js +4 -8
  84. package/graphql/schema/baseContentSchema.js.map +1 -1
  85. package/graphql/schema/contentEntries.js +1 -1
  86. package/graphql/schema/contentModels.js +18 -1
  87. package/graphql/schema/contentModels.js.map +1 -1
  88. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  89. package/graphql/schema/createFieldResolvers.js +12 -14
  90. package/graphql/schema/createFieldResolvers.js.map +1 -1
  91. package/graphql/schema/createManageResolvers.js +4 -18
  92. package/graphql/schema/createManageResolvers.js.map +1 -1
  93. package/graphql/schema/createManageSDL.js +7 -10
  94. package/graphql/schema/createManageSDL.js.map +1 -1
  95. package/graphql/schema/createPreviewResolvers.js +3 -7
  96. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  97. package/graphql/schema/createReadResolvers.js +3 -7
  98. package/graphql/schema/createReadResolvers.js.map +1 -1
  99. package/graphql/schema/createReadSDL.js +5 -3
  100. package/graphql/schema/createReadSDL.js.map +1 -1
  101. package/graphql/schema/resolvers/manage/resolveGet.js +5 -9
  102. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  103. package/graphql/schema/resolvers/preview/resolveGet.js +3 -7
  104. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  105. package/graphql/schema/resolvers/read/resolveGet.js +3 -7
  106. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  107. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
  108. package/graphqlFields/dynamicZone/dynamicZoneField.js +234 -0
  109. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
  110. package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
  111. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +79 -0
  112. package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
  113. package/graphqlFields/dynamicZone/index.d.ts +2 -0
  114. package/graphqlFields/dynamicZone/index.js +21 -0
  115. package/graphqlFields/dynamicZone/index.js.map +1 -0
  116. package/graphqlFields/index.d.ts +1 -1
  117. package/graphqlFields/index.js +3 -1
  118. package/graphqlFields/index.js.map +1 -1
  119. package/graphqlFields/number.js +4 -0
  120. package/graphqlFields/number.js.map +1 -1
  121. package/graphqlFields/object.js +123 -73
  122. package/graphqlFields/object.js.map +1 -1
  123. package/graphqlFields/ref.js +23 -23
  124. package/graphqlFields/ref.js.map +1 -1
  125. package/index.d.ts +2 -2
  126. package/index.js +3 -1
  127. package/index.js.map +1 -1
  128. package/modelManager/DefaultCmsModelManager.d.ts +7 -7
  129. package/modelManager/DefaultCmsModelManager.js +1 -1
  130. package/package.json +27 -28
  131. package/parameters/header.js +1 -1
  132. package/parameters/manual.js +7 -8
  133. package/parameters/manual.js.map +1 -1
  134. package/parameters/path.js +1 -1
  135. package/plugins/CmsGroupPlugin.js +1 -1
  136. package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
  137. package/plugins/CmsModelFieldConverterPlugin.js +1 -1
  138. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  139. package/plugins/CmsModelPlugin.d.ts +6 -2
  140. package/plugins/CmsModelPlugin.js +18 -13
  141. package/plugins/CmsModelPlugin.js.map +1 -1
  142. package/plugins/CmsParametersPlugin.js +1 -1
  143. package/plugins/StorageTransformPlugin.d.ts +11 -11
  144. package/plugins/StorageTransformPlugin.js +1 -1
  145. package/plugins/StorageTransformPlugin.js.map +1 -1
  146. package/storage/object.js +7 -8
  147. package/storage/object.js.map +1 -1
  148. package/types.d.ts +436 -164
  149. package/types.js +50 -9
  150. package/types.js.map +1 -1
  151. package/upgrades/5.33.0/index.js +5 -9
  152. package/upgrades/5.33.0/index.js.map +1 -1
  153. package/utils/converters/Converter.js +1 -1
  154. package/utils/converters/ConverterCollection.js +10 -8
  155. package/utils/converters/ConverterCollection.js.map +1 -1
  156. package/utils/converters/valueKeyStorageConverter.js +3 -7
  157. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  158. package/utils/createTypeFromFields.d.ts +15 -0
  159. package/utils/createTypeFromFields.js +75 -0
  160. package/utils/createTypeFromFields.js.map +1 -0
  161. package/utils/createTypeName.js +4 -2
  162. package/utils/createTypeName.js.map +1 -1
  163. package/utils/entryStorage.js +17 -18
  164. package/utils/entryStorage.js.map +1 -1
  165. package/utils/filterModelFields.js +5 -9
  166. package/utils/filterModelFields.js.map +1 -1
  167. package/utils/getBaseFieldType.d.ts +4 -0
  168. package/utils/getBaseFieldType.js +12 -0
  169. package/utils/getBaseFieldType.js.map +1 -0
  170. package/utils/permissions.js +1 -5
  171. package/utils/permissions.js.map +1 -1
  172. package/utils/pluralizedTypeName.js +1 -1
  173. package/utils/renderFields.js +3 -1
  174. package/utils/renderFields.js.map +1 -1
  175. package/utils/renderGetFilterFields.js +8 -3
  176. package/utils/renderGetFilterFields.js.map +1 -1
  177. package/utils/renderInputFields.js +3 -1
  178. package/utils/renderInputFields.js.map +1 -1
  179. package/utils/renderListFilterFields.js +12 -2
  180. package/utils/renderListFilterFields.js.map +1 -1
  181. package/utils/renderSortEnum.js +3 -1
  182. package/utils/renderSortEnum.js.map +1 -1
  183. package/utils/toSlug.js +1 -1
  184. package/validators/dynamicZone.d.ts +2 -0
  185. package/validators/dynamicZone.js +24 -0
  186. package/validators/dynamicZone.js.map +1 -0
  187. package/validators/index.js +3 -1
  188. package/validators/index.js.map +1 -1
  189. package/validators/unique.js +1 -1
  190. package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
  191. package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
  192. package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
  193. package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
  194. package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
  195. package/graphql/schema/resolvers/manage/resolveRequestReview.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["featureVersion","semver","coerce","attachStorageIdToFields","fields","map","field","settings","storageId","fieldId","attachStorageIdToModelFields","model","webinyVersion","version","match","compare","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","WEBINY_VERSION","validateModelFields","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onBeforeModelCreate","createTopic","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","onModelInitialize","assignBeforeModelCreate","assignAfterModelCreate","assignBeforeModelUpdate","assignAfterModelUpdate","assignAfterModelCreateFrom","assignBeforeModelDelete","assignAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","createFieldModels","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","layout","publish","createdModel","create","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","keys","length","groupData","deleteModel","delete","ex","WebinyError","message","error","initializeModel","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n BeforeModelCreateTopicParams,\n AfterModelCreateTopicParams,\n BeforeModelUpdateTopicParams,\n AfterModelUpdateTopicParams,\n BeforeModelDeleteTopicParams,\n AfterModelDeleteTopicParams,\n OnModelInitializeParams,\n BeforeModelCreateFromTopicParams,\n AfterModelCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput,\n CmsModelField\n} from \"~/types\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport WebinyError from \"@webiny/error\";\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 { assignBeforeModelCreate } from \"./contentModel/beforeCreate\";\nimport { assignBeforeModelUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignBeforeModelDelete } from \"./contentModel/beforeDelete\";\nimport { assignAfterModelCreate } from \"./contentModel/afterCreate\";\nimport { assignAfterModelUpdate } from \"./contentModel/afterUpdate\";\nimport { assignAfterModelDelete } from \"./contentModel/afterDelete\";\nimport { assignAfterModelCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport { validateModelFields } from \"~/crud/contentModel/validateModelFields\";\nimport semver, { SemVer } from \"semver\";\n\n/**\n * TODO: remove for 5.34.0\n * Required because of the 5.33.0 upgrade.\n * Until the upgrade is done, API will break because there is no storageId assigned.\n */\nconst featureVersion = semver.coerce(\"5.33.0\") as SemVer;\n\nconst attachStorageIdToFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.map(field => {\n if (field.settings?.fields) {\n field.settings.fields = attachStorageIdToFields(field.settings.fields);\n }\n if (!field.storageId) {\n field.storageId = field.fieldId;\n }\n return field;\n });\n};\n\nconst attachStorageIdToModelFields = (model: CmsModel): CmsModelField[] => {\n if (!model.webinyVersion) {\n return model.fields;\n }\n\n const version = semver.coerce(model.webinyVersion);\n if (!version) {\n return model.fields;\n }\n /**\n * Unfortunately we need to check for beta and next.\n * TODO remove after 5.33.0\n */\n if (model.webinyVersion.match(/beta|next/)) {\n return attachStorageIdToFields(model.fields);\n }\n if (semver.compare(version, featureVersion) >= 0) {\n return model.fields;\n }\n return attachStorageIdToFields(model.fields);\n};\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = 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 fields: attachStorageIdToModelFields(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\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 = (check: string): Promise<CmsModelPermission> => {\n return checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const models = 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: t, locale: l } = plugin.contentModel;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n });\n /**\n * Only point where we can truly validate the user model is in the runtime.\n */\n for (const model of models) {\n validateModelFields({\n model,\n plugins: context.plugins\n });\n }\n return models;\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\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 tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n checkOwnership(context, permission, model);\n await checkModelAccess(context, model);\n\n return model;\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 const onBeforeModelCreate = createTopic<BeforeModelCreateTopicParams>();\n const onAfterModelCreate = createTopic<AfterModelCreateTopicParams>();\n const onBeforeModelCreateFrom = createTopic<BeforeModelCreateFromTopicParams>();\n const onAfterModelCreateFrom = createTopic<AfterModelCreateFromTopicParams>();\n const onBeforeModelUpdate = createTopic<BeforeModelUpdateTopicParams>();\n const onAfterModelUpdate = createTopic<AfterModelUpdateTopicParams>();\n const onBeforeModelDelete = createTopic<BeforeModelDeleteTopicParams>();\n const onAfterModelDelete = createTopic<AfterModelDeleteTopicParams>();\n\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeModelCreate({\n onBeforeModelCreate,\n onBeforeModelCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelCreate({\n context,\n onAfterModelCreate\n });\n assignBeforeModelUpdate({\n onBeforeModelUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelUpdate({\n context,\n onAfterModelUpdate\n });\n assignAfterModelCreateFrom({\n context,\n onAfterModelCreateFrom\n });\n assignBeforeModelDelete({\n onBeforeModelDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelDelete({\n context,\n onAfterModelDelete\n });\n\n return {\n onBeforeModelCreate,\n onAfterModelCreate,\n onBeforeModelCreateFrom,\n onAfterModelCreateFrom,\n onBeforeModelUpdate,\n onAfterModelUpdate,\n onBeforeModelDelete,\n onAfterModelDelete,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const fields = await createFieldModels(input.fields);\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description || \"\",\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\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 fields,\n lockedFields: [],\n layout: input.layout || [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(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 await onBeforeModelUpdate.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 loaders.listModels.clearAll();\n\n await onAfterModelUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async createModelFrom(modelId, data) {\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 createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.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: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.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 await onBeforeModelCreateFrom.publish({\n input,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n },\n async updateModel(modelId, inputData) {\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 updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const fields = await createFieldModels(inputData.fields);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields,\n savedOn: new Date().toISOString()\n };\n\n await onBeforeModelUpdate.publish({\n input,\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 onAfterModelUpdate.publish({\n input,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n await onBeforeModelDelete.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 await onAfterModelDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n async initializeModel(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 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":["ensureTypeTag","model","tags","some","tag","startsWith","push","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","modelTenant","modelLocale","contentModel","webinyVersion","WEBINY_VERSION","validateModelFields","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","fields","createFieldModels","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","layout","publish","createdModel","create","ex","error","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","keys","length","groupData","deleteModel","delete","WebinyError","message","initializeModel","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n HeadlessCmsStorageOperations,\n OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelInitializeParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelUpdateErrorTopicParams,\n OnModelDeleteErrorTopicParams\n} from \"~/types\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport WebinyError from \"@webiny/error\";\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 { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport { validateModelFields } from \"~/crud/contentModel/validateModelFields\";\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 context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = 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 })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\n }\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 = (check: string) => {\n return checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n const models = 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<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(plugin.contentModel),\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n });\n /**\n * Only point where we can truly validate the user model is in the runtime.\n */\n for (const model of models) {\n validateModelFields({\n model,\n plugins: context.plugins\n });\n }\n return models;\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\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\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n checkOwnership(context, permission, model);\n await checkModelAccess(context, model);\n\n return model;\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 plugins: context.plugins,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n plugins: context.plugins,\n storageOperations\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 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(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const fields = await createFieldModels(input.fields);\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description || \"\",\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\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 fields,\n lockedFields: [],\n layout: input.layout || [],\n tags: [...(input.tags || [])],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input,\n model,\n error: ex\n });\n throw ex;\n }\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(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 loaders.listModels.clearAll();\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 async createModelFrom(modelId, data) {\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 createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.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: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.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,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n },\n async updateModel(modelId, inputData) {\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 updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const fields = await createFieldModels(inputData.fields);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields,\n savedOn: new Date().toISOString()\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input,\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,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n },\n async deleteModel(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 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 async initializeModel(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 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,8 +1,8 @@
1
- import { BeforeGroupCreateTopicParams, HeadlessCmsStorageOperations } from "../../types";
1
+ import { OnGroupBeforeCreateTopicParams, HeadlessCmsStorageOperations } from "../../types";
2
2
  import { Topic } from "@webiny/pubsub/types";
3
3
  import { PluginsContainer } from "@webiny/plugins";
4
4
  interface AssignBeforeGroupCreateParams {
5
- onBeforeCreate: Topic<BeforeGroupCreateTopicParams>;
5
+ onGroupBeforeCreate: Topic<OnGroupBeforeCreateTopicParams>;
6
6
  plugins: PluginsContainer;
7
7
  storageOperations: HeadlessCmsStorageOperations;
8
8
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
@@ -17,11 +17,11 @@ var _utils = require("@webiny/utils");
17
17
 
18
18
  const assignBeforeGroupCreate = params => {
19
19
  const {
20
- onBeforeCreate,
20
+ onGroupBeforeCreate,
21
21
  plugins,
22
22
  storageOperations
23
23
  } = params;
24
- onBeforeCreate.subscribe(async params => {
24
+ onGroupBeforeCreate.subscribe(async params => {
25
25
  const {
26
26
  group
27
27
  } = params;
@@ -1 +1 @@
1
- {"version":3,"names":["assignBeforeGroupCreate","params","onBeforeCreate","plugins","storageOperations","subscribe","group","slug","trim","groups","list","where","tenant","locale","length","WebinyError","toSlug","name","generateAlphaNumericId","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","Error"],"sources":["beforeCreate.ts"],"sourcesContent":["import { BeforeGroupCreateTopicParams, 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 onBeforeCreate: Topic<BeforeGroupCreateTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupCreate = (params: AssignBeforeGroupCreateParams) => {\n const { onBeforeCreate, plugins, storageOperations } = params;\n\n onBeforeCreate.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;;AACA;;AACA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,cAAF;IAAkBC,OAAlB;IAA2BC;EAA3B,IAAiDH,MAAvD;EAEAC,cAAc,CAACG,SAAf,CAAyB,MAAMJ,MAAN,IAAgB;IACrC,MAAM;MAAEK;IAAF,IAAYL,MAAlB;;IAEA,IAAIK,KAAK,CAACC,IAAN,IAAcD,KAAK,CAACC,IAAN,CAAWC,IAAX,EAAlB,EAAqC;MACjC,MAAMC,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAlB,CAAyBC,IAAzB,CAA8B;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MADX;UAEHC,MAAM,EAAEP,KAAK,CAACO,MAFX;UAGHN,IAAI,EAAED,KAAK,CAACC;QAHT;MADwC,CAA9B,CAArB;;MAOA,IAAIE,MAAM,CAACK,MAAP,GAAgB,CAApB,EAAuB;QACnB,MAAM,IAAIC,cAAJ,CACD,4BAA2BT,KAAK,CAACC,IAAK,mBADrC,EAEF,qBAFE,CAAN;MAIH;IACJ,CAdD,MAcO;MACH,MAAMA,IAAI,GAAG,IAAAS,cAAA,EAAOV,KAAK,CAACW,IAAb,CAAb;MACA,MAAMR,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAlB,CAAyBC,IAAzB,CAA8B;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MADX;UAEHC,MAAM,EAAEP,KAAK,CAACO,MAFX;UAGHN;QAHG;MADwC,CAA9B,CAArB;;MAQA,IAAIE,MAAM,CAACK,MAAP,KAAkB,CAAtB,EAAyB;QACrBR,KAAK,CAACC,IAAN,GAAaA,IAAb;MACH,CAFD,MAEO;QACHD,KAAK,CAACC,IAAN,GAAc,GAAEA,IAAK,IAAG,IAAAW,6BAAA,EAAuB,CAAvB,CAA0B,EAAlD;MACH;IACJ;;IAED,MAAMC,WAAW,GAAGhB,OAAO,CACtBiB,MADe,CACQC,8BAAA,CAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBlB,IAAvB,KAAgCD,KAAK,CAACC,IAFpC,CAApB;;IAIA,IAAIY,WAAJ,EAAiB;MACb,MAAM,IAAIO,KAAJ,CACD,kBAAiBpB,KAAK,CAACC,IAAK,uEAD3B,CAAN;IAGH;EACJ,CA3CD;AA4CH,CA/CM"}
1
+ {"version":3,"names":["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"],"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;;AACA;;AACA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,mBAAF;IAAuBC,OAAvB;IAAgCC;EAAhC,IAAsDH,MAA5D;EAEAC,mBAAmB,CAACG,SAApB,CAA8B,MAAMJ,MAAN,IAAgB;IAC1C,MAAM;MAAEK;IAAF,IAAYL,MAAlB;;IAEA,IAAIK,KAAK,CAACC,IAAN,IAAcD,KAAK,CAACC,IAAN,CAAWC,IAAX,EAAlB,EAAqC;MACjC,MAAMC,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAlB,CAAyBC,IAAzB,CAA8B;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MADX;UAEHC,MAAM,EAAEP,KAAK,CAACO,MAFX;UAGHN,IAAI,EAAED,KAAK,CAACC;QAHT;MADwC,CAA9B,CAArB;;MAOA,IAAIE,MAAM,CAACK,MAAP,GAAgB,CAApB,EAAuB;QACnB,MAAM,IAAIC,cAAJ,CACD,4BAA2BT,KAAK,CAACC,IAAK,mBADrC,EAEF,qBAFE,CAAN;MAIH;IACJ,CAdD,MAcO;MACH,MAAMA,IAAI,GAAG,IAAAS,cAAA,EAAOV,KAAK,CAACW,IAAb,CAAb;MACA,MAAMR,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAlB,CAAyBC,IAAzB,CAA8B;QAC/CC,KAAK,EAAE;UACHC,MAAM,EAAEN,KAAK,CAACM,MADX;UAEHC,MAAM,EAAEP,KAAK,CAACO,MAFX;UAGHN;QAHG;MADwC,CAA9B,CAArB;;MAQA,IAAIE,MAAM,CAACK,MAAP,KAAkB,CAAtB,EAAyB;QACrBR,KAAK,CAACC,IAAN,GAAaA,IAAb;MACH,CAFD,MAEO;QACHD,KAAK,CAACC,IAAN,GAAc,GAAEA,IAAK,IAAG,IAAAW,6BAAA,EAAuB,CAAvB,CAA0B,EAAlD;MACH;IACJ;;IAED,MAAMC,WAAW,GAAGhB,OAAO,CACtBiB,MADe,CACQC,8BAAA,CAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBlB,IAAvB,KAAgCD,KAAK,CAACC,IAFpC,CAApB;;IAIA,IAAIY,WAAJ,EAAiB;MACb,MAAM,IAAIO,KAAJ,CACD,kBAAiBpB,KAAK,CAACC,IAAK,uEAD3B,CAAN;IAGH;EACJ,CA3CD;AA4CH,CA/CM"}
@@ -1,8 +1,8 @@
1
1
  import { Topic } from "@webiny/pubsub/types";
2
- import { BeforeGroupDeleteTopicParams, HeadlessCmsStorageOperations } from "../../types";
2
+ import { OnGroupBeforeDeleteTopicParams, HeadlessCmsStorageOperations } from "../../types";
3
3
  import { PluginsContainer } from "@webiny/plugins";
4
4
  interface AssignBeforeGroupDeleteParams {
5
- onBeforeDelete: Topic<BeforeGroupDeleteTopicParams>;
5
+ onGroupBeforeDelete: Topic<OnGroupBeforeDeleteTopicParams>;
6
6
  plugins: PluginsContainer;
7
7
  storageOperations: HeadlessCmsStorageOperations;
8
8
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
@@ -13,11 +13,11 @@ var _error = _interopRequireDefault(require("@webiny/error"));
13
13
 
14
14
  const assignBeforeGroupDelete = params => {
15
15
  const {
16
- onBeforeDelete,
16
+ onGroupBeforeDelete,
17
17
  plugins,
18
18
  storageOperations
19
19
  } = params;
20
- onBeforeDelete.subscribe(async params => {
20
+ onGroupBeforeDelete.subscribe(async params => {
21
21
  const {
22
22
  group
23
23
  } = params;
@@ -1 +1 @@
1
- {"version":3,"names":["assignBeforeGroupDelete","params","onBeforeDelete","plugins","storageOperations","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error","models","list","where","tenant","locale","items","filter","model","id","length","WebinyError"],"sources":["beforeDelete.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeGroupDeleteTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport WebinyError from \"@webiny/error\";\n\ninterface AssignBeforeGroupDeleteParams {\n onBeforeDelete: Topic<BeforeGroupDeleteTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupDelete = (params: AssignBeforeGroupDeleteParams) => {\n const { onBeforeDelete, plugins, storageOperations } = params;\n\n onBeforeDelete.subscribe(async params => {\n const { group } = params;\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(`Cms Groups defined via plugins cannot be deleted.`);\n }\n\n const models = await storageOperations.models.list({\n where: {\n tenant: group.tenant,\n locale: group.locale\n }\n });\n const items = models.filter(model => {\n return model.group.id === group.id;\n });\n if (items.length > 0) {\n throw new WebinyError(\n \"Cannot delete this group because there are models that belong to it.\",\n \"BEFORE_DELETE_ERROR\",\n {\n group\n }\n );\n }\n });\n};\n"],"mappings":";;;;;;;;;AAGA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,cAAF;IAAkBC,OAAlB;IAA2BC;EAA3B,IAAiDH,MAAvD;EAEAC,cAAc,CAACG,SAAf,CAAyB,MAAMJ,MAAN,IAAgB;IACrC,MAAM;MAAEK;IAAF,IAAYL,MAAlB;IAEA,MAAMM,WAAW,GAAGJ,OAAO,CACtBK,MADe,CACQC,8BAAA,CAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBC,IAAvB,KAAgCR,KAAK,CAACQ,IAFpC,CAApB;;IAIA,IAAIP,WAAJ,EAAiB;MACb,MAAM,IAAIQ,KAAJ,CAAW,mDAAX,CAAN;IACH;;IAED,MAAMC,MAAM,GAAG,MAAMZ,iBAAiB,CAACY,MAAlB,CAAyBC,IAAzB,CAA8B;MAC/CC,KAAK,EAAE;QACHC,MAAM,EAAEb,KAAK,CAACa,MADX;QAEHC,MAAM,EAAEd,KAAK,CAACc;MAFX;IADwC,CAA9B,CAArB;IAMA,MAAMC,KAAK,GAAGL,MAAM,CAACM,MAAP,CAAcC,KAAK,IAAI;MACjC,OAAOA,KAAK,CAACjB,KAAN,CAAYkB,EAAZ,KAAmBlB,KAAK,CAACkB,EAAhC;IACH,CAFa,CAAd;;IAGA,IAAIH,KAAK,CAACI,MAAN,GAAe,CAAnB,EAAsB;MAClB,MAAM,IAAIC,cAAJ,CACF,sEADE,EAEF,qBAFE,EAGF;QACIpB;MADJ,CAHE,CAAN;IAOH;EACJ,CA7BD;AA8BH,CAjCM"}
1
+ {"version":3,"names":["assignBeforeGroupDelete","params","onGroupBeforeDelete","plugins","storageOperations","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error","models","list","where","tenant","locale","items","filter","model","id","length","WebinyError"],"sources":["beforeDelete.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { OnGroupBeforeDeleteTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport WebinyError from \"@webiny/error\";\n\ninterface AssignBeforeGroupDeleteParams {\n onGroupBeforeDelete: Topic<OnGroupBeforeDeleteTopicParams>;\n plugins: PluginsContainer;\n storageOperations: HeadlessCmsStorageOperations;\n}\nexport const assignBeforeGroupDelete = (params: AssignBeforeGroupDeleteParams) => {\n const { onGroupBeforeDelete, plugins, storageOperations } = params;\n\n onGroupBeforeDelete.subscribe(async params => {\n const { group } = params;\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(`Cms Groups defined via plugins cannot be deleted.`);\n }\n\n const models = await storageOperations.models.list({\n where: {\n tenant: group.tenant,\n locale: group.locale\n }\n });\n const items = models.filter(model => {\n return model.group.id === group.id;\n });\n if (items.length > 0) {\n throw new WebinyError(\n \"Cannot delete this group because there are models that belong to it.\",\n \"BEFORE_DELETE_ERROR\",\n {\n group\n }\n );\n }\n });\n};\n"],"mappings":";;;;;;;;;AAGA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,mBAAF;IAAuBC,OAAvB;IAAgCC;EAAhC,IAAsDH,MAA5D;EAEAC,mBAAmB,CAACG,SAApB,CAA8B,MAAMJ,MAAN,IAAgB;IAC1C,MAAM;MAAEK;IAAF,IAAYL,MAAlB;IAEA,MAAMM,WAAW,GAAGJ,OAAO,CACtBK,MADe,CACQC,8BAAA,CAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBC,IAAvB,KAAgCR,KAAK,CAACQ,IAFpC,CAApB;;IAIA,IAAIP,WAAJ,EAAiB;MACb,MAAM,IAAIQ,KAAJ,CAAW,mDAAX,CAAN;IACH;;IAED,MAAMC,MAAM,GAAG,MAAMZ,iBAAiB,CAACY,MAAlB,CAAyBC,IAAzB,CAA8B;MAC/CC,KAAK,EAAE;QACHC,MAAM,EAAEb,KAAK,CAACa,MADX;QAEHC,MAAM,EAAEd,KAAK,CAACc;MAFX;IADwC,CAA9B,CAArB;IAMA,MAAMC,KAAK,GAAGL,MAAM,CAACM,MAAP,CAAcC,KAAK,IAAI;MACjC,OAAOA,KAAK,CAACjB,KAAN,CAAYkB,EAAZ,KAAmBlB,KAAK,CAACkB,EAAhC;IACH,CAFa,CAAd;;IAGA,IAAIH,KAAK,CAACI,MAAN,GAAe,CAAnB,EAAsB;MAClB,MAAM,IAAIC,cAAJ,CACF,sEADE,EAEF,qBAFE,EAGF;QACIpB;MADJ,CAHE,CAAN;IAOH;EACJ,CA7BD;AA8BH,CAjCM"}
@@ -1,8 +1,8 @@
1
1
  import { Topic } from "@webiny/pubsub/types";
2
- import { BeforeGroupUpdateTopicParams } from "../../types";
2
+ import { OnGroupBeforeUpdateTopicParams } from "../../types";
3
3
  import { PluginsContainer } from "@webiny/plugins";
4
4
  interface AssignBeforeGroupUpdateParams {
5
- onBeforeUpdate: Topic<BeforeGroupUpdateTopicParams>;
5
+ onGroupBeforeUpdate: Topic<OnGroupBeforeUpdateTopicParams>;
6
6
  plugins: PluginsContainer;
7
7
  }
8
8
  export declare const assignBeforeGroupUpdate: (params: AssignBeforeGroupUpdateParams) => void;
@@ -9,10 +9,10 @@ var _CmsGroupPlugin = require("../../plugins/CmsGroupPlugin");
9
9
 
10
10
  const assignBeforeGroupUpdate = params => {
11
11
  const {
12
- onBeforeUpdate,
12
+ onGroupBeforeUpdate,
13
13
  plugins
14
14
  } = params;
15
- onBeforeUpdate.subscribe(({
15
+ onGroupBeforeUpdate.subscribe(({
16
16
  group
17
17
  }) => {
18
18
  const groupPlugin = plugins.byType(_CmsGroupPlugin.CmsGroupPlugin.type).find(item => item.contentModelGroup.slug === group.slug);
@@ -1 +1 @@
1
- {"version":3,"names":["assignBeforeGroupUpdate","params","onBeforeUpdate","plugins","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error"],"sources":["beforeUpdate.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeGroupUpdateTopicParams } from \"~/types\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface AssignBeforeGroupUpdateParams {\n onBeforeUpdate: Topic<BeforeGroupUpdateTopicParams>;\n plugins: PluginsContainer;\n}\nexport const assignBeforeGroupUpdate = (params: AssignBeforeGroupUpdateParams) => {\n const { onBeforeUpdate, plugins } = params;\n\n onBeforeUpdate.subscribe(({ group }) => {\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n if (!groupPlugin) {\n return;\n }\n throw new Error(`Cms Groups defined via plugins cannot be updated.`);\n });\n};\n"],"mappings":";;;;;;;AAEA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,cAAF;IAAkBC;EAAlB,IAA8BF,MAApC;EAEAC,cAAc,CAACE,SAAf,CAAyB,CAAC;IAAEC;EAAF,CAAD,KAAe;IACpC,MAAMC,WAAW,GAAGH,OAAO,CACtBI,MADe,CACQC,8BAAA,CAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBC,IAAvB,KAAgCR,KAAK,CAACQ,IAFpC,CAApB;;IAGA,IAAI,CAACP,WAAL,EAAkB;MACd;IACH;;IACD,MAAM,IAAIQ,KAAJ,CAAW,mDAAX,CAAN;EACH,CARD;AASH,CAZM"}
1
+ {"version":3,"names":["assignBeforeGroupUpdate","params","onGroupBeforeUpdate","plugins","subscribe","group","groupPlugin","byType","CmsGroupPlugin","type","find","item","contentModelGroup","slug","Error"],"sources":["beforeUpdate.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { OnGroupBeforeUpdateTopicParams } from \"~/types\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface AssignBeforeGroupUpdateParams {\n onGroupBeforeUpdate: Topic<OnGroupBeforeUpdateTopicParams>;\n plugins: PluginsContainer;\n}\nexport const assignBeforeGroupUpdate = (params: AssignBeforeGroupUpdateParams) => {\n const { onGroupBeforeUpdate, plugins } = params;\n\n onGroupBeforeUpdate.subscribe(({ group }) => {\n const groupPlugin = plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .find(item => item.contentModelGroup.slug === group.slug);\n if (!groupPlugin) {\n return;\n }\n throw new Error(`Cms Groups defined via plugins cannot be updated.`);\n });\n};\n"],"mappings":";;;;;;;AAEA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;EAC9E,MAAM;IAAEC,mBAAF;IAAuBC;EAAvB,IAAmCF,MAAzC;EAEAC,mBAAmB,CAACE,SAApB,CAA8B,CAAC;IAAEC;EAAF,CAAD,KAAe;IACzC,MAAMC,WAAW,GAAGH,OAAO,CACtBI,MADe,CACQC,8BAAA,CAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,iBAAL,CAAuBC,IAAvB,KAAgCR,KAAK,CAACQ,IAFpC,CAApB;;IAGA,IAAI,CAACP,WAAL,EAAkB;MACd;IACH;;IACD,MAAM,IAAIQ,KAAJ,CAAW,mDAAX,CAAN;EACH,CARD;AASH,CAZM"}
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.createModelGroupsCrud = void 0;
9
9
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
11
 
12
12
  var _fields = require("@commodo/fields");
13
13
 
@@ -39,10 +39,15 @@ var _access = require("../utils/access");
39
39
 
40
40
  var _toSlug = require("../utils/toSlug");
41
41
 
42
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
-
44
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
42
+ /**
43
+ * Package @commodo/fields does not have types.
44
+ */
45
+ // @ts-ignore
45
46
 
47
+ /**
48
+ * Package mdbid does not have types.
49
+ */
50
+ // @ts-ignore
46
51
  const CreateContentModelGroupModel = (0, _fields.withFields)({
47
52
  name: (0, _fields.string)({
48
53
  validation: _validation.validation.create("required,maxLength:100")
@@ -82,7 +87,7 @@ const createModelGroupsCrud = params => {
82
87
  const tenant = getTenant().id;
83
88
  const locale = getLocale().code;
84
89
  const pluginsGroups = getGroupsAsPlugins().map(group => {
85
- return _objectSpread(_objectSpread({}, group), {}, {
90
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, group), {}, {
86
91
  tenant: group.tenant || tenant,
87
92
  locale: group.locale || locale
88
93
  });
@@ -125,7 +130,7 @@ const createModelGroupsCrud = params => {
125
130
 
126
131
  return true;
127
132
  }).map(plugin => {
128
- return _objectSpread(_objectSpread({}, plugin.contentModelGroup), {}, {
133
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, plugin.contentModelGroup), {}, {
129
134
  tenant,
130
135
  locale,
131
136
  webinyVersion: context.WEBINY_VERSION
@@ -158,43 +163,74 @@ const createModelGroupsCrud = params => {
158
163
  try {
159
164
  return await dataLoaders.listGroups.load("listGroups");
160
165
  } catch (ex) {
161
- throw new _error.default(ex.message, ex.code || "LIST_ERROR", _objectSpread(_objectSpread({}, ex.data || {}), {}, {
166
+ throw new _error.default(ex.message, ex.code || "LIST_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
162
167
  where
163
168
  }));
164
169
  }
165
170
  };
171
+ /**
172
+ * Create
173
+ */
174
+
175
+
176
+ const onGroupBeforeCreate = (0, _pubsub.createTopic)("cms.onGroupBeforeCreate");
177
+ const onGroupAfterCreate = (0, _pubsub.createTopic)("cms.onGroupAfterCreate");
178
+ const onGroupCreateError = (0, _pubsub.createTopic)("cms.onGroupCreateError");
179
+ /**
180
+ * Update
181
+ */
182
+
183
+ const onGroupBeforeUpdate = (0, _pubsub.createTopic)("cms.onGroupBeforeUpdate");
184
+ const onGroupAfterUpdate = (0, _pubsub.createTopic)("cms.onGroupAfterUpdate");
185
+ const onGroupUpdateError = (0, _pubsub.createTopic)("cms.onGroupUpdateError");
186
+ /**
187
+ * Delete
188
+ */
166
189
 
167
- const onBeforeCreate = (0, _pubsub.createTopic)();
168
- const onAfterCreate = (0, _pubsub.createTopic)();
169
- const onBeforeUpdate = (0, _pubsub.createTopic)();
170
- const onAfterUpdate = (0, _pubsub.createTopic)();
171
- const onBeforeDelete = (0, _pubsub.createTopic)();
172
- const onAfterDelete = (0, _pubsub.createTopic)();
190
+ const onGroupBeforeDelete = (0, _pubsub.createTopic)("cms.onGroupBeforeDelete");
191
+ const onGroupAfterDelete = (0, _pubsub.createTopic)("cms.onGroupAfterDelete");
192
+ const onGroupDeleteError = (0, _pubsub.createTopic)("cms.onGroupDeleteError");
173
193
  /**
174
194
  * We need to assign some default behaviors.
175
195
  */
176
196
 
177
197
  (0, _beforeCreate.assignBeforeGroupCreate)({
178
- onBeforeCreate,
198
+ onGroupBeforeCreate,
179
199
  plugins: context.plugins,
180
200
  storageOperations
181
201
  });
182
202
  (0, _beforeUpdate.assignBeforeGroupUpdate)({
183
- onBeforeUpdate,
203
+ onGroupBeforeUpdate,
184
204
  plugins: context.plugins
185
205
  });
186
206
  (0, _beforeDelete.assignBeforeGroupDelete)({
187
- onBeforeDelete,
207
+ onGroupBeforeDelete,
188
208
  plugins: context.plugins,
189
209
  storageOperations
190
210
  });
191
211
  return {
192
- onBeforeGroupCreate: onBeforeCreate,
193
- onAfterGroupCreate: onAfterCreate,
194
- onBeforeGroupUpdate: onBeforeUpdate,
195
- onAfterGroupUpdate: onAfterUpdate,
196
- onBeforeGroupDelete: onBeforeDelete,
197
- onAfterGroupDelete: onAfterDelete,
212
+ /**
213
+ * Deprecated - will be removed in 5.36.0
214
+ */
215
+ onBeforeGroupCreate: onGroupBeforeCreate,
216
+ onAfterGroupCreate: onGroupAfterCreate,
217
+ onBeforeGroupUpdate: onGroupBeforeUpdate,
218
+ onAfterGroupUpdate: onGroupAfterUpdate,
219
+ onBeforeGroupDelete: onGroupBeforeDelete,
220
+ onAfterGroupDelete: onGroupAfterDelete,
221
+
222
+ /**
223
+ * Released in 5.34.0
224
+ */
225
+ onGroupBeforeCreate,
226
+ onGroupAfterCreate,
227
+ onGroupCreateError,
228
+ onGroupBeforeUpdate,
229
+ onGroupAfterUpdate,
230
+ onGroupUpdateError,
231
+ onGroupBeforeDelete,
232
+ onGroupAfterDelete,
233
+ onGroupDeleteError,
198
234
  clearGroupsCache,
199
235
  getGroup: async id => {
200
236
  const permission = await checkPermissions("r");
@@ -212,8 +248,8 @@ const createModelGroupsCrud = params => {
212
248
  locale
213
249
  } = where || {};
214
250
  const permission = await checkPermissions("r");
215
- const response = await groupsList(_objectSpread(_objectSpread({}, params || {}), {}, {
216
- where: _objectSpread(_objectSpread({}, where || {}), {}, {
251
+ const response = await groupsList((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params || {}), {}, {
252
+ where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where || {}), {}, {
217
253
  tenant: tenant || getTenant().id,
218
254
  locale: locale || getLocale().code
219
255
  })
@@ -228,7 +264,7 @@ const createModelGroupsCrud = params => {
228
264
  },
229
265
  createGroup: async inputData => {
230
266
  await checkPermissions("w");
231
- const createdData = new CreateContentModelGroupModel().populate(_objectSpread(_objectSpread({}, inputData), {}, {
267
+ const createdData = new CreateContentModelGroupModel().populate((0, _objectSpread2.default)((0, _objectSpread2.default)({}, inputData), {}, {
232
268
  slug: inputData.slug ? (0, _toSlug.toSlug)(inputData.slug) : "",
233
269
  description: inputData.description || ""
234
270
  }));
@@ -236,8 +272,7 @@ const createModelGroupsCrud = params => {
236
272
  const input = await createdData.toJSON();
237
273
  const identity = getIdentity();
238
274
  const id = (0, _mdbid.default)();
239
-
240
- const group = _objectSpread(_objectSpread({}, input), {}, {
275
+ const group = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, input), {}, {
241
276
  id,
242
277
  tenant: getTenant().id,
243
278
  locale: getLocale().code,
@@ -252,19 +287,24 @@ const createModelGroupsCrud = params => {
252
287
  });
253
288
 
254
289
  try {
255
- await onBeforeCreate.publish({
290
+ await onGroupBeforeCreate.publish({
256
291
  group
257
292
  });
258
293
  const result = await storageOperations.groups.create({
259
294
  group
260
295
  });
261
296
  clearGroupsCache();
262
- await onAfterCreate.publish({
297
+ await onGroupAfterCreate.publish({
263
298
  group: result
264
299
  });
265
300
  return group;
266
301
  } catch (ex) {
267
- throw new _error.default(ex.message || "Could not save data model group.", ex.code || "ERROR_ON_CREATE", _objectSpread(_objectSpread({}, ex.data || {}), {}, {
302
+ await onGroupCreateError.publish({
303
+ input,
304
+ group,
305
+ error: ex
306
+ });
307
+ throw new _error.default(ex.message || "Could not save data model group.", ex.code || "ERROR_ON_CREATE", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
268
308
  group,
269
309
  input
270
310
  }));
@@ -287,14 +327,14 @@ const createModelGroupsCrud = params => {
287
327
  return original;
288
328
  }
289
329
 
290
- const group = _objectSpread(_objectSpread(_objectSpread({}, original), updatedDataJson), {}, {
330
+ const group = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), updatedDataJson), {}, {
291
331
  locale: getLocale().code,
292
332
  tenant: getTenant().id,
293
333
  savedOn: new Date().toISOString()
294
334
  });
295
335
 
296
336
  try {
297
- await onBeforeUpdate.publish({
337
+ await onGroupBeforeUpdate.publish({
298
338
  original,
299
339
  group
300
340
  });
@@ -302,12 +342,18 @@ const createModelGroupsCrud = params => {
302
342
  group
303
343
  });
304
344
  clearGroupsCache();
305
- await onAfterUpdate.publish({
345
+ await onGroupAfterUpdate.publish({
306
346
  original,
307
347
  group: updatedGroup
308
348
  });
309
349
  return updatedGroup;
310
350
  } catch (ex) {
351
+ await onGroupUpdateError.publish({
352
+ input,
353
+ original,
354
+ group,
355
+ error: ex
356
+ });
311
357
  throw new _error.default(ex.message, ex.code || "UPDATE_ERROR", {
312
358
  error: ex,
313
359
  original,
@@ -322,18 +368,22 @@ const createModelGroupsCrud = params => {
322
368
  (0, _ownership.checkOwnership)(context, permission, group);
323
369
 
324
370
  try {
325
- await onBeforeDelete.publish({
371
+ await onGroupBeforeDelete.publish({
326
372
  group
327
373
  });
328
374
  await storageOperations.groups.delete({
329
375
  group
330
376
  });
331
377
  clearGroupsCache();
332
- await onAfterDelete.publish({
378
+ await onGroupAfterDelete.publish({
333
379
  group
334
380
  });
335
381
  } catch (ex) {
336
- throw new _error.default(ex.message, ex.code || "DELETE_ERROR", _objectSpread(_objectSpread({}, ex.data || {}), {}, {
382
+ await onGroupDeleteError.publish({
383
+ group,
384
+ error: ex
385
+ });
386
+ throw new _error.default(ex.message, ex.code || "DELETE_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
337
387
  id
338
388
  }));
339
389
  }