payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
119 lines (118 loc) • 14.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _executeAccess = /*#__PURE__*/ _interop_require_default(require("../../auth/executeAccess"));
const _combineQueries = require("../../database/combineQueries");
const _validateQueryPaths = require("../../database/queryValidation/validateQueryPaths");
const _afterRead = require("../../fields/hooks/afterRead");
const _commitTransaction = require("../../utilities/commitTransaction");
const _initTransaction = require("../../utilities/initTransaction");
const _killTransaction = require("../../utilities/killTransaction");
const _sanitizeInternalFields = /*#__PURE__*/ _interop_require_default(require("../../utilities/sanitizeInternalFields"));
const _buildGlobalFields = require("../../versions/buildGlobalFields");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
async function findVersions(args) {
const { depth, globalConfig, limit, overrideAccess, page, req: { fallbackLocale, locale, payload }, req, showHiddenFields, sort, where } = args;
const versionFields = (0, _buildGlobalFields.buildVersionGlobalFields)(globalConfig);
try {
const shouldCommit = await (0, _initTransaction.initTransaction)(req);
// /////////////////////////////////////
// Access
// /////////////////////////////////////
const accessResults = !overrideAccess ? await (0, _executeAccess.default)({
req
}, globalConfig.access.readVersions) : true;
await (0, _validateQueryPaths.validateQueryPaths)({
globalConfig,
overrideAccess,
req,
versionFields,
where
});
const fullWhere = (0, _combineQueries.combineQueries)(where, accessResults);
// /////////////////////////////////////
// Find
// /////////////////////////////////////
const paginatedDocs = await payload.db.findGlobalVersions({
global: globalConfig.slug,
limit: limit ?? 10,
locale,
page: page || 1,
req,
sort,
where: fullWhere
});
// /////////////////////////////////////
// afterRead - Fields
// /////////////////////////////////////
let result = {
...paginatedDocs,
docs: await Promise.all(paginatedDocs.docs.map(async (data)=>({
...data,
version: await (0, _afterRead.afterRead)({
collection: null,
context: req.context,
depth,
doc: {
...data.version,
// Patch globalType onto version doc
globalType: globalConfig.slug
},
fallbackLocale,
findMany: true,
global: globalConfig,
locale,
overrideAccess,
req,
showHiddenFields
})
})))
};
// /////////////////////////////////////
// afterRead - Global
// /////////////////////////////////////
result = {
...result,
docs: await Promise.all(result.docs.map(async (doc)=>{
const docRef = doc;
await globalConfig.hooks.afterRead.reduce(async (priorHook, hook)=>{
await priorHook;
docRef.version = await hook({
context: req.context,
doc: doc.version,
findMany: true,
global: globalConfig,
query: fullWhere,
req
}) || doc.version;
}, Promise.resolve());
return docRef;
}))
};
// /////////////////////////////////////
// Return results
// /////////////////////////////////////
result = {
...result,
docs: result.docs.map((doc)=>(0, _sanitizeInternalFields.default)(doc))
};
if (shouldCommit) await (0, _commitTransaction.commitTransaction)(req);
return result;
} catch (error) {
await (0, _killTransaction.killTransaction)(req);
throw error;
}
}
const _default = findVersions;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nbG9iYWxzL29wZXJhdGlvbnMvZmluZFZlcnNpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFnaW5hdGVkRG9jcyB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uLy4uL2V4cHJlc3MvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFdoZXJlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFR5cGVXaXRoVmVyc2lvbiB9IGZyb20gJy4uLy4uL3ZlcnNpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRHbG9iYWxDb25maWcgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnXG5cbmltcG9ydCBleGVjdXRlQWNjZXNzIGZyb20gJy4uLy4uL2F1dGgvZXhlY3V0ZUFjY2VzcydcbmltcG9ydCB7IGNvbWJpbmVRdWVyaWVzIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvY29tYmluZVF1ZXJpZXMnXG5pbXBvcnQgeyB2YWxpZGF0ZVF1ZXJ5UGF0aHMgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9xdWVyeVZhbGlkYXRpb24vdmFsaWRhdGVRdWVyeVBhdGhzJ1xuaW1wb3J0IHsgYWZ0ZXJSZWFkIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2FmdGVyUmVhZCdcbmltcG9ydCB7IGNvbW1pdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2NvbW1pdFRyYW5zYWN0aW9uJ1xuaW1wb3J0IHsgaW5pdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2luaXRUcmFuc2FjdGlvbidcbmltcG9ydCB7IGtpbGxUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9raWxsVHJhbnNhY3Rpb24nXG5pbXBvcnQgc2FuaXRpemVJbnRlcm5hbEZpZWxkcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2FuaXRpemVJbnRlcm5hbEZpZWxkcydcbmltcG9ydCB7IGJ1aWxkVmVyc2lvbkdsb2JhbEZpZWxkcyB9IGZyb20gJy4uLy4uL3ZlcnNpb25zL2J1aWxkR2xvYmFsRmllbGRzJ1xuXG5leHBvcnQgdHlwZSBBcmd1bWVudHMgPSB7XG4gIGRlcHRoPzogbnVtYmVyXG4gIGdsb2JhbENvbmZpZzogU2FuaXRpemVkR2xvYmFsQ29uZmlnXG4gIGxpbWl0PzogbnVtYmVyXG4gIG92ZXJyaWRlQWNjZXNzPzogYm9vbGVhblxuICBwYWdlPzogbnVtYmVyXG4gIHJlcT86IFBheWxvYWRSZXF1ZXN0XG4gIHNob3dIaWRkZW5GaWVsZHM/OiBib29sZWFuXG4gIHNvcnQ/OiBzdHJpbmdcbiAgd2hlcmU/OiBXaGVyZVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5kVmVyc2lvbnM8VCBleHRlbmRzIFR5cGVXaXRoVmVyc2lvbjxUPj4oXG4gIGFyZ3M6IEFyZ3VtZW50cyxcbik6IFByb21pc2U8UGFnaW5hdGVkRG9jczxUPj4ge1xuICBjb25zdCB7XG4gICAgZGVwdGgsXG4gICAgZ2xvYmFsQ29uZmlnLFxuICAgIGxpbWl0LFxuICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgIHBhZ2UsXG4gICAgcmVxOiB7IGZhbGxiYWNrTG9jYWxlLCBsb2NhbGUsIHBheWxvYWQgfSxcbiAgICByZXEsXG4gICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICBzb3J0LFxuICAgIHdoZXJlLFxuICB9ID0gYXJnc1xuXG4gIGNvbnN0IHZlcnNpb25GaWVsZHMgPSBidWlsZFZlcnNpb25HbG9iYWxGaWVsZHMoZ2xvYmFsQ29uZmlnKVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc2hvdWxkQ29tbWl0ID0gYXdhaXQgaW5pdFRyYW5zYWN0aW9uKHJlcSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBY2Nlc3NcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBjb25zdCBhY2Nlc3NSZXN1bHRzID0gIW92ZXJyaWRlQWNjZXNzXG4gICAgICA/IGF3YWl0IGV4ZWN1dGVBY2Nlc3MoeyByZXEgfSwgZ2xvYmFsQ29uZmlnLmFjY2Vzcy5yZWFkVmVyc2lvbnMpXG4gICAgICA6IHRydWVcblxuICAgIGF3YWl0IHZhbGlkYXRlUXVlcnlQYXRocyh7XG4gICAgICBnbG9iYWxDb25maWcsXG4gICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgIHJlcSxcbiAgICAgIHZlcnNpb25GaWVsZHMsXG4gICAgICB3aGVyZSxcbiAgICB9KVxuXG4gICAgY29uc3QgZnVsbFdoZXJlID0gY29tYmluZVF1ZXJpZXMod2hlcmUsIGFjY2Vzc1Jlc3VsdHMpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRmluZFxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IHBhZ2luYXRlZERvY3MgPSBhd2FpdCBwYXlsb2FkLmRiLmZpbmRHbG9iYWxWZXJzaW9uczxUPih7XG4gICAgICBnbG9iYWw6IGdsb2JhbENvbmZpZy5zbHVnLFxuICAgICAgbGltaXQ6IGxpbWl0ID8/IDEwLFxuICAgICAgbG9jYWxlLFxuICAgICAgcGFnZTogcGFnZSB8fCAxLFxuICAgICAgcmVxLFxuICAgICAgc29ydCxcbiAgICAgIHdoZXJlOiBmdWxsV2hlcmUsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlclJlYWQgLSBGaWVsZHNcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgLi4ucGFnaW5hdGVkRG9jcyxcbiAgICAgIGRvY3M6IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBwYWdpbmF0ZWREb2NzLmRvY3MubWFwKGFzeW5jIChkYXRhKSA9PiAoe1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgdmVyc2lvbjogYXdhaXQgYWZ0ZXJSZWFkKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IG51bGwsXG4gICAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgZG9jOiB7XG4gICAgICAgICAgICAgIC4uLmRhdGEudmVyc2lvbixcbiAgICAgICAgICAgICAgLy8gUGF0Y2ggZ2xvYmFsVHlwZSBvbnRvIHZlcnNpb24gZG9jXG4gICAgICAgICAgICAgIGdsb2JhbFR5cGU6IGdsb2JhbENvbmZpZy5zbHVnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgZmluZE1hbnk6IHRydWUsXG4gICAgICAgICAgICBnbG9iYWw6IGdsb2JhbENvbmZpZyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSkpLFxuICAgICAgKSxcbiAgICB9IGFzIFBhZ2luYXRlZERvY3M8VD5cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlclJlYWQgLSBHbG9iYWxcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICByZXN1bHQgPSB7XG4gICAgICAuLi5yZXN1bHQsXG4gICAgICBkb2NzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVzdWx0LmRvY3MubWFwKGFzeW5jIChkb2MpID0+IHtcbiAgICAgICAgICBjb25zdCBkb2NSZWYgPSBkb2NcblxuICAgICAgICAgIGF3YWl0IGdsb2JhbENvbmZpZy5ob29rcy5hZnRlclJlYWQucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICAgICAgICBkb2NSZWYudmVyc2lvbiA9XG4gICAgICAgICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICAgICAgICBkb2M6IGRvYy52ZXJzaW9uLFxuICAgICAgICAgICAgICAgIGZpbmRNYW55OiB0cnVlLFxuICAgICAgICAgICAgICAgIGdsb2JhbDogZ2xvYmFsQ29uZmlnLFxuICAgICAgICAgICAgICAgIHF1ZXJ5OiBmdWxsV2hlcmUsXG4gICAgICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgICB9KSkgfHwgZG9jLnZlcnNpb25cbiAgICAgICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgICAgICAgIHJldHVybiBkb2NSZWZcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSZXR1cm4gcmVzdWx0c1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHJlc3VsdCA9IHtcbiAgICAgIC4uLnJlc3VsdCxcbiAgICAgIGRvY3M6IHJlc3VsdC5kb2NzLm1hcCgoZG9jKSA9PiBzYW5pdGl6ZUludGVybmFsRmllbGRzPFQ+KGRvYykpLFxuICAgIH1cblxuICAgIGlmIChzaG91bGRDb21taXQpIGF3YWl0IGNvbW1pdFRyYW5zYWN0aW9uKHJlcSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBhd2FpdCBraWxsVHJhbnNhY3Rpb24ocmVxKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZmluZFZlcnNpb25zXG4iXSwibmFtZXMiOlsiZmluZFZlcnNpb25zIiwiYXJncyIsImRlcHRoIiwiZ2xvYmFsQ29uZmlnIiwibGltaXQiLCJvdmVycmlkZUFjY2VzcyIsInBhZ2UiLCJyZXEiLCJmYWxsYmFja0xvY2FsZSIsImxvY2FsZSIsInBheWxvYWQiLCJzaG93SGlkZGVuRmllbGRzIiwic29ydCIsIndoZXJlIiwidmVyc2lvbkZpZWxkcyIsImJ1aWxkVmVyc2lvbkdsb2JhbEZpZWxkcyIsInNob3VsZENvbW1pdCIsImluaXRUcmFuc2FjdGlvbiIsImFjY2Vzc1Jlc3VsdHMiLCJleGVjdXRlQWNjZXNzIiwiYWNjZXNzIiwicmVhZFZlcnNpb25zIiwidmFsaWRhdGVRdWVyeVBhdGhzIiwiZnVsbFdoZXJlIiwiY29tYmluZVF1ZXJpZXMiLCJwYWdpbmF0ZWREb2NzIiwiZGIiLCJmaW5kR2xvYmFsVmVyc2lvbnMiLCJnbG9iYWwiLCJzbHVnIiwicmVzdWx0IiwiZG9jcyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJkYXRhIiwidmVyc2lvbiIsImFmdGVyUmVhZCIsImNvbGxlY3Rpb24iLCJjb250ZXh0IiwiZG9jIiwiZ2xvYmFsVHlwZSIsImZpbmRNYW55IiwiZG9jUmVmIiwiaG9va3MiLCJyZWR1Y2UiLCJwcmlvckhvb2siLCJob29rIiwicXVlcnkiLCJyZXNvbHZlIiwic2FuaXRpemVJbnRlcm5hbEZpZWxkcyIsImNvbW1pdFRyYW5zYWN0aW9uIiwiZXJyb3IiLCJraWxsVHJhbnNhY3Rpb24iXSwibWFwcGluZ3MiOiI7Ozs7K0JBOEpBOzs7ZUFBQTs7O3NFQXhKMEI7Z0NBQ0s7b0NBQ0k7MkJBQ1Q7bUNBQ1E7aUNBQ0Y7aUNBQ0E7K0VBQ0c7bUNBQ007Ozs7OztBQWN6QyxlQUFlQSxhQUNiQyxJQUFlO0lBRWYsTUFBTSxFQUNKQyxLQUFLLEVBQ0xDLFlBQVksRUFDWkMsS0FBSyxFQUNMQyxjQUFjLEVBQ2RDLElBQUksRUFDSkMsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEVBQ3hDSCxHQUFHLEVBQ0hJLGdCQUFnQixFQUNoQkMsSUFBSSxFQUNKQyxLQUFL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