@azure/static-web-apps-cli
Version:
Azure Static Web Apps CLI
49 lines • 2.7 kB
JavaScript
import chalk from "chalk";
import { logger } from "../../../core/utils/logger.js";
import { CUSTOM_URL_SCHEME, OVERRIDABLE_ERROR_CODES } from "../../../core/constants.js";
function tryGetResponseOverrideForStatusCode(responseOverrides, statusCode) {
return responseOverrides?.[statusCode];
}
// See: https://docs.microsoft.com/azure/static-web-apps/configuration#response-overrides
export function responseOverrides(req, res, responseOverrides) {
const statusCode = res.statusCode;
logger.silly(`checking response overrides for status code ${chalk.yellow(statusCode)}`);
if (OVERRIDABLE_ERROR_CODES.includes(statusCode)) {
const rule = tryGetResponseOverrideForStatusCode(responseOverrides, statusCode);
if (rule) {
logger.silly(" - found overriden rules...");
if (rule.statusCode) {
res.statusCode = rule.statusCode;
logger.silly(` - statusCode: ${chalk.yellow(statusCode)}`);
}
if (rule.redirect) {
const statusCodeToServe = parseInt(`${rule?.statusCode}`, 10) === 301 ? 301 : 302;
res.statusCode = statusCodeToServe;
if (rule.redirect.indexOf(".referrer") !== -1) {
// The Production SWA service supports replacing `.referrer` with the current route, so that the user can redirected to a deep link after the authentication flow.
// Since the route can contain a path with a query we will want to encode it and the `auth.html` page will need to decode it before changing the page.
const redirectWithReferrerReplaced = rule.redirect.replace(".referrer", encodeURIComponent(req.url || ""));
res.setHeader("Location", redirectWithReferrerReplaced);
}
else {
// No `.referrer` param is used, just use user-provided rule redirect as-is
res.setHeader("Location", rule.redirect);
}
logger.silly(` - redirect: ${chalk.yellow(rule.redirect)}`);
}
if (rule.rewrite && req.url !== rule.rewrite) {
// don't process .auth or api rewrites
if (rule.rewrite.startsWith("/.auth") || rule.rewrite.startsWith("/api")) {
return;
}
rule.rewrite = rule.rewrite.replace("/", "");
req.url = `${CUSTOM_URL_SCHEME}${rule.rewrite}`;
logger.silly(` - rewrite: ${chalk.yellow(req.url)}`);
}
}
else {
logger.silly(" - no rules found.");
}
}
}
//# sourceMappingURL=response-overrides.js.map