{"version":3,"sources":["../../src/utils/normalize-request-args.ts"],"sourcesContent":["import { CoolhandRequestOptions } from '../types.js';\n\nfunction urlToOptions(url: string | URL): CoolhandRequestOptions {\n  const parsed = typeof url === 'string' ? new URL(url) : url;\n  const hostname = parsed.hostname.startsWith('[') && parsed.hostname.endsWith(']')\n    ? parsed.hostname.slice(1, -1)\n    : parsed.hostname;\n\n  const options: CoolhandRequestOptions = {\n    hostname,\n    path: `${parsed.pathname}${parsed.search}`,\n  };\n  if (parsed.port) {\n    options.port = Number(parsed.port);\n  }\n  if (parsed.username || parsed.password) {\n    options.auth = `${decodeURIComponent(parsed.username)}:${decodeURIComponent(parsed.password)}`;\n  }\n  return options;\n}\n\nexport interface NormalizedRequestArgs<TCallback> {\n  options: CoolhandRequestOptions | string | URL;\n  callback?: TCallback;\n}\n\n/**\n * Normalizes http(s).request/get's two call shapes — (options[, callback])\n * and (url[, options][, callback]) — into a single {options, callback} pair,\n * mirroring Node's own _normalizeArgs. Deliberately omits `href` from the\n * merged options so buildURL's hostname/port/path reconstruction reflects\n * any override in the options argument.\n */\n// TCallback is intentionally `any`-bounded: callers pass differently-typed Node response\n// callbacks (`(res: any) => void` from global-monitor.ts vs `(res: http.IncomingMessage) => void`\n// from RequestMonitoringService.ts), and this helper only forwards the callback, never inspects it.\nexport function normalizeRequestArgs<TCallback extends (...args: any[]) => any>(\n  urlOrOptions: CoolhandRequestOptions | string | URL,\n  optionsOrCallback?: CoolhandRequestOptions | TCallback,\n  callback?: TCallback\n): NormalizedRequestArgs<TCallback> {\n  if (typeof optionsOrCallback === 'function') {\n    return { options: urlOrOptions, callback: optionsOrCallback };\n  }\n\n  if (optionsOrCallback && typeof optionsOrCallback === 'object' &&\n      (typeof urlOrOptions === 'string' || urlOrOptions instanceof URL)) {\n    return {\n      options: { ...urlToOptions(urlOrOptions), ...optionsOrCallback },\n      callback\n    };\n  }\n\n  return { options: urlOrOptions, callback };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,SAAS,aAAa,KAA2C;AAC/D,QAAM,SAAS,OAAO,QAAQ,WAAW,IAAI,IAAI,GAAG,IAAI;AACxD,QAAM,WAAW,OAAO,SAAS,WAAW,GAAG,KAAK,OAAO,SAAS,SAAS,GAAG,IAC5E,OAAO,SAAS,MAAM,GAAG,EAAE,IAC3B,OAAO;AAEX,QAAM,UAAkC;AAAA,IACtC;AAAA,IACA,MAAM,GAAG,OAAO,QAAQ,GAAG,OAAO,MAAM;AAAA,EAC1C;AACA,MAAI,OAAO,MAAM;AACf,YAAQ,OAAO,OAAO,OAAO,IAAI;AAAA,EACnC;AACA,MAAI,OAAO,YAAY,OAAO,UAAU;AACtC,YAAQ,OAAO,GAAG,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,QAAQ,CAAC;AAAA,EAC9F;AACA,SAAO;AACT;AAiBO,SAAS,qBACd,cACA,mBACA,UACkC;AAClC,MAAI,OAAO,sBAAsB,YAAY;AAC3C,WAAO,EAAE,SAAS,cAAc,UAAU,kBAAkB;AAAA,EAC9D;AAEA,MAAI,qBAAqB,OAAO,sBAAsB,aACjD,OAAO,iBAAiB,YAAY,wBAAwB,MAAM;AACrE,WAAO;AAAA,MACL,SAAS,EAAE,GAAG,aAAa,YAAY,GAAG,GAAG,kBAAkB;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,cAAc,SAAS;AAC3C;","names":[]}