@magicwenli/league-fan-assets
Version:
Typed League of Legends asset loaders (icons, emotes, wards, loot, champions, skins) for league-fan
1 lines • 53.7 kB
Source Map (JSON)
{"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":";;;AAEO,IAAM,OAAA,GAAU;AAEhB,IAAM,wBAAA,GACX;AAGK,IAAM,qBAAA,GAAgE;AAAA,EAC3E,gBAAA,EAAkB,qBAAA;AAAA,EAClB,oBAAA,EAAsB,yBAAA;AAAA,EACtB,iBAAA,EAAmB,sBAAA;AAAA,EACnB,YAAA,EAAc,iBAAA;AAAA,EACd,gBAAA,EAAkB,qBAAA;AAAA,EAClB,IAAA,EAAM,WAAA;AAAA,EACN,SAAA,EAAW,uBAAA;AAAA,EACX,SAAA,EAAW,gBAAA;AAAA,EACX,SAAA,EAAW,gBAAA;AAAA,EACX,KAAA,EAAO;AACT;AAEO,SAAS,QAAA,CAAS,IAAA,GAAuC,EAAC,EAAW;AAC1E,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,QAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,SAAA;AAC1B,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAK,wCAAwC,IAAI,CAAA,CAAA;AACxE;AAEO,SAAS,eAAe,IAAA,EAIpB;AACT,EAAA,MAAM,IAAA,GAAO,qBAAA,CAAsB,IAAA,CAAK,QAAQ,CAAA;AAChD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,UAAA,EAAa,KAAK,QAAQ,CAAA,oCAAA;AAAA,KAC5B;AAAA,EACF;AACA,EAAA,OAAO,CAAA,EAAG,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA;AACvE;AAGO,SAAS,wBAAwB,QAAA,EAAgC;AACtE,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,WAAA;AAAA,IACL,KAAK,WAAA;AAAA,IACL,KAAK,WAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,OAAO,QAAA;AAAA;AAEb;;;AC/CO,IAAM,oBAAA,GACX;AAEK,SAAS,eAAe,IAAA,EAGpB;AACT,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,QAAQ,IACxC,IAAA,CAAK,OAAA,GACL,CAAA,MAAA,EAAS,IAAA,CAAK,OAAO,CAAA,CAAA;AACzB,IAAA,OAAO,qEAAqE,GAAG,CAAA,CAAA;AAAA,EACjF;AACA,EAAA,OAAO,oBAAA;AACT;AAGO,SAAS,iBAAiB,OAAA,EAAyB;AACxD,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAA;AACpC;AAEO,SAAS,eAAe,IAAA,EAKpB;AACT,EAAA,MAAM,OAAO,cAAA,CAAe;AAAA,IAC1B,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,SAAS,IAAA,CAAK;AAAA,GACf,CAAA;AACD,EAAA,IAAI,IAAA,CAAK,aAAa,SAAA,EAAW;AAC/B,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,gBAAA,CAAiB,cAAc,CAAC,CAAA,CAAA;AAAA,EACpD;AACA,EAAA,IAAI,IAAA,CAAK,aAAa,OAAA,EAAS;AAC7B,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,gBAAA,CAAiB,oBAAoB,CAAC,CAAA,CAAA;AAAA,EAC1D;AACA,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,SAAA;AAC1B,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,gBAAA,CAAiB,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAA,KAAA,CAAO,CAAC,CAAA,CAAA;AACrE;AAEO,SAAS,mBAAmB,IAAA,EAGxB;AACT,EAAA,OAAO,GAAG,cAAA,CAAe,IAAI,CAAC,CAAA,CAAA,EAAI,gBAAA,CAAiB,eAAe,CAAC,CAAA,CAAA;AACrE;;;ACvDO,IAAM,UAAA,GAAN,cAAyB,KAAA,CAAM;AAAA,EAC3B,MAAA;AAAA,EACA,GAAA;AAAA,EAET,WAAA,CAAY,GAAA,EAAa,MAAA,EAAgB,UAAA,EAAoB;AAC3D,IAAA,KAAA,CAAM,QAAQ,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAAA;AAC/C,IAAA,IAAA,CAAK,IAAA,GAAO,YAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,EACb;AACF;AAEA,eAAsB,SAAA,CACpB,KACA,IAAA,EACY;AACZ,EAAA,MAAM,SAAA,GAAY,IAAA,EAAM,KAAA,IAAS,UAAA,CAAW,KAAA;AAC5C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,GAAG,CAAA;AAC/B,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,UAAA,CAAW,GAAA,EAAK,GAAA,CAAI,MAAA,EAAQ,IAAI,UAAU,CAAA;AAAA,EACtD;AACA,EAAA,OAAQ,MAAM,IAAI,IAAA,EAAK;AACzB;;;ACtBO,IAAM,qBAAA,GACX;AAEK,IAAM,gBAAA,GACX;AAEF,eAAsB,eAAe,IAAA,EAGjB;AAClB,EAAA,MAAM,IAAA,GAAO,MAAM,cAAA,CAAe,IAAI,CAAA;AACtC,EAAA,OAAO,IAAA,CAAK,CAAA;AACd;AAEA,eAAsB,eAAe,IAAA,EAGZ;AACvB,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,IAAY,qBAAA;AAC9B,EAAA,OAAO,UAAuB,GAAA,EAAK,EAAE,KAAA,EAAO,IAAA,EAAM,OAAO,CAAA;AAC3D;;;ACjBA,IAAM,gBAAA,GAAmB,uBAAA;AAalB,SAAS,QAAA,CACd,IAAA,EACA,IAAA,GAAwB,EAAC,EACjB;AACR,EAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,IAAA,KAAS,EAAA,EAAI,OAAO,EAAA;AACxC,EAAA,IAAI,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAA;AAEvC,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,QAAA;AAG5B,EAAA,IACE,IAAA,CAAK,aAAa,gBAAA,KACjB,IAAA,CAAK,SAAS,OAAA,IAAW,IAAA,CAAK,SAAS,OAAA,CAAA,EACxC;AACA,IAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AAAA,MACb;AAAA,KACF;AACA,IAAA,IAAI,CAAA,GAAI,CAAC,CAAA,EAAG;AACV,MAAA,OAAO,GAAG,wBAAwB,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,aAAa,CAAA,CAAA;AAAA,IACzD;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA,EAAG;AACrC,IAAA,MAAM,IAAA,GAAO,KAAK,KAAA,CAAM,gBAAA,CAAiB,MAAM,CAAA,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAEnE,IAAA,OAAO,CAAA,EAAG,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA;AAAA,EACtE;AAGA,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,IAAA,OAAO,CAAA,EAAG,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA,EAAG,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,gBAAA,CACd,KAAA,EACA,IAAA,GAAwB,EAAC,EACtB;AACH,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,KAAA;AAC1B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,MAAM,QAAA,CAAS,gBAAgB,KAAK,KAAA,CAAM,UAAA,CAAW,gBAAgB,CAAA,EAAG;AAC1E,MAAA,OAAO,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IAC7B;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,MAAM,GAAA,CAAI,CAAC,MAAM,gBAAA,CAAiB,CAAA,EAAG,IAAI,CAAC,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,EAAG;AACrE,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAA,EAAG,IAAI,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;;;AC1EA,IAAM,QAAA,GAAW,mBAAA;AAEV,SAAS,gBAAA,CACd,GAAA,EACA,IAAA,GAAuC,EAAC,EAC5B;AACZ,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,QAAA;AAC5B,EAAA,IAAI,QAAmC,EAAC;AAExC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,KAAA,GAAQ,GAAA;AAAA,EACV,WAAW,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,eAAe,GAAA,EAAK;AAC/D,IAAA,KAAA,GAAS,GAAA,CAAiD,aAAa,EAAC;AAAA,EAC1E;AAEA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,CAAO,CAAC,EAAA,KAAO;AACpC,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,EAAA,CAAG,EAAA,IAAM,EAAE,CAAA;AAC7B,IAAA,OAAO,QAAA,CAAS,KAAK,EAAE,CAAA;AAAA,EACzB,CAAC,CAAA;AAED,EAAA,MAAM,MAAA,GAAqB,QAAA,CAAS,GAAA,CAAI,CAAC,EAAA,KAAO;AAC9C,IAAA,MAAM,KAAA,GAAQ,SAAS,MAAA,CAAO,EAAA,CAAG,SAAS,EAAA,CAAG,SAAA,IAAa,EAAE,CAAA,EAAG;AAAA,MAC7D,KAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AACD,IAAA,OAAO;AAAA,MACL,GAAG,EAAA;AAAA,MACH,EAAA,EAAI,MAAA,CAAO,EAAA,CAAG,EAAE,CAAA;AAAA,MAChB,IAAA,EAAM,MAAA,CAAO,EAAA,CAAG,IAAA,IAAQ,EAAE,CAAA;AAAA,MAC1B,WAAA,EAAa,MAAA,CAAO,EAAA,CAAG,WAAA,IAAe,EAAE,CAAA;AAAA,MACxC;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IACZ,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,aAAA,IAAiB,CAAA,KAAM,EAAE,aAAA,IAAiB,CAAA;AAAA,GACzD;AACF;;;ACzBA,SAAS,mBACP,IAAA,EACQ;AACR,EAAA,IAAI,IAAA,CAAK,YAAA,GAAe,CAAC,CAAA,EAAG,WAAA,EAAa;AACvC,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,CAAE,WAAA;AAAA,EAC9B;AACA,EAAA,OAAO,KAAK,WAAA,IAAe,EAAA;AAC7B;AAEO,SAAS,sBAAA,CACd,GAAA,EACA,IAAA,GAAsB,EAAC,EACP;AAChB,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,QAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,SAAA;AAC1B,EAAA,MAAM,IAAA,GAAQ,GAAA,CAAgC,GAAA,CAAI,CAAC,IAAA,KAAS;AAC1D,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,SAAA,IAAa,EAAA,EAAI;AAAA,MAC/C,KAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACX,CAAA;AACD,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,MAClB,KAAA,EAAO,KAAK,KAAA,IAAS,EAAA;AAAA,MACrB,SAAA;AAAA,MACA,WAAA,EAAa,mBAAmB,IAAoB;AAAA,KACtD;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,IAAA,CACJ,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA,CACzB,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,EAAA,GAAK,EAAE,EAAE,CAAA;AAC/B;AAEO,SAAS,yBAAA,CACd,GAAA,EACA,IAAA,GAAsB,EAAC,EACJ;AACnB,EAAA,MAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAM,EAAC;AACzC,EAAA,OAAO,iBAAiB,IAAA,EAAM;AAAA,IAC5B,KAAA,EAAO,KAAK,KAAA,IAAS,QAAA;AAAA,IACrB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACX,CAAA;AACH;AAEO,SAAS,uBAAA,CACd,GAAA,EACA,IAAA,GAAsB,EAAC,EACN;AACjB,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,QAAA;AAC5B,EAAA,OAAQ,GAAA,CAAiC,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,IACtD,GAAG,IAAA;AAAA,IACH,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,IAClB,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,IACnB,WAAA,EAAa,KAAK,WAAA,IAAe,EAAA;AAAA,IACjC,aAAA,EAAe,QAAA,CAAS,IAAA,CAAK,aAAA,IAAiB,EAAA,EAAI;AAAA,MAChD,KAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX;AAAA,GACH,CAAE,CAAA;AACJ;AAEO,SAAS,kBAAA,CACd,GAAA,EACA,IAAA,GAAsB,EAAC,EACX;AACZ,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,QAAA;AAC5B,EAAA,OAAQ,GAAA,CAA4B,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,IACjD,GAAG,IAAA;AAAA,IACH,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,IAClB,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,IACnB,WAAA,EAAa,KAAK,WAAA,IAAe,EAAA;AAAA,IACjC,aAAA,EAAe,QAAA,CAAS,IAAA,CAAK,aAAA,IAAiB,EAAA,EAAI;AAAA,MAChD,KAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,IACD,mBAAA,EAAqB,QAAA,CAAS,IAAA,CAAK,mBAAA,IAAuB,EAAA,EAAI;AAAA,MAC5D,KAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX;AAAA,GACH,CAAE,CAAA;AACJ;AAEO,SAAS,qBAAA,CACd,GAAA,EACA,IAAA,GAAsB,EAAC,EACR;AACf,EAAA,MAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAM,EAAC;AACzC,EAAA,OAAO,iBAAiB,IAAA,EAAM;AAAA,IAC5B,KAAA,EAAO,KAAK,KAAA,IAAS,QAAA;AAAA,IACrB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACX,CAAA;AACH;AAEO,SAAS,aAAA,CACd,GAAA,EACA,IAAA,GAAsB,EAAC,EACX;AACZ,EAAA,OAAO,gBAAA,CAAiB,KAAK,IAAI,CAAA;AACnC;;;ACxHO,IAAM,mBAAA,GAA8C;AAAA,EACzD,UAAA,EAAY;AACd;AAEO,SAAS,UAAA,CACd,KAAA,EACA,IAAA,GAA+B,mBAAA,EACvB;AACR,EAAA,OAAO,IAAA,CAAK,KAAK,CAAA,IAAK,KAAA;AACxB;;;ACLO,SAAS,kBAAA,CACd,GAAA,EACA,IAAA,GAAuC,EAAC,EAC5B;AACZ,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,KAAA;AAC5B,EAAA,OAAQ,GAAA,CACL,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAA,IAAM,CAAA,CAAE,EAAA,IAAM,IAAI,CAAA,CACzC,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,IAAS,EAAA;AACzB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA;AAAA,MACf,IAAA,EAAM,EAAE,IAAA,IAAQ,EAAA;AAAA,MAChB,KAAA;AAAA,MACA,kBAAA,EAAoB,QAAA,CAAS,CAAA,CAAE,kBAAA,IAAsB,EAAA,EAAI;AAAA,QACvD,KAAA;AAAA,QACA,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,MACD,KAAA,EAAO,CAAA,CAAE,KAAA,IAAS,EAAC;AAAA,MACnB,GAAA,EAAK,UAAA,CAAW,KAAA,CAAM,WAAA,EAAa;AAAA,KACrC;AAAA,EACF,CAAC,CAAA,CACA,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,IAAA,GAAO,CAAA,GAAI,EAAG,CAAA;AAC9C;;;ACfA,IAAM,SAAA,GAAY;AAAA,EAChB,YAAA;AAAA,EACA,sBAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,2BAAA;AAAA,EACA,8BAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,mBAAA,CACP,MACA,IAAA,EACM;AACN,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AACvB,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,IAAA,MAAM,GAAA,GAAM,KAAK,GAAG,CAAA;AACpB,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,EAAK;AAClC,MAAC,IAAA,CAAiC,GAAG,CAAA,GAAI,QAAA,CAAS,GAAA,EAAK;AAAA,QACrD,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACtC,GAAG,CAAA;AAAA,MACH,UAAA,EAAY,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY;AAAA,QACjC,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,QAAA,EAAU;AAAA,OACX;AAAA,KACH,CAAE,CAAA;AAAA,EACJ;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACtC,GAAG,CAAA;AAAA,MACH,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY,KAAA,EAAO;AAAA,UACnC,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,QACD,KAAA,EAAO,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY,KAAA,EAAO;AAAA,UACnC,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,QAAA,EAAU;AAAA,SACX;AAAA;AACH,KACF,CAAE,CAAA;AAAA,EACJ;AAEA,EAAA,IAAI,KAAK,YAAA,EAAc;AACrB,IAAA,IAAA,CAAK,YAAA,GAAe,gBAAA,CAAiB,IAAA,CAAK,YAAA,EAAc;AAAA,MACtD,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AACA,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,cAAA,CACd,GAAA,EACA,IAAA,GAA0B,EAAC,EACpB;AACP,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,KAAA;AAC5B,EAAA,MAAM,cAAA,GAAiB,KAAK,cAAA,IAAkB,IAAA;AAC9C,EAAA,MAAM,IAAA,GAAc,EAAE,GAAG,GAAA,EAAI;AAE7B,EAAA,KAAA,MAAW,EAAA,IAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AAClC,IAAA,MAAM,IAAA,GAAO,KAAK,EAAE,CAAA;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,IAAA,CAAK,UAAU,cAAA,IAAkB,CAAC,KAAK,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AACvE,MAAA,IAAA,CAAK,IAAA,GAAO,cAAc,IAAA,CAAK,IAAA;AAAA,IACjC;AAEA,IAAA,IAAI,IAAA,CAAK,aAAA,EAAe,KAAA,EAAO,MAAA,EAAQ;AACrC,MAAA,MAAM,IAAA,GAAO,EAAE,GAAG,IAAA,EAAK;AACvB,MAAA,OAAO,IAAA,CAAK,aAAA;AACZ,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,aAAA,CAAc,KAAA,EAAO;AAC3C,QAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,EAAM,GAAG,IAAA,EAAK;AAClC,QAAA,IAAA,CAAK,OAAO,MAAA,CAAO,EAAE,CAAC,CAAA,GAAI,oBAAoB,MAAA,EAAQ;AAAA,UACpD,KAAA;AAAA,UACA,MAAM,IAAA,CAAK;AAAA,SACZ,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,EAAE,IAAI,mBAAA,CAAoB,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,EACjE;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,kBAAA,CACd,GAAA,EACA,KAAA,GAA2B,EAAC,EAChB;AACZ,EAAA,OAAQ,GAAA,CACL,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAC,CAAA,CACxB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACX,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,IAAA,EAAM,EAAE,IAAA,IAAQ,EAAA;AAAA,IAChB,WAAA,EAAa,EAAE,WAAA,IAAe;AAAA,GAChC,CAAE,CAAA,CACD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,IAAA,GAAO,CAAA,GAAI,EAAG,CAAA;AAC9C;AAEO,SAAS,kBAAA,CACd,GAAA,EACA,IAAA,GAA0B,EAAC,EACf;AACZ,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,KAAA;AAC5B,EAAA,OAAQ,GAAA,CACL,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,CAAA,IAAK,CAAA,CAAE,EAAA,IAAM,IAAI,CAAA,CACxC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACX,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA;AAAA,IACf,IAAA,EAAM,EAAE,IAAA,IAAQ,EAAA;AAAA,IAChB,WAAA,EAAa,EAAE,WAAA,IAAe,EAAA;AAAA,IAC9B,SAAA,EAAW,QAAA,CAAS,CAAA,CAAE,SAAA,IAAa,EAAA,EAAI;AAAA,MACrC,KAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,IACD,QAAA,EAAU,CAAA,CAAE,QAAA,IAAY;AAAC,GAC3B,CAAE,CAAA,CACD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,IAAA,GAAO,CAAA,GAAI,EAAG,CAAA;AAC9C;;;AChJO,SAAS,aAAa,IAAA,EAanB;AACR,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AAC3D,EAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACvE,EAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACvE,EAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAEvE,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAQ,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,UAAA,CAAW,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,IACvE,WAAW,IAAA,CAAK,OAAA,CAAQ,SAAA,CACrB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CACf,OAAO,CAAC,CAAA,KAAM,CAAC,cAAA,CAAe,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,IACvC,WAAW,IAAA,CAAK,OAAA,CAAQ,SAAA,CACrB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CACf,OAAO,CAAC,CAAA,KAAM,CAAC,cAAA,CAAe,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,IACvC,WAAW,IAAA,CAAK,OAAA,CAAQ,SAAA,CACrB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CACf,OAAO,CAAC,CAAA,KAAM,CAAC,cAAA,CAAe,GAAA,CAAI,CAAC,CAAC;AAAA,GACzC;AACF;;;ACFA,SAAS,YAAA,CACP,QAAA,EACA,MAAA,EACA,QAAA,EACO;AACP,EAAA,IAAI,UAAU,OAAO,QAAA;AACrB,EAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,IAAA,OAAO,MAAA,CAAO,KAAA,IAAS,uBAAA,CAAwB,QAAQ,CAAA;AAAA,EACzD;AAEA,EAAA,OAAO,wBAAwB,QAAQ,CAAA;AACzC;AAEA,eAAsB,YAAA,CACpB,QAAA,EACA,IAAA,GAAoB,EAAC,EACQ;AAC7B,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,SAAA;AAC1B,EAAA,MAAM,MAAA,GAAqB,IAAA,CAAK,MAAA,IAAU,EAAE,MAAM,SAAA,EAAU;AAC5D,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,EAAU,MAAA,EAAQ,KAAK,KAAK,CAAA;AACvD,EAAA,MAAM,QAAA,GAAW,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM;AAErC,EAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,IAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,MAAA,MAAMA,OAAM,cAAA,CAAe;AAAA,QACzB,QAAA,EAAU,SAAA;AAAA,QACV,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,SAAS,MAAA,CAAO;AAAA,OACjB,CAAA;AACD,MAAA,OAAQ,MAAM,SAAA,CAAUA,IAAAA,EAAK,QAAQ,CAAA;AAAA,IACvC;AACA,IAAA,OAAQ,MAAM,eAAe,QAAQ,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,MAAA,MAAMA,OAAM,cAAA,CAAe;AAAA,QACzB,QAAA,EAAU,OAAA;AAAA,QACV,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,SAAS,MAAA,CAAO;AAAA,OACjB,CAAA;AACD,MAAA,OAAQ,MAAM,SAAA,CAAUA,IAAAA,EAAK,QAAQ,CAAA;AAAA,IACvC;AACA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,IAAA,MAAMA,OAAM,cAAA,CAAe;AAAA,MACzB,QAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO;AAAA,KACjB,CAAA;AACD,IAAA,GAAA,GAAM,MAAM,SAAA,CAAUA,IAAAA,EAAK,QAAQ,CAAA;AAEnC,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAM,cAAA,CAAe,EAAE,QAAA,EAAU,IAAA,EAAM,OAAO,CAAA;AACpD,EAAA,GAAA,GAAM,MAAM,SAAA,CAAU,GAAA,EAAK,QAAQ,CAAA;AAEnC,EAAA,MAAM,KAAA,GAAQ,EAAE,IAAA,EAAM,KAAA,EAAM;AAC5B,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,gBAAA;AACH,MAAA,OAAO,sBAAA,CAAuB,KAAkB,KAAK,CAAA;AAAA,IACvD,KAAK,oBAAA;AACH,MAAA,OAAO,yBAAA,CAA0B,KAAK,KAAK,CAAA;AAAA,IAC7C,KAAK,iBAAA;AACH,MAAA,OAAO,uBAAA,CAAwB,KAAkB,KAAK,CAAA;AAAA,IACxD,KAAK,YAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,KAAkB,KAAK,CAAA;AAAA,IACnD,KAAK,gBAAA;AACH,MAAA,OAAO,qBAAA,CAAsB,KAAK,KAAK,CAAA;AAAA,IACzC,KAAK,MAAA;AACH,MAAA,OAAO,aAAA,CAAc,KAAK,KAAK,CAAA;AAAA,IACjC,KAAK,WAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,KAAkB,KAAK,CAAA;AAAA,IACnD,KAAK,WAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,KAAkB,KAAK,CAAA;AAAA,IACnD,KAAK,WAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,KAAkB,KAAK,CAAA;AAAA,IACnD,KAAK,OAAA;AACH,MAAA,OAAO,cAAA,CAAe,KAAc,KAAK,CAAA;AAAA,IAC3C;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAQ,CAAA,CAAE,CAAA;AAAA;AAEzD;;;AChFO,SAAS,YAAA,CAAa,OAAA,GAAyB,EAAC,EAA0B;AAC/E,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,SAAA;AAC7B,EAAA,MAAM,MAAA,GAAqB,OAAA,CAAQ,MAAA,IAAU,EAAE,MAAM,SAAA,EAAU;AAC/D,EAAA,MAAM,IAAA,GAAoB;AAAA,IACxB,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,OAAO,OAAA,CAAQ;AAAA,GACjB;AAEA,EAAA,MAAM,IAAA,GAAO,CAA0B,QAAA,KACrC,YAAA,CAAa,UAAU,IAAI,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,aAAA,EAAe,MAAM,IAAA,CAAK,gBAAgB,CAAA;AAAA,IAC1C,gBAAA,EAAkB,MAAM,IAAA,CAAK,oBAAoB,CAAA;AAAA,IACjD,cAAA,EAAgB,MAAM,IAAA,CAAK,iBAAiB,CAAA;AAAA,IAC5C,SAAA,EAAW,MAAM,IAAA,CAAK,YAAY,CAAA;AAAA,IAClC,YAAA,EAAc,MAAM,IAAA,CAAK,gBAAgB,CAAA;AAAA,IACzC,IAAA,EAAM,MAAM,IAAA,CAAK,MAAM,CAAA;AAAA,IACvB,SAAA,EAAW,MAAM,IAAA,CAAK,WAAW,CAAA;AAAA,IACjC,SAAA,EAAW,MAAM,IAAA,CAAK,WAAW,CAAA;AAAA,IACjC,SAAA,EAAW,MAAM,IAAA,CAAK,WAAW,CAAA;AAAA,IACjC,KAAA,EAAO,MAAM,IAAA,CAAK,OAAO,CAAA;AAAA,IACzB,KAAA,EAAO,MAAM,IAAA,CAAK,OAAO,CAAA;AAAA,IACzB,OAAA,EAAS,MAAM,IAAA,CAAK,SAAS;AAAA,GAC/B;AACF;;;ACxEO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAEO,IAAM,yBAAA,GAA4B;AAAA,EACvC,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAEO,IAAM,sBAAA,GAAyB,CAAC,SAAA,EAAW,OAAO;AAQlD,IAAM,aAAA,GAAqD;AAAA,EAChE,gBAAA,EAAkB;AAAA,IAChB,EAAA,EAAI,gBAAA;AAAA,IACJ,MAAA,EAAQ,WAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,EAAA,EAAI,oBAAA;AAAA,IACJ,MAAA,EAAQ,WAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,EAAA,EAAI,iBAAA;AAAA,IACJ,MAAA,EAAQ,WAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,YAAA;AAAA,IACJ,MAAA,EAAQ,WAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,EAAA,EAAI,gBAAA;AAAA,IACJ,MAAA,EAAQ,WAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,MAAA,EAAQ,WAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,SAAA,EAAW;AAAA,IACT,EAAA,EAAI,WAAA;AAAA,IACJ,MAAA,EAAQ,WAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,SAAA,EAAW;AAAA,IACT,EAAA,EAAI,WAAA;AAAA,IACJ,MAAA,EAAQ,OAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,SAAA,EAAW;AAAA,IACT,EAAA,EAAI,WAAA;AAAA,IACJ,MAAA,EAAQ,OAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,KAAA,EAAO;AAAA,IACL,EAAA,EAAI,OAAA;AAAA,IACJ,MAAA,EAAQ,OAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,KAAA,EAAO;AAAA,IACL,EAAA,EAAI,OAAA;AAAA,IACJ,MAAA,EAAQ,MAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,OAAA,EAAS;AAAA,IACP,EAAA,EAAI,SAAA;AAAA,IACJ,MAAA,EAAQ,MAAA;AAAA,IACR,WAAA,EAAa;AAAA;AAEjB;;;AC9FO,SAAS,YAAY,EAAA,EAAyB;AACnD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,GAAI,CAAA;AAAA,IAC7B,WAAW,EAAA,GAAK;AAAA,GAClB;AACF;AAGO,SAAS,QAAQ,EAAA,EAA8B;AACpD,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,YAAY,EAAE,CAAA;AAC7C,EAAA,OAAO,CAAC,SAAS,SAAS,CAAA;AAC5B;;;ACkGO,IAAK,UAAA,qBAAAC,WAAAA,KAAL;AACL,EAAAA,YAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,YAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,YAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,YAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,YAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,YAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,YAAA,WAAA,CAAA,GAAY,WAAA;AAPF,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AAcL,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACL,EAAAA,UAAA,OAAA,CAAA,GAAQ,EAAA;AACR,EAAAA,UAAA,UAAA,CAAA,GAAW,UAAA;AAFD,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;;;AC7HL,IAAM,WAAA,GAA6D;AAAA,EACxE,CAAA,WAAA,mBAAwB,CAAC,cAAA,EAAgB,UAAU,CAAA;AAAA,EACnD,CAAA,SAAA,iBAAsB,CAAC,YAAA,EAAc,QAAQ,CAAA;AAAA,EAC7C,CAAA,YAAA,oBAAyB,CAAC,eAAA,EAAiB,WAAW,CAAA;AAAA,EACtD,CAAA,OAAA,eAAoB,CAAC,UAAA,EAAY,MAAM,CAAA;AAAA,EACvC,CAAA,eAAA,uBAA4B,CAAC,kBAAA,EAAoB,cAAc,CAAA;AAAA,EAC/D,CAAA,OAAA,eAAoB,CAAC,UAAA,EAAY,MAAM;AACzC;AAEO,SAAS,YAAA,CACd,QACA,IAAA,EACyC;AACzC,EAAA,MAAM,GAAA,GAAM,MAAA;AACZ,EAAA,MAAM,IAAA,GAAO,YAAY,GAAG,CAAA;AAC5B,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,CAAC,OAAA,EAAS,IAAI,CAAA,GAAI,IAAA;AACxB,EAAA,MAAM,MAAA,GAAS,CAAA,EAAG,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,CAAC,wBAAwB,OAAO,CAAA,CAAA;AAC3G,EAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AACxB;AAEO,SAAS,eAAe,MAAA,EAAwB;AACrD,EAAA,OAAO,qDAAqD,MAAM,CAAA,CAAA;AACpE","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"]}