gcp-secret-env
Version:
A simple tool to convert a google secret manager to an environment variable (in .env file or other)
123 lines (103 loc) • 2.78 kB
JavaScript
function detectFormat(data) {
if (typeof data === "object" && data !== null) {
return "json";
}
if (typeof data !== "string") {
return "unknown";
}
const trimmedData = data.trim();
if (trimmedData.startsWith("{")) {
try {
const parsed = JSON.parse(trimmedData);
if (typeof parsed === "object" && parsed !== null) {
return "json";
}
} catch (e) {
return "unknown";
}
}
const lines = trimmedData.split("\n");
if (lines.some((line) => line.includes("=") && !line.startsWith("#"))) {
return "env";
}
return "unknown";
}
function shouldConvert(data, targetFormat) {
const currentFormat = detectFormat(data);
if (currentFormat === "unknown") {
throw new Error(
"Invalid data format. Please provide a valid JSON or ENV string."
);
}
return currentFormat !== targetFormat;
}
function convertEnvToJson(env) {
if (shouldConvert(env, "json")) {
const json = {};
const lines = env.split("\n");
lines.forEach((line) => {
line = line.trim();
if (!line || line.startsWith("#")) return;
const index = line.indexOf("=");
if (index === -1) return;
const key = line.substring(0, index).trim();
let value = line.substring(index + 1).trim();
if (
(value.startsWith('"') && value.endsWith('"')) ||
(value.startsWith("'") && value.endsWith("'"))
) {
value = value.slice(1, -1);
}
json[key] = value;
});
return json;
}
return typeof env === "string" ? JSON.parse(env) : env;
}
function convertJsonToEnv(json) {
if (shouldConvert(json, "env")) {
try {
if (typeof json === "string") {
json = JSON.parse(json);
}
if (typeof json !== "object" || json === null) {
throw new Error("Invalid JSON data.");
}
if (Array.isArray(json)) {
throw new Error("JSON data should not be an array.");
}
return Object.entries(json)
.map(([key, value]) => {
const needsQuotes = /\s|=/.test(value);
return `${key}=${needsQuotes ? `"${value}"` : value}`;
})
.join("\n");
} catch (error) {}
}
return json;
}
function ensureFileExtension(filePath, extension = ".env") {
const ignoredSuffixes = [
".dev",
".development",
".test",
".testing",
".local",
".staging",
".prod",
".production",
".env",
];
if (extension === ".env") {
if (ignoredSuffixes.some((suffix) => filePath.endsWith(suffix))) {
return filePath;
}
return filePath.replace(/\.[^.]+$/, "");
}
return filePath.endsWith(extension) ? filePath : filePath + extension;
}
module.exports = {
convertEnvToJson,
convertJsonToEnv,
ensureFileExtension,
};