@r1tsu/payload
Version:
76 lines (75 loc) • 2.99 kB
JavaScript
import { getDataLoader } from '../collections/dataloader.js';
import { getLocalI18n } from '../translations/getLocalI18n.js';
function getRequestContext(req = {
context: null
}, context = {}) {
if (req.context) {
if (Object.keys(req.context).length === 0 && req.context.constructor === Object) {
// if req.context is `{}` avoid unnecessary spread
return context;
} else {
return {
...req.context,
...context
};
}
} else {
return context;
}
}
const attachFakeURLProperties = (req)=>{
/**
* *NOTE*
* If no URL is provided, the local API was called directly outside
* the context of a request. Therefore we create a fake URL object.
* `ts-ignore` is used below for properties that are 'read-only'
* since they do not exist yet we can safely ignore the error.
*/ let urlObject;
function getURLObject() {
if (urlObject) return urlObject;
const urlToUse = req?.url || req.payload.config?.serverURL || 'http://localhost';
try {
urlObject = new URL(urlToUse);
} catch (error) {
urlObject = new URL('http://localhost');
}
return urlObject;
}
if (!req.host) req.host = getURLObject().host;
if (!req.protocol) req.protocol = getURLObject().protocol;
if (!req.pathname) req.pathname = getURLObject().pathname;
// @ts-expect-error
if (!req.searchParams) req.searchParams = getURLObject().searchParams;
// @ts-expect-error
if (!req.origin) req.origin = getURLObject().origin;
// @ts-expect-error
if (!req?.url) req.url = getURLObject().url;
};
export const createLocalReq = async ({ context, fallbackLocale, locale: localeArg, req = {}, user }, payload)=>{
const i18n = req?.i18n || await getLocalI18n({
config: payload.config
});
if (payload.config?.localization) {
const locale = localeArg === '*' ? 'all' : localeArg;
const defaultLocale = payload.config.localization.defaultLocale;
req.locale = locale || req?.locale || defaultLocale;
const fallbackLocaleFromConfig = payload.config.localization.locales.find(({ code })=>req.locale === code)?.fallbackLocale;
if (typeof fallbackLocale !== 'undefined') {
req.fallbackLocale = fallbackLocale;
} else if (typeof req?.fallbackLocale === 'undefined') {
req.fallbackLocale = fallbackLocaleFromConfig || defaultLocale;
}
}
req.context = getRequestContext(req, context);
req.payloadAPI = req?.payloadAPI || 'local';
req.payload = payload;
req.i18n = i18n;
req.t = i18n.t;
req.user = user || req?.user || null;
req.payloadDataLoader = req?.payloadDataLoader || getDataLoader(req);
req.routeParams = req?.routeParams || {};
req.query = req?.query || {};
attachFakeURLProperties(req);
return req;
};
//# sourceMappingURL=createLocalReq.js.map