UNPKG

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
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, };