UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

33 lines (32 loc) 1.21 kB
export { getEnvVarObject }; export { parseJson5 }; import pc from '@brillout/picocolors'; import { assertUsage, isObject } from '../utils.js'; import JSON5 from 'json5'; function getEnvVarObject(envVarName) { const valueStr = process.env[envVarName]; if (!valueStr) return null; const value = parseJson5(valueStr, envVarName); assertUsage(value, `${envVarName} should define an object but it's ${pc.bold(String(value))} instead.`); assertUsage(isObject(value), `${envVarName} should define an object but it's set to the following which isn't an object: ${pc.bold(valueStr)}`); return value; } function parseJson5(valueStr, what) { let value; try { value = JSON5.parse(valueStr); } catch (err) { if (isNotJavaScriptLike(valueStr)) { // Interpret as string return valueStr; } console.error(err); assertUsage(false, `Cannot parse ${pc.cyan(what)} (see error above) because it's set to the following which isn't a valid JSON5 string: ${pc.bold(valueStr)}`); } return value; } function isNotJavaScriptLike(valueStr) { return ![':', ',', '{', '}', '(', ')'].some((c) => valueStr.includes(c)); }