firebase-tools
Version:
Command-Line Interface for Firebase
55 lines (54 loc) • 2.13 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkValidTargetFilters = void 0;
const deploy_1 = require("./commands/deploy");
const error_1 = require("./error");
function targetsForTypes(only, ...types) {
return only.filter((t) => {
if (t.includes(":")) {
return types.includes(t.split(":")[0]);
}
else {
return types.includes(t);
}
});
}
function targetsHaveFilters(...targets) {
return targets.some((t) => t.includes(":"));
}
function targetsHaveNoFilters(...targets) {
return targets.some((t) => !t.includes(":"));
}
const FILTERABLE_TARGETS = new Set([
"hosting",
"functions",
"firestore",
"storage",
"database",
"dataconnect",
"apphosting",
]);
async function checkValidTargetFilters(options) {
const only = !options.only ? [] : options.only.split(",");
return new Promise((resolve, reject) => {
if (!only.length) {
return resolve();
}
if (options.except) {
return reject(new error_1.FirebaseError("Cannot specify both --only and --except"));
}
const nonFilteredTypes = deploy_1.VALID_DEPLOY_TARGETS.filter((t) => !FILTERABLE_TARGETS.has(t));
const targetsForNonFilteredTypes = targetsForTypes(only, ...nonFilteredTypes);
if (targetsForNonFilteredTypes.length && targetsHaveFilters(...targetsForNonFilteredTypes)) {
return reject(new error_1.FirebaseError("Filters specified with colons (e.g. --only functions:func1,functions:func2) are only supported for functions, hosting, storage, and firestore"));
}
const targetsForFunctions = targetsForTypes(only, "functions");
if (targetsForFunctions.length &&
targetsHaveFilters(...targetsForFunctions) &&
targetsHaveNoFilters(...targetsForFunctions)) {
return reject(new error_1.FirebaseError('Cannot specify "--only functions" and "--only functions:<filter>" at the same time'));
}
return resolve();
});
}
exports.checkValidTargetFilters = checkValidTargetFilters;
;