vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
38 lines (37 loc) • 1.65 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getEnvVarObject = getEnvVarObject;
exports.parseJson5 = parseJson5;
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
const utils_js_1 = require("../utils.js");
const json5_1 = __importDefault(require("json5"));
function getEnvVarObject(envVarName) {
const valueStr = process.env[envVarName];
if (!valueStr)
return null;
const value = parseJson5(valueStr, envVarName);
(0, utils_js_1.assertUsage)(value, `${envVarName} should define an object but it's ${picocolors_1.default.bold(String(value))} instead.`);
(0, utils_js_1.assertUsage)((0, utils_js_1.isObject)(value), `${envVarName} should define an object but it's set to the following which isn't an object: ${picocolors_1.default.bold(valueStr)}`);
return value;
}
function parseJson5(valueStr, what) {
let value;
try {
value = json5_1.default.parse(valueStr);
}
catch (err) {
if (isNotJavaScriptLike(valueStr)) {
// Interpret as string
return valueStr;
}
console.error(err);
(0, utils_js_1.assertUsage)(false, `Cannot parse ${picocolors_1.default.cyan(what)} (see error above) because it's set to the following which isn't a valid JSON5 string: ${picocolors_1.default.bold(valueStr)}`);
}
return value;
}
function isNotJavaScriptLike(valueStr) {
return ![':', ',', '{', '}', '(', ')'].some((c) => valueStr.includes(c));
}