fansunited-data-layer 0.8.3 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/api/sportal365-sports/basketball/games/transformers/game.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,aAAa,EAQhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/api/sportal365-sports/basketball/games/transformers/game.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,aAAa,EAQhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAqKlD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,GAAG,aAAa,CAoC7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/api/sportal365-sports/tennis/matches/transformers/match.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,aAAa,EAUhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/api/sportal365-sports/tennis/matches/transformers/match.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,aAAa,EAUhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,UAAU,CAAC;AAiNrE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,aAAa,CA2CvE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./matches-B-ZxR-B9.cjs"),L=require("react");function me(e){return{entityType:"tournament",id:e.id.toString(),name:e.name,slug:e.slug,gender:e.gender,type:e.type,region:e.region,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_logo?{logo:e.url_logo}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function ge(e){return{entityType:"player",id:e.id.toString(),name:e.name,slug:e.slug,position:e.position,gender:e.gender,birthdate:e.birthdate,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_thumb?{photo:e.url_thumb}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function fe(e){return{entityType:"team",id:e.id.toString(),name:e.name,slug:e.slug,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,type:e.type==="national"?"national":"club",gender:e.gender,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_logo?{logo:e.url_logo}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function pe(e){return{entityType:"president",id:e.id.toString(),name:e.name,slug:e.slug,birthdate:e.birthdate??void 0,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_thumb?{photo:e.url_thumb}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function ye(e){return{entityType:"venue",id:e.id.toString(),name:e.name,slug:e.slug,city:{id:e.city.id.toString(),name:e.city.name,country:{id:e.city.country.id.toString(),name:e.city.country.name,code:void 0,flag:e.city.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.city.country.uuid)},providerRef:u.toProviderRefArray(e.city.uuid)},country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},profile:{latitude:e.profile.lat,longitude:e.profile.lng,capacity:e.profile.capacity},assets:e.url_thumb?{image:e.url_thumb}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function he(e){return{entityType:"coach",id:e.id.toString(),name:e.name,slug:e.slug,birthdate:e.birthdate??void 0,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_thumb?{photo:e.url_thumb}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function Te(e){switch(e.entity_type){case"tournament":return me(e);case"player":return ge(e);case"team":return fe(e);case"president":return pe(e);case"venue":return ye(e);case"coach":return he(e);default:throw new Error(`Unknown entity type: ${e.entity_type}`)}}async function ve(e,t){if(!e.query||e.query.trim()==="")return{results:[],query:e.query||""};const o=t||u.getConfig(),{sportal365Sports:n}=o,s=e.entityTypes&&e.entityTypes.length>0?e.entityTypes:["tournament","player","team","president","venue","coach"],i=await u.footballHttp.get({path:"/search",params:{query:e.query.trim(),entity_type:s.join(","),language_code:e.languageCode??n?.languageCode??"en"},headers:{"Accept-Language":e.languageCode??n?.languageCode??"en"},next:e.next,config:o});return!i||i.length===0?{results:[],query:e.query}:{results:i.map(Te),query:e.query}}const Se=u.createHttpClient(u.SPORTAL365_BASKETBALL_DOMAIN);function _e(e){const t={FINISHED:"finished",NOT_STARTED:"not_started",LIVE:"live",INTERRUPTED:"interrupted",CANCELLED:"cancelled",POSTPONED:"postponed",UNKNOWN:"not_started"},o=e.type.toUpperCase();return{code:t[o]??"not_started",name:e.name,shortName:e.short_name,type:o}}function z(e){return{id:e.id,name:e.name,threeLetterCode:e.three_letter_code,slug:e.slug,type:e.type==="national"?"national":"club",gender:e.gender}}function Ce(e){return{kickoffTime:new Date(e.game_time),currentMinute:e.minute}}function Ae(e){if(!e.season?.competition)return;const t=e.season.competition;return{id:t.id,name:t.name,slug:t.slug,type:"LEAGUE",gender:t.gender,region:t.region,country:t.country?{id:t.country.id,name:t.country.name}:void 0,season:{id:e.season.id,name:e.season.name,status:e.season.status},stage:e.stage?{id:e.stage.id,name:e.stage.name,type:e.stage.type}:void 0}}function Fe(e){if(e)return{id:e.id,name:e.name,slug:e.slug}}function Me(e){if(!e||e.length===0)return;const t=e.filter(i=>i.result_type.category==="PERIOD");if(t.length===0)return;let o=0,n=0;const s=[];for(const i of t)o+=i.home,n+=i.away,s.push({competitorOne:String(i.home),competitorTwo:String(i.away)});return{competitorOne:String(o),competitorTwo:String(n),breakdown:{total:{competitorOne:String(o),competitorTwo:String(n)},periods:s}}}function Oe(e){if(e.winner)return{competitorId:e.winner.id}}function Re(e){return{id:e.id,slug:e.slug,status:_e(e.status),timing:Ce(e),competitorOne:z(e.home_team),competitorTwo:z(e.away_team),competition:Ae(e),round:e.round?{id:e.round.id,key:e.round.uuid,name:e.round.name,type:"REGULAR",providerRef:u.toProviderRefArray(e.round.uuid)}:void 0,venue:Fe(e.arena),score:Me(e.score),winner:Oe(e),coverage:e.coverage==="NOT_LIVE"?"UNKNOWN":e.coverage,providerRef:[{provider:"sportal365-basketball",id:e.id}]}}async function Ne(e,t){const o=t||u.getConfig(),{sportal365Sports:n}=o;return(await Se.get({path:"/games",params:{offset:"0",limit:"1000",competition_list:e?.competitionList,status_type:e?.statusTypes,odd_client:e?.oddClient??n?.oddClient,odd_type:e?.oddType,market_types:e?.marketTypes,language_code:e?.languageCode??n?.languageCode??"en"},headers:{"Accept-Language":e?.languageCode??n?.languageCode??"en"},next:e?.next,config:o})).games.map(Re)}const Pe=u.createHttpClient(u.SPORTAL365_TENNIS_DOMAIN);function Ee(e){const t={FINISHED:"finished",NOT_STARTED:"not_started",LIVE:"live",INTERRUPTED:"interrupted",CANCELLED:"cancelled",POSTPONED:"postponed"},o=e.type.toUpperCase();return{code:t[o]??"not_started",name:e.name,shortName:e.short_name,type:o}}function J(e){if(e.type==="PLAYER")return{id:e.id,name:e.name,shortName:e.short_name,threeLetterCode:e.three_letter_code,type:"player",country:e.details?.[0]?.country?{id:e.details[0].country.id,name:e.details[0].country.name}:void 0,gender:e.details?.[0]?.gender};if(e.type==="TEAM_DOUBLE"&&e.details&&e.details.length===2){const t={id:e.details[0].id,name:e.details[0].name,shortName:e.details[0].short_name,threeLetterCode:e.details[0].three_letter_code,type:"player",country:e.details[0].country?{id:e.details[0].country.id,name:e.details[0].country.name}:void 0,gender:e.details[0].gender},o={id:e.details[1].id,name:e.details[1].name,shortName:e.details[1].short_name,threeLetterCode:e.details[1].three_letter_code,type:"player",country:e.details[1].country?{id:e.details[1].country.id,name:e.details[1].country.name}:void 0,gender:e.details[1].gender};return{id:e.id,name:e.name,shortName:e.short_name,threeLetterCode:e.three_letter_code,type:"pair",players:[t,o]}}else return{id:e.id,name:e.name,shortName:e.short_name,threeLetterCode:e.three_letter_code,type:"national",country:e.details?.[0]?.country?{id:e.details[0].country.id,name:e.details[0].country.name}:void 0,gender:e.details?.[0]?.gender}}function be(e){return{kickoffTime:new Date(e.scheduled_start_time),phaseStartedAt:e.started_at?new Date(e.started_at):void 0,finishedAt:e.finished_at?new Date(e.finished_at):void 0}}function Le(e){if(!e.tournament)return;const t=e.tournament;return{id:t.competition?.id??t.id,name:t.competition?.name??t.name,slug:t.competition?.slug??t.slug,type:"TOURNAMENT",gender:t.gender,region:"INTERNATIONAL",country:t.country?{id:t.country.id,name:t.country.name}:void 0}}function Ge(e){if(!e.results||e.results.length===0)return;const t=e.results.filter(i=>/^SET_\d+$/i.test(i.type.code));if(t.length===0)return;const o=[];let n=0,s=0;for(const i of t){const r=i.values.find(m=>m.position==="1"),a=i.values.find(m=>m.position==="2");if(!r||!a||r.value==null||a.value==null)continue;o.push({competitorOne:r.value,competitorTwo:a.value});const d=parseInt(r.value),l=parseInt(a.value);!isNaN(d)&&!isNaN(l)&&(d>l&&n++,l>d&&s++)}if(o.length!==0)return{competitorOne:String(n),competitorTwo:String(s),breakdown:{total:{competitorOne:String(n),competitorTwo:String(s)},periods:o}}}function De(e){const t=e.participants.find(o=>o.winner==="YES");if(t)return{competitorId:t.id}}function Ie(e){const t=e.participants.sort((o,n)=>o.position-n.position);return{id:e.id,slug:e.slug,status:Ee(e.status),timing:be(e),competitorOne:J(t[0]),competitorTwo:J(t[1]),competition:Le(e),round:e.round?{id:e.round.id,key:e.round.uuid,name:e.round.name,type:"REGULAR",providerRef:u.toProviderRefArray(e.round.uuid)}:void 0,score:Ge(e),winner:De(e),coverage:e.coverage?.type==="NOT_LIVE"?"UNKNOWN":e.coverage?.type,metadata:{matchType:e.type,bestOfSets:e.best_of_sets,surface:e.tournament?.surface,indoorOutdoor:e.tournament?.indoor_outdoor},providerRef:[{provider:"sportal365-tennis",id:e.id}]}}async function ke(e,t){const o=t||u.getConfig(),{sportal365Sports:n}=o;return(await Pe.get({path:"/matches/livescore",params:{date:e?.date,utc_offset:e?.utcOffset?.toString(),offset:"0",limit:"1000",type:e?.type,gender:e?.gender,status_type:e?.statusType,competition_list:e?.competitionList,odd_client:e?.oddClient??n?.oddClient,odd_type:e?.oddType,market_types:e?.marketTypes,language_code:e?.languageCode??n?.languageCode??"en"},headers:{"Accept-Language":e?.languageCode??n?.languageCode??"en"},next:e?.next,config:o})).matches.map(Ie)}const He=u.createHttpClient(u.SPORTAL365_SPORTS_SEARCH_DOMAIN);function M(e){return{language:e.language,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0}}function O(e){if(!(!e||!e.url))return{url:e.url}}function b(e){if(e)return{id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,providerRef:e.id}}function j(e){return{entityType:"team",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:b(e.country),gender:e.gender,competitionIds:e.competition_ids,type:e.type,national:e.national,undecided:e.undecided,providerRef:e.id}}function Z(e){return{entityType:"city",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:b(e.country),providerRef:e.id}}function Ue(e){return{entityType:"horse",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:b(e.country),gender:e.gender,providerRef:e.id}}function Be(e){return{entityType:"player",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:b(e.country),gender:e.gender,birthdate:e.birthdate??void 0,position:e.position??void 0,providerRef:e.id}}function $e(e){return{entityType:"coach",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:b(e.country),gender:e.gender,birthdate:e.birthdate??void 0,providerRef:e.id}}function xe(e){return{entityType:"referee",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:b(e.country),gender:e.gender,birthdate:e.birthdate??void 0,providerRef:e.id}}function We(e){return{entityType:"venue",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:b(e.country),city:e.city?Z(e.city):void 0,providerRef:e.id}}function qe(e){return{entityType:e.entity_type,id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:b(e.country),gender:e.gender,type:e.type??void 0,region:e.region??void 0,providerRef:e.id}}function Ve(e){return{entityType:"match",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,competitionId:e.competition_id??void 0,startTime:e.start_time??void 0,homeTeam:e.home_team?j(e.home_team):void 0,awayTeam:e.away_team?j(e.away_team):void 0,providerRef:e.id}}function je(e){return{entityType:"country",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(M),displayAsset:O(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,providerRef:e.id}}function Ye(e){switch(e.entity_type){case"team":return j(e);case"city":return Z(e);case"horse":return Ue(e);case"player":return Be(e);case"coach":return $e(e);case"referee":return xe(e);case"venue":return We(e);case"tournament":case"competition":return qe(e);case"match":return Ve(e);case"country":return je(e);default:{const t=e;throw new Error(`Unknown entity type: ${t.entity_type}`)}}}async function Ke(e={},t){const o=t??u.getConfig(),n={};e.name&&(n.name=e.name),e.entityTypes&&e.entityTypes.length>0&&(n.entity_type=e.entityTypes.join(",")),e.sports&&e.sports.length>0&&(n.sport=e.sports.join(",")),e.eventStartTime&&(n.event_start_time=e.eventStartTime),e.ids&&e.ids.length>0&&(n.ids=e.ids.join(",")),e.competitionIds&&e.competitionIds.length>0&&(n.competition_ids=e.competitionIds.join(",")),e.domain&&(n.domain=e.domain),e.inputLanguage&&(n.input_language=e.inputLanguage),e.translationLanguage&&(n.translation_language=e.translationLanguage),e.limit!==void 0&&(n.limit=e.limit.toString()),e.offset!==void 0&&(n.offset=e.offset.toString());const s=await He.get({path:"/suggest",params:n,next:e.next,config:o});return!s.results||s.results.length===0?{results:[],query:e.name}:{results:s.results.map(Ye),query:e.name}}const ze=u.createHttpClient(u.SPORTAL365_STATISTICS_DOMAIN);function Je(e,t){return{teamId:e.id,teamName:e.name,seasonId:t,statistics:e.statistics.map(o=>({key:o.id,value:o.value,label:o.name}))}}async function Qe(e,t){const o=t||u.getConfig(),n=e.next??{revalidate:600},s=await ze.get({path:"/statistics/aggregate",params:{participant_ids:e.teamId,season_ids:e.seasonId,participant_type:"TEAM"},next:n,config:o});if(!s.data||s.data.length===0)throw new Error(`No statistics found for team ${e.teamId} in season ${e.seasonId}`);return Je(s.data[0],e.seasonId)}function Xe(e){const t=e.replace(/\/$/,"");function o(n){return`${t}${n}`}return{async get(n){const s=n.config||u.getConfig(),{fansUnited:i}=s;if(!i)throw new Error("Fans United configuration is missing. Add 'fansUnited' with 'apiKey' and 'clientId' to your config.");if(!i.apiKey||!i.clientId)throw new Error("Fans United configuration requires both 'apiKey' and 'clientId'");const r=new URL(o(n.path));if(r.searchParams.set("key",i.apiKey),r.searchParams.set("client_id",i.clientId),n.params)for(const[m,c]of Object.entries(n.params))c!==void 0&&(Array.isArray(c)?c.length>0&&r.searchParams.set(m,c.join(",")):r.searchParams.set(m,c));const a=3e4,d=new URL(r.toString());d.searchParams.delete("key"),d.searchParams.delete("client_id"),console.log("🔗 FansUnited API URL:",d.toString());const l=await fetch(r.toString(),{method:"GET",headers:{Accept:"application/json","Content-Type":"application/json",...n.headers},signal:AbortSignal.timeout(a),...n.next&&{next:n.next}});if(!l.ok){let m=`Fans United API error: ${l.status} ${l.statusText}`;try{const c=await l.text();c&&(m+=` - ${c}`)}catch(c){console.error("[Fans United HTTP] Failed to read error response body:",{error:c instanceof Error?c.message:String(c),status:l.status,statusText:l.statusText})}throw new Error(m)}return l.json()}}}const Ze="https://football.fansunitedapi.com",E=Xe(Ze);function we(e){return{id:String(e.id),name:e.name,active:e.active,providerRef:[{provider:"fansunited",id:String(e.id)}]}}function et(e){const t={id:String(e.id),name:e.name,shortName:e.short_name,slug:e.slug,type:e.type||"LEAGUE",region:e.region,gender:e.gender,providerRef:[{provider:"fansunited",id:String(e.id)}]};return e.country&&(t.country={id:String(e.country.id),name:e.country.name,code:e.country.code,flag:e.country.assets?.flag,providerRef:[{provider:"fansunited",id:String(e.country.id)}]}),e.assets?.logo&&(t.assets={logo:e.assets.logo}),e.seasons&&e.seasons.length>0&&(t.seasons=e.seasons.map(we)),e.current_season&&(t.season={id:String(e.current_season.id),name:e.current_season.name,status:e.current_season.active?"ACTIVE":"INACTIVE"}),t}function tt(e){return e.map(et)}async function ot(e,t){const o={};e?.lang?o.lang=e.lang:o.lang="EN",e?.sortField&&(o.sort_field=e.sortField),e?.sortOrder&&(o.sort_order=e.sortOrder),e?.page!==void 0&&(o.page=String(e.page)),e?.perPage!==void 0&&(o.per_page=String(e.perPage)),e?.countryId!==void 0&&(o.country_id=String(e.countryId)),e?.active!==void 0&&(o.active=e.active?"1":"0");const n=await E.get({path:"/v1/competitions",params:o,config:t,next:e?.next}),s=n.data.map(l=>l.id),i=new Set(s);s.length!==i.size&&console.warn("⚠️ API returned duplicate competitions!");const r=tt(n.data),a=new Set,d=r.filter(l=>a.has(l.id)?!1:(a.add(l.id),!0));return r.length!==d.length&&console.warn(`Removed ${r.length-d.length} duplicate competitions`),d}function nt(e){return{id:e.id,name:e.name,code:e.country_code,assets:e.assets?.flag?{flag:e.assets.flag}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function st(e){return{id:e.id,name:e.name,type:e.type?.toUpperCase()||"LEAGUE",gender:e.gender?.toUpperCase(),country:e.country?nt(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function it(e){return st(e.data)}async function rt(e,t,o){const n=o||u.getConfig(),s={};t?.lang&&(s.lang=t.lang);const i=await E.get({path:`/v1/competitions/${e}`,params:s,next:t?.next,config:n});return it(i)}function at(e){return{id:e.id,name:e.name,code:e.country_code,flag:e.assets?.flag,providerRef:[{provider:"fansunited",id:e.id}]}}function w(e){return{id:e.id,name:e.name,shortName:e.short_name||void 0,threeLetterCode:e.code,type:e.national?"national":"club",gender:e.gender?e.gender.toUpperCase():void 0,country:e.country?at(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,metadata:e.colors?{shirtColors:e.colors.primary?[{type:"home",colorCode:e.colors.primary}]:void 0}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function ct(e){return w(e.data)}function lt(e){return e.data.map(w)}async function dt(e,t,o){const n=o||u.getConfig(),s={};t?.lang&&(s.lang=t.lang);const i=await E.get({path:`/v1/teams/${e}`,params:s,next:t?.next,config:n});return ct(i)}async function ut(e,t){const o=t||u.getConfig(),n={};e?.lang&&(n.lang=e.lang),e?.teamIds&&(n.team_ids=e.teamIds),e?.countryId&&(n.country_id=e.countryId),e?.name&&(n.name=e.name),e?.scope&&(n.scope=e.scope),e?.national!==void 0&&(n.national=String(e.national)),e?.gender&&(n.gender=e.gender),e?.limit!==void 0&&(n.limit=String(e.limit)),e?.page!==void 0&&(n.page=String(e.page)),e?.sortField&&(n.sort_field=e.sortField),e?.sortOrder&&(n.sort_order=e.sortOrder);const s=await E.get({path:"/v1/teams",params:n,next:e?.next,config:o});return lt(s)}function Y(e){return{id:e.id,name:e.name,code:e.country_code,flag:e.assets?.flag,providerRef:[{provider:"fansunited",id:e.id}]}}function mt(e){return{id:e.id,name:e.name,shortName:e.short_name??void 0,fullName:e.full_name??void 0,threeLetterCode:e.code,type:e.national?"national":"club",gender:e.gender?.toUpperCase(),country:e.country?Y(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function gt(e){return{id:e.id,name:e.name,type:e.type?.toUpperCase()||"LEAGUE",gender:e.gender?.toUpperCase(),country:e.country?Y(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function ee(e){return{type:"player",id:e.id,name:e.name,position:e.position,birthdate:e.birth_date,country:e.country?Y(e.country):void 0,assets:e.assets?.headshot?{photo:e.assets.headshot}:void 0,teams:e.teams?.map(mt),competitions:e.competitions?.map(gt),providerRef:[{provider:"fansunited",id:e.id}]}}function ft(e){return ee(e.data)}function pt(e){return e.data.map(ee)}async function yt(e,t,o){const n=o||u.getConfig(),s={};t?.lang&&(s.lang=t.lang);const i=await E.get({path:`/v1/players/${e}`,params:s,next:t?.next,config:n});return ft(i)}async function ht(e,t){const o=t||u.getConfig(),n={};e?.lang&&(n.lang=e.lang),e?.playerIds&&(n.player_ids=e.playerIds),e?.countryId&&(n.country_id=e.countryId),e?.name&&(n.name=e.name),e?.scope&&(n.scope=e.scope),e?.limit!==void 0&&(n.limit=String(e.limit)),e?.page!==void 0&&(n.page=String(e.page)),e?.sortField&&(n.sort_field=e.sortField),e?.sortOrder&&(n.sort_order=e.sortOrder);const s=await E.get({path:"/v1/players",params:n,next:e?.next,config:o});return pt(s)}async function Tt(e,t,o){const n=o||u.getConfig(),s={};t?.lang&&(s.lang=t.lang);const i=await E.get({path:`/v1/matches/${e}`,params:s,next:t?.next,config:n});return u.transformMatch(i)}async function vt(e,t){const o=t||u.getConfig(),n={};e?.lang&&(n.lang=e.lang),e?.competitions&&(n.competitions=e.competitions),e?.countries&&(n.countries=e.countries),e?.fromDate&&(n.from_date=e.fromDate),e?.toDate&&(n.to_date=e.toDate),e?.matches&&(n.matches=e.matches),e?.teams&&(n.teams=e.teams),e?.status&&(n.status=e.status),e?.limit!==void 0&&(n.limit=String(e.limit)),e?.page!==void 0&&(n.page=String(e.page)),e?.sortField&&(n.sort_field=e.sortField),e?.sortOrder&&(n.sort_order=e.sortOrder),e?.showDeleted!==void 0&&(n.show_deleted=e.showDeleted?"true":"false");const s=await E.get({path:"/v1/matches",params:n,next:e?.next,config:o});return u.transformMatches(s)}function K(e){return{id:e.id,name:e.name,code:e.country_code,flag:e.assets?.flag||void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function St(e){return{id:e.id,name:e.name,shortName:e.short_name||void 0,type:e.type||"LEAGUE",region:e.region,gender:e.gender?.toUpperCase(),country:e.country?K(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function _t(e){return{type:"player",id:e.id,name:e.name,position:e.position||void 0,gender:e.gender?.toUpperCase(),birthdate:e.birth_date||void 0,country:e.country?K(e.country):void 0,assets:e.assets?.headshot?{photo:e.assets.headshot}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function Ct(e){return{type:e.national?"national":"club",id:e.id,name:e.name,shortName:e.short_name||void 0,threeLetterCode:e.code||void 0,gender:e.gender?.toUpperCase(),country:e.country?K(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function V(e){switch(e.entity_type){case"competition":{const t=St(e);return{source:"FOOTBALL",entityType:"competition",entityId:e.id,entityData:t}}case"player":{const t=_t(e);return{source:"FOOTBALL",entityType:"player",entityId:e.id,entityData:t}}case"team":{const t=Ct(e);return{source:"FOOTBALL",entityType:"team",entityId:e.id,entityData:t}}case"venue":case"coach":return null;default:throw new Error(`Unknown entity type: ${e.entity_type}`)}}async function At(e,t){if(!e.query||e.query.trim()==="")return[];const o=t||u.getConfig(),n={q:e.query.trim()},i=(e.entityTypes&&e.entityTypes.length>0?e.entityTypes:["competition","team","player"]).map(d=>{switch(d){case"team":return"teams";case"player":return"players";case"competition":return"competitions";default:return d}});n.entities=i.join(","),e.lang&&(n.lang=e.lang),e.limit&&(n.limit=String(e.limit));const r=await E.get({path:"/v1/search",params:n,next:e.next,config:o}),a=[];return r.data&&(r.data.competitions&&r.data.competitions.forEach(d=>{const l=V({...d,entity_type:"competition"});l&&a.push(l)}),r.data.teams&&r.data.teams.forEach(d=>{const l=V({...d,entity_type:"team"});l&&a.push(l)}),r.data.players&&r.data.players.forEach(d=>{const l=V({...d,entity_type:"player"});l&&a.push(l)})),a}function Ft(e){return!e.seasons||e.seasons.length===0?void 0:e.seasons.find(o=>o.active)??e.seasons[0]}function Mt(e,t){const o=new Date,n=t.filter(s=>{const i=s.competitorOne.id===e||s.competitorTwo.id===e,r=s.status.type==="NOT_STARTED",a=new Date(s.timing.kickoffTime)>=o;return i&&r&&a});return n.sort((s,i)=>new Date(s.timing.kickoffTime).getTime()-new Date(i.timing.kickoffTime).getTime()),n[0]}function Ot(e,t){const o=new Date,n=t.filter(s=>{const i=s.competitorOne.id===e||s.competitorTwo.id===e,r=s.status.type==="FINISHED",a=new Date(s.timing.kickoffTime)<=o;return i&&r&&a});return n.sort((s,i)=>new Date(i.timing.kickoffTime).getTime()-new Date(s.timing.kickoffTime).getTime()),n[0]}function Rt(e,t){const o=new Date;return t.filter(s=>{const i=s.competitorOne.id===e||s.competitorTwo.id===e,r=s.status.type==="NOT_STARTED"||s.status.type==="LIVE",a=new Date(s.timing.kickoffTime)>=o||s.status.type==="LIVE";return i&&r&&a}).sort((s,i)=>new Date(s.timing.kickoffTime).getTime()-new Date(i.timing.kickoffTime).getTime())}function Nt(e,t){const o=new Date;return t.filter(s=>{const i=s.competitorOne.id===e||s.competitorTwo.id===e,r=s.status.type==="FINISHED",a=new Date(s.timing.kickoffTime)<=o;return i&&r&&a}).sort((s,i)=>new Date(i.timing.kickoffTime).getTime()-new Date(s.timing.kickoffTime).getTime())}function Pt(e,t,o){const n=o.filter(r=>r.status.type==="FINISHED"),s=o.filter(r=>r.status.type==="NOT_STARTED"||r.status.type==="POSTPONED"),i=t.entries.map(r=>{const a=r.competitor.id,d=n.filter(g=>g.competitorOne.id===e&&g.competitorTwo.id===a||g.competitorOne.id===a&&g.competitorTwo.id===e),l=s.filter(g=>g.competitorOne.id===e&&g.competitorTwo.id===a||g.competitorOne.id===a&&g.competitorTwo.id===e);let m,c;return d.forEach(g=>{const p=g.competitorOne.id===e,y=parseInt(g.score?.competitorOne??"0"),T=parseInt(g.score?.competitorTwo??"0"),R=p?y:T,C=p?T:y;let F;R>C?F="W":R===C?F="D":F="L";const N={result:F,score:`${y} - ${T}`,date:g.timing.kickoffTime,matchId:g.id,isUpcoming:!1};p?m=N:c=N}),l.forEach(g=>{const p=g.competitorOne.id===e;p&&!m?m={date:g.timing.kickoffTime,matchId:g.id,isUpcoming:!0}:!p&&!c&&(c={date:g.timing.kickoffTime,matchId:g.id,isUpcoming:!0})}),{rank:r.rank,teamId:r.competitor.id,teamName:r.competitor.name,teamShortName:r.competitor.shortName,teamLogo:r.competitor.logo,gamesPlayed:r.stats.played??0,points:r.stats.points??0,homeResult:m,awayResult:c}});return{teamId:e,rows:i}}function Et(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.goals??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.goals??0,i=n.seasonStatistics?.goals??0;if(i!==s)return i-s;const r=o.seasonStatistics?.assists??0;return(n.seasonStatistics?.assists??0)-r}).slice(0,t)}function bt(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.assists??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.assists??0,i=n.seasonStatistics?.assists??0;if(i!==s)return i-s;const r=o.seasonStatistics?.goals??0;return(n.seasonStatistics?.goals??0)-r}).slice(0,t)}function Lt(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.appearances??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.appearances??0,i=n.seasonStatistics?.appearances??0;if(i!==s)return i-s;const r=o.seasonStatistics?.minutes??0;return(n.seasonStatistics?.minutes??0)-r}).slice(0,t)}function Gt(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.minutes??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.minutes??0,i=n.seasonStatistics?.minutes??0;if(i!==s)return i-s;const r=o.seasonStatistics?.appearances??0;return(n.seasonStatistics?.appearances??0)-r}).slice(0,t)}function Dt(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.cleansheets??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.cleansheets??0,i=n.seasonStatistics?.cleansheets??0;if(i!==s)return i-s;const r=o.seasonStatistics?.appearances??0;return(n.seasonStatistics?.appearances??0)-r}).slice(0,t)}function It(e,t=10){return e.players.filter(o=>{const n=o.seasonStatistics?.yellowCards??0,s=o.seasonStatistics?.redCards??0;return n+s>0}).sort((o,n)=>{const s=o.seasonStatistics?.yellowCards??0,i=o.seasonStatistics?.redCards??0,r=n.seasonStatistics?.yellowCards??0,a=n.seasonStatistics?.redCards??0,d=s+i*3,l=r+a*3;return l!==d?l-d:a!==i?a-i:r-s}).slice(0,t)}function G(e){const t=new Map,o=new Map;return e.forEach(n=>{!n.mainEvents||n.mainEvents.length===0||n.mainEvents.forEach(s=>{if(s.primaryPlayer){const i=s.primaryPlayer.id;t.has(i)||t.set(i,{playerId:s.primaryPlayer.id,seasonId:"",teamId:"",goals:0,assists:0,yellowCards:0,redCards:0,appearances:0});const r=t.get(i);o.has(i)||o.set(i,new Set),o.get(i).add(n.id),(s.type==="GOAL"||s.type==="PENALTY_GOAL")&&(r.goals=(r.goals??0)+1),s.type==="YELLOW_CARD"&&(r.yellowCards=(r.yellowCards??0)+1),(s.type==="RED_CARD"||s.type==="YELLOW_RED_CARD")&&(r.redCards=(r.redCards??0)+1)}if(s.secondaryPlayer&&(s.type==="GOAL"||s.type==="PENALTY_GOAL")){const i=s.secondaryPlayer.id;t.has(i)||t.set(i,{playerId:s.secondaryPlayer.id,seasonId:"",teamId:"",goals:0,assists:0,yellowCards:0,redCards:0,appearances:0});const r=t.get(i);r.assists=(r.assists??0)+1,o.has(i)||o.set(i,new Set),o.get(i).add(n.id)}})}),o.forEach((n,s)=>{const i=t.get(s);i&&i.appearances!==void 0&&(i.appearances=n.size)}),t}function U(e){return Array.from(e.values()).map(t=>({...t,totalCards:(t.yellowCards??0)+(t.redCards??0)}))}function te(e,t=10){const o=G(e);return U(o).filter(s=>(s.goals??0)>0).sort((s,i)=>{const r=s.goals??0,a=i.goals??0;if(a!==r)return a-r;const d=s.assists??0;return(i.assists??0)-d}).slice(0,t)}function oe(e,t=10){const o=G(e);return U(o).filter(s=>(s.assists??0)>0).sort((s,i)=>{const r=s.assists??0,a=i.assists??0;if(a!==r)return a-r;const d=s.goals??0;return(i.goals??0)-d}).slice(0,t)}function ne(e,t=10){const o=G(e);return U(o).filter(s=>(s.totalCards??0)>0).sort((s,i)=>{const r=(s.yellowCards??0)+(s.redCards??0)*3,a=(i.yellowCards??0)+(i.redCards??0)*3;if(a!==r)return a-r;const d=s.redCards??0,l=i.redCards??0;if(l!==d)return l-d;const m=s.yellowCards??0;return(i.yellowCards??0)-m}).slice(0,t)}function se(e,t=10){const o=G(e);return U(o).filter(s=>(s.goals??0)+(s.assists??0)>0).sort((s,i)=>{const r=(s.goals??0)+(s.assists??0),a=(i.goals??0)+(i.assists??0);if(a!==r)return a-r;const d=s.goals??0,l=i.goals??0;if(l!==d)return l-d;const m=s.assists??0;return(i.assists??0)-m}).slice(0,t)}function ie(e){const t=G(e);return U(t).sort((n,s)=>{const i=n.appearances??0,r=s.appearances??0;if(r!==i)return r-i;const a=(n.goals??0)+(n.assists??0);return(s.goals??0)+(s.assists??0)-a})}function kt(e,t=10){return L.useMemo(()=>te(e,t),[e,t])}function Ht(e,t=10){return L.useMemo(()=>oe(e,t),[e,t])}function Ut(e,t=10){return L.useMemo(()=>ne(e,t),[e,t])}function Bt(e,t=10){return L.useMemo(()=>se(e,t),[e,t])}function $t(e){return L.useMemo(()=>ie(e),[e])}function re(e){return L.useMemo(()=>G(e),[e])}function xt(e,t){const o=re(e);return L.useMemo(()=>o.get(t),[o,t])}const ae=["GOAL","PENALTY_GOAL","OWN_GOAL"];function A(e,t){return t>0?e/t*100:0}function k(e,t){return t>0?e/t:0}function Wt(e,t=!1,o=2){return t?`${Math.round(e)}%`:Number.isInteger(e)?e.toString():e.toFixed(o)}function qt(e,t){const o=typeof e=="string"?parseFloat(e):e;if(isNaN(o)||t===0)return"0";const n=(o/t).toFixed(1);return`${o} (${n} avg)`}function Vt(e,t){const o=typeof e=="string"?parseFloat(e):e;return isNaN(o)||t===0?"0.0":(o/t).toFixed(1)}function jt(e){const t=parseFloat(e);return isNaN(t)?"0%":`${Math.round(t)}%`}function ce(e,t,o){if(e.status?.type!=="FINISHED"||!e.score)return null;const n=parseInt(e.score.competitorOne||"0"),s=parseInt(e.score.competitorTwo||"0"),i=o?n:s,r=o?s:n;let a=null,d=null;const l=e.score.breakdown?.halfTime;if(l){const p=parseInt(l.competitorOne||"0"),y=parseInt(l.competitorTwo||"0");a=o?p:y,d=o?y:p}const m=e.statistics;let c=null,g=null;if(m){const p=m.find?.(y=>y.type==="CORNERS");p&&(c=o?p.competitorOne:p.competitorTwo,g=o?p.competitorTwo:p.competitorOne)}return{goalsFor:i,goalsAgainst:r,halfTimeGoalsFor:a,halfTimeGoalsAgainst:d,cornersFor:c,cornersAgainst:g,isWin:i>r,isDraw:i===r,isLoss:i<r}}function q(e,t){return e.competitorOne.id===t}function le(e,t){return e.competitorTwo.id===t}function Yt(e,t){return q(e,t)||le(e,t)}function Kt(e){return e.status?.type==="FINISHED"}function zt(e,t){const o=q(e,t);return parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0")}function Jt(e,t){const o=q(e,t);return parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0")}function Qt(e,t,o){const n=e.filter(m=>{if(m.status?.type!=="FINISHED"||!m.score)return!1;const c=m.competitorOne.id===t||m.competitorTwo.id===t,g=m.competitorOne.id===o||m.competitorTwo.id===o;return c&&g});let s=0,i=0,r=0,a=0,d=0;n.forEach(m=>{const c=parseInt(m.score?.competitorOne||"0"),g=parseInt(m.score?.competitorTwo||"0"),p=m.competitorOne.id===t,y=p?c:g,T=p?g:c;a+=y,d+=T,y>T?s++:T>y?i++:r++});const l=n.length;return{totalMatches:l,homeTeamWins:s,awayTeamWins:i,draws:r,homeTeamGoals:a,awayTeamGoals:d,homeTeamWinPercentage:l>0?s/l*100:0,awayTeamWinPercentage:l>0?i/l*100:0,drawPercentage:l>0?r/l*100:0,homeTeamAvgGoals:l>0?a/l:0,awayTeamAvgGoals:l>0?d/l:0}}function Xt(e,t,o,n=5){return e.filter(i=>{if(i.status?.type!=="FINISHED"||!i.score)return!1;const r=i.competitorOne.id===t||i.competitorTwo.id===t,a=i.competitorOne.id===o||i.competitorTwo.id===o;return r&&a}).sort((i,r)=>new Date(r.timing.kickoffTime).getTime()-new Date(i.timing.kickoffTime).getTime()).slice(0,n).map(i=>{const r=parseInt(i.score?.competitorOne||"0"),a=parseInt(i.score?.competitorTwo||"0"),d=i.competitorOne.id===t,l=d?r:a,m=d?a:r;let c;return l>m?c="home":m>l?c="away":c="draw",{id:i.id,date:new Date(i.timing.kickoffTime).toLocaleDateString("en-GB",{day:"numeric",month:"short",year:"numeric"}),homeTeamName:i.competitorOne.name,awayTeamName:i.competitorTwo.name,homeTeamLogo:i.competitorOne.assets?.logo,awayTeamLogo:i.competitorTwo.assets?.logo,homeScore:r,awayScore:a,venue:i.venue?.name,winner:c}})}function Zt(e,t,o){return e.filter(n=>{const s=n.competitorOne.id===t,i=n.competitorTwo.id===t;return!s&&!i?!1:o==="home"?s:i}).map(n=>{const s=n.competitorOne.id===t;return ce(n,t,s)}).filter(n=>n!==null)}function Q(e,t,o,n){let s=0;for(const i of e){const r=i.competitorOne.id===t,a=i.competitorTwo.id===t;if(!r&&!a||o==="home"&&!r||o==="away"&&!a||i.status?.type!=="FINISHED")continue;const d=i.mainEvents;if(!d||!Array.isArray(d))continue;const l=d.filter(y=>y.type&&ae.includes(y.type)).sort((y,T)=>{const R=y.minute??0,C=T.minute??0;return R!==C?R-C:(y.injuryMinute??0)-(T.injuryMinute??0)});if(l.length===0)continue;const m=l[0],c=r?"ONE":"TWO",g=m.type==="OWN_GOAL";let p;g?p=m.competitorPosition!==c:p=m.competitorPosition===c,(n==="scored"&&p||n==="conceded"&&!p)&&s++}return s}function wt(e,t,o){let n=0;for(const s of e){const i=s.competitorOne.id===t,r=s.competitorTwo.id===t;if(!i&&!r||o==="home"&&!i||o==="away"&&!r||s.status?.type!=="FINISHED")continue;const a=s.mainEvents;a&&Array.isArray(a)&&n++}return n}function eo(e,t,o){const n=Zt(e,t,o),s=n.length;if(s===0)return{played:0,goalsForPerMatch:0,cleanSheets:0,wonToNil:0,scoringRate:0,scoredInBothHalves:0,scoredFirst:0,leadingAtHalfTime:0,goalsAgainstPerMatch:0,failedToScore:0,lostToNil:0,concedingRate:0,concededInBothHalves:0,concededFirst:0,losingAtHalfTime:0,avgCornersFor:0,avgCornersAgainst:0};const i=n.reduce((f,S)=>f+S.goalsFor,0),r=n.reduce((f,S)=>f+S.goalsAgainst,0),a=n.filter(f=>f.goalsAgainst===0).length,d=n.filter(f=>f.isWin&&f.goalsAgainst===0).length,l=n.filter(f=>f.goalsFor>0).length,m=n.filter(f=>f.goalsFor===0).length,c=n.filter(f=>f.isLoss&&f.goalsFor===0).length,g=n.filter(f=>f.goalsAgainst>0).length,p=n.filter(f=>f.halfTimeGoalsFor!==null),y=p.length,T=p.filter(f=>{const S=f.halfTimeGoalsFor,I=f.goalsFor-S;return S>0&&I>0}).length,R=Q(e,t,o,"scored"),C=wt(e,t,o),F=p.filter(f=>f.halfTimeGoalsFor>f.halfTimeGoalsAgainst).length,N=p.filter(f=>{const S=f.halfTimeGoalsAgainst,I=f.goalsAgainst-S;return S>0&&I>0}).length,B=Q(e,t,o,"conceded"),$=p.filter(f=>f.halfTimeGoalsAgainst>f.halfTimeGoalsFor).length,D=n.filter(f=>f.cornersFor!==null),x=D.reduce((f,S)=>f+(S.cornersFor||0),0),W=D.reduce((f,S)=>f+(S.cornersAgainst||0),0);return{played:s,goalsForPerMatch:k(i,s),cleanSheets:A(a,s),wonToNil:A(d,s),scoringRate:A(l,s),scoredInBothHalves:A(T,y),scoredFirst:A(R,C),leadingAtHalfTime:A(F,y),goalsAgainstPerMatch:k(r,s),failedToScore:A(m,s),lostToNil:A(c,s),concedingRate:A(g,s),concededInBothHalves:A(N,y),concededFirst:A(B,C),losingAtHalfTime:A($,y),avgCornersFor:k(x,D.length),avgCornersAgainst:k(W,D.length)}}function to(e,t){return e.filter(o=>o.status?.type!=="FINISHED"?!1:o.competitorOne.id===t||o.competitorTwo.id===t).map(o=>{const n=o.competitorOne.id===t,s=parseInt(o.score?.competitorOne||"0"),i=parseInt(o.score?.competitorTwo||"0"),r=s+i,a=o.periods;let d=null;if(a&&Array.isArray(a)){const l=a.find(m=>m.type==="FIRST_HALF"||m.type==="1ST_HALF");if(l?.score){const m=parseInt(l.score.competitorOne||"0"),c=parseInt(l.score.competitorTwo||"0");d=m+c}}return{totalGoals:r,halfTimeGoals:d,isHome:n}})}function h(e,t){return e.length===0?0:e.filter(n=>n>t).length/e.length*100}function oo(e,t){const o=to(e,t),n=o.filter(c=>c.isHome),s=o.filter(c=>!c.isHome),i=o.map(c=>c.totalGoals),r=n.map(c=>c.totalGoals),a=s.map(c=>c.totalGoals),d=o.filter(c=>c.halfTimeGoals!==null).map(c=>c.halfTimeGoals),l=n.filter(c=>c.halfTimeGoals!==null).map(c=>c.halfTimeGoals),m=s.filter(c=>c.halfTimeGoals!==null).map(c=>c.halfTimeGoals);return{over05:{home:h(r,.5),total:h(i,.5),away:h(a,.5)},over15:{home:h(r,1.5),total:h(i,1.5),away:h(a,1.5)},over25:{home:h(r,2.5),total:h(i,2.5),away:h(a,2.5)},over35:{home:h(r,3.5),total:h(i,3.5),away:h(a,3.5)},over45:{home:h(r,4.5),total:h(i,4.5),away:h(a,4.5)},over55:{home:h(r,5.5),total:h(i,5.5),away:h(a,5.5)},over05HT:{home:h(l,.5),total:h(d,.5),away:h(m,.5)},over15HT:{home:h(l,1.5),total:h(d,1.5),away:h(m,1.5)},over25HT:{home:h(l,2.5),total:h(d,2.5),away:h(m,2.5)}}}function de(e,t){const o=e.competitorOne.id===t,n=e.competitorTwo.id===t;if(!o&&!n||!e.score)return null;const s=parseInt(o?e.score.competitorOne||"0":e.score.competitorTwo||"0"),i=parseInt(o?e.score.competitorTwo||"0":e.score.competitorOne||"0");let r;return s>i?r="W":s<i?r="L":r="D",{result:{score:`${s}:${i}`,result:r,isHome:o},isHome:o}}function no(e,t,o,n,s,i){const r=t?.entries.find(P=>P.competitor.id===e),a=o?.entries.find(P=>P.competitor.id===e),d=n?.entries.find(P=>P.competitor.id===e),l=s?.entries.find(P=>P.competitor.id===e),m=i?.entries.find(P=>P.competitor.id===e);if(!r)return null;const c=a?.stats?.goalsFor??0,g=d?.stats?.goalsFor??0,p=r?.stats?.goalsFor??0,y=l?.stats?.goalsAgainst??0,T=m?.stats?.goalsAgainst??0,R=r?.stats?.goalsAgainst??0,C=a?.stats?.played??0,F=d?.stats?.played??0,N=r?.stats?.played??0,B=N>0?p/N:0,$=N>0?R/N:0,D=B+$,x=C>0?c/C:0,W=F>0?g/F:0,f=C>0?y/C:0,S=F>0?T/F:0,I=x+f,ue=W+S;return{homeGoals:c,totalGoals:p,awayGoals:g,homeGamesPlayed:C,awayGamesPlayed:F,totalGamesPlayed:N,homeGoalsConceded:y,totalGoalsConceded:R,awayGoalsConceded:T,gfPerMatch:B,gaPerMatch:$,gfGaPerMatch:D,homeGfPerMatch:x,awayGfPerMatch:W,homeGaPerMatch:f,awayGaPerMatch:S,homeGfGaPerMatch:I,awayGfGaPerMatch:ue}}function _(e,t,o,n){const s=e.filter(r=>{const a=r.competitorOne.id===t,d=r.competitorTwo.id===t;return!(!a&&!d||r.status?.type!=="FINISHED"||n==="home"&&!a||n==="away"&&!d)}).sort((r,a)=>new Date(a.timing.kickoffTime).getTime()-new Date(r.timing.kickoffTime).getTime());if(s.length===0)return null;let i=0;for(const r of s){const a=r.competitorOne.id===t;if(o(r,t,a))i++;else break}return i>0?i:null}const v={win:(e,t,o)=>{const n=parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0"),s=parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0");return n>s},draw:e=>e.score?.competitorOne===e.score?.competitorTwo,loss:(e,t,o)=>{const n=parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0"),s=parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0");return n<s},noWin:(e,t,o)=>!v.win(e,t,o),noDraw:e=>!v.draw(e),noDefeat:(e,t,o)=>!v.loss(e,t,o),scored:(e,t,o)=>parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0")>=1,conceded:(e,t,o)=>parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0")>=1,noGoalScored:(e,t,o)=>!v.scored(e,t,o),noGoalConceded:(e,t,o)=>!v.conceded(e,t,o),over25:e=>parseInt(e.score?.competitorOne||"0")+parseInt(e.score?.competitorTwo||"0")>2,under25:e=>parseInt(e.score?.competitorOne||"0")+parseInt(e.score?.competitorTwo||"0")<3,scoredTwice:(e,t,o)=>parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0")>=2,concededTwice:(e,t,o)=>parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0")>=2};function H(e,t,o){return{win:_(e,t,v.win,o),draw:_(e,t,v.draw,o),loss:_(e,t,v.loss,o),noWin:_(e,t,v.noWin,o),noDraw:_(e,t,v.noDraw,o),noDefeat:_(e,t,v.noDefeat,o),scored:_(e,t,v.scored,o),conceded:_(e,t,v.conceded,o),noGoalScored:_(e,t,v.noGoalScored,o),noGoalConceded:_(e,t,v.noGoalConceded,o),over25:_(e,t,v.over25,o),under25:_(e,t,v.under25,o),scoredTwice:_(e,t,v.scoredTwice,o),concededTwice:_(e,t,v.concededTwice,o)}}function so(e,t,o){const n=H(e,t,"home"),s=H(e,t),i=H(e,o,"away"),r=H(e,o);return[{label:"Consecutive wins",homeTeam:{home:n.win,total:s.win},awayTeam:{total:r.win,home:i.win},colorType:"neutral"},{label:"Consecutive draws",homeTeam:{home:n.draw,total:s.draw},awayTeam:{total:r.draw,home:i.draw},colorType:"neutral"},{label:"Consecutive defeats",homeTeam:{home:n.loss,total:s.loss},awayTeam:{total:r.loss,home:i.loss},colorType:"neutral"},{label:"No win",homeTeam:{home:n.noWin,total:s.noWin},awayTeam:{total:r.noWin,home:i.noWin},colorType:"negative"},{label:"No draw",homeTeam:{home:n.noDraw,total:s.noDraw},awayTeam:{total:r.noDraw,home:i.noDraw},colorType:"neutral"},{label:"No defeat",homeTeam:{home:n.noDefeat,total:s.noDefeat},awayTeam:{total:r.noDefeat,home:i.noDefeat},colorType:"positive"},{label:"Scored at least once",homeTeam:{home:n.scored,total:s.scored},awayTeam:{total:r.scored,home:i.scored},colorType:"positive"},{label:"Conceded at least once",homeTeam:{home:n.conceded,total:s.conceded},awayTeam:{total:r.conceded,home:i.conceded},colorType:"negative"},{label:"No goal scored",homeTeam:{home:n.noGoalScored,total:s.noGoalScored},awayTeam:{total:r.noGoalScored,home:i.noGoalScored},colorType:"neutral"},{label:"No goal conceded",homeTeam:{home:n.noGoalConceded,total:s.noGoalConceded},awayTeam:{total:r.noGoalConceded,home:i.noGoalConceded},colorType:"neutral"},{label:"GS + GC over 2.5",homeTeam:{home:n.over25,total:s.over25},awayTeam:{total:r.over25,home:i.over25},colorType:"neutral"},{label:"GS + GC under 2.5",homeTeam:{home:n.under25,total:s.under25},awayTeam:{total:r.under25,home:i.under25},colorType:"neutral"},{label:"Scored at least twice",homeTeam:{home:n.scoredTwice,total:s.scoredTwice},awayTeam:{total:r.scoredTwice,home:i.scoredTwice},colorType:"positive"},{label:"Conceded at least twice",homeTeam:{home:n.concededTwice,total:s.concededTwice},awayTeam:{total:r.concededTwice,home:i.concededTwice},colorType:"negative"}]}function X(e,t){const o=new Map;return e.forEach(n=>{if(n.status?.type!=="FINISHED")return;const s=de(n,t);if(!s)return;const i=s.isHome?n.competitorTwo.id:n.competitorOne.id,r=s.isHome?n.competitorTwo:n.competitorOne,a=o.get(i)||{opponentId:i,opponentName:r.name,opponentLogo:r.assets?.logo};s.isHome?a.homeResult=s.result:a.awayResult=s.result,o.set(i,a)}),o}function io(e,t,o,n,s,i,r){const a=X(e,t),d=X(e,o),l=new Set([...a.keys(),...d.keys(),t,o]),m=[];return l.forEach(c=>{const g=a.get(c),p=d.get(c);if(!g&&!p&&c!==t&&c!==o)return;let y,T;c===t?(y=n,T=i):c===o?(y=s,T=r):(y=g?.opponentName||p?.opponentName||"",T=g?.opponentLogo||p?.opponentLogo),m.push({opponentId:c,opponentName:y,opponentLogo:T,homeTeamHome:g?.homeResult,homeTeamAway:g?.awayResult,awayTeamHome:p?.homeResult,awayTeamAway:p?.awayResult,isHomeTeamRow:c===t,isAwayTeamRow:c===o})}),m.sort((c,g)=>c.isHomeTeamRow?-1:g.isHomeTeamRow?1:c.isAwayTeamRow?-1:g.isAwayTeamRow?1:c.opponentName.localeCompare(g.opponentName))}exports.addProviderRef=u.addProviderRef;exports.getBatchMatchOdds=u.getBatchMatchOdds;exports.getConfig=u.getConfig;exports.getFootballCompetition=u.getFootballCompetition;exports.getFootballLivescore=u.getFootballLivescore;exports.getFootballMatch=u.getFootballMatch;exports.getFootballMatchCommentary=u.getFootballMatchCommentary;exports.getFootballMatchEvents=u.getFootballMatchEvents;exports.getFootballMatchLineups=u.getFootballMatchLineups;exports.getFootballMatchOdds=u.getFootballMatchOdds;exports.getFootballMatchStatistics=u.getFootballMatchStatistics;exports.getFootballMatches=u.getFootballMatches;exports.getFootballPlayerSeasonStatistics=u.getFootballPlayerSeasonStatistics;exports.getFootballSeasonDetails=u.getFootballSeasonDetails;exports.getFootballStandings=u.getFootballStandings;exports.getFootballTeam=u.getFootballTeam;exports.getFootballTeamSquad=u.getFootballTeamSquad;exports.getLeaderboardMatches=u.getLeaderboardMatches;exports.getLeaderboardTeamMatches=u.getLeaderboardTeamMatches;exports.getLeaderboardTemplate=u.getLeaderboardTemplate;exports.getProviderRefId=u.getProviderRefId;exports.isConfigured=u.isConfigured;exports.setConfig=u.setConfig;exports.toProviderRefArray=u.toProviderRefArray;exports.GOAL_EVENT_TYPES=ae;exports.aggregatePlayerStatisticsFromMatches=G;exports.analyzeMatch=ce;exports.calcAverage=k;exports.calcPercentage=A;exports.calculateH2HStats=Qt;exports.calculateStreak=_;exports.formatAsAverage=Vt;exports.formatPossessionPercentage=jt;exports.formatStatValue=Wt;exports.formatWithAverage=qt;exports.getActiveSeason=Ft;exports.getAllPlayerStatisticsFromMatches=ie;exports.getBasketballLivescore=Ne;exports.getFansUnitedFootballCompetition=rt;exports.getFansUnitedFootballCompetitions=ot;exports.getFansUnitedFootballMatch=Tt;exports.getFansUnitedFootballMatches=vt;exports.getFansUnitedFootballPlayer=yt;exports.getFansUnitedFootballPlayers=ht;exports.getFansUnitedFootballSearch=At;exports.getFansUnitedFootballTeam=dt;exports.getFansUnitedFootballTeams=ut;exports.getMatchResult=de;exports.getMostCardedPlayersFromMatches=ne;exports.getOpponentScore=Jt;exports.getRecentH2HMeetings=Xt;exports.getTeamFinishedMatches=Nt;exports.getTeamGoalStats=no;exports.getTeamHomeAwayStats=eo;exports.getTeamMostDecorated=It;exports.getTeamNextMatch=Mt;exports.getTeamOverUnderStats=oo;exports.getTeamPreviousMatch=Ot;exports.getTeamResultsTable=Pt;exports.getTeamScore=zt;exports.getTeamSeasonStatistics=Qe;exports.getTeamStreaks=H;exports.getTeamStreaksComparison=so;exports.getTeamTopAppearances=Lt;exports.getTeamTopAssisters=bt;exports.getTeamTopCleanSheets=Dt;exports.getTeamTopMinutesPlayed=Gt;exports.getTeamTopScorers=Et;exports.getTeamUpcomingMatches=Rt;exports.getTeamsCommonOpponents=io;exports.getTennisLivescore=ke;exports.getTopAssistersFromMatches=oe;exports.getTopGoalContributorsFromMatches=se;exports.getTopScorersFromMatches=te;exports.isMatchFinished=Kt;exports.isTeamAway=le;exports.isTeamHome=q;exports.isTeamInMatch=Yt;exports.search=Ke;exports.searchFootball=ve;exports.streakFilters=v;exports.useAllPlayerStatisticsFromMatches=$t;exports.useMostCardedPlayersFromMatches=Ut;exports.usePlayerStatistics=xt;exports.usePlayerStatisticsMap=re;exports.useTopAssistersFromMatches=Ht;exports.useTopGoalContributorsFromMatches=Bt;exports.useTopScorersFromMatches=kt;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./matches-B-ZxR-B9.cjs"),L=require("react");function me(e){return{entityType:"tournament",id:e.id.toString(),name:e.name,slug:e.slug,gender:e.gender,type:e.type,region:e.region,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_logo?{logo:e.url_logo}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function ge(e){return{entityType:"player",id:e.id.toString(),name:e.name,slug:e.slug,position:e.position,gender:e.gender,birthdate:e.birthdate,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_thumb?{photo:e.url_thumb}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function fe(e){return{entityType:"team",id:e.id.toString(),name:e.name,slug:e.slug,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,type:e.type==="national"?"national":"club",gender:e.gender,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_logo?{logo:e.url_logo}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function pe(e){return{entityType:"president",id:e.id.toString(),name:e.name,slug:e.slug,birthdate:e.birthdate??void 0,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_thumb?{photo:e.url_thumb}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function ye(e){return{entityType:"venue",id:e.id.toString(),name:e.name,slug:e.slug,city:{id:e.city.id.toString(),name:e.city.name,country:{id:e.city.country.id.toString(),name:e.city.country.name,code:void 0,flag:e.city.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.city.country.uuid)},providerRef:u.toProviderRefArray(e.city.uuid)},country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},profile:{latitude:e.profile.lat,longitude:e.profile.lng,capacity:e.profile.capacity},assets:e.url_thumb?{image:e.url_thumb}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function he(e){return{entityType:"coach",id:e.id.toString(),name:e.name,slug:e.slug,birthdate:e.birthdate??void 0,country:{id:e.country.id.toString(),name:e.country.name,code:void 0,flag:e.country.url_flag??void 0,providerRef:u.toProviderRefArray(e.country.uuid)},assets:e.url_thumb?{photo:e.url_thumb}:void 0,providerRef:u.toProviderRefArray(e.uuid)}}function Te(e){switch(e.entity_type){case"tournament":return me(e);case"player":return ge(e);case"team":return fe(e);case"president":return pe(e);case"venue":return ye(e);case"coach":return he(e);default:throw new Error(`Unknown entity type: ${e.entity_type}`)}}async function ve(e,t){if(!e.query||e.query.trim()==="")return{results:[],query:e.query||""};const o=t||u.getConfig(),{sportal365Sports:n}=o,s=e.entityTypes&&e.entityTypes.length>0?e.entityTypes:["tournament","player","team","president","venue","coach"],i=await u.footballHttp.get({path:"/search",params:{query:e.query.trim(),entity_type:s.join(","),language_code:e.languageCode??n?.languageCode??"en"},headers:{"Accept-Language":e.languageCode??n?.languageCode??"en"},next:e.next,config:o});return!i||i.length===0?{results:[],query:e.query}:{results:i.map(Te),query:e.query}}const Se=u.createHttpClient(u.SPORTAL365_BASKETBALL_DOMAIN);function _e(e){const t={FINISHED:"finished",NOT_STARTED:"not_started",LIVE:"live",INTERRUPTED:"interrupted",CANCELLED:"cancelled",POSTPONED:"postponed",UNKNOWN:"not_started"},o=e.type.toUpperCase();return{code:t[o]??"not_started",name:e.name,shortName:e.short_name,type:o}}function z(e){return{id:e.id,name:e.name,threeLetterCode:e.three_letter_code,slug:e.slug,type:e.type==="national"?"national":"club",gender:e.gender}}function Ce(e){return{kickoffTime:new Date(e.game_time),currentMinute:e.minute}}function Ae(e){if(!e.season?.competition)return;const t=e.season.competition;return{id:t.id,name:t.name,slug:t.slug,type:"LEAGUE",gender:t.gender,region:t.region,country:t.country?{id:t.country.id,name:t.country.name}:void 0,season:{id:e.season.id,name:e.season.name,status:e.season.status},stage:e.stage?{id:e.stage.id,name:e.stage.name,type:e.stage.type}:void 0}}function Fe(e){if(e)return{id:e.id,name:e.name,slug:e.slug}}function Oe(e){if(!e||e.length===0)return;console.log("[livescore:basketball] raw score entries:",JSON.stringify(e,null,2));const t=e.filter(i=>i.result_type.category==="PERIOD");if(t.length===0){const i=e[0];return console.warn("[livescore:basketball] no PERIOD entries found in score, falling back to first entry:",JSON.stringify(i,null,2)),{competitorOne:String(i.home),competitorTwo:String(i.away),breakdown:{total:{competitorOne:String(i.home),competitorTwo:String(i.away)},periods:[]}}}let o=0,n=0;const s=[];for(const i of t)o+=i.home,n+=i.away,s.push({competitorOne:String(i.home),competitorTwo:String(i.away)});return{competitorOne:String(o),competitorTwo:String(n),breakdown:{total:{competitorOne:String(o),competitorTwo:String(n)},periods:s}}}function Me(e){if(e.winner)return{competitorId:e.winner.id}}function Re(e){return{id:e.id,slug:e.slug,status:_e(e.status),timing:Ce(e),competitorOne:z(e.home_team),competitorTwo:z(e.away_team),competition:Ae(e),round:e.round?{id:e.round.id,key:e.round.uuid,name:e.round.name,type:"REGULAR",providerRef:u.toProviderRefArray(e.round.uuid)}:void 0,venue:Fe(e.arena),score:Oe(e.score),winner:Me(e),coverage:e.coverage==="NOT_LIVE"?"UNKNOWN":e.coverage,providerRef:[{provider:"sportal365-basketball",id:e.id}]}}async function Ne(e,t){const o=t||u.getConfig(),{sportal365Sports:n}=o;return(await Se.get({path:"/games",params:{offset:"0",limit:"1000",competition_list:e?.competitionList,status_type:e?.statusTypes,odd_client:e?.oddClient??n?.oddClient,odd_type:e?.oddType,market_types:e?.marketTypes,language_code:e?.languageCode??n?.languageCode??"en"},headers:{"Accept-Language":e?.languageCode??n?.languageCode??"en"},next:e?.next,config:o})).games.map(Re)}const Pe=u.createHttpClient(u.SPORTAL365_TENNIS_DOMAIN);function be(e){const t={FINISHED:"finished",NOT_STARTED:"not_started",LIVE:"live",INTERRUPTED:"interrupted",CANCELLED:"cancelled",POSTPONED:"postponed"},o=e.type.toUpperCase();return{code:t[o]??"not_started",name:e.name,shortName:e.short_name,type:o}}function J(e){if(e.type==="PLAYER")return{id:e.id,name:e.name,shortName:e.short_name,threeLetterCode:e.three_letter_code,type:"player",country:e.details?.[0]?.country?{id:e.details[0].country.id,name:e.details[0].country.name}:void 0,gender:e.details?.[0]?.gender};if(e.type==="TEAM_DOUBLE"&&e.details&&e.details.length===2){const t={id:e.details[0].id,name:e.details[0].name,shortName:e.details[0].short_name,threeLetterCode:e.details[0].three_letter_code,type:"player",country:e.details[0].country?{id:e.details[0].country.id,name:e.details[0].country.name}:void 0,gender:e.details[0].gender},o={id:e.details[1].id,name:e.details[1].name,shortName:e.details[1].short_name,threeLetterCode:e.details[1].three_letter_code,type:"player",country:e.details[1].country?{id:e.details[1].country.id,name:e.details[1].country.name}:void 0,gender:e.details[1].gender};return{id:e.id,name:e.name,shortName:e.short_name,threeLetterCode:e.three_letter_code,type:"pair",players:[t,o]}}else return{id:e.id,name:e.name,shortName:e.short_name,threeLetterCode:e.three_letter_code,type:"national",country:e.details?.[0]?.country?{id:e.details[0].country.id,name:e.details[0].country.name}:void 0,gender:e.details?.[0]?.gender}}function Ee(e){return{kickoffTime:new Date(e.scheduled_start_time),phaseStartedAt:e.started_at?new Date(e.started_at):void 0,finishedAt:e.finished_at?new Date(e.finished_at):void 0}}function Le(e){if(!e.tournament)return;const t=e.tournament;return{id:t.competition?.id??t.id,name:t.competition?.name??t.name,slug:t.competition?.slug??t.slug,type:"TOURNAMENT",gender:t.gender,region:"INTERNATIONAL",country:t.country?{id:t.country.id,name:t.country.name}:void 0}}function De(e){if(!e.results||e.results.length===0)return;console.log("[livescore:tennis] raw results entries:",JSON.stringify(e.results,null,2));const t=e.results.filter(i=>/^SET_\d+$/i.test(i.type.code));if(t.length===0){console.warn("[livescore:tennis] no SET_n entries found in results, result_type codes:",e.results.map(i=>i.type.code));return}const o=[];let n=0,s=0;for(const i of t){const r=i.values.find(m=>m.position==="1"),a=i.values.find(m=>m.position==="2");if(!r||!a||r.value==null||a.value==null)continue;o.push({competitorOne:r.value,competitorTwo:a.value});const d=parseInt(r.value),l=parseInt(a.value);!isNaN(d)&&!isNaN(l)&&(d>l&&n++,l>d&&s++)}if(o.length!==0)return{competitorOne:String(n),competitorTwo:String(s),breakdown:{total:{competitorOne:String(n),competitorTwo:String(s)},periods:o}}}function Ge(e){const t=e.participants.find(o=>o.winner==="YES");if(t)return{competitorId:t.id}}function Ie(e){const t=e.participants.sort((o,n)=>o.position-n.position);return{id:e.id,slug:e.slug,status:be(e.status),timing:Ee(e),competitorOne:J(t[0]),competitorTwo:J(t[1]),competition:Le(e),round:e.round?{id:e.round.id,key:e.round.uuid,name:e.round.name,type:"REGULAR",providerRef:u.toProviderRefArray(e.round.uuid)}:void 0,score:De(e),winner:Ge(e),coverage:e.coverage?.type==="NOT_LIVE"?"UNKNOWN":e.coverage?.type,metadata:{matchType:e.type,bestOfSets:e.best_of_sets,surface:e.tournament?.surface,indoorOutdoor:e.tournament?.indoor_outdoor},providerRef:[{provider:"sportal365-tennis",id:e.id}]}}async function ke(e,t){const o=t||u.getConfig(),{sportal365Sports:n}=o;return(await Pe.get({path:"/matches/livescore",params:{date:e?.date,utc_offset:e?.utcOffset?.toString(),offset:"0",limit:"1000",type:e?.type,gender:e?.gender,status_type:e?.statusType,competition_list:e?.competitionList,odd_client:e?.oddClient??n?.oddClient,odd_type:e?.oddType,market_types:e?.marketTypes,language_code:e?.languageCode??n?.languageCode??"en"},headers:{"Accept-Language":e?.languageCode??n?.languageCode??"en"},next:e?.next,config:o})).matches.map(Ie)}const He=u.createHttpClient(u.SPORTAL365_SPORTS_SEARCH_DOMAIN);function O(e){return{language:e.language,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0}}function M(e){if(!(!e||!e.url))return{url:e.url}}function E(e){if(e)return{id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,providerRef:e.id}}function j(e){return{entityType:"team",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:E(e.country),gender:e.gender,competitionIds:e.competition_ids,type:e.type,national:e.national,undecided:e.undecided,providerRef:e.id}}function Z(e){return{entityType:"city",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:E(e.country),providerRef:e.id}}function Ue(e){return{entityType:"horse",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:E(e.country),gender:e.gender,providerRef:e.id}}function Be(e){return{entityType:"player",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:E(e.country),gender:e.gender,birthdate:e.birthdate??void 0,position:e.position??void 0,providerRef:e.id}}function $e(e){return{entityType:"coach",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:E(e.country),gender:e.gender,birthdate:e.birthdate??void 0,providerRef:e.id}}function xe(e){return{entityType:"referee",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:E(e.country),gender:e.gender,birthdate:e.birthdate??void 0,providerRef:e.id}}function We(e){return{entityType:"venue",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:E(e.country),city:e.city?Z(e.city):void 0,providerRef:e.id}}function qe(e){return{entityType:e.entity_type,id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,country:E(e.country),gender:e.gender,type:e.type??void 0,region:e.region??void 0,providerRef:e.id}}function Ve(e){return{entityType:"match",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,competitionId:e.competition_id??void 0,startTime:e.start_time??void 0,homeTeam:e.home_team?j(e.home_team):void 0,awayTeam:e.away_team?j(e.away_team):void 0,providerRef:e.id}}function je(e){return{entityType:"country",id:e.id,legacyId:e.legacy_id??void 0,name:e.name,shortName:e.short_name??void 0,threeLetterCode:e.three_letter_code??void 0,translations:e.translations.map(O),displayAsset:M(e.display_asset),slug:e.slug,tagScore:e.tag_score??void 0,sport:e.sport,providerRef:e.id}}function Ye(e){switch(e.entity_type){case"team":return j(e);case"city":return Z(e);case"horse":return Ue(e);case"player":return Be(e);case"coach":return $e(e);case"referee":return xe(e);case"venue":return We(e);case"tournament":case"competition":return qe(e);case"match":return Ve(e);case"country":return je(e);default:{const t=e;throw new Error(`Unknown entity type: ${t.entity_type}`)}}}async function Ke(e={},t){const o=t??u.getConfig(),n={};e.name&&(n.name=e.name),e.entityTypes&&e.entityTypes.length>0&&(n.entity_type=e.entityTypes.join(",")),e.sports&&e.sports.length>0&&(n.sport=e.sports.join(",")),e.eventStartTime&&(n.event_start_time=e.eventStartTime),e.ids&&e.ids.length>0&&(n.ids=e.ids.join(",")),e.competitionIds&&e.competitionIds.length>0&&(n.competition_ids=e.competitionIds.join(",")),e.domain&&(n.domain=e.domain),e.inputLanguage&&(n.input_language=e.inputLanguage),e.translationLanguage&&(n.translation_language=e.translationLanguage),e.limit!==void 0&&(n.limit=e.limit.toString()),e.offset!==void 0&&(n.offset=e.offset.toString());const s=await He.get({path:"/suggest",params:n,next:e.next,config:o});return!s.results||s.results.length===0?{results:[],query:e.name}:{results:s.results.map(Ye),query:e.name}}const ze=u.createHttpClient(u.SPORTAL365_STATISTICS_DOMAIN);function Je(e,t){return{teamId:e.id,teamName:e.name,seasonId:t,statistics:e.statistics.map(o=>({key:o.id,value:o.value,label:o.name}))}}async function Qe(e,t){const o=t||u.getConfig(),n=e.next??{revalidate:600},s=await ze.get({path:"/statistics/aggregate",params:{participant_ids:e.teamId,season_ids:e.seasonId,participant_type:"TEAM"},next:n,config:o});if(!s.data||s.data.length===0)throw new Error(`No statistics found for team ${e.teamId} in season ${e.seasonId}`);return Je(s.data[0],e.seasonId)}function Xe(e){const t=e.replace(/\/$/,"");function o(n){return`${t}${n}`}return{async get(n){const s=n.config||u.getConfig(),{fansUnited:i}=s;if(!i)throw new Error("Fans United configuration is missing. Add 'fansUnited' with 'apiKey' and 'clientId' to your config.");if(!i.apiKey||!i.clientId)throw new Error("Fans United configuration requires both 'apiKey' and 'clientId'");const r=new URL(o(n.path));if(r.searchParams.set("key",i.apiKey),r.searchParams.set("client_id",i.clientId),n.params)for(const[m,c]of Object.entries(n.params))c!==void 0&&(Array.isArray(c)?c.length>0&&r.searchParams.set(m,c.join(",")):r.searchParams.set(m,c));const a=3e4,d=new URL(r.toString());d.searchParams.delete("key"),d.searchParams.delete("client_id"),console.log("🔗 FansUnited API URL:",d.toString());const l=await fetch(r.toString(),{method:"GET",headers:{Accept:"application/json","Content-Type":"application/json",...n.headers},signal:AbortSignal.timeout(a),...n.next&&{next:n.next}});if(!l.ok){let m=`Fans United API error: ${l.status} ${l.statusText}`;try{const c=await l.text();c&&(m+=` - ${c}`)}catch(c){console.error("[Fans United HTTP] Failed to read error response body:",{error:c instanceof Error?c.message:String(c),status:l.status,statusText:l.statusText})}throw new Error(m)}return l.json()}}}const Ze="https://football.fansunitedapi.com",b=Xe(Ze);function we(e){return{id:String(e.id),name:e.name,active:e.active,providerRef:[{provider:"fansunited",id:String(e.id)}]}}function et(e){const t={id:String(e.id),name:e.name,shortName:e.short_name,slug:e.slug,type:e.type||"LEAGUE",region:e.region,gender:e.gender,providerRef:[{provider:"fansunited",id:String(e.id)}]};return e.country&&(t.country={id:String(e.country.id),name:e.country.name,code:e.country.code,flag:e.country.assets?.flag,providerRef:[{provider:"fansunited",id:String(e.country.id)}]}),e.assets?.logo&&(t.assets={logo:e.assets.logo}),e.seasons&&e.seasons.length>0&&(t.seasons=e.seasons.map(we)),e.current_season&&(t.season={id:String(e.current_season.id),name:e.current_season.name,status:e.current_season.active?"ACTIVE":"INACTIVE"}),t}function tt(e){return e.map(et)}async function ot(e,t){const o={};e?.lang?o.lang=e.lang:o.lang="EN",e?.sortField&&(o.sort_field=e.sortField),e?.sortOrder&&(o.sort_order=e.sortOrder),e?.page!==void 0&&(o.page=String(e.page)),e?.perPage!==void 0&&(o.per_page=String(e.perPage)),e?.countryId!==void 0&&(o.country_id=String(e.countryId)),e?.active!==void 0&&(o.active=e.active?"1":"0");const n=await b.get({path:"/v1/competitions",params:o,config:t,next:e?.next}),s=n.data.map(l=>l.id),i=new Set(s);s.length!==i.size&&console.warn("⚠️ API returned duplicate competitions!");const r=tt(n.data),a=new Set,d=r.filter(l=>a.has(l.id)?!1:(a.add(l.id),!0));return r.length!==d.length&&console.warn(`Removed ${r.length-d.length} duplicate competitions`),d}function nt(e){return{id:e.id,name:e.name,code:e.country_code,assets:e.assets?.flag?{flag:e.assets.flag}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function st(e){return{id:e.id,name:e.name,type:e.type?.toUpperCase()||"LEAGUE",gender:e.gender?.toUpperCase(),country:e.country?nt(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function it(e){return st(e.data)}async function rt(e,t,o){const n=o||u.getConfig(),s={};t?.lang&&(s.lang=t.lang);const i=await b.get({path:`/v1/competitions/${e}`,params:s,next:t?.next,config:n});return it(i)}function at(e){return{id:e.id,name:e.name,code:e.country_code,flag:e.assets?.flag,providerRef:[{provider:"fansunited",id:e.id}]}}function w(e){return{id:e.id,name:e.name,shortName:e.short_name||void 0,threeLetterCode:e.code,type:e.national?"national":"club",gender:e.gender?e.gender.toUpperCase():void 0,country:e.country?at(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,metadata:e.colors?{shirtColors:e.colors.primary?[{type:"home",colorCode:e.colors.primary}]:void 0}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function ct(e){return w(e.data)}function lt(e){return e.data.map(w)}async function dt(e,t,o){const n=o||u.getConfig(),s={};t?.lang&&(s.lang=t.lang);const i=await b.get({path:`/v1/teams/${e}`,params:s,next:t?.next,config:n});return ct(i)}async function ut(e,t){const o=t||u.getConfig(),n={};e?.lang&&(n.lang=e.lang),e?.teamIds&&(n.team_ids=e.teamIds),e?.countryId&&(n.country_id=e.countryId),e?.name&&(n.name=e.name),e?.scope&&(n.scope=e.scope),e?.national!==void 0&&(n.national=String(e.national)),e?.gender&&(n.gender=e.gender),e?.limit!==void 0&&(n.limit=String(e.limit)),e?.page!==void 0&&(n.page=String(e.page)),e?.sortField&&(n.sort_field=e.sortField),e?.sortOrder&&(n.sort_order=e.sortOrder);const s=await b.get({path:"/v1/teams",params:n,next:e?.next,config:o});return lt(s)}function Y(e){return{id:e.id,name:e.name,code:e.country_code,flag:e.assets?.flag,providerRef:[{provider:"fansunited",id:e.id}]}}function mt(e){return{id:e.id,name:e.name,shortName:e.short_name??void 0,fullName:e.full_name??void 0,threeLetterCode:e.code,type:e.national?"national":"club",gender:e.gender?.toUpperCase(),country:e.country?Y(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function gt(e){return{id:e.id,name:e.name,type:e.type?.toUpperCase()||"LEAGUE",gender:e.gender?.toUpperCase(),country:e.country?Y(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function ee(e){return{type:"player",id:e.id,name:e.name,position:e.position,birthdate:e.birth_date,country:e.country?Y(e.country):void 0,assets:e.assets?.headshot?{photo:e.assets.headshot}:void 0,teams:e.teams?.map(mt),competitions:e.competitions?.map(gt),providerRef:[{provider:"fansunited",id:e.id}]}}function ft(e){return ee(e.data)}function pt(e){return e.data.map(ee)}async function yt(e,t,o){const n=o||u.getConfig(),s={};t?.lang&&(s.lang=t.lang);const i=await b.get({path:`/v1/players/${e}`,params:s,next:t?.next,config:n});return ft(i)}async function ht(e,t){const o=t||u.getConfig(),n={};e?.lang&&(n.lang=e.lang),e?.playerIds&&(n.player_ids=e.playerIds),e?.countryId&&(n.country_id=e.countryId),e?.name&&(n.name=e.name),e?.scope&&(n.scope=e.scope),e?.limit!==void 0&&(n.limit=String(e.limit)),e?.page!==void 0&&(n.page=String(e.page)),e?.sortField&&(n.sort_field=e.sortField),e?.sortOrder&&(n.sort_order=e.sortOrder);const s=await b.get({path:"/v1/players",params:n,next:e?.next,config:o});return pt(s)}async function Tt(e,t,o){const n=o||u.getConfig(),s={};t?.lang&&(s.lang=t.lang);const i=await b.get({path:`/v1/matches/${e}`,params:s,next:t?.next,config:n});return u.transformMatch(i)}async function vt(e,t){const o=t||u.getConfig(),n={};e?.lang&&(n.lang=e.lang),e?.competitions&&(n.competitions=e.competitions),e?.countries&&(n.countries=e.countries),e?.fromDate&&(n.from_date=e.fromDate),e?.toDate&&(n.to_date=e.toDate),e?.matches&&(n.matches=e.matches),e?.teams&&(n.teams=e.teams),e?.status&&(n.status=e.status),e?.limit!==void 0&&(n.limit=String(e.limit)),e?.page!==void 0&&(n.page=String(e.page)),e?.sortField&&(n.sort_field=e.sortField),e?.sortOrder&&(n.sort_order=e.sortOrder),e?.showDeleted!==void 0&&(n.show_deleted=e.showDeleted?"true":"false");const s=await b.get({path:"/v1/matches",params:n,next:e?.next,config:o});return u.transformMatches(s)}function K(e){return{id:e.id,name:e.name,code:e.country_code,flag:e.assets?.flag||void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function St(e){return{id:e.id,name:e.name,shortName:e.short_name||void 0,type:e.type||"LEAGUE",region:e.region,gender:e.gender?.toUpperCase(),country:e.country?K(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function _t(e){return{type:"player",id:e.id,name:e.name,position:e.position||void 0,gender:e.gender?.toUpperCase(),birthdate:e.birth_date||void 0,country:e.country?K(e.country):void 0,assets:e.assets?.headshot?{photo:e.assets.headshot}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function Ct(e){return{type:e.national?"national":"club",id:e.id,name:e.name,shortName:e.short_name||void 0,threeLetterCode:e.code||void 0,gender:e.gender?.toUpperCase(),country:e.country?K(e.country):void 0,assets:e.assets?.logo?{logo:e.assets.logo}:void 0,providerRef:[{provider:"fansunited",id:e.id}]}}function V(e){switch(e.entity_type){case"competition":{const t=St(e);return{source:"FOOTBALL",entityType:"competition",entityId:e.id,entityData:t}}case"player":{const t=_t(e);return{source:"FOOTBALL",entityType:"player",entityId:e.id,entityData:t}}case"team":{const t=Ct(e);return{source:"FOOTBALL",entityType:"team",entityId:e.id,entityData:t}}case"venue":case"coach":return null;default:throw new Error(`Unknown entity type: ${e.entity_type}`)}}async function At(e,t){if(!e.query||e.query.trim()==="")return[];const o=t||u.getConfig(),n={q:e.query.trim()},i=(e.entityTypes&&e.entityTypes.length>0?e.entityTypes:["competition","team","player"]).map(d=>{switch(d){case"team":return"teams";case"player":return"players";case"competition":return"competitions";default:return d}});n.entities=i.join(","),e.lang&&(n.lang=e.lang),e.limit&&(n.limit=String(e.limit));const r=await b.get({path:"/v1/search",params:n,next:e.next,config:o}),a=[];return r.data&&(r.data.competitions&&r.data.competitions.forEach(d=>{const l=V({...d,entity_type:"competition"});l&&a.push(l)}),r.data.teams&&r.data.teams.forEach(d=>{const l=V({...d,entity_type:"team"});l&&a.push(l)}),r.data.players&&r.data.players.forEach(d=>{const l=V({...d,entity_type:"player"});l&&a.push(l)})),a}function Ft(e){return!e.seasons||e.seasons.length===0?void 0:e.seasons.find(o=>o.active)??e.seasons[0]}function Ot(e,t){const o=new Date,n=t.filter(s=>{const i=s.competitorOne.id===e||s.competitorTwo.id===e,r=s.status.type==="NOT_STARTED",a=new Date(s.timing.kickoffTime)>=o;return i&&r&&a});return n.sort((s,i)=>new Date(s.timing.kickoffTime).getTime()-new Date(i.timing.kickoffTime).getTime()),n[0]}function Mt(e,t){const o=new Date,n=t.filter(s=>{const i=s.competitorOne.id===e||s.competitorTwo.id===e,r=s.status.type==="FINISHED",a=new Date(s.timing.kickoffTime)<=o;return i&&r&&a});return n.sort((s,i)=>new Date(i.timing.kickoffTime).getTime()-new Date(s.timing.kickoffTime).getTime()),n[0]}function Rt(e,t){const o=new Date;return t.filter(s=>{const i=s.competitorOne.id===e||s.competitorTwo.id===e,r=s.status.type==="NOT_STARTED"||s.status.type==="LIVE",a=new Date(s.timing.kickoffTime)>=o||s.status.type==="LIVE";return i&&r&&a}).sort((s,i)=>new Date(s.timing.kickoffTime).getTime()-new Date(i.timing.kickoffTime).getTime())}function Nt(e,t){const o=new Date;return t.filter(s=>{const i=s.competitorOne.id===e||s.competitorTwo.id===e,r=s.status.type==="FINISHED",a=new Date(s.timing.kickoffTime)<=o;return i&&r&&a}).sort((s,i)=>new Date(i.timing.kickoffTime).getTime()-new Date(s.timing.kickoffTime).getTime())}function Pt(e,t,o){const n=o.filter(r=>r.status.type==="FINISHED"),s=o.filter(r=>r.status.type==="NOT_STARTED"||r.status.type==="POSTPONED"),i=t.entries.map(r=>{const a=r.competitor.id,d=n.filter(g=>g.competitorOne.id===e&&g.competitorTwo.id===a||g.competitorOne.id===a&&g.competitorTwo.id===e),l=s.filter(g=>g.competitorOne.id===e&&g.competitorTwo.id===a||g.competitorOne.id===a&&g.competitorTwo.id===e);let m,c;return d.forEach(g=>{const p=g.competitorOne.id===e,y=parseInt(g.score?.competitorOne??"0"),T=parseInt(g.score?.competitorTwo??"0"),R=p?y:T,C=p?T:y;let F;R>C?F="W":R===C?F="D":F="L";const N={result:F,score:`${y} - ${T}`,date:g.timing.kickoffTime,matchId:g.id,isUpcoming:!1};p?m=N:c=N}),l.forEach(g=>{const p=g.competitorOne.id===e;p&&!m?m={date:g.timing.kickoffTime,matchId:g.id,isUpcoming:!0}:!p&&!c&&(c={date:g.timing.kickoffTime,matchId:g.id,isUpcoming:!0})}),{rank:r.rank,teamId:r.competitor.id,teamName:r.competitor.name,teamShortName:r.competitor.shortName,teamLogo:r.competitor.logo,gamesPlayed:r.stats.played??0,points:r.stats.points??0,homeResult:m,awayResult:c}});return{teamId:e,rows:i}}function bt(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.goals??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.goals??0,i=n.seasonStatistics?.goals??0;if(i!==s)return i-s;const r=o.seasonStatistics?.assists??0;return(n.seasonStatistics?.assists??0)-r}).slice(0,t)}function Et(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.assists??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.assists??0,i=n.seasonStatistics?.assists??0;if(i!==s)return i-s;const r=o.seasonStatistics?.goals??0;return(n.seasonStatistics?.goals??0)-r}).slice(0,t)}function Lt(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.appearances??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.appearances??0,i=n.seasonStatistics?.appearances??0;if(i!==s)return i-s;const r=o.seasonStatistics?.minutes??0;return(n.seasonStatistics?.minutes??0)-r}).slice(0,t)}function Dt(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.minutes??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.minutes??0,i=n.seasonStatistics?.minutes??0;if(i!==s)return i-s;const r=o.seasonStatistics?.appearances??0;return(n.seasonStatistics?.appearances??0)-r}).slice(0,t)}function Gt(e,t=10){return e.players.filter(o=>(o.seasonStatistics?.cleansheets??0)>0).sort((o,n)=>{const s=o.seasonStatistics?.cleansheets??0,i=n.seasonStatistics?.cleansheets??0;if(i!==s)return i-s;const r=o.seasonStatistics?.appearances??0;return(n.seasonStatistics?.appearances??0)-r}).slice(0,t)}function It(e,t=10){return e.players.filter(o=>{const n=o.seasonStatistics?.yellowCards??0,s=o.seasonStatistics?.redCards??0;return n+s>0}).sort((o,n)=>{const s=o.seasonStatistics?.yellowCards??0,i=o.seasonStatistics?.redCards??0,r=n.seasonStatistics?.yellowCards??0,a=n.seasonStatistics?.redCards??0,d=s+i*3,l=r+a*3;return l!==d?l-d:a!==i?a-i:r-s}).slice(0,t)}function D(e){const t=new Map,o=new Map;return e.forEach(n=>{!n.mainEvents||n.mainEvents.length===0||n.mainEvents.forEach(s=>{if(s.primaryPlayer){const i=s.primaryPlayer.id;t.has(i)||t.set(i,{playerId:s.primaryPlayer.id,seasonId:"",teamId:"",goals:0,assists:0,yellowCards:0,redCards:0,appearances:0});const r=t.get(i);o.has(i)||o.set(i,new Set),o.get(i).add(n.id),(s.type==="GOAL"||s.type==="PENALTY_GOAL")&&(r.goals=(r.goals??0)+1),s.type==="YELLOW_CARD"&&(r.yellowCards=(r.yellowCards??0)+1),(s.type==="RED_CARD"||s.type==="YELLOW_RED_CARD")&&(r.redCards=(r.redCards??0)+1)}if(s.secondaryPlayer&&(s.type==="GOAL"||s.type==="PENALTY_GOAL")){const i=s.secondaryPlayer.id;t.has(i)||t.set(i,{playerId:s.secondaryPlayer.id,seasonId:"",teamId:"",goals:0,assists:0,yellowCards:0,redCards:0,appearances:0});const r=t.get(i);r.assists=(r.assists??0)+1,o.has(i)||o.set(i,new Set),o.get(i).add(n.id)}})}),o.forEach((n,s)=>{const i=t.get(s);i&&i.appearances!==void 0&&(i.appearances=n.size)}),t}function U(e){return Array.from(e.values()).map(t=>({...t,totalCards:(t.yellowCards??0)+(t.redCards??0)}))}function te(e,t=10){const o=D(e);return U(o).filter(s=>(s.goals??0)>0).sort((s,i)=>{const r=s.goals??0,a=i.goals??0;if(a!==r)return a-r;const d=s.assists??0;return(i.assists??0)-d}).slice(0,t)}function oe(e,t=10){const o=D(e);return U(o).filter(s=>(s.assists??0)>0).sort((s,i)=>{const r=s.assists??0,a=i.assists??0;if(a!==r)return a-r;const d=s.goals??0;return(i.goals??0)-d}).slice(0,t)}function ne(e,t=10){const o=D(e);return U(o).filter(s=>(s.totalCards??0)>0).sort((s,i)=>{const r=(s.yellowCards??0)+(s.redCards??0)*3,a=(i.yellowCards??0)+(i.redCards??0)*3;if(a!==r)return a-r;const d=s.redCards??0,l=i.redCards??0;if(l!==d)return l-d;const m=s.yellowCards??0;return(i.yellowCards??0)-m}).slice(0,t)}function se(e,t=10){const o=D(e);return U(o).filter(s=>(s.goals??0)+(s.assists??0)>0).sort((s,i)=>{const r=(s.goals??0)+(s.assists??0),a=(i.goals??0)+(i.assists??0);if(a!==r)return a-r;const d=s.goals??0,l=i.goals??0;if(l!==d)return l-d;const m=s.assists??0;return(i.assists??0)-m}).slice(0,t)}function ie(e){const t=D(e);return U(t).sort((n,s)=>{const i=n.appearances??0,r=s.appearances??0;if(r!==i)return r-i;const a=(n.goals??0)+(n.assists??0);return(s.goals??0)+(s.assists??0)-a})}function kt(e,t=10){return L.useMemo(()=>te(e,t),[e,t])}function Ht(e,t=10){return L.useMemo(()=>oe(e,t),[e,t])}function Ut(e,t=10){return L.useMemo(()=>ne(e,t),[e,t])}function Bt(e,t=10){return L.useMemo(()=>se(e,t),[e,t])}function $t(e){return L.useMemo(()=>ie(e),[e])}function re(e){return L.useMemo(()=>D(e),[e])}function xt(e,t){const o=re(e);return L.useMemo(()=>o.get(t),[o,t])}const ae=["GOAL","PENALTY_GOAL","OWN_GOAL"];function A(e,t){return t>0?e/t*100:0}function k(e,t){return t>0?e/t:0}function Wt(e,t=!1,o=2){return t?`${Math.round(e)}%`:Number.isInteger(e)?e.toString():e.toFixed(o)}function qt(e,t){const o=typeof e=="string"?parseFloat(e):e;if(isNaN(o)||t===0)return"0";const n=(o/t).toFixed(1);return`${o} (${n} avg)`}function Vt(e,t){const o=typeof e=="string"?parseFloat(e):e;return isNaN(o)||t===0?"0.0":(o/t).toFixed(1)}function jt(e){const t=parseFloat(e);return isNaN(t)?"0%":`${Math.round(t)}%`}function ce(e,t,o){if(e.status?.type!=="FINISHED"||!e.score)return null;const n=parseInt(e.score.competitorOne||"0"),s=parseInt(e.score.competitorTwo||"0"),i=o?n:s,r=o?s:n;let a=null,d=null;const l=e.score.breakdown?.halfTime;if(l){const p=parseInt(l.competitorOne||"0"),y=parseInt(l.competitorTwo||"0");a=o?p:y,d=o?y:p}const m=e.statistics;let c=null,g=null;if(m){const p=m.find?.(y=>y.type==="CORNERS");p&&(c=o?p.competitorOne:p.competitorTwo,g=o?p.competitorTwo:p.competitorOne)}return{goalsFor:i,goalsAgainst:r,halfTimeGoalsFor:a,halfTimeGoalsAgainst:d,cornersFor:c,cornersAgainst:g,isWin:i>r,isDraw:i===r,isLoss:i<r}}function q(e,t){return e.competitorOne.id===t}function le(e,t){return e.competitorTwo.id===t}function Yt(e,t){return q(e,t)||le(e,t)}function Kt(e){return e.status?.type==="FINISHED"}function zt(e,t){const o=q(e,t);return parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0")}function Jt(e,t){const o=q(e,t);return parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0")}function Qt(e,t,o){const n=e.filter(m=>{if(m.status?.type!=="FINISHED"||!m.score)return!1;const c=m.competitorOne.id===t||m.competitorTwo.id===t,g=m.competitorOne.id===o||m.competitorTwo.id===o;return c&&g});let s=0,i=0,r=0,a=0,d=0;n.forEach(m=>{const c=parseInt(m.score?.competitorOne||"0"),g=parseInt(m.score?.competitorTwo||"0"),p=m.competitorOne.id===t,y=p?c:g,T=p?g:c;a+=y,d+=T,y>T?s++:T>y?i++:r++});const l=n.length;return{totalMatches:l,homeTeamWins:s,awayTeamWins:i,draws:r,homeTeamGoals:a,awayTeamGoals:d,homeTeamWinPercentage:l>0?s/l*100:0,awayTeamWinPercentage:l>0?i/l*100:0,drawPercentage:l>0?r/l*100:0,homeTeamAvgGoals:l>0?a/l:0,awayTeamAvgGoals:l>0?d/l:0}}function Xt(e,t,o,n=5){return e.filter(i=>{if(i.status?.type!=="FINISHED"||!i.score)return!1;const r=i.competitorOne.id===t||i.competitorTwo.id===t,a=i.competitorOne.id===o||i.competitorTwo.id===o;return r&&a}).sort((i,r)=>new Date(r.timing.kickoffTime).getTime()-new Date(i.timing.kickoffTime).getTime()).slice(0,n).map(i=>{const r=parseInt(i.score?.competitorOne||"0"),a=parseInt(i.score?.competitorTwo||"0"),d=i.competitorOne.id===t,l=d?r:a,m=d?a:r;let c;return l>m?c="home":m>l?c="away":c="draw",{id:i.id,date:new Date(i.timing.kickoffTime).toLocaleDateString("en-GB",{day:"numeric",month:"short",year:"numeric"}),homeTeamName:i.competitorOne.name,awayTeamName:i.competitorTwo.name,homeTeamLogo:i.competitorOne.assets?.logo,awayTeamLogo:i.competitorTwo.assets?.logo,homeScore:r,awayScore:a,venue:i.venue?.name,winner:c}})}function Zt(e,t,o){return e.filter(n=>{const s=n.competitorOne.id===t,i=n.competitorTwo.id===t;return!s&&!i?!1:o==="home"?s:i}).map(n=>{const s=n.competitorOne.id===t;return ce(n,t,s)}).filter(n=>n!==null)}function Q(e,t,o,n){let s=0;for(const i of e){const r=i.competitorOne.id===t,a=i.competitorTwo.id===t;if(!r&&!a||o==="home"&&!r||o==="away"&&!a||i.status?.type!=="FINISHED")continue;const d=i.mainEvents;if(!d||!Array.isArray(d))continue;const l=d.filter(y=>y.type&&ae.includes(y.type)).sort((y,T)=>{const R=y.minute??0,C=T.minute??0;return R!==C?R-C:(y.injuryMinute??0)-(T.injuryMinute??0)});if(l.length===0)continue;const m=l[0],c=r?"ONE":"TWO",g=m.type==="OWN_GOAL";let p;g?p=m.competitorPosition!==c:p=m.competitorPosition===c,(n==="scored"&&p||n==="conceded"&&!p)&&s++}return s}function wt(e,t,o){let n=0;for(const s of e){const i=s.competitorOne.id===t,r=s.competitorTwo.id===t;if(!i&&!r||o==="home"&&!i||o==="away"&&!r||s.status?.type!=="FINISHED")continue;const a=s.mainEvents;a&&Array.isArray(a)&&n++}return n}function eo(e,t,o){const n=Zt(e,t,o),s=n.length;if(s===0)return{played:0,goalsForPerMatch:0,cleanSheets:0,wonToNil:0,scoringRate:0,scoredInBothHalves:0,scoredFirst:0,leadingAtHalfTime:0,goalsAgainstPerMatch:0,failedToScore:0,lostToNil:0,concedingRate:0,concededInBothHalves:0,concededFirst:0,losingAtHalfTime:0,avgCornersFor:0,avgCornersAgainst:0};const i=n.reduce((f,S)=>f+S.goalsFor,0),r=n.reduce((f,S)=>f+S.goalsAgainst,0),a=n.filter(f=>f.goalsAgainst===0).length,d=n.filter(f=>f.isWin&&f.goalsAgainst===0).length,l=n.filter(f=>f.goalsFor>0).length,m=n.filter(f=>f.goalsFor===0).length,c=n.filter(f=>f.isLoss&&f.goalsFor===0).length,g=n.filter(f=>f.goalsAgainst>0).length,p=n.filter(f=>f.halfTimeGoalsFor!==null),y=p.length,T=p.filter(f=>{const S=f.halfTimeGoalsFor,I=f.goalsFor-S;return S>0&&I>0}).length,R=Q(e,t,o,"scored"),C=wt(e,t,o),F=p.filter(f=>f.halfTimeGoalsFor>f.halfTimeGoalsAgainst).length,N=p.filter(f=>{const S=f.halfTimeGoalsAgainst,I=f.goalsAgainst-S;return S>0&&I>0}).length,B=Q(e,t,o,"conceded"),$=p.filter(f=>f.halfTimeGoalsAgainst>f.halfTimeGoalsFor).length,G=n.filter(f=>f.cornersFor!==null),x=G.reduce((f,S)=>f+(S.cornersFor||0),0),W=G.reduce((f,S)=>f+(S.cornersAgainst||0),0);return{played:s,goalsForPerMatch:k(i,s),cleanSheets:A(a,s),wonToNil:A(d,s),scoringRate:A(l,s),scoredInBothHalves:A(T,y),scoredFirst:A(R,C),leadingAtHalfTime:A(F,y),goalsAgainstPerMatch:k(r,s),failedToScore:A(m,s),lostToNil:A(c,s),concedingRate:A(g,s),concededInBothHalves:A(N,y),concededFirst:A(B,C),losingAtHalfTime:A($,y),avgCornersFor:k(x,G.length),avgCornersAgainst:k(W,G.length)}}function to(e,t){return e.filter(o=>o.status?.type!=="FINISHED"?!1:o.competitorOne.id===t||o.competitorTwo.id===t).map(o=>{const n=o.competitorOne.id===t,s=parseInt(o.score?.competitorOne||"0"),i=parseInt(o.score?.competitorTwo||"0"),r=s+i,a=o.periods;let d=null;if(a&&Array.isArray(a)){const l=a.find(m=>m.type==="FIRST_HALF"||m.type==="1ST_HALF");if(l?.score){const m=parseInt(l.score.competitorOne||"0"),c=parseInt(l.score.competitorTwo||"0");d=m+c}}return{totalGoals:r,halfTimeGoals:d,isHome:n}})}function h(e,t){return e.length===0?0:e.filter(n=>n>t).length/e.length*100}function oo(e,t){const o=to(e,t),n=o.filter(c=>c.isHome),s=o.filter(c=>!c.isHome),i=o.map(c=>c.totalGoals),r=n.map(c=>c.totalGoals),a=s.map(c=>c.totalGoals),d=o.filter(c=>c.halfTimeGoals!==null).map(c=>c.halfTimeGoals),l=n.filter(c=>c.halfTimeGoals!==null).map(c=>c.halfTimeGoals),m=s.filter(c=>c.halfTimeGoals!==null).map(c=>c.halfTimeGoals);return{over05:{home:h(r,.5),total:h(i,.5),away:h(a,.5)},over15:{home:h(r,1.5),total:h(i,1.5),away:h(a,1.5)},over25:{home:h(r,2.5),total:h(i,2.5),away:h(a,2.5)},over35:{home:h(r,3.5),total:h(i,3.5),away:h(a,3.5)},over45:{home:h(r,4.5),total:h(i,4.5),away:h(a,4.5)},over55:{home:h(r,5.5),total:h(i,5.5),away:h(a,5.5)},over05HT:{home:h(l,.5),total:h(d,.5),away:h(m,.5)},over15HT:{home:h(l,1.5),total:h(d,1.5),away:h(m,1.5)},over25HT:{home:h(l,2.5),total:h(d,2.5),away:h(m,2.5)}}}function de(e,t){const o=e.competitorOne.id===t,n=e.competitorTwo.id===t;if(!o&&!n||!e.score)return null;const s=parseInt(o?e.score.competitorOne||"0":e.score.competitorTwo||"0"),i=parseInt(o?e.score.competitorTwo||"0":e.score.competitorOne||"0");let r;return s>i?r="W":s<i?r="L":r="D",{result:{score:`${s}:${i}`,result:r,isHome:o},isHome:o}}function no(e,t,o,n,s,i){const r=t?.entries.find(P=>P.competitor.id===e),a=o?.entries.find(P=>P.competitor.id===e),d=n?.entries.find(P=>P.competitor.id===e),l=s?.entries.find(P=>P.competitor.id===e),m=i?.entries.find(P=>P.competitor.id===e);if(!r)return null;const c=a?.stats?.goalsFor??0,g=d?.stats?.goalsFor??0,p=r?.stats?.goalsFor??0,y=l?.stats?.goalsAgainst??0,T=m?.stats?.goalsAgainst??0,R=r?.stats?.goalsAgainst??0,C=a?.stats?.played??0,F=d?.stats?.played??0,N=r?.stats?.played??0,B=N>0?p/N:0,$=N>0?R/N:0,G=B+$,x=C>0?c/C:0,W=F>0?g/F:0,f=C>0?y/C:0,S=F>0?T/F:0,I=x+f,ue=W+S;return{homeGoals:c,totalGoals:p,awayGoals:g,homeGamesPlayed:C,awayGamesPlayed:F,totalGamesPlayed:N,homeGoalsConceded:y,totalGoalsConceded:R,awayGoalsConceded:T,gfPerMatch:B,gaPerMatch:$,gfGaPerMatch:G,homeGfPerMatch:x,awayGfPerMatch:W,homeGaPerMatch:f,awayGaPerMatch:S,homeGfGaPerMatch:I,awayGfGaPerMatch:ue}}function _(e,t,o,n){const s=e.filter(r=>{const a=r.competitorOne.id===t,d=r.competitorTwo.id===t;return!(!a&&!d||r.status?.type!=="FINISHED"||n==="home"&&!a||n==="away"&&!d)}).sort((r,a)=>new Date(a.timing.kickoffTime).getTime()-new Date(r.timing.kickoffTime).getTime());if(s.length===0)return null;let i=0;for(const r of s){const a=r.competitorOne.id===t;if(o(r,t,a))i++;else break}return i>0?i:null}const v={win:(e,t,o)=>{const n=parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0"),s=parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0");return n>s},draw:e=>e.score?.competitorOne===e.score?.competitorTwo,loss:(e,t,o)=>{const n=parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0"),s=parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0");return n<s},noWin:(e,t,o)=>!v.win(e,t,o),noDraw:e=>!v.draw(e),noDefeat:(e,t,o)=>!v.loss(e,t,o),scored:(e,t,o)=>parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0")>=1,conceded:(e,t,o)=>parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0")>=1,noGoalScored:(e,t,o)=>!v.scored(e,t,o),noGoalConceded:(e,t,o)=>!v.conceded(e,t,o),over25:e=>parseInt(e.score?.competitorOne||"0")+parseInt(e.score?.competitorTwo||"0")>2,under25:e=>parseInt(e.score?.competitorOne||"0")+parseInt(e.score?.competitorTwo||"0")<3,scoredTwice:(e,t,o)=>parseInt(o?e.score?.competitorOne||"0":e.score?.competitorTwo||"0")>=2,concededTwice:(e,t,o)=>parseInt(o?e.score?.competitorTwo||"0":e.score?.competitorOne||"0")>=2};function H(e,t,o){return{win:_(e,t,v.win,o),draw:_(e,t,v.draw,o),loss:_(e,t,v.loss,o),noWin:_(e,t,v.noWin,o),noDraw:_(e,t,v.noDraw,o),noDefeat:_(e,t,v.noDefeat,o),scored:_(e,t,v.scored,o),conceded:_(e,t,v.conceded,o),noGoalScored:_(e,t,v.noGoalScored,o),noGoalConceded:_(e,t,v.noGoalConceded,o),over25:_(e,t,v.over25,o),under25:_(e,t,v.under25,o),scoredTwice:_(e,t,v.scoredTwice,o),concededTwice:_(e,t,v.concededTwice,o)}}function so(e,t,o){const n=H(e,t,"home"),s=H(e,t),i=H(e,o,"away"),r=H(e,o);return[{label:"Consecutive wins",homeTeam:{home:n.win,total:s.win},awayTeam:{total:r.win,home:i.win},colorType:"neutral"},{label:"Consecutive draws",homeTeam:{home:n.draw,total:s.draw},awayTeam:{total:r.draw,home:i.draw},colorType:"neutral"},{label:"Consecutive defeats",homeTeam:{home:n.loss,total:s.loss},awayTeam:{total:r.loss,home:i.loss},colorType:"neutral"},{label:"No win",homeTeam:{home:n.noWin,total:s.noWin},awayTeam:{total:r.noWin,home:i.noWin},colorType:"negative"},{label:"No draw",homeTeam:{home:n.noDraw,total:s.noDraw},awayTeam:{total:r.noDraw,home:i.noDraw},colorType:"neutral"},{label:"No defeat",homeTeam:{home:n.noDefeat,total:s.noDefeat},awayTeam:{total:r.noDefeat,home:i.noDefeat},colorType:"positive"},{label:"Scored at least once",homeTeam:{home:n.scored,total:s.scored},awayTeam:{total:r.scored,home:i.scored},colorType:"positive"},{label:"Conceded at least once",homeTeam:{home:n.conceded,total:s.conceded},awayTeam:{total:r.conceded,home:i.conceded},colorType:"negative"},{label:"No goal scored",homeTeam:{home:n.noGoalScored,total:s.noGoalScored},awayTeam:{total:r.noGoalScored,home:i.noGoalScored},colorType:"neutral"},{label:"No goal conceded",homeTeam:{home:n.noGoalConceded,total:s.noGoalConceded},awayTeam:{total:r.noGoalConceded,home:i.noGoalConceded},colorType:"neutral"},{label:"GS + GC over 2.5",homeTeam:{home:n.over25,total:s.over25},awayTeam:{total:r.over25,home:i.over25},colorType:"neutral"},{label:"GS + GC under 2.5",homeTeam:{home:n.under25,total:s.under25},awayTeam:{total:r.under25,home:i.under25},colorType:"neutral"},{label:"Scored at least twice",homeTeam:{home:n.scoredTwice,total:s.scoredTwice},awayTeam:{total:r.scoredTwice,home:i.scoredTwice},colorType:"positive"},{label:"Conceded at least twice",homeTeam:{home:n.concededTwice,total:s.concededTwice},awayTeam:{total:r.concededTwice,home:i.concededTwice},colorType:"negative"}]}function X(e,t){const o=new Map;return e.forEach(n=>{if(n.status?.type!=="FINISHED")return;const s=de(n,t);if(!s)return;const i=s.isHome?n.competitorTwo.id:n.competitorOne.id,r=s.isHome?n.competitorTwo:n.competitorOne,a=o.get(i)||{opponentId:i,opponentName:r.name,opponentLogo:r.assets?.logo};s.isHome?a.homeResult=s.result:a.awayResult=s.result,o.set(i,a)}),o}function io(e,t,o,n,s,i,r){const a=X(e,t),d=X(e,o),l=new Set([...a.keys(),...d.keys(),t,o]),m=[];return l.forEach(c=>{const g=a.get(c),p=d.get(c);if(!g&&!p&&c!==t&&c!==o)return;let y,T;c===t?(y=n,T=i):c===o?(y=s,T=r):(y=g?.opponentName||p?.opponentName||"",T=g?.opponentLogo||p?.opponentLogo),m.push({opponentId:c,opponentName:y,opponentLogo:T,homeTeamHome:g?.homeResult,homeTeamAway:g?.awayResult,awayTeamHome:p?.homeResult,awayTeamAway:p?.awayResult,isHomeTeamRow:c===t,isAwayTeamRow:c===o})}),m.sort((c,g)=>c.isHomeTeamRow?-1:g.isHomeTeamRow?1:c.isAwayTeamRow?-1:g.isAwayTeamRow?1:c.opponentName.localeCompare(g.opponentName))}exports.addProviderRef=u.addProviderRef;exports.getBatchMatchOdds=u.getBatchMatchOdds;exports.getConfig=u.getConfig;exports.getFootballCompetition=u.getFootballCompetition;exports.getFootballLivescore=u.getFootballLivescore;exports.getFootballMatch=u.getFootballMatch;exports.getFootballMatchCommentary=u.getFootballMatchCommentary;exports.getFootballMatchEvents=u.getFootballMatchEvents;exports.getFootballMatchLineups=u.getFootballMatchLineups;exports.getFootballMatchOdds=u.getFootballMatchOdds;exports.getFootballMatchStatistics=u.getFootballMatchStatistics;exports.getFootballMatches=u.getFootballMatches;exports.getFootballPlayerSeasonStatistics=u.getFootballPlayerSeasonStatistics;exports.getFootballSeasonDetails=u.getFootballSeasonDetails;exports.getFootballStandings=u.getFootballStandings;exports.getFootballTeam=u.getFootballTeam;exports.getFootballTeamSquad=u.getFootballTeamSquad;exports.getLeaderboardMatches=u.getLeaderboardMatches;exports.getLeaderboardTeamMatches=u.getLeaderboardTeamMatches;exports.getLeaderboardTemplate=u.getLeaderboardTemplate;exports.getProviderRefId=u.getProviderRefId;exports.isConfigured=u.isConfigured;exports.setConfig=u.setConfig;exports.toProviderRefArray=u.toProviderRefArray;exports.GOAL_EVENT_TYPES=ae;exports.aggregatePlayerStatisticsFromMatches=D;exports.analyzeMatch=ce;exports.calcAverage=k;exports.calcPercentage=A;exports.calculateH2HStats=Qt;exports.calculateStreak=_;exports.formatAsAverage=Vt;exports.formatPossessionPercentage=jt;exports.formatStatValue=Wt;exports.formatWithAverage=qt;exports.getActiveSeason=Ft;exports.getAllPlayerStatisticsFromMatches=ie;exports.getBasketballLivescore=Ne;exports.getFansUnitedFootballCompetition=rt;exports.getFansUnitedFootballCompetitions=ot;exports.getFansUnitedFootballMatch=Tt;exports.getFansUnitedFootballMatches=vt;exports.getFansUnitedFootballPlayer=yt;exports.getFansUnitedFootballPlayers=ht;exports.getFansUnitedFootballSearch=At;exports.getFansUnitedFootballTeam=dt;exports.getFansUnitedFootballTeams=ut;exports.getMatchResult=de;exports.getMostCardedPlayersFromMatches=ne;exports.getOpponentScore=Jt;exports.getRecentH2HMeetings=Xt;exports.getTeamFinishedMatches=Nt;exports.getTeamGoalStats=no;exports.getTeamHomeAwayStats=eo;exports.getTeamMostDecorated=It;exports.getTeamNextMatch=Ot;exports.getTeamOverUnderStats=oo;exports.getTeamPreviousMatch=Mt;exports.getTeamResultsTable=Pt;exports.getTeamScore=zt;exports.getTeamSeasonStatistics=Qe;exports.getTeamStreaks=H;exports.getTeamStreaksComparison=so;exports.getTeamTopAppearances=Lt;exports.getTeamTopAssisters=Et;exports.getTeamTopCleanSheets=Gt;exports.getTeamTopMinutesPlayed=Dt;exports.getTeamTopScorers=bt;exports.getTeamUpcomingMatches=Rt;exports.getTeamsCommonOpponents=io;exports.getTennisLivescore=ke;exports.getTopAssistersFromMatches=oe;exports.getTopGoalContributorsFromMatches=se;exports.getTopScorersFromMatches=te;exports.isMatchFinished=Kt;exports.isTeamAway=le;exports.isTeamHome=q;exports.isTeamInMatch=Yt;exports.search=Ke;exports.searchFootball=ve;exports.streakFilters=v;exports.useAllPlayerStatisticsFromMatches=$t;exports.useMostCardedPlayersFromMatches=Ut;exports.usePlayerStatistics=xt;exports.usePlayerStatisticsMap=re;exports.useTopAssistersFromMatches=Ht;exports.useTopGoalContributorsFromMatches=Bt;exports.useTopScorersFromMatches=kt;
|
package/fansunited-data-layer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import { i as
|
|
1
|
+
import { t as S, g as A, f as se, c as V, S as ie, a as re, b as ae, d as ce, e as le, h as de } from "./matches-B8E7KjZU.js";
|
|
2
|
+
import { i as So, j as _o, k as Co, l as Ao, m as Oo, n as No, o as Eo, p as Ro, q as Fo, r as Mo, s as Lo, u as Do, v as Io, w as Go, x as bo, y as Po, z as ko, A as Ho, B as Uo, C as Bo, D as $o, E as xo } from "./matches-B8E7KjZU.js";
|
|
3
3
|
import { useMemo as G } from "react";
|
|
4
4
|
function ue(e) {
|
|
5
5
|
return {
|
|
@@ -15,12 +15,12 @@ function ue(e) {
|
|
|
15
15
|
name: e.country.name,
|
|
16
16
|
code: void 0,
|
|
17
17
|
flag: e.country.url_flag ?? void 0,
|
|
18
|
-
providerRef:
|
|
18
|
+
providerRef: S(e.country.uuid)
|
|
19
19
|
},
|
|
20
20
|
assets: e.url_logo ? {
|
|
21
21
|
logo: e.url_logo
|
|
22
22
|
} : void 0,
|
|
23
|
-
providerRef:
|
|
23
|
+
providerRef: S(e.uuid)
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
function me(e) {
|
|
@@ -37,12 +37,12 @@ function me(e) {
|
|
|
37
37
|
name: e.country.name,
|
|
38
38
|
code: void 0,
|
|
39
39
|
flag: e.country.url_flag ?? void 0,
|
|
40
|
-
providerRef:
|
|
40
|
+
providerRef: S(e.country.uuid)
|
|
41
41
|
},
|
|
42
42
|
assets: e.url_thumb ? {
|
|
43
43
|
photo: e.url_thumb
|
|
44
44
|
} : void 0,
|
|
45
|
-
providerRef:
|
|
45
|
+
providerRef: S(e.uuid)
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
function fe(e) {
|
|
@@ -60,12 +60,12 @@ function fe(e) {
|
|
|
60
60
|
name: e.country.name,
|
|
61
61
|
code: void 0,
|
|
62
62
|
flag: e.country.url_flag ?? void 0,
|
|
63
|
-
providerRef:
|
|
63
|
+
providerRef: S(e.country.uuid)
|
|
64
64
|
},
|
|
65
65
|
assets: e.url_logo ? {
|
|
66
66
|
logo: e.url_logo
|
|
67
67
|
} : void 0,
|
|
68
|
-
providerRef:
|
|
68
|
+
providerRef: S(e.uuid)
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
function ge(e) {
|
|
@@ -80,12 +80,12 @@ function ge(e) {
|
|
|
80
80
|
name: e.country.name,
|
|
81
81
|
code: void 0,
|
|
82
82
|
flag: e.country.url_flag ?? void 0,
|
|
83
|
-
providerRef:
|
|
83
|
+
providerRef: S(e.country.uuid)
|
|
84
84
|
},
|
|
85
85
|
assets: e.url_thumb ? {
|
|
86
86
|
photo: e.url_thumb
|
|
87
87
|
} : void 0,
|
|
88
|
-
providerRef:
|
|
88
|
+
providerRef: S(e.uuid)
|
|
89
89
|
};
|
|
90
90
|
}
|
|
91
91
|
function pe(e) {
|
|
@@ -102,16 +102,16 @@ function pe(e) {
|
|
|
102
102
|
name: e.city.country.name,
|
|
103
103
|
code: void 0,
|
|
104
104
|
flag: e.city.country.url_flag ?? void 0,
|
|
105
|
-
providerRef:
|
|
105
|
+
providerRef: S(e.city.country.uuid)
|
|
106
106
|
},
|
|
107
|
-
providerRef:
|
|
107
|
+
providerRef: S(e.city.uuid)
|
|
108
108
|
},
|
|
109
109
|
country: {
|
|
110
110
|
id: e.country.id.toString(),
|
|
111
111
|
name: e.country.name,
|
|
112
112
|
code: void 0,
|
|
113
113
|
flag: e.country.url_flag ?? void 0,
|
|
114
|
-
providerRef:
|
|
114
|
+
providerRef: S(e.country.uuid)
|
|
115
115
|
},
|
|
116
116
|
profile: {
|
|
117
117
|
latitude: e.profile.lat,
|
|
@@ -121,7 +121,7 @@ function pe(e) {
|
|
|
121
121
|
assets: e.url_thumb ? {
|
|
122
122
|
image: e.url_thumb
|
|
123
123
|
} : void 0,
|
|
124
|
-
providerRef:
|
|
124
|
+
providerRef: S(e.uuid)
|
|
125
125
|
};
|
|
126
126
|
}
|
|
127
127
|
function ye(e) {
|
|
@@ -136,12 +136,12 @@ function ye(e) {
|
|
|
136
136
|
name: e.country.name,
|
|
137
137
|
code: void 0,
|
|
138
138
|
flag: e.country.url_flag ?? void 0,
|
|
139
|
-
providerRef:
|
|
139
|
+
providerRef: S(e.country.uuid)
|
|
140
140
|
},
|
|
141
141
|
assets: e.url_thumb ? {
|
|
142
142
|
photo: e.url_thumb
|
|
143
143
|
} : void 0,
|
|
144
|
-
providerRef:
|
|
144
|
+
providerRef: S(e.uuid)
|
|
145
145
|
};
|
|
146
146
|
}
|
|
147
147
|
function he(e) {
|
|
@@ -217,13 +217,13 @@ function Q(e) {
|
|
|
217
217
|
gender: e.gender
|
|
218
218
|
};
|
|
219
219
|
}
|
|
220
|
-
function
|
|
220
|
+
function Se(e) {
|
|
221
221
|
return {
|
|
222
222
|
kickoffTime: new Date(e.game_time),
|
|
223
223
|
currentMinute: e.minute
|
|
224
224
|
};
|
|
225
225
|
}
|
|
226
|
-
function
|
|
226
|
+
function _e(e) {
|
|
227
227
|
if (!e.season?.competition) return;
|
|
228
228
|
const t = e.season.competition;
|
|
229
229
|
return {
|
|
@@ -259,8 +259,22 @@ function Ce(e) {
|
|
|
259
259
|
}
|
|
260
260
|
function Ae(e) {
|
|
261
261
|
if (!e || e.length === 0) return;
|
|
262
|
+
console.log("[livescore:basketball] raw score entries:", JSON.stringify(e, null, 2));
|
|
262
263
|
const t = e.filter((i) => i.result_type.category === "PERIOD");
|
|
263
|
-
if (t.length === 0)
|
|
264
|
+
if (t.length === 0) {
|
|
265
|
+
const i = e[0];
|
|
266
|
+
return console.warn("[livescore:basketball] no PERIOD entries found in score, falling back to first entry:", JSON.stringify(i, null, 2)), {
|
|
267
|
+
competitorOne: String(i.home),
|
|
268
|
+
competitorTwo: String(i.away),
|
|
269
|
+
breakdown: {
|
|
270
|
+
total: {
|
|
271
|
+
competitorOne: String(i.home),
|
|
272
|
+
competitorTwo: String(i.away)
|
|
273
|
+
},
|
|
274
|
+
periods: []
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
}
|
|
264
278
|
let o = 0, n = 0;
|
|
265
279
|
const s = [];
|
|
266
280
|
for (const i of t)
|
|
@@ -291,16 +305,16 @@ function Ne(e) {
|
|
|
291
305
|
id: e.id,
|
|
292
306
|
slug: e.slug,
|
|
293
307
|
status: ve(e.status),
|
|
294
|
-
timing:
|
|
308
|
+
timing: Se(e),
|
|
295
309
|
competitorOne: Q(e.home_team),
|
|
296
310
|
competitorTwo: Q(e.away_team),
|
|
297
|
-
competition:
|
|
311
|
+
competition: _e(e),
|
|
298
312
|
round: e.round ? {
|
|
299
313
|
id: e.round.id,
|
|
300
314
|
key: e.round.uuid,
|
|
301
315
|
name: e.round.name,
|
|
302
316
|
type: "REGULAR",
|
|
303
|
-
providerRef:
|
|
317
|
+
providerRef: S(e.round.uuid)
|
|
304
318
|
} : void 0,
|
|
305
319
|
venue: Ce(e.arena),
|
|
306
320
|
score: Ae(e.score),
|
|
@@ -335,8 +349,8 @@ async function Nt(e, t) {
|
|
|
335
349
|
config: o
|
|
336
350
|
})).games.map(Ne);
|
|
337
351
|
}
|
|
338
|
-
const
|
|
339
|
-
function
|
|
352
|
+
const Ee = V(re);
|
|
353
|
+
function Re(e) {
|
|
340
354
|
const t = {
|
|
341
355
|
FINISHED: "finished",
|
|
342
356
|
NOT_STARTED: "not_started",
|
|
@@ -437,8 +451,12 @@ function Me(e) {
|
|
|
437
451
|
}
|
|
438
452
|
function Le(e) {
|
|
439
453
|
if (!e.results || e.results.length === 0) return;
|
|
454
|
+
console.log("[livescore:tennis] raw results entries:", JSON.stringify(e.results, null, 2));
|
|
440
455
|
const t = e.results.filter((i) => /^SET_\d+$/i.test(i.type.code));
|
|
441
|
-
if (t.length === 0)
|
|
456
|
+
if (t.length === 0) {
|
|
457
|
+
console.warn("[livescore:tennis] no SET_n entries found in results, result_type codes:", e.results.map((i) => i.type.code));
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
442
460
|
const o = [];
|
|
443
461
|
let n = 0, s = 0;
|
|
444
462
|
for (const i of t) {
|
|
@@ -448,8 +466,8 @@ function Le(e) {
|
|
|
448
466
|
competitorOne: r.value,
|
|
449
467
|
competitorTwo: a.value
|
|
450
468
|
});
|
|
451
|
-
const
|
|
452
|
-
!isNaN(
|
|
469
|
+
const d = parseInt(r.value), l = parseInt(a.value);
|
|
470
|
+
!isNaN(d) && !isNaN(l) && (d > l && n++, l > d && s++);
|
|
453
471
|
}
|
|
454
472
|
if (o.length !== 0)
|
|
455
473
|
return {
|
|
@@ -476,7 +494,7 @@ function Ie(e) {
|
|
|
476
494
|
return {
|
|
477
495
|
id: e.id,
|
|
478
496
|
slug: e.slug,
|
|
479
|
-
status:
|
|
497
|
+
status: Re(e.status),
|
|
480
498
|
timing: Fe(e),
|
|
481
499
|
competitorOne: X(t[0]),
|
|
482
500
|
competitorTwo: X(t[1]),
|
|
@@ -486,7 +504,7 @@ function Ie(e) {
|
|
|
486
504
|
key: e.round.uuid,
|
|
487
505
|
name: e.round.name,
|
|
488
506
|
type: "REGULAR",
|
|
489
|
-
providerRef:
|
|
507
|
+
providerRef: S(e.round.uuid)
|
|
490
508
|
} : void 0,
|
|
491
509
|
score: Le(e),
|
|
492
510
|
winner: De(e),
|
|
@@ -505,9 +523,9 @@ function Ie(e) {
|
|
|
505
523
|
]
|
|
506
524
|
};
|
|
507
525
|
}
|
|
508
|
-
async function
|
|
526
|
+
async function Et(e, t) {
|
|
509
527
|
const o = t || A(), { sportal365Sports: n } = o;
|
|
510
|
-
return (await
|
|
528
|
+
return (await Ee.get({
|
|
511
529
|
path: "/matches/livescore",
|
|
512
530
|
params: {
|
|
513
531
|
date: e?.date,
|
|
@@ -531,7 +549,7 @@ async function Rt(e, t) {
|
|
|
531
549
|
})).matches.map(Ie);
|
|
532
550
|
}
|
|
533
551
|
const Ge = V(ae);
|
|
534
|
-
function
|
|
552
|
+
function E(e) {
|
|
535
553
|
return {
|
|
536
554
|
language: e.language,
|
|
537
555
|
name: e.name,
|
|
@@ -539,7 +557,7 @@ function R(e) {
|
|
|
539
557
|
threeLetterCode: e.three_letter_code ?? void 0
|
|
540
558
|
};
|
|
541
559
|
}
|
|
542
|
-
function
|
|
560
|
+
function R(e) {
|
|
543
561
|
if (!(!e || !e.url))
|
|
544
562
|
return {
|
|
545
563
|
url: e.url
|
|
@@ -553,8 +571,8 @@ function I(e) {
|
|
|
553
571
|
name: e.name,
|
|
554
572
|
shortName: e.short_name ?? void 0,
|
|
555
573
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
556
|
-
translations: e.translations.map(
|
|
557
|
-
displayAsset:
|
|
574
|
+
translations: e.translations.map(E),
|
|
575
|
+
displayAsset: R(e.display_asset),
|
|
558
576
|
slug: e.slug,
|
|
559
577
|
providerRef: e.id
|
|
560
578
|
};
|
|
@@ -567,8 +585,8 @@ function K(e) {
|
|
|
567
585
|
name: e.name,
|
|
568
586
|
shortName: e.short_name ?? void 0,
|
|
569
587
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
570
|
-
translations: e.translations.map(
|
|
571
|
-
displayAsset:
|
|
588
|
+
translations: e.translations.map(E),
|
|
589
|
+
displayAsset: R(e.display_asset),
|
|
572
590
|
slug: e.slug,
|
|
573
591
|
tagScore: e.tag_score ?? void 0,
|
|
574
592
|
sport: e.sport,
|
|
@@ -589,8 +607,8 @@ function ee(e) {
|
|
|
589
607
|
name: e.name,
|
|
590
608
|
shortName: e.short_name ?? void 0,
|
|
591
609
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
592
|
-
translations: e.translations.map(
|
|
593
|
-
displayAsset:
|
|
610
|
+
translations: e.translations.map(E),
|
|
611
|
+
displayAsset: R(e.display_asset),
|
|
594
612
|
slug: e.slug,
|
|
595
613
|
tagScore: e.tag_score ?? void 0,
|
|
596
614
|
sport: e.sport,
|
|
@@ -598,7 +616,7 @@ function ee(e) {
|
|
|
598
616
|
providerRef: e.id
|
|
599
617
|
};
|
|
600
618
|
}
|
|
601
|
-
function
|
|
619
|
+
function be(e) {
|
|
602
620
|
return {
|
|
603
621
|
entityType: "horse",
|
|
604
622
|
id: e.id,
|
|
@@ -606,8 +624,8 @@ function Pe(e) {
|
|
|
606
624
|
name: e.name,
|
|
607
625
|
shortName: e.short_name ?? void 0,
|
|
608
626
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
609
|
-
translations: e.translations.map(
|
|
610
|
-
displayAsset:
|
|
627
|
+
translations: e.translations.map(E),
|
|
628
|
+
displayAsset: R(e.display_asset),
|
|
611
629
|
slug: e.slug,
|
|
612
630
|
tagScore: e.tag_score ?? void 0,
|
|
613
631
|
sport: e.sport,
|
|
@@ -616,7 +634,7 @@ function Pe(e) {
|
|
|
616
634
|
providerRef: e.id
|
|
617
635
|
};
|
|
618
636
|
}
|
|
619
|
-
function
|
|
637
|
+
function Pe(e) {
|
|
620
638
|
return {
|
|
621
639
|
entityType: "player",
|
|
622
640
|
id: e.id,
|
|
@@ -624,8 +642,8 @@ function be(e) {
|
|
|
624
642
|
name: e.name,
|
|
625
643
|
shortName: e.short_name ?? void 0,
|
|
626
644
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
627
|
-
translations: e.translations.map(
|
|
628
|
-
displayAsset:
|
|
645
|
+
translations: e.translations.map(E),
|
|
646
|
+
displayAsset: R(e.display_asset),
|
|
629
647
|
slug: e.slug,
|
|
630
648
|
tagScore: e.tag_score ?? void 0,
|
|
631
649
|
sport: e.sport,
|
|
@@ -644,8 +662,8 @@ function ke(e) {
|
|
|
644
662
|
name: e.name,
|
|
645
663
|
shortName: e.short_name ?? void 0,
|
|
646
664
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
647
|
-
translations: e.translations.map(
|
|
648
|
-
displayAsset:
|
|
665
|
+
translations: e.translations.map(E),
|
|
666
|
+
displayAsset: R(e.display_asset),
|
|
649
667
|
slug: e.slug,
|
|
650
668
|
tagScore: e.tag_score ?? void 0,
|
|
651
669
|
sport: e.sport,
|
|
@@ -663,8 +681,8 @@ function He(e) {
|
|
|
663
681
|
name: e.name,
|
|
664
682
|
shortName: e.short_name ?? void 0,
|
|
665
683
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
666
|
-
translations: e.translations.map(
|
|
667
|
-
displayAsset:
|
|
684
|
+
translations: e.translations.map(E),
|
|
685
|
+
displayAsset: R(e.display_asset),
|
|
668
686
|
slug: e.slug,
|
|
669
687
|
tagScore: e.tag_score ?? void 0,
|
|
670
688
|
sport: e.sport,
|
|
@@ -682,8 +700,8 @@ function Ue(e) {
|
|
|
682
700
|
name: e.name,
|
|
683
701
|
shortName: e.short_name ?? void 0,
|
|
684
702
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
685
|
-
translations: e.translations.map(
|
|
686
|
-
displayAsset:
|
|
703
|
+
translations: e.translations.map(E),
|
|
704
|
+
displayAsset: R(e.display_asset),
|
|
687
705
|
slug: e.slug,
|
|
688
706
|
tagScore: e.tag_score ?? void 0,
|
|
689
707
|
sport: e.sport,
|
|
@@ -700,8 +718,8 @@ function Be(e) {
|
|
|
700
718
|
name: e.name,
|
|
701
719
|
shortName: e.short_name ?? void 0,
|
|
702
720
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
703
|
-
translations: e.translations.map(
|
|
704
|
-
displayAsset:
|
|
721
|
+
translations: e.translations.map(E),
|
|
722
|
+
displayAsset: R(e.display_asset),
|
|
705
723
|
slug: e.slug,
|
|
706
724
|
tagScore: e.tag_score ?? void 0,
|
|
707
725
|
sport: e.sport,
|
|
@@ -720,8 +738,8 @@ function $e(e) {
|
|
|
720
738
|
name: e.name,
|
|
721
739
|
shortName: e.short_name ?? void 0,
|
|
722
740
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
723
|
-
translations: e.translations.map(
|
|
724
|
-
displayAsset:
|
|
741
|
+
translations: e.translations.map(E),
|
|
742
|
+
displayAsset: R(e.display_asset),
|
|
725
743
|
slug: e.slug,
|
|
726
744
|
tagScore: e.tag_score ?? void 0,
|
|
727
745
|
sport: e.sport,
|
|
@@ -740,8 +758,8 @@ function xe(e) {
|
|
|
740
758
|
name: e.name,
|
|
741
759
|
shortName: e.short_name ?? void 0,
|
|
742
760
|
threeLetterCode: e.three_letter_code ?? void 0,
|
|
743
|
-
translations: e.translations.map(
|
|
744
|
-
displayAsset:
|
|
761
|
+
translations: e.translations.map(E),
|
|
762
|
+
displayAsset: R(e.display_asset),
|
|
745
763
|
slug: e.slug,
|
|
746
764
|
tagScore: e.tag_score ?? void 0,
|
|
747
765
|
sport: e.sport,
|
|
@@ -755,9 +773,9 @@ function We(e) {
|
|
|
755
773
|
case "city":
|
|
756
774
|
return ee(e);
|
|
757
775
|
case "horse":
|
|
758
|
-
return Pe(e);
|
|
759
|
-
case "player":
|
|
760
776
|
return be(e);
|
|
777
|
+
case "player":
|
|
778
|
+
return Pe(e);
|
|
761
779
|
case "coach":
|
|
762
780
|
return ke(e);
|
|
763
781
|
case "referee":
|
|
@@ -777,7 +795,7 @@ function We(e) {
|
|
|
777
795
|
}
|
|
778
796
|
}
|
|
779
797
|
}
|
|
780
|
-
async function
|
|
798
|
+
async function Rt(e = {}, t) {
|
|
781
799
|
const o = t ?? A(), n = {};
|
|
782
800
|
e.name && (n.name = e.name), e.entityTypes && e.entityTypes.length > 0 && (n.entity_type = e.entityTypes.join(",")), e.sports && e.sports.length > 0 && (n.sport = e.sports.join(",")), e.eventStartTime && (n.event_start_time = e.eventStartTime), e.ids && e.ids.length > 0 && (n.ids = e.ids.join(",")), e.competitionIds && e.competitionIds.length > 0 && (n.competition_ids = e.competitionIds.join(",")), e.domain && (n.domain = e.domain), e.inputLanguage && (n.input_language = e.inputLanguage), e.translationLanguage && (n.translation_language = e.translationLanguage), e.limit !== void 0 && (n.limit = e.limit.toString()), e.offset !== void 0 && (n.offset = e.offset.toString());
|
|
783
801
|
const s = await Ge.get({
|
|
@@ -840,9 +858,9 @@ function je(e) {
|
|
|
840
858
|
if (r.searchParams.set("key", i.apiKey), r.searchParams.set("client_id", i.clientId), n.params)
|
|
841
859
|
for (const [u, c] of Object.entries(n.params))
|
|
842
860
|
c !== void 0 && (Array.isArray(c) ? c.length > 0 && r.searchParams.set(u, c.join(",")) : r.searchParams.set(u, c));
|
|
843
|
-
const a = 3e4,
|
|
844
|
-
|
|
845
|
-
const
|
|
861
|
+
const a = 3e4, d = new URL(r.toString());
|
|
862
|
+
d.searchParams.delete("key"), d.searchParams.delete("client_id"), console.log("🔗 FansUnited API URL:", d.toString());
|
|
863
|
+
const l = await fetch(r.toString(), {
|
|
846
864
|
method: "GET",
|
|
847
865
|
headers: {
|
|
848
866
|
Accept: "application/json",
|
|
@@ -854,21 +872,21 @@ function je(e) {
|
|
|
854
872
|
// Next.js cache options for ISR/on-demand revalidation
|
|
855
873
|
...n.next && { next: n.next }
|
|
856
874
|
});
|
|
857
|
-
if (!
|
|
858
|
-
let u = `Fans United API error: ${
|
|
875
|
+
if (!l.ok) {
|
|
876
|
+
let u = `Fans United API error: ${l.status} ${l.statusText}`;
|
|
859
877
|
try {
|
|
860
|
-
const c = await
|
|
878
|
+
const c = await l.text();
|
|
861
879
|
c && (u += ` - ${c}`);
|
|
862
880
|
} catch (c) {
|
|
863
881
|
console.error("[Fans United HTTP] Failed to read error response body:", {
|
|
864
882
|
error: c instanceof Error ? c.message : String(c),
|
|
865
|
-
status:
|
|
866
|
-
statusText:
|
|
883
|
+
status: l.status,
|
|
884
|
+
statusText: l.statusText
|
|
867
885
|
});
|
|
868
886
|
}
|
|
869
887
|
throw new Error(u);
|
|
870
888
|
}
|
|
871
|
-
return
|
|
889
|
+
return l.json();
|
|
872
890
|
}
|
|
873
891
|
};
|
|
874
892
|
}
|
|
@@ -932,10 +950,10 @@ async function Mt(e, t) {
|
|
|
932
950
|
params: o,
|
|
933
951
|
config: t,
|
|
934
952
|
next: e?.next
|
|
935
|
-
}), s = n.data.map((
|
|
953
|
+
}), s = n.data.map((l) => l.id), i = new Set(s);
|
|
936
954
|
s.length !== i.size && console.warn("⚠️ API returned duplicate competitions!");
|
|
937
|
-
const r = Je(n.data), a = /* @__PURE__ */ new Set(),
|
|
938
|
-
return r.length !==
|
|
955
|
+
const r = Je(n.data), a = /* @__PURE__ */ new Set(), d = r.filter((l) => a.has(l.id) ? !1 : (a.add(l.id), !0));
|
|
956
|
+
return r.length !== d.length && console.warn(`Removed ${r.length - d.length} duplicate competitions`), d;
|
|
939
957
|
}
|
|
940
958
|
function Qe(e) {
|
|
941
959
|
return {
|
|
@@ -1146,7 +1164,7 @@ async function Gt(e, t, o) {
|
|
|
1146
1164
|
});
|
|
1147
1165
|
return st(i);
|
|
1148
1166
|
}
|
|
1149
|
-
async function
|
|
1167
|
+
async function bt(e, t) {
|
|
1150
1168
|
const o = t || A(), n = {};
|
|
1151
1169
|
e?.lang && (n.lang = e.lang), e?.playerIds && (n.player_ids = e.playerIds), e?.countryId && (n.country_id = e.countryId), e?.name && (n.name = e.name), e?.scope && (n.scope = e.scope), e?.limit !== void 0 && (n.limit = String(e.limit)), e?.page !== void 0 && (n.page = String(e.page)), e?.sortField && (n.sort_field = e.sortField), e?.sortOrder && (n.sort_order = e.sortOrder);
|
|
1152
1170
|
const s = await D.get({
|
|
@@ -1157,7 +1175,7 @@ async function Pt(e, t) {
|
|
|
1157
1175
|
});
|
|
1158
1176
|
return it(s);
|
|
1159
1177
|
}
|
|
1160
|
-
async function
|
|
1178
|
+
async function Pt(e, t, o) {
|
|
1161
1179
|
const n = o || A(), s = {};
|
|
1162
1180
|
t?.lang && (s.lang = t.lang);
|
|
1163
1181
|
const i = await D.get({
|
|
@@ -1166,7 +1184,7 @@ async function bt(e, t, o) {
|
|
|
1166
1184
|
next: t?.next,
|
|
1167
1185
|
config: n
|
|
1168
1186
|
});
|
|
1169
|
-
return
|
|
1187
|
+
return le(i);
|
|
1170
1188
|
}
|
|
1171
1189
|
async function kt(e, t) {
|
|
1172
1190
|
const o = t || A(), n = {};
|
|
@@ -1177,7 +1195,7 @@ async function kt(e, t) {
|
|
|
1177
1195
|
next: e?.next,
|
|
1178
1196
|
config: o
|
|
1179
1197
|
});
|
|
1180
|
-
return
|
|
1198
|
+
return de(s);
|
|
1181
1199
|
}
|
|
1182
1200
|
function z(e) {
|
|
1183
1201
|
return {
|
|
@@ -1294,8 +1312,8 @@ async function Ht(e, t) {
|
|
|
1294
1312
|
return [];
|
|
1295
1313
|
const o = t || A(), n = {
|
|
1296
1314
|
q: e.query.trim()
|
|
1297
|
-
}, i = (e.entityTypes && e.entityTypes.length > 0 ? e.entityTypes : ["competition", "team", "player"]).map((
|
|
1298
|
-
switch (
|
|
1315
|
+
}, i = (e.entityTypes && e.entityTypes.length > 0 ? e.entityTypes : ["competition", "team", "player"]).map((d) => {
|
|
1316
|
+
switch (d) {
|
|
1299
1317
|
case "team":
|
|
1300
1318
|
return "teams";
|
|
1301
1319
|
case "player":
|
|
@@ -1303,7 +1321,7 @@ async function Ht(e, t) {
|
|
|
1303
1321
|
case "competition":
|
|
1304
1322
|
return "competitions";
|
|
1305
1323
|
default:
|
|
1306
|
-
return
|
|
1324
|
+
return d;
|
|
1307
1325
|
}
|
|
1308
1326
|
});
|
|
1309
1327
|
n.entities = i.join(","), e.lang && (n.lang = e.lang), e.limit && (n.limit = String(e.limit));
|
|
@@ -1313,15 +1331,15 @@ async function Ht(e, t) {
|
|
|
1313
1331
|
next: e.next,
|
|
1314
1332
|
config: o
|
|
1315
1333
|
}), a = [];
|
|
1316
|
-
return r.data && (r.data.competitions && r.data.competitions.forEach((
|
|
1317
|
-
const
|
|
1318
|
-
|
|
1319
|
-
}), r.data.teams && r.data.teams.forEach((
|
|
1320
|
-
const
|
|
1321
|
-
|
|
1322
|
-
}), r.data.players && r.data.players.forEach((
|
|
1323
|
-
const
|
|
1324
|
-
|
|
1334
|
+
return r.data && (r.data.competitions && r.data.competitions.forEach((d) => {
|
|
1335
|
+
const l = j({ ...d, entity_type: "competition" });
|
|
1336
|
+
l && a.push(l);
|
|
1337
|
+
}), r.data.teams && r.data.teams.forEach((d) => {
|
|
1338
|
+
const l = j({ ...d, entity_type: "team" });
|
|
1339
|
+
l && a.push(l);
|
|
1340
|
+
}), r.data.players && r.data.players.forEach((d) => {
|
|
1341
|
+
const l = j({ ...d, entity_type: "player" });
|
|
1342
|
+
l && a.push(l);
|
|
1325
1343
|
})), a;
|
|
1326
1344
|
}
|
|
1327
1345
|
function Ut(e) {
|
|
@@ -1363,16 +1381,16 @@ function qt(e, t, o) {
|
|
|
1363
1381
|
const n = o.filter((r) => r.status.type === "FINISHED"), s = o.filter(
|
|
1364
1382
|
(r) => r.status.type === "NOT_STARTED" || r.status.type === "POSTPONED"
|
|
1365
1383
|
), i = t.entries.map((r) => {
|
|
1366
|
-
const a = r.competitor.id,
|
|
1384
|
+
const a = r.competitor.id, d = n.filter(
|
|
1367
1385
|
(m) => m.competitorOne.id === e && m.competitorTwo.id === a || m.competitorOne.id === a && m.competitorTwo.id === e
|
|
1368
|
-
),
|
|
1386
|
+
), l = s.filter(
|
|
1369
1387
|
(m) => m.competitorOne.id === e && m.competitorTwo.id === a || m.competitorOne.id === a && m.competitorTwo.id === e
|
|
1370
1388
|
);
|
|
1371
1389
|
let u, c;
|
|
1372
|
-
return
|
|
1373
|
-
const g = m.competitorOne.id === e, p = parseInt(m.score?.competitorOne ?? "0"), h = parseInt(m.score?.competitorTwo ?? "0"), F = g ? p : h,
|
|
1390
|
+
return d.forEach((m) => {
|
|
1391
|
+
const g = m.competitorOne.id === e, p = parseInt(m.score?.competitorOne ?? "0"), h = parseInt(m.score?.competitorTwo ?? "0"), F = g ? p : h, _ = g ? h : p;
|
|
1374
1392
|
let O;
|
|
1375
|
-
F >
|
|
1393
|
+
F > _ ? O = "W" : F === _ ? O = "D" : O = "L";
|
|
1376
1394
|
const M = {
|
|
1377
1395
|
result: O,
|
|
1378
1396
|
score: `${p} - ${h}`,
|
|
@@ -1381,7 +1399,7 @@ function qt(e, t, o) {
|
|
|
1381
1399
|
isUpcoming: !1
|
|
1382
1400
|
};
|
|
1383
1401
|
g ? u = M : c = M;
|
|
1384
|
-
}),
|
|
1402
|
+
}), l.forEach((m) => {
|
|
1385
1403
|
const g = m.competitorOne.id === e;
|
|
1386
1404
|
g && !u ? u = {
|
|
1387
1405
|
date: m.timing.kickoffTime,
|
|
@@ -1459,11 +1477,11 @@ function Jt(e, t = 10) {
|
|
|
1459
1477
|
const n = o.seasonStatistics?.yellowCards ?? 0, s = o.seasonStatistics?.redCards ?? 0;
|
|
1460
1478
|
return n + s > 0;
|
|
1461
1479
|
}).sort((o, n) => {
|
|
1462
|
-
const s = o.seasonStatistics?.yellowCards ?? 0, i = o.seasonStatistics?.redCards ?? 0, r = n.seasonStatistics?.yellowCards ?? 0, a = n.seasonStatistics?.redCards ?? 0,
|
|
1463
|
-
return
|
|
1480
|
+
const s = o.seasonStatistics?.yellowCards ?? 0, i = o.seasonStatistics?.redCards ?? 0, r = n.seasonStatistics?.yellowCards ?? 0, a = n.seasonStatistics?.redCards ?? 0, d = s + i * 3, l = r + a * 3;
|
|
1481
|
+
return l !== d ? l - d : a !== i ? a - i : r - s;
|
|
1464
1482
|
}).slice(0, t);
|
|
1465
1483
|
}
|
|
1466
|
-
function
|
|
1484
|
+
function P(e) {
|
|
1467
1485
|
const t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
|
|
1468
1486
|
return e.forEach((n) => {
|
|
1469
1487
|
!n.mainEvents || n.mainEvents.length === 0 || n.mainEvents.forEach((s) => {
|
|
@@ -1513,54 +1531,54 @@ function H(e) {
|
|
|
1513
1531
|
totalCards: (t.yellowCards ?? 0) + (t.redCards ?? 0)
|
|
1514
1532
|
}));
|
|
1515
1533
|
}
|
|
1516
|
-
function
|
|
1517
|
-
const o =
|
|
1534
|
+
function lt(e, t = 10) {
|
|
1535
|
+
const o = P(e);
|
|
1518
1536
|
return H(o).filter((s) => (s.goals ?? 0) > 0).sort((s, i) => {
|
|
1519
1537
|
const r = s.goals ?? 0, a = i.goals ?? 0;
|
|
1520
1538
|
if (a !== r)
|
|
1521
1539
|
return a - r;
|
|
1522
|
-
const
|
|
1523
|
-
return (i.assists ?? 0) -
|
|
1540
|
+
const d = s.assists ?? 0;
|
|
1541
|
+
return (i.assists ?? 0) - d;
|
|
1524
1542
|
}).slice(0, t);
|
|
1525
1543
|
}
|
|
1526
|
-
function
|
|
1527
|
-
const o =
|
|
1544
|
+
function dt(e, t = 10) {
|
|
1545
|
+
const o = P(e);
|
|
1528
1546
|
return H(o).filter((s) => (s.assists ?? 0) > 0).sort((s, i) => {
|
|
1529
1547
|
const r = s.assists ?? 0, a = i.assists ?? 0;
|
|
1530
1548
|
if (a !== r)
|
|
1531
1549
|
return a - r;
|
|
1532
|
-
const
|
|
1533
|
-
return (i.goals ?? 0) -
|
|
1550
|
+
const d = s.goals ?? 0;
|
|
1551
|
+
return (i.goals ?? 0) - d;
|
|
1534
1552
|
}).slice(0, t);
|
|
1535
1553
|
}
|
|
1536
1554
|
function ut(e, t = 10) {
|
|
1537
|
-
const o =
|
|
1555
|
+
const o = P(e);
|
|
1538
1556
|
return H(o).filter((s) => (s.totalCards ?? 0) > 0).sort((s, i) => {
|
|
1539
1557
|
const r = (s.yellowCards ?? 0) + (s.redCards ?? 0) * 3, a = (i.yellowCards ?? 0) + (i.redCards ?? 0) * 3;
|
|
1540
1558
|
if (a !== r)
|
|
1541
1559
|
return a - r;
|
|
1542
|
-
const
|
|
1543
|
-
if (
|
|
1544
|
-
return
|
|
1560
|
+
const d = s.redCards ?? 0, l = i.redCards ?? 0;
|
|
1561
|
+
if (l !== d)
|
|
1562
|
+
return l - d;
|
|
1545
1563
|
const u = s.yellowCards ?? 0;
|
|
1546
1564
|
return (i.yellowCards ?? 0) - u;
|
|
1547
1565
|
}).slice(0, t);
|
|
1548
1566
|
}
|
|
1549
1567
|
function mt(e, t = 10) {
|
|
1550
|
-
const o =
|
|
1568
|
+
const o = P(e);
|
|
1551
1569
|
return H(o).filter((s) => (s.goals ?? 0) + (s.assists ?? 0) > 0).sort((s, i) => {
|
|
1552
1570
|
const r = (s.goals ?? 0) + (s.assists ?? 0), a = (i.goals ?? 0) + (i.assists ?? 0);
|
|
1553
1571
|
if (a !== r)
|
|
1554
1572
|
return a - r;
|
|
1555
|
-
const
|
|
1556
|
-
if (
|
|
1557
|
-
return
|
|
1573
|
+
const d = s.goals ?? 0, l = i.goals ?? 0;
|
|
1574
|
+
if (l !== d)
|
|
1575
|
+
return l - d;
|
|
1558
1576
|
const u = s.assists ?? 0;
|
|
1559
1577
|
return (i.assists ?? 0) - u;
|
|
1560
1578
|
}).slice(0, t);
|
|
1561
1579
|
}
|
|
1562
1580
|
function ft(e) {
|
|
1563
|
-
const t =
|
|
1581
|
+
const t = P(e);
|
|
1564
1582
|
return H(t).sort((n, s) => {
|
|
1565
1583
|
const i = n.appearances ?? 0, r = s.appearances ?? 0;
|
|
1566
1584
|
if (r !== i)
|
|
@@ -1570,10 +1588,10 @@ function ft(e) {
|
|
|
1570
1588
|
});
|
|
1571
1589
|
}
|
|
1572
1590
|
function Qt(e, t = 10) {
|
|
1573
|
-
return G(() =>
|
|
1591
|
+
return G(() => lt(e, t), [e, t]);
|
|
1574
1592
|
}
|
|
1575
1593
|
function Xt(e, t = 10) {
|
|
1576
|
-
return G(() =>
|
|
1594
|
+
return G(() => dt(e, t), [e, t]);
|
|
1577
1595
|
}
|
|
1578
1596
|
function Zt(e, t = 10) {
|
|
1579
1597
|
return G(() => ut(e, t), [e, t]);
|
|
@@ -1585,7 +1603,7 @@ function eo(e) {
|
|
|
1585
1603
|
return G(() => ft(e), [e]);
|
|
1586
1604
|
}
|
|
1587
1605
|
function gt(e) {
|
|
1588
|
-
return G(() =>
|
|
1606
|
+
return G(() => P(e), [e]);
|
|
1589
1607
|
}
|
|
1590
1608
|
function to(e, t) {
|
|
1591
1609
|
const o = gt(e);
|
|
@@ -1618,11 +1636,11 @@ function io(e) {
|
|
|
1618
1636
|
function yt(e, t, o) {
|
|
1619
1637
|
if (e.status?.type !== "FINISHED" || !e.score) return null;
|
|
1620
1638
|
const n = parseInt(e.score.competitorOne || "0"), s = parseInt(e.score.competitorTwo || "0"), i = o ? n : s, r = o ? s : n;
|
|
1621
|
-
let a = null,
|
|
1622
|
-
const
|
|
1623
|
-
if (
|
|
1624
|
-
const g = parseInt(
|
|
1625
|
-
a = o ? g : p,
|
|
1639
|
+
let a = null, d = null;
|
|
1640
|
+
const l = e.score.breakdown?.halfTime;
|
|
1641
|
+
if (l) {
|
|
1642
|
+
const g = parseInt(l.competitorOne || "0"), p = parseInt(l.competitorTwo || "0");
|
|
1643
|
+
a = o ? g : p, d = o ? p : g;
|
|
1626
1644
|
}
|
|
1627
1645
|
const u = e.statistics;
|
|
1628
1646
|
let c = null, m = null;
|
|
@@ -1634,7 +1652,7 @@ function yt(e, t, o) {
|
|
|
1634
1652
|
goalsFor: i,
|
|
1635
1653
|
goalsAgainst: r,
|
|
1636
1654
|
halfTimeGoalsFor: a,
|
|
1637
|
-
halfTimeGoalsAgainst:
|
|
1655
|
+
halfTimeGoalsAgainst: d,
|
|
1638
1656
|
cornersFor: c,
|
|
1639
1657
|
cornersAgainst: m,
|
|
1640
1658
|
isWin: i > r,
|
|
@@ -1668,24 +1686,24 @@ function uo(e, t, o) {
|
|
|
1668
1686
|
const c = u.competitorOne.id === t || u.competitorTwo.id === t, m = u.competitorOne.id === o || u.competitorTwo.id === o;
|
|
1669
1687
|
return c && m;
|
|
1670
1688
|
});
|
|
1671
|
-
let s = 0, i = 0, r = 0, a = 0,
|
|
1689
|
+
let s = 0, i = 0, r = 0, a = 0, d = 0;
|
|
1672
1690
|
n.forEach((u) => {
|
|
1673
1691
|
const c = parseInt(u.score?.competitorOne || "0"), m = parseInt(u.score?.competitorTwo || "0"), g = u.competitorOne.id === t, p = g ? c : m, h = g ? m : c;
|
|
1674
|
-
a += p,
|
|
1692
|
+
a += p, d += h, p > h ? s++ : h > p ? i++ : r++;
|
|
1675
1693
|
});
|
|
1676
|
-
const
|
|
1694
|
+
const l = n.length;
|
|
1677
1695
|
return {
|
|
1678
|
-
totalMatches:
|
|
1696
|
+
totalMatches: l,
|
|
1679
1697
|
homeTeamWins: s,
|
|
1680
1698
|
awayTeamWins: i,
|
|
1681
1699
|
draws: r,
|
|
1682
1700
|
homeTeamGoals: a,
|
|
1683
|
-
awayTeamGoals:
|
|
1684
|
-
homeTeamWinPercentage:
|
|
1685
|
-
awayTeamWinPercentage:
|
|
1686
|
-
drawPercentage:
|
|
1687
|
-
homeTeamAvgGoals:
|
|
1688
|
-
awayTeamAvgGoals:
|
|
1701
|
+
awayTeamGoals: d,
|
|
1702
|
+
homeTeamWinPercentage: l > 0 ? s / l * 100 : 0,
|
|
1703
|
+
awayTeamWinPercentage: l > 0 ? i / l * 100 : 0,
|
|
1704
|
+
drawPercentage: l > 0 ? r / l * 100 : 0,
|
|
1705
|
+
homeTeamAvgGoals: l > 0 ? a / l : 0,
|
|
1706
|
+
awayTeamAvgGoals: l > 0 ? d / l : 0
|
|
1689
1707
|
};
|
|
1690
1708
|
}
|
|
1691
1709
|
function mo(e, t, o, n = 5) {
|
|
@@ -1694,9 +1712,9 @@ function mo(e, t, o, n = 5) {
|
|
|
1694
1712
|
const r = i.competitorOne.id === t || i.competitorTwo.id === t, a = i.competitorOne.id === o || i.competitorTwo.id === o;
|
|
1695
1713
|
return r && a;
|
|
1696
1714
|
}).sort((i, r) => new Date(r.timing.kickoffTime).getTime() - new Date(i.timing.kickoffTime).getTime()).slice(0, n).map((i) => {
|
|
1697
|
-
const r = parseInt(i.score?.competitorOne || "0"), a = parseInt(i.score?.competitorTwo || "0"),
|
|
1715
|
+
const r = parseInt(i.score?.competitorOne || "0"), a = parseInt(i.score?.competitorTwo || "0"), d = i.competitorOne.id === t, l = d ? r : a, u = d ? a : r;
|
|
1698
1716
|
let c;
|
|
1699
|
-
return
|
|
1717
|
+
return l > u ? c = "home" : u > l ? c = "away" : c = "draw", {
|
|
1700
1718
|
id: i.id,
|
|
1701
1719
|
date: new Date(i.timing.kickoffTime).toLocaleDateString("en-GB", {
|
|
1702
1720
|
day: "numeric",
|
|
@@ -1728,14 +1746,14 @@ function Z(e, t, o, n) {
|
|
|
1728
1746
|
for (const i of e) {
|
|
1729
1747
|
const r = i.competitorOne.id === t, a = i.competitorTwo.id === t;
|
|
1730
1748
|
if (!r && !a || o === "home" && !r || o === "away" && !a || i.status?.type !== "FINISHED") continue;
|
|
1731
|
-
const
|
|
1732
|
-
if (!
|
|
1733
|
-
const
|
|
1734
|
-
const F = p.minute ?? 0,
|
|
1735
|
-
return F !==
|
|
1749
|
+
const d = i.mainEvents;
|
|
1750
|
+
if (!d || !Array.isArray(d)) continue;
|
|
1751
|
+
const l = d.filter((p) => p.type && pt.includes(p.type)).sort((p, h) => {
|
|
1752
|
+
const F = p.minute ?? 0, _ = h.minute ?? 0;
|
|
1753
|
+
return F !== _ ? F - _ : (p.injuryMinute ?? 0) - (h.injuryMinute ?? 0);
|
|
1736
1754
|
});
|
|
1737
|
-
if (
|
|
1738
|
-
const u =
|
|
1755
|
+
if (l.length === 0) continue;
|
|
1756
|
+
const u = l[0], c = r ? "ONE" : "TWO", m = u.type === "OWN_GOAL";
|
|
1739
1757
|
let g;
|
|
1740
1758
|
m ? g = u.competitorPosition !== c : g = u.competitorPosition === c, (n === "scored" && g || n === "conceded" && !g) && s++;
|
|
1741
1759
|
}
|
|
@@ -1773,54 +1791,54 @@ function fo(e, t, o) {
|
|
|
1773
1791
|
avgCornersFor: 0,
|
|
1774
1792
|
avgCornersAgainst: 0
|
|
1775
1793
|
};
|
|
1776
|
-
const i = n.reduce((f, v) => f + v.goalsFor, 0), r = n.reduce((f, v) => f + v.goalsAgainst, 0), a = n.filter((f) => f.goalsAgainst === 0).length,
|
|
1794
|
+
const i = n.reduce((f, v) => f + v.goalsFor, 0), r = n.reduce((f, v) => f + v.goalsAgainst, 0), a = n.filter((f) => f.goalsAgainst === 0).length, d = n.filter((f) => f.isWin && f.goalsAgainst === 0).length, l = n.filter((f) => f.goalsFor > 0).length, u = n.filter((f) => f.goalsFor === 0).length, c = n.filter((f) => f.isLoss && f.goalsFor === 0).length, m = n.filter((f) => f.goalsAgainst > 0).length, g = n.filter((f) => f.halfTimeGoalsFor !== null), p = g.length, h = g.filter((f) => {
|
|
1777
1795
|
const v = f.halfTimeGoalsFor, k = f.goalsFor - v;
|
|
1778
1796
|
return v > 0 && k > 0;
|
|
1779
|
-
}).length, F = Z(e, t, o, "scored"),
|
|
1797
|
+
}).length, F = Z(e, t, o, "scored"), _ = vt(e, t, o), O = g.filter((f) => f.halfTimeGoalsFor > f.halfTimeGoalsAgainst).length, M = g.filter((f) => {
|
|
1780
1798
|
const v = f.halfTimeGoalsAgainst, k = f.goalsAgainst - v;
|
|
1781
1799
|
return v > 0 && k > 0;
|
|
1782
|
-
}).length, U = Z(e, t, o, "conceded"), B = g.filter((f) => f.halfTimeGoalsAgainst > f.halfTimeGoalsFor).length,
|
|
1800
|
+
}).length, U = Z(e, t, o, "conceded"), B = g.filter((f) => f.halfTimeGoalsAgainst > f.halfTimeGoalsFor).length, b = n.filter((f) => f.cornersFor !== null), $ = b.reduce((f, v) => f + (v.cornersFor || 0), 0), x = b.reduce((f, v) => f + (v.cornersAgainst || 0), 0);
|
|
1783
1801
|
return {
|
|
1784
1802
|
played: s,
|
|
1785
1803
|
goalsForPerMatch: W(i, s),
|
|
1786
1804
|
cleanSheets: N(a, s),
|
|
1787
|
-
wonToNil: N(
|
|
1788
|
-
scoringRate: N(
|
|
1805
|
+
wonToNil: N(d, s),
|
|
1806
|
+
scoringRate: N(l, s),
|
|
1789
1807
|
scoredInBothHalves: N(h, p),
|
|
1790
|
-
scoredFirst: N(F,
|
|
1808
|
+
scoredFirst: N(F, _),
|
|
1791
1809
|
leadingAtHalfTime: N(O, p),
|
|
1792
1810
|
goalsAgainstPerMatch: W(r, s),
|
|
1793
1811
|
failedToScore: N(u, s),
|
|
1794
1812
|
lostToNil: N(c, s),
|
|
1795
1813
|
concedingRate: N(m, s),
|
|
1796
1814
|
concededInBothHalves: N(M, p),
|
|
1797
|
-
concededFirst: N(U,
|
|
1815
|
+
concededFirst: N(U, _),
|
|
1798
1816
|
losingAtHalfTime: N(B, p),
|
|
1799
|
-
avgCornersFor: W($,
|
|
1800
|
-
avgCornersAgainst: W(x,
|
|
1817
|
+
avgCornersFor: W($, b.length),
|
|
1818
|
+
avgCornersAgainst: W(x, b.length)
|
|
1801
1819
|
};
|
|
1802
1820
|
}
|
|
1803
|
-
function
|
|
1821
|
+
function St(e, t) {
|
|
1804
1822
|
return e.filter((o) => o.status?.type !== "FINISHED" ? !1 : o.competitorOne.id === t || o.competitorTwo.id === t).map((o) => {
|
|
1805
1823
|
const n = o.competitorOne.id === t, s = parseInt(o.score?.competitorOne || "0"), i = parseInt(o.score?.competitorTwo || "0"), r = s + i, a = o.periods;
|
|
1806
|
-
let
|
|
1824
|
+
let d = null;
|
|
1807
1825
|
if (a && Array.isArray(a)) {
|
|
1808
|
-
const
|
|
1826
|
+
const l = a.find(
|
|
1809
1827
|
(u) => u.type === "FIRST_HALF" || u.type === "1ST_HALF"
|
|
1810
1828
|
);
|
|
1811
|
-
if (
|
|
1812
|
-
const u = parseInt(
|
|
1813
|
-
|
|
1829
|
+
if (l?.score) {
|
|
1830
|
+
const u = parseInt(l.score.competitorOne || "0"), c = parseInt(l.score.competitorTwo || "0");
|
|
1831
|
+
d = u + c;
|
|
1814
1832
|
}
|
|
1815
1833
|
}
|
|
1816
|
-
return { totalGoals: r, halfTimeGoals:
|
|
1834
|
+
return { totalGoals: r, halfTimeGoals: d, isHome: n };
|
|
1817
1835
|
});
|
|
1818
1836
|
}
|
|
1819
1837
|
function y(e, t) {
|
|
1820
1838
|
return e.length === 0 ? 0 : e.filter((n) => n > t).length / e.length * 100;
|
|
1821
1839
|
}
|
|
1822
1840
|
function go(e, t) {
|
|
1823
|
-
const o =
|
|
1841
|
+
const o = St(e, t), n = o.filter((c) => c.isHome), s = o.filter((c) => !c.isHome), i = o.map((c) => c.totalGoals), r = n.map((c) => c.totalGoals), a = s.map((c) => c.totalGoals), d = o.filter((c) => c.halfTimeGoals !== null).map((c) => c.halfTimeGoals), l = n.filter((c) => c.halfTimeGoals !== null).map((c) => c.halfTimeGoals), u = s.filter((c) => c.halfTimeGoals !== null).map((c) => c.halfTimeGoals);
|
|
1824
1842
|
return {
|
|
1825
1843
|
over05: {
|
|
1826
1844
|
home: y(r, 0.5),
|
|
@@ -1853,23 +1871,23 @@ function go(e, t) {
|
|
|
1853
1871
|
away: y(a, 5.5)
|
|
1854
1872
|
},
|
|
1855
1873
|
over05HT: {
|
|
1856
|
-
home: y(
|
|
1857
|
-
total: y(
|
|
1874
|
+
home: y(l, 0.5),
|
|
1875
|
+
total: y(d, 0.5),
|
|
1858
1876
|
away: y(u, 0.5)
|
|
1859
1877
|
},
|
|
1860
1878
|
over15HT: {
|
|
1861
|
-
home: y(
|
|
1862
|
-
total: y(
|
|
1879
|
+
home: y(l, 1.5),
|
|
1880
|
+
total: y(d, 1.5),
|
|
1863
1881
|
away: y(u, 1.5)
|
|
1864
1882
|
},
|
|
1865
1883
|
over25HT: {
|
|
1866
|
-
home: y(
|
|
1867
|
-
total: y(
|
|
1884
|
+
home: y(l, 2.5),
|
|
1885
|
+
total: y(d, 2.5),
|
|
1868
1886
|
away: y(u, 2.5)
|
|
1869
1887
|
}
|
|
1870
1888
|
};
|
|
1871
1889
|
}
|
|
1872
|
-
function
|
|
1890
|
+
function _t(e, t) {
|
|
1873
1891
|
const o = e.competitorOne.id === t, n = e.competitorTwo.id === t;
|
|
1874
1892
|
if (!o && !n || !e.score) return null;
|
|
1875
1893
|
const s = parseInt(o ? e.score.competitorOne || "0" : e.score.competitorTwo || "0"), i = parseInt(o ? e.score.competitorTwo || "0" : e.score.competitorOne || "0");
|
|
@@ -1880,14 +1898,14 @@ function St(e, t) {
|
|
|
1880
1898
|
};
|
|
1881
1899
|
}
|
|
1882
1900
|
function po(e, t, o, n, s, i) {
|
|
1883
|
-
const r = t?.entries.find((L) => L.competitor.id === e), a = o?.entries.find((L) => L.competitor.id === e),
|
|
1901
|
+
const r = t?.entries.find((L) => L.competitor.id === e), a = o?.entries.find((L) => L.competitor.id === e), d = n?.entries.find((L) => L.competitor.id === e), l = s?.entries.find((L) => L.competitor.id === e), u = i?.entries.find((L) => L.competitor.id === e);
|
|
1884
1902
|
if (!r) return null;
|
|
1885
|
-
const c = a?.stats?.goalsFor ?? 0, m =
|
|
1903
|
+
const c = a?.stats?.goalsFor ?? 0, m = d?.stats?.goalsFor ?? 0, g = r?.stats?.goalsFor ?? 0, p = l?.stats?.goalsAgainst ?? 0, h = u?.stats?.goalsAgainst ?? 0, F = r?.stats?.goalsAgainst ?? 0, _ = a?.stats?.played ?? 0, O = d?.stats?.played ?? 0, M = r?.stats?.played ?? 0, U = M > 0 ? g / M : 0, B = M > 0 ? F / M : 0, b = U + B, $ = _ > 0 ? c / _ : 0, x = O > 0 ? m / O : 0, f = _ > 0 ? p / _ : 0, v = O > 0 ? h / O : 0, k = $ + f, ne = x + v;
|
|
1886
1904
|
return {
|
|
1887
1905
|
homeGoals: c,
|
|
1888
1906
|
totalGoals: g,
|
|
1889
1907
|
awayGoals: m,
|
|
1890
|
-
homeGamesPlayed:
|
|
1908
|
+
homeGamesPlayed: _,
|
|
1891
1909
|
awayGamesPlayed: O,
|
|
1892
1910
|
totalGamesPlayed: M,
|
|
1893
1911
|
homeGoalsConceded: p,
|
|
@@ -1895,7 +1913,7 @@ function po(e, t, o, n, s, i) {
|
|
|
1895
1913
|
awayGoalsConceded: h,
|
|
1896
1914
|
gfPerMatch: U,
|
|
1897
1915
|
gaPerMatch: B,
|
|
1898
|
-
gfGaPerMatch:
|
|
1916
|
+
gfGaPerMatch: b,
|
|
1899
1917
|
homeGfPerMatch: $,
|
|
1900
1918
|
awayGfPerMatch: x,
|
|
1901
1919
|
homeGaPerMatch: f,
|
|
@@ -1906,8 +1924,8 @@ function po(e, t, o, n, s, i) {
|
|
|
1906
1924
|
}
|
|
1907
1925
|
function C(e, t, o, n) {
|
|
1908
1926
|
const s = e.filter((r) => {
|
|
1909
|
-
const a = r.competitorOne.id === t,
|
|
1910
|
-
return !(!a && !
|
|
1927
|
+
const a = r.competitorOne.id === t, d = r.competitorTwo.id === t;
|
|
1928
|
+
return !(!a && !d || r.status?.type !== "FINISHED" || n === "home" && !a || n === "away" && !d);
|
|
1911
1929
|
}).sort((r, a) => new Date(a.timing.kickoffTime).getTime() - new Date(r.timing.kickoffTime).getTime());
|
|
1912
1930
|
if (s.length === 0) return null;
|
|
1913
1931
|
let i = 0;
|
|
@@ -2053,7 +2071,7 @@ function w(e, t) {
|
|
|
2053
2071
|
const o = /* @__PURE__ */ new Map();
|
|
2054
2072
|
return e.forEach((n) => {
|
|
2055
2073
|
if (n.status?.type !== "FINISHED") return;
|
|
2056
|
-
const s =
|
|
2074
|
+
const s = _t(n, t);
|
|
2057
2075
|
if (!s) return;
|
|
2058
2076
|
const i = s.isHome ? n.competitorTwo.id : n.competitorOne.id, r = s.isHome ? n.competitorTwo : n.competitorOne, a = o.get(i) || {
|
|
2059
2077
|
opponentId: i,
|
|
@@ -2064,16 +2082,16 @@ function w(e, t) {
|
|
|
2064
2082
|
}), o;
|
|
2065
2083
|
}
|
|
2066
2084
|
function ho(e, t, o, n, s, i, r) {
|
|
2067
|
-
const a = w(e, t),
|
|
2085
|
+
const a = w(e, t), d = w(e, o), l = /* @__PURE__ */ new Set([
|
|
2068
2086
|
...a.keys(),
|
|
2069
|
-
...
|
|
2087
|
+
...d.keys(),
|
|
2070
2088
|
t,
|
|
2071
2089
|
// Include home team as row for away team results
|
|
2072
2090
|
o
|
|
2073
2091
|
// Include away team as row for home team results
|
|
2074
2092
|
]), u = [];
|
|
2075
|
-
return
|
|
2076
|
-
const m = a.get(c), g =
|
|
2093
|
+
return l.forEach((c) => {
|
|
2094
|
+
const m = a.get(c), g = d.get(c);
|
|
2077
2095
|
if (!m && !g && c !== t && c !== o)
|
|
2078
2096
|
return;
|
|
2079
2097
|
let p, h;
|
|
@@ -2092,8 +2110,8 @@ function ho(e, t, o, n, s, i, r) {
|
|
|
2092
2110
|
}
|
|
2093
2111
|
export {
|
|
2094
2112
|
pt as GOAL_EVENT_TYPES,
|
|
2095
|
-
|
|
2096
|
-
|
|
2113
|
+
So as addProviderRef,
|
|
2114
|
+
P as aggregatePlayerStatisticsFromMatches,
|
|
2097
2115
|
yt as analyzeMatch,
|
|
2098
2116
|
W as calcAverage,
|
|
2099
2117
|
N as calcPercentage,
|
|
@@ -2106,14 +2124,14 @@ export {
|
|
|
2106
2124
|
Ut as getActiveSeason,
|
|
2107
2125
|
ft as getAllPlayerStatisticsFromMatches,
|
|
2108
2126
|
Nt as getBasketballLivescore,
|
|
2109
|
-
|
|
2127
|
+
_o as getBatchMatchOdds,
|
|
2110
2128
|
A as getConfig,
|
|
2111
2129
|
Lt as getFansUnitedFootballCompetition,
|
|
2112
2130
|
Mt as getFansUnitedFootballCompetitions,
|
|
2113
|
-
|
|
2131
|
+
Pt as getFansUnitedFootballMatch,
|
|
2114
2132
|
kt as getFansUnitedFootballMatches,
|
|
2115
2133
|
Gt as getFansUnitedFootballPlayer,
|
|
2116
|
-
|
|
2134
|
+
bt as getFansUnitedFootballPlayers,
|
|
2117
2135
|
Ht as getFansUnitedFootballSearch,
|
|
2118
2136
|
Dt as getFansUnitedFootballTeam,
|
|
2119
2137
|
It as getFansUnitedFootballTeams,
|
|
@@ -2121,20 +2139,20 @@ export {
|
|
|
2121
2139
|
Ao as getFootballLivescore,
|
|
2122
2140
|
Oo as getFootballMatch,
|
|
2123
2141
|
No as getFootballMatchCommentary,
|
|
2124
|
-
|
|
2125
|
-
|
|
2142
|
+
Eo as getFootballMatchEvents,
|
|
2143
|
+
Ro as getFootballMatchLineups,
|
|
2126
2144
|
Fo as getFootballMatchOdds,
|
|
2127
2145
|
Mo as getFootballMatchStatistics,
|
|
2128
2146
|
Lo as getFootballMatches,
|
|
2129
2147
|
Do as getFootballPlayerSeasonStatistics,
|
|
2130
2148
|
Io as getFootballSeasonDetails,
|
|
2131
2149
|
Go as getFootballStandings,
|
|
2132
|
-
|
|
2133
|
-
|
|
2150
|
+
bo as getFootballTeam,
|
|
2151
|
+
Po as getFootballTeamSquad,
|
|
2134
2152
|
ko as getLeaderboardMatches,
|
|
2135
2153
|
Ho as getLeaderboardTeamMatches,
|
|
2136
2154
|
Uo as getLeaderboardTemplate,
|
|
2137
|
-
|
|
2155
|
+
_t as getMatchResult,
|
|
2138
2156
|
ut as getMostCardedPlayersFromMatches,
|
|
2139
2157
|
lo as getOpponentScore,
|
|
2140
2158
|
Bo as getProviderRefId,
|
|
@@ -2158,20 +2176,20 @@ export {
|
|
|
2158
2176
|
Vt as getTeamTopScorers,
|
|
2159
2177
|
xt as getTeamUpcomingMatches,
|
|
2160
2178
|
ho as getTeamsCommonOpponents,
|
|
2161
|
-
|
|
2162
|
-
|
|
2179
|
+
Et as getTennisLivescore,
|
|
2180
|
+
dt as getTopAssistersFromMatches,
|
|
2163
2181
|
mt as getTopGoalContributorsFromMatches,
|
|
2164
|
-
|
|
2182
|
+
lt as getTopScorersFromMatches,
|
|
2165
2183
|
$o as isConfigured,
|
|
2166
2184
|
ao as isMatchFinished,
|
|
2167
2185
|
ht as isTeamAway,
|
|
2168
2186
|
J as isTeamHome,
|
|
2169
2187
|
ro as isTeamInMatch,
|
|
2170
|
-
|
|
2188
|
+
Rt as search,
|
|
2171
2189
|
Ot as searchFootball,
|
|
2172
2190
|
xo as setConfig,
|
|
2173
2191
|
T as streakFilters,
|
|
2174
|
-
|
|
2192
|
+
S as toProviderRefArray,
|
|
2175
2193
|
eo as useAllPlayerStatisticsFromMatches,
|
|
2176
2194
|
Zt as useMostCardedPlayersFromMatches,
|
|
2177
2195
|
to as usePlayerStatistics,
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"description": "A TypeScript library for fetching and transforming sports data from multiple API providers. Returns clean, canonical types that are provider-agnostic.",
|
|
5
5
|
"homepage": "https://fansunited.com/",
|
|
6
6
|
"private": false,
|
|
7
|
-
"version": "0.8.
|
|
7
|
+
"version": "0.8.4",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"main": "./fansunited-data-layer.cjs",
|
|
10
10
|
"module": "./fansunited-data-layer.js",
|