{"version":3,"mappings":"mXAAO,MAAMA,GAAO,CAClB,IAAK,CACH,MAAO,WACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,WACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,aACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,UACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,QACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,UACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,SACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,oBACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,WACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,eACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,UACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,UACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,sBACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,WACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,MACP,KAAM,gFACN,MAAO,SACT,EACA,IAAK,CACH,MAAO,kBACP,KAAM,gFACN,MAAO,SACT,CACF,ECjFaC,GAAO,CAClB,iBAAkB,CAChB,iBACA,8HACF,EACA,YAAa,CACX,YACA,yHACF,EACA,oBAAqB,CACnB,oBACA,iIACF,EACA,aAAc,CACZ,aACA,0HACF,EACA,gBAAiB,CACf,gBACA,6HACF,EACA,gBAAiB,CACf,gBACA,6HACF,EACA,cAAe,CACb,cACA,2HACF,EACA,mBAAoB,CAClB,mBACA,gIACF,EACA,MAAO,CACL,QACA,qHACF,EACA,OAAQ,CACN,SACA,sHACF,EACA,WAAY,CACV,aACA,0HACF,EACA,eAAgB,CACd,eACA,4HACF,EACA,eAAgB,CACd,eACA,4HACF,EACA,OAAQ,CACN,SACA,sHACF,EACA,cAAe,CACb,cACA,2HACF,CACF,EACaC,GAAS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","names":["civs","MAPS","mapMap","name","img","TOURNAMENT_CIV_ABBRS","TOURNAMENT_DRAFT_CIVS","TOURNAMENT_CIV_ABBR_CORRECTIONS","parseVariables","raw","acc","_","k","v","parseCiv","arr","fetchResults","url","res","parseMatchesFromWikiSyntax","section","matches","body","drafts","d","parsed","score1","score2","playerName","parsedMap","threshold","player1","player1Id","player2","player2Id","vod","winner","match","_a","i","prefix","map","_b","game","p","_c","draft","_d","real_civ_bans","e","CivIcon","props","_el$","_tmpl$","_$effect","_p$","_v$","civ","flag","_v$2","class","_v$3","color","_v$4","title","_$setAttribute","_$className","style","setProperty","removeProperty","undefined","PlayerLabel","_$insert","Spoiler","showSpoiler","setShowSpoiler","createSignal","_$memo","_c$","children","_c$2","placeholder","_el$2","_tmpl$2","$$click","_el$3","_tmpl$3","GameResult","_el$4","_tmpl$4","_el$5","firstChild","_el$6","nextSibling","win","flat","index","_$createComponent","players","_tmpl$5","MatchCard","_el$8","_tmpl$6","_el$9","_el$10","_el$11","_el$12","_el$13","_el$14","_el$15","_el$16","_el$17","score","_c$3","games","length","_tmpl$7","_tmpl$8","_el$20","_tmpl$9","_el$21","_c$5","_el$22","_tmpl$10","_tmpl$11","_c$6","_tmpl$12","_el$25","_tmpl$13","teams","date","_c$4","finished","_el$26","_tmpl$14","TournamentResults","data","createResource","tournamentId","results","Object","entries","s","label","values","flatMap","_el$27","_tmpl$17","_c$7","liquipedia_updated_at","_el$30","_tmpl$18","_el$31","Date","toLocaleString","Show","when","loading","_tmpl$15","every","r","_tmpl$16","For","each","set","_el$33","_tmpl$19","_el$34","_c$8","_el$35","_tmpl$20","_$delegateEvents","getOrInitPlayer","player","c","getOrInitMap","maps","lcName","m","getTournamentStats","civStats","hasTeams","t","loser","winnerCivs","loserCivs","w","l","a","b","CivStats","_el$7","civMap","played","winrate","minimumFractionDigits","maximumFractionDigits","wins","losses","mirrors","bans","CivHeaderCells","CivCells","_el$18","_el$19","_el$23","classList","toggle","Maps","_el$24","_el$28","_el$29","_el$36","_el$37","_el$38","_el$39","_el$40","_el$41","_el$42","Teams","_el$44","_el$45","_el$46","_el$47","_el$48","_el$49","_el$50","_el$52","_el$53","_el$54","_el$55","_el$56","_el$57","_el$58","_el$59","Players","_el$60","_el$61","_el$62","_el$63","_el$64","_el$65","_el$66","_el$68","_el$69","_el$70","_el$71","_el$72","_el$73","_el$74","_el$75","_v$5","_v$6","filterCssClass","active","TournamentStats","filters","setFilters","groups","reduce","g","parts","push","stats","createMemo","filtered","filter","includes","toggleGroup","group","f","_el$76","_el$79","_el$80","_el$82","_el$83","_el$84","stat","_el$85","leadingZero","formatSecondsAsDuration","duration","seconds","minutes","groupedStepsByPeriod","steps","interval","periods","step","period","resourcesToDataSeries","resources","sumDeltas","numbers","cum","sumPerInterval","item","intervals","delta","addDelta","timestamp","populationValuesPerInterval","armyValueDeltas","popcapDeltas","workerCountDeltas","total","popcap","Chart","register","LinearScale","Tooltip","PointElement","LineElement","LineController","BarController","CategoryScale","corsair","id","afterInit","chart","x","y","afterEvent","evt","chartArea","top","bottom","left","right","event","draw","afterDatasetsDraw","opts","ctx","lineWidth","width","setLineDash","dash","strokeStyle","save","beginPath","vertical","moveTo","lineTo","horizontal","stroke","restore","rgbHexAlpha","hexColor","alpha","Math","ceil","toString","toUpperCase","dataSeriesToChartDatasets","dataSeries","rest","borderColor","backgroundColor","TimelineChart","canvas","onMount","type","labels","timestamps","datasets","options","plugins","legend","display","tooltip","enabled","intersect","mode","axis","padding","caretSize","displayColors","footerFont","weight","callbacks","formattedValue","dataset","labelTextColor","footer","rs","elements","point","radius","hitRadius","line","tension","borderWidth","scales","beginAtZero","bounds","min","ticks","maxTicksLimit","grid","yGridLines","grace","autoSkipPadding","callback","xGridLines","max","maxY","createEffect","update","series","hasAnyHighlight","some","highlight","forEach","hidden","animation","_ref$","_$use","BUILD_ORDER_GROUPING_INTERVAL","COMBINE_MAX_STEPS_AGO","COMBINE_SIMILAIR_BUILD_STEPS_MARGIN","SCORE_TABLE_GROUPS","GAME_CIV_MAP","CIVILIZATIONS","RED","BLUE","GREEN","YELLOW","ORANGE","PURPLE","PINK","CYAN","PLAYER_COLORS","BuildStats","units","buildings","unit","counts","build","lost","icon","building","BuildAction","description","split","pop","replace","count","_v$7","WrappedIf","wrap","BuildOrder","maxResourcesAxis","summaries","food","wood","gold","stone","summary","teamName","CivFlag","abbr","_v$8","_v$9","items","groupedSteps","_v$10","_v$11","PBGIDS","IGNORE_LIST","MAPPING","getItem","SDK","__vitePreload","ID_MAP","ITEMS","actionMap","TYPE_MAP","iconToItemCache","getItemFromPbgid","pbgid","getItemFromIcon","category","race","itemType","upgradeId","_e","findClosestMatch","getItemFromAction","action","itemId","getItemByCanonicalName","camelCaseToSnakeCase","string","letter","pendingRequests","cache","fetchJson","useCache","request","resolve","reject","response","assignColors","colorSet","pf","getGameSummary","replayData","_f","_h","_g","_j","_i","_l","_k","colors","issues","replay","scores","buildOrder","profileId","_scores","_stats","actions","position","team","_m","_n","spawned","msg","_o","_p","key","_q","lastSimilairStep","resourceTypes","resourceSpent","resourceGathered","costs","approximateResourceGathered","maxItemsBuild","kdRatio","kills","deaths","ScoreTable","keys","maxScores","value","getBarStyle","find","background","_$p","_$style","resourceTypeLiterals","getDataseriesForResource","resource","getDataseriesForTotalResources","getDataseriesForTotalResourcesPerMin","getDataseriesForTotalResourcesGathered","getDataseriesForPopulation","workers","army","views","military","economy","technology","society","oliveoil","resourcesPerMin","foodPerMin","woodPerMin","goldPerMin","stonePerMin","oliveoilPerMin","TimelineSkeleton","Timeline","view","setView","graph","setGraph","setSeries","highlightSeries","toggleSeries","addEventListener","currentTarget","Icon","Container","controls","Replay","setWrap","grouped","setGrouped","ErrorBoundary","fallback","reset","console","error","message","Suspense","uniqueIssues","Set","sort","issue","cloneProps","memo","prop","isObject","isFunction","normalizePropDefs","toAttribute","propValues","initializeProps","element","propDefinition","attr","parseAttributeValue","reflect","val","oldValue","node","attribute","propName","obj","isConstructor","currentElement","createElementType","BaseElement","propKeys","ComponentType","outerElement","oldVal","newVal","attrName","fn","compose","fns","args","tag","extension","ElementType","createProps","get","lookupContext","el","next","withSolid","rawProps","createRoot","dispose","comp","insert","withNoShadowDOM"],"sources":["../../../app/frontend/lib/tournaments/utils/civs.ts","../../../app/frontend/lib/tournaments/utils/maps.ts","../../../app/frontend/lib/tournaments/types/tournaments.ts","../../../app/frontend/lib/tournaments/utils/parse-lqp-games.ts","../../../app/frontend/lib/tournaments/components/common.tsx","../../../app/frontend/lib/tournaments/components/tournament-results.tsx","../../../app/frontend/lib/tournaments/utils/stats.ts","../../../app/frontend/lib/tournaments/components/tournament-stats.tsx","../../../app/frontend/lib/replays/components/parsing/parseUtils.ts","../../../app/frontend/lib/replays/components/Charts.tsx","../../../app/frontend/lib/replays/components/config.ts","../../../app/frontend/lib/replays/components/BuildOrder.tsx","../../../app/frontend/lib/replays/components/pbgids.ts","../../../app/frontend/lib/replays/components/itemMapping.ts","../../../app/frontend/lib/replays/components/parsing/parseReplay.ts","../../../app/frontend/lib/replays/components/ScoreTable.tsx","../../../app/frontend/lib/replays/components/parsing/types.ts","../../../app/frontend/lib/replays/components/Timeline.tsx","../../../app/frontend/lib/replays/components/Replay.tsx","../../../node_modules/component-register/dist/component-register.js","../../../node_modules/solid-element/dist/index.js","../../../app/frontend/entrypoints/components.ts"],"sourcesContent":["export const civs = {\n abb: {\n label: \"Abbassid\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/ab.png\",\n color: \"#5D6063\",\n },\n ayy: {\n label: \"Ayyubids\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/ay.png\",\n color: \"#C5B537\",\n },\n byz: {\n label: \"Byzantines\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/by.png\",\n color: \"#8038BE\",\n },\n chi: {\n label: \"Chinese\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/ch.png\",\n color: \"#E15034\",\n },\n del: {\n label: \"Delhi\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/de.png\",\n color: \"#00AF63\",\n },\n eng: {\n label: \"English\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/en.png\",\n color: \"#C3D1DF\",\n },\n fre: {\n label: \"French\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/fr.png\",\n color: \"#0087E7\",\n },\n hre: {\n label: \"Holy Roman Empire\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/hr.png\",\n color: \"#FFCB2F\",\n },\n jap: {\n label: \"Japanese\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/ja.png\",\n color: \"#B8B594\",\n },\n jea: {\n label: \"Jeanne d'Arc\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/je.png\",\n color: \"#FFD65C\",\n },\n mal: {\n label: \"Malians\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/ma.png\",\n color: \"#D61D60\",\n },\n mon: {\n label: \"Mongols\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/mo.png\",\n color: \"#16A8FF\",\n },\n ord: {\n label: \"Order of the Dragon\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/od.png\",\n color: \"#E0D678\",\n },\n ott: {\n label: \"Ottomans\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/ot.png\",\n color: \"#0F6F3E\",\n },\n rus: {\n label: \"Rus\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/ru.png\",\n color: \"#F74C43\",\n },\n zhu: {\n label: \"Zhu Xi's Legacy\",\n flag: \"https://raw.githubusercontent.com/aoe4world/explorer/main/assets/flags/zx.png\",\n color: \"#00A6A7\",\n },\n};\n","export const MAPS = {\n \"ancient-spires\": [\n \"Ancient Spires\",\n \"https://static.aoe4world.com/assets/maps/ancient_spires-f6d4ed2baecb3e883eed7abbb0bc2d0cd9b0ade0b06052886455f9d903064c45.png\",\n ],\n \"high-view\": [\n \"High View\",\n \"https://static.aoe4world.com/assets/maps/high_view-554e3c206c2ab5de03eff825bae1782c995f43c3d49045c445c37167755dc756.png\",\n ],\n \"mongolian-heights\": [\n \"Mongolian Heights\",\n \"https://static.aoe4world.com/assets/maps/mongolian_heights-d2e6345c97a7d30d9bcb6349e599833ae70b1b16ea3029c10c986ecda996dc50.png\",\n ],\n \"dry-arabia\": [\n \"Dry Arabia\",\n \"https://static.aoe4world.com/assets/maps/dry_arabia-a38664e3a1140c77c184c56ce6ccc91b83ab9bf9e69f463621bf4acc6e663240.png\",\n ],\n \"mountain-pass\": [\n \"Mountain Pass\",\n \"https://static.aoe4world.com/assets/maps/mountain_pass-0b69b081bdb9f8df2c302d3ac3b8847a27f49e75631e2d677fa2f3b730d6ef04.png\",\n ],\n \"hill-and-dale\": [\n \"Hill and Dale\",\n \"https://static.aoe4world.com/assets/maps/hill_and_dale-7867678344511f75ca224324806ade2552c4667e89e57a2153c02fd44684ddee.png\",\n ],\n \"french-pass\": [\n \"French Pass\",\n \"https://static.aoe4world.com/assets/maps/french_pass-3ccf8fbacfc7a55fe17fcc69e1409fd6d067ca4394c9fedd55b9ab195c7363cb.png\",\n ],\n \"king-of-the-hill\": [\n \"King of the Hill\",\n \"https://static.aoe4world.com/assets/maps/king_of_the_hill-17717abfb688a8e8ea05bb4a0799dced0c13a3cfc864fa28fb6bf2d010e77180.png\",\n ],\n altai: [\n \"Altai\",\n \"https://static.aoe4world.com/assets/maps/altai-9b272a24dce7dfa3a2e60579a801e7152a4a94f041340ee81bef913d9cc70c6c.png\",\n ],\n lipany: [\n \"Lipany\",\n \"https://static.aoe4world.com/assets/maps/lipany-d1e494f8fd09007b948dee6ce146402ab57a382ca9c52265f140d668c3ea6b5e.png\",\n ],\n confluence: [\n \"Confluence\",\n \"https://static.aoe4world.com/assets/maps/confluence-4322dcd579128d990df9c6ee62f155d0f8d33d1f58fb30149af05967a3b8fdf3.png\",\n ],\n \"danube-river\": [\n \"Danube River\",\n \"https://static.aoe4world.com/assets/maps/danube_river-fb83fa5ec52e63c87867619e4e010bc4f32717ba99234fbc327a86e4e4d6af9d.png\",\n ],\n \"black-forest\": [\n \"Black Forest\",\n \"https://static.aoe4world.com/assets/maps/black_forest-d4431e88f043782a03b5d35d7bb26b515f8a0837dbc707675ac27f7afa0c7534.png\",\n ],\n nagari: [\n \"Nagari\",\n \"https://static.aoe4world.com/assets/maps/nagari-a89f44d0283a3e6ca61443994d0fbf025c41e362b0c21297bc889efe9bc91889.png\",\n ],\n \"boulder-bay\": [\n \"Boulder Bay\",\n \"https://static.aoe4world.com/assets/maps/boulder_bay-11f453b895a76e632a4507e57653e46ca1e6505801b413e3c3f71c20ef6b91f1.png\",\n ],\n};\nexport const mapMap = Object.fromEntries(Object.values(MAPS).map(([name, img]) => [name, img]));\n","export interface Match {\n players: string[];\n score: [number, number];\n games: Game[];\n vod: string;\n finished: boolean;\n date: string;\n winner: string;\n map_bans?: string[];\n civ_bans?: string[];\n raw?: string;\n}\n\nexport interface Game {\n map: string;\n played: boolean;\n teams: Team[];\n}\n\nexport interface Team {\n name: string;\n players: string[];\n civs: TournamentCivAbrr | TournamentCivAbrr[];\n win: boolean;\n}\n\nexport interface TournamentDraft {\n preset: string;\n host_name: string;\n guest_name: string;\n picks: string[];\n bans: string[];\n}\n\nexport interface TournamentDataSection {\n body: string;\n drafts: Record;\n}\n\nexport interface TournamentData {\n liquipedia_updated_at: string;\n results: Record>;\n}\n\nexport interface Tournament {\n id: number;\n name: string;\n url: string;\n tier: string;\n kind: string;\n start_date: string;\n end_date: string;\n cancelled: boolean;\n data: TournamentMetadata;\n updated_at: string;\n image_url: string;\n}\n\ninterface TournamentMetadata {\n mode: string;\n type: string;\n links: Links;\n prize: string;\n vanue?: any;\n format: string;\n series?: any;\n results: TournamentData;\n sponsor: string;\n location: string;\n organizer: string[] | string;\n winner_url?: any;\n winner_name?: any;\n players_count: number;\n}\n\ninterface Links {\n home?: string;\n rules?: string;\n twitch?: string;\n discord?: string;\n twitter?: string;\n youtube?: string;\n}\n\nexport const TOURNAMENT_CIV_ABBRS = [\"abb\", \"ayy\", \"byz\", \"chi\", \"del\", \"eng\", \"fre\", \"hre\", \"jap\", \"jea\", \"mal\", \"mon\", \"ord\", \"ott\", \"rus\", \"zhu\"] as const;\nexport const TOURNAMENT_DRAFT_CIVS = {\n \"Abbasid\": \"abb\",\n \"Ayyubids\": \"ayy\",\n \"Byzantines\": \"byz\",\n \"Chinese\": \"chi\",\n \"Delhi\": \"del\",\n \"English\": \"eng\",\n \"French\": \"fre\",\n \"HRE\": \"hre\",\n \"Japanese\": \"jap\",\n \"Jeanne d'Arc\": \"jea\",\n \"Malians\": \"mal\",\n \"Mongols\": \"mon\",\n \"Order of the Dragon\": \"ord\",\n \"Ottomans\": \"ott\",\n \"Rus\": \"rus\",\n \"Zhu Xi's Legacy\": \"zhu\",\n\n \"aoe4.AbbasidDynasty\": \"abb\",\n \"aoe4.Ayyubids\": \"ayy\",\n \"aoe4.Byzantines\": \"byz\",\n \"aoe4.Chinese\": \"chi\",\n \"aoe4.DelhiSultanate\": \"del\",\n \"aoe4.English\": \"eng\",\n \"aoe4.French\": \"fre\",\n \"aoe4.HolyRomanEmpire\": \"hre\",\n \"aoe4.Japanese\": \"jap\",\n \"aoe4.JeanneDArc\": \"jea\",\n \"aoe4.Malians\": \"mal\",\n \"aoe4.Mongols\": \"mon\",\n \"aoe4.OrderOfTheDragon\": \"ord\",\n \"aoe4.Ottomans\": \"ott\",\n \"aoe4.Rus\": \"rus\",\n \"aoe4.ZhuXiLegacy\": \"zhu\",\n} as const;\nexport type TournamentCivAbrr = \"abb\" | \"ayy\" | \"byz\" | \"chi\" | \"del\" | \"eng\" | \"fre\" | \"hre\" | \"jap\" | \"jea\" | \"mal\" | \"mon\" | \"ord\" | \"ott\" | \"rus\" | \"zhu\";\n\nexport const TOURNAMENT_CIV_ABBR_CORRECTIONS = {\n \"aba\": \"abb\",\n \"jpn\": \"jap\",\n \"otm\": \"ott\",\n} as const;\n\nexport interface TournamentCivStats {\n civ: TournamentCivAbrr;\n wins: number;\n losses: number;\n played: number;\n mirrors: number;\n winrate: number;\n bans: number;\n}\n\nexport interface TournamentPlayerStats {\n name: string;\n wins: 0;\n losses: 0;\n winrate: number;\n civs: Record;\n}\n\nexport interface TournamentMapStats {\n map: string;\n played: number;\n bans: number;\n civs: Record;\n}\n","import { Game, Match, TournamentCivAbrr, TournamentData, TournamentDataSection, TournamentDraft, TOURNAMENT_CIV_ABBR_CORRECTIONS } from \"../types/tournaments\";\n\nfunction parseVariables(raw: string) {\n return [...raw.matchAll(/(\\w+)=((?:\\{+[^}]+\\}+|[^{}|\\r\\n]+)*)/g)].reduce((acc, [_, k, v]) => {\n acc[k] = v.trim();\n return acc;\n }, {} as Record);\n}\n\nfunction parseCiv(raw: string) {\n var arr = raw.split(',').map(v => (TOURNAMENT_CIV_ABBR_CORRECTIONS[v] || v) as TournamentCivAbrr);\n return arr.length > 1 ? arr : arr[0];\n}\n\nexport const fetchResults = async (url: string): Promise => {\n return await fetch(url).then((res) => res.json());\n};\n\nexport function parseMatchesFromWikiSyntax(section: TournamentDataSection): Match[] {\n const matches: Match[] = [];\n\n const { body, drafts } = section;\n\n // Parse rounds\n for (const raw of body.split(/(?<=^\\}\\})/gm).flatMap(d => d.split(/(?=^\\{\\{)/gm))) {\n if (raw.startsWith(\"{{GroupTableLeague\"))\n continue;\n try {\n const parsed = parseVariables(raw);\n let score1 = 0;\n let score2 = 0;\n for (const [k, v] of Object.entries(parsed)) {\n if (!!k.match(/^(R\\d+[DW]|opponent)\\d+$/gm)) {\n const playerName = v.replace(/\\s*\\{+(?:Solo|Team)Opponent\\|([^|}]*)\\}+\\s*$/, \"$1\");\n if (!parsed.player1) {\n parsed.player1 = playerName;\n parsed.player1Id = k;\n } else if (!parsed.player2) {\n parsed.player2 = playerName;\n parsed.player2Id = k;\n }\n } else if (!!k.match(/^map\\d+/gm)) {\n const parsedMap = parseVariables(v);\n if (parsedMap.winner == \"1\")\n score1++;\n else if (parsedMap.winner == \"2\")\n score2++;\n }\n }\n if (parsed.bestof && !parsed.winner) {\n const threshold = (parseInt(parsed.bestof) + 1) / 2;\n if (score1 >= threshold) {\n parsed.winner = \"1\";\n parsed.finished = \"true\";\n } else if (score2 >= threshold) {\n parsed.winner = \"2\";\n parsed.finished = \"true\";\n }\n } else if (parsed.finished == \"true\" && !parsed.winner) {\n if (score1 > score2) {\n parsed.winner = \"1\";\n } else if (score2 > score1) {\n parsed.winner = \"2\";\n }\n }\n if (!parsed[\"player1\"]) continue;\n const { player1, player1Id, player2, player2Id, vod } = parsed;\n const winner =\n player1Id && parsed[player1Id + \"win\"] == \"1\"\n ? player1\n : player2Id && parsed[player2Id + \"win\"] == \"1\"\n ? player2\n : parsed.winner == \"1\"\n ? player1\n : parsed.winner == \"2\"\n ? player2\n : null;\n\n const match: Match = {\n players: [parsed.player1, parsed.player2],\n score: [0, 0],\n games: [],\n vod,\n finished: !!parsed.finished,\n date: parsed.date?.split(\"{\")[0].trim(),\n winner,\n raw: JSON.stringify(parsed, null, 2),\n };\n\n for (let i = 1; i < 30; i++) {\n const prefix = `map${i}`;\n // New style: map1={{Map|map=Coastal Cliffs|winner=1|civs1=ord|civs2=eng}}\n if (!!parsed[prefix] && parsed[prefix].match(/^\\{\\{Map/)) {\n const parsedMap = parseVariables(parsed[prefix].replace(/\\}\\}$/, ''));\n const { winner } = parsedMap;\n if (!winner) continue;\n if (winner == \"1\") match.score[0]++;\n if (winner == \"2\") match.score[1]++;\n const map = parsedMap.map?.trim();\n const game: Game = {\n map: map?.length ? map : \"Unknown\",\n played: winner && winner != \"skip\",\n teams: [\n {\n name: player1,\n players: parsedMap.players1 ? parsedMap.players1.split(',').map(p => p.trim()) : [player1],\n civs: parseCiv(parsedMap.civs1),\n win: winner == \"1\",\n },\n {\n name: player2,\n players: parsedMap.players2 ? parsedMap.players2.split(',').map(p => p.trim()) : [player2],\n civs: parseCiv(parsedMap.civs2),\n win: winner == \"2\",\n },\n ],\n };\n if (game.played) match.games.push(game);\n continue;\n }\n\n // Old style\n if (!parsed[prefix + \"win\"]) continue;\n const winner = parsed[prefix + \"win\"];\n if (winner == \"1\") match.score[0]++;\n if (winner == \"2\") match.score[1]++;\n const map = parsed[prefix].split(\"}\").pop()?.trim();\n const game: Game = {\n map: map?.length ? map : \"Unknown\",\n played: winner && winner != \"skip\",\n teams: [\n {\n name: player1,\n players: [player1],\n civs: parseCiv(parsed[prefix + \"p1civ\"]),\n win: winner == \"1\",\n },\n {\n name: player2,\n players: [player2],\n civs: parseCiv(parsed[prefix + \"p2civ\"]),\n win: winner == \"2\",\n },\n ],\n };\n if (game.played) match.games.push(game);\n }\n if (match.finished) matches.push(match);\n if (parsed[\"mapdraft\"]) {\n const draft = drafts[parsed[\"mapdraft\"]];\n match.map_bans = draft.bans;\n }\n if (parsed[\"draft\"]) {\n const draft = drafts[parsed[\"draft\"]];\n match.civ_bans = draft.bans;\n }\n if (parsed[\"civdraft\"]) {\n const draft = drafts[parsed[\"civdraft\"]];\n match.civ_bans = draft.bans;\n }\n if (parsed[\"civdraft2\"]) {\n const draft = drafts[parsed[\"civdraft2\"]];\n match.civ_bans = match.civ_bans ? match.civ_bans.concat(draft.bans) : draft.bans;\n }\n // Fix it if drafts were swapped\n if (match.map_bans?.length && match.map_bans[0].startsWith(\"aoe4\")) {\n const real_civ_bans = match.map_bans;\n match.map_bans = match.civ_bans;\n match.civ_bans = real_civ_bans;\n }\n } catch (e) {\n console.error(\"Error parsing match\", raw, e);\n }\n }\n\n return matches;\n}\n","import { Component } from \"solid-js\";\nimport { TournamentCivAbrr } from \"../types/tournaments\";\nimport { civs } from \"../utils/civs\";\n\nexport const CivIcon: Component<{ civ: TournamentCivAbrr; title?: string; class?: string }> = (props) => {\n return (\n \n );\n};\n","import { noShadowDOM } from \"solid-element\";\nimport {\n Component,\n createEffect,\n createMemo,\n createResource,\n createSignal,\n For,\n JSXElement,\n Show,\n splitProps,\n} from \"solid-js\";\nimport { Match, TournamentCivAbrr } from \"../types/tournaments\";\nimport { civs } from \"../utils/civs\";\nimport { mapMap } from \"../utils/maps\";\nimport { fetchResults, parseMatchesFromWikiSyntax } from \"../utils/parse-lqp-games\";\nimport { CivIcon } from \"./common\";\n\nconst PlayerLabel: Component<{ name: string; winner: string }> = (props) => (\n \n {props.name}\n \n);\n\nconst Spoiler: Component<{ placeholder: JSXElement }> = (props) => {\n const [showSpoiler, setShowSpoiler] = createSignal(true);\n return (\n <>\n {showSpoiler() ? (\n props.children\n ) : props.placeholder ? (\n setShowSpoiler(true)}>\n {props.placeholder}\n \n ) : (\n setShowSpoiler(true)} class=\"bg-gray-200 w-10\">\n )}\n \n );\n};\n\nconst GameResult: Component<{ civs: TournamentCivAbrr | TournamentCivAbrr[]; players?: string[]; class?: string; win: boolean }> = (props) => {\n return (\n
\n \n {props.win ? \"W\" : \"L\"}\n \n
\n {\n [props.civs].flat().map((civ, index) => (civs[civ] ? (\n \n ) : (\n
\n )\n ))\n }\n
\n
\n );\n};\n\nconst MatchCard: Component<{ match: Match }> = (props) => {\n return (\n
\n
\n
\n \n
\n {props.match.score[0]}\n \n {props.match.score[1]}\n
\n \n
\n
\n
\n {props.match.games.length < 1 && (\n
\n No games played\n

I.e. disqualified or no-show

\n
\n )}\n }>\n {props.match.games.map((game, i) => {\n return (\n
\n
\n {mapMap[game.map] ? (\n \n ) : (\n
\n )}\n {game.map == \"Unknown\" ? (\n Map unknown\n ) : (\n {game.map}\n )}\n
\n \n \n
\n );\n })}\n
\n
\n
\n

\n {props.match.date}\n {props.match.vod && props.match.finished && (\n \n Watch Replay\n \n )}\n

\n
\n );\n};\n\nexport const TournamentResults: Component<{ url?: string; tournamentId?: number | string; }> = (\n props\n) => {\n const [data] = createResource(async () => {\n return await fetchResults(props.url ?? `/api/v0/tournaments/${props.tournamentId}/results`);\n });\n\n const results = () => data() && Object.entries(data()?.results || {}).map(([s, d]) => {\n return { label: s, matches: Object.values(d).flatMap(parseMatchesFromWikiSyntax) };\n });\n\n return (\n
\n {data()?.liquipedia_updated_at &&
Last updated: {new Date(data().liquipedia_updated_at).toLocaleString()}
}\n \n
\n

Loading results

\n \n Currently crunching the numbers...\n \n
\n
\n !r.matches.length)}>\n
\n \n

Could not get any results from Liquipedia

\n \n Possibly results are not synced yet or the (game) format is not understood.\n \n
\n
\n \n {(set) =>\n set.matches.length ? (\n
\n {results().length > 1 &&

{set.label}

}\n
\n {(match) => }\n
\n
\n ) : (\n <>\n )\n }\n
\n
\n );\n};\n","import {\n Match,\n TournamentCivAbrr,\n TournamentCivStats,\n TournamentMapStats,\n TournamentPlayerStats,\n TOURNAMENT_CIV_ABBRS,\n TOURNAMENT_DRAFT_CIVS,\n} from \"../types/tournaments\";\n\nfunction getOrInitPlayer(players: TournamentPlayerStats[], player: string) {\n const p = players.find((p) => p.name == player);\n if (p) return p;\n\n players.push({\n name: player,\n wins: 0,\n losses: 0,\n winrate: 0,\n civs: TOURNAMENT_CIV_ABBRS.reduce((acc, c) => {\n acc[c] = { wins: 0, losses: 0, played: 0 };\n return acc;\n }, {} as TournamentPlayerStats[\"civs\"]),\n });\n return players[players.length - 1];\n}\n\nfunction getOrInitMap(maps: TournamentMapStats[], name: string) {\n const lcName = name.toLowerCase();\n const map = maps.find((m) => m.map.toLowerCase() == lcName);\n if (map) return map;\n maps.push({\n map: name,\n played: 0,\n bans: 0,\n civs: TOURNAMENT_CIV_ABBRS.reduce((acc, c) => {\n acc[c] = { wins: 0, losses: 0, played: 0 };\n return acc;\n }, {} as TournamentMapStats[\"civs\"]),\n });\n return maps[maps.length - 1];\n}\n\nexport function getTournamentStats(matches: Match[]) {\n const civStats = TOURNAMENT_CIV_ABBRS.reduce((acc, civ) => {\n acc[civ] = {\n civ,\n wins: 0,\n losses: 0,\n played: 0,\n mirrors: 0,\n winrate: 0,\n bans: 0,\n };\n return acc;\n }, {} as Record);\n\n const maps: TournamentMapStats[] = [];\n const teams: TournamentPlayerStats[] = [];\n const players: TournamentPlayerStats[] = [];\n let hasTeams = false;\n\n for (const match of matches) {\n for (const game of match.games) {\n if (!game.played) continue;\n try {\n const winner = game.teams.find((t) => t.win);\n const loser = game.teams.find((t) => !t.win);\n if (!winner || !loser || !winner.civs || !loser.civs) continue;\n const winnerCivs = [winner.civs].flat();\n const loserCivs = [loser.civs].flat();\n if (winnerCivs.length == 1 && winnerCivs[0] == loserCivs[0]) civStats[winnerCivs[0]].mirrors++;\n\n winnerCivs.forEach(civ => {\n civStats[civ].wins++;\n civStats[civ].played++;\n });\n loserCivs.forEach(civ => {\n civStats[civ].losses++;\n civStats[civ].played++;\n });\n\n {\n const w = getOrInitPlayer(teams, winner.name);\n const l = getOrInitPlayer(teams, loser.name);\n\n winnerCivs.forEach(civ => {\n w.civs[civ].wins++;\n w.civs[civ].played++;\n });\n loserCivs.forEach(civ => {\n l.civs[civ].losses++;\n l.civs[civ].played++;\n });\n }\n\n if (winner.players.length > 1 || loser.players.length > 1)\n hasTeams = true;\n\n winner.players.forEach(player => {\n const w = getOrInitPlayer(players, player);\n winnerCivs.forEach(civ => {\n w.civs[civ].wins++;\n w.civs[civ].played++;\n });\n });\n\n loser.players.forEach(player => {\n const l = getOrInitPlayer(players, player);\n loserCivs.forEach(civ => {\n l.civs[civ].losses++;\n l.civs[civ].played++;\n });\n });\n\n const m = getOrInitMap(maps, game.map);\n winnerCivs.forEach(civ => {\n m.civs[civ].wins++;\n m.civs[civ].played++;\n });\n loserCivs.forEach(civ => {\n m.civs[civ].losses++;\n m.civs[civ].played++;\n });\n m.played++;\n } catch (e) {\n console.error(\"Error parsing stats\", e, game);\n }\n }\n\n if (match.map_bans) {\n try {\n for (const map of match.map_bans) {\n const m = getOrInitMap(maps, map);\n m.bans++;\n }\n } catch (e) {\n console.error(\"Error parsing map_bans\", e, match);\n }\n }\n\n if (match.civ_bans) {\n try {\n for (const civ of match.civ_bans) {\n civStats[TOURNAMENT_DRAFT_CIVS[civ]].bans++;\n }\n } catch (e) {\n console.error(\"Error parsing civ_bans\", e, match);\n }\n }\n }\n\n teams.forEach((p) =>\n Object.values(p.civs).forEach((c) => {\n p.wins += c.wins;\n p.losses += c.losses;\n })\n );\n\n players.forEach((p) =>\n Object.values(p.civs).forEach((c) => {\n p.wins += c.wins;\n p.losses += c.losses;\n })\n );\n\n Object.values(civStats).forEach((c) => {\n c.winrate = c.played ? c.wins / c.played : 0.5;\n });\n\n const civs = Object.values(civStats).sort((a, b) => b.winrate - a.winrate);\n teams.forEach((p) => (p.winrate = p.wins / (p.wins + p.losses)));\n teams.sort((a, b) => a.losses - b.losses).sort((a, b) => b.wins - a.wins);\n players.forEach((p) => (p.winrate = p.wins / (p.wins + p.losses)));\n players.sort((a, b) => a.losses - b.losses).sort((a, b) => b.wins - a.wins);\n maps.sort((a, b) => b.played - a.played);\n\n return { civs, teams, players, maps, hasTeams };\n}\n","import { Component, createMemo, createResource, createSignal, For, Show } from \"solid-js\";\nimport {\n Match,\n TournamentCivStats,\n TournamentData,\n TournamentMapStats,\n TournamentPlayerStats,\n TOURNAMENT_CIV_ABBRS,\n} from \"../types/tournaments\";\nimport { civs as civMap } from \"../utils/civs\";\nimport { mapMap } from \"../utils/maps\";\nimport { fetchResults, parseMatchesFromWikiSyntax } from \"../utils/parse-lqp-games\";\nimport { getTournamentStats } from \"../utils/stats\";\nimport { CivIcon } from \"./common\";\n\nconst CivStats: Component<{ civs: TournamentCivStats[] }> = (props) => {\n return (\n
\n

