UNPKG

@r1tsu/payload

Version:

119 lines (118 loc) 4.71 kB
import { deepCopyObject } from '../utilities/deepCopyObject.js'; import sanitizeInternalFields from '../utilities/sanitizeInternalFields.js'; import { enforceMaxVersions } from './enforceMaxVersions.js'; export const saveVersion = async ({ id, autosave, collection, docWithLocales: doc, draft, global, payload, req })=>{ let result; let createNewVersion = true; const now = new Date().toISOString(); const versionData = deepCopyObject(doc); if (draft) versionData._status = 'draft'; if (versionData._id) delete versionData._id; try { if (autosave) { let docs; const findVersionArgs = { limit: 1, pagination: false, req, sort: '-updatedAt' }; if (collection) { ({ docs } = await payload.db.findVersions({ ...findVersionArgs, collection: collection.slug, req, where: { parent: { equals: id } } })); } else { ({ docs } = await payload.db.findGlobalVersions({ ...findVersionArgs, global: global.slug, req })); } const [latestVersion] = docs; // overwrite the latest version if it's set to autosave if (latestVersion?.autosave === true) { createNewVersion = false; const data = { createdAt: new Date(latestVersion.createdAt).toISOString(), updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(), version: versionData }; const updateVersionArgs = { id: latestVersion.id, req, versionData: data }; if (collection) { result = await payload.db.updateVersion({ ...updateVersionArgs, collection: collection.slug, req }); } else { result = await payload.db.updateGlobalVersion({ ...updateVersionArgs, global: global.slug, req }); } } } if (createNewVersion) { if (collection) { result = await payload.db.createVersion({ autosave: Boolean(autosave), collectionSlug: collection.slug, createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now, parent: collection ? id : undefined, req, updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(), versionData }); } if (global) { result = await payload.db.createGlobalVersion({ autosave: Boolean(autosave), createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now, globalSlug: global.slug, parent: collection ? id : undefined, req, updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(), versionData }); } } } catch (err) { let errorMessage; if (collection) errorMessage = `There was an error while saving a version for the ${collection.labels.singular} with ID ${id}.`; if (global) errorMessage = `There was an error while saving a version for the global ${global.label}.`; payload.logger.error(errorMessage); payload.logger.error(err); } let max = 100; if (collection && typeof collection.versions.maxPerDoc === 'number') max = collection.versions.maxPerDoc; if (global && typeof global.versions.max === 'number') max = global.versions.max; if (createNewVersion && max > 0) { await enforceMaxVersions({ id, collection, global, max, payload, req }); } let createdVersion = result.version; createdVersion.createdAt = result.createdAt; createdVersion.updatedAt = result.updatedAt; createdVersion = sanitizeInternalFields(createdVersion); createdVersion.id = result.parent; return createdVersion; }; //# sourceMappingURL=saveVersion.js.map