You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.6 KiB
68 lines
2.6 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.configForCodebase = exports.normalizeAndValidate = exports.validate = exports.assertUnique = exports.validateCodebase = exports.normalize = exports.DEFAULT_CODEBASE = void 0;
|
|
const error_1 = require("../error");
|
|
exports.DEFAULT_CODEBASE = "default";
|
|
function normalize(config) {
|
|
if (!config) {
|
|
throw new error_1.FirebaseError("No valid functions configuration detected in firebase.json");
|
|
}
|
|
if (Array.isArray(config)) {
|
|
if (config.length < 1) {
|
|
throw new error_1.FirebaseError("Requires at least one functions.source in firebase.json.");
|
|
}
|
|
return config;
|
|
}
|
|
return [config];
|
|
}
|
|
exports.normalize = normalize;
|
|
function validateCodebase(codebase) {
|
|
if (codebase.length === 0 || codebase.length > 63 || !/^[a-z0-9_-]+$/.test(codebase)) {
|
|
throw new error_1.FirebaseError("Invalid codebase name. Codebase must be less than 64 characters and " +
|
|
"can contain only lowercase letters, numeric characters, underscores, and dashes.");
|
|
}
|
|
}
|
|
exports.validateCodebase = validateCodebase;
|
|
function validateSingle(config) {
|
|
if (!config.source) {
|
|
throw new error_1.FirebaseError("codebase source must be specified");
|
|
}
|
|
if (!config.codebase) {
|
|
config.codebase = exports.DEFAULT_CODEBASE;
|
|
}
|
|
validateCodebase(config.codebase);
|
|
return Object.assign(Object.assign({}, config), { source: config.source, codebase: config.codebase });
|
|
}
|
|
function assertUnique(config, property, propval) {
|
|
const values = new Set();
|
|
if (propval) {
|
|
values.add(propval);
|
|
}
|
|
for (const single of config) {
|
|
const value = single[property];
|
|
if (values.has(value)) {
|
|
throw new error_1.FirebaseError(`functions.${property} must be unique but '${value}' was used more than once.`);
|
|
}
|
|
values.add(value);
|
|
}
|
|
}
|
|
exports.assertUnique = assertUnique;
|
|
function validate(config) {
|
|
const validated = config.map((cfg) => validateSingle(cfg));
|
|
assertUnique(validated, "source");
|
|
assertUnique(validated, "codebase");
|
|
return validated;
|
|
}
|
|
exports.validate = validate;
|
|
function normalizeAndValidate(config) {
|
|
return validate(normalize(config));
|
|
}
|
|
exports.normalizeAndValidate = normalizeAndValidate;
|
|
function configForCodebase(config, codebase) {
|
|
const codebaseCfg = config.find((c) => c.codebase === codebase);
|
|
if (!codebaseCfg) {
|
|
throw new error_1.FirebaseError(`No functions config found for codebase ${codebase}`);
|
|
}
|
|
return codebaseCfg;
|
|
}
|
|
exports.configForCodebase = configForCodebase;
|