Civilizations

\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n {(s) => (\n \n \n\n \n\n \n \n \n \n \n \n \n )}\n \n
\n civilization\n WinrateWinsLossesMirrorsPlayedBans
\n \n {civMap[s.civ].label}\n \n {s.played == 0 ? '--' : s.winrate.toLocaleString(\"en-US\", {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n style: \"percent\",\n })}\n {s.wins}W{s.losses}L{s.mirrors}M{s.played}{s.bans}
\n
\n
\n );\n};\nconst civs = TOURNAMENT_CIV_ABBRS;\n\nconst CivHeaderCells = () => {\n return (\n \n {(civ) => (\n \n \n \n )}\n \n );\n};\nconst CivCells: Component<{ civs: TournamentMapStats[\"civs\"] }> = (props) => {\n return (\n \n {(civ) => (\n \n
\n \n {props.civs[civ].wins}W\n \n \n {props.civs[civ].losses}L\n \n
\n \n )}\n
\n );\n};\n\nconst Maps: Component<{ maps: TournamentMapStats[] }> = (props) => {\n return (\n
\n

Maps

\n
\n \n \n \n \n \n \n \n \n \n \n {(map) => (\n \n \n \n \n \n \n )}\n \n
PlayerPlayedBans
\n {mapMap[map.map] ? (\n \n ) : (\n
\n )}\n {map.map}\n
\n
\n {map.played}\n
\n
\n
\n {map.bans}\n
\n
\n
\n
\n );\n};\n\nconst Teams: Component<{ teams: TournamentPlayerStats[] }> = (props) => {\n return (\n
\n

Teams

\n
\n \n \n \n \n \n \n \n \n \n {(player) => (\n \n \n \n \n \n )}\n \n
TeamTotal
{player.name}\n
\n \n {player.wins}W\n \n \n {player.losses}L\n \n
\n
\n
\n
\n );\n};\n\nconst Players: Component<{ players: TournamentPlayerStats[] }> = (props) => {\n return (\n
\n

Players

\n
\n \n \n \n \n \n \n \n \n \n {(player) => (\n \n \n \n \n \n )}\n \n
PlayerTotal
{player.name}\n
\n \n {player.wins}W\n \n \n {player.losses}L\n \n
\n
\n
\n
\n );\n};\n\nconst filterCssClass = (active: boolean) =>\n `rounded-full border border-gray-400 text-xs uppercase px-4 py-1 font-bold hover:text-white transition ${\n active ? \"text-gray-50 bg-gray-400\" : \"text-gray-200\"\n }`;\nexport const TournamentStats: Component<{ url?: string; tournamentId?: number | string; }> = (\n props\n) => {\n const [filters, setFilters] = createSignal([]);\n \n const [data] = createResource(async () => {\n return await fetchResults(props.url ?? `/api/v0/tournaments/${props.tournamentId}/results`);\n });\n\n const groups = () => {\n const matches = data() && Object.entries(data()?.results || {}).reduce((g, [label, parts]) => {\n const matches = Object.values(parts).flatMap(parseMatchesFromWikiSyntax);\n if (matches.length > 0) g.push({ label, matches });\n return g;\n }, [] as { label: string; matches: Match[] }[]);\n return matches;\n };\n\n const stats = createMemo(() => {\n const filtered = filters().length ? groups()?.filter(({ label }) => filters().includes(label)) : groups();\n return filtered?.length ? getTournamentStats(filtered.flatMap((m) => m.matches)) : null;\n });\n\n const toggleGroup = (group: string) => {\n setFilters(filters().includes(group) ? filters().filter((f) => f !== group) : [...filters(), group]);\n };\n return (\n
\n {data()?.liquipedia_updated_at &&
Last updated: {new Date(data().liquipedia_updated_at).toLocaleString()}
}\n \n
\n

Loading results

\n \n Currently crunching the numbers...\n \n
\n
\n {groups()?.length > 1 && (\n
\n \n \n {(group) => (\n \n )}\n \n
\n )}\n \n {(stat) => (\n
\n \n \n \n \n \n \n
\n )}\n
\n \n
\n \n

Could not get any statistics from Liquipedia

\n \n Possibly results are not synced yet or the (game) format is not understood.\n \n
\n
\n
\n );\n};\n","import { DataSeries } from \"../Charts\";\nimport { GameSummary } from \"./types\";\n\nconst leadingZero = Intl.NumberFormat(undefined, { minimumIntegerDigits: 2 }).format;\nexport function formatSecondsAsDuration(duration: number) {\n const seconds = leadingZero(duration % 60);\n const minutes = Math.floor(duration / 60);\n return `${minutes}:${seconds}`;\n}\n\ntype Steps = GameSummary[\"groupedSteps\"] | GameSummary[\"steps\"];\nexport function groupedStepsByPeriod(steps: Steps, interval = 60) {\n const periods: Steps[] = Array.from(Array(Math.ceil(steps.at(-1).timestamp / interval)), () => []);\n for (const step of steps) {\n const period = Math.floor(step.timestamp / interval);\n periods[period]?.push(step as Steps[0]);\n }\n return periods;\n}\n\nexport function resourcesToDataSeries(resources: GameSummary[\"resources\"]): DataSeries[] {\n return [\n {\n label: \"Food\",\n data: resources.food,\n color: \"#FF3838\",\n },\n {\n label: \"Wood\",\n data: resources.wood,\n color: \"#9B5D00\",\n },\n {\n label: \"Gold\",\n data: resources.gold,\n color: \"#FFE300\",\n },\n {\n label: \"Stone\",\n data: resources.stone,\n color: \"#AEAEAE\",\n },\n ];\n}\n\nexport function sumDeltas(numbers: number[]) {\n return numbers.reduce((cum, v, i, a) => {\n cum[i] = v + (cum[i - 1] ?? 0);\n return cum;\n }, []);\n}\n\nexport function sumPerInterval(item: GameSummary[\"items\"][0], intervals: number[]) {\n const delta: number[] = Array(intervals.length).fill(0);\n const addDelta = (timestamp: number, i: number) => (delta[intervals.findIndex((i) => i > timestamp)] += i);\n item.build.forEach((b) => addDelta(b, 1));\n item.lost.forEach((l) => addDelta(l, -1));\n return sumDeltas(delta);\n}\n\nexport function populationValuesPerInterval(stats: GameSummary[\"items\"], intervals: number[]) {\n const armyValueDeltas: number[] = Array(intervals.length).fill(0);\n const popcapDeltas: number[] = Array(intervals.length).fill(0);\n const workerCountDeltas: number[] = Array(intervals.length).fill(0);\n for (const stat of stats) {\n const vari = stat.item.variations?.[0];\n if (!vari || stat.item.type != \"unit\") continue;\n\n const { total, popcap } = stat.item.variations[0].costs;\n for (const timestamp of stat.build) {\n const i = intervals.findIndex((interval) => interval > timestamp);\n if (i >= 0) {\n if (stat.item.classes.includes(\"worker\")) workerCountDeltas[i] += 1;\n else armyValueDeltas[i] += total;\n popcapDeltas[i] += isNaN(popcap) ? 0 : popcap;\n }\n }\n for (const timestamp of stat.lost) {\n const i = intervals.findIndex((interval) => interval > timestamp);\n if (i >= 0) {\n if (stat.item.classes.includes(\"worker\")) workerCountDeltas[i] -= 1;\n else armyValueDeltas[i] -= total;\n popcapDeltas[i] -= isNaN(popcap) ? 0 : popcap;\n }\n }\n }\n return {\n army: sumDeltas(armyValueDeltas),\n popcap: sumDeltas(popcapDeltas),\n workers: sumDeltas(workerCountDeltas),\n };\n}\n","// @ts-nocheck\n// Chart-js types are very very unperformant, so disabling when possible\nimport { Component, createEffect, createMemo, onMount } from \"solid-js\";\nimport { BarController, CategoryScale, Chart, ChartData, ChartDataset, LinearScale, LineController, LineElement, PointElement, Tooltip } from \"chart.js\";\nimport { formatSecondsAsDuration } from \"./parsing/parseUtils\";\n\nChart.register(LinearScale, Tooltip, PointElement, LineElement, LineController, BarController, CategoryScale);\n\nconst corsair = {\n id: \"corsair\",\n afterInit: (chart) => {\n if(!chart) return;\n chart.corsair = {\n x: 0,\n y: 0,\n };\n },\n afterEvent: (chart, evt) => {\n if(!chart) return;\n const {\n chartArea: { top, bottom, left, right },\n } = chart;\n const { x, y } = evt.event;\n if (x < left || x > right || y < top || y > bottom) {\n chart.corsair = {\n x,\n y,\n draw: false,\n };\n chart.draw();\n return;\n }\n\n chart.corsair = {\n x,\n y,\n draw: true,\n };\n\n chart.draw();\n },\n afterDatasetsDraw: (chart, _, opts) => {\n const {\n ctx,\n chartArea: { top, bottom, left, right },\n } = chart;\n\n if (!chart.corsair || !chart.corsair.draw) {\n return;\n }\n\n const { x, y, draw } = chart.corsair;\n\n ctx.lineWidth = opts.width || 0;\n ctx.setLineDash(opts.dash || []);\n ctx.strokeStyle = opts.color || \"white\";\n\n ctx.save();\n ctx.beginPath();\n if (opts.vertical) {\n ctx.moveTo(x, bottom);\n ctx.lineTo(x, top);\n }\n if (opts.horizontal) {\n ctx.moveTo(left, y);\n ctx.lineTo(right, y);\n }\n ctx.stroke();\n ctx.restore();\n },\n};\n\nexport type DataSeries = {\n label: string;\n data: number[];\n color: string;\n};\n\nfunction rgbHexAlpha(hexColor: string, alpha: number): string {\n return `${hexColor}${Math.ceil(255 * alpha)\n .toString(16)\n .toUpperCase()}`;\n}\nfunction dataSeriesToChartDatasets(dataSeries: DataSeries[]): ChartDataset[] {\n return dataSeries.map(({ label, data, color, ...rest }) => ({\n label,\n data,\n borderColor: color,\n backgroundColor: color,\n ...rest,\n }));\n}\n\ntype TimelineChartOptions = {\n xGridLines?: boolean;\n yGridLines?: boolean;\n maxY?: number;\n};\n\nexport const TimelineChart: Component<{\n data: DataSeries[];\n timestamps: number[];\n title?: string;\n options?: TimelineChartOptions;\n series?: { highlight: boolean; hidden: boolean }[];\n}> = (props) => {\n let canvas: HTMLCanvasElement;\n let chart: Chart;\n\n onMount(() => {\n chart = new Chart(canvas, {\n type: \"line\",\n data: {\n labels: props.timestamps,\n datasets: dataSeriesToChartDatasets(props.data),\n },\n options: {\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n enabled: true,\n intersect: false,\n mode: \"index\",\n axis: \"x\",\n padding: 15,\n caretSize: 0,\n displayColors: false,\n footerFont: {\n weight: \"normal\",\n },\n callbacks: {\n label: (d) => `${d.formattedValue} ${d.dataset.label}`,\n labelTextColor: (d) => d.dataset.borderColor,\n title: (x) => formatSecondsAsDuration(+x[0].label),\n footer: (rs) => (rs.length > 1 ? `${rs.reduce((t, r) => t + r.parsed.y, 0)} total` : null),\n },\n },\n corsair: {\n horizontal: false,\n vertical: true,\n color: \"rgba(255,255,255,0.7)\",\n dash: [],\n width: 1,\n },\n } as Chart[\"options\"][\"plugins\"],\n elements: {\n point: {\n radius: 0,\n borderColor: \"transparent\",\n backgroundColor: \"transparent\",\n hitRadius: 3,\n },\n line: {\n tension: 0.05,\n borderWidth: 1,\n },\n },\n scales: {\n y: {\n beginAtZero: true,\n bounds: \"data\",\n min: 0,\n ticks: {\n display: false,\n maxTicksLimit: 5,\n },\n grid: props.options?.yGridLines\n ? {\n borderColor: \"transparent\",\n color: \"rgba(255,255,255,0.1)\",\n }\n : {},\n },\n x: {\n grace: 20,\n ticks: {\n autoSkipPadding: 100,\n maxTicksLimit: 5,\n callback: (_, index) => (props.timestamps[index] % (60 * 5) === 0 ? formatSecondsAsDuration(props.timestamps[index]) : null),\n },\n grid: props.options?.xGridLines\n ? {\n borderColor: \"transparent\",\n color: \"rgba(255,255,255,0.1)\",\n }\n : {},\n },\n },\n },\n plugins: [corsair],\n });\n });\n\n const max = createMemo(() => props.options.maxY ?? Math.max(...props.data.map((d) => Math.max(...d.data))));\n createEffect(() => {\n if (chart && max()) {\n chart.options.scales.y.max = max() * 1.1;\n chart.update();\n }\n });\n\n createEffect(() => {\n if (chart && props.data) {\n chart.data.datasets = dataSeriesToChartDatasets(props.data);\n chart.update();\n }\n });\n\n createEffect(() => {\n if (chart && props.series) {\n const hasAnyHighlight = props.series.some((s) => s.highlight);\n chart.data.datasets.forEach((d, i) => {\n d.hidden = props.series[i].hidden;\n d.borderColor = props.series[i].highlight || !hasAnyHighlight ? props.data[i].color : rgbHexAlpha(props.data[i].color, 0.3);\n d.animation = { duration: 150 };\n });\n chart.update();\n }\n });\n return (\n
\n

