{"version":3,"file":"index.mjs","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { UID, Data, Core } from '@strapi/types';\n\nimport type { SettingsService } from '../services/settings';\nimport type { ReleaseService } from '../services/release';\nimport type { ReleaseActionService } from '../services/release-action';\n\ntype Services = {\n  release: ReleaseService;\n  'release-validation': any;\n  scheduling: any;\n  'release-action': ReleaseActionService;\n  'event-manager': any;\n  settings: SettingsService;\n};\n\ninterface Action {\n  contentType: UID.ContentType;\n  documentId?: Data.DocumentID;\n  locale?: string;\n}\n\nexport const getService = <TName extends keyof Services>(\n  name: TName,\n  { strapi }: { strapi: Core.Strapi }\n): Services[TName] => {\n  return strapi.plugin('content-releases').service(name);\n};\n\nexport const getDraftEntryValidStatus = async (\n  { contentType, documentId, locale }: Action,\n  { strapi }: { strapi: Core.Strapi }\n) => {\n  const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n  // @ts-expect-error - populateBuilderService should be a function but is returning service\n  const populate = await populateBuilderService(contentType).populateDeep(Infinity).build();\n\n  const entry = await getEntry({ contentType, documentId, locale, populate }, { strapi });\n\n  return isEntryValid(contentType, entry, { strapi });\n};\n\nexport const isEntryValid = async (\n  contentTypeUid: string,\n  entry: any,\n  { strapi }: { strapi: Core.Strapi }\n) => {\n  try {\n    // @TODO: When documents service has validateEntityCreation method, use it instead\n    await strapi.entityValidator.validateEntityCreation(\n      strapi.getModel(contentTypeUid as UID.ContentType),\n      entry,\n      undefined,\n      // @ts-expect-error - FIXME: entity here is unnecessary\n      entry\n    );\n\n    const workflowsService = strapi.plugin('review-workflows').service('workflows');\n    // Workflows service may not be available depending on the license\n    const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {\n      populate: 'stageRequiredToPublish',\n    });\n\n    if (workflow?.stageRequiredToPublish) {\n      return entry.strapi_stage.id === workflow.stageRequiredToPublish.id;\n    }\n\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nexport const getEntry = async (\n  {\n    contentType,\n    documentId,\n    locale,\n    populate,\n    status = 'draft',\n  }: Action & { status?: 'draft' | 'published'; populate: any },\n  { strapi }: { strapi: Core.Strapi }\n) => {\n  if (documentId) {\n    // Try to get an existing draft or published document\n    const entry = await strapi\n      .documents(contentType)\n      .findOne({ documentId, locale, populate, status });\n\n    // The document isn't published yet, but the action is to publish it, fetch the draft\n    if (status === 'published' && !entry) {\n      return strapi\n        .documents(contentType)\n        .findOne({ documentId, locale, populate, status: 'draft' });\n    }\n\n    return entry;\n  }\n\n  return strapi.documents(contentType).findFirst({ locale, populate, status });\n};\n\nexport const getEntryStatus = async (contentType: UID.ContentType, entry: Data.ContentType) => {\n  if (entry.publishedAt) {\n    return 'published';\n  }\n\n  const publishedEntry = await strapi.documents(contentType).findOne({\n    documentId: entry.documentId,\n    locale: entry.locale,\n    status: 'published',\n    fields: ['updatedAt'],\n  });\n\n  if (!publishedEntry) {\n    return 'draft';\n  }\n\n  const entryUpdatedAt = new Date(entry.updatedAt).getTime();\n  const publishedEntryUpdatedAt = new Date(publishedEntry.updatedAt).getTime();\n\n  if (entryUpdatedAt > publishedEntryUpdatedAt) {\n    return 'modified';\n  }\n\n  return 'published';\n};\n"],"names":["getService","name","strapi","plugin","service","getDraftEntryValidStatus","contentType","documentId","locale","populateBuilderService","populate","populateDeep","Infinity","build","entry","getEntry","isEntryValid","contentTypeUid","entityValidator","validateEntityCreation","getModel","undefined","workflowsService","workflow","getAssignedWorkflow","stageRequiredToPublish","strapi_stage","id","status","documents","findOne","findFirst","getEntryStatus","publishedAt","publishedEntry","fields","entryUpdatedAt","Date","updatedAt","getTime","publishedEntryUpdatedAt"],"mappings":"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"}