{"version":3,"sources":["../../../src/globals/operations/restoreVersion.ts"],"sourcesContent":["import type { PayloadRequest, PopulateType } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { SanitizedGlobalConfig } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\n\nexport type Arguments = {\n  depth?: number\n  draft?: boolean\n  globalConfig: SanitizedGlobalConfig\n  id: number | string\n  overrideAccess?: boolean\n  populate?: PopulateType\n  req?: PayloadRequest\n  showHiddenFields?: boolean\n}\n\nexport const restoreVersionOperation = async <T extends TypeWithVersion<T> = any>(\n  args: Arguments,\n): Promise<T> => {\n  const { id, depth, draft, globalConfig, overrideAccess, populate, showHiddenFields } = args\n  const req = args.req!\n  const { fallbackLocale, locale, payload } = req\n\n  try {\n    const shouldCommit = await initTransaction(req)\n\n    // /////////////////////////////////////\n    // beforeOperation - Global\n    // /////////////////////////////////////\n\n    if (globalConfig.hooks?.beforeOperation?.length) {\n      for (const hook of globalConfig.hooks.beforeOperation) {\n        args =\n          (await hook({\n            args,\n            context: req.context,\n            global: globalConfig,\n            operation: 'restoreVersion',\n            overrideAccess,\n            req,\n          })) || args\n      }\n    }\n\n    // /////////////////////////////////////\n    // Access\n    // /////////////////////////////////////\n\n    if (!overrideAccess) {\n      await executeAccess({ req }, globalConfig.access.update)\n    }\n\n    // /////////////////////////////////////\n    // Retrieve original raw version\n    // /////////////////////////////////////\n\n    const { docs: versionDocs } = await payload.db.findGlobalVersions<any>({\n      global: globalConfig.slug,\n      limit: 1,\n      req,\n      where: { id: { equals: id } },\n    })\n\n    if (!versionDocs || versionDocs.length === 0) {\n      throw new NotFound(req.t)\n    }\n\n    const rawVersion = versionDocs[0]!\n\n    // Patch globalType onto version doc\n    rawVersion.version.globalType = globalConfig.slug\n\n    // Overwrite draft status if draft is true\n\n    if (draft) {\n      rawVersion.version._status = 'draft'\n    }\n    // /////////////////////////////////////\n    // fetch previousDoc\n    // /////////////////////////////////////\n\n    const previousDoc = await payload.findGlobal({\n      slug: globalConfig.slug,\n      depth,\n      req,\n    })\n\n    req.context.isRestoringVersion = true\n\n    // /////////////////////////////////////\n    // Update global\n    // /////////////////////////////////////\n\n    const global = await payload.db.findGlobal({\n      slug: globalConfig.slug,\n      req,\n    })\n\n    let result = rawVersion.version\n\n    if (global) {\n      // Ensure updatedAt date is always updated\n      result.updatedAt = new Date().toISOString()\n      result = await payload.db.updateGlobal({\n        slug: globalConfig.slug,\n        data: result,\n        req,\n      })\n\n      const now = new Date().toISOString()\n\n      result = await payload.db.createGlobalVersion({\n        autosave: false,\n        createdAt: result.createdAt ? new Date(result.createdAt).toISOString() : now,\n        globalSlug: globalConfig.slug,\n        req,\n        updatedAt: draft ? now : new Date(result.updatedAt).toISOString(),\n        versionData: result,\n      })\n    } else {\n      result = await payload.db.createGlobal({\n        slug: globalConfig.slug,\n        data: result,\n        req,\n      })\n    }\n\n    // /////////////////////////////////////\n    // afterRead - Fields\n    // /////////////////////////////////////\n\n    result = await afterRead({\n      collection: null,\n      context: req.context,\n      depth: depth!,\n      doc: result,\n      draft: undefined!,\n      fallbackLocale: fallbackLocale!,\n      global: globalConfig,\n      locale: locale!,\n      overrideAccess: overrideAccess!,\n      populate,\n      req,\n      showHiddenFields: showHiddenFields!,\n    })\n\n    // /////////////////////////////////////\n    // afterRead - Global\n    // /////////////////////////////////////\n\n    if (globalConfig.hooks?.afterRead?.length) {\n      for (const hook of globalConfig.hooks.afterRead) {\n        result =\n          (await hook({\n            context: req.context,\n            doc: result,\n            global: globalConfig,\n            overrideAccess,\n            req,\n          })) || result\n      }\n    }\n\n    // /////////////////////////////////////\n    // afterChange - Fields\n    // /////////////////////////////////////\n\n    result = await afterChange({\n      collection: null,\n      context: req.context,\n      data: result,\n      doc: result,\n      global: globalConfig,\n      operation: 'update',\n      previousDoc,\n      req,\n    })\n\n    // /////////////////////////////////////\n    // afterChange - Global\n    // /////////////////////////////////////\n\n    if (globalConfig.hooks?.afterChange?.length) {\n      for (const hook of globalConfig.hooks.afterChange) {\n        result =\n          (await hook({\n            context: req.context,\n            data: result,\n            doc: result,\n            global: globalConfig,\n            overrideAccess,\n            previousDoc,\n            req,\n          })) || result\n      }\n    }\n\n    if (shouldCommit) {\n      await commitTransaction(req)\n    }\n\n    return result\n  } catch (error: unknown) {\n    await killTransaction(req)\n    throw error\n  }\n}\n"],"names":["executeAccess","NotFound","afterChange","afterRead","commitTransaction","initTransaction","killTransaction","restoreVersionOperation","args","id","depth","draft","globalConfig","overrideAccess","populate","showHiddenFields","req","fallbackLocale","locale","payload","shouldCommit","hooks","beforeOperation","length","hook","context","global","operation","access","update","docs","versionDocs","db","findGlobalVersions","slug","limit","where","equals","t","rawVersion","version","globalType","_status","previousDoc","findGlobal","isRestoringVersion","result","updatedAt","Date","toISOString","updateGlobal","data","now","createGlobalVersion","autosave","createdAt","globalSlug","versionData","createGlobal","collection","doc","undefined","error"],"mappings":"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"}