@webiny/api-headless-cms 5.25.0 → 5.26.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 (35) hide show
  1. package/content/graphQLHandlerFactory.js +3 -1
  2. package/content/graphQLHandlerFactory.js.map +1 -1
  3. package/content/plugins/crud/contentEntry/afterDelete.js +1 -2
  4. package/content/plugins/crud/contentEntry/afterDelete.js.map +1 -1
  5. package/content/plugins/crud/contentEntry.crud.d.ts +2 -0
  6. package/content/plugins/crud/contentEntry.crud.js +71 -72
  7. package/content/plugins/crud/contentEntry.crud.js.map +1 -1
  8. package/content/plugins/crud/contentModel/beforeDelete.js +0 -2
  9. package/content/plugins/crud/contentModel/beforeDelete.js.map +1 -1
  10. package/content/plugins/crud/contentModel.crud.js +21 -12
  11. package/content/plugins/crud/contentModel.crud.js.map +1 -1
  12. package/content/plugins/crud/contentModelGroup.crud.js +38 -45
  13. package/content/plugins/crud/contentModelGroup.crud.js.map +1 -1
  14. package/content/plugins/crud/index.js +5 -3
  15. package/content/plugins/crud/index.js.map +1 -1
  16. package/content/plugins/graphqlFields/longText.js +1 -0
  17. package/content/plugins/graphqlFields/longText.js.map +1 -1
  18. package/content/plugins/graphqlFields/text.js +1 -0
  19. package/content/plugins/graphqlFields/text.js.map +1 -1
  20. package/content/plugins/schema/contentEntries.js +6 -9
  21. package/content/plugins/schema/contentEntries.js.map +1 -1
  22. package/content/plugins/validators/unique.js +0 -1
  23. package/content/plugins/validators/unique.js.map +1 -1
  24. package/package.json +24 -25
  25. package/plugins/context.js +9 -3
  26. package/plugins/context.js.map +1 -1
  27. package/plugins/crud/index.js +7 -4
  28. package/plugins/crud/index.js.map +1 -1
  29. package/plugins/crud/settings.crud.js +0 -1
  30. package/plugins/crud/settings.crud.js.map +1 -1
  31. package/plugins/crud/system.crud.d.ts +2 -0
  32. package/plugins/crud/system.crud.js +5 -4
  33. package/plugins/crud/system.crud.js.map +1 -1
  34. package/types.d.ts +59 -107
  35. package/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["contentEntry.crud.ts"],"names":["STATUS_DRAFT","STATUS_PUBLISHED","STATUS_UNPUBLISHED","STATUS_CHANGES_REQUESTED","STATUS_REVIEW_REQUESTED","convertDefaultValue","field","value","type","Boolean","Number","getDefaultValue","settings","multipleValues","defaultValue","undefined","predefinedValues","enabled","Array","isArray","values","selectedValue","find","selected","filter","map","cleanInputData","model","input","fields","reduce","acc","fieldId","cleanUpdatedInputData","createEntryId","version","entryId","id","increaseEntryIdVersion","WebinyError","createContentEntryCrud","params","storageOperations","context","getIdentity","onBeforeEntryCreate","onAfterEntryCreate","onBeforeEntryCreateRevision","onAfterEntryCreateRevision","onBeforeEntryUpdate","onAfterEntryUpdate","onBeforeEntryPublish","onAfterEntryPublish","onBeforeEntryUnpublish","onAfterEntryUnpublish","onBeforeEntryRequestChanges","onAfterEntryRequestChanges","onBeforeEntryRequestReview","onAfterEntryRequestReview","onBeforeEntryDelete","onAfterEntryDelete","onBeforeEntryDeleteRevision","onAfterEntryDeleteRevision","onBeforeEntryGet","onBeforeEntryList","checkEntryPermissions","check","utils","checkPermissions","deleteEntry","entry","storageEntry","publish","entries","delete","ex","message","code","getEntriesByIds","ids","permission","rwd","checkModelAccess","getByIds","validateOwnership","getEntryById","where","tenant","NotFoundError","getPublishedEntriesByIds","getPublishedByIds","getLatestEntriesByIds","getLatestByIds","getEntryRevisions","getRevisions","getEntry","sort","items","cms","listEntries","limit","length","latest","published","ownedBy","own","listWhere","locale","hasMoreItems","totalCount","cursor","list","meta","listLatestEntries","listPublishedEntries","createEntry","inputData","initialInput","data","validateEntries","identity","security","getLocale","owner","displayName","webinyVersion","WEBINY_VERSION","tenancy","getCurrentTenant","modelId","createdOn","Date","toISOString","savedOn","createdBy","locked","status","result","create","error","createEntryRevisionFrom","sourceId","uniqueId","originalStorageEntry","getRevisionById","latestStorageEntry","getLatestRevisionByEntryId","originalEntry","initialValues","checkOwnership","latestEntry","latestId","nextVersion","publishedOn","original","createRevisionFrom","updateEntry","update","republishEntry","deleteEntryRevision","revisionId","storageEntryToDelete","previousStorageEntry","getPreviousRevision","latestEntryRevisionId","entryToDelete","entryToSetAsLatest","storageEntryToSetAsLatest","deleteRevision","publishEntry","pw","currentDate","requestEntryChanges","requestChanges","requestEntryReview","latestEntryRevision","allowedStatuses","includes","requestReview","unpublishEntry","getPublishedRevisionByEntryId","unpublish"],"mappings":"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","sourcesContent":["/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport {\n CmsEntryContext,\n CmsEntryPermission,\n CmsEntry,\n CmsModel,\n CmsContext,\n CmsStorageEntry,\n HeadlessCmsStorageOperations,\n BeforeEntryCreateTopicParams,\n AfterEntryCreateTopicParams,\n BeforeEntryUpdateTopicParams,\n AfterEntryUpdateTopicParams,\n AfterEntryDeleteTopicParams,\n BeforeEntryDeleteTopicParams,\n BeforeEntryCreateRevisionTopicParams,\n AfterEntryCreateRevisionTopicParams,\n BeforeEntryPublishTopicParams,\n AfterEntryPublishTopicParams,\n BeforeEntryUnpublishTopicParams,\n AfterEntryUnpublishTopicParams,\n BeforeEntryRequestChangesTopicParams,\n AfterEntryRequestChangesTopicParams,\n BeforeEntryRequestReviewTopicParams,\n AfterEntryRequestReviewTopicParams,\n BeforeEntryDeleteRevisionTopicParams,\n AfterEntryDeleteRevisionTopicParams,\n BeforeEntryGetTopicParams,\n BeforeEntryListTopicParams,\n CmsEntryListWhere,\n UpdateCmsEntryInput,\n CreateCmsEntryInput,\n CmsModelField,\n CreatedBy\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport { validateModelEntryData } from \"./contentEntry/entryDataValidation\";\nimport WebinyError from \"@webiny/error\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeEntryCreate } from \"./contentEntry/beforeCreate\";\nimport { assignBeforeEntryUpdate } from \"./contentEntry/beforeUpdate\";\nimport { createIdentifier, parseIdentifier } from \"@webiny/utils\";\nimport {\n entryFromStorageTransform,\n entryToStorageTransform\n} from \"~/content/plugins/utils/entryStorage\";\nimport { assignAfterEntryDelete } from \"~/content/plugins/crud/contentEntry/afterDelete\";\nimport { referenceFieldsMapping } from \"./contentEntry/referenceFieldsMapping\";\n\nexport const STATUS_DRAFT = \"draft\";\nexport const STATUS_PUBLISHED = \"published\";\nexport const STATUS_UNPUBLISHED = \"unpublished\";\nexport const STATUS_CHANGES_REQUESTED = \"changesRequested\";\nexport const STATUS_REVIEW_REQUESTED = \"reviewRequested\";\n\n/**\n * Used for some fields to convert their values.\n */\nconst convertDefaultValue = (field: CmsModelField, value: any): string | number | boolean => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\nconst getDefaultValue = (field: CmsModelField): any => {\n const { settings, multipleValues } = field;\n if (settings && settings.defaultValue !== undefined) {\n return convertDefaultValue(field, settings.defaultValue);\n }\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n return undefined;\n }\n if (!multipleValues) {\n const selectedValue = predefinedValues.values.find(value => {\n return !!value.selected;\n });\n if (selectedValue) {\n return convertDefaultValue(field, selectedValue.value);\n }\n return undefined;\n }\n return predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n};\n/**\n * Cleans and adds default values to create input data.\n */\nconst cleanInputData = (model: CmsModel, input: CreateCmsEntryInput): CreateCmsEntryInput => {\n return model.fields.reduce((acc, field) => {\n const value = input[field.fieldId];\n /**\n * We set the default value on create input if value is not defined.\n */\n acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;\n return acc;\n }, {} as CreateCmsEntryInput);\n};\n/**\n * Cleans the update input entry data.\n */\nconst cleanUpdatedInputData = (\n model: CmsModel,\n input: UpdateCmsEntryInput\n): UpdateCmsEntryInput => {\n return model.fields.reduce((acc, field) => {\n /**\n * We cannot set default value here because user might want to updated only certain field values.\n */\n if (input[field.fieldId] === undefined) {\n return acc;\n }\n acc[field.fieldId] = input[field.fieldId];\n return acc;\n }, {} as CreateCmsEntryInput);\n};\n\ninterface DeleteEntryParams {\n model: CmsModel;\n entry: CmsEntry;\n storageEntry: CmsStorageEntry;\n}\n\ninterface EntryIdResult {\n /**\n * A generated id that will connect all the entry records.\n */\n entryId: string;\n /**\n * Version of the entry.\n */\n version: number;\n /**\n * Combination of entryId and version.\n */\n id: string;\n}\n\nconst createEntryId = (version: number): EntryIdResult => {\n const entryId = mdbid();\n return {\n entryId,\n version,\n id: createIdentifier({\n id: entryId,\n version\n })\n };\n};\n\nconst increaseEntryIdVersion = (id: string): EntryIdResult => {\n const { id: entryId, version } = parseIdentifier(id);\n if (!version) {\n throw new WebinyError(\n \"Cannot increase version on the ID without the version part.\",\n \"WRONG_ID\",\n {\n id\n }\n );\n }\n return {\n entryId,\n version: version + 1,\n id: createIdentifier({\n id: entryId,\n version: version + 1\n })\n };\n};\n\nexport interface CreateContentEntryCrudParams {\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createContentEntryCrud = (params: CreateContentEntryCrudParams): CmsEntryContext => {\n const { storageOperations, context, getIdentity } = params;\n\n const onBeforeEntryCreate = createTopic<BeforeEntryCreateTopicParams>();\n const onAfterEntryCreate = createTopic<AfterEntryCreateTopicParams>();\n const onBeforeEntryCreateRevision = createTopic<BeforeEntryCreateRevisionTopicParams>();\n const onAfterEntryCreateRevision = createTopic<AfterEntryCreateRevisionTopicParams>();\n const onBeforeEntryUpdate = createTopic<BeforeEntryUpdateTopicParams>();\n const onAfterEntryUpdate = createTopic<AfterEntryUpdateTopicParams>();\n const onBeforeEntryPublish = createTopic<BeforeEntryPublishTopicParams>();\n const onAfterEntryPublish = createTopic<AfterEntryPublishTopicParams>();\n const onBeforeEntryUnpublish = createTopic<BeforeEntryUnpublishTopicParams>();\n const onAfterEntryUnpublish = createTopic<AfterEntryUnpublishTopicParams>();\n const onBeforeEntryRequestChanges = createTopic<BeforeEntryRequestChangesTopicParams>();\n const onAfterEntryRequestChanges = createTopic<AfterEntryRequestChangesTopicParams>();\n const onBeforeEntryRequestReview = createTopic<BeforeEntryRequestReviewTopicParams>();\n const onAfterEntryRequestReview = createTopic<AfterEntryRequestReviewTopicParams>();\n const onBeforeEntryDelete = createTopic<BeforeEntryDeleteTopicParams>();\n const onAfterEntryDelete = createTopic<AfterEntryDeleteTopicParams>();\n const onBeforeEntryDeleteRevision = createTopic<BeforeEntryDeleteRevisionTopicParams>();\n const onAfterEntryDeleteRevision = createTopic<AfterEntryDeleteRevisionTopicParams>();\n const onBeforeEntryGet = createTopic<BeforeEntryGetTopicParams>();\n const onBeforeEntryList = createTopic<BeforeEntryListTopicParams>();\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeEntryCreate({\n context,\n onBeforeEntryCreate\n });\n assignBeforeEntryUpdate({\n context,\n onBeforeEntryUpdate\n });\n assignAfterEntryDelete({\n context,\n onAfterEntryDelete\n });\n\n const checkEntryPermissions = (check: {\n rwd?: string;\n pw?: string;\n }): Promise<CmsEntryPermission> => {\n return utils.checkPermissions(context, \"cms.contentEntry\", check);\n };\n\n /**\n * A helper to delete the entire entry.\n */\n const deleteEntry = async (params: DeleteEntryParams): Promise<void> => {\n const { model, entry, storageEntry } = params;\n try {\n await onBeforeEntryDelete.publish({\n entry,\n model\n });\n\n await storageOperations.entries.delete(model, {\n entry,\n storageEntry\n });\n\n await onAfterEntryDelete.publish({\n entry,\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry.\",\n ex.code || \"DELETE_ERROR\",\n {\n entry\n }\n );\n }\n };\n /**\n * A helper to get entries by revision IDs\n */\n const getEntriesByIds = async (model: CmsModel, ids: string[]) => {\n const permission = await checkEntryPermissions({ rwd: \"r\" });\n await utils.checkModelAccess(context, model);\n\n const entries = await storageOperations.entries.getByIds(model, {\n ids\n });\n\n return entries.filter(entry => utils.validateOwnership(context, permission, entry));\n };\n\n return {\n onBeforeEntryCreate,\n onAfterEntryCreate,\n onBeforeEntryCreateRevision,\n onAfterEntryCreateRevision,\n onBeforeEntryUpdate,\n onAfterEntryUpdate,\n onBeforeEntryDelete,\n onAfterEntryDelete,\n onBeforeEntryDeleteRevision,\n onAfterEntryDeleteRevision,\n onBeforeEntryPublish,\n onAfterEntryPublish,\n onBeforeEntryUnpublish,\n onAfterEntryUnpublish,\n onBeforeEntryRequestChanges,\n onAfterEntryRequestChanges,\n onBeforeEntryRequestReview,\n onAfterEntryRequestReview,\n onBeforeEntryGet,\n onBeforeEntryList,\n /**\n * Get entries by exact revision IDs from the database.\n */\n getEntriesByIds: getEntriesByIds,\n /**\n * Get a single entry by revision ID from the database.\n */\n getEntryById: async (model, id) => {\n const where: CmsEntryListWhere = {\n id,\n tenant: model.tenant\n };\n await onBeforeEntryGet.publish({\n where,\n model\n });\n const [entry] = await getEntriesByIds(model, [where.id as string]);\n if (!entry) {\n throw new NotFoundError(`Entry by ID \"${id}\" not found.`);\n }\n return entry;\n },\n /**\n * Get published revisions by entry IDs.\n */\n getPublishedEntriesByIds: async (model: CmsModel, ids: string[]) => {\n const permission = await checkEntryPermissions({ rwd: \"r\" });\n await utils.checkModelAccess(context, model);\n\n const entries = await storageOperations.entries.getPublishedByIds(model, {\n ids\n });\n\n return entries.filter(entry => utils.validateOwnership(context, permission, entry));\n },\n /**\n * Get latest revisions by entry IDs.\n */\n getLatestEntriesByIds: async (model: CmsModel, ids: string[]) => {\n const permission = await checkEntryPermissions({ rwd: \"r\" });\n await utils.checkModelAccess(context, model);\n\n const entries = await storageOperations.entries.getLatestByIds(model, {\n ids\n });\n\n return entries.filter(entry => utils.validateOwnership(context, permission, entry));\n },\n\n getEntryRevisions: async (model, entryId) => {\n return storageOperations.entries.getRevisions(model, {\n id: entryId\n });\n },\n /**\n * TODO determine if this method is required at all.\n *\n * @internal\n */\n getEntry: async (model, params) => {\n await checkEntryPermissions({ rwd: \"r\" });\n\n const { where, sort } = params;\n\n await onBeforeEntryGet.publish({\n where,\n model\n });\n\n const [items] = await context.cms.listEntries(model, {\n where,\n sort,\n limit: 1\n });\n\n if (items.length === 0) {\n throw new NotFoundError(`Entry not found!`);\n }\n return items[0];\n },\n /**\n * @description Should not be used directly. Internal use only!\n *\n * @internal\n */\n listEntries: async (model: CmsModel, params) => {\n const permission = await checkEntryPermissions({ rwd: \"r\" });\n await utils.checkModelAccess(context, model);\n\n const { where } = params;\n /**\n * Where must contain either latest or published keys.\n * We cannot list entries without one of those\n */\n if (where.latest && where.published) {\n throw new WebinyError(\n \"Cannot list entries that are both published and latest.\",\n \"LIST_ENTRIES_ERROR\",\n {\n where\n }\n );\n } else if (!where.latest && !where.published) {\n throw new WebinyError(\n \"Cannot list entries if we do not have latest or published defined.\",\n \"LIST_ENTRIES_ERROR\",\n {\n where\n }\n );\n }\n /**\n * Possibly only get records which are owned by current user.\n * Or if searching for the owner set that value - in the case that user can see other entries than their own.\n */\n const ownedBy = permission.own ? getIdentity().id : where.ownedBy;\n const listWhere: CmsEntryListWhere = {\n ...where,\n tenant: model.tenant,\n locale: model.locale\n };\n if (ownedBy !== undefined) {\n listWhere.ownedBy = ownedBy;\n }\n\n await onBeforeEntryList.publish({\n where: listWhere,\n model\n });\n\n const { hasMoreItems, totalCount, cursor, items } =\n await storageOperations.entries.list(model, {\n ...params,\n where: listWhere\n });\n\n const meta = {\n hasMoreItems,\n totalCount,\n /**\n * Cursor should be null if there are no more items to load.\n * Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.\n */\n cursor: hasMoreItems ? cursor : null\n };\n\n return [items, meta];\n },\n listLatestEntries: async function (model, params) {\n const where = params?.where || ({} as CmsEntryListWhere);\n if (!where.tenant) {\n where.tenant = model.tenant;\n }\n\n return context.cms.listEntries(model, {\n sort: [\"createdOn_DESC\"],\n ...(params || {}),\n where: {\n ...where,\n latest: true\n }\n });\n },\n listPublishedEntries: async function (model, params) {\n const where = params?.where || ({} as CmsEntryListWhere);\n if (!where.tenant) {\n where.tenant = model.tenant;\n }\n\n return context.cms.listEntries(model, {\n sort: [\"createdOn_DESC\"],\n ...(params || {}),\n where: {\n ...where,\n published: true\n }\n });\n },\n createEntry: async (model, inputData) => {\n await checkEntryPermissions({ rwd: \"w\" });\n await utils.checkModelAccess(context, model);\n\n /**\n * Make sure we only work with fields that are defined in the model.\n */\n const initialInput = cleanInputData(model, inputData);\n\n await validateModelEntryData({\n context,\n model,\n data: initialInput\n });\n\n const input = await referenceFieldsMapping({\n context,\n model,\n input: initialInput,\n validateEntries: true\n });\n\n const identity = context.security.getIdentity();\n const locale = context.cms.getLocale();\n\n const owner: CreatedBy = {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n };\n\n const { id, entryId, version } = createEntryId(1);\n\n const entry: CmsEntry = {\n webinyVersion: context.WEBINY_VERSION,\n tenant: context.tenancy.getCurrentTenant().id,\n entryId,\n id,\n modelId: model.modelId,\n locale: locale.code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: owner,\n ownedBy: owner,\n version,\n locked: false,\n status: STATUS_DRAFT,\n values: input\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n try {\n await onBeforeEntryCreate.publish({\n entry,\n input,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n const result = await storageOperations.entries.create(model, {\n input,\n entry,\n storageEntry\n });\n\n await onAfterEntryCreate.publish({\n entry,\n storageEntry: result,\n model,\n input\n });\n\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create content entry.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n ex.data || {\n error: ex,\n input,\n entry,\n storageEntry\n }\n );\n }\n },\n createEntryRevisionFrom: async (model, sourceId, inputData) => {\n const permission = await checkEntryPermissions({ rwd: \"w\" });\n await utils.checkModelAccess(context, model);\n\n /**\n * Make sure we only work with fields that are defined in the model.\n */\n const input = cleanUpdatedInputData(model, inputData);\n\n /**\n * Entries are identified by a common parent ID + Revision number.\n */\n const { id: uniqueId } = parseIdentifier(sourceId);\n\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id: sourceId\n });\n const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(\n model,\n {\n id: uniqueId\n }\n );\n\n if (!originalStorageEntry) {\n throw new NotFoundError(\n `Entry \"${sourceId}\" of model \"${model.modelId}\" was not found.`\n );\n }\n\n /**\n * We need to convert data from DB to its original form before using it further.\n */\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n const initialValues = {\n ...originalEntry.values,\n ...input\n };\n\n await validateModelEntryData({\n context,\n model,\n data: initialValues,\n entry: originalEntry\n });\n\n const values = await referenceFieldsMapping({\n context,\n model,\n input: initialValues,\n validateEntries: false\n });\n\n utils.checkOwnership(context, permission, originalEntry);\n\n const latestEntry = latestStorageEntry\n ? await entryFromStorageTransform(context, model, latestStorageEntry)\n : null;\n\n const identity = context.security.getIdentity();\n\n const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;\n const { id, version: nextVersion } = increaseEntryIdVersion(latestId);\n\n const entry: CmsEntry = {\n ...originalEntry,\n id,\n version: nextVersion,\n savedOn: new Date().toISOString(),\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n locked: false,\n publishedOn: undefined,\n status: STATUS_DRAFT,\n values\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryCreateRevision.publish({\n input,\n entry,\n original: originalEntry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.createRevisionFrom(model, {\n entry,\n storageEntry,\n originalEntry,\n originalStorageEntry,\n latestEntry,\n latestStorageEntry\n });\n\n await onAfterEntryCreateRevision.publish({\n input,\n entry,\n model,\n original: originalEntry,\n storageEntry: result\n });\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create entry from existing one.\",\n ex.code || \"CREATE_FROM_REVISION_ERROR\",\n {\n error: ex,\n entry,\n storageEntry,\n originalEntry,\n originalStorageEntry\n }\n );\n }\n },\n updateEntry: async (model, id, inputData) => {\n const permission = await checkEntryPermissions({ rwd: \"w\" });\n await utils.checkModelAccess(context, model);\n\n /**\n * Make sure we only work with fields that are defined in the model.\n */\n const input = cleanUpdatedInputData(model, inputData);\n\n /**\n * The entry we are going to update.\n */\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" of model \"${model.modelId}\" was not found.`);\n }\n\n if (originalStorageEntry.locked) {\n throw new WebinyError(\n `Cannot update entry because it's locked.`,\n \"CONTENT_ENTRY_UPDATE_ERROR\"\n );\n }\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n await validateModelEntryData({\n context,\n model,\n data: input,\n entry: originalEntry\n });\n\n utils.checkOwnership(context, permission, originalEntry);\n\n const initialValues = {\n /**\n * Existing values from the database, transformed back to original, of course.\n */\n ...originalEntry.values,\n /**\n * Add new values.\n */\n ...input\n };\n\n const values = await referenceFieldsMapping({\n context,\n model,\n input: initialValues,\n validateEntries: false\n });\n\n /**\n * We always send the full entry to the hooks and storage operations update.\n */\n const entry: CmsEntry = {\n ...originalEntry,\n savedOn: new Date().toISOString(),\n values\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryUpdate.publish({\n entry,\n model,\n input,\n original: originalEntry\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.update(model, {\n originalEntry,\n originalStorageEntry,\n entry,\n storageEntry,\n input\n });\n\n await onAfterEntryUpdate.publish({\n entry,\n storageEntry: result,\n model,\n input,\n original: originalEntry\n });\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update existing entry.\",\n ex.code || \"UPDATE_ERROR\",\n {\n error: ex,\n entry,\n storageEntry,\n originalEntry,\n input\n }\n );\n }\n },\n republishEntry: async (model, id) => {\n await checkEntryPermissions({ rwd: \"w\" });\n await utils.checkModelAccess(context, model);\n /**\n * Fetch the entry from the storage.\n */\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" was not found!`);\n }\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n /**\n * We can only process published entries.\n */\n if (originalEntry.status !== \"published\") {\n throw new WebinyError(\n \"Entry with given ID is not published!\",\n \"NOT_PUBLISHED_ERROR\",\n {\n id,\n original: originalEntry\n }\n );\n }\n\n const values = await referenceFieldsMapping({\n context,\n model,\n input: originalEntry.values,\n validateEntries: false\n });\n\n const entry: CmsEntry = {\n ...originalEntry,\n savedOn: new Date().toISOString(),\n webinyVersion: context.WEBINY_VERSION,\n values\n };\n\n const storageEntry = await entryToStorageTransform(context, model, entry);\n /**\n * First we need to update existing entry.\n */\n try {\n await storageOperations.entries.update(model, {\n originalEntry,\n originalStorageEntry,\n entry,\n storageEntry,\n input: {}\n });\n } catch (ex) {\n throw new WebinyError(\n \"Could not update existing entry with new data while re-publishing.\",\n \"REPUBLISH_UPDATE_ERROR\",\n {\n entry\n }\n );\n }\n /**\n * Then we move onto publishing it again.\n */\n try {\n return await storageOperations.entries.publish(model, {\n originalEntry,\n originalStorageEntry,\n entry,\n storageEntry\n });\n } catch (ex) {\n throw new WebinyError(\n \"Could not publish existing entry while re-publishing.\",\n \"REPUBLISH_PUBLISH_ERROR\",\n {\n entry\n }\n );\n }\n },\n deleteEntryRevision: async (model, revisionId) => {\n const permission = await checkEntryPermissions({ rwd: \"d\" });\n await utils.checkModelAccess(context, model);\n\n const { id: entryId, version } = parseIdentifier(revisionId);\n\n const storageEntryToDelete = await storageOperations.entries.getRevisionById(model, {\n id: revisionId\n });\n const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(\n model,\n {\n id: entryId\n }\n );\n const previousStorageEntry = await storageOperations.entries.getPreviousRevision(\n model,\n {\n entryId,\n version: version as number\n }\n );\n\n if (!storageEntryToDelete) {\n throw new NotFoundError(`Entry \"${revisionId}\" was not found!`);\n }\n\n utils.checkOwnership(context, permission, storageEntryToDelete);\n\n const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;\n\n const entryToDelete = await entryFromStorageTransform(\n context,\n model,\n storageEntryToDelete\n );\n /**\n * If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.\n * At this point deleteRevision hooks are not fired.\n */\n if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {\n return await deleteEntry({\n model,\n entry: entryToDelete,\n storageEntry: storageEntryToDelete\n });\n }\n /**\n * If targeted record is latest entry revision, set the previous one as the new latest\n */\n let entryToSetAsLatest: CmsEntry | null = null;\n let storageEntryToSetAsLatest: CmsStorageEntry | null = null;\n if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {\n entryToSetAsLatest = await entryFromStorageTransform(\n context,\n model,\n previousStorageEntry\n );\n storageEntryToSetAsLatest = previousStorageEntry;\n }\n\n try {\n await onBeforeEntryDeleteRevision.publish({\n entry: entryToDelete,\n model\n });\n\n await storageOperations.entries.deleteRevision(model, {\n entryToDelete,\n storageEntryToDelete,\n entryToSetAsLatest,\n storageEntryToSetAsLatest\n });\n\n await onAfterEntryDeleteRevision.publish({\n entry: entryToDelete,\n model\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"DELETE_REVISION_ERROR\", {\n error: ex,\n entryToDelete,\n storageEntryToDelete,\n entryToSetAsLatest,\n storageEntryToSetAsLatest\n });\n }\n },\n deleteEntry: async (model, entryId) => {\n const permission = await checkEntryPermissions({ rwd: \"d\" });\n await utils.checkModelAccess(context, model);\n\n const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {\n id: entryId\n });\n\n if (!storageEntry) {\n throw new NotFoundError(`Entry \"${entryId}\" was not found!`);\n }\n\n utils.checkOwnership(context, permission, storageEntry);\n\n const entry = await entryFromStorageTransform(context, model, storageEntry);\n\n return await deleteEntry({\n model,\n entry,\n storageEntry\n });\n },\n publishEntry: async (model, id) => {\n const permission = await checkEntryPermissions({ pw: \"p\" });\n await utils.checkModelAccess(context, model);\n\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n\n if (!originalStorageEntry) {\n throw new NotFoundError(\n `Entry \"${id}\" in the model \"${model.modelId}\" was not found.`\n );\n }\n\n utils.checkOwnership(context, permission, originalStorageEntry);\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n const currentDate = new Date().toISOString();\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_PUBLISHED,\n locked: true,\n savedOn: currentDate,\n publishedOn: currentDate\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryPublish.publish({\n entry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n const result = await storageOperations.entries.publish(model, {\n entry,\n storageEntry,\n originalEntry,\n originalStorageEntry\n });\n\n await onAfterEntryPublish.publish({\n entry,\n storageEntry: result,\n model\n });\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not publish entry.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n error: ex,\n entry,\n storageEntry,\n originalEntry,\n originalStorageEntry\n }\n );\n }\n },\n requestEntryChanges: async (model, id) => {\n const permission = await checkEntryPermissions({ pw: \"c\" });\n\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" of model \"${model.modelId}\" was not found.`);\n }\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n if (originalEntry.status !== STATUS_REVIEW_REQUESTED) {\n throw new WebinyError(\n \"Cannot request changes on an entry that's not under review.\",\n \"ENTRY_NOT_UNDER_REVIEW\"\n );\n }\n\n const identity = context.security.getIdentity();\n if (originalEntry.ownedBy.id === identity.id) {\n throw new WebinyError(\n \"You cannot request changes on your own entry.\",\n \"CANNOT_REQUEST_CHANGES_ON_OWN_ENTRY\"\n );\n }\n\n utils.checkOwnership(context, permission, originalEntry);\n\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_CHANGES_REQUESTED\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryRequestChanges.publish({\n entry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.requestChanges(model, {\n originalEntry,\n originalStorageEntry,\n entry,\n storageEntry\n });\n\n await onAfterEntryRequestChanges.publish({\n entry,\n storageEntry: result,\n model\n });\n\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request changes for the entry.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n originalEntry\n }\n );\n }\n },\n requestEntryReview: async (model, id) => {\n const permission = await checkEntryPermissions({ pw: \"r\" });\n const { id: entryId } = parseIdentifier(id);\n\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n const latestEntryRevision = await storageOperations.entries.getLatestRevisionByEntryId(\n model,\n {\n id: entryId\n }\n );\n\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" of model \"${model.modelId}\" was not found.`);\n } else if (!latestEntryRevision) {\n throw new NotFoundError(`Entry \"${id}\" does not have latest record`);\n }\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n const allowedStatuses = [STATUS_DRAFT, STATUS_CHANGES_REQUESTED];\n if (!allowedStatuses.includes(originalEntry.status)) {\n throw new WebinyError(\n \"Cannot request review - entry is not a draft nor was a change request issued.\",\n \"REQUEST_REVIEW_ERROR\",\n {\n entry: originalEntry\n }\n );\n }\n\n utils.checkOwnership(context, permission, originalEntry);\n\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_REVIEW_REQUESTED\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryRequestReview.publish({\n entry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.requestReview(model, {\n originalEntry,\n originalStorageEntry,\n entry,\n storageEntry\n });\n\n await onAfterEntryRequestReview.publish({\n entry,\n storageEntry: result,\n model\n });\n\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request review on the entry.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n originalEntry,\n entry\n }\n );\n }\n },\n unpublishEntry: async (model, id) => {\n const permission = await checkEntryPermissions({ pw: \"u\" });\n\n const { id: entryId } = parseIdentifier(id);\n\n const originalStorageEntry =\n await storageOperations.entries.getPublishedRevisionByEntryId(model, {\n id: entryId\n });\n\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" of model \"${model.modelId}\" was not found.`);\n }\n\n if (originalStorageEntry.id !== id) {\n throw new WebinyError(`Entry is not published.`, \"UNPUBLISH_ERROR\", {\n entry: originalStorageEntry\n });\n }\n\n utils.checkOwnership(context, permission, originalStorageEntry);\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_UNPUBLISHED\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryUnpublish.publish({\n entry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.unpublish(model, {\n originalEntry,\n originalStorageEntry,\n entry,\n storageEntry\n });\n\n await onAfterEntryUnpublish.publish({\n entry,\n storageEntry: result,\n model\n });\n\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not unpublish entry.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n originalEntry,\n originalStorageEntry,\n entry,\n storageEntry\n }\n );\n }\n }\n };\n};\n"]}
