in src/deploy/hosting/convertConfig.ts [41:119]
export function convertConfig(config?: HostingConfig): { [k: string]: any } {
if (Array.isArray(config)) {
throw new FirebaseError(`convertConfig should be given a single configuration, not an array.`, {
exit: 2,
});
}
const out: { [k: string]: any } = {};
if (!config) {
return out;
}
// rewrites
if (Array.isArray(config.rewrites)) {
out.rewrites = config.rewrites.map((rewrite) => {
const vRewrite = extractPattern("rewrite", rewrite);
if ("destination" in rewrite) {
vRewrite.path = rewrite.destination;
} else if ("function" in rewrite) {
vRewrite.function = rewrite.function;
} else if ("dynamicLinks" in rewrite) {
vRewrite.dynamicLinks = rewrite.dynamicLinks;
} else if ("run" in rewrite) {
vRewrite.run = Object.assign({ region: "us-central1" }, rewrite.run);
}
return vRewrite;
});
}
// redirects
if (Array.isArray(config.redirects)) {
out.redirects = config.redirects.map((redirect) => {
const vRedirect = extractPattern("redirect", redirect);
vRedirect.location = redirect.destination;
if (redirect.type) {
vRedirect.statusCode = redirect.type;
}
return vRedirect;
});
}
// headers
if (Array.isArray(config.headers)) {
out.headers = config.headers.map((header) => {
const vHeader = extractPattern("header", header);
vHeader.headers = {};
if (Array.isArray(header.headers) && header.headers.length) {
header.headers.forEach((h) => {
vHeader.headers[h.key] = h.value;
});
}
return vHeader;
});
}
// cleanUrls
if (has(config, "cleanUrls")) {
out.cleanUrls = config.cleanUrls;
}
// trailingSlash
if (config.trailingSlash === true) {
out.trailingSlashBehavior = "ADD";
} else if (config.trailingSlash === false) {
out.trailingSlashBehavior = "REMOVE";
}
// App association files
if (has(config, "appAssociation")) {
out.appAssociation = config.appAssociation;
}
// i18n config
if (has(config, "i18n")) {
out.i18n = config.i18n;
}
return out;
}