payload
Version:
Node, React, Headless CMS and Application Framework built on Next.js
105 lines (104 loc) • 3.86 kB
JavaScript
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