{"version":3,"sources":["sfb-ranking-logo.png","ladder/Ladder.js","tournament/TournamentList.js","tournament/TournamentDetail.js","ladder/LadderDetail.js","Admin.js","rulebook/Home.js","rulebook/Rulebook.js","rulebook/Faq.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","Ladder","props","state","data","loading","error","undefined","setTimeout","fetchData","response","status","Error","statusText","this","setState","fetch","then","res","checkFetchStatus","json","catch","err","message","className","scope","map","row","index","key","rank","name","points","to","encodeURIComponent","Component","LadTournamentListder","DateTime","fromISO","date","toLocaleString","DATE_SHORT","major","competitive","participants","winner","id","TournamentDetail","match","isExact","params","uuid","Object","keys","length","onClick","history","goBack","join","ladder","matches","knockout","firstHalf","ladderPoints","totalPoints","LadderDetail","tournaments","majors","victories","finalPosition","finalPoints","defaultState","hasKnockout","Date","toISOString","split","assign","handleInputChange","bind","handleSubmit","event","target","value","includes","checked","preventDefault","method","headers","body","JSON","stringify","role","onSubmit","htmlFor","type","onChange","rows","Home","width","height","src","allowfullscreen","frameborder","allowFullScreen","frameBorder","href","Rulebook","colSpan","Faq","App","logo","alt","data-toggle","data-target","aria-controls","aria-expanded","aria-label","activeClassName","path","component","TournamentList","Admin","Boolean","window","location","hostname","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","registration","unregister","console"],"mappings":"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","file":"static/js/main.31159a5a.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/sfb-ranking-logo.239d0ce1.png\";","import 'whatwg-fetch'\nimport React, { Component } from 'react'\nimport { Link } from 'react-router-dom'\nimport { EyeFill } from 'react-bootstrap-icons'\n\n\nexport default class Ladder extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n data: [],\n loading: false,\n error: undefined,\n }\n setTimeout(() => this.fetchData())\n }\n\n checkFetchStatus(response) {\n if (response.status >= 200 && response.status < 300) {\n return response\n }\n\n const error = new Error(response.statusText)\n error.response = response\n throw error\n }\n\n fetchData() {\n this.setState({ loading: true, error: undefined })\n\n fetch('/api/ladder')\n .then((res) => this.checkFetchStatus(res))\n .then((res) => res.json())\n .then((json) => {\n this.setState({\n data: json,\n loading: false,\n error: undefined,\n })\n })\n .catch((err) => {\n const message = err.response ? err.response.statusText : err\n this.setState({ loading: false, error: `Server error: ${message}` })\n })\n }\n\n render() {\n if (this.state.error) {\n return
{ this.state.error }
\n }\n\n return (\n
\n

Classement SFB Francophone

\n \n \n \n \n \n \n \n \n \n \n { this.state && this.state.data && this.state.data.map((row, index) => {\n return (\n \n \n \n \n \n \n )\n }) }\n \n
#PseudoPoints
{ row.rank }{ row.name }{ row.points }\n \n \n \n
\n
\n )\n }\n}\n","import React, { Component } from 'react'\nimport { DateTime } from 'luxon'\nimport { Square, CheckSquare, EyeFill } from 'react-bootstrap-icons'\nimport { Link } from 'react-router-dom'\n\nexport default class LadTournamentListder extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n data: [],\n loading: false,\n error: undefined,\n }\n setTimeout(() => this.fetchData())\n }\n\n checkFetchStatus(response) {\n if (response.status >= 200 && response.status < 300) {\n return response\n }\n\n const error = new Error(response.statusText)\n error.response = response\n throw error\n }\n\n fetchData() {\n this.setState({ loading: true, error: undefined })\n\n fetch('/api/tournaments')\n .then((res) => this.checkFetchStatus(res))\n .then((res) => res.json())\n .then((json) => {\n this.setState({\n data: json,\n loading: false,\n error: undefined,\n })\n })\n .catch((err) => {\n const message = err.response ? err.response.statusText : err\n this.setState({ loading: false, error: `Server error: ${message}` })\n })\n }\n render() {\n return (\n
\n

Historique des tournois

\n \n \n \n \n \n \n \n \n \n \n \n \n \n { this.state.data.map((row, index) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n }) }\n \n
DateNomMajeurCompéttitifParticipantsGagnant
{ DateTime.fromISO(row.date).toLocaleString(DateTime.DATE_SHORT) }{ row.name }{ row.major ? : }{ row.competitive ? : }{ row.participants }{ row.winner }\n \n \n \n
\n
\n )\n }\n}\n","import React, { Component } from 'react'\nimport { Square, CheckSquare, EyeFill } from 'react-bootstrap-icons'\nimport { DateTime } from 'luxon'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\n\nexport default class TournamentDetail extends Component {\n constructor(props) {\n super(props)\n\n let error = null\n\n if (!props.match.isExact || !props.match.params || !props.match.params.uuid) {\n error = 'Ce joueur n\\'a pas été trouvé.'\n }\n\n this.state = {\n data: null,\n loading: false,\n error,\n }\n setTimeout(() => this.fetchData(props.match.params.uuid))\n }\n\n checkFetchStatus(response) {\n if (response.status >= 200 && response.status < 300) {\n return response\n }\n\n const error = new Error(response.statusText)\n error.response = response\n throw error\n }\n\n fetchData(uuid) {\n this.setState({ loading: true, error: undefined })\n\n fetch(`/api/tournament/${uuid}`)\n .then((res) => this.checkFetchStatus(res))\n .then((res) => res.json())\n .then((json) => {\n this.setState({\n data: json,\n loading: false,\n error: !json || Object.keys(json).length === 0 ? 'Ce joueur n\\'a pas été trouvé.' : null,\n })\n })\n .catch((err) => {\n const message = err.response ? err.response.statusText : err\n this.setState({ loading: false, error: `Server error: ${message}` })\n })\n }\n\n render() {\n if (this.state.error) {\n return
{ this.state.error }
\n }\n\n if (!this.state.data) {\n return
\n }\n\n return (\n
\n
\n \n
\n
\n
\n

{ this.state.data.name }

\n

{ this.state.data.participants } participants

\n

Grand gagnant : { this.state.data.winner }

\n
\n
\n { [\n DateTime.fromISO(this.state.data.date).toLocaleString(DateTime.DATE_SHORT),\n 'Tournoi Majeur',\n 'Pris en compte dans le classement',\n ].join(' · ') }\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n { this.state.data.ladder.map((row, index) => {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n }) }\n \n
#PseudoMatchs jouésPhase finalePremière moitiéPoints classementPoints total
{ row.rank }{ row.name }{ row.matches }{ row.knockout ? : }{ row.firstHalf ? : }{ row.ladderPoints }{ row.totalPoints }\n \n \n \n
\n
\n
\n )\n }\n}\n\nTournamentDetail.propTypes = {\n match: PropTypes.shape({\n isExact: PropTypes.bool,\n params: PropTypes.shape({\n uuid: PropTypes.string,\n }),\n }),\n history: PropTypes.shape({\n goBack: PropTypes.func,\n }),\n}\n","import React, { Component } from 'react'\nimport { Square, CheckSquare, EyeFill } from 'react-bootstrap-icons'\nimport { DateTime } from 'luxon'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\n\nexport default class LadderDetail extends Component {\n constructor(props) {\n super(props)\n\n let error = null\n\n if (!props.match.isExact || !props.match.params || !props.match.params.uuid) {\n error = 'Ce joueur n\\'a pas été trouvé.'\n }\n\n this.state = {\n data: null,\n loading: false,\n error,\n }\n setTimeout(() => this.fetchData(props.match.params.uuid))\n }\n\n checkFetchStatus(response) {\n if (response.status >= 200 && response.status < 300) {\n return response\n }\n\n const error = new Error(response.statusText)\n error.response = response\n throw error\n }\n\n fetchData(uuid) {\n this.setState({ loading: true, error: undefined })\n\n fetch(`/api/user/${uuid}`)\n .then((res) => this.checkFetchStatus(res))\n .then((res) => res.json())\n .then((json) => {\n this.setState({\n data: json,\n loading: false,\n error: !json || Object.keys(json).length === 0 ? 'Ce joueur n\\'a pas été trouvé.' : null,\n })\n })\n .catch((err) => {\n const message = err.response ? err.response.statusText : err\n this.setState({ loading: false, error: `Server error: ${message}` })\n })\n }\n\n render() {\n if (this.state.error) {\n return
{ this.state.error }
\n }\n\n if (!this.state.data) {\n return
\n }\n\n return (\n
\n
\n \n
\n
\n
\n

{ this.state.data.name }

\n

\n Rang { this.state.data.rank } { ' · ' } { this.state.data.points } points\n

\n
\n
\n

\n A participé à { this.state.data.tournaments } tournoi(s), dont { this.state.data.majors } tournoi(s)\n majeur(s), pour un total de { this.state.data.victories } victoires.\n

\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n { this.state.data.history.map((row, index) => {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n }) }\n \n
DateNomMajeurCompéttitifParticipantsPosition de { this.state.data.name }Points de { this.state.data.name }
{ DateTime.fromISO(row.date).toLocaleString(DateTime.DATE_SHORT) }{ row.name }{ row.major ? : }{ row.competitive ? : }{ row.participants }{ row.finalPosition }{ row.finalPoints }\n \n \n \n
\n
\n
\n )\n }\n}\n\nLadderDetail.propTypes = {\n match: PropTypes.shape({\n isExact: PropTypes.bool,\n params: PropTypes.shape({\n uuid: PropTypes.string,\n }),\n }),\n history: PropTypes.shape({\n goBack: PropTypes.func,\n }),\n}\n","import 'whatwg-fetch'\nimport React, { Component } from 'react'\n\nconst defaultState = {\n name: '',\n major: false,\n competitive: false,\n hasKnockout: false,\n date: new Date().toISOString().split('T')[0],\n data: '',\n status: null,\n error: '',\n}\n\nexport default class Ladder extends Component {\n constructor(props) {\n super(props)\n this.state = Object.assign({}, defaultState)\n\n this.handleInputChange = this.handleInputChange.bind(this)\n this.handleSubmit = this.handleSubmit.bind(this)\n }\n\n handleInputChange(event) {\n const target = event.target\n const value = ['major', 'competitive', 'hasKnockout'].includes(target.name) ? target.checked : target.value\n const name = target.name\n\n this.setState({\n [name]: value,\n status: null,\n })\n }\n\n checkFetchStatus(response) {\n if (response.status >= 200 && response.status < 300) {\n return response\n }\n\n const error = new Error(response.statusText)\n error.response = response\n throw error\n }\n\n handleSubmit(event) {\n event.preventDefault()\n\n fetch('/api/admin/uplaod', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n name: this.state.name,\n major: this.state.major,\n competitive: this.state.competitive,\n hasKnockout: this.state.hasKnockout,\n date: this.state.date,\n data: this.state.data,\n }),\n })\n .then((res) => this.checkFetchStatus(res))\n .then(() => {\n this.setState(Object.assign({}, defaultState, { status: 'success' }))\n })\n .catch((err) => {\n const message = err.response ? err.response.statusText : err\n this.setState(Object.assign({}, defaultState, { status: 'error', error: message }))\n })\n }\n\n render() {\n return (\n
\n { this.state.status === 'success' && (\n
\n } Le tournoi a bien été sauvegardé !\n
\n ) }\n { this.state.status === 'error' && (\n
\n Erreur durant la sauvegarde : { this.state.error }\n
\n ) }\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n )\n }\n}\n","import './Rulebook.css'\nimport React from 'react'\n\nexport default function Home() {\n return (\n
\n

Ligue Super Fantasy Brawl

\n

\n Bienvenue sur le site de la ligue Super Fantasy Brawl Francophone ! Cette Ligue est gérée par\n et pour la Communauté francophone de SFB. Bien que nous sommes en contact avec Mythic, il est important de\n préciser que cette Ligue n'est pas gérée par Mythic ou un des distributeurs du jeu.\n

\n\n

À quoi sert ce site ?

\n

\n Cette page contient les règles de la ligue et les liens importants. Sur les autres pages, l'historique de\n toutes les saisons et compétitions jouées est consultable, ainsi que le classement SFB (inspiré du classement\n ATP, pour aider à la répartition des joueurs dans les phases de poule).\n

\n\n

Comment participer ?

\n

La ligue est ouverte à tous ceux qui sont intéressés et qui parlent français.

\n

\n Pour l'instant les matchs seront joués sur Tabletopia, mais à l'avenir ils pourront être joués en face\n à face quand le jeu aura été livré.\n

\n

\n Les inscriptions s'effectuent sur Toornament, un site qui gère automatiquement l'organisation du\n tournoi. Entre chaque saison il y aura une fenêtre d'inscription de deux semaines, annoncées sur le groupe\n Facebook et sur le Discord.\n

\n\n \n \n\n

Liens importants

\n
\n
Livre de règles en Français
\n
\n \n https://www.dropbox.com/s/9jd7zk7rl3ld3if/SFB_RULES_FR_V3_Updated.pdf?dl=0\n \n
\n\n
Livre de règles en Anglais
\n
\n \n https://www.dropbox.com/s/5ujqbf3jo5adz2i/SFB_RULES_EN_V3_w_errata.pdf?dl=0\n \n
\n\n
Discord SFB Francophone
\n
\n https://discord.gg/CtQYJYh\n
\n\n
Facebook SFB Francophone
\n
\n https://www.facebook.com/groups/604249506754297\n
\n\n
Tabletopia
\n
\n https://tabletopia.com/games/superfantasybrawl\n
\n\n
Tuto Tabletopia
\n
\n https://www.youtube.com/watch?v=fsWuKMlwYTw\n
\n\n
Tuto Discord
\n
\n https://www.youtube.com/watch?v=cC3dnX5_xz4\n
\n\n
SFB Database
\n
\n http://sfbdb.com\n
\n
\n
\n )\n}\n","import './Rulebook.css'\nimport React from 'react'\n\nexport default function Rulebook() {\n return (\n
\n

Structure des saisons

\n

\n Les saisons commencent par une phase de Ronde Suisse, permettant de détrminer les X meilleurs joueurs qui se\n qualifieront ensuite pour un tournoi à Double Élimination. Le X sera déterminer en fonction du nombre de\n participants, tout comme le nombre de matchs dans la Ronde Suisse. Les joueurs auront un match à jouer par semaine.\n Tous les matchs se jouent en une seule manche.\n

\n

\n Les tirages de la Ronde Suisse seront annoncés chaque vendredi soir, dès que tous les résultats de la semaine\n seront validés. Une victoire en phase de Ronde suisse rapporte 3 points. Une victoire par forfait rapporte 2\n points. Un match nul (les deux joueurs sont déclarés forfaits en même temps) 1 point chacun. Les défaites 0\n point. Les égalités sont départagées par la médiane Buchholz.\n

\n

\n Un groupe de 5 modérateurs a été désigné pour jouer le rôle d'arbitre si le besoin émerge, comme par\n exemple pour déclarer quelqu'un forfait pour un match s'il pose un lapin à son adversaire sans raison.\n

\n

\n En dehors des tirages des matchs et de la gestion des résultats, tout est géré via Discord. Un channel dédié à\n chaque match sera disponible. Il est recommandé de vous organiser avec vos adversaires sur ce channel, à la vue\n de tout le monde. C'est le meilleur moyen que nous avons trouvé pour faciliter les décisions des\n modérateurs, mais aussi pour facilement voir quand est-ce que les prochains matchs seront joués.\n

\n

\n À la fin de chaque saison, des discussions seront entamées avec la communauté pour décider si des changements\n sont à apporter pour la saison suivante, que ce soit en terme d'organisation ou de règles durant les\n matchs.\n

\n

\n En plus des saisons, des tournois ponctuels pourront être organisés par la communauté, par exemple pour occuper\n ceux qui ne sont pas qualifiés pour la phase finale pendant qu'elle se déroule, ou pour tester\n d'autres formats.\n

\n\n

Structure des matchs

\n

\n Malheureusement, le jeu n'est actuellement pas entièrement équilibré. Ce n'est pas très important sur\n les parties amicales, mais dans un format compétitif, le premier joueur serait un poil trop avantangé si on\n suivait parfaitement les règles officielles. Pour rétablir l'équilibre, les matchs de la ligue suivront les\n règles officielles à l'excepion de ces deux changements :\n

\n
\n
Draft
\n
\n Le format utilisé a été surnommé "Double Draft Compétitive". Un joueur doit créer deux équipes de 5\n parmis la totalité des champions actuellement disponible. Chaque champion ne peut apparaître que dans une\n équipe du même joueur. Une fois que les deux joueurs auront révélés leurs deux équipes, le joueur 1 doit ban\n une équipe du joueur 2. C'est ensuite au tour du joueur 2 de ban une équipe du joueur 1. Et la suite suit\n le format de "Draft Compétitive" du livre de règle.\n
\n\n
Mise en place des objectifs
\n
\n

\n Après avoir révélé les deux objectifs lors de la mise en place, le joueur 2 peut décider de mulligan tout ou\n partie des objectifs révélés.\n

\n
\n
\n\n

Fonctionnement du classement SFB

\n

\n Inspiré par le classement ATP, chaque participation à une saison ou un tournoi ponctuel peut apporter des points\n pour le classement SFB. L'équipe de modération sera en charge de décider si un tournoi ponctuel est assez\n compétitif pour être pris en compte dans le classement. Par exemple, un format qui distribue aléatoirement 3\n champions à chaque joueur serait un poil trop aléatoire pour être vraiment compétitif.\n

\n

\n Plus les compétitions sont longues, plus elles peuvent rapporter de points. Les saisons rapportent plus de\n points que les tournois ponctuels.\n

\n

\n Seuls ceux présents dans la première moitié du tableau remportent des points par rapport à leur classement\n final, mais tout le monde remporte des points de participation : 15 points par saison, ou 1 point par match de\n tournoi ponctuel (avec un maximum de 10 points).\n

\n

\n Le classement ne prend en compte que les deux dernières saisons (qu'on appellera tournois majeurs), et les\n deux meilleurs résultats de tournois ponctuels (appelés tournois mineurs) sur la période de ces deux saisons.\n

\n

Voici les points gagner par rapport à la position finale :

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Position finale\n Tournoi majeur\n \n Tournoi mineur\n
Seul(e)À égalitéSeul(e)À égalité
15035
24025
325301520
420251015
5151959
6101347
791135
881024
97924
106824
115623
124523
13 jusqu'à 163423
17 et après32
\n
\n )\n}\n","import './Rulebook.css'\nimport React from 'react'\n\nexport default function Faq() {\n return (\n
\n

F.A.Q. Confirmée par Mythic Games

\n
\n
Le déplacement de Deryn est-il optionnel sur sa réaction ?
\n
Non, il est obligatoire.
\n\n
\n Si un champion sur lequel a été joué une réaction est mis "Hors de Combat", est-ce que les effets de\n la réaction s'applique toujours autour de l'endroit où il est mort ?\n
\n
\n Non. Dans la séquence de combat du livre de règle, si le champion est mis "Hors de Combat" lors de\n l'étape 7, ça arrive bien avant la réaction, donc le champion n'est déjà plus sur plateau lorsque la\n réaction se déroule.\n
\n\n
\n Si une attaque possède une Poussée ou une Attraction, et que le champion ciblé joue une réaction qui lui permet de se\n déplacer, et qu'il se déplace de façon à ne plus être aligné avec l'attaquant, est-ce qu'on\n fait toujours la Poussée ou l'Attraction ?\n
\n
\n Non, on résoud la séquence d'attaque dans l'ordre. La Poussée/Attraction étant un effet Post-Attaque, il est\n résolu après la réaction, et à ce moment là les champions ne sont plus alignés.\n
\n\n
\n Est-ce que Mariusz, en devenant exalté, gagne Drain de vie directement sur l'attaque qu'il vient\n d'utiliser s'il est Mal en Point ?\n
\n
\n Non, les dommages ont été distribué lorsqu'il n'était pas exalté, donc l'attaque n'avait\n pas Drain de vie à ce moment là.\n
\n\n
\n Quand une unité subit une Peur, peut-elle choisir une direction qui ne permet pas de faire le Dash au maximum\n quand une qui le permet existe ?\n
\n
\n S'il y a une direciton qui permet de Dash 2 en s'éloignant de la source de la Peur il faut la choisir\n en priorité devant les directions qui ne permettent que de Dash 1.\n
\n\n
\n Avec la carte Cauchemar de Nevamor, s'il traverese plusieurs ennemis, dans quel ordre sont fait les Peurs\n ?\n
\n
\n Le joueur qui subit les Peurs choisi dans quel ordre les champions se déplacent. Donc un champion peut se\n déplacer et laisser une place à un autre.\n
\n\n
\n Si une réaction tue l'attaquant, qui devient expérimenté ? Le champion attaqué ou le champion à qui appartient la\n réaction ?\n
\n
Le champion attaqué, sauf si spécifié autrement sur la réaction.
\n\n
Est-ce qu'un champion peut devenir expérimenté alors qu'il est Hors de Combat ?
\n
Non.
\n\n
\n Si une attaque avec Drain de vie applique plus de dommages qu'il ne reste de point de vie à la cible,\n est-ce que l'attaque ne draine que le nombre de points de vie restants, ou les dommages totaux ?\n
\n
\n Dommages totaux. Donc une attaque 5 Drain de vie contre une cible avec 2 points de vie et 0 d'armure soigne\n l'attaquant de 5.\n
\n \n
\n Sur la carte Larmes Curatives d'Akhet, de combien je soigne mon allié si je défause une carte Bleue ?\n
\n
\n De 2. Le soin fait référence au Soin 2 de la carte.\n
\n \n
\n Sur la carte Matraquage de Taze, que veut dire Choc ?\n
\n
\n C'est une erreur d'impression. Il faut remplacer Choc par Étourdissement.\n
\n
\n
\n )\n}\n","import React from 'react'\nimport './App.css'\nimport { BrowserRouter as Router, Switch, Route, Link, NavLink } from 'react-router-dom'\nimport Ladder from './ladder/Ladder'\nimport TournamentList from './tournament/TournamentList'\nimport TournamentDetail from './tournament/TournamentDetail'\nimport LadderDetail from './ladder/LadderDetail'\nimport Admin from './Admin'\nimport Home from './rulebook/Home'\nimport Rulebook from './rulebook/Rulebook'\nimport Faq from './rulebook/Faq'\nimport logo from './sfb-ranking-logo.png'\n\nexport default function App() {\n return (\n \n \n\n
\n \n \n \n \n \n \n \n \n \n \n
\n
\n )\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n)\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker == null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n }\n else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type')\n if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n }\n else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.')\n })\n}\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n )\n })\n }\n else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister()\n })\n .catch((error) => {\n console.error(error.message)\n })\n }\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport './index.css'\nimport App from './App'\nimport * as serviceWorker from './serviceWorker'\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n)\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""}