@webiny/api-headless-cms 0.0.0-unstable.496cf268ac → 0.0.0-unstable.606fc9c866

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/context.js +47 -43
  2. package/context.js.map +1 -1
  3. package/crud/contentEntry/referenceFieldsMapping.js +34 -5
  4. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  5. package/crud/contentEntry.crud.d.ts +6 -4
  6. package/crud/contentEntry.crud.js +896 -821
  7. package/crud/contentEntry.crud.js.map +1 -1
  8. package/crud/contentModel/beforeCreate.js +38 -79
  9. package/crud/contentModel/beforeCreate.js.map +1 -1
  10. package/crud/contentModel/beforeDelete.d.ts +1 -1
  11. package/crud/contentModel/beforeDelete.js +1 -5
  12. package/crud/contentModel/beforeDelete.js.map +1 -1
  13. package/crud/contentModel/beforeUpdate.js +30 -6
  14. package/crud/contentModel/beforeUpdate.js.map +1 -1
  15. package/crud/contentModel/validate/endingAllowed.d.ts +6 -0
  16. package/crud/contentModel/validate/endingAllowed.js +26 -0
  17. package/crud/contentModel/validate/endingAllowed.js.map +1 -0
  18. package/crud/contentModel/validate/isModelEndingAllowed.d.ts +6 -0
  19. package/crud/contentModel/validate/isModelEndingAllowed.js +24 -0
  20. package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -0
  21. package/crud/contentModel/validate/modelId.d.ts +11 -0
  22. package/crud/contentModel/validate/modelId.js +36 -0
  23. package/crud/contentModel/validate/modelId.js.map +1 -0
  24. package/crud/contentModel/validate/pluralApiName.d.ts +7 -0
  25. package/crud/contentModel/validate/pluralApiName.js +24 -0
  26. package/crud/contentModel/validate/pluralApiName.js.map +1 -0
  27. package/crud/contentModel/validate/singularApiName.d.ts +7 -0
  28. package/crud/contentModel/validate/singularApiName.js +24 -0
  29. package/crud/contentModel/validate/singularApiName.js.map +1 -0
  30. package/crud/contentModel/validateModelFields.js +6 -7
  31. package/crud/contentModel/validateModelFields.js.map +1 -1
  32. package/crud/contentModel/validation.d.ts +127 -95
  33. package/crud/contentModel/validation.js +4 -4
  34. package/crud/contentModel/validation.js.map +1 -1
  35. package/crud/contentModel.crud.js +334 -296
  36. package/crud/contentModel.crud.js.map +1 -1
  37. package/crud/contentModelGroup/validation.d.ts +4 -4
  38. package/crud/contentModelGroup.crud.js +170 -142
  39. package/crud/contentModelGroup.crud.js.map +1 -1
  40. package/crud/settings.crud.d.ts +1 -1
  41. package/crud/settings.crud.js +5 -10
  42. package/crud/settings.crud.js.map +1 -1
  43. package/graphql/checkEndpointAccess.d.ts +2 -0
  44. package/graphql/checkEndpointAccess.js +18 -0
  45. package/graphql/checkEndpointAccess.js.map +1 -0
  46. package/graphql/createExecutableSchema.d.ts +2 -3
  47. package/graphql/createExecutableSchema.js.map +1 -1
  48. package/graphql/createRequestBody.d.ts +2 -0
  49. package/graphql/createRequestBody.js +14 -0
  50. package/graphql/createRequestBody.js.map +1 -0
  51. package/graphql/formatErrorPayload.d.ts +1 -0
  52. package/graphql/formatErrorPayload.js +25 -0
  53. package/graphql/formatErrorPayload.js.map +1 -0
  54. package/graphql/generateSchema.js.map +1 -1
  55. package/graphql/getSchema.d.ts +17 -0
  56. package/graphql/getSchema.js +102 -0
  57. package/graphql/getSchema.js.map +1 -0
  58. package/graphql/graphQLHandlerFactory.js +6 -150
  59. package/graphql/graphQLHandlerFactory.js.map +1 -1
  60. package/graphql/handleRequest.d.ts +11 -0
  61. package/graphql/handleRequest.js +81 -0
  62. package/graphql/handleRequest.js.map +1 -0
  63. package/graphql/index.d.ts +1 -1
  64. package/graphql/schema/contentModelGroups.js +6 -6
  65. package/graphql/schema/contentModelGroups.js.map +1 -1
  66. package/graphql/schema/contentModels.js +3 -3
  67. package/graphql/schema/contentModels.js.map +1 -1
  68. package/graphql/schema/createFieldResolvers.js +2 -1
  69. package/graphql/schema/createFieldResolvers.js.map +1 -1
  70. package/graphql/schema/createManageResolvers.js +6 -0
  71. package/graphql/schema/createManageResolvers.js.map +1 -1
  72. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.d.ts +4 -0
  73. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +18 -0
  74. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -0
  75. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +1 -1
  76. package/graphqlFields/dynamicZone/dynamicZoneField.js +44 -17
  77. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
  78. package/graphqlFields/object.js +14 -1
  79. package/graphqlFields/object.js.map +1 -1
  80. package/graphqlFields/ref.js +7 -7
  81. package/graphqlFields/ref.js.map +1 -1
  82. package/index.d.ts +3 -1
  83. package/index.js +24 -0
  84. package/index.js.map +1 -1
  85. package/package.json +22 -22
  86. package/plugins/CmsModelPlugin.d.ts +15 -7
  87. package/plugins/CmsModelPlugin.js +21 -6
  88. package/plugins/CmsModelPlugin.js.map +1 -1
  89. package/plugins/StorageOperationsCmsModelPlugin.d.ts +23 -0
  90. package/plugins/StorageOperationsCmsModelPlugin.js +42 -0
  91. package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -0
  92. package/plugins/index.d.ts +1 -0
  93. package/plugins/index.js +11 -0
  94. package/plugins/index.js.map +1 -1
  95. package/types.d.ts +72 -48
  96. package/types.js +4 -0
  97. package/types.js.map +1 -1
  98. package/utils/converters/valueKeyStorageConverter.d.ts +1 -5
  99. package/utils/converters/valueKeyStorageConverter.js +19 -17
  100. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  101. package/utils/createTypeFromFields.js +1 -2
  102. package/utils/createTypeFromFields.js.map +1 -1
  103. package/utils/createTypeName.d.ts +0 -2
  104. package/utils/createTypeName.js +2 -10
  105. package/utils/createTypeName.js.map +1 -1
  106. package/utils/incrementEntryIdVersion.d.ts +5 -0
  107. package/utils/incrementEntryIdVersion.js +29 -0
  108. package/utils/incrementEntryIdVersion.js.map +1 -0
  109. package/crud/contentModel/createFieldModels.d.ts +0 -2
  110. package/crud/contentModel/createFieldModels.js +0 -26
  111. package/crud/contentModel/createFieldModels.js.map +0 -1
  112. package/crud/contentModel/fieldIdValidation.d.ts +0 -1
  113. package/crud/contentModel/fieldIdValidation.js +0 -25
  114. package/crud/contentModel/fieldIdValidation.js.map +0 -1
  115. package/crud/contentModel/idValidation.d.ts +0 -1
  116. package/crud/contentModel/idValidation.js +0 -22
  117. package/crud/contentModel/idValidation.js.map +0 -1
  118. package/crud/contentModel/models.d.ts +0 -4
  119. package/crud/contentModel/models.js +0 -192
  120. package/crud/contentModel/models.js.map +0 -1
  121. package/crud/contentModel/systemFields.d.ts +0 -1
  122. package/crud/contentModel/systemFields.js +0 -8
  123. package/crud/contentModel/systemFields.js.map +0 -1
  124. package/upgrades/5.33.0/index.d.ts +0 -3
  125. package/upgrades/5.33.0/index.js +0 -182
  126. package/upgrades/5.33.0/index.js.map +0 -1
  127. package/upgrades/index.d.ts +0 -1
  128. package/upgrades/index.js +0 -12
  129. package/upgrades/index.js.map +0 -1
  130. package/utils/pluralizedTypeName.d.ts +0 -1
  131. package/utils/pluralizedTypeName.js +0 -26
  132. package/utils/pluralizedTypeName.js.map +0 -1
  133. package/utils/removeNullValues.d.ts +0 -1
  134. package/utils/removeNullValues.js +0 -17
  135. package/utils/removeNullValues.js.map +0 -1
  136. package/utils/removeUndefinedValues.d.ts +0 -1
  137. package/utils/removeUndefinedValues.js +0 -17
  138. package/utils/removeUndefinedValues.js.map +0 -1
