payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
120 lines (119 loc) • 14.1 kB
JavaScript
/* eslint-disable no-underscore-dangle */ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _httpstatus = /*#__PURE__*/ _interop_require_default(require("http-status"));
const _executeAccess = /*#__PURE__*/ _interop_require_default(require("../../auth/executeAccess"));
const _combineQueries = require("../../database/combineQueries");
const _errors = require("../../errors");
const _afterRead = require("../../fields/hooks/afterRead");
const _commitTransaction = require("../../utilities/commitTransaction");
const _initTransaction = require("../../utilities/initTransaction");
const _killTransaction = require("../../utilities/killTransaction");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
async function findVersionByID(args) {
const { id, collection: { config: collectionConfig }, currentDepth, depth, disableErrors, overrideAccess, req: { fallbackLocale, locale, payload, t }, req, showHiddenFields } = args;
if (!id) {
throw new _errors.APIError('Missing ID of version.', _httpstatus.default.BAD_REQUEST);
}
try {
const shouldCommit = await (0, _initTransaction.initTransaction)(req);
// /////////////////////////////////////
// Access
// /////////////////////////////////////
const accessResults = !overrideAccess ? await (0, _executeAccess.default)({
id,
disableErrors,
req
}, collectionConfig.access.readVersions) : true;
// If errors are disabled, and access returns false, return null
if (accessResults === false) return null;
const hasWhereAccess = typeof accessResults === 'object';
const fullWhere = (0, _combineQueries.combineQueries)({
id: {
equals: id
}
}, accessResults);
// /////////////////////////////////////
// Find by ID
// /////////////////////////////////////
const versionsQuery = await payload.db.findVersions({
collection: collectionConfig.slug,
limit: 1,
locale,
pagination: false,
req,
where: fullWhere
});
const result = versionsQuery.docs[0];
if (!result) {
if (!disableErrors) {
if (!hasWhereAccess) throw new _errors.NotFound(t);
if (hasWhereAccess) throw new _errors.Forbidden(t);
}
return null;
}
// /////////////////////////////////////
// beforeRead - Collection
// /////////////////////////////////////
await collectionConfig.hooks.beforeRead.reduce(async (priorHook, hook)=>{
await priorHook;
result.version = await hook({
collection: collectionConfig,
context: req.context,
doc: result.version,
query: fullWhere,
req
}) || result.version;
}, Promise.resolve());
// /////////////////////////////////////
// afterRead - Fields
// /////////////////////////////////////
result.version = await (0, _afterRead.afterRead)({
collection: collectionConfig,
context: req.context,
currentDepth,
depth,
doc: result.version,
fallbackLocale,
global: null,
locale,
overrideAccess,
req,
showHiddenFields
});
// /////////////////////////////////////
// afterRead - Collection
// /////////////////////////////////////
await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook)=>{
await priorHook;
result.version = await hook({
collection: collectionConfig,
context: req.context,
doc: result.version,
query: fullWhere,
req
}) || result.version;
}, Promise.resolve());
// /////////////////////////////////////
// Return results
// /////////////////////////////////////
if (shouldCommit) await (0, _commitTransaction.commitTransaction)(req);
return result;
} catch (error) {
await (0, _killTransaction.killTransaction)(req);
throw error;
}
}
const _default = findVersionByID;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9vcGVyYXRpb25zL2ZpbmRWZXJzaW9uQnlJRC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IGh0dHBTdGF0dXMgZnJvbSAnaHR0cC1zdGF0dXMnXG5cbmltcG9ydCB0eXBlIHsgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi8uLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBUeXBlV2l0aFZlcnNpb24gfSBmcm9tICcuLi8uLi92ZXJzaW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbiwgVHlwZVdpdGhJRCB9IGZyb20gJy4uL2NvbmZpZy90eXBlcydcblxuaW1wb3J0IGV4ZWN1dGVBY2Nlc3MgZnJvbSAnLi4vLi4vYXV0aC9leGVjdXRlQWNjZXNzJ1xuaW1wb3J0IHsgY29tYmluZVF1ZXJpZXMgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9jb21iaW5lUXVlcmllcydcbmltcG9ydCB7IEFQSUVycm9yLCBGb3JiaWRkZW4sIE5vdEZvdW5kIH0gZnJvbSAnLi4vLi4vZXJyb3JzJ1xuaW1wb3J0IHsgYWZ0ZXJSZWFkIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2FmdGVyUmVhZCdcbmltcG9ydCB7IGNvbW1pdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2NvbW1pdFRyYW5zYWN0aW9uJ1xuaW1wb3J0IHsgaW5pdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2luaXRUcmFuc2FjdGlvbidcbmltcG9ydCB7IGtpbGxUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9raWxsVHJhbnNhY3Rpb24nXG5cbmV4cG9ydCB0eXBlIEFyZ3VtZW50cyA9IHtcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvblxuICBjdXJyZW50RGVwdGg/OiBudW1iZXJcbiAgZGVwdGg/OiBudW1iZXJcbiAgZGlzYWJsZUVycm9ycz86IGJvb2xlYW5cbiAgaWQ6IG51bWJlciB8IHN0cmluZ1xuICBvdmVycmlkZUFjY2Vzcz86IGJvb2xlYW5cbiAgcmVxOiBQYXlsb2FkUmVxdWVzdFxuICBzaG93SGlkZGVuRmllbGRzPzogYm9vbGVhblxufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5kVmVyc2lvbkJ5SUQ8VCBleHRlbmRzIFR5cGVXaXRoSUQgPSBhbnk+KFxuICBhcmdzOiBBcmd1bWVudHMsXG4pOiBQcm9taXNlPFR5cGVXaXRoVmVyc2lvbjxUPj4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgY29sbGVjdGlvbjogeyBjb25maWc6IGNvbGxlY3Rpb25Db25maWcgfSxcbiAgICBjdXJyZW50RGVwdGgsXG4gICAgZGVwdGgsXG4gICAgZGlzYWJsZUVycm9ycyxcbiAgICBvdmVycmlkZUFjY2VzcyxcbiAgICByZXE6IHsgZmFsbGJhY2tMb2NhbGUsIGxvY2FsZSwgcGF5bG9hZCwgdCB9LFxuICAgIHJlcSxcbiAgICBzaG93SGlkZGVuRmllbGRzLFxuICB9ID0gYXJnc1xuXG4gIGlmICghaWQpIHtcbiAgICB0aHJvdyBuZXcgQVBJRXJyb3IoJ01pc3NpbmcgSUQgb2YgdmVyc2lvbi4nLCBodHRwU3RhdHVzLkJBRF9SRVFVRVNUKVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzaG91bGRDb21taXQgPSBhd2FpdCBpbml0VHJhbnNhY3Rpb24ocmVxKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFjY2Vzc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IGFjY2Vzc1Jlc3VsdHMgPSAhb3ZlcnJpZGVBY2Nlc3NcbiAgICAgID8gYXdhaXQgZXhlY3V0ZUFjY2Vzcyh7IGlkLCBkaXNhYmxlRXJyb3JzLCByZXEgfSwgY29sbGVjdGlvbkNvbmZpZy5hY2Nlc3MucmVhZFZlcnNpb25zKVxuICAgICAgOiB0cnVlXG5cbiAgICAvLyBJZiBlcnJvcnMgYXJlIGRpc2FibGVkLCBhbmQgYWNjZXNzIHJldHVybnMgZmFsc2UsIHJldHVybiBudWxsXG4gICAgaWYgKGFjY2Vzc1Jlc3VsdHMgPT09IGZhbHNlKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgaGFzV2hlcmVBY2Nlc3MgPSB0eXBlb2YgYWNjZXNzUmVzdWx0cyA9PT0gJ29iamVjdCdcblxuICAgIGNvbnN0IGZ1bGxXaGVyZSA9IGNvbWJpbmVRdWVyaWVzKHsgaWQ6IHsgZXF1YWxzOiBpZCB9IH0sIGFjY2Vzc1Jlc3VsdHMpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRmluZCBieSBJRFxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IHZlcnNpb25zUXVlcnkgPSBhd2FpdCBwYXlsb2FkLmRiLmZpbmRWZXJzaW9uczxUPih7XG4gICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICBsaW1pdDogMSxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHBhZ2luYXRpb246IGZhbHNlLFxuICAgICAgcmVxLFxuICAgICAgd2hlcmU6IGZ1bGxXaGVyZSxcbiAgICB9KVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdmVyc2lvbnNRdWVyeS5kb2NzWzBdXG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgaWYgKCFkaXNhYmxlRXJyb3JzKSB7XG4gICAgICAgIGlmICghaGFzV2hlcmVBY2Nlc3MpIHRocm93IG5ldyBOb3RGb3VuZCh0KVxuICAgICAgICBpZiAoaGFzV2hlcmVBY2Nlc3MpIHRocm93IG5ldyBGb3JiaWRkZW4odClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYmVmb3JlUmVhZCAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBhd2FpdCBjb2xsZWN0aW9uQ29uZmlnLmhvb2tzLmJlZm9yZVJlYWQucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICByZXN1bHQudmVyc2lvbiA9XG4gICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGNvbnRleHQ6IHJlcS5jb250ZXh0LFxuICAgICAgICAgIGRvYzogcmVzdWx0LnZlcnNpb24sXG4gICAgICAgICAgcXVlcnk6IGZ1bGxXaGVyZSxcbiAgICAgICAgICByZXEsXG4gICAgICAgIH0pKSB8fCByZXN1bHQudmVyc2lvblxuICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFmdGVyUmVhZCAtIEZpZWxkc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHJlc3VsdC52ZXJzaW9uID0gYXdhaXQgYWZ0ZXJSZWFkKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgIGN1cnJlbnREZXB0aCxcbiAgICAgIGRlcHRoLFxuICAgICAgZG9jOiByZXN1bHQudmVyc2lvbixcbiAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgZ2xvYmFsOiBudWxsLFxuICAgICAgbG9jYWxlLFxuICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICByZXEsXG4gICAgICBzaG93SGlkZGVuRmllbGRzLFxuICAgIH0pXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYWZ0ZXJSZWFkIC0gQ29sbGVjdGlvblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGNvbGxlY3Rpb25Db25maWcuaG9va3MuYWZ0ZXJSZWFkLnJlZHVjZShhc3luYyAocHJpb3JIb29rLCBob29rKSA9PiB7XG4gICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgcmVzdWx0LnZlcnNpb24gPVxuICAgICAgICAoYXdhaXQgaG9vayh7XG4gICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICBkb2M6IHJlc3VsdC52ZXJzaW9uLFxuICAgICAgICAgIHF1ZXJ5OiBmdWxsV2hlcmUsXG4gICAgICAgICAgcmVxLFxuICAgICAgICB9KSkgfHwgcmVzdWx0LnZlcnNpb25cbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSZXR1cm4gcmVzdWx0c1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGlmIChzaG91bGRDb21taXQpIGF3YWl0IGNvbW1pdFRyYW5zYWN0aW9uKHJlcSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBhd2FpdCBraWxsVHJhbnNhY3Rpb24ocmVxKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZmluZFZlcnNpb25CeUlEXG4iXSwibmFtZXMiOlsiZmluZFZlcnNpb25CeUlEIiwiYXJncyIsImlkIiwiY29sbGVjdGlvbiIsImNvbmZpZyIsImNvbGxlY3Rpb25Db25maWciLCJjdXJyZW50RGVwdGgiLCJkZXB0aCIsImRpc2FibGVFcnJvcnMiLCJvdmVycmlkZUFjY2VzcyIsInJlcSIsImZhbGxiYWNrTG9jYWxlIiwibG9jYWxlIiwicGF5bG9hZCIsInQiLCJzaG93SGlkZGVuRmllbGRzIiwiQVBJRXJyb3IiLCJodHRwU3RhdHVzIiwiQkFEX1JFUVVFU1QiLCJzaG91bGRDb21taXQiLCJpbml0VHJhbnNhY3Rpb24iLCJhY2Nlc3NSZXN1bHRzIiwiZXhlY3V0ZUFjY2VzcyIsImFjY2VzcyIsInJlYWRWZXJzaW9ucyIsImhhc1doZXJlQWNjZXNzIiwiZnVsbFdoZXJlIiwiY29tYmluZVF1ZXJpZXMiLCJlcXVhbHMiLCJ2ZXJzaW9uc1F1ZXJ5IiwiZGIiLCJmaW5kVmVyc2lvbnMiLCJzbHVnIiwibGltaXQiLCJwYWdpbmF0aW9uIiwid2hlcmUiLCJyZXN1bHQiLCJkb2NzIiwiTm90Rm91bmQiLCJGb3JiaWRkZW4iLCJob29rcyIsImJlZm9yZVJlYWQiLCJyZWR1Y2UiLCJwcmlvckhvb2siLCJob29rIiwidmVyc2lvbiIsImNvbnRleHQiLCJkb2MiLCJxdWVyeSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYWZ0ZXJSZWFkIiwiZ2xvYmFsIiwiY29tbWl0VHJhbnNhY3Rpb24iLCJlcnJvciIsImtpbGxUcmFuc2FjdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUEsdUNBQXVDOzs7OytCQXdKdkM7OztlQUFBOzs7bUVBdkp1QjtzRUFNRztnQ0FDSzt3QkFDZTsyQkFDcEI7bUNBQ1E7aUNBQ0Y7aUNBQ0E7Ozs7OztBQWFoQyxlQUFlQSxnQkFDYkMsSUFBZTtJQUVmLE1BQU0sRUFDSkMsRUFBRSxFQUNGQyxZQUFZLEVBQUVDLFFBQVFDLGdCQUFnQixFQUFFLEVBQ3hDQyxZQUFZLEVBQ1pDLEtBQUssRUFDTEMsYUFBYSxFQUNiQyxjQUFjLEVBQ2RDLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxNQUFNLEVBQUVDLE9BQU8sRUFBRUMsQ0FBQyxFQUFFLEVBQzNDSixHQUFHLEVBQ0hLLGdCQUFnQixFQUNqQixHQUFHZDtJQUVKLElBQUksQ0FBQ0MsSUFBSTtRQUNQLE1BQU0sSUFBSWMsZ0JBQVEsQ0FBQywwQkFBMEJDLG1CQUFVLENB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