{"version":3,"file":"index.mjs","names":["overrides: BaseUrlMap","keys: string[]","local: BaseUrlMap"],"sources":["../src/core.ts","../src/adapters.ts","../src/index.ts"],"sourcesContent":["import type { BaseUrlMap } from \"./types\"\n\n// In-memory overrides for the global API\nlet overrides: BaseUrlMap = {}\n\nexport const normalizeBase = (url: string): string => {\n  if (!url) return \"\"\n  // Keep protocol intact (https://, file:, etc.), just trim trailing slashes\n  // but preserve protocol double slash when base is exactly scheme://\n  // e.g., \"https://\" should remain \"https://\" and not \"https:/\"\n  const m = url.match(/^[a-zA-Z][a-zA-Z0-9+.-]*:\\/\\/$/)\n  if (m) return url\n  return url.replace(/\\/+$/g, \"\")\n}\n\nconst safeAccess = <T>(fn: () => T): T | undefined => {\n  try {\n    return fn()\n  } catch {\n    return undefined\n  }\n}\n\nexport const envGet = (name: string): string | undefined => {\n  // Node.js\n  const node = safeAccess(() => (globalThis as any).process?.env?.[name])\n  if (typeof node === \"string\" && node) return node\n  // Bun\n  const bun = safeAccess(() => (globalThis as any).Bun?.env?.[name])\n  if (typeof bun === \"string\" && bun) return bun\n  // Deno (requires permission; if not granted, will throw and be caught)\n  const deno = safeAccess(() => (globalThis as any).Deno?.env?.get?.(name))\n  if (typeof deno === \"string\" && deno) return deno\n  return undefined\n}\n\nconst sanitizeServiceName = (name: string): string =>\n  name\n    .trim()\n    .replace(/[^a-zA-Z0-9]/g, \"_\")\n    .replace(/_+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\")\n    .toUpperCase()\n\nexport const toEnvKey = (name: string): string =>\n  `${sanitizeServiceName(name)}_BASE_URL`\n\nexport const readFromGlobals = (key: string): string | undefined => {\n  const map = (globalThis as any).__KAZVIZIAN_BASE_URLS__ as\n    | BaseUrlMap\n    | undefined\n  if (map && typeof map[key] === \"string\" && map[key]) return map[key]\n  return undefined\n}\n\nexport const setOverride = (key: string, value?: string) => {\n  if (!value) {\n    delete overrides[key]\n  } else {\n    overrides[key] = normalizeBase(value)\n  }\n}\n\nexport const getOverride = (key: string): string | undefined => overrides[key]\n\nexport const resolveBaseUrl = (options: {\n  name?: string // undefined or \"default\"\n  preferred?: string\n}): string => {\n  const name = options.name ?? \"default\"\n  const preferred = options.preferred\n\n  // 1. preferred\n  if (preferred && typeof preferred === \"string\")\n    return normalizeBase(preferred)\n\n  // 2. in-memory override\n  const o = getOverride(name)\n  if (o) return o\n\n  // 3. global map\n  const fromGlobal = readFromGlobals(name)\n  if (fromGlobal) return normalizeBase(fromGlobal)\n\n  // 4. env vars\n  const keys: string[] = []\n  if (name !== \"default\") keys.push(toEnvKey(name))\n  keys.push(\"KAZVIZIAN_BASE_URL\", \"BASE_URL\")\n  for (const k of keys) {\n    const v = envGet(k)\n    if (v) return normalizeBase(v)\n  }\n\n  // 5. no adapter in core\n\n  // 6. fallback\n  return \"\"\n}\n\nexport const buildUrl = (base: string, ...parts: string[]): string => {\n  const b = normalizeBase(base)\n  const cleanedParts = parts\n    .filter((p) => p != null && p !== \"\")\n    .map((p) => String(p))\n    .map((p) => p.replace(/^\\/+|\\/+$/g, \"\"))\n    .filter((p) => p.length > 0)\n\n  if (!b) return cleanedParts.join(\"/\")\n\n  // Handle protocol separators correctly\n  if (/^[a-zA-Z][a-zA-Z0-9+.-]*:\\/\\/$/.test(b)) {\n    return b + cleanedParts.join(\"/\")\n  }\n  return [b, ...cleanedParts].join(\"/\")\n}\n\nexport const createBaseUrlManager = (initial?: BaseUrlMap) => {\n  let local: BaseUrlMap = {}\n  if (initial) {\n    for (const [k, v] of Object.entries(initial)) local[k] = normalizeBase(v)\n  }\n\n  const get = (preferred?: string) => {\n    if (preferred) return normalizeBase(preferred)\n    if (local[\"default\"]) return local[\"default\"]\n    return resolveBaseUrl({ name: \"default\" })\n  }\n\n  const set = (url?: string) => {\n    if (!url) delete local[\"default\"]\n    else local[\"default\"] = normalizeBase(url)\n  }\n\n  const getFor = (name: string, preferred?: string) => {\n    if (preferred) return normalizeBase(preferred)\n    if (local[name]) return local[name]\n    return resolveBaseUrl({ name })\n  }\n\n  const setFor = (name: string, url?: string) => {\n    if (!url) delete local[name]\n    else local[name] = normalizeBase(url)\n  }\n\n  return {\n    getBaseUrl: get,\n    setBaseUrl: set,\n    getBaseUrlFor: getFor,\n    setBaseUrlFor: setFor\n  } as const\n}\n","import { normalizeBase, setOverride } from \"./core\"\n\nexport type ImportMetaEnvLike = Record<string, unknown> | undefined | null\n\nconst DEFAULT_KEYS = [\n  \"KAZVIZIAN_BASE_URL\",\n  \"VITE_BASE_URL\",\n  \"NEXT_PUBLIC_BASE_URL\",\n  \"BASE_URL\"\n]\n\nexport const setBaseUrlFromImportMetaEnv = (\n  env: ImportMetaEnvLike,\n  options?: { name?: string; keys?: string[] }\n) => {\n  if (!env || typeof env !== \"object\") return\n  const name = options?.name ?? \"default\"\n  const keys =\n    options?.keys && options.keys.length ? options.keys : DEFAULT_KEYS\n  for (const k of keys) {\n    const val = env[k as keyof typeof env]\n    if (typeof val === \"string\" && val) {\n      setOverride(name, normalizeBase(val))\n      return\n    }\n  }\n}\n","import type { BaseUrlMap, ServiceName } from \"./types\"\nimport {\n  buildUrl,\n  createBaseUrlManager,\n  getOverride,\n  normalizeBase,\n  resolveBaseUrl,\n  setOverride\n} from \"./core\"\nexport type { BaseUrlMap, ServiceName } from \"./types\"\nexport { buildUrl, createBaseUrlManager }\nexport { setBaseUrlFromImportMetaEnv } from \"./adapters\"\n\nexport const setBaseUrl = (url?: string): void => setOverride(\"default\", url)\n\nexport const getBaseUrl = (preferred?: string): string =>\n  resolveBaseUrl({ preferred, name: \"default\" })\n\nexport const setBaseUrlFor = (name: ServiceName, url?: string): void =>\n  setOverride(name, url)\n\nexport const getBaseUrlFor = (name: ServiceName, preferred?: string): string =>\n  resolveBaseUrl({ name, preferred })\n\n// For advanced users: access to normalized override (read-only)\nexport const __debug_getOverride = (name: ServiceName = \"default\") =>\n  getOverride(name)\n"],"mappings":"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"}