jjj 0.2.1

A modal interface for Jujutsu.
const AdapterFeatureStability = {
  STABLE: "stable",
  DEPRECATED: "deprecated",
  UNSUPPORTED: "unsupported",
  EXPERIMENTAL: "experimental",
  LIMITED: "limited"
};
function validateSupportedFeatures(adapterName, featureMap, settings, logger) {
  const {
    serverOutput = AdapterFeatureStability.UNSUPPORTED,
    staticOutput = AdapterFeatureStability.UNSUPPORTED,
    hybridOutput = AdapterFeatureStability.UNSUPPORTED,
    i18nDomains = AdapterFeatureStability.UNSUPPORTED,
    envGetSecret = AdapterFeatureStability.UNSUPPORTED,
    sharpImageService = AdapterFeatureStability.UNSUPPORTED
  } = featureMap;
  const validationResult = {};
  validationResult.staticOutput = validateSupportKind(
    staticOutput,
    adapterName,
    logger,
    "staticOutput",
    () => settings.buildOutput === "static"
  );
  validationResult.hybridOutput = validateSupportKind(
    hybridOutput,
    adapterName,
    logger,
    "hybridOutput",
    () => settings.config.output == "static" && settings.buildOutput === "server"
  );
  validationResult.serverOutput = validateSupportKind(
    serverOutput,
    adapterName,
    logger,
    "serverOutput",
    () => settings.config?.output === "server" || settings.buildOutput === "server"
  );
  if (settings.config.i18n?.domains) {
    validationResult.i18nDomains = validateSupportKind(
      i18nDomains,
      adapterName,
      logger,
      "i18nDomains",
      () => {
        return settings.config?.output === "server" && !settings.config?.site;
      }
    );
  }
  validationResult.envGetSecret = validateSupportKind(
    envGetSecret,
    adapterName,
    logger,
    "astro:env getSecret",
    () => Object.keys(settings.config?.env?.schema ?? {}).length !== 0
  );
  validationResult.sharpImageService = validateSupportKind(
    sharpImageService,
    adapterName,
    logger,
    "sharp",
    () => settings.config?.image?.service?.entrypoint === "astro/assets/services/sharp"
  );
  return validationResult;
}
function unwrapSupportKind(supportKind) {
  if (!supportKind) {
    return void 0;
  }
  return typeof supportKind === "object" ? supportKind.support : supportKind;
}
function getSupportMessage(supportKind) {
  return typeof supportKind === "object" ? supportKind.message : void 0;
}
function validateSupportKind(supportKind, adapterName, logger, featureName, hasCorrectConfig) {
  const supportValue = unwrapSupportKind(supportKind);
  const message = getSupportMessage(supportKind);
  if (!supportValue) {
    return false;
  }
  if (supportValue === AdapterFeatureStability.STABLE) {
    return true;
  } else if (hasCorrectConfig()) {
    logFeatureSupport(adapterName, logger, featureName, supportValue, message);
  }
  return false;
}
function logFeatureSupport(adapterName, logger, featureName, supportKind, adapterMessage) {
  switch (supportKind) {
    case AdapterFeatureStability.STABLE:
      break;
    case AdapterFeatureStability.DEPRECATED:
      logger.warn(
        "config",
        `The adapter ${adapterName} has deprecated its support for "${featureName}", and future compatibility is not guaranteed. The adapter may completely remove support for this feature without warning.`
      );
      break;
    case AdapterFeatureStability.EXPERIMENTAL:
      logger.warn(
        "config",
        `The adapter ${adapterName} provides experimental support for "${featureName}". You may experience issues or breaking changes until this feature is fully supported by the adapter.`
      );
      break;
    case AdapterFeatureStability.LIMITED:
      logger.warn(
        "config",
        `The adapter ${adapterName} has limited support for "${featureName}". Certain features may not work as expected.`
      );
      break;
    case AdapterFeatureStability.UNSUPPORTED:
      logger.error(
        "config",
        `The adapter ${adapterName} does not currently support the feature "${featureName}". Your project may not build correctly.`
      );
      break;
  }
  if (adapterMessage) {
    logger.warn("adapter", adapterMessage);
  }
}
function getAdapterStaticRecommendation(adapterName) {
  return {
    "@astrojs/vercel/static": "Update your configuration to use `@astrojs/vercel/serverless` to unlock server-side rendering capabilities."
  }[adapterName];
}
export {
  AdapterFeatureStability,
  getAdapterStaticRecommendation,
  getSupportMessage,
  unwrapSupportKind,
  validateSupportedFeatures
};