export function convertConfig()

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;
}