UNPKG

firebase-tools

Version:
73 lines (72 loc) • 2.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BUILD_ENV_ANNOTATION = void 0; exports.getBuildEnv = getBuildEnv; exports.secretNames = secretNames; exports.nonSecretValues = nonSecretValues; exports.toLocalBuildEnv = toLocalBuildEnv; const error_1 = require("../../error"); exports.BUILD_ENV_ANNOTATION = "firebase.google.com/buildConfig.environmentVariablesAndSecrets"; function getBuildEnv(service) { const raw = service?.annotations?.[exports.BUILD_ENV_ANNOTATION]; if (!service || !raw) { return {}; } const invalid = (reason) => new error_1.FirebaseError(`Invalid ${exports.BUILD_ENV_ANNOTATION} annotation on ${service.name}: ${reason}`); let parsed; try { parsed = JSON.parse(raw); } catch { throw invalid("it isn't valid JSON."); } if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) { throw invalid("it must be a JSON object."); } const env = {}; for (const [name, value] of Object.entries(parsed)) { if (typeof value === "string" || isSecretRef(value)) { env[name] = value; } else if (typeof value === "number" || typeof value === "boolean") { env[name] = String(value); } else { throw invalid(`${name} must be a string, number, boolean, or {"secret": "<secret name>"}.`); } } return env; } function isSecretRef(value) { const ref = value; return (typeof ref === "object" && ref !== null && Object.keys(ref).length === 1 && typeof ref.secret === "string"); } function secretNames(env) { return Object.entries(env) .filter(([, value]) => isSecretRef(value)) .map(([name]) => name); } function nonSecretValues(env) { const values = {}; for (const [name, value] of Object.entries(env)) { if (!isSecretRef(value)) { values[name] = value; } } return values; } function toLocalBuildEnv(env) { const result = {}; for (const [name, value] of Object.entries(env)) { if (isSecretRef(value)) { result[name] = { secret: value.secret, availability: ["BUILD"] }; } else { result[name] = { value, availability: ["BUILD"] }; } } return result; }