{props.title}

\n \n
\n );\n};\n","import { CIVILIZATIONS } from \"../../explorer/src/config\";\nimport { Score } from \"./ScoreTable\";\n\n// Spliting up build steps into a grid, where each row equals the below interval.\nexport const BUILD_ORDER_GROUPING_INTERVAL = 60; // seconds\n// If an item has been build in the X last steps and is X seconds ago, it will be unioned with that origiinal step\nexport const COMBINE_STEPS = true;\nexport const COMBINE_MAX_STEPS_AGO = 4;\nexport const COMBINE_SIMILAIR_BUILD_STEPS_MARGIN = 30; // seconds\n\nexport const SCORE_TABLE_GROUPS: Record = {\n Score: [\n {\n label: \"Total\",\n key: \"total\",\n },\n {\n label: \"Milit.\",\n key: \"military\",\n },\n {\n label: \"Econ.\",\n key: \"economy\",\n },\n {\n label: \"Tech.\",\n key: \"technology\",\n },\n {\n label: \"Soci.\",\n key: \"society\",\n },\n ],\n \"Resources Spent\": [\n {\n label: \"Total\",\n key: \"totalResourcesSpent\",\n },\n {\n label: \"Food\",\n key: \"totalFoodSpent\",\n color: \"#FF0000\",\n },\n {\n label: \"Wood\",\n key: \"totalWoodSpent\",\n color: \"#E78600\",\n },\n {\n label: \"Gold\",\n key: \"totalGoldSpent\",\n color: \"#FFC500\",\n },\n {\n label: \"Stone\",\n key: \"totalStoneSpent\",\n color: \"#C3C3C3\",\n },\n {\n label: \"Olive Oil\",\n key: \"totalOliveOilSpent\",\n color: \"#C3C3C3\",\n },\n ],\n \"Max. Workers\": [\n {\n label: \"Villagers\",\n key: \"workersMax\",\n },\n {\n label: \"Trade\",\n key: \"tradersMax\",\n },\n {\n label: \"Fish.\",\n key: \"fishingMax\",\n },\n // {\n // label: \"Idle\",\n // key: \"workersIdleTime\",\n // },\n ],\n Military: [\n {\n label: \"Prod.\",\n key: \"militaryBuilt\",\n color: \"#824F34\",\n },\n {\n label: \"Kills\",\n key: \"kills\",\n color: \"#824F34\",\n },\n {\n label: \"Deaths\",\n key: \"deaths\",\n color: \"#824F34\",\n },\n {\n label: \"K/D\",\n key: \"killsPerDeath\",\n color: \"#824F34\",\n },\n ],\n Buildings: [\n {\n label: \"Razed\",\n key: \"buildingsRazed\",\n color: \"#345469\",\n },\n {\n label: \"Lost\",\n key: \"buildingsLost\",\n color: \"#345469\",\n },\n ],\n Tech: [\n {\n label: \"Research\",\n key: \"researchProduced\",\n color: \"#32806B\",\n },\n ],\n Misc: [\n {\n label: \"APM\",\n key: \"apm\",\n },\n ],\n \"Sacred Sites\": [\n {\n label: \"Capt.\",\n key: \"sacredSitesCaptured\",\n color: \"#FFDE93\",\n },\n {\n label: \"Lost\",\n key: \"sacredSitesLost\",\n color: \"#FFDE93\",\n },\n {\n label: \"Neutr.\",\n key: \"sacredSitesNeutralized\",\n color: \"#FFDE93\",\n },\n ],\n};\n\nexport const GAME_CIV_MAP = {\n abbasid_dynasty: CIVILIZATIONS.ab,\n chinese: CIVILIZATIONS.ch,\n delhi_sultanate: CIVILIZATIONS.de,\n english: CIVILIZATIONS.en,\n french: CIVILIZATIONS.fr,\n holy_roman_empire: CIVILIZATIONS.hr,\n malians: CIVILIZATIONS.ma,\n mongols: CIVILIZATIONS.mo,\n ottomans: CIVILIZATIONS.ot,\n rus: CIVILIZATIONS.ru,\n\n ayyubids: CIVILIZATIONS.ay,\n byzantines: CIVILIZATIONS.by,\n japanese: CIVILIZATIONS.ja,\n jeanne_darc: CIVILIZATIONS.je,\n order_of_the_dragon: CIVILIZATIONS.od,\n zhu_xis_legacy: CIVILIZATIONS.zx,\n};\n\nconst RED = \"#F60000\",\n BLUE = \"#0162FF\",\n GREEN = \"#4DE94C\",\n YELLOW = \"#FFEE00\",\n ORANGE = \"#FF8C00\",\n PURPLE = \"#8E00FF\",\n PINK = \"#FF3395\",\n CYAN = \"#41D8FF\";\n\nexport const PLAYER_COLORS = {\n TWO_TEAMS: [\n [BLUE, CYAN, GREEN, PURPLE],\n [RED, ORANGE, YELLOW, PINK],\n ],\n THREE_OR_FOUR_TEAMS: [\n [BLUE, CYAN],\n [RED, ORANGE],\n [YELLOW, GREEN],\n [PINK, PURPLE],\n ],\n FFA_OR_UNKNOWN: [RED, BLUE, YELLOW, GREEN, ORANGE, CYAN, PINK, PURPLE],\n};\n","import { Component, createMemo, For } from \"solid-js\";\nimport { UnifiedItem } from \"../../explorer/src/types/data\";\nimport { CivFlag } from \"../../explorer/src/components/CivFlag\";\nimport { TimelineChart } from \"./Charts\";\nimport { BUILD_ORDER_GROUPING_INTERVAL } from \"./config\";\nimport { formatSecondsAsDuration, groupedStepsByPeriod, resourcesToDataSeries } from \"./parsing/parseUtils\";\nimport { GameSummary } from \"./parsing/types\";\nimport { Icon } from \"../../explorer/src/components/Icon\";\n\nconst BuildStats: Component<{ stats: GameSummary[\"items\"] }> = (props) => {\n const units = createMemo(() => props.stats.filter((s) => s.item.type === \"unit\"));\n const buildings = createMemo(() => props.stats.filter((s) => s.item.type === \"building\"));\n return (\n <>\n
\n \n {(unit) => (\n
\n \n \n {unit.counts.build}\n {unit.counts.lost > 0 && -{unit.counts.lost}}\n \n
\n )}\n
\n
\n
\n \n {(building) => (\n
\n \n \n {building.counts.build}\n {building.counts.lost > 0 && -{building.counts.lost}}\n {\" \"}\n
\n )}\n
\n
\n \n );\n};\n\nconst BuildAction: Component<{ item: UnifiedItem; count?: number; timestamp: number }> = (props) => {\n return (\n
\n {formatSecondsAsDuration(props.timestamp)}\n
\n \n
\n {props.item.type=='upgrade' ? props.item.description.split('to').pop().replace('.', '') : props.item.name}\n {props.count > 1 && × {props.count}}\n
\n );\n};\n\nconst WrappedIf: Component<{ wrap: boolean }> = (props) => {\n return <>{props.wrap ?
{props.children}
: props.children};\n};\n\nexport const BuildOrder: Component<{ summaries: GameSummary[]; wrap?: boolean; group?: boolean }> = (props) => {\n const interval = BUILD_ORDER_GROUPING_INTERVAL;\n const maxResourcesAxis = createMemo(() => Math.max(...(props.summaries?.flatMap(({ resources: r }) => [r.food, r.wood, r.gold, r.stone])?.flat() ?? [])));\n\n return (\n
\n
\n \n {(summary, x) => {\n return (\n <>\n
\n \n

{summary.name}

\n {props.summaries.length > 2 && {summary.teamName}}\n \n
\n
\n \n\n \n
\n \n \n {(period, y) => (\n
\n {!props.wrap && !(y() % (60 / interval)) && (\n

{formatSecondsAsDuration(y() * interval)}

\n )}\n {(step) => }\n
\n )}\n
\n
\n \n );\n }}\n
\n
\n
\n );\n};\n","export const PBGIDS = {\n ignore: [\n // Byzantines\n 2122504, // chierosiphon (blueprint)\n\n // Japanese\n 2138205, // uma banner dropped\n 2138188, // katana banner dropped\n 2138204, // yumi banner dropped\n\n // English\n 202514, // Wynguard Army spawner\n 2075742, // Wynguard Raiders spawner\n 2122352, // Wynguard Footman spawner\n 2075743, // Wynguard Rangers spawner\n ],\n fallback: {\n // Ayyubids\n 2132733: 6946920, // (free) desert Raider\n 2132735: 2136952, // (free) elite desert raider\n 2132734: 7844054, // (free) veteran desert raider\n 2145897: 2762454, // (free) trader\n 2146034: 2146044, // Bedouin Swordsman\n 2146037: 2146020, // Bedouin Skirmisher\n 2145896: 2144832, // (free) atabeg\n // 2160100: Missing Camel Rider Barding\n\n // Byzantines\n 2140765: 2140764, // chierosiphon (workshop)\n 2122503: 2140764, // chierosiphon (field constructed)\n\n 2132800: 2146746, // eastern mercenary contract\n 2118862: 2146757, // veteran mercenary contract upgrade\n 2118863: 2146758, // elite mercenary contract upgrade\n 2101237: 2101236, // aqcuaduct\n\n // English\n 187692: 2133269, // set up camp\n 2161903: 2104832, // king\n\n // Japanese\n 2145966: 2127064, // veteran uma bannerman\n 2145967: 2127064, // elite uma bannerman\n 2143516: 2127064, // elite yumi bannerman\n 2143514: 2143512, // elite katana bannerman\n 2143513: 2143512, // veteran katana bannerman\n 2143515: 2127061, // veteran yumi bannerman\n 2143839: 2124339, // (deployed) ozutsu\n 2143867: 7319578, // (deployed) bombard\n 2143863: 2127201, // Onna Bugeshia\n 2143869: 2143534, // (deployed) ribauldequin\n\n // Jeanne d'Arc\n 2145718: 2144375, // enlistment incentives -> Ordinance company\n 2035318: 170541, // cantled saddles\n 2035321: 172158, // crossbow stirrups\n\n // Ottomans\n 171001: 2136153 // great bombard emplacement\n }\n}\n","import { ITEMS } from '../../explorer/src/config'\nimport { civConfig, UnifiedItem } from '../../explorer/src/types/data'\nimport { findClosestMatch, getItemByCanonicalName } from '../../explorer/src/query/utils'\nimport { CIVILIZATIONS } from '../../explorer/data/src/lib/config/civs'\nimport { PBGIDS } from './pbgids'\n\nexport const IGNORE_LIST = [\n 'icons/races/common/units/cannon_4', // rubble spawn\n 'icons/races/common/units/culverin_4', // rubble spawn\n 'icons/races/common/units/trebuchet_3', // finalized field construction\n 'icons/races/common/units/ram_2', // finalized field construction\n 'icons/races/common/units/siegetower_2', // finalized field construction\n 'icons/races/english/units/wynguard_army', // spwans as individual units?\n 'icons/races/english/upgrades/longbow_mastery', // wynguard rangers\n 'icons/races/common/abilities/charge', // wynguard raiders\n 'icons/races/common/units/vip', // king\n 'icons/races/malian/units/cattle',\n 'icons/races/malian/abilities/poison',\n 'icons/races/chinese/dynasties',\n 'icons/unit_stat_settlements_trading_with',\n]\n\nconst MAPPING = {\n 'icons/races/common/abilities/arm_villagers': 'icons/races/rus/units/militia'\n}\n\nasync function getItem(type: T, id: string | number) {\n const SDK = await import('../../explorer/data/src/sdk')\n if (type == null && typeof(id) === \"number\")\n return SDK.Get(id)\n else\n return SDK[type].get(id)\n}\n\nconst CIV_ABBR = Object.keys(CIVILIZATIONS);\n\nconst ID_MAP: {[key: string]: Record>} = {\n common: {\n [ITEMS.UNITS]: {\n ram: 'battering-ram',\n siegetower: 'siege-tower',\n manatarms_1: 'man-at-arms',\n manatarms_2: 'man-at-arms',\n manatarms_3: 'man-at-arms',\n manatarms_4: 'man-at-arms',\n\n general_ship: 'hulk',\n trade_cart: 'trader',\n transport: 'transport-ship',\n\n warship: 'carrack',\n war_galley: 'galley',\n fireship: 'demolition-ship',\n\n handcannon: 'handcannoneer',\n scorpion: 'springald',\n scorpion_3: 'springald',\n trebuchet_cw: 'counterweight-trebuchet',\n cannon: 'bombard',\n },\n [ITEMS.BUILDINGS]: {\n gristmill: 'mill',\n wheat_field: 'farm',\n gold_mining_camp: 'mining-camp',\n stone_gate: 'stone-wall-gate',\n tower: 'stone-wall-tower',\n },\n [ITEMS.TECHNOLOGIES]: {\n tree_fell_rate: 'forestry',\n\n wood_gather_1: 'double-broadax',\n wood_gather_2: 'lumber-preservation',\n wood_gather_3: 'crosscut-saw',\n\n gold_gather_1: 'specialized-pick',\n gold_gather_2: 'acid-distillation',\n gold_gather_3: 'cupellation',\n\n hunting_villager: 'survival-techniques',\n hunting_scout: 'professional-scouts',\n\n food_gather_1: 'horticulture',\n food_gather_2: 'fertilization',\n food_gather_3: 'precision-cross-breeding',\n\n silk_bowstring: 'textiles',\n\n ranged_damage_technology_1: 'steeled-arrow',\n ranged_damage_technology_2: 'balanced-projectiles',\n ranged_damage_technology_3: 'platecutter-point',\n\n ranged_armor_technology_1: 'iron-undermesh',\n ranged_armor_technology_2: 'wedge-rivets',\n ranged_armor_technology_3: 'angled-surfaces',\n\n melee_damage_technology_1: 'bloomery',\n melee_damage_technology_2: 'decarbonization',\n melee_damage_technology_3: 'damascus-steel',\n\n melee_armor_technology_1: 'fitted-leatherwork',\n melee_armor_technology_2: 'insulated-helm',\n melee_armor_technology_3: 'master-smiths',\n\n tithe_barn: 'tithe-barns',\n siege_engineers: 'siege-engineering',\n greased_axle: 'greased-axles',\n roller_shutter_trigger: 'roller-shutter-triggers',\n mathematics: 'geometry',\n architecture: 'court-architects',\n fire_arrows: 'incendiary-arrows',\n siege_wrapping: 'siege-works',\n\n demolition_ship: 'explosives',\n forecastle: 'extra-ballista',\n war_galley_cannon: 'chaser-cannons',\n fire_damage: 'incendiaries',\n bodkin_point: 'heated-shot',\n advanced_clinker: 'shipwrights',\n\n stone_outpost: 'fortify-outpost',\n arrowslit_emplacement: 'arrowslits',\n cannon: 'cannon-emplacement',\n springald: 'springald-emplacement',\n\n adjustable_crossbar: 'adjustable-crossbars',\n\n superior_transport_constructon: 'lightweight-beams'\n },\n [ITEMS.UPGRADES]: {\n manatarms_2: 'early-men-at-arms',\n manatarms_3: 'men-at-arms',\n manatarms_4: 'elite-men-at-arms',\n archer_3: 'veteran-archers',\n archer_4: 'elite-archers',\n crossbowman_4: 'elite-crossbowmen',\n horseman_2: 'horsemen',\n horseman_3: 'veteran-horsemen',\n horseman_4: 'elite-horsemen',\n lancer_3: 'veteran-knights-or-lancers',\n lancer_4: 'elite-knights-or-lancers',\n knight_4: 'elite-knights-or-lancers',\n spearman_2: 'hardened-spearmen',\n spearman_3: 'veteran-spearmen',\n spearman_4: 'elite-spearmen',\n },\n },\n ab: {\n [ITEMS.UNITS]: {\n mameluke_2: 'camel-rider',\n mameluke_3: 'camel-rider',\n mameluke_4: 'camel-rider',\n },\n [ITEMS.BUILDINGS]: {\n building_landmark_house_of_wisdom: 'house-of-wisdom',\n building_wonder_age4_spiral_tower: 'prayer-hall-of-uqba',\n },\n [ITEMS.TECHNOLOGIES]: {\n // Yap, they did really mess this one up\n culture_wing: 'economic-wing',\n trade_wing: 'culture-wing',\n economic_wing: 'trade-wing',\n military_wing: 'military-wing',\n mameluke_shields: 'camel-rider-shields',\n improved_deposits: 'improved-processing',\n camel_armor: 'camel-rider-shields',\n trader_gold_income: 'spice-roads',\n trader_armor: 'armored-caravans',\n improved_trade_rate: 'grand-bazaar',\n faith: 'proselytization',\n camel_armor_2: 'camel-rider-barding'\n },\n [ITEMS.UPGRADES]: {\n mamaluke_4: 'elite-camel-riders',\n camel_archer_3: 'veteran-camel-archers',\n camel_archer_4: 'elite-camel-archers',\n ghulam_upgrade: 'elite-ghulam',\n },\n },\n ay: {\n [ITEMS.UNITS]: {\n },\n [ITEMS.BUILDINGS]: {\n },\n [ITEMS.TECHNOLOGIES]: {\n },\n [ITEMS.UPGRADES]: {\n },\n },\n by: {\n [ITEMS.UNITS]: {\n },\n [ITEMS.BUILDINGS]: {\n },\n [ITEMS.TECHNOLOGIES]: {\n },\n [ITEMS.UPGRADES]: {\n },\n },\n ch: {\n [ITEMS.UNITS]: {\n repeater_crossbowman_2: 'zhuge-nu',\n repeater_crossbowman_3: 'zhuge-nu',\n repeater_crossbowman_4: 'zhuge-nu',\n firelancer_3: 'fire-lancer',\n firelancer_4: 'fire-lancer',\n },\n [ITEMS.BUILDINGS]: {\n building_landmark_age1_academy: 'imperial-academy',\n building_landmark_age2_clocktower: 'astronomical-clocktower',\n building_landmark_age1_spirit_way: 'spirit-way',\n building_landmark_age3_zhengyangmen: 'barbican-of-the-sun',\n building_landmark_age3_great_wall: 'great-wall-gatehouse',\n building_landmark_age2_palace: 'imperial-palace',\n building_wonder_age4_forbidden_city: 'enclave-of-the-emperor',\n },\n [ITEMS.TECHNOLOGIES]: {\n imperial_examinations: 'imperial-examinations',\n reusable_barrels: 'additional-barrels'\n },\n [ITEMS.UPGRADES]: {\n firelancer_4: 'elite-fire-lancers',\n manatarms_4: 'elite-palace-guards',\n crossbowman_3: 'veteran-zhuge-nu',\n crossbowman_4: 'elite-zhuge-nu',\n },\n },\n de: {\n [ITEMS.UNITS]: {\n tower_war_elephant: 'tower-elephant',\n ghazi_rider_2: 'ghazi-raider',\n ghazi_rider_3: 'ghazi-raider',\n ghazi_rider_4: 'ghazi-raider',\n handcannon_elephant: 'sultans-elite-tower-elephant',\n },\n [ITEMS.BUILDINGS]: {\n building_landmark_age1_landmark_quwwat_ul_islam: 'dome-of-the-faith', // both variations with and without 'landmark-' exist\n building_landmark_age1_landmark_qutub_minar: 'tower-of-victory',\n building_landmark_age1_quwwat_ul_islam: 'dome-of-the-faith',\n building_landmark_age1_qutub_minar: 'tower-of-victory',\n 'building_landmark_age2_khiji-mosque': 'house-of-learning',\n building_landmark_age2_siri_fort: 'compound-of-the-defender',\n building_landmark_age3_madrasa_e_firoz: 'hisar-academy',\n building_landmark_age3_bijay_mandal_palace: 'palace-of-the-sultan',\n building_wonder_age4_agra_fort: 'great-palace-of-agra',\n },\n [ITEMS.TECHNOLOGIES]: {\n speed: 'swiftness',\n siege_elephants: 'howdahs',\n population_increase: 'reinforced-foundations',\n improved_sword_steel: 'honed-blades',\n elephant_armor: 'armored-beasts',\n spotters: 'lookout-towers',\n torch_armor: 'slow-burning-defenses',\n },\n [ITEMS.UPGRADES]: {\n ghazi_rider_upgrade_3: 'veteran-ghazi-raiders',\n ghazi_rider_upgrade_4: 'elite-ghazi-raiders',\n },\n },\n en: {\n [ITEMS.UNITS]: {},\n [ITEMS.BUILDINGS]: {\n building_wonder_age1_westminster_hall_eng: 'council-hall',\n building_wonder_age2_westminster_palace: 'kings-palace',\n building_wonder_age3_westminster_abbey_eng: 'abbey-of-kings',\n building_wonder_age1_white_tower: 'the-white-tower',\n building_wonder_age4_whitehall_palace_eng: 'wynguard-palace',\n building_wonder_age2_windsor_castle_eng: 'berkshire-palace',\n building_wonder_age4_canterbury_cathedral_eng: 'cathedral-of-st-thomas',\n },\n [ITEMS.TECHNOLOGIES]: {\n set_up_camp: 'setup-camp',\n },\n [ITEMS.UPGRADES]: {\n archer_3: 'veteran-longbowmen',\n archer_4: 'elite-longbowmen',\n },\n },\n fr: {\n [ITEMS.UNITS]: {},\n [ITEMS.BUILDINGS]: {\n 'building-_landmark_age1_casernes_centrales': 'school-of-cavalry',\n 'building-_landmark_age2_marche_de_la_ville': 'chamber-of-commerce',\n 'building-_landmark_age1_hotel_de_ville_central': 'guild-hall',\n 'building-_landmark_age3_ecole_de_pudre_a_canon': 'college-of-artillery',\n 'building-_landmark_age2_la_chateau_rouge': 'red-palace', // fyi in-game age doesn't have to match file name age\n 'building-_landmark_age3_le_grande_university': 'royal-institute',\n 'building-_wonder_age4_la_grande_cathedral': 'notre-dame',\n },\n [ITEMS.TECHNOLOGIES]: {\n crossbow_drills: 'crossbow-stirrups',\n imperial_examinations: 'imperial-examination',\n cantled_saddle: 'cantled-saddles',\n bloodlines: 'royal-bloodlines',\n general_ship_gunpowder: 'long-guns',\n },\n [ITEMS.UPGRADES]: {\n lancer_3: 'veteran-royal-knights',\n lancer_4: 'elite-royal-knights',\n crossbowman_4: 'elite-arbaletriers',\n },\n },\n hr: {\n [ITEMS.UNITS]: {\n landskrecht_3: 'landsknecht',\n landskrecht_4: 'landsknecht',\n },\n [ITEMS.BUILDINGS]: {\n 'building-_landmark_age1_palatine_chapel': 'aachen-chapel',\n building_landmark_age1_imperial_palace_of_paderborn: 'meinwerk-palace',\n building_landmark_age2_bamberg_cathedral: 'regnitz-cathedral',\n building_landmark_age2_nuremberg_castle: 'burgrave-palace',\n building_landmark_age3_hollenzollern_castle: 'palace-of-swabia',\n building_landmark_age3_eltz_castle: 'elzbach-palace',\n building_wonder_age4_glucksburg_castle: 'great-palace-of-flensburg',\n },\n [ITEMS.TECHNOLOGIES]: {\n manatarms_maces: 'heavy-maces',\n two_handed_weapons: 'two-handed-weapons',\n riveted_chain: 'riveted-chain-mail',\n reinforce_defences: 'reinforced-defenses',\n fire_armor: 'slate-and-stone-construction',\n inspired_infantry: 'inspired-warriors',\n scale_mail: 'riveted-chain-mail'\n },\n [ITEMS.UPGRADES]: {\n landskrecht_4: 'elite-landsknechte',\n },\n },\n ja: {\n [ITEMS.UNITS]: {\n },\n [ITEMS.BUILDINGS]: {\n },\n [ITEMS.TECHNOLOGIES]: {\n },\n [ITEMS.UPGRADES]: {\n },\n },\n je: {\n [ITEMS.UNITS]: {\n },\n [ITEMS.BUILDINGS]: {\n },\n [ITEMS.TECHNOLOGIES]: {\n },\n [ITEMS.UPGRADES]: {\n },\n },\n ma: {\n [ITEMS.UNITS]: {\n musofadi_2: 'musofadi-warrior',\n musofadi_3: 'musofadi-warrior',\n musofadi_4: 'musofadi-warrior',\n gunner: 'musofadi-gunner',\n general_ship: 'war-canoe',\n war_galley: 'hunting-canoe',\n },\n [ITEMS.BUILDINGS]: {\n building_landmark_age1_mansa_quarry: 'mansa-quarry',\n building_landmark_age1_saharan_trade_network: 'saharan-trade-network',\n building_landmark_age2_farimba_garrison: 'farimba-garrison',\n building_landmark_age2_grand_fulani_corral: 'grand-fulani-corral',\n building_landmark_age3_fort_of_the_huntress: 'fort-of-the-huntress',\n building_landmark_age3_griot_bara: 'griot-bara',\n building_wonder_age4_great_mosque_control_mal: 'great-mosque',\n building_cattle_ranch: 'cattle-ranch',\n building_pit_mine: 'pit-mine',\n building_toll_outpost: 'toll-outpost',\n },\n [ITEMS.TECHNOLOGIES]: {\n upgrade_banco_repairs_mal: 'banco-repairs',\n upgrade_naval_javelin_ships_mal: 'canoe-tactics',\n upgrade_sofa_farima_leadership_mal: 'farima-leadership',\n upgrade_stealth_healing_mal: 'local-knowledge',\n upgrade_donso_precision_training_mal: 'precision-training',\n upgrade_archer_poison_arrow_mal: 'poisoned-arrows',\n upgrade_sofa_armor_mal: 'imported-armor',\n },\n [ITEMS.UPGRADES]: {\n spearman_2: 'hardened-donso',\n spearman_3: 'veteran-donso',\n spearman_4: 'elite-donso',\n javelin_thrower_3: 'veteran-javelin-thrower',\n javelin_thrower_4: 'elite-javelin-thrower',\n warrior_scout_2: 'upgrade-warrior-scout',\n warrior_scout_3: 'veteran-warrior-scout',\n warrior_scout_4: 'elite-warrior-scout',\n sofa_3: 'veteran-sofa',\n sofa_4: 'elite-sofa',\n musofadi_3: 'veteran-musofadi',\n musofadi_4: 'elite-musofadi',\n },\n\n },\n mo: {\n [ITEMS.UNITS]: {\n horsearcher_2: 'mangudai',\n horsearcher_3: 'mangudai',\n horsearcher_4: 'mangudai',\n\n unit_khan_1_mon: 'khan',\n unit_khan_2_mon: 'khan',\n unit_khan_3_mon: 'khan',\n unit_khan_4_mon: 'khan',\n },\n [ITEMS.BUILDINGS]: {\n building_ovoo_mon: 'ovoo',\n building_wonder_age1_deer_stones_mon: 'deer-stones',\n building_wonder_age2_khara_khoto: 'steppe-redoubt',\n building_wonder_age2_karakorum: 'the-silver-tree',\n building_wonder_age4_stupa: 'the-white-stupa',\n building_wonder_age1_kurultai_mon: 'kurultai',\n building_wonder_age4_khanbaliq: 'khaganate-palace',\n building_wonder_age4_monument_of_the_great_khan: 'monument-of-the-great-khan',\n },\n [ITEMS.TECHNOLOGIES]: {\n faster_packing: 'superior-mobility',\n ortoo_network: 'yam-network',\n mangudai_archer_damage: 'siha-bow-limbs',\n signal_arrow_duration: 'whistling-arrows',\n stone_trade: 'stone-commerce',\n fire_damage: 'additional-torches',\n improved_production: 'monastic-shrines',\n },\n [ITEMS.UPGRADES]: {\n horsearcher_3: 'veteran-mangudai',\n horsearcher_4: 'elite-mangudai',\n knight_4: 'elite-lancers',\n keshik_upgrade_3: 'veteran-keshiks',\n keshik_upgrade_4: 'elite-keshiks'\n },\n },\n od: {\n [ITEMS.UNITS]: {\n },\n [ITEMS.BUILDINGS]: {\n },\n [ITEMS.TECHNOLOGIES]: {\n },\n [ITEMS.UPGRADES]: {\n },\n },\n ot: {\n [ITEMS.UNITS]: {\n jannisary_3: 'janissary',\n jannisary_4: 'janissary',\n },\n [ITEMS.BUILDINGS]: {\n building_landmark_age1_cifte_minareli_medrese_ott: 'twin-minaret-medrese',\n building_landmark_age1_han_caravanserai_ott: 'sultanhani-trade-network',\n building_landmark_age2_topkapi_palace_ott: 'istanbul-imperial-palace',\n building_landmark_age2_tophane_armory_ott: 'mehmed-imperial-armory',\n building_landmark_age3_kilitbahir_castle_ott: 'sea-gate-castle',\n building_landmark_age3_instanbul_observatory_ott: 'istanbul-observatory',\n building_wonder_age4_blue_mosque_ott: 'azure-mosque',\n building_military_school_ott: 'military-school',\n },\n [ITEMS.TECHNOLOGIES]: {\n upgrade_imperial_blacksmith_stockpile_ott: 'advanced-academy',\n upgrade_anatolian_hills_ott: 'anatolian-hills',\n upgrade_imperial_military_training_ott: 'fast-training',\n upgrade_imperial_monk_formation_ott: 'field-work',\n upgrade_naval_imperial_fleet_ott: 'imperial-fleet',\n jannisary_company: 'janissary-company',\n jannisary_guns: 'janissary-guns',\n upgrade_imperial_mehter_drums_ott: 'mether-drums',\n upgrade_imperial_military_campus_ott: 'military-campus',\n upgrade_imperial_manned_siege_ott: 'siege-crews',\n upgrade_imperial_trader_capacity_ott: 'trade-bags',\n },\n [ITEMS.UPGRADES]: {\n horseman_3: 'veteran-sipahi',\n horseman_4: 'elite-sipahi',\n jannisary_4: 'elite-janissary'\n },\n },\n ru: {\n [ITEMS.UNITS]: {\n horsearcher_2: 'horse-archer',\n horsearcher_3: 'horse-archer',\n horsearcher_4: 'horse-archer',\n\n war_galley: 'lodya-attack-ship',\n },\n [ITEMS.BUILDINGS]: {\n building_landmark_age1_golden_gate_vladimir: 'the-golden-gate',\n building_landmark_age1_novgorod_kremlin: 'kremlin',\n building_landmark_age2_trinity_lavra: 'abbey-of-the-trinity',\n building_landmark_age2_muscovy_trade_company: 'high-trade-house',\n building_landmark_age3_kremlin_armory: 'high-armory',\n building_landmark_age3_spassakaya_tower: 'spasskaya-tower',\n building_wonder_age4_saint_basils_cathedral: 'cathedral-of-the-tsar',\n },\n [ITEMS.TECHNOLOGIES]: {\n cavalry_sabres: 'knight-sabers',\n springald_banded_arms: 'banded-arms',\n streltsy_precision: 'mounted-training',\n advanced_clinker: 'clinker-construction',\n },\n [ITEMS.UPGRADES]: {\n knight_3: 'knights',\n knight_4: 'elite-knights',\n },\n },\n zx: {\n [ITEMS.UNITS]: {\n },\n [ITEMS.BUILDINGS]: {\n },\n [ITEMS.TECHNOLOGIES]: {\n },\n [ITEMS.UPGRADES]: {\n },\n },\n}\n\nconst actionMap = {\n upgradeScoutForesterMon: 'technologies/professional-scouts',\n upgradeScoutForesterImprovedMon: 'technologies/professional-scouts-improved',\n\n upgradeEconVillagerHuntingGear1Mon: 'technologies/survival-techniques',\n upgradeEconVillagerHuntingGear1ImprovedMon: 'technologies/survival-techniques-improved',\n\n upgradeEconResourceWoodFellRate1Mon: 'technologies/forestry',\n upgradeEconResourceWoodFellRate1ImprovedMon: 'technologies/forestry-improved',\n\n upgradeEconResourceWoodHarvestRate2ImprovedMon: 'technologies/double-broadax-improved',\n upgradeEconResourceWoodHarvestRate3ImprovedMon: 'technologies/lumber-preservation-improved',\n upgradeEconResourceWoodHarvestRate4ImprovedMon: 'technologies/crosscut-saw-improved',\n upgradeEconResourceWoodHarvestRate2: 'technologies/double-broadax',\n upgradeEconResourceWoodHarvestRate3: 'technologies/lumber-preservation',\n upgradeEconResourceWoodHarvestRate4: 'technologies/crosscut-saw',\n\n upgradeEconResourceFoodHarvestRate2ImprovedMon: 'technologies/horticulture-improved',\n upgradeEconResourceFoodHarvestRate3ImprovedMon: 'technologies/fertilization-improved',\n upgradeEconResourceFoodHarvestRate4ImprovedMon: 'technologies/precision-cross-breeding-improved',\n upgradeEconResourceFoodHarvestRate2: 'technologies/horticulture',\n upgradeEconResourceFoodHarvestRate3: 'technologies/fertilization',\n upgradeEconResourceFoodHarvestRate4: 'technologies/precision-cross-breeding',\n\n upgradeEconResourceGoldHarvestRate2ImprovedMon: 'technologies/specialized-pick-improved',\n upgradeEconResourceGoldHarvestRate3ImprovedMon: 'technologies/shaft-mining-improved',\n upgradeEconResourceGoldHarvestRate4ImprovedMon: 'technologies/cupellation-improved',\n upgradeEconResourceGoldHarvestRate2: 'technologies/specialized-pick',\n upgradeEconResourceGoldHarvestRate3: 'technologies/shaft-mining',\n upgradeEconResourceGoldHarvestRate4: 'technologies/cupellation',\n\n upgradeUnitTownCenterWheelbarrow1Mon: 'technologies/wheelbarrow',\n upgradeUnitWheelbarrow1ImprovedMon: 'technologies/wheelbarrow-improved',\n\n upgradeTechUniversityBiologyMon: 'technologies/biology',\n upgradeTechUniversityBiologyImprovedMon: 'technologies/biology-improved',\n\n upgradeVillagerHealth: 'technologies/textiles',\n upgradeVillagerHealthImprovedMon: 'technologies/textiles-improved',\n\n upgradeWeaponFireDamageMon: 'technologies/additional-torches',\n upgradeWeaponFireDamageImprovedMon: 'technologies/additional-torches-improved',\n\n upgradeRaidStoneBountyMon: 'technologies/stone-bounty',\n upgradeRaidStoneBountyImprovedMon: 'technologies/stone-bounty-improved',\n\n upgradeRaidBountyMon: 'technologies/raid-bounty',\n upgradeRaidBountyImprovedMon: 'technologies/raid-bounty-improved',\n\n upgradeTraderSilkroadStoneMon: 'technologies/stone-commerce',\n upgradeTraderSilkroadStoneImprovedMon: 'technologies/stone-commerce-improved',\n\n upgradeReligiousMonasteryOvooMon: 'technologies/monastic-shrines',\n\n upgradeUnitTownCenterFasterPacking1Mon: 'technologies/superior-mobility',\n\n upgradeMangudaiWeaponDamageMon: 'technologies/siha-bow-limbs',\n upgradeMangudaiWeaponDamageImprovedMon: 'technologies/siha-bow-limbs-improved',\n\n upgradeKhanSignalArrowMon: 'technologies/whistling-arrows',\n upgradeKhanSignalArrowImprovedMon: 'technologies/whistling-arrows-improved',\n\n upgradeManatarmsEliteArmyTacticsMon: 'technologies/elite-army-tactics',\n upgradeManatarmsEliteArmyTacticsImprovedMon: 'technologies/elite-army-tactics-improved',\n\n upgradeSiegeWorksMon: 'technologies/siege-works',\n upgradeSiegeWorksImprovedMon: 'technologies/siege-works-improved',\n\n upgradeSiegeRollerTriggerMon: 'technologies/roller-shutter-triggers',\n upgradeSiegeRollerTriggerImprovedMon: 'technologies/roller-shutter-triggers-improved',\n\n upgradeSiegeWeaponSpeedMon: 'technologies/greased-axles',\n upgradeSiegeWeaponSpeedImprovedMon: 'technologies/greased-axles-improved',\n\n upgradeSiegeAdjustableCrossbarMon: 'technologies/adjustable-crossbars',\n upgradeSiegeAdjustableCrossbarImprovedMon: 'technologies/adjustable-crossbars-improved',\n\n upgradeSiegeEngineers: 'technologies/siege-engineering',\n upgradeImprovedSiegeEngineersMon: 'technologies/siege-engineering-improved',\n\n upgradeUnitReligiousHerbalMedicine4: 'technologies/herbal-medicine',\n upgradeUnitReligiousHerbalMedicine4ImprovedMon: 'technologies/herbal-medicine-improved',\n\n upgradeTechMilitaryAcademy: 'technologies/military-academy',\n upgradeTechMilitaryAcademyImprovedMon: 'technologies/military-academy-improved',\n}\n\nconst TYPE_MAP = {\n buildings: ITEMS.BUILDINGS,\n units: ITEMS.UNITS,\n upgrades: ITEMS.TECHNOLOGIES,\n uprades: ITEMS.TECHNOLOGIES,\n abilities: ITEMS.TECHNOLOGIES,\n}\n\nconst iconToItemCache = new Map()\n\nexport async function getItemFromPbgid(pbgid?: number, civ: civConfig): Promise {\n if (!pbgid)\n return undefined\n\n if(PBGIDS.ignore.includes(pbgid)) return null // skip\n\n let item = await getItem(null, pbgid)\n\n if (item?.civs.includes(civ.abbr)) return item\n\n if(PBGIDS.fallback[pbgid]) return getItemFromPbgid(PBGIDS.fallback[pbgid], civ)\n\n return undefined\n}\n\nexport async function getItemFromIcon(icon: string, civ: civConfig): Promise {\n if (iconToItemCache.has(icon)) return iconToItemCache.get(icon)\n\n const [_, category, race, itemType, name] = (MAPPING[icon] ?? icon).split('/')\n\n // We ignore units that are known to be weirds spawns, gaia or UI interface icons\n if (IGNORE_LIST.includes(icon)) return null\n if (['gaia', 'hud'].includes(category)) return null\n if (!name) return undefined\n\n let type = TYPE_MAP[itemType]\n if (!type) throw new Error(`Uknown type ${itemType} for ${icon}`)\n\n // Small workaround cause we view the Abbasid House Of Wisdom wings as buildings;\n // if ([\"trade_wing\", \"culture_wing\", \"military_wing\", \"economic_wing\"].includes(name) && type == ITEMS.TECHNOLOGIES) type = ITEMS.BUILDINGS;\n\n // Search for statically defined mapping, first for the civ, the in common, if not fallback to stripping age and formatting to kebab case\n let id = ID_MAP[civ.abbr][type][name] ?? ID_MAP.common[type][name] ?? name.replaceAll('_', '-').replace(/-\\d/g, '')\n\n try {\n let item = await getItem(type, id)\n\n // since the game calls upgrades and techs the same, we retry and find a unit upgrade of the same name\n if (!item && type == ITEMS.TECHNOLOGIES) {\n // Since game files don't distinguish between research techonologies and unit upgrades, we try to find a unit upgrade with the same name\n // Search for statically defined mapping, first for the civ, the in common, if not fallback to formatting to kebab case\n let upgradeId = ID_MAP[civ.abbr].upgrades[name] ?? ID_MAP.common.upgrades[name] ?? name.replaceAll('_', '-')\n item = await getItem(ITEMS.UPGRADES, upgradeId)\n console.log(upgradeId)\n if (item) {\n type = ITEMS.UPGRADES\n id = upgradeId\n }\n }\n\n // Verify the item returned is available for civ\n if (item?.civs.includes(civ.abbr)) return item\n\n // Else we look at similair units as configured in the explorer i.e. for chinese instead of 'man-at-arms' we look for 'palace-guard'\n const match = await findClosestMatch(type, id, civ)\n if (match) return match\n else return undefined\n } catch (e) {\n throw new Error(`Could not find suitable match for ${icon} for ${civ.name}`, e)\n }\n}\n\nexport async function getItemFromAction(action: string, civ: civConfig): Promise {\n const itemId = actionMap[action]\n if (itemId) {\n try {\n const item = await getItemByCanonicalName(itemId)\n if (item?.civs.includes(civ.abbr)) return item\n else return await findClosestMatch(TYPE_MAP[item.type], item.id, civ)\n } catch (e) {\n throw new Error(`Could not find item for ${action} using id ${itemId}`, e)\n }\n }\n else return getItemFromIcon(`icons/races/fake/upgrades/${camelCaseToSnakeCase(action)}`, civ);\n}\n\nfunction camelCaseToSnakeCase(string: string) {\n return string.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n","import { UnifiedItem } from \"../../../explorer/src/types/data\";\nimport {\n BUILD_ORDER_GROUPING_INTERVAL,\n COMBINE_MAX_STEPS_AGO,\n COMBINE_SIMILAIR_BUILD_STEPS_MARGIN,\n COMBINE_STEPS,\n GAME_CIV_MAP,\n PLAYER_COLORS,\n} from \"../config\";\nimport { getItemFromAction, getItemFromIcon, getItemFromPbgid } from \"../itemMapping\";\nimport { formatSecondsAsDuration, sumPerInterval } from \"./parseUtils\";\nimport { GameScores, GameSummary, ReplayData, ResourceType, SummaryResponse } from \"./types\";\n\nconst pendingRequests = new Map>();\nconst cache = new Map();\n/** Request a json file and deduplicate requests to single promises, optionally stored in cache */\nexport async function fetchJson(url: string, useCache = false): Promise {\n if (useCache && cache.has(url)) return cache.get(url);\n if (pendingRequests.has(url)) return pendingRequests.get(url);\n const request = new Promise(async (resolve, reject) => {\n try {\n const response = await fetch(url);\n if (response.ok) {\n try {\n const data = await response.json();\n if (useCache || cache.has(url)) cache.set(url, data);\n resolve(data);\n } catch {\n reject(new Error(\"Error parsing response format (not JSON)\"));\n } finally {\n pendingRequests.delete(url);\n }\n } else {\n reject(new Error(`${response.status} ${response.statusText}`));\n }\n } catch (e) {\n reject(new Error(`Error requesting data from ${url}: ${e.message}`));\n }\n });\n\n pendingRequests.set(url, request);\n return request;\n}\n\nfunction assignColors(players: ReplayData[]) {\n const teams = [...new Set(players.map((p) => p.team))];\n const colorSet =\n teams.length == 2 ? PLAYER_COLORS.TWO_TEAMS : teams.length == 3 || teams.length == 4 ? PLAYER_COLORS.TWO_TEAMS : PLAYER_COLORS.FFA_OR_UNKNOWN;\n return Object.fromEntries(\n players.map(\n (p, i) =>\n [\n p.profileId,\n colorSet == PLAYER_COLORS.FFA_OR_UNKNOWN\n ? colorSet[i]\n : colorSet[p.team]?.[players.filter((pf) => pf.team == p.team).indexOf(p)] ?? PLAYER_COLORS.FFA_OR_UNKNOWN[i],\n ] as [number, string]\n )\n );\n}\n\nexport async function getGameSummary(url: string): Promise {\n const replayData = await fetchJson(url);\n if (replayData.error) throw new Error(replayData.error);\n\n const summaries: GameSummary[] = [];\n for(const p of replayData.players) {\n // fallback to snakecase to camelCase mappings\n p.profileId ??= p.profile_id\n p.buildOrder ??= p.build_order\n p.resources.foodPerMin ??= p.resources.food_per_min;\n p.resources.woodPerMin ??= p.resources.wood_per_min;\n p.resources.goldPerMin ??= p.resources.gold_per_min;\n p.resources.stonePerMin ??= p.resources.stone_per_min;\n p.resources.oliveoilPerMin ??= p.resources.oliveoil_per_min;\n }\n\n const colors = assignColors(replayData.players);\n const issues: string[] = [];\n for (const replay of replayData.players) {\n const scores: Partial = {};\n let steps: GameSummary[\"steps\"] = [];\n const items: GameSummary[\"items\"] = [];\n const { buildOrder, resources, name, profileId, scores: _scores, _stats = {}, actions } = replay;\n const position = replayData.players.indexOf(replay) + 1;\n const team = replay.team;\n const teamName = replay.teamName;\n const civ = GAME_CIV_MAP[replay.civilization];\n if (!civ) throw new Error(`Could not match civ '${replay.civilization}' for player ${name ?? replayData.players.indexOf(replay) + 1}`);\n\n for (const g of buildOrder) {\n let item: UnifiedItem;\n if (g.type == \"Unit\" && g.unknown?.[\"14\"]) g.finished.push(...g.unknown[\"14\"]);\n if (g.type == \"Unit\" && g.unknown?.[\"15\"]) g.destroyed.push(...g.unknown[\"15\"]);\n const spawned = [...g.finished, ...g.constructed];\n\n try {\n item = await getItemFromPbgid(g.pbgid, civ);\n if (item === undefined) {\n item = await getItemFromIcon(g.icon, civ);\n }\n if (item === undefined) {\n const msg = `Could not find item ${g.pbgid} ${g.icon} for ${civ.name}, occuring at ${spawned.sort()?.map(formatSecondsAsDuration).join(\", \")}`;\n issues.push(msg);\n continue;\n }\n if (item === null) continue;\n } catch (e) {\n console.warn(e);\n issues.push(e.message);\n continue;\n }\n\n steps.push(...spawned.map((s) => ({ item, timestamp: s })));\n const stat = items.find((s) => s.item.id == item.id) ?? items[items.push({ item, counts: { build: 0, lost: 0 }, build: [], lost: [] }) - 1];\n stat.counts.build += spawned.length;\n stat.counts.lost += g.destroyed.length;\n stat.build.push(...spawned);\n stat.lost.push(...g.destroyed);\n }\n\n if ([GAME_CIV_MAP.mongols, GAME_CIV_MAP.ottomans, GAME_CIV_MAP.malians].includes(civ)) {\n /* For mongols we parse out build orders for research from actions\n /* we see if we have a matching technology for the action\n /* and if so, we replace/remove the existing build order for that research with this one.\n /* Specifically, for improved research the 'non-improved' icon spawns, so if you first research\n /* the vanilla version and later the improved, the same icon so same build order occurs twice.\n /* We remove the vanilla version completely and insert the vanilla research matched from the action,\n /* and if the improved action is there, add it too.\n /* One edge case is when researching the improved version and skipping the vanilla, in that case we\n /* check if the vanilla research exists once (spawned for the improved version), in which case we remove it too\n */\n for (const [key, timestamps] of Object.entries(actions)) {\n const item = await getItemFromAction(key, civ);\n if (!item) continue;\n const stat = items.find((s) => s.item.id == item.id) ?? items[items.push({ item, counts: { build: 0, lost: 0 }, build: [], lost: [] }) - 1];\n steps = steps.filter((s) => s.item.id != item.id && (s.item.id != item.id.replace(\"-improved\", \"\") || stat.counts.build == 1));\n steps.push(...timestamps.map((timestamp) => ({ item, timestamp })));\n\n stat.counts = { lost: 0, build: timestamps.length };\n stat.build = [...timestamps];\n }\n }\n\n steps.sort((a, b) => a.timestamp - b.timestamp);\n items.sort((a, b) => b.counts.build - a.counts.build);\n\n const groupedSteps = steps.reduce((acc, step, i) => {\n const lastSimilairStep = acc\n .slice(-1 * COMBINE_MAX_STEPS_AGO)\n .reverse()\n .find((a) => a.item.id === step.item.id);\n if (\n COMBINE_STEPS &&\n (lastSimilairStep?.timestamp > step.timestamp - COMBINE_SIMILAIR_BUILD_STEPS_MARGIN ||\n (lastSimilairStep && acc.at(-1) == lastSimilairStep && lastSimilairStep.timestamp > step.timestamp - BUILD_ORDER_GROUPING_INTERVAL))\n ) {\n lastSimilairStep.count++;\n lastSimilairStep.timestamps.push(step.timestamp);\n } else acc.push({ ...step, count: 1, timestamps: [step.timestamp] });\n\n return acc;\n }, []);\n\n const resourceTypes: ResourceType[] = [\"food\", \"gold\", \"stone\", \"wood\", \"oliveoil\"];\n\n let resourceSpent = replay.totalResourcesSpent;\n let resourceGathered = replay.totalResourcesGathered;\n\n if (!resourceSpent || !resourceGathered)\n {\n // Old parsed replay doesn't have stats yet, use approximation of resources gatherd based on total resources spent and resources remaining at the end of the game\n resourceSpent = items.reduce(\n (acc, { counts, item }) => {\n if (!item.variations?.length) return acc;\n const costs = item.variations[0].costs;\n for (const type of resourceTypes) acc[type] += counts.build * (costs[type] || 0);\n return acc;\n },\n { food: 0, wood: 0, gold: 0, stone: 0, oliveoil: 0, total: 0 }\n );\n resourceSpent.total = resourceTypes.reduce((acc, type) => acc + resourceSpent[type], 0);\n const approximateResourceGathered = Object.fromEntries(resourceTypes.map((type) => [type, (resources[type]?.at(-1) || 0) + resourceSpent[type]])) as Record<\n ResourceType,\n number\n >;\n resourceGathered = { ...approximateResourceGathered, total: resourceTypes.reduce((acc, type) => acc + approximateResourceGathered[type], 0) };\n }\n\n const maxItemsBuild = (id: string) => {\n const item = items.find((i) => i.item.id == id);\n return item ? Math.max(...sumPerInterval(item, resources.timestamps)) : 0;\n };\n\n const kdRatio = (kills: number, deaths: number) => {\n if (deaths)\n return Math.round((kills / deaths) * 100) / 100;\n else if (kills)\n return '∞';\n else\n return '';\n }\n\n Object.assign(scores, {\n totalResourcesGathered: resourceGathered.total,\n totalWoodGathered: resourceGathered.wood,\n totalFoodGathered: resourceGathered.food,\n totalGoldGathered: resourceGathered.gold,\n totalStoneGathered: resourceGathered.stone,\n totalOliveOilGathered: resourceGathered.oliveoil,\n\n totalResourcesSpent: resourceSpent.total,\n totalWoodSpent: resourceSpent.wood,\n totalFoodSpent: resourceSpent.food,\n totalGoldSpent: resourceSpent.gold,\n totalStoneSpent: resourceSpent.stone,\n totalOliveOilSpent: resourceSpent.oliveoil,\n\n apm: replay.apm,\n\n workersMax: maxItemsBuild(\"villager\") || maxItemsBuild(\"dragon-villager\"),\n tradersMax: maxItemsBuild(\"trader\"),\n fishingMax: Math.max(maxItemsBuild(\"fishing-boat\"), maxItemsBuild(\"lodya-fishing-boat\")),\n workersIdleTime: _stats[\"inactperiod\"],\n\n sacredSitesCaptured: _stats[\"pcap\"],\n sacredSitesLost: _stats[\"plost\"],\n sacredSitesNeutralized: _stats[\"precap\"],\n\n militaryBuilt: _stats[\"sqprod\"],\n kills: _stats[\"elitekill\"],\n deaths: _stats[\"edeaths\"],\n killsPerDeath: kdRatio(_stats[\"elitekill\"] || 0, _stats[\"edeaths\"] || 0),\n\n buildingsRazed: _stats[\"structdmg\"],\n buildingsLost: _stats[\"blost\"],\n\n researchProduced: _stats[\"upg\"],\n\n total: _scores.total,\n military: _scores.military,\n economy: _scores.economy,\n technology: _scores.technology,\n society: _scores.society,\n });\n\n summaries.push({\n name,\n items,\n steps,\n groupedSteps,\n resources,\n scores,\n civ,\n profileId,\n position,\n team,\n teamName,\n color: colors[profileId],\n issues,\n });\n }\n\n return summaries;\n}\n","import { Component, For, JSX } from \"solid-js\";\nimport { CivFlag } from \"../../explorer/src/components/CivFlag\";\nimport { GameScores, GameSummary } from \"./parsing/types\";\n\nexport type Score = {\n key: keyof GameScores;\n label: string;\n color?: string;\n icon?: string;\n};\n\nexport type ScoreGroupingConfig = Record;\n\nexport const ScoreTable: Component<{ players: GameSummary[]; groups: ScoreGroupingConfig }> = (props) => {\n const groups = Object.keys(props.groups);\n const scores = Object.values(props.groups).flat();\n const maxScores = props.players.reduce((acc, player) => {\n Object.entries(player.scores).forEach(([key, value]) => (acc[key] = Math.max(acc[key] || 0, value)));\n return acc;\n }, {} as GameScores);\n\n function getBarStyle(score: number, key: Score[\"key\"]): JSX.CSSProperties {\n const color = scores.find((s) => s.key === key)?.color ?? \"grey\";\n const width = `${(score / maxScores[key]) * 80}%`;\n return {\n background: `linear-gradient(to right, ${color}, ${color} ${width}, transparent ${width})`,\n };\n }\n\n return (\n \n \n \n \n {groups.map((group) => (\n \n ))}\n \n \n \n {scores.map((score) => (\n \n ))}\n \n \n \n \n {(player, index) => {\n return (\n \n \n {scores.map(({ key }) => (\n \n ))}\n \n );\n }}\n \n \n
\n {group}\n
{score.label}
\n \n \n {player.name}\n \n {props.players.length > 2 && {player.teamName}}\n \n \n
\n {player.scores[key]}\n
\n );\n};\n","import { civConfig, UnifiedItem } from \"../../src/types/data\";\n\nexport type SummaryResponse = {\n gameId: number;\n winReason: string;\n mapId: number;\n mapName: string;\n mapSize: string;\n mapSizeMaxPlayers: number;\n mapBiome: string;\n mapSeed: string;\n leaderboard: string;\n duration: number;\n startedAt: number;\n finishedAt: number;\n spectatorsCount: number;\n\n players: ReplayData[];\n\n error?: string;\n};\n\nexport type ReplayData = {\n civilization: string;\n name: string;\n team: number;\n teamName: string;\n profileId: number;\n result: \"win\" | \"loss\";\n\n buildOrder: GroupedBuildSteps[];\n actions: Record;\n resources: {\n timestamps: number[];\n food: number[];\n gold: number[];\n stone: number[];\n wood: number[];\n total: number[];\n society: number[];\n military: number[];\n economy: number[];\n technology: number[];\n\n };\n scores: {\n total: number;\n military: number;\n economy: number;\n technology: number;\n society: number;\n };\n totalResourcesSpent: {\n food: number;\n gold: number;\n stone: number;\n wood: number;\n oliveoil: number;\n total: number;\n }\n totalResourcesGathered: {\n food: number;\n gold: number;\n stone: number;\n wood: number;\n oliveoil: number;\n total: number;\n }\n apm: number;\n /** @deprecated Don't use in production */\n _stats: Record;\n};\n\ntype GroupedBuildSteps = {\n id: string;\n icon: string;\n pbgid?: number;\n type: string;\n finished: number[];\n constructed: number[];\n packed: number[];\n unpacked: number[];\n transformed: number[];\n destroyed: number[];\n fooMap: object;\n unknown: Record\n};\n\nexport type GameSummary = {\n name: string;\n civ: civConfig;\n team: number;\n teamName: string;\n profileId: number;\n position: number;\n color: string;\n resources: ReplayData[\"resources\"];\n items: { item: UnifiedItem; counts: { build: number; lost: number }; build: number[]; lost: number[] }[];\n steps: { item: UnifiedItem; timestamp: number }[];\n groupedSteps: { item: UnifiedItem; count: number; timestamp: number; timestamps: number[] }[];\n scores: Partial;\n /** @internal tracking of issues found while parsing for reporting */\n issues?: string[];\n};\n\nexport type GameScores = {\n total: number;\n military: number;\n economy: number;\n technology: number;\n society: number;\n\n totalResourcesGathered: number;\n totalWoodGathered: number;\n totalFoodGathered: number;\n totalGoldGathered: number;\n totalStoneGathered: number;\n totalOliveOilGathered: number;\n\n totalResourcesSpent: number;\n totalWoodSpent: number;\n totalFoodSpent: number;\n totalGoldSpent: number;\n totalStoneSpent: number;\n totalOliveOilSpent: number;\n\n sacredSitesCaptured: number;\n sacredSitesLost: number;\n sacredSitesNeutralized: number;\n\n workersMax: number;\n workersIdleTime: number;\n tradersMax: number;\n fishingMax: number;\n\n militaryProduced: number;\n\n militaryBuilt: number;\n kills: number;\n deaths: number;\n killsPerDeath: number;\n\n buildingsRazed: number;\n buildingsLost: number;\n\n researchProduced: number;\n\n apm: number;\n};\n\nexport type ResourceType = \"food\" | \"wood\" | \"gold\" | \"stone\" | \"oliveoil\";\nexport const resourceTypeLiterals: ResourceType[] = [\"food\", \"wood\", \"gold\", \"stone\", \"oliveoil\"];\n","import { Component, createEffect, createSignal, For } from \"solid-js\";\nimport { CivFlag } from \"../../explorer/src/components/CivFlag\";\nimport { Icon } from \"../../explorer/src/components/Icon\";\nimport { DataSeries, TimelineChart } from \"./Charts\";\nimport { populationValuesPerInterval } from \"./parsing/parseUtils\";\nimport { GameSummary, ResourceType, resourceTypeLiterals } from \"./parsing/types\";\n\nfunction getDataseriesForResource(resource: ResourceType, players: GameSummary[]): DataSeries[] {\n return players.map((player) => {\n const data = player.resources[resource] || [];\n return {\n label: player.name,\n data,\n color: player.color,\n };\n });\n}\n\nfunction getDataseriesForTotalResources(players: GameSummary[]): DataSeries[] {\n return players.map((player) => {\n const data = player.resources.timestamps.map((timestamp, index) =>\n resourceTypeLiterals.reduce((acc, resource) => acc + (player.resources[resource]?.[index] || 0), 0)\n );\n return {\n label: player.name,\n data,\n color: player.color,\n };\n });\n}\n\nfunction getDataseriesForTotalResourcesPerMin(players: GameSummary[]): DataSeries[] {\n return players.map((player) => {\n const data = player.resources.timestamps.map((timestamp, index) =>\n resourceTypeLiterals.reduce((acc, resource) => acc + (player.resources[resource+'PerMin']?.[index] || 0), 0)\n );\n return {\n label: player.name,\n data,\n color: player.color,\n };\n });\n}\n\nfunction getDataseriesForTotalResourcesGathered(players: GameSummary[]): DataSeries[] {\n return players.map((player) => {\n const data = player.resources.timestamps.map((timestamp, index) =>\n resourceTypeLiterals.reduce((acc, resource) => acc + (player.resources[resource+'Gathered']?.[index] || 0), 0)\n );\n return {\n label: player.name,\n data,\n color: player.color,\n };\n });\n}\n\nfunction getDataseriesForPopulation(players: GameSummary[]): Record<\"workers\" | \"army\" | \"popcap\", DataSeries[]> {\n const series = {\n workers: [],\n army: [],\n popcap: [],\n };\n for (const player of players) {\n Object.entries(populationValuesPerInterval(player.items, player.resources.timestamps)).forEach(([key, data]) => {\n series[key].push({\n label: player.name,\n data,\n color: player.color,\n });\n });\n }\n\n return series;\n}\n\nconst views: Record = {\n army: {\n label: \"Army Value\",\n },\n workers: {\n label: \"Worker Count\",\n },\n popcap: {\n label: \"Population Cap\",\n },\n total: { label: \"Total Score\" },\n military: { label: \"Military Score\" },\n economy: { label: \"Economy Score\" },\n technology: { label: \"Technology Score\" },\n society: { label: \"Society Score\" },\n resources: { label: \"Total Resource Balance\" },\n food: { label: \"Food Balance\" },\n wood: { label: \"Wood Balance\" },\n gold: { label: \"Gold Balance\" },\n stone: { label: \"Stone Balance\" },\n oliveoil: { label: \"Olive Oil Balance\" },\n resourcesPerMin: { label: \"Total Resources/min\" },\n foodPerMin: { label: \"Food/min\" },\n woodPerMin: { label: \"Wood/min\" },\n goldPerMin: { label: \"Gold/min\" },\n stonePerMin: { label: \"Stone/min\" },\n oliveoilPerMin: { label: \"Olive Oil/min\" },\n // These sometimes go down, gotta be a bug on the game side, let's hide em for now to avoid confusion\n //resourcesGathered: { label: \"Total Resources Gathered\" },\n //foodGathered: { label: \"Food Gathered\" },\n //woodGathered: { label: \"Wood Gathered\" },\n //goldGathered: { label: \"Gold Gathered\" },\n //stoneGathered: { label: \"Stone Gathered\" },\n //oliveoilGathered: { label: \"Olive Oil Gathered\" },\n};\n\nexport const TimelineSkeleton = () => {\n return (\n
\n
\n
\n
\n Loading...\n
\n
\n
\n );\n};\n\nexport const Timeline: Component<{ players: GameSummary[] }> = (props) => {\n const [view, setView] = createSignal(\"army\");\n const [graph, setGraph] = createSignal([]);\n const [series, setSeries] = createSignal<{ highlight: boolean; hidden: boolean }[]>(props.players.map(() => ({ highlight: false, hidden: false })));\n\n createEffect(() => {\n if ([\"food\", \"wood\", \"gold\", \"stone\", \"oliveoil\", \"foodPerMin\", \"woodPerMin\", \"goldPerMin\", \"stonePerMin\", \"oliveoilPerMin\", \"foodGathered\", \"woodGathered\", \"goldGathered\", \"stoneGathered\", \"oliveoilGathered\", \"total\", \"military\", \"economy\", \"society\", \"technology\"].includes(view()))\n setGraph(getDataseriesForResource(view() as ResourceType, props.players));\n if (view() == \"resources\") setGraph(getDataseriesForTotalResources(props.players));\n if (view() == \"workers\") setGraph(getDataseriesForPopulation(props.players).workers);\n if (view() == \"army\") setGraph(getDataseriesForPopulation(props.players).army);\n if (view() == \"popcap\") setGraph(getDataseriesForPopulation(props.players).popcap);\n if (view() == \"resourcesPerMin\") setGraph(getDataseriesForTotalResourcesPerMin(props.players));\n if (view() == \"resourcesGathered\") setGraph(getDataseriesForTotalResourcesGathered(props.players));\n });\n\n const highlightSeries = (index: number) => setSeries(series()?.map((s, i) => ({ ...s, highlight: i == index && !s.hidden })));\n\n const toggleSeries = (index: number) => setSeries(series()?.map((s, i) => ({ ...s, highlight: false, hidden: i == index ? !s.hidden : s.hidden })));\n\n return (\n
\n
\n
\n setView(e.currentTarget.value)}\n >\n {([key, view]) => }\n \n \n
\n\n
\n \n {(player, i) => {\n const hidden = () => series()[i()].hidden;\n\n return (\n
\n \n
highlightSeries(i())} onMouseLeave={() => highlightSeries(-1)}>\n {player.name}\n
\n \n
\n );\n }}\n
\n
\n
\n
\n \n
\n
\n );\n};\n","import { Component,ParentComponent, createResource, createSignal, ErrorBoundary, JSXElement, Show, Suspense } from \"solid-js\";\nimport { Icon } from \"../../explorer/src/components/Icon\";\nimport { BuildOrder } from \"./BuildOrder\";\nimport { SCORE_TABLE_GROUPS } from \"./config\";\nimport { getGameSummary } from \"./parsing/parseReplay\";\nimport { ScoreTable } from \"./ScoreTable\";\nimport { Timeline, TimelineSkeleton } from \"./Timeline\";\n\nconst smallButtonCSSClass = `text-gray-300 font-bold text-sm bg-gray-600 rounded px-3 py-2 hover:bg-gray-500 hover:text-gray-50 transition`;\nconst containerCssClass = `bg-gray-700 sm:rounded-2xl container my-10 max-w-screen-2xl mx-auto`;\n\nconst Container: ParentComponent<{ title: string; icon: string; controls?: JSXElement }> = (props) => {\n return (\n
\n
\n

