UNPKG

payload

Version:

Node, React, Headless CMS and Application Framework built on Next.js

105 lines (104 loc) 3.86 kB
import { deepCopyObjectSimple } from '../index.js'; import { getVersionsMax } from '../utilities/getVersionsConfig.js'; import { sanitizeInternalFields } from '../utilities/sanitizeInternalFields.js'; import { getQueryDraftsSelect } from './drafts/getQueryDraftsSelect.js'; import { enforceMaxVersions } from './enforceMaxVersions.js'; import { saveSnapshot } from './saveSnapshot.js'; import { updateLatestVersion } from './updateLatestVersion.js'; export async function saveVersion({ id, autosave, collection, docWithLocales, draft, global, operation, payload, publishSpecificLocale, req, returning, select, snapshot, unpublish }) { let result; let createdNewVersion = false; const now = new Date().toISOString(); const versionData = deepCopyObjectSimple(docWithLocales); if ((collection?.timestamps || global) && draft) { versionData.updatedAt = now; } if (versionData._id) { delete versionData._id; } try { if (unpublish || autosave) { result = await updateLatestVersion({ id, collection, global, now, payload, req, shouldUpdate: autosave ? (v)=>'autosave' in v && v.autosave === true : undefined, versionData }); } if (!result) { createdNewVersion = true; const createVersionArgs = { autosave: Boolean(autosave), collectionSlug: undefined, createdAt: operation === 'restoreVersion' ? versionData.createdAt : now, globalSlug: undefined, parent: collection ? id : undefined, publishedLocale: publishSpecificLocale || undefined, req, returning, select: getQueryDraftsSelect({ select }), updatedAt: now, versionData }; if (collection) { createVersionArgs.collectionSlug = collection.slug; result = await payload.db.createVersion(createVersionArgs); } if (global) { createVersionArgs.globalSlug = global.slug; result = await payload.db.createGlobalVersion(createVersionArgs); } if (snapshot) { await saveSnapshot({ id, autosave, collection, data: snapshot, global, payload, publishSpecificLocale, req, select }); } } } catch (err) { let errorMessage; if (collection) { errorMessage = `There was an error while saving a version for the ${typeof collection.labels.singular === 'string' ? collection.labels.singular : collection.slug} with ID ${id}.`; } if (global) { errorMessage = `There was an error while saving a version for the global ${typeof global.label === 'string' ? global.label : global.slug}.`; } payload.logger.error({ err, msg: errorMessage }); return undefined; } const max = getVersionsMax(collection || global); if (createdNewVersion && max > 0) { await enforceMaxVersions({ id, collection, global, max, payload, req }); } if (returning === false) { return null; } let createdVersion = result.version; createdVersion = sanitizeInternalFields(createdVersion); createdVersion.id = result.parent; return createdVersion; } //# sourceMappingURL=saveVersion.js.map