1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.functionsConfigClone = void 0;
- const _ = require("lodash");
- const clc = require("colorette");
- const error_1 = require("./error");
- const functionsConfig = require("./functionsConfig");
- const runtimeconfig = require("./gcp/runtimeconfig");
- function matchPrefix(short, long) {
- if (short.length > long.length) {
- return false;
- }
- return short.reduce((accum, x, i) => accum && x === long[i], true);
- }
- function applyExcept(json, except) {
- for (const key of except) {
- _.unset(json, key);
- }
- }
- function cloneVariable(varName, toProject) {
- return runtimeconfig.variables.get(varName).then((variable) => {
- const id = functionsConfig.varNameToIds(variable.name);
- return runtimeconfig.variables.set(toProject, id.config, id.variable, variable.text);
- });
- }
- function cloneConfig(configName, toProject) {
- return runtimeconfig.variables.list(configName).then((variables) => {
- return Promise.all(variables.map((variable) => {
- return cloneVariable(variable.name, toProject);
- }));
- });
- }
- async function cloneConfigOrVariable(key, fromProject, toProject) {
- const parts = key.split(".");
- if (functionsConfig.RESERVED_NAMESPACES.includes(parts[0])) {
- throw new error_1.FirebaseError("Cannot clone reserved namespace " + clc.bold(parts[0]));
- }
- const configName = ["projects", fromProject, "configs", parts[0]].join("/");
- if (parts.length === 1) {
- return cloneConfig(configName, toProject);
- }
- return runtimeconfig.variables.list(configName).then((variables) => {
- const promises = [];
- for (const variable of variables) {
- const varId = functionsConfig.varNameToIds(variable.name).variable;
- const variablePrefixFilter = parts.slice(1);
- if (matchPrefix(variablePrefixFilter, varId.split("/"))) {
- promises.push(cloneVariable(variable.name, toProject));
- }
- }
- return Promise.all(promises);
- });
- }
- async function functionsConfigClone(fromProject, toProject, only, except = []) {
- if (only) {
- return Promise.all(only.map((key) => {
- return cloneConfigOrVariable(key, fromProject, toProject);
- }));
- }
- return functionsConfig.materializeAll(fromProject).then((toClone) => {
- _.unset(toClone, "firebase");
- applyExcept(toClone, except);
- return Promise.all(Object.entries(toClone).map(([configId, val]) => {
- return functionsConfig.setVariablesRecursive(toProject, configId, "", val);
- }));
- });
- }
- exports.functionsConfigClone = functionsConfigClone;
|