import type { NonUndefined, UnknownObjectValues } from '../types'; import MisconfigurationError from '../errors/MisconfigurationError'; import isServer from './is-server'; const generateMisconfigurationErrorMessage = (keys: Array) => `${keys.join(', ')} must have a value before running the Framework.`; const forceIsomorphicConfigValues = < X extends keyof T, T extends UnknownObjectValues, H extends Record> >( config: T, requiredServerKeys: string[], requiredPublicKeys: X[] ) => { if (isServer) { const missingServerConfigValues = requiredServerKeys.filter( (requiredServerKey) => typeof config[requiredServerKey] === 'undefined' ); if (missingServerConfigValues.length > 0) { throw new MisconfigurationError( generateMisconfigurationErrorMessage(missingServerConfigValues) ); } } const missingPublicConfigValues = requiredPublicKeys.filter( (requiredPublicKey) => typeof config[requiredPublicKey] === 'undefined' ); if (missingPublicConfigValues.length > 0) { throw new MisconfigurationError( generateMisconfigurationErrorMessage(missingPublicConfigValues) ); } return config as T & H; }; export default forceIsomorphicConfigValues;