1
+ {"version":3,"sources":["contentEntry.crud.ts"],"names":["STATUS_DRAFT","STATUS_PUBLISHED","STATUS_UNPUBLISHED","STATUS_CHANGES_REQUESTED","STATUS_REVIEW_REQUESTED","convertDefaultValue","field","value","type","Boolean","Number","getDefaultValue","settings","multipleValues","defaultValue","undefined","predefinedValues","enabled","Array","isArray","values","selectedValue","find","selected","filter","map","cleanInputData","model","input","fields","reduce","acc","fieldId","cleanUpdatedInputData","createEntryId","version","entryId","id","increaseEntryIdVersion","WebinyError","getSearchableFields","params","plugins","fieldPluginMap","byType","collection","fieldType","plugin","fullTextSearch","length","includes","createContentEntryCrud","storageOperations","context","getIdentity","getTenant","onBeforeEntryCreate","onAfterEntryCreate","onBeforeEntryCreateRevision","onAfterEntryCreateRevision","onBeforeEntryUpdate","onAfterEntryUpdate","onBeforeEntryPublish","onAfterEntryPublish","onBeforeEntryUnpublish","onAfterEntryUnpublish","onBeforeEntryRequestChanges","onAfterEntryRequestChanges","onBeforeEntryRequestReview","onAfterEntryRequestReview","onBeforeEntryDelete","onAfterEntryDelete","onBeforeEntryDeleteRevision","onAfterEntryDeleteRevision","onBeforeEntryGet","onBeforeEntryList","checkEntryPermissions","check","utils","checkPermissions","deleteEntry","entry","publish","entries","delete","ex","message","code","getEntriesByIds","ids","permission","rwd","checkModelAccess","getByIds","validateOwnership","getEntryById","where","NotFoundError","getPublishedEntriesByIds","getPublishedByIds","getLatestEntriesByIds","getLatestByIds","getEntryRevisions","getRevisions","getEntry","sort","items","cms","listEntries","limit","initialWhere","ownedBy","own","latest","published","hasMoreItems","totalCount","cursor","list","meta","listLatestEntries","listPublishedEntries","createEntry","inputData","initialInput","data","validateEntries","identity","security","locale","getLocale","owner","displayName","webinyVersion","WEBINY_VERSION","tenant","modelId","createdOn","Date","toISOString","savedOn","createdBy","locked","status","storageEntry","result","create","error","createEntryRevisionFrom","sourceId","uniqueId","originalStorageEntry","getRevisionById","latestStorageEntry","getLatestRevisionByEntryId","originalEntry","initialValues","checkOwnership","latestEntry","latestId","nextVersion","publishedOn","original","createRevisionFrom","updateEntry","update","republishEntry","deleteEntryRevision","revisionId","storageEntryToDelete","previousStorageEntry","getPreviousRevision","latestEntryRevisionId","entryToDelete","entryToSetAsLatest","storageEntryToSetAsLatest","deleteRevision","publishEntry","pw","currentDate","requestEntryChanges","requestChanges","requestEntryReview","latestEntryRevision","allowedStatuses","requestReview","unpublishEntry","getPublishedRevisionByEntryId","unpublish"],"mappings":"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","sourcesContent":["/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport {\n CmsEntryContext,\n CmsEntryPermission,\n CmsEntry,\n CmsModel,\n CmsContext,\n CmsStorageEntry,\n HeadlessCmsStorageOperations,\n BeforeEntryCreateTopicParams,\n AfterEntryCreateTopicParams,\n BeforeEntryUpdateTopicParams,\n AfterEntryUpdateTopicParams,\n AfterEntryDeleteTopicParams,\n BeforeEntryDeleteTopicParams,\n BeforeEntryCreateRevisionTopicParams,\n AfterEntryCreateRevisionTopicParams,\n BeforeEntryPublishTopicParams,\n AfterEntryPublishTopicParams,\n BeforeEntryUnpublishTopicParams,\n AfterEntryUnpublishTopicParams,\n BeforeEntryRequestChangesTopicParams,\n AfterEntryRequestChangesTopicParams,\n BeforeEntryRequestReviewTopicParams,\n AfterEntryRequestReviewTopicParams,\n BeforeEntryDeleteRevisionTopicParams,\n AfterEntryDeleteRevisionTopicParams,\n BeforeEntryGetTopicParams,\n BeforeEntryListTopicParams,\n CmsEntryListWhere,\n UpdateCmsEntryInput,\n CreateCmsEntryInput,\n CmsModelField,\n CreatedBy,\n CmsModelFieldToGraphQLPlugin\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport { validateModelEntryData } from \"./contentEntry/entryDataValidation\";\nimport WebinyError from \"@webiny/error\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeEntryCreate } from \"./contentEntry/beforeCreate\";\nimport { assignBeforeEntryUpdate } from \"./contentEntry/beforeUpdate\";\nimport { createIdentifier, parseIdentifier } from \"@webiny/utils\";\nimport {\n entryFromStorageTransform,\n entryToStorageTransform\n} from \"~/content/plugins/utils/entryStorage\";\nimport { assignAfterEntryDelete } from \"~/content/plugins/crud/contentEntry/afterDelete\";\nimport { referenceFieldsMapping } from \"./contentEntry/referenceFieldsMapping\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\n\nexport const STATUS_DRAFT = \"draft\";\nexport const STATUS_PUBLISHED = \"published\";\nexport const STATUS_UNPUBLISHED = \"unpublished\";\nexport const STATUS_CHANGES_REQUESTED = \"changesRequested\";\nexport const STATUS_REVIEW_REQUESTED = \"reviewRequested\";\n\n/**\n * Used for some fields to convert their values.\n */\nconst convertDefaultValue = (field: CmsModelField, value: any): string | number | boolean => {\n switch (field.type) {\n case \"boolean\":\n return Boolean(value);\n case \"number\":\n return Number(value);\n default:\n return value;\n }\n};\nconst getDefaultValue = (field: CmsModelField): any => {\n const { settings, multipleValues } = field;\n if (settings && settings.defaultValue !== undefined) {\n return convertDefaultValue(field, settings.defaultValue);\n }\n const { predefinedValues } = field;\n if (\n !predefinedValues ||\n !predefinedValues.enabled ||\n Array.isArray(predefinedValues.values) === false\n ) {\n return undefined;\n }\n if (!multipleValues) {\n const selectedValue = predefinedValues.values.find(value => {\n return !!value.selected;\n });\n if (selectedValue) {\n return convertDefaultValue(field, selectedValue.value);\n }\n return undefined;\n }\n return predefinedValues.values\n .filter(({ selected }) => !!selected)\n .map(({ value }) => {\n return convertDefaultValue(field, value);\n });\n};\n/**\n * Cleans and adds default values to create input data.\n */\nconst cleanInputData = (model: CmsModel, input: CreateCmsEntryInput): CreateCmsEntryInput => {\n return model.fields.reduce((acc, field) => {\n const value = input[field.fieldId];\n /**\n * We set the default value on create input if value is not defined.\n */\n acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;\n return acc;\n }, {} as CreateCmsEntryInput);\n};\n/**\n * Cleans the update input entry data.\n */\nconst cleanUpdatedInputData = (\n model: CmsModel,\n input: UpdateCmsEntryInput\n): UpdateCmsEntryInput => {\n return model.fields.reduce((acc, field) => {\n /**\n * We cannot set default value here because user might want to updated only certain field values.\n */\n if (input[field.fieldId] === undefined) {\n return acc;\n }\n acc[field.fieldId] = input[field.fieldId];\n return acc;\n }, {} as CreateCmsEntryInput);\n};\n\ninterface DeleteEntryParams {\n model: CmsModel;\n entry: CmsEntry;\n}\n\ninterface EntryIdResult {\n /**\n * A generated id that will connect all the entry records.\n */\n entryId: string;\n /**\n * Version of the entry.\n */\n version: number;\n /**\n * Combination of entryId and version.\n */\n id: string;\n}\n\nconst createEntryId = (version: number): EntryIdResult => {\n const entryId = mdbid();\n return {\n entryId,\n version,\n id: createIdentifier({\n id: entryId,\n version\n })\n };\n};\n\nconst increaseEntryIdVersion = (id: string): EntryIdResult => {\n const { id: entryId, version } = parseIdentifier(id);\n if (!version) {\n throw new WebinyError(\n \"Cannot increase version on the ID without the version part.\",\n \"WRONG_ID\",\n {\n id\n }\n );\n }\n return {\n entryId,\n version: version + 1,\n id: createIdentifier({\n id: entryId,\n version: version + 1\n })\n };\n};\n\ninterface GetSearchableFieldsParams {\n plugins: PluginsContainer;\n model: CmsModel;\n fields?: string[];\n}\nconst getSearchableFields = (params: GetSearchableFieldsParams): string[] => {\n const { plugins, model, fields } = params;\n\n const fieldPluginMap = plugins\n .byType<CmsModelFieldToGraphQLPlugin>(\"cms-model-field-to-graphql\")\n .reduce((collection, field) => {\n collection[field.fieldType] = field;\n return collection;\n }, {} as Record<string, CmsModelFieldToGraphQLPlugin>);\n\n return model.fields\n .filter(field => {\n const plugin = fieldPluginMap[field.type];\n if (!plugin) {\n return false;\n } else if (!plugin.fullTextSearch) {\n return false;\n } else if (!fields || fields.length === 0) {\n return true;\n }\n return fields.includes(field.fieldId);\n })\n .map(field => field.fieldId);\n};\n\nexport interface CreateContentEntryCrudParams {\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n getTenant: () => Tenant;\n}\n\nexport const createContentEntryCrud = (params: CreateContentEntryCrudParams): CmsEntryContext => {\n const { storageOperations, context, getIdentity, getTenant } = params;\n\n const onBeforeEntryCreate = createTopic<BeforeEntryCreateTopicParams>();\n const onAfterEntryCreate = createTopic<AfterEntryCreateTopicParams>();\n const onBeforeEntryCreateRevision = createTopic<BeforeEntryCreateRevisionTopicParams>();\n const onAfterEntryCreateRevision = createTopic<AfterEntryCreateRevisionTopicParams>();\n const onBeforeEntryUpdate = createTopic<BeforeEntryUpdateTopicParams>();\n const onAfterEntryUpdate = createTopic<AfterEntryUpdateTopicParams>();\n const onBeforeEntryPublish = createTopic<BeforeEntryPublishTopicParams>();\n const onAfterEntryPublish = createTopic<AfterEntryPublishTopicParams>();\n const onBeforeEntryUnpublish = createTopic<BeforeEntryUnpublishTopicParams>();\n const onAfterEntryUnpublish = createTopic<AfterEntryUnpublishTopicParams>();\n const onBeforeEntryRequestChanges = createTopic<BeforeEntryRequestChangesTopicParams>();\n const onAfterEntryRequestChanges = createTopic<AfterEntryRequestChangesTopicParams>();\n const onBeforeEntryRequestReview = createTopic<BeforeEntryRequestReviewTopicParams>();\n const onAfterEntryRequestReview = createTopic<AfterEntryRequestReviewTopicParams>();\n const onBeforeEntryDelete = createTopic<BeforeEntryDeleteTopicParams>();\n const onAfterEntryDelete = createTopic<AfterEntryDeleteTopicParams>();\n const onBeforeEntryDeleteRevision = createTopic<BeforeEntryDeleteRevisionTopicParams>();\n const onAfterEntryDeleteRevision = createTopic<AfterEntryDeleteRevisionTopicParams>();\n const onBeforeEntryGet = createTopic<BeforeEntryGetTopicParams>();\n const onBeforeEntryList = createTopic<BeforeEntryListTopicParams>();\n\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeEntryCreate({\n context,\n onBeforeEntryCreate\n });\n assignBeforeEntryUpdate({\n context,\n onBeforeEntryUpdate\n });\n assignAfterEntryDelete({\n context,\n onAfterEntryDelete\n });\n\n const checkEntryPermissions = (check: {\n rwd?: string;\n pw?: string;\n }): Promise<CmsEntryPermission> => {\n return utils.checkPermissions(context, \"cms.contentEntry\", check);\n };\n\n /**\n * A helper to delete the entire entry.\n */\n const deleteEntry = async (params: DeleteEntryParams): Promise<void> => {\n const { model, entry } = params;\n try {\n await onBeforeEntryDelete.publish({\n entry,\n model\n });\n\n await storageOperations.entries.delete(model, {\n entry\n });\n\n await onAfterEntryDelete.publish({\n entry,\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry.\",\n ex.code || \"DELETE_ERROR\",\n {\n entry\n }\n );\n }\n };\n /**\n * A helper to get entries by revision IDs\n */\n const getEntriesByIds = async (model: CmsModel, ids: string[]) => {\n const permission = await checkEntryPermissions({ rwd: \"r\" });\n await utils.checkModelAccess(context, model);\n\n const entries = await storageOperations.entries.getByIds(model, {\n ids\n });\n\n return entries.filter(entry => utils.validateOwnership(context, permission, entry));\n };\n\n return {\n onBeforeEntryCreate,\n onAfterEntryCreate,\n onBeforeEntryCreateRevision,\n onAfterEntryCreateRevision,\n onBeforeEntryUpdate,\n onAfterEntryUpdate,\n onBeforeEntryDelete,\n onAfterEntryDelete,\n onBeforeEntryDeleteRevision,\n onAfterEntryDeleteRevision,\n onBeforeEntryPublish,\n onAfterEntryPublish,\n onBeforeEntryUnpublish,\n onAfterEntryUnpublish,\n onBeforeEntryRequestChanges,\n onAfterEntryRequestChanges,\n onBeforeEntryRequestReview,\n onAfterEntryRequestReview,\n onBeforeEntryGet,\n onBeforeEntryList,\n /**\n * Get entries by exact revision IDs from the database.\n */\n getEntriesByIds: getEntriesByIds,\n /**\n * Get a single entry by revision ID from the database.\n */\n getEntryById: async (model, id) => {\n const where: CmsEntryListWhere = {\n id\n };\n await onBeforeEntryGet.publish({\n where,\n model\n });\n const [entry] = await getEntriesByIds(model, [id]);\n if (!entry) {\n throw new NotFoundError(`Entry by ID \"${id}\" not found.`);\n }\n return entry;\n },\n /**\n * Get published revisions by entry IDs.\n */\n getPublishedEntriesByIds: async (model: CmsModel, ids: string[]) => {\n const permission = await checkEntryPermissions({ rwd: \"r\" });\n await utils.checkModelAccess(context, model);\n\n const entries = await storageOperations.entries.getPublishedByIds(model, {\n ids\n });\n\n return entries.filter(entry => utils.validateOwnership(context, permission, entry));\n },\n /**\n * Get latest revisions by entry IDs.\n */\n getLatestEntriesByIds: async (model: CmsModel, ids: string[]) => {\n const permission = await checkEntryPermissions({ rwd: \"r\" });\n await utils.checkModelAccess(context, model);\n\n const entries = await storageOperations.entries.getLatestByIds(model, {\n ids\n });\n\n return entries.filter(entry => utils.validateOwnership(context, permission, entry));\n },\n\n getEntryRevisions: async (model, entryId) => {\n return storageOperations.entries.getRevisions(model, {\n id: entryId\n });\n },\n /**\n * TODO determine if this method is required at all.\n *\n * @internal\n */\n getEntry: async (model, params) => {\n await checkEntryPermissions({ rwd: \"r\" });\n\n const { where, sort } = params;\n\n await onBeforeEntryGet.publish({\n where,\n model\n });\n\n const [items] = await context.cms.listEntries(model, {\n where,\n sort,\n limit: 1\n });\n\n if (items.length === 0) {\n throw new NotFoundError(`Entry not found!`);\n }\n return items[0];\n },\n /**\n * @description Should not be used directly. Internal use only!\n *\n * @internal\n */\n listEntries: async (model: CmsModel, params) => {\n const permission = await checkEntryPermissions({ rwd: \"r\" });\n await utils.checkModelAccess(context, model);\n\n const { where: initialWhere } = params;\n /**\n * We always assign tenant and locale because we do not allow one model to have content through multiple tenants.\n */\n const where: CmsEntryListWhere = {\n ...initialWhere\n };\n /**\n * Possibly only get records which are owned by current user.\n * Or if searching for the owner set that value - in the case that user can see other entries than their own.\n */\n const ownedBy = permission.own ? getIdentity().id : where.ownedBy;\n if (ownedBy !== undefined) {\n where.ownedBy = ownedBy;\n }\n /**\n * Where must contain either latest or published keys.\n * We cannot list entries without one of those\n */\n if (where.latest && where.published) {\n throw new WebinyError(\n \"Cannot list entries that are both published and latest.\",\n \"LIST_ENTRIES_ERROR\",\n {\n where\n }\n );\n } else if (!where.latest && !where.published) {\n throw new WebinyError(\n \"Cannot list entries if we do not have latest or published defined.\",\n \"LIST_ENTRIES_ERROR\",\n {\n where\n }\n );\n }\n\n await onBeforeEntryList.publish({\n where,\n model\n });\n\n const fields = getSearchableFields({\n model,\n plugins: context.plugins,\n fields: params.fields || []\n });\n\n const { hasMoreItems, totalCount, cursor, items } =\n await storageOperations.entries.list(model, {\n ...params,\n where,\n fields\n });\n\n const meta = {\n hasMoreItems,\n totalCount,\n /**\n * Cursor should be null if there are no more items to load.\n * Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.\n */\n cursor: hasMoreItems ? cursor : null\n };\n\n return [items, meta];\n },\n listLatestEntries: async function (model, params) {\n const where = params?.where || ({} as CmsEntryListWhere);\n\n return context.cms.listEntries(model, {\n sort: [\"createdOn_DESC\"],\n ...(params || {}),\n where: {\n ...where,\n latest: true\n }\n });\n },\n listPublishedEntries: async function (model, params) {\n const where = params?.where || ({} as CmsEntryListWhere);\n\n return context.cms.listEntries(model, {\n sort: [\"createdOn_DESC\"],\n ...(params || {}),\n where: {\n ...where,\n published: true\n }\n });\n },\n createEntry: async (model, inputData) => {\n await checkEntryPermissions({ rwd: \"w\" });\n await utils.checkModelAccess(context, model);\n\n /**\n * Make sure we only work with fields that are defined in the model.\n */\n const initialInput = cleanInputData(model, inputData);\n\n await validateModelEntryData({\n context,\n model,\n data: initialInput\n });\n\n const input = await referenceFieldsMapping({\n context,\n model,\n input: initialInput,\n validateEntries: true\n });\n\n const identity = context.security.getIdentity();\n const locale = context.cms.getLocale();\n\n const owner: CreatedBy = {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n };\n\n const { id, entryId, version } = createEntryId(1);\n\n const entry: CmsEntry = {\n webinyVersion: context.WEBINY_VERSION,\n tenant: getTenant().id,\n entryId,\n id,\n modelId: model.modelId,\n locale: locale.code,\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n createdBy: owner,\n ownedBy: owner,\n version,\n locked: false,\n status: STATUS_DRAFT,\n values: input\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n try {\n await onBeforeEntryCreate.publish({\n entry,\n input,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n const result = await storageOperations.entries.create(model, {\n entry,\n storageEntry\n });\n\n await onAfterEntryCreate.publish({\n entry,\n storageEntry: result,\n model,\n input\n });\n\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create content entry.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n ex.data || {\n error: ex,\n input,\n entry,\n storageEntry\n }\n );\n }\n },\n createEntryRevisionFrom: async (model, sourceId, inputData) => {\n const permission = await checkEntryPermissions({ rwd: \"w\" });\n await utils.checkModelAccess(context, model);\n\n /**\n * Make sure we only work with fields that are defined in the model.\n */\n const input = cleanUpdatedInputData(model, inputData);\n\n /**\n * Entries are identified by a common parent ID + Revision number.\n */\n const { id: uniqueId } = parseIdentifier(sourceId);\n\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id: sourceId\n });\n const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(\n model,\n {\n id: uniqueId\n }\n );\n\n if (!originalStorageEntry) {\n throw new NotFoundError(\n `Entry \"${sourceId}\" of model \"${model.modelId}\" was not found.`\n );\n }\n\n /**\n * We need to convert data from DB to its original form before using it further.\n */\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n const initialValues = {\n ...originalEntry.values,\n ...input\n };\n\n await validateModelEntryData({\n context,\n model,\n data: initialValues,\n entry: originalEntry\n });\n\n const values = await referenceFieldsMapping({\n context,\n model,\n input: initialValues,\n validateEntries: false\n });\n\n utils.checkOwnership(context, permission, originalEntry);\n\n const latestEntry = latestStorageEntry\n ? await entryFromStorageTransform(context, model, latestStorageEntry)\n : null;\n\n const identity = context.security.getIdentity();\n\n const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;\n const { id, version: nextVersion } = increaseEntryIdVersion(latestId);\n\n const entry: CmsEntry = {\n ...originalEntry,\n id,\n version: nextVersion,\n savedOn: new Date().toISOString(),\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n locked: false,\n publishedOn: undefined,\n status: STATUS_DRAFT,\n values\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryCreateRevision.publish({\n input,\n entry,\n original: originalEntry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.createRevisionFrom(model, {\n entry,\n storageEntry,\n latestEntry,\n latestStorageEntry\n });\n\n await onAfterEntryCreateRevision.publish({\n input,\n entry,\n model,\n original: originalEntry,\n storageEntry: result\n });\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create entry from existing one.\",\n ex.code || \"CREATE_FROM_REVISION_ERROR\",\n {\n error: ex,\n entry,\n storageEntry,\n originalEntry,\n originalStorageEntry\n }\n );\n }\n },\n updateEntry: async (model, id, inputData) => {\n const permission = await checkEntryPermissions({ rwd: \"w\" });\n await utils.checkModelAccess(context, model);\n\n /**\n * Make sure we only work with fields that are defined in the model.\n */\n const input = cleanUpdatedInputData(model, inputData);\n\n /**\n * The entry we are going to update.\n */\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" of model \"${model.modelId}\" was not found.`);\n }\n\n if (originalStorageEntry.locked) {\n throw new WebinyError(\n `Cannot update entry because it's locked.`,\n \"CONTENT_ENTRY_UPDATE_ERROR\"\n );\n }\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n await validateModelEntryData({\n context,\n model,\n data: input,\n entry: originalEntry\n });\n\n utils.checkOwnership(context, permission, originalEntry);\n\n const initialValues = {\n /**\n * Existing values from the database, transformed back to original, of course.\n */\n ...originalEntry.values,\n /**\n * Add new values.\n */\n ...input\n };\n\n const values = await referenceFieldsMapping({\n context,\n model,\n input: initialValues,\n validateEntries: false\n });\n\n /**\n * We always send the full entry to the hooks and storage operations update.\n */\n const entry: CmsEntry = {\n ...originalEntry,\n savedOn: new Date().toISOString(),\n values\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryUpdate.publish({\n entry,\n model,\n input,\n original: originalEntry\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.update(model, {\n entry,\n storageEntry\n });\n\n await onAfterEntryUpdate.publish({\n entry,\n storageEntry: result,\n model,\n input,\n original: originalEntry\n });\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update existing entry.\",\n ex.code || \"UPDATE_ERROR\",\n {\n error: ex,\n entry,\n storageEntry,\n originalEntry,\n input\n }\n );\n }\n },\n republishEntry: async (model, id) => {\n await checkEntryPermissions({ rwd: \"w\" });\n await utils.checkModelAccess(context, model);\n /**\n * Fetch the entry from the storage.\n */\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" was not found!`);\n }\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n /**\n * We can only process published entries.\n */\n if (originalEntry.status !== \"published\") {\n throw new WebinyError(\n \"Entry with given ID is not published!\",\n \"NOT_PUBLISHED_ERROR\",\n {\n id,\n original: originalEntry\n }\n );\n }\n\n const values = await referenceFieldsMapping({\n context,\n model,\n input: originalEntry.values,\n validateEntries: false\n });\n\n const entry: CmsEntry = {\n ...originalEntry,\n savedOn: new Date().toISOString(),\n webinyVersion: context.WEBINY_VERSION,\n values\n };\n\n const storageEntry = await entryToStorageTransform(context, model, entry);\n /**\n * First we need to update existing entry.\n */\n try {\n await storageOperations.entries.update(model, {\n entry,\n storageEntry\n });\n } catch (ex) {\n throw new WebinyError(\n \"Could not update existing entry with new data while re-publishing.\",\n \"REPUBLISH_UPDATE_ERROR\",\n {\n entry\n }\n );\n }\n /**\n * Then we move onto publishing it again.\n */\n try {\n return await storageOperations.entries.publish(model, {\n entry,\n storageEntry\n });\n } catch (ex) {\n throw new WebinyError(\n \"Could not publish existing entry while re-publishing.\",\n \"REPUBLISH_PUBLISH_ERROR\",\n {\n entry\n }\n );\n }\n },\n deleteEntryRevision: async (model, revisionId) => {\n const permission = await checkEntryPermissions({ rwd: \"d\" });\n await utils.checkModelAccess(context, model);\n\n const { id: entryId, version } = parseIdentifier(revisionId);\n\n const storageEntryToDelete = await storageOperations.entries.getRevisionById(model, {\n id: revisionId\n });\n const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(\n model,\n {\n id: entryId\n }\n );\n const previousStorageEntry = await storageOperations.entries.getPreviousRevision(\n model,\n {\n entryId,\n version: version as number\n }\n );\n\n if (!storageEntryToDelete) {\n throw new NotFoundError(`Entry \"${revisionId}\" was not found!`);\n }\n\n utils.checkOwnership(context, permission, storageEntryToDelete);\n\n const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;\n\n const entryToDelete = await entryFromStorageTransform(\n context,\n model,\n storageEntryToDelete\n );\n /**\n * If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.\n * At this point deleteRevision hooks are not fired.\n */\n if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {\n return await deleteEntry({\n model,\n entry: entryToDelete\n });\n }\n /**\n * If targeted record is latest entry revision, set the previous one as the new latest\n */\n let entryToSetAsLatest: CmsEntry | null = null;\n let storageEntryToSetAsLatest: CmsStorageEntry | null = null;\n if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {\n entryToSetAsLatest = await entryFromStorageTransform(\n context,\n model,\n previousStorageEntry\n );\n storageEntryToSetAsLatest = previousStorageEntry;\n }\n\n try {\n await onBeforeEntryDeleteRevision.publish({\n entry: entryToDelete,\n model\n });\n\n await storageOperations.entries.deleteRevision(model, {\n entry: entryToDelete,\n storageEntry: storageEntryToDelete,\n latestEntry: entryToSetAsLatest,\n latestStorageEntry: storageEntryToSetAsLatest\n });\n\n await onAfterEntryDeleteRevision.publish({\n entry: entryToDelete,\n model\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"DELETE_REVISION_ERROR\", {\n error: ex,\n entry: entryToDelete,\n storageEntry: storageEntryToDelete,\n latestEntry: entryToSetAsLatest,\n latestStorageEntry: storageEntryToSetAsLatest\n });\n }\n },\n deleteEntry: async (model, entryId) => {\n const permission = await checkEntryPermissions({ rwd: \"d\" });\n await utils.checkModelAccess(context, model);\n\n const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {\n id: entryId\n });\n\n if (!storageEntry) {\n throw new NotFoundError(`Entry \"${entryId}\" was not found!`);\n }\n\n utils.checkOwnership(context, permission, storageEntry);\n\n const entry = await entryFromStorageTransform(context, model, storageEntry);\n\n return await deleteEntry({\n model,\n entry\n });\n },\n publishEntry: async (model, id) => {\n const permission = await checkEntryPermissions({ pw: \"p\" });\n await utils.checkModelAccess(context, model);\n\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n\n if (!originalStorageEntry) {\n throw new NotFoundError(\n `Entry \"${id}\" in the model \"${model.modelId}\" was not found.`\n );\n }\n\n utils.checkOwnership(context, permission, originalStorageEntry);\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n const currentDate = new Date().toISOString();\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_PUBLISHED,\n locked: true,\n savedOn: currentDate,\n publishedOn: currentDate\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryPublish.publish({\n entry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n const result = await storageOperations.entries.publish(model, {\n entry,\n storageEntry\n });\n\n await onAfterEntryPublish.publish({\n entry,\n storageEntry: result,\n model\n });\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not publish entry.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n error: ex,\n entry,\n storageEntry,\n originalEntry,\n originalStorageEntry\n }\n );\n }\n },\n requestEntryChanges: async (model, id) => {\n const permission = await checkEntryPermissions({ pw: \"c\" });\n\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" of model \"${model.modelId}\" was not found.`);\n }\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n if (originalEntry.status !== STATUS_REVIEW_REQUESTED) {\n throw new WebinyError(\n \"Cannot request changes on an entry that's not under review.\",\n \"ENTRY_NOT_UNDER_REVIEW\"\n );\n }\n\n const identity = context.security.getIdentity();\n if (originalEntry.ownedBy.id === identity.id) {\n throw new WebinyError(\n \"You cannot request changes on your own entry.\",\n \"CANNOT_REQUEST_CHANGES_ON_OWN_ENTRY\"\n );\n }\n\n utils.checkOwnership(context, permission, originalEntry);\n\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_CHANGES_REQUESTED\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryRequestChanges.publish({\n entry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.requestChanges(model, {\n entry,\n storageEntry\n });\n\n await onAfterEntryRequestChanges.publish({\n entry,\n storageEntry: result,\n model\n });\n\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request changes for the entry.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n originalEntry\n }\n );\n }\n },\n requestEntryReview: async (model, id) => {\n const permission = await checkEntryPermissions({ pw: \"r\" });\n const { id: entryId } = parseIdentifier(id);\n\n const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {\n id\n });\n const latestEntryRevision = await storageOperations.entries.getLatestRevisionByEntryId(\n model,\n {\n id: entryId\n }\n );\n\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" of model \"${model.modelId}\" was not found.`);\n } else if (!latestEntryRevision) {\n throw new NotFoundError(`Entry \"${id}\" does not have latest record`);\n }\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n const allowedStatuses = [STATUS_DRAFT, STATUS_CHANGES_REQUESTED];\n if (!allowedStatuses.includes(originalEntry.status)) {\n throw new WebinyError(\n \"Cannot request review - entry is not a draft nor was a change request issued.\",\n \"REQUEST_REVIEW_ERROR\",\n {\n entry: originalEntry\n }\n );\n }\n\n utils.checkOwnership(context, permission, originalEntry);\n\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_REVIEW_REQUESTED\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryRequestReview.publish({\n entry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.requestReview(model, {\n entry,\n storageEntry\n });\n\n await onAfterEntryRequestReview.publish({\n entry,\n storageEntry: result,\n model\n });\n\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not request review on the entry.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n originalEntry,\n entry\n }\n );\n }\n },\n unpublishEntry: async (model, id) => {\n const permission = await checkEntryPermissions({ pw: \"u\" });\n\n const { id: entryId } = parseIdentifier(id);\n\n const originalStorageEntry =\n await storageOperations.entries.getPublishedRevisionByEntryId(model, {\n id: entryId\n });\n\n if (!originalStorageEntry) {\n throw new NotFoundError(`Entry \"${id}\" of model \"${model.modelId}\" was not found.`);\n }\n\n if (originalStorageEntry.id !== id) {\n throw new WebinyError(`Entry is not published.`, \"UNPUBLISH_ERROR\", {\n entry: originalStorageEntry\n });\n }\n\n utils.checkOwnership(context, permission, originalStorageEntry);\n\n const originalEntry = await entryFromStorageTransform(\n context,\n model,\n originalStorageEntry\n );\n\n const entry: CmsEntry = {\n ...originalEntry,\n status: STATUS_UNPUBLISHED\n };\n\n let storageEntry: CmsStorageEntry | null = null;\n\n try {\n await onBeforeEntryUnpublish.publish({\n entry,\n model\n });\n\n storageEntry = await entryToStorageTransform(context, model, entry);\n\n const result = await storageOperations.entries.unpublish(model, {\n entry,\n storageEntry\n });\n\n await onAfterEntryUnpublish.publish({\n entry,\n storageEntry: result,\n model\n });\n\n return result;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not unpublish entry.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n originalEntry,\n originalStorageEntry,\n entry,\n storageEntry\n }\n );\n }\n }\n };\n};\n"]}
@@ -34,8 +34,6 @@ const assignBeforeModelDelete = params => {
34
34
  try {
35
35
  const result = await storageOperations.entries.list(model, {
36
36
  where: {
37
- tenant: model.tenant,
38
- locale: model.locale,
39
37
  latest: true
40
38
  },
41
39
  limit: 1
@@ -1 +1 @@
1
- {"version":3,"sources":["beforeDelete.ts"],"names":["assignBeforeModelDelete","params","onBeforeModelDelete","storageOperations","plugins","subscribe","model","modelPlugin","byType","CmsModelPlugin","type","find","item","contentModel","modelId","WebinyError","entries","result","list","where","tenant","locale","latest","limit","items","ex","error","length"],"mappings":";;;;;;;;;AAGA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;AAC9E,QAAM;AAAEC,IAAAA,mBAAF;AAAuBC,IAAAA,iBAAvB;AAA0CC,IAAAA;AAA1C,MAAsDH,MAA5D;AAEAC,EAAAA,mBAAmB,CAACG,SAApB,CAA8B,MAAMJ,MAAN,IAAgB;AAC1C,UAAM;AAAEK,MAAAA;AAAF,QAAYL,MAAlB;AAEA,UAAMM,WAAW,GAAGH,OAAO,CACtBI,MADe,CACQC,+BAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,YAAL,CAAkBC,OAAlB,KAA8BR,KAAK,CAACQ,OAFlC,CAApB;;AAIA,QAAIP,WAAJ,EAAiB;AACb,YAAM,IAAIQ,cAAJ,CACF,uDADE,EAEF,4BAFE,EAGF;AACID,QAAAA,OAAO,EAAER,KAAK,CAACQ;AADnB,OAHE,CAAN;AAOH;;AAED,QAAIE,OAAO,GAAG,EAAd;;AACA,QAAI;AACA,YAAMC,MAAM,GAAG,MAAMd,iBAAiB,CAACa,OAAlB,CAA0BE,IAA1B,CAA+BZ,KAA/B,EAAsC;AACvDa,QAAAA,KAAK,EAAE;AACHC,UAAAA,MAAM,EAAEd,KAAK,CAACc,MADX;AAEHC,UAAAA,MAAM,EAAEf,KAAK,CAACe,MAFX;AAGHC,UAAAA,MAAM,EAAE;AAHL,SADgD;AAMvDC,QAAAA,KAAK,EAAE;AANgD,OAAtC,CAArB;AAQAP,MAAAA,OAAO,GAAGC,MAAM,CAACO,KAAjB;AACH,KAVD,CAUE,OAAOC,EAAP,EAAW;AACT,YAAM,IAAIV,cAAJ,CACF,8DADE,EAEF,eAFE,EAGF;AACIW,QAAAA,KAAK,EAAED,EADX;AAEInB,QAAAA;AAFJ,OAHE,CAAN;AAQH;;AACD,QAAIU,OAAO,CAACW,MAAR,GAAiB,CAArB,EAAwB;AACpB,YAAM,IAAIZ,cAAJ,CACD,gCAA+BT,KAAK,CAACQ,OAAQ,uCAD5C,EAEF,yCAFE,CAAN;AAIH;AACJ,GA5CD;AA6CH,CAhDM","sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeModelDeleteTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\n\ninterface AssignBeforeModelDeleteParams {\n onBeforeModelDelete: Topic<BeforeModelDeleteTopicParams>;\n storageOperations: HeadlessCmsStorageOperations;\n plugins: PluginsContainer;\n}\nexport const assignBeforeModelDelete = (params: AssignBeforeModelDeleteParams) => {\n const { onBeforeModelDelete, storageOperations, plugins } = params;\n\n onBeforeModelDelete.subscribe(async params => {\n const { model } = params;\n\n const modelPlugin = plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n .find(item => item.contentModel.modelId === model.modelId);\n\n if (modelPlugin) {\n throw new WebinyError(\n \"Content models defined via plugins cannot be deleted.\",\n \"CONTENT_MODEL_DELETE_ERROR\",\n {\n modelId: model.modelId\n }\n );\n }\n\n let entries = [];\n try {\n const result = await storageOperations.entries.list(model, {\n where: {\n tenant: model.tenant,\n locale: model.locale,\n latest: true\n },\n limit: 1\n });\n entries = result.items;\n } catch (ex) {\n throw new WebinyError(\n \"Could not retrieve a list of content entries from the model.\",\n \"ENTRIES_ERROR\",\n {\n error: ex,\n model\n }\n );\n }\n if (entries.length > 0) {\n throw new WebinyError(\n `Cannot delete content model \"${model.modelId}\" because there are existing entries.`,\n \"CONTENT_MODEL_BEFORE_DELETE_HOOK_FAILED\"\n );\n }\n });\n};\n"]}
1
+ {"version":3,"sources":["beforeDelete.ts"],"names":["assignBeforeModelDelete","params","onBeforeModelDelete","storageOperations","plugins","subscribe","model","modelPlugin","byType","CmsModelPlugin","type","find","item","contentModel","modelId","WebinyError","entries","result","list","where","latest","limit","items","ex","error","length"],"mappings":";;;;;;;;;AAGA;;AACA;;AAOO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;AAC9E,QAAM;AAAEC,IAAAA,mBAAF;AAAuBC,IAAAA,iBAAvB;AAA0CC,IAAAA;AAA1C,MAAsDH,MAA5D;AAEAC,EAAAA,mBAAmB,CAACG,SAApB,CAA8B,MAAMJ,MAAN,IAAgB;AAC1C,UAAM;AAAEK,MAAAA;AAAF,QAAYL,MAAlB;AAEA,UAAMM,WAAW,GAAGH,OAAO,CACtBI,MADe,CACQC,+BAAeC,IADvB,EAEfC,IAFe,CAEVC,IAAI,IAAIA,IAAI,CAACC,YAAL,CAAkBC,OAAlB,KAA8BR,KAAK,CAACQ,OAFlC,CAApB;;AAIA,QAAIP,WAAJ,EAAiB;AACb,YAAM,IAAIQ,cAAJ,CACF,uDADE,EAEF,4BAFE,EAGF;AACID,QAAAA,OAAO,EAAER,KAAK,CAACQ;AADnB,OAHE,CAAN;AAOH;;AAED,QAAIE,OAAO,GAAG,EAAd;;AACA,QAAI;AACA,YAAMC,MAAM,GAAG,MAAMd,iBAAiB,CAACa,OAAlB,CAA0BE,IAA1B,CAA+BZ,KAA/B,EAAsC;AACvDa,QAAAA,KAAK,EAAE;AACHC,UAAAA,MAAM,EAAE;AADL,SADgD;AAIvDC,QAAAA,KAAK,EAAE;AAJgD,OAAtC,CAArB;AAMAL,MAAAA,OAAO,GAAGC,MAAM,CAACK,KAAjB;AACH,KARD,CAQE,OAAOC,EAAP,EAAW;AACT,YAAM,IAAIR,cAAJ,CACF,8DADE,EAEF,eAFE,EAGF;AACIS,QAAAA,KAAK,EAAED,EADX;AAEIjB,QAAAA;AAFJ,OAHE,CAAN;AAQH;;AACD,QAAIU,OAAO,CAACS,MAAR,GAAiB,CAArB,EAAwB;AACpB,YAAM,IAAIV,cAAJ,CACD,gCAA+BT,KAAK,CAACQ,OAAQ,uCAD5C,EAEF,yCAFE,CAAN;AAIH;AACJ,GA1CD;AA2CH,CA9CM","sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeModelDeleteTopicParams, HeadlessCmsStorageOperations } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\n\ninterface AssignBeforeModelDeleteParams {\n onBeforeModelDelete: Topic<BeforeModelDeleteTopicParams>;\n storageOperations: HeadlessCmsStorageOperations;\n plugins: PluginsContainer;\n}\nexport const assignBeforeModelDelete = (params: AssignBeforeModelDeleteParams) => {\n const { onBeforeModelDelete, storageOperations, plugins } = params;\n\n onBeforeModelDelete.subscribe(async params => {\n const { model } = params;\n\n const modelPlugin = plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n .find(item => item.contentModel.modelId === model.modelId);\n\n if (modelPlugin) {\n throw new WebinyError(\n \"Content models defined via plugins cannot be deleted.\",\n \"CONTENT_MODEL_DELETE_ERROR\",\n {\n modelId: model.modelId\n }\n );\n }\n\n let entries = [];\n try {\n const result = await storageOperations.entries.list(model, {\n where: {\n latest: true\n },\n limit: 1\n });\n entries = result.items;\n } catch (ex) {\n throw new WebinyError(\n \"Could not retrieve a list of content entries from the model.\",\n \"ENTRIES_ERROR\",\n {\n error: ex,\n model\n }\n );\n }\n if (entries.length > 0) {\n throw new WebinyError(\n `Cannot delete content model \"${model.modelId}\" because there are existing entries.`,\n \"CONTENT_MODEL_BEFORE_DELETE_HOOK_FAILED\"\n );\n }\n });\n};\n"]}
@@ -75,6 +75,13 @@ const createModelsCrud = params => {
75
75
  })];
