123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.generateDotenvFilename = exports.toDotenvFormat = exports.hydrateEnvs = exports.configToEnv = exports.convertKey = exports.hydrateConfigs = exports.getProjectInfos = void 0;
- const clc = require("colorette");
- const env = require("./env");
- const functionsConfig = require("../functionsConfig");
- const error_1 = require("../error");
- const logger_1 = require("../logger");
- const projectUtils_1 = require("../projectUtils");
- const rc_1 = require("../rc");
- const utils_1 = require("../utils");
- const functional_1 = require("../functional");
- function getProjectInfos(options) {
- const result = {};
- const rc = (0, rc_1.loadRC)(options);
- if (rc.projects) {
- for (const [alias, projectId] of Object.entries(rc.projects)) {
- if (Object.keys(result).includes(projectId)) {
- (0, utils_1.logWarning)(`Multiple aliases found for ${clc.bold(projectId)}. ` +
- `Preferring alias (${clc.bold(result[projectId])}) over (${clc.bold(alias)}).`);
- continue;
- }
- result[projectId] = alias;
- }
- }
- const projectId = (0, projectUtils_1.getProjectId)(options);
- if (projectId && !Object.keys(result).includes(projectId)) {
- result[projectId] = projectId;
- }
- return Object.entries(result).map(([k, v]) => {
- const result = { projectId: k };
- if (k !== v) {
- result.alias = v;
- }
- return result;
- });
- }
- exports.getProjectInfos = getProjectInfos;
- async function hydrateConfigs(pInfos) {
- const hydrate = pInfos.map((info) => {
- return functionsConfig
- .materializeAll(info.projectId)
- .then((config) => {
- info.config = config;
- return;
- })
- .catch((err) => {
- logger_1.logger.debug(`Failed to fetch runtime config for project ${info.projectId}: ${err.message}`);
- });
- });
- await Promise.all(hydrate);
- }
- exports.hydrateConfigs = hydrateConfigs;
- function convertKey(configKey, prefix) {
- const baseKey = configKey
- .toUpperCase()
- .replace(/\./g, "_")
- .replace(/-/g, "_");
- let envKey = baseKey;
- try {
- env.validateKey(envKey);
- }
- catch (err) {
- if (err instanceof env.KeyValidationError) {
- envKey = prefix + envKey;
- env.validateKey(envKey);
- }
- }
- return envKey;
- }
- exports.convertKey = convertKey;
- function configToEnv(configs, prefix) {
- const success = [];
- const errors = [];
- for (const [configKey, value] of (0, functional_1.flatten)(configs)) {
- try {
- const envKey = convertKey(configKey, prefix);
- success.push({ origKey: configKey, newKey: envKey, value: value });
- }
- catch (err) {
- if (err instanceof env.KeyValidationError) {
- errors.push({
- origKey: configKey,
- newKey: err.key,
- err: err.message,
- value: value,
- });
- }
- else {
- throw new error_1.FirebaseError("Unexpected error while converting config", {
- exit: 2,
- original: err,
- });
- }
- }
- }
- return { success, errors };
- }
- exports.configToEnv = configToEnv;
- function hydrateEnvs(pInfos, prefix) {
- let errMsg = "";
- for (const pInfo of pInfos) {
- const { success, errors } = configToEnv(pInfo.config, prefix);
- if (errors.length > 0) {
- const msg = `${pInfo.projectId} ` +
- `${pInfo.alias ? "(" + pInfo.alias + ")" : ""}:\n` +
- errors.map((err) => `\t${err.origKey} => ${clc.bold(err.newKey)} (${err.err})`).join("\n") +
- "\n";
- errMsg += msg;
- }
- else {
- pInfo.envs = success;
- }
- }
- return errMsg;
- }
- exports.hydrateEnvs = hydrateEnvs;
- const CHARACTERS_TO_ESCAPE_SEQUENCES = {
- "\n": "\\n",
- "\r": "\\r",
- "\t": "\\t",
- "\v": "\\v",
- "\\": "\\\\",
- '"': '\\"',
- "'": "\\'",
- };
- function escape(s) {
- return s.replace(/[\n\r\t\v\\"']/g, (ch) => CHARACTERS_TO_ESCAPE_SEQUENCES[ch]);
- }
- function toDotenvFormat(envs, header = "") {
- const lines = envs.map(({ newKey, value }) => `${newKey}="${escape(value)}"`);
- const maxLineLen = Math.max(...lines.map((l) => l.length));
- return (`${header}\n` +
- lines.map((line, idx) => `${line.padEnd(maxLineLen)} # from ${envs[idx].origKey}`).join("\n"));
- }
- exports.toDotenvFormat = toDotenvFormat;
- function generateDotenvFilename(pInfo) {
- var _a;
- return `.env.${(_a = pInfo.alias) !== null && _a !== void 0 ? _a : pInfo.projectId}`;
- }
- exports.generateDotenvFilename = generateDotenvFilename;
|