UNPKG

@r1tsu/payload

Version:

90 lines (89 loc) 3.96 kB
import { en } from '@payloadcms/translations/languages/en'; import merge from 'deepmerge'; import { defaultUserCollection } from '../auth/defaultUser.js'; import sanitizeCollection from '../collections/config/sanitize.js'; import { migrationsCollection } from '../database/migrations/migrationsCollection.js'; import { InvalidConfiguration } from '../errors/index.js'; import sanitizeGlobals from '../globals/config/sanitize.js'; import getPreferencesCollection from '../preferences/preferencesCollection.js'; import checkDuplicateCollections from '../utilities/checkDuplicateCollections.js'; import { isPlainObject } from '../utilities/isPlainObject.js'; import { defaults } from './defaults.js'; const sanitizeAdminConfig = (configToSanitize)=>{ const sanitizedConfig = { ...configToSanitize }; // add default user collection if none provided if (!sanitizedConfig?.admin?.user) { const firstCollectionWithAuth = sanitizedConfig.collections.find(({ auth })=>Boolean(auth)); if (firstCollectionWithAuth) { sanitizedConfig.admin.user = firstCollectionWithAuth.slug; } else { sanitizedConfig.admin.user = defaultUserCollection.slug; sanitizedConfig.collections.push(defaultUserCollection); } } if (!sanitizedConfig.collections.find(({ slug })=>slug === sanitizedConfig.admin.user)) { throw new InvalidConfiguration(`${sanitizedConfig.admin.user} is not a valid admin user collection`); } if (sanitizedConfig?.admin?.components?.views) Object.entries(sanitizedConfig.admin.components.views).forEach(([_key, view])=>{ if (typeof view === 'function' || view.templateType) return; view.templateType = 'none'; }); return sanitizedConfig; }; export const sanitizeConfig = (incomingConfig)=>{ const configWithDefaults = merge(defaults, incomingConfig, { isMergeableObject: isPlainObject }); if (!configWithDefaults?.serverURL) { configWithDefaults.serverURL = ''; } const config = sanitizeAdminConfig(configWithDefaults); if (config.localization && config.localization.locales?.length > 0) { // clone localization config so to not break everything const firstLocale = config.localization.locales[0]; if (typeof firstLocale === 'string') { config.localization.localeCodes = [ ...config.localization.locales ]; // is string[], so convert to Locale[] config.localization.locales = config.localization.locales.map((locale)=>({ code: locale, label: locale, rtl: false, toString: ()=>locale })); } else { // is Locale[], so convert to string[] for localeCodes config.localization.localeCodes = config.localization.locales.reduce((locales, locale)=>{ locales.push(locale.code); return locales; }, []); config.localization.locales = config.localization.locales.map((locale)=>({ ...locale, toString: ()=>locale.code })); } } config.i18n = { fallbackLanguage: 'en', supportedLanguages: { en }, translations: {}, ...incomingConfig?.i18n ?? {} }; configWithDefaults.collections.push(getPreferencesCollection(configWithDefaults)); configWithDefaults.collections.push(migrationsCollection); config.collections = config.collections.map((collection)=>sanitizeCollection(configWithDefaults, collection)); checkDuplicateCollections(config.collections); if (config.globals.length > 0) { config.globals = sanitizeGlobals(config); } if (config.serverURL !== '') { config.csrf.push(config.serverURL); } return config; }; //# sourceMappingURL=sanitize.js.map