mirror of
				https://forge.chapril.org/tykayn/libre-charge-map
				synced 2025-10-09 17:02:46 +02:00 
			
		
		
		
	add stats page
This commit is contained in:
		
							parent
							
								
									c23d4bd404
								
							
						
					
					
						commit
						fca7661ad8
					
				
					 12 changed files with 767 additions and 6 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -133,3 +133,5 @@ dist | ||||||
| 
 | 
 | ||||||
| #ide | #ide | ||||||
| .idea | .idea | ||||||
|  | 
 | ||||||
|  | js/*.json | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								img/avere_repartition_puissance_nominale.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								img/avere_repartition_puissance_nominale.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 74 KiB | 
|  | @ -220,8 +220,10 @@ | ||||||
|             <div class="footland"> |             <div class="footland"> | ||||||
| 
 | 
 | ||||||
|                 <hr> |                 <hr> | ||||||
|  |                 <a href="/stats.html"> | ||||||
|                     <h2 class="title"> |                     <h2 class="title"> | ||||||
|                     À propos de ce plan</h2> |                         📊 Statistiques</h2> | ||||||
|  |                 </a> | ||||||
|                 <p> |                 <p> | ||||||
|                     La carte thématique proposant des points de charge pour véhicule électrique, basée sur les données |                     La carte thématique proposant des points de charge pour véhicule électrique, basée sur les données | ||||||
|                     d'OpenStreetMap. Voir la documentation OSM concernant <a |                     d'OpenStreetMap. Voir la documentation OSM concernant <a | ||||||
|  |  | ||||||
							
								
								
									
										41
									
								
								js/lcm_stats.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								js/lcm_stats.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | ||||||
|  | fetch('./js/stats.json') | ||||||
|  |   .then(response => response.json()) | ||||||
|  |   .then(stats => { | ||||||
|  | 
 | ||||||
|  |     // import * as stats from './stats.json' assert { type: 'json' };
 | ||||||
|  | 
 | ||||||
|  |     console.log(stats); | ||||||
|  | 
 | ||||||
|  |     document.getElementById('countStationsOSM').textContent = formatSpaceSeparator(stats.countStationsOSM); | ||||||
|  |     document.getElementById('countStationsOpenData').textContent = formatSpaceSeparator(stats.countStationsOpenData); | ||||||
|  |     document.getElementById('countStationsAVERE').textContent = formatSpaceSeparator(40000); | ||||||
|  |     document.getElementById('countPointsDeChargeAVERE').textContent = formatSpaceSeparator(stats.countStationsAVERE); | ||||||
|  |     document.getElementById('countPointsDeChargeOSM').textContent = formatSpaceSeparator(stats.countPointsDeChargeOSM); | ||||||
|  |     document.getElementById('countPointsDeChargeOpenData').textContent = formatSpaceSeparator(stats.countPointsDeChargeOpenData); | ||||||
|  |     document.getElementById('dateGeneration').textContent = stats.dateGeneration; | ||||||
|  | 
 | ||||||
|  |     france_twh = 500 | ||||||
|  |     irve_monthly_consumption_gwh = 69 | ||||||
|  | 
 | ||||||
|  |     annual_consumption_gwh = compute_annual_consumption_gwh(irve_monthly_consumption_gwh, france_twh) | ||||||
|  |     proportion_annual_consumption_gwh = compute_proportion_annual_consumption_gwh(annual_consumption_gwh, stats.countStationsAVERE) | ||||||
|  | 
 | ||||||
|  |     console.log('estimation de la consommation annuelle des stations de recharge en France', annual_consumption_gwh, 'GWh sur ', france_twh * 1000, 'GWh') | ||||||
|  |     console.log('proportion de la consommation annuelle par borne', proportion_annual_consumption_gwh) | ||||||
|  |   }) | ||||||
|  |   .catch(error => { | ||||||
|  |     console.error('Erreur lors du chargement du fichier stats.json:', error); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  | function compute_annual_consumption_gwh(irve_monthly_consumption_gwh, france_twh) { | ||||||
|  |   return irve_monthly_consumption_gwh * 12 * france_twh; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function compute_proportion_annual_consumption_gwh(annual_consumption_gwh, countStationsAVERE) { | ||||||
|  |   return (annual_consumption_gwh / countStationsAVERE).toFixed(2); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | function formatSpaceSeparator(number) { | ||||||
|  |   return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " "); | ||||||
|  | } | ||||||
							
								
								
									
										201
									
								
								make_stats.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								make_stats.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,201 @@ | ||||||
|  | 
 | ||||||
|  | import fs from 'fs'; | ||||||
|  | import fetch from 'node-fetch'; | ||||||
|  | import * as cheerio from 'cheerio'; | ||||||
|  | 
 | ||||||
|  | let stats = {}; | ||||||
|  | 
 | ||||||
|  | // Fonction pour télécharger un fichier
 | ||||||
|  | 
 | ||||||
|  | async function downloadOpenDataEtalab(url, outputPath) { | ||||||
|  | 
 | ||||||
|  |   console.log('Téléchargement des fichiers...'); | ||||||
|  | 
 | ||||||
|  |   try { | ||||||
|  |     // Télécharger le fichier Etalab
 | ||||||
|  |     const response = await fetch(url); | ||||||
|  |     const arrayBuffer = await response.arrayBuffer(); | ||||||
|  |     const buffer = Buffer.from(arrayBuffer); | ||||||
|  |     fs.writeFileSync(outputPath, buffer); | ||||||
|  |     console.log('Fichier Etalab téléchargé avec succès'); | ||||||
|  |   } catch (error) { | ||||||
|  |     console.error('Erreur lors du téléchargement:', error); | ||||||
|  |     process.exit(1); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Fonction pour compter les features dans un fichier GeoJSON
 | ||||||
|  | async function compterFeaturesInOpenDataEtalab() { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   try { | ||||||
|  |     // Lire le fichier GeoJSON
 | ||||||
|  |     const donnees = fs.readFileSync('js/opendata.json', 'utf8'); | ||||||
|  |     const geojson = JSON.parse(donnees); | ||||||
|  | 
 | ||||||
|  |     // Vérifier que c'est bien un GeoJSON avec des features
 | ||||||
|  |     if (!geojson.features) { | ||||||
|  |       throw new Error('Le fichier ne contient pas de features GeoJSON valides'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Compter le nombre de features
 | ||||||
|  |     const nombreFeatures = geojson.features.length; | ||||||
|  | 
 | ||||||
|  |     let count_capacity = 0; | ||||||
|  |     let count_nb_pdc_fuckedup = 0; | ||||||
|  |     let count_nb_pdc_ok = 0; | ||||||
|  |     let unique_id_station_itinerance = [] | ||||||
|  |     let count_id_station_itinerance_duplicate = 0; | ||||||
|  |     geojson.features.forEach(feature => { | ||||||
|  |       if (feature.properties.id_station_itinerance) { | ||||||
|  |         if (!unique_id_station_itinerance.includes(feature.properties.id_station_itinerance)) { | ||||||
|  |           unique_id_station_itinerance.push(feature.properties.id_station_itinerance) | ||||||
|  |         } else { | ||||||
|  |           count_id_station_itinerance_duplicate++ | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       if (feature.properties.nbre_pdc) { | ||||||
|  |         let nbre_pdc = parseInt(feature.properties.nbre_pdc); | ||||||
|  |         if (isNaN(nbre_pdc)) { | ||||||
|  |           nbre_pdc = 1; | ||||||
|  |           count_nb_pdc_fuckedup++ | ||||||
|  |         } else { | ||||||
|  |           count_nb_pdc_ok++ | ||||||
|  |         } | ||||||
|  |         count_capacity += nbre_pdc; | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |     // Créer l'objet de statistiques
 | ||||||
|  |     stats = { | ||||||
|  |       ...stats, | ||||||
|  |       countStationsOpenData: nombreFeatures, | ||||||
|  |       countPointsDeChargeOpenData: count_capacity, | ||||||
|  |       count_nb_pdc_fuckedupOpenData: count_nb_pdc_fuckedup, | ||||||
|  |       count_nb_pdc_okOpenData: count_nb_pdc_ok, | ||||||
|  |       count_id_station_itinerance_duplicate: count_id_station_itinerance_duplicate, | ||||||
|  |       count_unique_id_station_itinerance: unique_id_station_itinerance.length, | ||||||
|  |       dateGeneration: new Date().toISOString() | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   } catch (erreur) { | ||||||
|  |     console.error('Erreur lors du traitement du fichier js/opendata.json:', erreur.message); | ||||||
|  |     process.exit(1); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Nouvelle fonction pour télécharger les données Overpass et les sauvegarder
 | ||||||
|  | async function downloadOverpassData(outputPath) { | ||||||
|  |   const overpassUrl = 'https://overpass-api.de/api/interpreter'; | ||||||
|  |   const query = ` | ||||||
|  |     [out:json][timeout:200]; | ||||||
|  |     area["ISO3166-1"="FR"][admin_level=2]->.france; | ||||||
|  |     ( | ||||||
|  |       nwr(area.france)["amenity"="charging_station"]; | ||||||
|  |     ); | ||||||
|  |     out center; | ||||||
|  |   `;
 | ||||||
|  |   const response = await fetch(overpassUrl, { | ||||||
|  |     method: 'POST', | ||||||
|  |     headers: { | ||||||
|  |       'Content-Type': 'application/x-www-form-urlencoded' | ||||||
|  |     }, | ||||||
|  |     body: 'data=' + encodeURIComponent(query) | ||||||
|  |   }); | ||||||
|  |   if (!response.ok) { | ||||||
|  |     throw new Error(`Erreur lors de la requête Overpass : ${response.status} ${response.statusText}`); | ||||||
|  |   } | ||||||
|  |   const data = await response.json(); | ||||||
|  |   fs.writeFileSync(outputPath, JSON.stringify(data, null, 2)); | ||||||
|  |   console.log('Fichier Overpass téléchargé avec succès'); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | async function getAvereData() { | ||||||
|  |   const url = 'https://www.avere-france.org/publications/?publication-type%5B%5D=barometres-recharge'; | ||||||
|  | 
 | ||||||
|  |   try { | ||||||
|  |     const response = await fetch(url); | ||||||
|  |     if (!response.ok) { | ||||||
|  |       throw new Error(`Erreur lors du téléchargement de la page AVERE : ${response.status} ${response.statusText}`); | ||||||
|  |     } | ||||||
|  |     const html = await response.text(); | ||||||
|  |     const $ = cheerio.load(html); | ||||||
|  | 
 | ||||||
|  |     // Chercher le texte du type "[Baromètre] 163 656 points de recharge ouverts au public fin mars 2025"
 | ||||||
|  |     let count = 0; | ||||||
|  |     $('.posts-list .card .card-title').each((i, el) => { | ||||||
|  |       const text = $(el).text(); | ||||||
|  |       const match = text.match(/(\d[\d\s]+) points de recharge/); | ||||||
|  |       if (match) { | ||||||
|  |         // On prend le premier nombre trouvé (le plus récent)
 | ||||||
|  |         count = parseInt(match[1].replace(/\s/g, ''), 10); | ||||||
|  |         return false; // break
 | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     stats = { | ||||||
|  |       ...stats, | ||||||
|  |       countStationsAVERE: count | ||||||
|  |     }; | ||||||
|  |     console.log(`Nombre de points de recharge AVERE : ${count}`); | ||||||
|  |   } catch (error) { | ||||||
|  |     console.error('Erreur lors de la récupération des données AVERE:', error.message); | ||||||
|  |     stats = { | ||||||
|  |       ...stats, | ||||||
|  |       countStationsAVERE: 0 | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Nouvelle fonction pour compter les features dans un fichier OSM téléchargé
 | ||||||
|  | function compterFeaturesInOpenStreetMapFromFile() { | ||||||
|  |   const inputPath = 'js/openstreetmap.json'; | ||||||
|  |   try { | ||||||
|  |     const donnees = fs.readFileSync(inputPath, 'utf8'); | ||||||
|  |     const data = JSON.parse(donnees); | ||||||
|  |     const nombreFeaturesInOSM = data.elements.length; | ||||||
|  | 
 | ||||||
|  |     let countPointsDeChargeOSM = 0; | ||||||
|  |     data.elements.forEach(element => { | ||||||
|  |       if (element.type === 'node' && element.tags.capacity) { | ||||||
|  |         let capa = parseInt(element.tags.capacity) | ||||||
|  |         if (isNaN(capa)) { | ||||||
|  |           capa = 1; | ||||||
|  |         } | ||||||
|  |         countPointsDeChargeOSM += capa; | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     stats = { | ||||||
|  |       ...stats, | ||||||
|  |       countStationsOSM: nombreFeaturesInOSM, | ||||||
|  |       countPointsDeChargeOSM: countPointsDeChargeOSM | ||||||
|  |     }; | ||||||
|  |   } catch (erreur) { | ||||||
|  |     console.error('Erreur lors du traitement du fichier OSM:', erreur.message); | ||||||
|  |     process.exit(1); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function saveStatsFile() { | ||||||
|  |   // Écrire les stats dans un fichier JSON
 | ||||||
|  |   fs.writeFileSync('js/stats.json', JSON.stringify(stats, null, 2)); | ||||||
|  | 
 | ||||||
|  |   console.log(`Statistiques générées avec succès:`, stats); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | (async () => { | ||||||
|  |   const shouldDownload = process.argv.includes('--wget'); | ||||||
|  | 
 | ||||||
|  |   if (shouldDownload) { | ||||||
|  |     console.log('on télécharge l\'open data etalab') | ||||||
|  |     await downloadOpenDataEtalab('https://www.data.gouv.fr/fr/datasets/r/7eee8f09-5d1b-4f48-a304-5e99e8da1e26', 'js/opendata.json'); | ||||||
|  |     await downloadOverpassData('js/openstreetmap.json'); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   compterFeaturesInOpenStreetMapFromFile(); | ||||||
|  |   await compterFeaturesInOpenDataEtalab(); | ||||||
|  |   await getAvereData(); | ||||||
|  | 
 | ||||||
|  |   saveStatsFile(); | ||||||
|  | })(); | ||||||
							
								
								
									
										391
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										391
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							|  | @ -8,6 +8,8 @@ | ||||||
|       "name": "libre-charge-map", |       "name": "libre-charge-map", | ||||||
|       "version": "0.5.0", |       "version": "0.5.0", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|  |         "cheerio": "^1.0.0", | ||||||
|  |         "node-fetch": "^3.3.2", | ||||||
|         "sass": "^1.87.0" |         "sass": "^1.87.0" | ||||||
|       }, |       }, | ||||||
|       "devDependencies": { |       "devDependencies": { | ||||||
|  | @ -3178,6 +3180,11 @@ | ||||||
|       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", |       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/boolbase": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", | ||||||
|  |       "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" | ||||||
|  |     }, | ||||||
|     "node_modules/boxen": { |     "node_modules/boxen": { | ||||||
|       "version": "7.0.0", |       "version": "7.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", |       "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", | ||||||
|  | @ -3477,6 +3484,76 @@ | ||||||
|         "node": ">=10" |         "node": ">=10" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/cheerio": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", | ||||||
|  |       "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "cheerio-select": "^2.1.0", | ||||||
|  |         "dom-serializer": "^2.0.0", | ||||||
|  |         "domhandler": "^5.0.3", | ||||||
|  |         "domutils": "^3.1.0", | ||||||
|  |         "encoding-sniffer": "^0.2.0", | ||||||
|  |         "htmlparser2": "^9.1.0", | ||||||
|  |         "parse5": "^7.1.2", | ||||||
|  |         "parse5-htmlparser2-tree-adapter": "^7.0.0", | ||||||
|  |         "parse5-parser-stream": "^7.1.2", | ||||||
|  |         "undici": "^6.19.5", | ||||||
|  |         "whatwg-mimetype": "^4.0.0" | ||||||
|  |       }, | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=18.17" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/cheeriojs/cheerio?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/cheerio-select": { | ||||||
|  |       "version": "2.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", | ||||||
|  |       "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "boolbase": "^1.0.0", | ||||||
|  |         "css-select": "^5.1.0", | ||||||
|  |         "css-what": "^6.1.0", | ||||||
|  |         "domelementtype": "^2.3.0", | ||||||
|  |         "domhandler": "^5.0.3", | ||||||
|  |         "domutils": "^3.0.1" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/sponsors/fb55" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/cheerio/node_modules/entities": { | ||||||
|  |       "version": "6.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", | ||||||
|  |       "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=0.12" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/fb55/entities?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/cheerio/node_modules/parse5": { | ||||||
|  |       "version": "7.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", | ||||||
|  |       "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "entities": "^6.0.0" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/inikulin/parse5?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/cheerio/node_modules/whatwg-mimetype": { | ||||||
|  |       "version": "4.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", | ||||||
|  |       "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=18" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/chokidar": { |     "node_modules/chokidar": { | ||||||
|       "version": "4.0.3", |       "version": "4.0.3", | ||||||
|       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", |       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", | ||||||
|  | @ -3703,6 +3780,32 @@ | ||||||
|         "node": ">= 8" |         "node": ">= 8" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/css-select": { | ||||||
|  |       "version": "5.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", | ||||||
|  |       "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "boolbase": "^1.0.0", | ||||||
|  |         "css-what": "^6.1.0", | ||||||
|  |         "domhandler": "^5.0.2", | ||||||
|  |         "domutils": "^3.0.1", | ||||||
|  |         "nth-check": "^2.0.1" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/sponsors/fb55" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/css-what": { | ||||||
|  |       "version": "6.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", | ||||||
|  |       "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">= 6" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/sponsors/fb55" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/css.escape": { |     "node_modules/css.escape": { | ||||||
|       "version": "1.5.1", |       "version": "1.5.1", | ||||||
|       "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", |       "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", | ||||||
|  | @ -3733,6 +3836,14 @@ | ||||||
|       "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", |       "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/data-uri-to-buffer": { | ||||||
|  |       "version": "4.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", | ||||||
|  |       "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">= 12" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/data-urls": { |     "node_modules/data-urls": { | ||||||
|       "version": "2.0.0", |       "version": "2.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", | ||||||
|  | @ -3849,6 +3960,30 @@ | ||||||
|       "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", |       "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/dom-serializer": { | ||||||
|  |       "version": "2.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", | ||||||
|  |       "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "domelementtype": "^2.3.0", | ||||||
|  |         "domhandler": "^5.0.2", | ||||||
|  |         "entities": "^4.2.0" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/domelementtype": { | ||||||
|  |       "version": "2.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", | ||||||
|  |       "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", | ||||||
|  |       "funding": [ | ||||||
|  |         { | ||||||
|  |           "type": "github", | ||||||
|  |           "url": "https://github.com/sponsors/fb55" | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     }, | ||||||
|     "node_modules/domexception": { |     "node_modules/domexception": { | ||||||
|       "version": "2.0.1", |       "version": "2.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", |       "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", | ||||||
|  | @ -3871,6 +4006,33 @@ | ||||||
|         "node": ">=8" |         "node": ">=8" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/domhandler": { | ||||||
|  |       "version": "5.0.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", | ||||||
|  |       "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "domelementtype": "^2.3.0" | ||||||
|  |       }, | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">= 4" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/fb55/domhandler?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/domutils": { | ||||||
|  |       "version": "3.2.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", | ||||||
|  |       "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "dom-serializer": "^2.0.0", | ||||||
|  |         "domelementtype": "^2.3.0", | ||||||
|  |         "domhandler": "^5.0.3" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/fb55/domutils?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/eastasianwidth": { |     "node_modules/eastasianwidth": { | ||||||
|       "version": "0.2.0", |       "version": "0.2.0", | ||||||
|       "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", |       "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", | ||||||
|  | @ -3901,6 +4063,51 @@ | ||||||
|       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", |       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/encoding-sniffer": { | ||||||
|  |       "version": "0.2.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", | ||||||
|  |       "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "iconv-lite": "^0.6.3", | ||||||
|  |         "whatwg-encoding": "^3.1.1" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/encoding-sniffer/node_modules/iconv-lite": { | ||||||
|  |       "version": "0.6.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", | ||||||
|  |       "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "safer-buffer": ">= 2.1.2 < 3.0.0" | ||||||
|  |       }, | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=0.10.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/encoding-sniffer/node_modules/whatwg-encoding": { | ||||||
|  |       "version": "3.1.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", | ||||||
|  |       "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "iconv-lite": "0.6.3" | ||||||
|  |       }, | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=18" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/entities": { | ||||||
|  |       "version": "4.5.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", | ||||||
|  |       "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=0.12" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/fb55/entities?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/error-ex": { |     "node_modules/error-ex": { | ||||||
|       "version": "1.3.2", |       "version": "1.3.2", | ||||||
|       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", |       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", | ||||||
|  | @ -4092,6 +4299,28 @@ | ||||||
|         "bser": "2.1.1" |         "bser": "2.1.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/fetch-blob": { | ||||||
|  |       "version": "3.2.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", | ||||||
|  |       "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", | ||||||
|  |       "funding": [ | ||||||
|  |         { | ||||||
|  |           "type": "github", | ||||||
|  |           "url": "https://github.com/sponsors/jimmywarting" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "type": "paypal", | ||||||
|  |           "url": "https://paypal.me/jimmywarting" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "dependencies": { | ||||||
|  |         "node-domexception": "^1.0.0", | ||||||
|  |         "web-streams-polyfill": "^3.0.3" | ||||||
|  |       }, | ||||||
|  |       "engines": { | ||||||
|  |         "node": "^12.20 || >= 14.13" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/fill-range": { |     "node_modules/fill-range": { | ||||||
|       "version": "7.1.1", |       "version": "7.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", |       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", | ||||||
|  | @ -4131,6 +4360,17 @@ | ||||||
|         "node": ">= 6" |         "node": ">= 6" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/formdata-polyfill": { | ||||||
|  |       "version": "4.0.10", | ||||||
|  |       "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", | ||||||
|  |       "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "fetch-blob": "^3.1.2" | ||||||
|  |       }, | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=12.20.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/fs.realpath": { |     "node_modules/fs.realpath": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", | ||||||
|  | @ -4274,6 +4514,24 @@ | ||||||
|       "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", |       "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/htmlparser2": { | ||||||
|  |       "version": "9.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", | ||||||
|  |       "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", | ||||||
|  |       "funding": [ | ||||||
|  |         "https://github.com/fb55/htmlparser2?sponsor=1", | ||||||
|  |         { | ||||||
|  |           "type": "github", | ||||||
|  |           "url": "https://github.com/sponsors/fb55" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "dependencies": { | ||||||
|  |         "domelementtype": "^2.3.0", | ||||||
|  |         "domhandler": "^5.0.3", | ||||||
|  |         "domutils": "^3.1.0", | ||||||
|  |         "entities": "^4.5.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/http-proxy-agent": { |     "node_modules/http-proxy-agent": { | ||||||
|       "version": "4.0.1", |       "version": "4.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", |       "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", | ||||||
|  | @ -6318,6 +6576,42 @@ | ||||||
|       "license": "MIT", |       "license": "MIT", | ||||||
|       "optional": true |       "optional": true | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/node-domexception": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", | ||||||
|  |       "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", | ||||||
|  |       "deprecated": "Use your platform's native DOMException instead", | ||||||
|  |       "funding": [ | ||||||
|  |         { | ||||||
|  |           "type": "github", | ||||||
|  |           "url": "https://github.com/sponsors/jimmywarting" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "type": "github", | ||||||
|  |           "url": "https://paypal.me/jimmywarting" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=10.5.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/node-fetch": { | ||||||
|  |       "version": "3.3.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", | ||||||
|  |       "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "data-uri-to-buffer": "^4.0.0", | ||||||
|  |         "fetch-blob": "^3.1.4", | ||||||
|  |         "formdata-polyfill": "^4.0.10" | ||||||
|  |       }, | ||||||
|  |       "engines": { | ||||||
|  |         "node": "^12.20.0 || ^14.13.1 || >=16.0.0" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "type": "opencollective", | ||||||
|  |         "url": "https://opencollective.com/node-fetch" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/node-int64": { |     "node_modules/node-int64": { | ||||||
|       "version": "0.4.0", |       "version": "0.4.0", | ||||||
|       "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", |       "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", | ||||||
|  | @ -6351,6 +6645,17 @@ | ||||||
|         "node": ">=8" |         "node": ">=8" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/nth-check": { | ||||||
|  |       "version": "2.1.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", | ||||||
|  |       "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "boolbase": "^1.0.0" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/fb55/nth-check?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/nwsapi": { |     "node_modules/nwsapi": { | ||||||
|       "version": "2.2.16", |       "version": "2.2.16", | ||||||
|       "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", |       "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", | ||||||
|  | @ -6450,6 +6755,73 @@ | ||||||
|       "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", |       "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/parse5-htmlparser2-tree-adapter": { | ||||||
|  |       "version": "7.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", | ||||||
|  |       "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "domhandler": "^5.0.3", | ||||||
|  |         "parse5": "^7.0.0" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/inikulin/parse5?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/parse5-htmlparser2-tree-adapter/node_modules/entities": { | ||||||
|  |       "version": "6.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", | ||||||
|  |       "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=0.12" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/fb55/entities?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { | ||||||
|  |       "version": "7.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", | ||||||
|  |       "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "entities": "^6.0.0" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/inikulin/parse5?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/parse5-parser-stream": { | ||||||
|  |       "version": "7.1.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", | ||||||
|  |       "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "parse5": "^7.0.0" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/inikulin/parse5?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/parse5-parser-stream/node_modules/entities": { | ||||||
|  |       "version": "6.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", | ||||||
|  |       "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=0.12" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/fb55/entities?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/parse5-parser-stream/node_modules/parse5": { | ||||||
|  |       "version": "7.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", | ||||||
|  |       "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "entities": "^6.0.0" | ||||||
|  |       }, | ||||||
|  |       "funding": { | ||||||
|  |         "url": "https://github.com/inikulin/parse5?sponsor=1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/path-exists": { |     "node_modules/path-exists": { | ||||||
|       "version": "4.0.0", |       "version": "4.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", |       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", | ||||||
|  | @ -6877,8 +7249,7 @@ | ||||||
|     "node_modules/safer-buffer": { |     "node_modules/safer-buffer": { | ||||||
|       "version": "2.1.2", |       "version": "2.1.2", | ||||||
|       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", |       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | ||||||
|       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", |       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "node_modules/sass": { |     "node_modules/sass": { | ||||||
|       "version": "1.87.0", |       "version": "1.87.0", | ||||||
|  | @ -7344,6 +7715,14 @@ | ||||||
|         "node": ">=14.17" |         "node": ">=14.17" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/undici": { | ||||||
|  |       "version": "6.21.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz", | ||||||
|  |       "integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=18.17" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/undici-types": { |     "node_modules/undici-types": { | ||||||
|       "version": "6.20.0", |       "version": "6.20.0", | ||||||
|       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", |       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", | ||||||
|  | @ -7527,6 +7906,14 @@ | ||||||
|         "makeerror": "1.0.12" |         "makeerror": "1.0.12" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/web-streams-polyfill": { | ||||||
|  |       "version": "3.3.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", | ||||||
|  |       "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">= 8" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/webidl-conversions": { |     "node_modules/webidl-conversions": { | ||||||
|       "version": "6.1.0", |       "version": "6.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", |       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
|   "version": "0.5.0", |   "version": "0.5.0", | ||||||
|   "description": "Un visualisateur coloré de stations de recharge pour véhicules électriques selon les données OSM.", |   "description": "Un visualisateur coloré de stations de recharge pour véhicules électriques selon les données OSM.", | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|  |   "type": "module", | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@babel/preset-env": "^7.14.4", |     "@babel/preset-env": "^7.14.4", | ||||||
|     "@testing-library/dom": "^7.31.0", |     "@testing-library/dom": "^7.31.0", | ||||||
|  | @ -36,6 +37,8 @@ | ||||||
|     ] |     ] | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|  |     "cheerio": "^1.0.0", | ||||||
|  |     "node-fetch": "^3.3.2", | ||||||
|     "sass": "^1.87.0" |     "sass": "^1.87.0" | ||||||
|   } |   } | ||||||
| } | } | ||||||
							
								
								
									
										83
									
								
								stats.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								stats.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang='fr' id="statsPage"> | ||||||
|  | 
 | ||||||
|  | <head> | ||||||
|  |   <title>LibreChargeMap - OSM Bliss</title> | ||||||
|  |   <meta charset='utf-8'> | ||||||
|  |   <meta property="og:type" content="website"> | ||||||
|  |   <meta property="og:title" content="LibreChargeMap - OSM Bliss"> | ||||||
|  |   <meta property="og:description" content="Statistiques de Libre Charge Map"> | ||||||
|  |   <meta property="og:image" content="https://libre-charge-map.cipherbliss.com/libre-charge-map_overview.jpg"> | ||||||
|  |   <meta property="og:image:width" content="3436"> | ||||||
|  |   <meta property="og:image:height" content="1086"> | ||||||
|  | 
 | ||||||
|  |   <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no'> | ||||||
|  |   <link rel='stylesheet' href='styles/style.css' /> | ||||||
|  |   <meta name="viewport" | ||||||
|  |     content="width=device-width, initial-scale=1.0, user-scalable=yes, minimum-scale=0.25, maximum-scale=5.0"> | ||||||
|  |   <link rel="shortcut icon" href="img/french.png"> | ||||||
|  |   <script src="js/lcm_stats.js"></script> | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class=""> | ||||||
|  |   <h1> | ||||||
|  |     <img class="icon-img" src="img/prise-de-courant.png" alt="prise"> Statistiques de | ||||||
|  |     <a href="/">Libre Charge Map</a> 📊 | ||||||
|  |   </h1> | ||||||
|  |   <p> | ||||||
|  |     Mise à jour le <span id="dateGeneration"></span> | ||||||
|  |   </p> | ||||||
|  | 
 | ||||||
|  |   <div> | ||||||
|  |     <div class="stats-item"> | ||||||
|  |       <h2>Nombre de bornes de recharges en France</h2> | ||||||
|  |       <h3>Dans OSM:</h3> | ||||||
|  |       <div class="pair"> | ||||||
|  | 
 | ||||||
|  |         <p> | ||||||
|  |           Stations de recharge | ||||||
|  |         </p> | ||||||
|  |         <p id="countStationsOSM" class="text-right counter"></p> | ||||||
|  |       </div> | ||||||
|  |       <div class="pair"> | ||||||
|  |         <p>Points de charge</p> | ||||||
|  | 
 | ||||||
|  |         <p id="countPointsDeChargeOSM" class="text-right counter"></p> | ||||||
|  |       </div> | ||||||
|  |       <h3>Dans L'OpenData de DataGouv:</h3> | ||||||
|  |       <div class="pair"> | ||||||
|  | 
 | ||||||
|  |         <p> | ||||||
|  |           Stations de recharge | ||||||
|  |         </p> | ||||||
|  |         <p id="countStationsOpenData" class="text-right counter"></p> | ||||||
|  |       </div> | ||||||
|  |       <div class="pair"> | ||||||
|  |         <p>Points de recharge</p> | ||||||
|  | 
 | ||||||
|  |         <p id="countPointsDeChargeOpenData" class="text-right counter"></p> | ||||||
|  |       </div> | ||||||
|  |       <h3>Sur le site de l'AVERE:</h3> | ||||||
|  |       <p>Nombre de stations</p> | ||||||
|  |       <p id="countStationsAVERE" class="text-right counter"></p> | ||||||
|  |       <p>Nombre de points de charge</p> | ||||||
|  |       <p id="countPointsDeChargeAVERE" class="text-right counter"></p> | ||||||
|  | 
 | ||||||
|  |     </div> | ||||||
|  |     <div class="stats-item"> | ||||||
|  |       <h2>Répartition par type de borne</h2> | ||||||
|  |       <img src="img/avere_repartition_puissance_nominale.png" | ||||||
|  |         alt="répartition des bornes de recharge par puissance nominale"> | ||||||
|  |       <p id="repartitionTypeBorne"></p> | ||||||
|  |     </div> | ||||||
|  |     <div class="stats-item"></div> | ||||||
|  |     <h2>Issues Osmose</h2> | ||||||
|  |     <p id="issuesOsmose"> | ||||||
|  |       <img src="https://osmose.openstreetmap.fr/en/issues/graph.png?item=8410 | ||||||
|  |       " alt="graphique issues charging station"> | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   </div> | ||||||
|  | </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
							
								
								
									
										23
									
								
								styles/_stats.scss
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								styles/_stats.scss
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | ||||||
|  | #statsPage { | ||||||
|  |   background: #fff; | ||||||
|  |   padding: 2rem; | ||||||
|  |   margin: 0 auto; | ||||||
|  | 
 | ||||||
|  |   body { | ||||||
|  |     background: #fff; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .counter { | ||||||
|  |     font-size: 2rem; | ||||||
|  |     font-weight: bold; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .text-right { | ||||||
|  |     text-align: right; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .pair { | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -708,7 +708,7 @@ header { | ||||||
| @include meta.load-css('_overrides.scss'); | @include meta.load-css('_overrides.scss'); | ||||||
| @include meta.load-css('_responsive.scss'); | @include meta.load-css('_responsive.scss'); | ||||||
| @include meta.load-css('_animations.scss'); | @include meta.load-css('_animations.scss'); | ||||||
| 
 | @include meta.load-css('_stats.scss'); | ||||||
| .recharge-time { | .recharge-time { | ||||||
|   margin: 0.5rem 0; |   margin: 0.5rem 0; | ||||||
|   font-size: 0.85rem; |   font-size: 0.85rem; | ||||||
|  |  | ||||||
|  | @ -1121,6 +1121,25 @@ overrides leaflet | ||||||
|     transform: rotate(-45deg) translateY(-5px); |     transform: rotate(-45deg) translateY(-5px); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | #statsPage { | ||||||
|  |   background: #fff; | ||||||
|  |   padding: 2rem; | ||||||
|  |   margin: 0 auto; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #statsPage body { | ||||||
|  |   background: #fff; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .counter { | ||||||
|  |   font-size: 2rem; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .text-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .recharge-time { | .recharge-time { | ||||||
|   margin: 0.5rem 0; |   margin: 0.5rem 0; | ||||||
|   font-size: 0.85rem; |   font-size: 0.85rem; | ||||||
|  |  | ||||||
|  | @ -1 +1 @@ | ||||||
| {"version":3,"sourceRoot":"","sources":["main.scss","_osmose.scss","_recherche.scss","_filters.scss","_mobile.scss","_overrides.scss","_animations.scss"],"names":[],"mappings":";AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAKA;EACE;;AAGE;EACE;EACA;;AAKJ;EACE;;;AAMN;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;;;AAKA;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;AAGA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EAOE;;AANA;EACE;EACA;EACA;;;AAMJ;EACE;;;AAGF;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;AAAA;AAAA;AAIA;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAIA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAIA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EACE;;;AAIJ;EACE;;AAUE;EACE;EACA;EACA;;AAcJ;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;;;AC1rBN;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAEA;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;EACA;;;AAEA;EACE;;;AAIJ;EACE;EACA;;;AC3DJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;;;AAEA;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;;;AASJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpEF;EACE;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAcF;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAEA;AAAA;EACE;EACA,OApDS;EAqDT;;;AAGF;AAAA;EAvBA;EACA;EAwBE;EACA;EArBF;EAuBE;EACA;;;AAEA;AAAA;EACE,YA/DK;;;AAmET;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EA/CF;;;AAkDE;AAAA;EACE;;;AAIJ;AAAA;EACE,YA/FY;EAgGZ,cAhGY;EAiGZ;;;AAEA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AAAA;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA,OAxHS;EAsCX;;;AAsFA;AAAA;EACE;;;AAIA;AAAA;EACE,YAhIK;EAiIL,cAhIW;EAiIX;;;AAGF;AAAA;EACE,OArIW;EAsIX;;;AAMN;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AC9JJ;AACA;EACE;IACE;IACA;;EAKA;AAAA;IAEE;IACA;;EAIJ;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;AACE;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;;EAGF;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;;EAIF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;;EAIF;IAEE;;;ACrGJ;AAAA;AAAA;AAKA;EACE;;;AAIA;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAEA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;AAEE;EACE;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAMN;EAyBE;EACA;EACA;EACA;;;AA1BE;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACnGN;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;;AAIJ;EAEE;IAEE;;EAGF;IACE;;;ANiqBJ;EACE;EACA","file":"style.css"} | {"version":3,"sourceRoot":"","sources":["main.scss","_osmose.scss","_recherche.scss","_filters.scss","_mobile.scss","_overrides.scss","_animations.scss","_stats.scss"],"names":[],"mappings":";AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAKA;EACE;;AAGE;EACE;EACA;;AAKJ;EACE;;;AAMN;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;;;AAKA;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;AAGA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EAOE;;AANA;EACE;EACA;EACA;;;AAMJ;EACE;;;AAGF;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;AAAA;AAAA;AAIA;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAIA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAIA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EACE;;;AAIJ;EACE;;AAUE;EACE;EACA;EACA;;AAcJ;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;;;AC1rBN;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAEA;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;EACA;;;AAEA;EACE;;;AAIJ;EACE;EACA;;;AC3DJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;;;AAEA;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;;;AASJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpEF;EACE;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAcF;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAEA;AAAA;EACE;EACA,OApDS;EAqDT;;;AAGF;AAAA;EAvBA;EACA;EAwBE;EACA;EArBF;EAuBE;EACA;;;AAEA;AAAA;EACE,YA/DK;;;AAmET;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EA/CF;;;AAkDE;AAAA;EACE;;;AAIJ;AAAA;EACE,YA/FY;EAgGZ,cAhGY;EAiGZ;;;AAEA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AAAA;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA,OAxHS;EAsCX;;;AAsFA;AAAA;EACE;;;AAIA;AAAA;EACE,YAhIK;EAiIL,cAhIW;EAiIX;;;AAGF;AAAA;EACE,OArIW;EAsIX;;;AAMN;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AC9JJ;AACA;EACE;IACE;IACA;;EAKA;AAAA;IAEE;IACA;;EAIJ;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;AACE;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;;EAGF;AAAA;IAEE;IACA;IACA;IACA;IACA;IACA;;EAIF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;;EAIF;IAEE;;;ACrGJ;AAAA;AAAA;AAKA;EACE;;;AAIA;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAEA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;AAEE;EACE;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAMN;EAyBE;EACA;EACA;EACA;;;AA1BE;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACnGN;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;;AAIJ;EAEE;IAEE;;EAGF;IACE;;;ACtCJ;EACE;EACA;EACA;;;AAEA;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;APurBF;EACE;EACA","file":"style.css"} | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Tykayn
						Tykayn