{"version":3,"sources":["../src/utils/defaults.ts"],"sourcesContent":["/**\n * 默认配置值\n *\n * 此文件包含所有默认配置值，方便集中管理和调整\n */\n\n// No imports needed\n\n// Nacos 服务器配置\nexport const DEFAULT_LANE_SERVER = 'localhost:8848'; // 服务器地址和端口\nexport const DEFAULT_LANE_NAMESPACE = 'public';\nexport const DEFAULT_LANE_GROUP_NAME = 'DEFAULT_GROUP';\n\n// 心跳配置\nexport const DEFAULT_LANE_HEARTBEAT_INTERVAL = 5000; // 心跳间隔（毫秒）\nexport const DEFAULT_LANE_INSTANCE_TTL = 15000; // 实例过期时间（毫秒）\n\n// 服务配置\nexport const DEFAULT_SERVICE_NAME = null; // 不提供默认值，确保必须明确指定服务名称\nexport const DEFAULT_LANE_ID = 'baseline'; // 默认泳道ID为 baseline\nexport const DEFAULT_HOST = 'localhost';\nexport const DEFAULT_PORT = 3000;\n\n// 泳道配置\nexport const DEFAULT_TARGET_LANE_HEADER = 'X-Lane-ID'; // 保留旧名称以兼容\nexport const DEFAULT_LANE_TARGET_HEADER = 'X-Lane-ID';\nexport const DEFAULT_LANE_ENABLED = false;\nexport const DEFAULT_LANE_COOKIE_ENABLED = true; // 是否启用从cookie中检测泳道ID\n\n// 响应头常量\nexport const HEADER_PROXIED_BY = 'X-Proxied-By';\nexport const HEADER_ORIGINAL_LANE = 'X-Original-Lane';\nexport const HEADER_PROXIED_BY_VALUE = 'multi-lane-manager';\n\n// 调试头常量\nexport const HEADER_LANE_DEBUG = 'X-Lane-Debug';\nexport const HEADER_LANE_DETAIL = 'X-Lane-Detail';\n\n// 超时配置\nexport const DEFAULT_LANE_PROXY_TIMEOUT = 15000;\nexport const DEFAULT_LANE_REGISTRATION_TIMEOUT = 5000;\n\n// 日志配置\nexport const DEFAULT_LOG_LEVEL = 'info';\n\n/**\n * 安全地处理响应头值，移除无效字符\n *\n * @param headerValue 原始响应头值或值数组\n * @returns 处理后的安全响应头值\n */\nexport function getSafeHeaderValue(headerValue: string | string[]): string {\n  try {\n    if (Array.isArray(headerValue)) {\n      // 如果是数组，处理每个元素并用 | 连接\n      return headerValue\n        .map(item => item.replace(/[\\r\\n\\t]/g, ' ').replace(/[^\\x20-\\x7E]/g, ''))\n        .join(' | ');\n    } else {\n      // 如果是字符串，直接处理\n      return headerValue.replace(/[\\r\\n\\t]/g, ' ').replace(/[^\\x20-\\x7E]/g, '');\n    }\n  } catch (error) {\n    // 如果处理过程中出错，返回一个安全的默认值\n    return 'Error processing header value';\n  }\n}\n\n/**\n * 获取环境变量值，如果不存在则使用默认值\n *\n * @param key 环境变量名\n * @param defaultValue 默认值\n * @returns 环境变量值或默认值\n */\nexport function getEnvOrDefault(key: string, defaultValue: string): string {\n  return process.env[key] || defaultValue;\n}\n\n/**\n * 获取环境变量的布尔值\n *\n * @param key 环境变量名\n * @param defaultValue 默认值\n * @returns 布尔值\n */\nexport function getBooleanEnv(key: string, defaultValue: boolean): boolean {\n  const value = process.env[key];\n  if (value === undefined) {\n    return defaultValue;\n  }\n  return value.toLowerCase() === 'true';\n}\n\n/**\n * 获取环境变量的数字值\n *\n * @param key 环境变量名\n * @param defaultValue 默认值\n * @returns 数字值\n */\nexport function getNumberEnv(key: string, defaultValue: number): number {\n  const value = process.env[key];\n  if (value === undefined) {\n    return defaultValue;\n  }\n  const parsed = parseInt(value, 10);\n  return isNaN(parsed) ? defaultValue : parsed;\n}\n"],"mappings":";AASO,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAC/B,IAAM,0BAA0B;AAGhC,IAAM,kCAAkC;AACxC,IAAM,4BAA4B;AAGlC,IAAM,uBAAuB;AAC7B,IAAM,kBAAkB;AACxB,IAAM,eAAe;AACrB,IAAM,eAAe;AAGrB,IAAM,6BAA6B;AACnC,IAAM,6BAA6B;AACnC,IAAM,uBAAuB;AAC7B,IAAM,8BAA8B;AAGpC,IAAM,oBAAoB;AAC1B,IAAM,uBAAuB;AAC7B,IAAM,0BAA0B;AAGhC,IAAM,oBAAoB;AAC1B,IAAM,qBAAqB;AAG3B,IAAM,6BAA6B;AACnC,IAAM,oCAAoC;AAG1C,IAAM,oBAAoB;AAQ1B,SAAS,mBAAmB,aAAwC;AACzE,MAAI;AACF,QAAI,MAAM,QAAQ,WAAW,GAAG;AAE9B,aAAO,YACJ,IAAI,UAAQ,KAAK,QAAQ,aAAa,GAAG,EAAE,QAAQ,iBAAiB,EAAE,CAAC,EACvE,KAAK,KAAK;AAAA,IACf,OAAO;AAEL,aAAO,YAAY,QAAQ,aAAa,GAAG,EAAE,QAAQ,iBAAiB,EAAE;AAAA,IAC1E;AAAA,EACF,SAAS,OAAO;AAEd,WAAO;AAAA,EACT;AACF;AASO,SAAS,gBAAgB,KAAa,cAA8B;AACzE,SAAO,QAAQ,IAAI,GAAG,KAAK;AAC7B;AASO,SAAS,cAAc,KAAa,cAAgC;AACzE,QAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AACA,SAAO,MAAM,YAAY,MAAM;AACjC;AASO,SAAS,aAAa,KAAa,cAA8B;AACtE,QAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AACA,QAAM,SAAS,SAAS,OAAO,EAAE;AACjC,SAAO,MAAM,MAAM,IAAI,eAAe;AACxC;","names":[]}