firebase-tools
Version:
Command-Line Interface for Firebase
73 lines (72 loc) • 2.35 kB
JavaScript
;
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;
}