@@ -1 +1 @@
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","singularApiName","ensureSingularApiName","pluralApiName","ensurePluralApiName","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","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","input","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","removeUndefinedValues","data","defaultFields","assignModelDefaultFields","security","disableAuthorization","group","cms","getGroup","enableAuthorization","identity","titleFieldId","descriptionFieldId","imageFieldId","description","name","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","publish","createdModel","create","ex","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","userInput","createModelCreateFromValidation","i18n","groups","icon","updateModel","createModelUpdateValidation","keys","length","groupData","undefined","deleteModel","delete","WebinyError","message","initializeModel","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport {\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 CmsModelUpdateInput,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelUpdateErrorTopicParams,\n OnModelDeleteErrorTopicParams,\n CmsModelGroup\n} from \"~/types\";\n\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 { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport { removeUndefinedValues } from \"~/utils/removeUndefinedValues\";\nimport {\n ensurePluralApiName,\n ensureSingularApiName\n} from \"./contentModel/compatibility/modelApiName\";\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 * 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 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 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\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 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 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 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 context.security.disableAuthorization();\n const group = await context.cms.getGroup(data.group);\n context.security.enableAuthorization();\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 loaders.listModels.clearAll();\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 /**\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, userInput) {\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 ...userInput,\n description: userInput.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 loaders.listModels.clearAll();\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 async updateModel(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 if (data.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(data.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\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 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
+ {"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","singularApiName","ensureSingularApiName","pluralApiName","ensurePluralApiName","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","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","benchmark","measure","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","createModel","input","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","removeUndefinedValues","data","defaultFields","assignModelDefaultFields","group","security","withoutAuthorization","cms","getGroup","identity","titleFieldId","descriptionFieldId","imageFieldId","description","name","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","publish","createdModel","create","ex","updateModel","original","createModelUpdateValidation","keys","length","groupId","groupData","undefined","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"],"sources":["contentModel.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport {\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 CmsModelUpdateInput,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelUpdateErrorTopicParams,\n OnModelDeleteErrorTopicParams,\n CmsModelGroup\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 { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport { removeUndefinedValues } from \"@webiny/utils\";\nimport {\n ensurePluralApiName,\n ensureSingularApiName\n} from \"./contentModel/compatibility/modelApiName\";\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 * 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 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 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\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n return context.benchmark.measure(\"headlessCms.crud.models.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\n const getModel = async (modelId: string): Promise<CmsModel> => {\n return context.benchmark.measure(\"headlessCms.crud.models.getModel\", async () => {\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\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 loaders.listModels.clearAll();\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 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 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 loaders.listModels.clearAll();\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 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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"}
@@ -5,13 +5,13 @@ export declare const createGroupCreateValidation: () => zod.ZodObject<{
5
5
  description: zod.ZodEffects<zod.ZodOptional<zod.ZodString>, string, string | undefined>;
6
6
  icon: zod.ZodString;
7
7
  }, "strip", zod.ZodTypeAny, {
8
+ description: string;
8
9
  name: string;
9
10
  slug: string;
10
- description: string;
11
11
  icon: string;
12
12
  }, {
13
- slug?: string | undefined;
14
13
  description?: string | undefined;
14
+ slug?: string | undefined;
15
15
  name: string;
16
16
  icon: string;
17
17
  }>;
