{"version":3,"sources":["../src/sources/cdragon.ts","../src/sources/release.ts","../src/loaders/http.ts","../src/sources/ddragon.ts","../src/transforms/paths.ts","../src/transforms/loot.ts","../src/transforms/cosmetics.ts","../src/helpers/substitute.ts","../src/transforms/champions.ts","../src/transforms/skins.ts","../src/transforms/added.ts","../src/loaders/category.ts","../src/client.ts","../src/catalog.ts","../src/helpers/split-skin-id.ts","../src/types/skins.ts","../src/helpers/rarity.ts"],"names":["url","RarityEnum","SkinType"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AssetCategory, Lang, Patch } from \"../types/common.js\";\n\nexport const CDRAGON = \"https://raw.communitydragon.org\";\n\nexport const TENCENT_PROFILE_ICON_CDN =\n  \"https://dlied1.qq.com/lolapp/lol/summoner/profileicon/\";\n\n/** CDragon filename for a category (under global/{lang}/v1/). */\nexport const CATEGORY_CDRAGON_FILE: Partial<Record<AssetCategory, string>> = {\n  \"summoner-icons\": \"summoner-icons.json\",\n  \"summoner-icon-sets\": \"summoner-icon-sets.json\",\n  \"summoner-emotes\": \"summoner-emotes.json\",\n  \"ward-skins\": \"ward-skins.json\",\n  \"ward-skin-sets\": \"ward-skin-sets.json\",\n  loot: \"loot.json\",\n  champions: \"champion-summary.json\",\n  skinlines: \"skinlines.json\",\n  universes: \"universes.json\",\n  skins: \"skins.json\",\n};\n\nexport function dataRoot(opts: { patch?: Patch; lang?: Lang } = {}): string {\n  const patch = opts.patch ?? \"latest\";\n  const lang = opts.lang ?? \"default\";\n  return `${CDRAGON}/${patch}/plugins/rcp-be-lol-game-data/global/${lang}`;\n}\n\nexport function cdragonDataUrl(opts: {\n  category: AssetCategory;\n  lang?: Lang;\n  patch?: Patch;\n}): string {\n  const file = CATEGORY_CDRAGON_FILE[opts.category];\n  if (!file) {\n    throw new Error(\n      `Category \"${opts.category}\" is not loaded from CDragon v1 JSON`,\n    );\n  }\n  return `${dataRoot({ patch: opts.patch, lang: opts.lang })}/v1/${file}`;\n}\n\n/** Default patch preference by domain when using live CDragon. */\nexport function defaultPatchForCategory(category: AssetCategory): Patch {\n  switch (category) {\n    case \"champions\":\n    case \"skinlines\":\n    case \"universes\":\n    case \"skins\":\n    case \"added\":\n      return \"pbe\";\n    default:\n      return \"latest\";\n  }\n}\n","import type { AssetCategory, Lang } from \"../types/common.js\";\n\n/**\n * Default GitHub Releases download base (latest data release).\n * Assets are flat: `{lang}__{category}.json` e.g. `zh_cn__summoner-icons.json`.\n */\nexport const DEFAULT_RELEASE_BASE =\n  \"https://github.com/league-fan/league-fan-assets/releases/latest/download\";\n\nexport function releaseBaseUrl(opts?: {\n  baseUrl?: string;\n  version?: string;\n}): string {\n  if (opts?.baseUrl) {\n    return opts.baseUrl.replace(/\\/$/, \"\");\n  }\n  if (opts?.version) {\n    const ver = opts.version.startsWith(\"data-v\")\n      ? opts.version\n      : `data-v${opts.version}`;\n    return `https://github.com/league-fan/league-fan-assets/releases/download/${ver}`;\n  }\n  return DEFAULT_RELEASE_BASE;\n}\n\n/** Flatten path for GitHub Release asset names. */\nexport function releaseAssetName(relPath: string): string {\n  return relPath.replace(/\\//g, \"__\");\n}\n\nexport function releaseDataUrl(opts: {\n  category: AssetCategory;\n  lang?: Lang;\n  version?: string;\n  baseUrl?: string;\n}): string {\n  const base = releaseBaseUrl({\n    baseUrl: opts.baseUrl,\n    version: opts.version,\n  });\n  if (opts.category === \"version\") {\n    return `${base}/${releaseAssetName(\"version.json\")}`;\n  }\n  if (opts.category === \"added\") {\n    return `${base}/${releaseAssetName(\"default/added.json\")}`;\n  }\n  const lang = opts.lang ?? \"default\";\n  return `${base}/${releaseAssetName(`${lang}/${opts.category}.json`)}`;\n}\n\nexport function releaseManifestUrl(opts?: {\n  baseUrl?: string;\n  version?: string;\n}): string {\n  return `${releaseBaseUrl(opts)}/${releaseAssetName(\"manifest.json\")}`;\n}\n","export class FetchError extends Error {\n  readonly status: number;\n  readonly url: string;\n\n  constructor(url: string, status: number, statusText: string) {\n    super(`HTTP ${status} ${statusText} for ${url}`);\n    this.name = \"FetchError\";\n    this.status = status;\n    this.url = url;\n  }\n}\n\nexport async function fetchJson<T>(\n  url: string,\n  opts?: { fetch?: typeof globalThis.fetch },\n): Promise<T> {\n  const fetchImpl = opts?.fetch ?? globalThis.fetch;\n  if (!fetchImpl) {\n    throw new Error(\"No fetch implementation available\");\n  }\n  const res = await fetchImpl(url);\n  if (!res.ok) {\n    throw new FetchError(url, res.status, res.statusText);\n  }\n  return (await res.json()) as T;\n}\n","import type { VersionInfo } from \"../types/version.js\";\nimport { fetchJson } from \"../loaders/http.js\";\n\nexport const DDRAGON_REALM_TENCENT =\n  \"https://ddragon.leagueoflegends.com/realms/tencent.json\";\n\nexport const DDRAGON_REALM_NA =\n  \"https://ddragon.leagueoflegends.com/realms/na.json\";\n\nexport async function getGameVersion(opts?: {\n  fetch?: typeof globalThis.fetch;\n  realmUrl?: string;\n}): Promise<string> {\n  const info = await getVersionInfo(opts);\n  return info.v;\n}\n\nexport async function getVersionInfo(opts?: {\n  fetch?: typeof globalThis.fetch;\n  realmUrl?: string;\n}): Promise<VersionInfo> {\n  const url = opts?.realmUrl ?? DDRAGON_REALM_TENCENT;\n  return fetchJson<VersionInfo>(url, { fetch: opts?.fetch });\n}\n","import type { AssetCategory, Lang, Patch } from \"../types/common.js\";\nimport {\n  dataRoot,\n  TENCENT_PROFILE_ICON_CDN,\n} from \"../sources/cdragon.js\";\n\nconst GAME_DATA_PREFIX = \"/lol-game-data/assets\";\n\nexport interface AssetUrlOptions {\n  patch?: Patch;\n  /** Text language; image binaries still resolve under global/default. */\n  lang?: Lang;\n  category?: AssetCategory;\n}\n\n/**\n * Resolve a CDragon game-data path (or passthrough absolute URL) to HTTPS.\n * Mirrors historical league-fan-assets + feat-nextjs behavior.\n */\nexport function assetUrl(\n  path: string | null | undefined,\n  opts: AssetUrlOptions = {},\n): string {\n  if (path == null || path === \"\") return \"\";\n  if (/^https?:\\/\\//i.test(path)) return path;\n\n  const patch = opts.patch ?? \"latest\";\n\n  // zh_cn profile icons → Tencent CDN (legacy package behavior)\n  if (\n    opts.category === \"summoner-icons\" &&\n    (opts.lang === \"zh_cn\" || opts.lang === \"zh_CN\")\n  ) {\n    const m = path.match(\n      /\\/lol-game-data\\/assets\\/v1\\/profile-icons\\/([0-9]+\\.(?:jpg|png))/i,\n    );\n    if (m?.[1]) {\n      return `${TENCENT_PROFILE_ICON_CDN}${m[1].toLowerCase()}`;\n    }\n  }\n\n  if (path.startsWith(GAME_DATA_PREFIX)) {\n    const rest = path.slice(GAME_DATA_PREFIX.length).replace(/^\\/+/, \"\");\n    // Image assets live under global/default regardless of text locale\n    return `${dataRoot({ patch, lang: \"default\" })}/${rest.toLowerCase()}`;\n  }\n\n  // Relative-ish paths without prefix\n  if (path.startsWith(\"/\")) {\n    return `${dataRoot({ patch, lang: \"default\" })}${path.toLowerCase()}`;\n  }\n\n  return path;\n}\n\n/** Deep-walk object/array and rewrite string fields that look like game-data paths. */\nexport function rewritePathsDeep<T>(\n  value: T,\n  opts: AssetUrlOptions = {},\n): T {\n  if (value == null) return value;\n  if (typeof value === \"string\") {\n    if (value.includes(GAME_DATA_PREFIX) || value.startsWith(\"/lol-game-data\")) {\n      return assetUrl(value, opts) as T;\n    }\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((v) => rewritePathsDeep(v, opts)) as T;\n  }\n  if (typeof value === \"object\") {\n    const out: Record<string, unknown> = {};\n    for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n      out[k] = rewritePathsDeep(v, opts);\n    }\n    return out as T;\n  }\n  return value;\n}\n","import type { LootItem } from \"../types/cosmetics.js\";\nimport type { Lang, Patch } from \"../types/common.js\";\nimport { assetUrl } from \"./paths.js\";\n\nconst CHEST_ID = /CHEST_[0-9]{1,4}$/;\n\nexport function filterLootChests(\n  raw: unknown,\n  opts: { lang?: Lang; patch?: Patch } = {},\n): LootItem[] {\n  const patch = opts.patch ?? \"latest\";\n  let items: Record<string, unknown>[] = [];\n\n  if (Array.isArray(raw)) {\n    items = raw as Record<string, unknown>[];\n  } else if (raw && typeof raw === \"object\" && \"LootItems\" in raw) {\n    items = (raw as { LootItems: Record<string, unknown>[] }).LootItems ?? [];\n  }\n\n  const filtered = items.filter((el) => {\n    const id = String(el.id ?? \"\");\n    return CHEST_ID.test(id);\n  });\n\n  const mapped: LootItem[] = filtered.map((el) => {\n    const image = assetUrl(String(el.image ?? el.imagePath ?? \"\"), {\n      patch,\n      lang: opts.lang,\n      category: \"loot\",\n    });\n    return {\n      ...el,\n      id: String(el.id),\n      name: String(el.name ?? \"\"),\n      description: String(el.description ?? \"\"),\n      image,\n    } as LootItem;\n  });\n\n  return mapped.sort(\n    (a, b) => (a.mappedStoreId ?? 0) - (b.mappedStoreId ?? 0),\n  );\n}\n","import type {\n  LootItem,\n  SummonerEmote,\n  SummonerIcon,\n  SummonerIconSet,\n  WardSkin,\n  WardSkinSet,\n} from \"../types/cosmetics.js\";\nimport type { Lang, Patch } from \"../types/common.js\";\nimport { assetUrl, rewritePathsDeep } from \"./paths.js\";\nimport { filterLootChests } from \"./loot.js\";\n\nexport interface TransformOpts {\n  lang?: Lang;\n  patch?: Patch;\n}\n\nfunction flattenDescription(\n  item: { descriptions?: { description?: string }[]; description?: string },\n): string {\n  if (item.descriptions?.[0]?.description) {\n    return item.descriptions[0].description;\n  }\n  return item.description ?? \"\";\n}\n\nexport function transformSummonerIcons(\n  raw: unknown[],\n  opts: TransformOpts = {},\n): SummonerIcon[] {\n  const patch = opts.patch ?? \"latest\";\n  const lang = opts.lang ?? \"default\";\n  const list = (raw as Partial<SummonerIcon>[]).map((item) => {\n    const imagePath = assetUrl(item.imagePath ?? \"\", {\n      patch,\n      lang,\n      category: \"summoner-icons\",\n    });\n    return {\n      ...item,\n      id: Number(item.id),\n      title: item.title ?? \"\",\n      imagePath,\n      description: flattenDescription(item as SummonerIcon),\n    } as SummonerIcon;\n  });\n  return list\n    .filter((i) => i.imagePath)\n    .sort((a, b) => b.id - a.id);\n}\n\nexport function transformSummonerIconSets(\n  raw: unknown,\n  opts: TransformOpts = {},\n): SummonerIconSet[] {\n  const data = Array.isArray(raw) ? raw : [];\n  return rewritePathsDeep(data, {\n    patch: opts.patch ?? \"latest\",\n    lang: opts.lang,\n    category: \"summoner-icon-sets\",\n  }) as SummonerIconSet[];\n}\n\nexport function transformSummonerEmotes(\n  raw: unknown[],\n  opts: TransformOpts = {},\n): SummonerEmote[] {\n  const patch = opts.patch ?? \"latest\";\n  return (raw as Partial<SummonerEmote>[]).map((item) => ({\n    ...item,\n    id: Number(item.id),\n    name: item.name ?? \"\",\n    description: item.description ?? \"\",\n    inventoryIcon: assetUrl(item.inventoryIcon ?? \"\", {\n      patch,\n      lang: opts.lang,\n      category: \"summoner-emotes\",\n    }),\n  })) as SummonerEmote[];\n}\n\nexport function transformWardSkins(\n  raw: unknown[],\n  opts: TransformOpts = {},\n): WardSkin[] {\n  const patch = opts.patch ?? \"latest\";\n  return (raw as Partial<WardSkin>[]).map((item) => ({\n    ...item,\n    id: Number(item.id),\n    name: item.name ?? \"\",\n    description: item.description ?? \"\",\n    wardImagePath: assetUrl(item.wardImagePath ?? \"\", {\n      patch,\n      lang: opts.lang,\n      category: \"ward-skins\",\n    }),\n    wardShadowImagePath: assetUrl(item.wardShadowImagePath ?? \"\", {\n      patch,\n      lang: opts.lang,\n      category: \"ward-skins\",\n    }),\n  })) as WardSkin[];\n}\n\nexport function transformWardSkinSets(\n  raw: unknown,\n  opts: TransformOpts = {},\n): WardSkinSet[] {\n  const data = Array.isArray(raw) ? raw : [];\n  return rewritePathsDeep(data, {\n    patch: opts.patch ?? \"latest\",\n    lang: opts.lang,\n    category: \"ward-skin-sets\",\n  }) as WardSkinSet[];\n}\n\nexport function transformLoot(\n  raw: unknown,\n  opts: TransformOpts = {},\n): LootItem[] {\n  return filterLootChests(raw, opts);\n}\n","/** Champion alias substitutions used by community tools / wiki. */\nexport const ALIAS_SUBSTITUTIONS: Record<string, string> = {\n  monkeyking: \"wukong\",\n};\n\nexport function substitute(\n  value: string,\n  sets: Record<string, string> = ALIAS_SUBSTITUTIONS,\n): string {\n  return sets[value] ?? value;\n}\n","import type { Champion } from \"../types/champion.js\";\nimport type { Lang, Patch } from \"../types/common.js\";\nimport { substitute } from \"../helpers/substitute.js\";\nimport { assetUrl } from \"./paths.js\";\n\nexport function transformChampions(\n  raw: unknown[],\n  opts: { lang?: Lang; patch?: Patch } = {},\n): Champion[] {\n  const patch = opts.patch ?? \"pbe\";\n  return (raw as Partial<Champion>[])\n    .filter((d) => d.id !== -1 && d.id != null)\n    .map((a) => {\n      const alias = a.alias ?? \"\";\n      return {\n        id: Number(a.id),\n        name: a.name ?? \"\",\n        alias,\n        squarePortraitPath: assetUrl(a.squarePortraitPath ?? \"\", {\n          patch,\n          lang: opts.lang,\n          category: \"champions\",\n        }),\n        roles: a.roles ?? [],\n        key: substitute(alias.toLowerCase()),\n      } satisfies Champion;\n    })\n    .sort((a, b) => (a.name > b.name ? 1 : -1));\n}\n","import type { Skin, Skins } from \"../types/skins.js\";\nimport type { Skinline } from \"../types/skinline.js\";\nimport type { Universe } from \"../types/universe.js\";\nimport type { Lang, Patch } from \"../types/common.js\";\nimport { assetUrl, rewritePathsDeep } from \"./paths.js\";\n\nexport interface SkinTransformOpts {\n  lang?: Lang;\n  patch?: Patch;\n  /** Prefix base skins with \"Original \" (default true for default/en). */\n  originalPrefix?: boolean;\n}\n\nconst PATH_KEYS = [\n  \"splashPath\",\n  \"uncenteredSplashPath\",\n  \"tilePath\",\n  \"loadScreenPath\",\n  \"loadScreenVintagePath\",\n  \"chromaPath\",\n  \"splashVideoPath\",\n  \"collectionSplashVideoPath\",\n  \"collectionCardHoverVideoPath\",\n  \"rarityGemPath\",\n] as const;\n\nfunction absolutizeSkinPaths(\n  skin: Skin,\n  opts: { patch: Patch; lang?: Lang },\n): Skin {\n  const next = { ...skin } as Skin;\n  for (const key of PATH_KEYS) {\n    const val = next[key];\n    if (typeof val === \"string\" && val) {\n      (next as Record<string, unknown>)[key] = assetUrl(val, {\n        patch: opts.patch,\n        lang: opts.lang,\n        category: \"skins\",\n      });\n    }\n  }\n  if (next.chromas?.length) {\n    next.chromas = next.chromas.map((c) => ({\n      ...c,\n      chromaPath: assetUrl(c.chromaPath, {\n        patch: opts.patch,\n        lang: opts.lang,\n        category: \"skins\",\n      }),\n    }));\n  }\n  if (next.emblems?.length) {\n    next.emblems = next.emblems.map((e) => ({\n      ...e,\n      emblemPath: {\n        large: assetUrl(e.emblemPath?.large, {\n          patch: opts.patch,\n          lang: opts.lang,\n          category: \"skins\",\n        }),\n        small: assetUrl(e.emblemPath?.small, {\n          patch: opts.patch,\n          lang: opts.lang,\n          category: \"skins\",\n        }),\n      },\n    }));\n  }\n  // Augment / border paths\n  if (next.skinAugments) {\n    next.skinAugments = rewritePathsDeep(next.skinAugments, {\n      patch: opts.patch,\n      lang: opts.lang,\n      category: \"skins\",\n    });\n  }\n  return next;\n}\n\n/**\n * Expand quest skin tiers into individual skin entries and normalize paths.\n * Port of feat-nextjs scraper getLatestSkins.\n */\nexport function transformSkins(\n  raw: Skins | Record<string, Skin>,\n  opts: SkinTransformOpts = {},\n): Skins {\n  const patch = opts.patch ?? \"pbe\";\n  const originalPrefix = opts.originalPrefix ?? true;\n  const data: Skins = { ...raw };\n\n  for (const id of Object.keys(data)) {\n    const skin = data[id];\n    if (!skin) continue;\n\n    if (skin.isBase && originalPrefix && !skin.name.startsWith(\"Original \")) {\n      skin.name = \"Original \" + skin.name;\n    }\n\n    if (skin.questSkinInfo?.tiers?.length) {\n      const base = { ...skin };\n      delete base.questSkinInfo;\n      for (const tier of skin.questSkinInfo.tiers) {\n        const merged = { ...base, ...tier } as Skin;\n        data[String(merged.id)] = absolutizeSkinPaths(merged, {\n          patch,\n          lang: opts.lang,\n        });\n      }\n    }\n\n    data[id] = absolutizeSkinPaths(skin, { patch, lang: opts.lang });\n  }\n\n  return data;\n}\n\nexport function transformSkinlines(\n  raw: unknown[],\n  _opts: SkinTransformOpts = {},\n): Skinline[] {\n  return (raw as Skinline[])\n    .filter((d) => d.id !== 0)\n    .map((d) => ({\n      id: d.id,\n      name: d.name ?? \"\",\n      description: d.description ?? \"\",\n    }))\n    .sort((a, b) => (a.name > b.name ? 1 : -1));\n}\n\nexport function transformUniverses(\n  raw: unknown[],\n  opts: SkinTransformOpts = {},\n): Universe[] {\n  const patch = opts.patch ?? \"pbe\";\n  return (raw as Partial<Universe>[])\n    .filter((d) => d.id !== 0 && d.id != null)\n    .map((d) => ({\n      id: Number(d.id),\n      name: d.name ?? \"\",\n      description: d.description ?? \"\",\n      imagePath: assetUrl(d.imagePath ?? \"\", {\n        patch,\n        lang: opts.lang,\n        category: \"universes\",\n      }),\n      skinSets: d.skinSets ?? [],\n    }))\n    .sort((a, b) => (a.name > b.name ? 1 : -1));\n}\n","import type { Added } from \"../types/added.js\";\nimport type { Champion } from \"../types/champion.js\";\nimport type { Skinline } from \"../types/skinline.js\";\nimport type { Skins } from \"../types/skins.js\";\nimport type { Universe } from \"../types/universe.js\";\n\nexport function computeAdded(opts: {\n  current: {\n    champions: Champion[];\n    skinlines: Skinline[];\n    skins: Skins;\n    universes: Universe[];\n  };\n  previous: {\n    champions: Champion[];\n    skinlines: Skinline[];\n    skins: Skins;\n    universes: Universe[];\n  };\n}): Added {\n  const oldSkinIds = new Set(Object.keys(opts.previous.skins));\n  const oldChampionIds = new Set(opts.previous.champions.map((c) => c.id));\n  const oldSkinlineIds = new Set(opts.previous.skinlines.map((l) => l.id));\n  const oldUniverseIds = new Set(opts.previous.universes.map((u) => u.id));\n\n  return {\n    skins: Object.keys(opts.current.skins).filter((i) => !oldSkinIds.has(i)),\n    champions: opts.current.champions\n      .map((c) => c.id)\n      .filter((i) => !oldChampionIds.has(i)),\n    skinlines: opts.current.skinlines\n      .map((l) => l.id)\n      .filter((i) => !oldSkinlineIds.has(i)),\n    universes: opts.current.universes\n      .map((u) => u.id)\n      .filter((i) => !oldUniverseIds.has(i)),\n  };\n}\n","import type { AssetCategory, Lang, Patch } from \"../types/common.js\";\nimport type { CategoryDataMap } from \"../types/index.js\";\nimport type { Skins } from \"../types/skins.js\";\nimport {\n  cdragonDataUrl,\n  defaultPatchForCategory,\n} from \"../sources/cdragon.js\";\nimport { releaseDataUrl } from \"../sources/release.js\";\nimport { getVersionInfo } from \"../sources/ddragon.js\";\nimport { fetchJson } from \"./http.js\";\nimport {\n  transformChampions,\n  transformLoot,\n  transformSkinlines,\n  transformSkins,\n  transformSummonerEmotes,\n  transformSummonerIconSets,\n  transformSummonerIcons,\n  transformUniverses,\n  transformWardSkinSets,\n  transformWardSkins,\n} from \"../transforms/index.js\";\n\nexport type DataSource =\n  | { kind: \"cdragon\"; patch?: Patch }\n  | { kind: \"release\"; baseUrl?: string; version?: string };\n\nexport interface LoadOptions {\n  lang?: Lang;\n  source?: DataSource;\n  fetch?: typeof globalThis.fetch;\n  /** Override patch for transforms when source is release. */\n  patch?: Patch;\n}\n\nfunction resolvePatch(\n  category: AssetCategory,\n  source: DataSource,\n  explicit?: Patch,\n): Patch {\n  if (explicit) return explicit;\n  if (source.kind === \"cdragon\") {\n    return source.patch ?? defaultPatchForCategory(category);\n  }\n  // Release snapshots are version-pinned; image CDN uses latest by default\n  return defaultPatchForCategory(category);\n}\n\nexport async function loadCategory<C extends AssetCategory>(\n  category: C,\n  opts: LoadOptions = {},\n): Promise<CategoryDataMap[C]> {\n  const lang = opts.lang ?? \"default\";\n  const source: DataSource = opts.source ?? { kind: \"cdragon\" };\n  const patch = resolvePatch(category, source, opts.patch);\n  const fetchOpt = { fetch: opts.fetch };\n\n  if (category === \"version\") {\n    if (source.kind === \"release\") {\n      const url = releaseDataUrl({\n        category: \"version\",\n        baseUrl: source.baseUrl,\n        version: source.version,\n      });\n      return (await fetchJson(url, fetchOpt)) as CategoryDataMap[C];\n    }\n    return (await getVersionInfo(fetchOpt)) as CategoryDataMap[C];\n  }\n\n  if (category === \"added\") {\n    if (source.kind === \"release\") {\n      const url = releaseDataUrl({\n        category: \"added\",\n        baseUrl: source.baseUrl,\n        version: source.version,\n      });\n      return (await fetchJson(url, fetchOpt)) as CategoryDataMap[C];\n    }\n    throw new Error(\n      'Category \"added\" requires source: { kind: \"release\" } or precomputed data from build-data',\n    );\n  }\n\n  let raw: unknown;\n  if (source.kind === \"release\") {\n    const url = releaseDataUrl({\n      category,\n      lang,\n      baseUrl: source.baseUrl,\n      version: source.version,\n    });\n    raw = await fetchJson(url, fetchOpt);\n    // Release JSON is already transformed; return as-is\n    return raw as CategoryDataMap[C];\n  }\n\n  const url = cdragonDataUrl({ category, lang, patch });\n  raw = await fetchJson(url, fetchOpt);\n\n  const tOpts = { lang, patch };\n  switch (category) {\n    case \"summoner-icons\":\n      return transformSummonerIcons(raw as unknown[], tOpts) as CategoryDataMap[C];\n    case \"summoner-icon-sets\":\n      return transformSummonerIconSets(raw, tOpts) as CategoryDataMap[C];\n    case \"summoner-emotes\":\n      return transformSummonerEmotes(raw as unknown[], tOpts) as CategoryDataMap[C];\n    case \"ward-skins\":\n      return transformWardSkins(raw as unknown[], tOpts) as CategoryDataMap[C];\n    case \"ward-skin-sets\":\n      return transformWardSkinSets(raw, tOpts) as CategoryDataMap[C];\n    case \"loot\":\n      return transformLoot(raw, tOpts) as CategoryDataMap[C];\n    case \"champions\":\n      return transformChampions(raw as unknown[], tOpts) as CategoryDataMap[C];\n    case \"skinlines\":\n      return transformSkinlines(raw as unknown[], tOpts) as CategoryDataMap[C];\n    case \"universes\":\n      return transformUniverses(raw as unknown[], tOpts) as CategoryDataMap[C];\n    case \"skins\":\n      return transformSkins(raw as Skins, tOpts) as CategoryDataMap[C];\n    default:\n      throw new Error(`Unsupported category: ${category}`);\n  }\n}\n","import type { Lang, Patch, AssetCategory } from \"./types/common.js\";\nimport type {\n  CategoryDataMap,\n  SummonerIcon,\n  SummonerIconSet,\n  SummonerEmote,\n  WardSkin,\n  WardSkinSet,\n  LootItem,\n  Champion,\n  Skinline,\n  Universe,\n  Skins,\n  Added,\n  VersionInfo,\n} from \"./types/index.js\";\nimport { loadCategory, type DataSource, type LoadOptions } from \"./loaders/category.js\";\n\nexport interface ClientOptions {\n  lang?: Lang;\n  source?: DataSource;\n  fetch?: typeof globalThis.fetch;\n  /** Default patch override for CDragon loads / path rewriting. */\n  patch?: Patch;\n}\n\nexport interface LeagueFanAssetsClient {\n  readonly lang: Lang;\n  readonly source: DataSource;\n  load<C extends AssetCategory>(category: C): Promise<CategoryDataMap[C]>;\n  summonerIcons(): Promise<SummonerIcon[]>;\n  summonerIconSets(): Promise<SummonerIconSet[]>;\n  summonerEmotes(): Promise<SummonerEmote[]>;\n  wardSkins(): Promise<WardSkin[]>;\n  wardSkinSets(): Promise<WardSkinSet[]>;\n  loot(): Promise<LootItem[]>;\n  champions(): Promise<Champion[]>;\n  skinlines(): Promise<Skinline[]>;\n  universes(): Promise<Universe[]>;\n  skins(): Promise<Skins>;\n  added(): Promise<Added>;\n  version(): Promise<VersionInfo>;\n}\n\nexport function createClient(options: ClientOptions = {}): LeagueFanAssetsClient {\n  const lang = options.lang ?? \"default\";\n  const source: DataSource = options.source ?? { kind: \"cdragon\" };\n  const base: LoadOptions = {\n    lang,\n    source,\n    fetch: options.fetch,\n    patch: options.patch,\n  };\n\n  const load = <C extends AssetCategory>(category: C) =>\n    loadCategory(category, base);\n\n  return {\n    lang,\n    source,\n    load,\n    summonerIcons: () => load(\"summoner-icons\"),\n    summonerIconSets: () => load(\"summoner-icon-sets\"),\n    summonerEmotes: () => load(\"summoner-emotes\"),\n    wardSkins: () => load(\"ward-skins\"),\n    wardSkinSets: () => load(\"ward-skin-sets\"),\n    loot: () => load(\"loot\"),\n    champions: () => load(\"champions\"),\n    skinlines: () => load(\"skinlines\"),\n    universes: () => load(\"universes\"),\n    skins: () => load(\"skins\"),\n    added: () => load(\"added\"),\n    version: () => load(\"version\"),\n  };\n}\n\nexport type { DataSource, LoadOptions };\n","import type { AssetCategory } from \"./types/common.js\";\n\nexport const ASSET_CATEGORIES = [\n  \"summoner-icons\",\n  \"summoner-icon-sets\",\n  \"summoner-emotes\",\n  \"ward-skins\",\n  \"ward-skin-sets\",\n  \"loot\",\n  \"champions\",\n  \"skinlines\",\n  \"universes\",\n  \"skins\",\n  \"added\",\n  \"version\",\n] as const satisfies readonly AssetCategory[];\n\nexport const PUBLISHED_DATA_CATEGORIES = [\n  \"summoner-icons\",\n  \"summoner-icon-sets\",\n  \"summoner-emotes\",\n  \"ward-skins\",\n  \"ward-skin-sets\",\n  \"loot\",\n  \"champions\",\n  \"skinlines\",\n  \"universes\",\n  \"skins\",\n  \"added\",\n] as const;\n\nexport const DEFAULT_DATA_LANGUAGES = [\"default\", \"zh_cn\"] as const;\n\nexport interface CategoryMeta {\n  id: AssetCategory;\n  domain: \"cosmetics\" | \"champions\" | \"skins\" | \"meta\";\n  description: string;\n}\n\nexport const CATEGORY_META: Record<AssetCategory, CategoryMeta> = {\n  \"summoner-icons\": {\n    id: \"summoner-icons\",\n    domain: \"cosmetics\",\n    description: \"Summoner profile icons\",\n  },\n  \"summoner-icon-sets\": {\n    id: \"summoner-icon-sets\",\n    domain: \"cosmetics\",\n    description: \"Summoner icon sets\",\n  },\n  \"summoner-emotes\": {\n    id: \"summoner-emotes\",\n    domain: \"cosmetics\",\n    description: \"Summoner emotes\",\n  },\n  \"ward-skins\": {\n    id: \"ward-skins\",\n    domain: \"cosmetics\",\n    description: \"Ward skins\",\n  },\n  \"ward-skin-sets\": {\n    id: \"ward-skin-sets\",\n    domain: \"cosmetics\",\n    description: \"Ward skin sets\",\n  },\n  loot: {\n    id: \"loot\",\n    domain: \"cosmetics\",\n    description: \"Loot chests (filtered)\",\n  },\n  champions: {\n    id: \"champions\",\n    domain: \"champions\",\n    description: \"Champion summary list\",\n  },\n  skinlines: {\n    id: \"skinlines\",\n    domain: \"skins\",\n    description: \"Skin lines / thematics\",\n  },\n  universes: {\n    id: \"universes\",\n    domain: \"skins\",\n    description: \"Universes / IP sets\",\n  },\n  skins: {\n    id: \"skins\",\n    domain: \"skins\",\n    description: \"Full skins map with chromas / quest tiers\",\n  },\n  added: {\n    id: \"added\",\n    domain: \"meta\",\n    description: \"IDs added vs previous patch snapshot\",\n  },\n  version: {\n    id: \"version\",\n    domain: \"meta\",\n    description: \"Data dragon realm / game version\",\n  },\n};\n","export interface SplitSkinId {\n  champId: number;\n  skinIndex: number;\n}\n\n/** Skin id layout: champId * 1000 + skinIndex */\nexport function splitSkinId(id: number): SplitSkinId {\n  return {\n    champId: Math.floor(id / 1000),\n    skinIndex: id % 1000,\n  };\n}\n\n/** Legacy tuple form used by some scrapers: [champId, skinIndex] */\nexport function splitId(id: number): [number, number] {\n  const { champId, skinIndex } = splitSkinId(id);\n  return [champId, skinIndex];\n}\n","export interface Skins {\n  [key: string]: Skin;\n}\n\nexport interface Skin {\n  id: number;\n  isBase: boolean;\n  name: string;\n  splashPath: string;\n  uncenteredSplashPath: string;\n  tilePath: string;\n  loadScreenPath: string;\n  skinType: SkinType | string;\n  rarity: RarityEnum | string;\n  isLegacy: boolean;\n  splashVideoPath: null | string;\n  collectionSplashVideoPath: null | string;\n  collectionCardHoverVideoPath?: null | string;\n  featuresText: null | string;\n  chromaPath?: null | string;\n  emblems: Emblem[] | null;\n  regionRarityId: number;\n  rarityGemPath: string | null;\n  skinLines: SkinLineRef[] | null;\n  description: null | string;\n  loadScreenVintagePath?: string;\n  chromas?: Chroma[];\n  skinAugments?: SkinAugments;\n  questSkinInfo?: QuestSkinInfo;\n  [key: string]: unknown;\n}\n\nexport interface Emblem {\n  name: string;\n  emblemPath: {\n    large: string;\n    small: string;\n  };\n  positions: object;\n}\n\nexport interface Chroma {\n  id: number;\n  name: string;\n  chromaPath: string;\n  colors: string[];\n  descriptions: { region: string; description: string }[];\n  rarities: { region: string; rarity: number }[];\n  skinAugments?: SkinAugments;\n}\n\nexport interface SkinAugments {\n  borders: Borders;\n  augments?: Augment[];\n}\n\nexport interface Augment {\n  contentId: string;\n  overlays: Overlay[];\n}\n\nexport interface Overlay {\n  centeredLCOverlayPath: string;\n  uncenteredLCOverlayPath: string;\n  socialCardLCOverlayPath: string;\n  tileLCOverlayPath: string;\n}\n\nexport interface Borders {\n  layer0: Layer[];\n  layer1?: Layer[];\n}\n\nexport interface Layer {\n  contentId: string;\n  layer: number;\n  priority: number;\n  borderPath: string;\n}\n\nexport interface QuestSkinInfo {\n  name: string;\n  productType: string;\n  collectionDescription: string;\n  descriptionInfo: DescriptionInfo[];\n  splashPath: string;\n  uncenteredSplashPath: string;\n  tilePath: string;\n  collectionCardPath: string;\n  tiers: Tier[];\n}\n\nexport interface DescriptionInfo {\n  title: string;\n  description: string;\n  iconPath: string;\n}\n\nexport interface Tier {\n  id: number;\n  name: string;\n  stage: number;\n  description: string;\n  splashPath: string;\n  uncenteredSplashPath: string;\n  tilePath: string;\n  loadScreenPath: string;\n  shortName: string;\n  splashVideoPath: null | string;\n  collectionSplashVideoPath: null | string;\n  collectionCardHoverVideoPath?: null | string;\n  skinAugments?: SkinAugments;\n  loadScreenVintagePath?: string;\n}\n\nexport enum RarityEnum {\n  KEpic = \"kEpic\",\n  KLegendary = \"kLegendary\",\n  KMythic = \"kMythic\",\n  KNoRarity = \"kNoRarity\",\n  KRare = \"kRare\",\n  KTranscendent = \"kTranscendent\",\n  KUltimate = \"kUltimate\",\n}\n\nexport interface SkinLineRef {\n  id: number;\n}\n\nexport enum SkinType {\n  Empty = \"\",\n  Ultimate = \"Ultimate\",\n}\n","import { RarityEnum } from \"../types/skins.js\";\nimport { dataRoot } from \"../sources/cdragon.js\";\nimport type { Patch } from \"../types/common.js\";\n\nexport const raritiesMap: Partial<Record<RarityEnum, [string, string]>> = {\n  [RarityEnum.KUltimate]: [\"ultimate.png\", \"Ultimate\"],\n  [RarityEnum.KMythic]: [\"mythic.png\", \"Mythic\"],\n  [RarityEnum.KLegendary]: [\"legendary.png\", \"Legendary\"],\n  [RarityEnum.KEpic]: [\"epic.png\", \"Epic\"],\n  [RarityEnum.KTranscendent]: [\"transcendent.png\", \"Transcendent\"],\n  [RarityEnum.KRare]: [\"rare.png\", \"Rare\"],\n};\n\nexport function getRarityUrl(\n  rarity: string,\n  opts?: { patch?: Patch },\n): { imgUrl: string; name: string } | null {\n  const key = rarity as RarityEnum;\n  const info = raritiesMap[key];\n  if (!info) return null;\n  const [imgName, name] = info;\n  const imgUrl = `${dataRoot({ patch: opts?.patch ?? \"pbe\", lang: \"default\" })}/v1/rarity-gem-icons/${imgName}`;\n  return { imgUrl, name };\n}\n\nexport function modelviewerUrl(skinId: number): string {\n  return `https://www.modelviewer.lol/en-US/model-viewer?id=${skinId}`;\n}\n"]}