{"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { CreateGlobalVersionArgs, CreateVersionArgs, Payload } from '../index.js'\nimport type { JsonObject, PayloadRequest, SelectType } from '../types/index.js'\n\nimport { deepCopyObjectSimple } from '../index.js'\nimport { getVersionsMax } from '../utilities/getVersionsConfig.js'\nimport { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js'\nimport { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\nimport { saveSnapshot } from './saveSnapshot.js'\nimport { updateLatestVersion } from './updateLatestVersion.js'\n\ntype Args<T extends JsonObject = JsonObject> = {\n  autosave?: boolean\n  collection?: SanitizedCollectionConfig\n  docWithLocales: T\n  draft?: boolean\n  global?: SanitizedGlobalConfig\n  id?: number | string\n  operation?: 'create' | 'restoreVersion' | 'update'\n  payload: Payload\n  publishSpecificLocale?: string\n  req?: PayloadRequest\n  returning?: boolean\n  select?: SelectType\n  snapshot?: any\n  unpublish?: boolean\n}\n\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n  args: { returning: false } & Args<TData>,\n): Promise<null>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n  args: { returning: true } & Args<TData>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>(\n  args: Omit<Args<TData>, 'returning'>,\n): Promise<JsonObject>\nexport async function saveVersion<TData extends JsonObject = JsonObject>({\n  id,\n  autosave,\n  collection,\n  docWithLocales,\n  draft,\n  global,\n  operation,\n  payload,\n  publishSpecificLocale,\n  req,\n  returning,\n  select,\n  snapshot,\n  unpublish,\n}: Args<TData>): Promise<JsonObject | null> {\n  let result: JsonObject | undefined\n  let createdNewVersion = false\n  const now = new Date().toISOString()\n  const versionData: {\n    _status?: 'draft'\n    updatedAt?: string\n  } & TData = deepCopyObjectSimple(docWithLocales)\n\n  if ((collection?.timestamps || global) && draft) {\n    versionData.updatedAt = now\n  }\n\n  if (versionData._id) {\n    delete versionData._id\n  }\n\n  try {\n    if (unpublish || autosave) {\n      result = await updateLatestVersion({\n        id,\n        collection,\n        global,\n        now,\n        payload,\n        req,\n        shouldUpdate: autosave ? (v) => 'autosave' in v && v.autosave === true : undefined,\n        versionData,\n      })\n    }\n\n    if (!result) {\n      createdNewVersion = true\n\n      const createVersionArgs = {\n        autosave: Boolean(autosave),\n        collectionSlug: undefined as string | undefined,\n        createdAt: operation === 'restoreVersion' ? versionData.createdAt : now,\n        globalSlug: undefined as string | undefined,\n        parent: collection ? id : undefined,\n        publishedLocale: publishSpecificLocale || undefined,\n        req,\n        returning,\n        select: getQueryDraftsSelect({ select }),\n        updatedAt: now,\n        versionData,\n      }\n\n      if (collection) {\n        createVersionArgs.collectionSlug = collection.slug\n        result = await payload.db.createVersion(createVersionArgs as CreateVersionArgs)\n      }\n\n      if (global) {\n        createVersionArgs.globalSlug = global.slug\n        result = await payload.db.createGlobalVersion(createVersionArgs as CreateGlobalVersionArgs)\n      }\n\n      if (snapshot) {\n        await saveSnapshot<TData>({\n          id,\n          autosave,\n          collection,\n          data: snapshot,\n          global,\n          payload,\n          publishSpecificLocale,\n          req,\n          select,\n        })\n      }\n    }\n  } catch (err) {\n    let errorMessage: string | undefined\n\n    if (collection) {\n      errorMessage = `There was an error while saving a version for the ${typeof collection.labels.singular === 'string' ? collection.labels.singular : collection.slug} with ID ${id}.`\n    }\n    if (global) {\n      errorMessage = `There was an error while saving a version for the global ${typeof global.label === 'string' ? global.label : global.slug}.`\n    }\n    payload.logger.error({ err, msg: errorMessage })\n    throw err\n  }\n\n  const max = getVersionsMax(collection || global!)\n\n  if (createdNewVersion && max > 0) {\n    await enforceMaxVersions({\n      id,\n      collection,\n      global,\n      max,\n      payload,\n      req,\n    })\n  }\n  if (returning === false) {\n    return null\n  }\n\n  let createdVersion = (result as any).version\n\n  createdVersion = sanitizeInternalFields(createdVersion)\n  createdVersion.id = (result as any).parent\n\n  return createdVersion\n}\n"],"names":["deepCopyObjectSimple","getVersionsMax","sanitizeInternalFields","getQueryDraftsSelect","enforceMaxVersions","saveSnapshot","updateLatestVersion","saveVersion","id","autosave","collection","docWithLocales","draft","global","operation","payload","publishSpecificLocale","req","returning","select","snapshot","unpublish","result","createdNewVersion","now","Date","toISOString","versionData","timestamps","updatedAt","_id","shouldUpdate","v","undefined","createVersionArgs","Boolean","collectionSlug","createdAt","globalSlug","parent","publishedLocale","slug","db","createVersion","createGlobalVersion","data","err","errorMessage","labels","singular","label","logger","error","msg","max","createdVersion","version"],"mappings":"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"}