@@ -20,11 +20,11 @@ export declare const createGroupUpdateValidation: () => zod.ZodObject<{
20
20
  description: zod.ZodOptional<zod.ZodString>;
21
21
  icon: zod.ZodOptional<zod.ZodString>;
22
22
  }, "strip", zod.ZodTypeAny, {
23
- name?: string | undefined;
24
23
  description?: string | undefined;
24
+ name?: string | undefined;
25
25
  icon?: string | undefined;
26
26
  }, {
27
- name?: string | undefined;
28
27
  description?: string | undefined;
28
+ name?: string | undefined;
29
29
  icon?: string | undefined;
30
30
  }>;
@@ -6,15 +6,15 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.createModelGroupsCrud = void 0;
8
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
+ var _dataloader = _interopRequireDefault(require("dataloader"));
9
10
  var _mdbid = _interopRequireDefault(require("mdbid"));
10
- var _handlerGraphql = require("@webiny/handler-graphql");
11
11
  var _error = _interopRequireDefault(require("@webiny/error"));
12
+ var _handlerGraphql = require("@webiny/handler-graphql");
12
13
  var _CmsGroupPlugin = require("../plugins/CmsGroupPlugin");
13
14
  var _pubsub = require("@webiny/pubsub");
14
15
  var _beforeUpdate = require("./contentModelGroup/beforeUpdate");