\n \n {props.title}\n

\n {props.controls}\n
\n {props.children}\n
\n );\n};\n\nexport const Replay: Component<{ url: string }> = (props) => {\n const [data] = createResource(props.url, getGameSummary);\n const [wrap, setWrap] = createSignal(false);\n const [grouped, setGrouped] = createSignal(true);\n\n return (\n {\n console.error(e);\n return (\n \n
\n
\n \n

Something went wrong

\n
{e.message}
\n \n
\n
\n
\n );\n }}\n >\n \n }>\n
{data() && }
\n
\n
\n\n \n Loading...
}>\n
{data() && }
\n \n \n\n \n {wrap() ? (\n \n ) : (\n \n )}\n\n {grouped() ? (\n \n ) : (\n \n )}\n \n }\n >\n Loading...}>\n \n \n \n\n g.issues)}>\n {(issues) => {\n const uniqueIssues = [...new Set(issues())].sort();\n return issues()?.length ? (\n \n
\n                
\n Encountered {uniqueIssues.length} issues\n
    \n {uniqueIssues.map((issue) => (\n
  • {issue}
  • \n ))}\n
\n
\n
\n
\n

Help AoE4World by sharing the above list on our Discord.

\n \n Report on Discord\n \n
\n
\n ) : (\n <>\n );\n }}\n
\n \n );\n};\n","function cloneProps(props) {\n const propKeys = Object.keys(props);\n return propKeys.reduce((memo, k) => {\n const prop = props[k];\n memo[k] = Object.assign({}, prop);\n if (isObject(prop.value) && !isFunction(prop.value) && !Array.isArray(prop.value)) memo[k].value = Object.assign({}, prop.value);\n if (Array.isArray(prop.value)) memo[k].value = prop.value.slice(0);\n return memo;\n }, {});\n}\n\nfunction normalizePropDefs(props) {\n if (!props) return {};\n const propKeys = Object.keys(props);\n return propKeys.reduce((memo, k) => {\n const v = props[k];\n memo[k] = !(isObject(v) && \"value\" in v) ? {\n value: v\n } : v;\n memo[k].attribute || (memo[k].attribute = toAttribute(k));\n memo[k].parse = \"parse\" in memo[k] ? memo[k].parse : typeof memo[k].value !== \"string\";\n return memo;\n }, {});\n}\nfunction propValues(props) {\n const propKeys = Object.keys(props);\n return propKeys.reduce((memo, k) => {\n memo[k] = props[k].value;\n return memo;\n }, {});\n}\nfunction initializeProps(element, propDefinition) {\n const props = cloneProps(propDefinition),\n propKeys = Object.keys(propDefinition);\n propKeys.forEach(key => {\n const prop = props[key],\n attr = element.getAttribute(prop.attribute),\n value = element[key];\n if (attr) prop.value = prop.parse ? parseAttributeValue(attr) : attr;\n if (value != null) prop.value = Array.isArray(value) ? value.slice(0) : value;\n prop.reflect && reflect(element, prop.attribute, prop.value);\n Object.defineProperty(element, key, {\n get() {\n return prop.value;\n },\n\n set(val) {\n const oldValue = prop.value;\n prop.value = val;\n prop.reflect && reflect(this, prop.attribute, prop.value);\n\n for (let i = 0, l = this.__propertyChangedCallbacks.length; i < l; i++) {\n this.__propertyChangedCallbacks[i](key, val, oldValue);\n }\n },\n\n enumerable: true,\n configurable: true\n });\n });\n return props;\n}\nfunction parseAttributeValue(value) {\n if (!value) return;\n\n try {\n return JSON.parse(value);\n } catch (err) {\n return value;\n }\n}\nfunction reflect(node, attribute, value) {\n if (value == null || value === false) return node.removeAttribute(attribute);\n let reflect = JSON.stringify(value);\n node.__updating[attribute] = true;\n if (reflect === \"true\") reflect = \"\";\n node.setAttribute(attribute, reflect);\n Promise.resolve().then(() => delete node.__updating[attribute]);\n}\nfunction toAttribute(propName) {\n return propName.replace(/\\.?([A-Z]+)/g, (x, y) => \"-\" + y.toLowerCase()).replace(\"_\", \"-\").replace(/^-/, \"\");\n}\nfunction toProperty(attr) {\n return attr.toLowerCase().replace(/(-)([a-z])/g, test => test.toUpperCase().replace(\"-\", \"\"));\n}\nfunction isObject(obj) {\n return obj != null && (typeof obj === \"object\" || typeof obj === \"function\");\n}\nfunction isFunction(val) {\n return Object.prototype.toString.call(val) === \"[object Function]\";\n}\nfunction isConstructor(f) {\n return typeof f === \"function\" && f.toString().indexOf(\"class\") === 0;\n}\nfunction reloadElement(node) {\n let callback = null;\n\n while (callback = node.__releaseCallbacks.pop()) callback(node);\n\n delete node.__initialized;\n node.renderRoot.textContent = \"\";\n node.connectedCallback();\n}\n\nlet currentElement;\nfunction getCurrentElement() {\n return currentElement;\n}\nfunction noShadowDOM() {\n Object.defineProperty(currentElement, \"renderRoot\", {\n value: currentElement\n });\n}\nfunction createElementType(BaseElement, propDefinition) {\n const propKeys = Object.keys(propDefinition);\n return class CustomElement extends BaseElement {\n static get observedAttributes() {\n return propKeys.map(k => propDefinition[k].attribute);\n }\n\n constructor() {\n super();\n this.__initialized = false;\n this.__released = false;\n this.__releaseCallbacks = [];\n this.__propertyChangedCallbacks = [];\n this.__updating = {};\n this.props = {};\n }\n\n connectedCallback() {\n if (this.__initialized) return;\n this.__releaseCallbacks = [];\n this.__propertyChangedCallbacks = [];\n this.__updating = {};\n this.props = initializeProps(this, propDefinition);\n const props = propValues(this.props),\n ComponentType = this.Component,\n outerElement = currentElement;\n\n try {\n currentElement = this;\n this.__initialized = true;\n if (isConstructor(ComponentType)) new ComponentType(props, {\n element: this\n });else ComponentType(props, {\n element: this\n });\n } finally {\n currentElement = outerElement;\n }\n }\n\n async disconnectedCallback() {\n // prevent premature releasing when element is only temporarely removed from DOM\n await Promise.resolve();\n if (this.isConnected) return;\n this.__propertyChangedCallbacks.length = 0;\n let callback = null;\n\n while (callback = this.__releaseCallbacks.pop()) callback(this);\n\n delete this.__initialized;\n this.__released = true;\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n if (!this.__initialized) return;\n if (this.__updating[name]) return;\n name = this.lookupProp(name);\n\n if (name in propDefinition) {\n if (newVal == null && !this[name]) return;\n this[name] = propDefinition[name].parse ? parseAttributeValue(newVal) : newVal;\n }\n }\n\n lookupProp(attrName) {\n if (!propDefinition) return;\n return propKeys.find(k => attrName === k || attrName === propDefinition[k].attribute);\n }\n\n get renderRoot() {\n return this.shadowRoot || this.attachShadow({\n mode: \"open\"\n });\n }\n\n addReleaseCallback(fn) {\n this.__releaseCallbacks.push(fn);\n }\n\n addPropertyChangedCallback(fn) {\n this.__propertyChangedCallbacks.push(fn);\n }\n\n };\n}\n\nfunction createMixin(mixinFn) {\n return ComponentType => (props, options) => {\n options = mixinFn(options);\n if (isConstructor(ComponentType)) return new ComponentType(props, options);\n return ComponentType(props, options);\n };\n}\nfunction compose(...fns) {\n if (fns.length === 0) return i => i;\n if (fns.length === 1) return fns[0];\n return fns.reduce((a, b) => (...args) => a(b(...args)));\n}\n\nconst EC = Symbol('element-context');\n\nfunction lookupContext(element, context) {\n return element[EC] && element[EC][context.id] || (element.host || element.parentNode) && lookupContext(element.host || element.parentNode, context);\n}\n\nfunction createContext(initFn) {\n return {\n id: Symbol('context'),\n initFn\n };\n} // Direct\n\nfunction provide(context, value, element = getCurrentElement()) {\n element[EC] || (element[EC] = {});\n return element[EC][context.id] = context.initFn ? context.initFn(value) : value;\n}\nfunction consume(context, element = getCurrentElement()) {\n return lookupContext(element, context);\n} // HOCs\n\nfunction withProvider(context, value) {\n return createMixin(options => {\n const {\n element\n } = options;\n provide(context, value, element);\n return options;\n });\n}\nfunction withConsumer(context, key) {\n return createMixin(options => {\n const {\n element\n } = options;\n options = Object.assign({}, options, {\n [key]: lookupContext(element, context)\n });\n return options;\n });\n}\n\nfunction walk(root, call) {\n call(root);\n if (root.shadowRoot) walk(root.shadowRoot, call);\n let child = root.firstChild;\n\n while (child) {\n child.nodeType === 1 && walk(child, call);\n child = child.nextSibling;\n }\n}\n\nfunction hot(module, tagName) {\n if (module.hot) {\n function update(possibleError) {\n if (possibleError && possibleError instanceof Error) {\n console.error(possibleError);\n return;\n }\n\n walk(document.body, node => node.localName === tagName && setTimeout(() => reloadElement(node), 0));\n } // handle both Parcel and Webpack style\n\n\n module.hot.accept(update);\n\n if (module.hot.status && module.hot.status() === 'apply') {\n update();\n }\n }\n}\n\nfunction register(tag, props = {}, options = {}) {\n const {\n BaseElement = HTMLElement,\n extension\n } = options;\n return ComponentType => {\n if (!tag) throw new Error(\"tag is required to register a Component\");\n let ElementType = customElements.get(tag);\n\n if (ElementType) {\n // Consider disabling this in a production mode\n ElementType.prototype.Component = ComponentType;\n return ElementType;\n }\n\n ElementType = createElementType(BaseElement, normalizePropDefs(props));\n ElementType.prototype.Component = ComponentType;\n ElementType.prototype.registeredTag = tag;\n customElements.define(tag, ElementType, extension);\n return ElementType;\n };\n}\n\nexport { compose, consume, createContext, createMixin, getCurrentElement, hot, isConstructor, isFunction, isObject, noShadowDOM, provide, register, reloadElement, toAttribute, toProperty, withConsumer, withProvider };\n","import { register } from \"component-register\";\nexport { hot, getCurrentElement, noShadowDOM } from \"component-register\";\nimport { createRoot, createSignal } from \"solid-js\";\nimport { insert } from \"solid-js/web\";\nfunction createProps(raw) {\n const keys = Object.keys(raw);\n const props = {};\n for (let i = 0; i < keys.length; i++) {\n const [get, set] = createSignal(raw[keys[i]]);\n Object.defineProperty(props, keys[i], {\n get,\n set(v) {\n set(() => v);\n }\n });\n }\n return props;\n}\nfunction lookupContext(el) {\n if (el.assignedSlot && el.assignedSlot._$owner)\n return el.assignedSlot._$owner;\n let next = el.parentNode;\n while (next &&\n !next._$owner &&\n !(next.assignedSlot && next.assignedSlot._$owner))\n next = next.parentNode;\n return next && next.assignedSlot\n ? next.assignedSlot._$owner\n : el._$owner;\n}\nfunction withSolid(ComponentType) {\n return (rawProps, options) => {\n const { element } = options;\n return createRoot((dispose) => {\n const props = createProps(rawProps);\n element.addPropertyChangedCallback((key, val) => (props[key] = val));\n element.addReleaseCallback(() => {\n element.renderRoot.textContent = \"\";\n dispose();\n });\n const comp = ComponentType(props, options);\n return insert(element.renderRoot, comp);\n }, lookupContext(element));\n };\n}\nfunction customElement(tag, props, ComponentType) {\n if (arguments.length === 2) {\n ComponentType = props;\n props = {};\n }\n return register(tag, props)(withSolid(ComponentType));\n}\nexport { withSolid, customElement };\n","import { TournamentResults } from '../lib/tournaments/components/tournament-results'\nimport { TournamentStats } from '../lib/tournaments/components/tournament-stats'\nimport { Replay } from '../lib/replays/components/Replay'\nimport { register, compose } from 'component-register'\nimport { withSolid } from 'solid-element'\n\nconst withNoShadowDOM = (ComponentType: any) => {\n return (props: any, options: any) => {\n const { element } = options\n Object.defineProperty(element, 'renderRoot', {\n value: element,\n })\n return ComponentType(props, options)\n }\n}\n\ncompose(register('tournament-results', { tournamentId: 'null' }), withSolid, withNoShadowDOM)(TournamentResults)\ncompose(register('tournament-stats', { tournamentId: 'null' }), withSolid, withNoShadowDOM)(TournamentStats)\ncompose(register('build-order', { url: 'null' }), withSolid, withNoShadowDOM)(Replay)\n"],"file":"assets/components-5b97ebfc.js"}