76
76
  })
77
77
  };
78
+
79
+ const clearModelsCache = () => {
80
+ for (const loader of Object.values(loaders)) {
81
+ loader.clearAll();
82
+ }
83
+ };
84
+
78
85
  const managers = new Map();
79
86
 
80
87
  const updateManager = async (context, model) => {
@@ -238,6 +245,7 @@ const createModelsCrud = params => {
238
245
  onAfterModelUpdate,
239
246
  onBeforeModelDelete,
240
247
  onAfterModelDelete,
248
+ clearModelsCache,
241
249
  getModel,
242
250
  listModels,
243
251
 
@@ -257,7 +265,7 @@ const createModelsCrud = params => {
257
265
  const identity = getIdentity();
258
266
  const model = {
259
267
  name: input.name,
260
- description: input.description,
268
+ description: input.description || "",
261
269
  modelId: input.modelId || "",
262
270
  titleFieldId: "id",
263
271
  locale: getLocale().code,
@@ -283,7 +291,6 @@ const createModelsCrud = params => {
283
291
  model
284
292
  });
285
293
  const createdModel = await storageOperations.models.create({
286
- input,
287
294
  model
288
295
  });
289
296
  loaders.listModels.clearAll();
@@ -317,9 +324,7 @@ const createModelsCrud = params => {
317
324
  model
318
325
  });
319
326
  const resultModel = await storageOperations.models.update({
320
- original,
321
- model,
322
- input: {}
327
+ model
323
328
  });
324
329
  await updateManager(context, resultModel);
325
330
  loaders.listModels.clearAll();
@@ -377,7 +382,7 @@ const createModelsCrud = params => {
377
382
  },
378
383
  name: input.name,
379
384
  modelId: input.modelId || "",
380
- description: input.description,
385
+ description: input.description || "",
381
386
  createdBy: {
382
387
  id: identity.id,
383
388
  displayName: identity.displayName,
@@ -395,7 +400,6 @@ const createModelsCrud = params => {
395
400
  original
396
401
  });
397
402
  const createdModel = await storageOperations.models.create({
398
- input,
399
403
  model
400
404
  });
401
405
  loaders.listModels.clearAll();
@@ -419,7 +423,10 @@ const createModelsCrud = params => {
419
423
  });
420
424
 
421
425
  if (Object.keys(input).length === 0) {
422
- return {};
426
+ /**
427
+ * We need to return the original if nothing is to be updated.
428
+ */
429
+ return original;
423
430
  }
424
431
 
425
432
  let group = {
@@ -460,9 +467,7 @@ const createModelsCrud = params => {
460
467
  model
461
468
  });
462
469
  const resultModel = await storageOperations.models.update({
463
- original,
464
- model,
465
- input
470
+ model
466
471
  });
467
472
  await updateManager(context, resultModel);
468
473
  await onAfterModelUpdate.publish({
@@ -498,7 +503,11 @@ const createModelsCrud = params => {
498
503
  },
499
504
 
500
505
  getModelManager,
501
- getManagers: () => managers
506
+ getEntryManager: async model => {
507
+ return getModelManager(model);
508
+ },
509
+ getManagers: () => managers,
510
+ getEntryManagers: () => managers
502
511
  };
503
512
  };
504
513