15
16
  var _beforeCreate = require("./contentModelGroup/beforeCreate");
16
17
  var _beforeDelete = require("./contentModelGroup/beforeDelete");
17
- var _dataloader = _interopRequireDefault(require("dataloader"));
18
18
  var _permissions = require("../utils/permissions");
19
19
  var _ownership = require("../utils/ownership");
20
20
  var _access = require("../utils/access");
@@ -88,7 +88,7 @@ const createModelGroupsCrud = params => {
88
88
  rwd: check
89
89
  });
90
90
  };
91
- const groupsGet = async id => {
91
+ const getGroupViaDataLoader = async id => {
92
92
  const groups = await dataLoaders.listGroups.load("listGroups");
93
93
  const group = groups.find(g => g.id === id);
94
94
  if (!group) {
@@ -96,7 +96,7 @@ const createModelGroupsCrud = params => {
96
96
  }
97
97
  return group;
98
98
  };
99
- const groupsList = async params => {
99
+ const listGroupsViaDataLoader = async params => {
100
100
  const {
101
101
  where
102
102
  } = params || {};
@@ -145,6 +145,160 @@ const createModelGroupsCrud = params => {
145
145
  plugins: context.plugins,
146
146
  storageOperations
147
147
  });
148
+ /**
149
+ * CRUD Methods
150
+ */
151
+ const getGroup = async id => {
152
+ const permission = await checkPermissions("r");
153
+ const group = await getGroupViaDataLoader(id);
154
+ (0, _ownership.checkOwnership)(context, permission, group);
155
+ (0, _access.validateGroupAccess)(context, permission, group);
156
+ return group;
157
+ };
158
+ const listGroups = async params => {
159
+ const {
160
+ where
161
+ } = params || {};
162
+ const {
163
+ tenant,
164
+ locale
165
+ } = where || {};
166
+ const permission = await checkPermissions("r");
167
+ const response = await listGroupsViaDataLoader((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params || {}), {}, {
168
+ where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where || {}), {}, {
169
+ tenant: tenant || getTenant().id,
170
+ locale: locale || getLocale().code
171
+ })
172
+ }));
173
+ return response.filter(group => {
174
+ if (!(0, _ownership.validateOwnership)(context, permission, group)) {
175
+ return false;
176
+ }
177
+ return (0, _access.validateGroupAccess)(context, permission, group);
178
+ });
179
+ };
180
+ const createGroup = async input => {
181
+ await checkPermissions("w");
182
+ const result = await (0, _validation.createGroupCreateValidation)().safeParseAsync(input);
183
+ if (!result.success) {
184
+ throw (0, _utils.createZodError)(result.error);
185
+ }
186
+ const data = result.data;
187
+ const identity = getIdentity();
188
+ const id = (0, _mdbid.default)();
189
+ const group = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
190
+ id,
191
+ tenant: getTenant().id,
192
+ locale: getLocale().code,
193
+ createdOn: new Date().toISOString(),
194
+ savedOn: new Date().toISOString(),
195
+ createdBy: {
196
+ id: identity.id,
197
+ displayName: identity.displayName,
198
+ type: identity.type
199
+ },
200
+ webinyVersion: context.WEBINY_VERSION
201
+ });
202
+ try {
203
+ await onGroupBeforeCreate.publish({
204
+ group
205
+ });
206
+ const result = await storageOperations.groups.create({
207
+ group
208
+ });
209
+ clearGroupsCache();
210
+ await onGroupAfterCreate.publish({
211
+ group: result
212
+ });
213
+ return group;
214
+ } catch (ex) {
215
+ await onGroupCreateError.publish({
216
+ input,
217
+ group,
218
+ error: ex
219
+ });
220
+ 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 || {}), {}, {
221
+ group,
222
+ input
223
+ }));
224
+ }
225
+ };
226
+ const updateGroup = async (id, input) => {
227
+ const permission = await checkPermissions("w");
228
+ const original = await getGroupViaDataLoader(id);
229
+ (0, _ownership.checkOwnership)(context, permission, original);
230
+ const result = await (0, _validation.createGroupUpdateValidation)().safeParseAsync(input);
231
+ if (!result.success) {
232
+ throw (0, _utils.createZodError)(result.error);
233
+ }
234
+ const data = result.data;
235
+
236
+ /**
237
+ * No need to continue if no values were changed
238
+ */
239
+ if (Object.keys(data).length === 0) {
240
+ return original;
241
+ }
242
+ const group = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
243
+ locale: getLocale().code,
244
+ tenant: getTenant().id,
245
+ savedOn: new Date().toISOString()
246
+ });
247
+ try {
248
+ await onGroupBeforeUpdate.publish({
249
+ original,
250
+ group
251
+ });
252
+ const updatedGroup = await storageOperations.groups.update({
253
+ group
254
+ });
255
+ clearGroupsCache();
256
+ await onGroupAfterUpdate.publish({
257
+ original,
258
+ group: updatedGroup
259
+ });
260
+ return updatedGroup;
261
+ } catch (ex) {
262
+ await onGroupUpdateError.publish({
263
+ input,
264
+ original,
265
+ group,
266
+ error: ex
267
+ });
268
+ throw new _error.default(ex.message, ex.code || "UPDATE_ERROR", {
269
+ error: ex,
270
+ original,
271
+ group,
272
+ input
273
+ });
274
+ }
275
+ };
276
+ const deleteGroup = async id => {
277
+ const permission = await checkPermissions("d");
278
+ const group = await getGroupViaDataLoader(id);
279
+ (0, _ownership.checkOwnership)(context, permission, group);
280
+ try {
281
+ await onGroupBeforeDelete.publish({
282
+ group
283
+ });
284
+ await storageOperations.groups.delete({
285
+ group
286
+ });
287
+ clearGroupsCache();
288
+ await onGroupAfterDelete.publish({
289
+ group
290
+ });
291
+ } catch (ex) {
292
+ await onGroupDeleteError.publish({
293
+ group,
294
+ error: ex
295
+ });
296
+ throw new _error.default(ex.message, ex.code || "DELETE_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
297
+ id
298
+ }));
299
+ }
300
+ return true;
301
+ };
148
302
  return {
149
303
  /**
150
304
  * Deprecated - will be removed in 5.36.0
@@ -169,155 +323,29 @@ const createModelGroupsCrud = params => {
169
323
  onGroupDeleteError,
170
324
  clearGroupsCache,
171
325
  getGroup: async id => {
172
- const permission = await checkPermissions("r");
173
- const group = await groupsGet(id);
174
- (0, _ownership.checkOwnership)(context, permission, group);
175
- (0, _access.validateGroupAccess)(context, permission, group);
176
- return group;
326
+ return context.benchmark.measure("headlessCms.crud.groups.getGroup", async () => {
327
+ return getGroup(id);
328
+ });
177
329
  },
178
330
  listGroups: async params => {
179
- const {
180
- where
181
- } = params || {};
182
- const {
183
- tenant,
184
- locale
185
- } = where || {};
186
- const permission = await checkPermissions("r");
187
- const response = await groupsList((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params || {}), {}, {
188
- where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where || {}), {}, {
189
- tenant: tenant || getTenant().id,
190
- locale: locale || getLocale().code
191
- })
192
- }));
193
- return response.filter(group => {
194
- if (!(0, _ownership.validateOwnership)(context, permission, group)) {
195
- return false;
196
- }
197
- return (0, _access.validateGroupAccess)(context, permission, group);
331
+ return context.benchmark.measure("headlessCms.crud.groups.listGroups", async () => {
332
+ return listGroups(params);
198
333
  });
199
334
  },
200
335
  createGroup: async input => {
201
- await checkPermissions("w");
202
- const result = await (0, _validation.createGroupCreateValidation)().safeParseAsync(input);
203
- if (!result.success) {
204
- throw (0, _utils.createZodError)(result.error);
205
- }
206
- const data = result.data;
207
- const identity = getIdentity();
208
- const id = (0, _mdbid.default)();
209
- const group = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
210
- id,
211
- tenant: getTenant().id,
212
- locale: getLocale().code,
213
- createdOn: new Date().toISOString(),
214
- savedOn: new Date().toISOString(),
215
- createdBy: {
216
- id: identity.id,
217
- displayName: identity.displayName,
218
- type: identity.type
219
- },
220
- webinyVersion: context.WEBINY_VERSION
336
+ return context.benchmark.measure("headlessCms.crud.groups.createGroup", async () => {
337
+ return createGroup(input);
221
338
  });
222
- try {
223
- await onGroupBeforeCreate.publish({
224
- group
225
- });
226
- const result = await storageOperations.groups.create({
227
- group
228
- });
229
- clearGroupsCache();
230
- await onGroupAfterCreate.publish({
231
- group: result
232
- });
233
- return group;
234
- } catch (ex) {
235
- await onGroupCreateError.publish({
236
- input,
237
- group,
238
- error: ex
239
- });
240
- 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 || {}), {}, {
241
- group,
242
- input
243
- }));
244
- }
245
339
  },
246
340
  updateGroup: async (id, input) => {
247
- const permission = await checkPermissions("w");
248
- const original = await groupsGet(id);
249
- (0, _ownership.checkOwnership)(context, permission, original);
250
- const result = await (0, _validation.createGroupUpdateValidation)().safeParseAsync(input);
251
- if (!result.success) {
252
- throw (0, _utils.createZodError)(result.error);
253
- }
254
- const data = result.data;
255
-
256
- /**
257
- * No need to continue if no values were changed
258
- */
259
- if (Object.keys(data).length === 0) {
260
- return original;
261
- }
262
- const group = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
263
- locale: getLocale().code,
264
- tenant: getTenant().id,
265
- savedOn: new Date().toISOString()
341
+ return context.benchmark.measure("headlessCms.crud.groups.updateGroup", async () => {
342
+ return updateGroup(id, input);
266
343
  });
267
- try {
268
- await onGroupBeforeUpdate.publish({
269
- original,
270
- group
271
- });
272
- const updatedGroup = await storageOperations.groups.update({
273
- group
274
- });
275
- clearGroupsCache();
276
- await onGroupAfterUpdate.publish({
277
- original,
278
- group: updatedGroup
279
- });
280
- return updatedGroup;
281
- } catch (ex) {
282
- await onGroupUpdateError.publish({
283
- input,
284
- original,
285
- group,
286
- error: ex
287
- });
288
- throw new _error.default(ex.message, ex.code || "UPDATE_ERROR", {
289
- error: ex,
290
- original,
291
- group,
292
- input
293
- });
294
- }
295
344
  },
296
345
  deleteGroup: async id => {
297
- const permission = await checkPermissions("d");
298
- const group = await groupsGet(id);
299
- (0, _ownership.checkOwnership)(context, permission, group);
300
- try {
301
- await onGroupBeforeDelete.publish({
302
- group
303
- });
304
- await storageOperations.groups.delete({
305
- group
306
- });
307
- clearGroupsCache();
308
- await onGroupAfterDelete.publish({
309
- group
310
- });
311
- } catch (ex) {
312
- await onGroupDeleteError.publish({
313
- group,
314
- error: ex
315
- });
316
- throw new _error.default(ex.message, ex.code || "DELETE_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
317
- id
318
- }));
319
- }
320
- return true;
346
+ return context.benchmark.measure("headlessCms.crud.groups.deleteGroup", async () => {
347
+ return deleteGroup(id);
348
+ });
321
349
  }
322
350
  };
323
351
  };