diff --git a/.github/workflows/updateData.yml b/.github/workflows/updateData.yml index 83308728..0f6e0537 100644 --- a/.github/workflows/updateData.yml +++ b/.github/workflows/updateData.yml @@ -19,25 +19,11 @@ jobs: - name: npm install run: npm install - - name: npm run collect - run: npm run collect - - - name: npm run lintData - run: npm run lintData - - - name: push changes to remote + - name: collect and lint run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - - git pull - git add -A + npm run collect + npm run lintData - if [ -z "$(git status --porcelain)" ]; then - echo "No changes" - else - git commit -m "updated the data" - git push - fi - - + - uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: updated the data \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 28fc766f..39921744 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,7 @@ "nocheck", "Nominatim", "popperjs", - "sonarjs" + "sonarjs", + "youtubedl" ] } \ No newline at end of file diff --git a/README.md b/README.md index e0e73bab..4ff9e237 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,21 @@ [![Netlify Status](https://api.netlify.com/api/v1/badges/723c662b-f86b-4d02-be3f-540b94d79b22/deploy-status)](https://app.netlify.com/sites/cartocams/deploys) -This repo contains the webapp available at [https://cartocams.com/](https://cartocams.com/) +## Introduction + +This project is a map of webcams around the world. It is based on the OpenStreetMap data. The map is available at [https://cartocams.com/](https://cartocams.com/). + +It queries OpenStreetMap via the [Overpass API](https://wiki.openstreetmap.org/wiki/Overpass_API) filters the data and extends the data with an address from the [Nominatim API](https://wiki.openstreetmap.org/wiki/Nominatim). The map is then rendered using the [Leaflet](https://leafletjs.com/) library. + +## Installation + +run `npm install` to install all the dependencies. + +## Usage + +run `npm run collect` to collect the data from OpenStreetMap and save it to the `data` folder. + +run `npm run app` to start the development server. ## Data sources @@ -30,3 +44,4 @@ This project also uses the "Icons8 flat integrated webcam" icon from the Icons8 - Make icons smaller on higher zoom levels - Make Creative Commons license visible on the sites - Look at all the package licenses +- use the cluster plugin diff --git a/data/404Index.json b/data/404Index.json index 5a305093..9d3018c6 100644 --- a/data/404Index.json +++ b/data/404Index.json @@ -8,7 +8,7 @@ "bad": false }, "398135228": { - "last": 1680758414999, + "last": 1680791115444, "bad": true }, "706873678": { @@ -16,7 +16,7 @@ "bad": false }, "717671054": { - "last": 1680758416390, + "last": 1680791115891, "bad": true }, "725412899": { @@ -24,7 +24,7 @@ "bad": true }, "726896906": { - "last": 1680758416989, + "last": 1680791116065, "bad": true }, "727611593": { @@ -44,11 +44,11 @@ "bad": false }, "804172043": { - "last": 1680758417651, + "last": 1680791116251, "bad": true }, "854773220": { - "last": 1680758418089, + "last": 1680791116316, "bad": true }, "939278140": { @@ -56,11 +56,11 @@ "bad": false }, "1075096416": { - "last": 1680758419641, + "last": 1680791116457, "bad": true }, "1137548957": { - "last": 1680758424644, + "last": 1680791121483, "bad": true }, "1192580167": { @@ -88,11 +88,11 @@ "bad": false }, "1255592060": { - "last": 1680758425167, + "last": 1680791121623, "bad": true }, "1260548535": { - "last": 1680758425580, + "last": 1680791121764, "bad": true }, "1263210279": { @@ -100,7 +100,7 @@ "bad": false }, "1274357557": { - "last": 1680758425885, + "last": 1680791121863, "bad": true }, "1307518033": { @@ -108,7 +108,7 @@ "bad": true }, "1313439324": { - "last": 1680758426528, + "last": 1680791122000, "bad": true }, "1329541658": { @@ -140,7 +140,7 @@ "bad": false }, "1417673795": { - "last": 1680758427138, + "last": 1680791122109, "bad": true }, "1417673799": { @@ -148,23 +148,23 @@ "bad": false }, "1417673808": { - "last": 1680758427360, + "last": 1680791122224, "bad": true }, "1417673815": { - "last": 1675228867881, - "bad": false + "last": 1680791114962, + "bad": true }, "1417673817": { "last": 1672550498714, "bad": false }, "1417673848": { - "last": 1680758427880, + "last": 1680791122366, "bad": true }, "1417673853": { - "last": 1680758428614, + "last": 1680791122493, "bad": true }, "1417673860": { @@ -176,11 +176,11 @@ "bad": false }, "1417673902": { - "last": 1680758429040, + "last": 1680791122609, "bad": true }, "1417673914": { - "last": 1680758429350, + "last": 1680791122708, "bad": true }, "1417673922": { @@ -188,7 +188,7 @@ "bad": false }, "1417673932": { - "last": 1680758429556, + "last": 1680791122816, "bad": true }, "1417673943": { @@ -204,7 +204,7 @@ "bad": false }, "1417673994": { - "last": 1680758429784, + "last": 1680791122930, "bad": true }, "1417674027": { @@ -216,7 +216,7 @@ "bad": true }, "1417674037": { - "last": 1680758430211, + "last": 1680791123047, "bad": true }, "1417674058": { @@ -228,7 +228,7 @@ "bad": false }, "1417674068": { - "last": 1680758430428, + "last": 1680791123201, "bad": true }, "1417674084": { @@ -252,19 +252,19 @@ "bad": false }, "1417674118": { - "last": 1680758430646, + "last": 1680791123338, "bad": true }, "1417674135": { - "last": 1680758430866, + "last": 1680791123437, "bad": true }, "1417674141": { - "last": 1680758431087, + "last": 1680791123562, "bad": true }, "1417674160": { - "last": 1680758431710, + "last": 1680791123675, "bad": true }, "1417674170": { @@ -276,7 +276,7 @@ "bad": false }, "1417674199": { - "last": 1680758432327, + "last": 1680791123801, "bad": true }, "1417674200": { @@ -284,7 +284,7 @@ "bad": false }, "1417674209": { - "last": 1680758432545, + "last": 1680791123915, "bad": true }, "1417674219": { @@ -296,7 +296,7 @@ "bad": false }, "1417674237": { - "last": 1671600711768, + "last": 1680790780120, "bad": false }, "1417674240": { @@ -304,7 +304,7 @@ "bad": false }, "1417674250": { - "last": 1680758432767, + "last": 1680791124015, "bad": true }, "1417674257": { @@ -316,11 +316,11 @@ "bad": false }, "1417674268": { - "last": 1680758433495, + "last": 1680791124115, "bad": true }, "1417674272": { - "last": 1680758434024, + "last": 1680791124245, "bad": true }, "1417674286": { @@ -332,11 +332,11 @@ "bad": false }, "1417674298": { - "last": 1680758434243, + "last": 1680791124343, "bad": true }, "1417674302": { - "last": 1680758434464, + "last": 1680791124458, "bad": true }, "1417674313": { @@ -360,11 +360,11 @@ "bad": true }, "1417674385": { - "last": 1680758434985, + "last": 1680791124565, "bad": true }, "1417674403": { - "last": 1680758435317, + "last": 1680791124680, "bad": true }, "1417674434": { @@ -408,11 +408,11 @@ "bad": false }, "1417674608": { - "last": 1680758435745, + "last": 1680791124784, "bad": true }, "1417674622": { - "last": 1680758436172, + "last": 1680791124891, "bad": true }, "1417674641": { @@ -420,7 +420,7 @@ "bad": false }, "1417674646": { - "last": 1680758436390, + "last": 1680791124988, "bad": true }, "1417674660": { @@ -428,11 +428,11 @@ "bad": false }, "1417674680": { - "last": 1675661147101, - "bad": false + "last": 1680791108551, + "bad": true }, "1417674716": { - "last": 1680758436594, + "last": 1680791125120, "bad": true }, "1417674736": { @@ -444,7 +444,7 @@ "bad": false }, "1417674769": { - "last": 1680758436903, + "last": 1680791125207, "bad": true }, "1417674793": { @@ -464,7 +464,7 @@ "bad": false }, "1417674867": { - "last": 1680758437105, + "last": 1680791125308, "bad": true }, "1417674884": { @@ -472,7 +472,7 @@ "bad": false }, "1417674901": { - "last": 1680758437310, + "last": 1680791125413, "bad": true }, "1417674902": { @@ -480,7 +480,7 @@ "bad": false }, "1417674919": { - "last": 1680758437746, + "last": 1680791125540, "bad": true }, "1417674935": { @@ -488,7 +488,7 @@ "bad": false }, "1417674938": { - "last": 1680758437974, + "last": 1680791125654, "bad": true }, "1417674951": { @@ -508,7 +508,7 @@ "bad": false }, "1417675016": { - "last": 1680758438193, + "last": 1680791125765, "bad": true }, "1417675029": { @@ -524,15 +524,15 @@ "bad": false }, "1555330706": { - "last": 1680758438768, + "last": 1680791126015, "bad": true }, "1561505155": { - "last": 1680758439490, + "last": 1680791126663, "bad": true }, "1568010458": { - "last": 1680758440296, + "last": 1680791126914, "bad": true }, "1576206249": { @@ -540,7 +540,7 @@ "bad": false }, "1671401684": { - "last": 1680758440533, + "last": 1680791127360, "bad": true }, "1732692642": { @@ -584,7 +584,7 @@ "bad": false }, "2049634050": { - "last": 1680758445534, + "last": 1680791132361, "bad": true }, "2073338256": { @@ -644,7 +644,7 @@ "bad": false }, "2524198465": { - "last": 1680758446138, + "last": 1680791132512, "bad": true }, "2565944581": { @@ -692,7 +692,7 @@ "bad": false }, "2734664143": { - "last": 1680758449813, + "last": 1680791134729, "bad": true }, "2734664147": { @@ -704,7 +704,7 @@ "bad": false }, "2775821858": { - "last": 1680758450356, + "last": 1680791134851, "bad": true }, "2849542607": { @@ -724,7 +724,7 @@ "bad": false }, "2975527542": { - "last": 1680758450603, + "last": 1680791134918, "bad": true }, "2997595827": { @@ -752,7 +752,7 @@ "bad": false }, "3006987966": { - "last": 1680758451209, + "last": 1680791135029, "bad": true }, "3027086591": { @@ -768,31 +768,31 @@ "bad": false }, "3040162893": { - "last": 1680758451337, + "last": 1680791135092, "bad": true }, "3040189212": { - "last": 1680758451364, + "last": 1680791135160, "bad": true }, "3040190734": { - "last": 1680758451454, + "last": 1680791135224, "bad": true }, "3040190762": { - "last": 1680758451476, + "last": 1680791135284, "bad": true }, "3040190763": { - "last": 1680758451557, + "last": 1680791135340, "bad": true }, "3040192157": { - "last": 1680758451574, + "last": 1680791135398, "bad": true }, "3040192833": { - "last": 1680758451589, + "last": 1680791135460, "bad": true }, "3112419440": { @@ -816,11 +816,11 @@ "bad": false }, "3220967846": { - "last": 1680758453050, + "last": 1680791136045, "bad": true }, "3276405297": { - "last": 1680758458053, + "last": 1680791141047, "bad": true }, "3330370785": { @@ -828,7 +828,7 @@ "bad": false }, "3355636050": { - "last": 1680758458236, + "last": 1680791141161, "bad": true }, "3390786108": { @@ -840,23 +840,23 @@ "bad": false }, "3545585671": { - "last": 1680758458438, + "last": 1680791141221, "bad": true }, "3591926876": { - "last": 1680758458792, + "last": 1680791141315, "bad": true }, "3669084289": { - "last": 1680758459462, + "last": 1680791141511, "bad": true }, "3681369638": { - "last": 1680758464464, + "last": 1680791146512, "bad": true }, "3748567926": { - "last": 1680758465123, + "last": 1680791146675, "bad": true }, "3757015340": { @@ -868,7 +868,7 @@ "bad": false }, "3884829008": { - "last": 1680758465707, + "last": 1680791146784, "bad": true }, "4063301614": { @@ -880,7 +880,7 @@ "bad": false }, "4138696799": { - "last": 1680758466759, + "last": 1680791147103, "bad": true }, "4173455040": { @@ -903,6 +903,10 @@ "last": 1679376221014, "bad": false }, + "4265426909": { + "last": 1680790778162, + "bad": false + }, "4265426910": { "last": 1674365372588, "bad": false @@ -912,7 +916,7 @@ "bad": false }, "4270041451": { - "last": 1680758467159, + "last": 1680791147234, "bad": true }, "4286338793": { @@ -960,7 +964,7 @@ "bad": false }, "9122649100": { - "last": 1680758467253, + "last": 1680791147886, "bad": true }, "7556486040": { @@ -1004,7 +1008,7 @@ "bad": false }, "7770261590": { - "last": 1680758468732, + "last": 1680791148184, "bad": true }, "9439192776": { @@ -1092,7 +1096,7 @@ "bad": false }, "8816003343": { - "last": 1680758469755, + "last": 1680791150613, "bad": true }, "8662560764": { @@ -1104,7 +1108,7 @@ "bad": false }, "9085058911": { - "last": 1680758469857, + "last": 1680791151436, "bad": true }, "7814027623": { @@ -1128,7 +1132,7 @@ "bad": false }, "8420124050": { - "last": 1680758470305, + "last": 1680791151787, "bad": true }, "4666307569": { @@ -1160,11 +1164,11 @@ "bad": false }, "9987303935": { - "last": 1676352082066, + "last": 1680790779030, "bad": false }, "7796350888": { - "last": 1680758475307, + "last": 1680791155063, "bad": true }, "7653419226": { @@ -1264,7 +1268,7 @@ "bad": false }, "5311914525": { - "last": 1680758477502, + "last": 1680791155578, "bad": true }, "5860282219": { @@ -1348,7 +1352,7 @@ "bad": false }, "9007029376": { - "last": 1680758482506, + "last": 1680791160579, "bad": true }, "9865914210": { @@ -1376,7 +1380,7 @@ "bad": false }, "5060491951": { - "last": 1680758483365, + "last": 1680791160884, "bad": true }, "6582628226": { @@ -1408,7 +1412,7 @@ "bad": false }, "6226005407": { - "last": 1680758483982, + "last": 1680791161202, "bad": true }, "8483018757": { @@ -1468,7 +1472,7 @@ "bad": false }, "9122649093": { - "last": 1680758484012, + "last": 1680791161637, "bad": true }, "8894152394": { @@ -1532,7 +1536,7 @@ "bad": false }, "5767431005": { - "last": 1680758484499, + "last": 1680791161739, "bad": true }, "8662770167": { @@ -1576,7 +1580,7 @@ "bad": false }, "9122649086": { - "last": 1680758484528, + "last": 1680791162171, "bad": true }, "8585250050": { @@ -1636,7 +1640,7 @@ "bad": false }, "5325195212": { - "last": 1680758489530, + "last": 1680791167172, "bad": true }, "9865880934": { @@ -1724,7 +1728,7 @@ "bad": false }, "4391518116": { - "last": 1672810011519, + "last": 1680791114821, "bad": false }, "7178712797": { @@ -1732,7 +1736,7 @@ "bad": false }, "5323908180": { - "last": 1680758494536, + "last": 1680791172177, "bad": true }, "8899323587": { @@ -1816,7 +1820,7 @@ "bad": false }, "5333135678": { - "last": 1680758494924, + "last": 1680791172757, "bad": true }, "4605776707": { @@ -1832,11 +1836,11 @@ "bad": false }, "8852438049": { - "last": 1680758495492, + "last": 1680791172974, "bad": true }, "8435129226": { - "last": 1680758495561, + "last": 1680791173057, "bad": true }, "8627025132": { @@ -1908,7 +1912,7 @@ "bad": false }, "5987473539": { - "last": 1677843865277, + "last": 1680790773726, "bad": false }, "9122649102": { @@ -1988,7 +1992,7 @@ "bad": false }, "10009269583": { - "last": 1673500906376, + "last": 1680791109130, "bad": false }, "9483719470": { @@ -2012,11 +2016,11 @@ "bad": false }, "6142785399": { - "last": 1680758496127, + "last": 1680791173221, "bad": true }, "5675462766": { - "last": 1680758497584, + "last": 1680791173957, "bad": true }, "9593980489": { @@ -2204,11 +2208,11 @@ "bad": false }, "5498518237": { - "last": 1680758498177, + "last": 1680791174305, "bad": true }, "6324393339": { - "last": 1680758498959, + "last": 1680791174544, "bad": true }, "5297604078": { @@ -2252,7 +2256,7 @@ "bad": false }, "4881110978": { - "last": 1680758503014, + "last": 1680791179544, "bad": true }, "8852438050": { @@ -2288,7 +2292,7 @@ "bad": false }, "8420047082": { - "last": 1680758504100, + "last": 1680791180003, "bad": true }, "7556486032": { @@ -2304,7 +2308,7 @@ "bad": false }, "7770261588": { - "last": 1680758505029, + "last": 1680791180303, "bad": true }, "8262433529": { @@ -2364,7 +2368,7 @@ "bad": false }, "9431072747": { - "last": 1680758510031, + "last": 1680791185304, "bad": true }, "9689660417": { @@ -2372,7 +2376,7 @@ "bad": false }, "8872509985": { - "last": 1675142455136, + "last": 1680791108860, "bad": false }, "6139754934": { @@ -2396,11 +2400,11 @@ "bad": false }, "8430329290": { - "last": 1680758510033, + "last": 1680791185305, "bad": true }, "10170514179": { - "last": 1680758510148, + "last": 1680791186344, "bad": true }, "9122649101": { @@ -2468,7 +2472,7 @@ "bad": false }, "8075724354": { - "last": 1680758510149, + "last": 1680791186345, "bad": true }, "4347148910": { @@ -2496,11 +2500,11 @@ "bad": false }, "8899065886": { - "last": 1680758510785, + "last": 1680791186450, "bad": true }, "6429601977": { - "last": 1680758511285, + "last": 1680791186809, "bad": true }, "6139754936": { @@ -2548,7 +2552,7 @@ "bad": false }, "4631801645": { - "last": 1680758511965, + "last": 1680791187120, "bad": true }, "4391518117": { @@ -2596,7 +2600,7 @@ "bad": false }, "9012056057": { - "last": 1680758512812, + "last": 1680791187982, "bad": true }, "4605768817": { @@ -2608,7 +2612,7 @@ "bad": false }, "7968824195": { - "last": 1680758513956, + "last": 1680791188427, "bad": true }, "9107925182": { @@ -2616,7 +2620,7 @@ "bad": false }, "6766523913": { - "last": 1680758514171, + "last": 1680791188518, "bad": true }, "6533530061": { @@ -2640,7 +2644,7 @@ "bad": false }, "5498518236": { - "last": 1680758514661, + "last": 1680791188733, "bad": true }, "6918685920": { @@ -2688,7 +2692,7 @@ "bad": false }, "5311914529": { - "last": 1680758515981, + "last": 1680791189249, "bad": true }, "8899328064": { @@ -2716,7 +2720,7 @@ "bad": false }, "9122940942": { - "last": 1680758516023, + "last": 1680791189995, "bad": true }, "9122940900": { @@ -2768,7 +2772,7 @@ "bad": false }, "5382757156": { - "last": 1680758518809, + "last": 1680791192479, "bad": true }, "9974896536": { @@ -2856,7 +2860,7 @@ "bad": false }, "5723424934": { - "last": 1680758523813, + "last": 1680791197480, "bad": true }, "9920903896": { @@ -2864,7 +2868,7 @@ "bad": false }, "9893149837": { - "last": 1680758524143, + "last": 1680791197668, "bad": true }, "9540392062": { @@ -2896,7 +2900,7 @@ "bad": false }, "6594322617": { - "last": 1680758525712, + "last": 1680791199957, "bad": true }, "8899113537": { @@ -2928,8 +2932,8 @@ "bad": false }, "9122940915": { - "last": 1677129780582, - "bad": false + "last": 1680791200796, + "bad": true }, "10543158985": { "last": 1677129787428, @@ -2940,11 +2944,11 @@ "bad": false }, "8649563980": { - "last": 1680758530714, + "last": 1680791205797, "bad": true }, "9403373023": { - "last": 1680758530715, + "last": 1680791205798, "bad": true }, "4985552418": { @@ -2968,7 +2972,7 @@ "bad": false }, "9122940721": { - "last": 1680758530824, + "last": 1680791206517, "bad": true }, "10061987863": { @@ -3012,7 +3016,7 @@ "bad": false }, "8852438045": { - "last": 1680758531057, + "last": 1680791206647, "bad": true }, "9207503693": { @@ -3040,7 +3044,7 @@ "bad": false }, "5733020878": { - "last": 1678080308925, + "last": 1680791113770, "bad": false }, "4345802101": { @@ -3060,7 +3064,7 @@ "bad": false }, "9122940918": { - "last": 1680758531117, + "last": 1680791207176, "bad": true }, "5794549233": { @@ -3068,7 +3072,7 @@ "bad": false }, "7770271109": { - "last": 1680758533057, + "last": 1680791207426, "bad": true }, "8898987914": { @@ -3080,7 +3084,7 @@ "bad": false }, "8075724353": { - "last": 1680758533059, + "last": 1680791207428, "bad": true }, "7817868313": { @@ -3116,7 +3120,7 @@ "bad": false }, "5715315698": { - "last": 1680758535303, + "last": 1680791208625, "bad": true }, "7178712794": { @@ -3124,7 +3128,7 @@ "bad": false }, "8907126490": { - "last": 1680758535507, + "last": 1680791208728, "bad": true }, "9866618290": { @@ -3160,7 +3164,7 @@ "bad": false }, "9522236048": { - "last": 1680758540509, + "last": 1680791213729, "bad": true }, "9455857471": { @@ -3188,7 +3192,7 @@ "bad": false }, "9122649088": { - "last": 1680758540542, + "last": 1680791214263, "bad": true }, "5209118194": { @@ -3204,7 +3208,7 @@ "bad": false }, "4881110979": { - "last": 1680758544737, + "last": 1680791219167, "bad": true }, "7601160451": { @@ -3236,7 +3240,7 @@ "bad": false }, "4784279285": { - "last": 1680758546986, + "last": 1680791221745, "bad": true }, "4606247083": { @@ -3256,7 +3260,7 @@ "bad": false }, "9122940725": { - "last": 1680758547017, + "last": 1680791222612, "bad": true }, "4587959499": { @@ -3264,7 +3268,7 @@ "bad": false }, "8729244903": { - "last": 1680758547547, + "last": 1680791222899, "bad": true }, "6575795185": { @@ -3276,7 +3280,7 @@ "bad": false }, "8816003342": { - "last": 1680758548675, + "last": 1680791224501, "bad": true }, "9463588475": { @@ -3288,7 +3292,7 @@ "bad": false }, "7796286784": { - "last": 1680758553677, + "last": 1680791227752, "bad": true }, "10674911318": { @@ -3340,7 +3344,7 @@ "bad": false }, "8954410567": { - "last": 1680758555218, + "last": 1680791228389, "bad": true }, "9626280494": { @@ -3356,11 +3360,11 @@ "bad": false }, "8907157825": { - "last": 1680758555421, + "last": 1680791228489, "bad": true }, "5767420280": { - "last": 1680758555912, + "last": 1680791228583, "bad": true }, "5311914531": { @@ -3404,7 +3408,7 @@ "bad": false }, "9403373019": { - "last": 1680758555915, + "last": 1680791228584, "bad": true }, "10650765442": { @@ -3448,7 +3452,7 @@ "bad": false }, "8430329291": { - "last": 1680758555917, + "last": 1680791228585, "bad": true }, "5677343237": { @@ -3488,7 +3492,7 @@ "bad": false }, "4881110977": { - "last": 1680758560192, + "last": 1680791232039, "bad": true }, "10687141562": { @@ -3516,11 +3520,43 @@ "bad": false }, "7796273174": { - "last": 1680758412357, + "last": 1680791236712, "bad": true }, "8075724355": { - "last": 1680758412362, + "last": 1680791236714, + "bad": true + }, + "8374939691": { + "last": 1680790770447, + "bad": false + }, + "9902871586": { + "last": 1680790770738, + "bad": false + }, + "8944783352": { + "last": 1680790771085, + "bad": false + }, + "9123010832": { + "last": 1680791237161, "bad": true + }, + "8561245596": { + "last": 1680790774250, + "bad": false + }, + "8626957687": { + "last": 1680791113012, + "bad": false + }, + "8904962276": { + "last": 1680791113379, + "bad": false + }, + "9403361711": { + "last": 1680791114037, + "bad": false } } \ No newline at end of file diff --git a/data/webcams.json b/data/webcams.json index 3f1a6d4e..c6fdff3e 100644 --- a/data/webcams.json +++ b/data/webcams.json @@ -1376,7 +1376,10 @@ "url": "http://webkamera.vegvesen.no/kamera?id=124371" }, "operator": "Statens vegvesen", - "url": "http://webkamera.vegvesen.no/kamera?id=124371" + "url": "http://webkamera.vegvesen.no/kamera?id=124371", + "lint": { + "unavailable": true + } }, { "lat": 63.342321, @@ -4590,7 +4593,10 @@ "url": "http://webkamera.vegvesen.no/kamera?id=110611" }, "operator": "Statens vegvesen", - "url": "http://webkamera.vegvesen.no/kamera?id=110611" + "url": "http://webkamera.vegvesen.no/kamera?id=110611", + "lint": { + "unavailable": true + } }, { "lat": 60.6382254, @@ -28148,7 +28154,10 @@ "surveillance:type": "camera", "surveillance:zone": "traffic" }, - "url": "https://chart.maryland.gov/video/video.php?feed=1b00d699004a008e0057fa36c4235c0a" + "url": "https://chart.maryland.gov/video/video.php?feed=1b00d699004a008e0057fa36c4235c0a", + "lint": { + "unavailable": true + } }, { "lat": 39.701569, @@ -28702,7 +28711,10 @@ "surveillance:type": "camera", "surveillance:zone": "traffic" }, - "url": "https://chart.maryland.gov/video/video.php?feed=d0017d5801230075004d823633235daa" + "url": "https://chart.maryland.gov/video/video.php?feed=d0017d5801230075004d823633235daa", + "lint": { + "unavailable": true + } }, { "lat": 39.1588071, diff --git a/package-lock.json b/package-lock.json index d5872f78..14801127 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@popperjs/core": "^2.11.6", - "axios": "^1.3.0", + "axios": "^1.3.4", "bootstrap": "^5.2.3", "i18n-iso-countries": "^7.5.0", "leaflet": "^1.9.3", @@ -19,35 +19,35 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-hooks-global-state": "2.1.0", - "react-leaflet": "^4.2.0", - "react-router": "^6.8.0", - "react-router-dom": "^6.8.0", - "reactstrap": "^9.1.5", - "youtube-dl-exec": "^2.1.11" + "react-leaflet": "^4.2.1", + "react-router": "^6.8.2", + "react-router-dom": "^6.8.2", + "reactstrap": "^9.1.6", + "youtube-dl-exec": "^2.4.0" }, "devDependencies": { "@parcel/transformer-sass": "^2.8.3", - "@types/leaflet": "^1.9.0", + "@types/leaflet": "^1.9.1", "@types/lodash.chunk": "^4.2.7", "@types/lodash.set": "^4.3.7", - "@types/node": "^18.11.18", - "@types/react": "^18.0.27", - "@types/react-dom": "^18.0.10", + "@types/node": "^18.14.6", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", "@types/react-leaflet": "^2.8.2", "@types/react-router-dom": "^5.3.3", - "@typescript-eslint/eslint-plugin": "^5.50.0", - "@typescript-eslint/parser": "^5.50.0", - "eslint": "^8.33.0", + "@typescript-eslint/eslint-plugin": "^5.54.1", + "@typescript-eslint/parser": "^5.54.1", + "eslint": "^8.35.0", "eslint-config-airbnb": "^19.0.4", "eslint-import-resolver-typescript": "^3.5.3", "eslint-nibble": "^8.1.0", - "eslint-plugin-compat": "^4.0.2", + "eslint-plugin-compat": "^4.1.2", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-sonarjs": "^0.18.0", - "eslint-plugin-unicorn": "^45.0.2", + "eslint-plugin-unicorn": "^46.0.0", "parcel": "^2.8.3", "process": "^0.11.10", "ts-node": "^10.9.1", @@ -209,9 +209,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", + "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -231,6 +231,15 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/js": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", + "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -500,9 +509,9 @@ ] }, "node_modules/@mdn/browser-compat-data": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz", - "integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==", + "version": "5.2.39", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.2.39.tgz", + "integrity": "sha512-m8EJuQlHl6GeBkryBfJCl9gOOw/5dCqQVzRWj6hBbDG3NTaJyypa5784lae/uklYildVwiqbP0iGl3LUEhECPg==", "dev": true }, "node_modules/@mischnic/json-sourcemap": { @@ -1746,9 +1755,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.1.tgz", - "integrity": "sha512-+eun1Wtf72RNRSqgU7qM2AMX/oHp+dnx7BHk1qhK5ZHzdHTUU4LA1mGG1vT+jMc8sbhG3orvsfOmryjzx2PzQw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.3.tgz", + "integrity": "sha512-YRHie1yQEj0kqqCTCJEfHqYSSNlZQ696QJG+MMiW4mxSl9I0ojz/eRhJS4fs88Z5i6D1SmoF9d3K99/QOhI8/w==", "engines": { "node": ">=14" } @@ -1820,9 +1829,9 @@ "dev": true }, "node_modules/@types/leaflet": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.0.tgz", - "integrity": "sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.1.tgz", + "integrity": "sha512-lYawM3I3lLO6rmBASaqdGgY6zUL4YHr3H79/axx7FNYyPXuj0P1DZHbkNo8Itbv0i7Y9EryLWtDXXROMygXhRA==", "dev": true, "dependencies": { "@types/geojson": "*" @@ -1853,9 +1862,9 @@ } }, "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "version": "18.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", + "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -1877,9 +1886,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.0.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", - "integrity": "sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==", + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -1888,9 +1897,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.0.10", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", - "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", "dev": true, "dependencies": { "@types/react": "*" @@ -1940,14 +1949,14 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz", - "integrity": "sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz", + "integrity": "sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/type-utils": "5.50.0", - "@typescript-eslint/utils": "5.50.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/type-utils": "5.54.1", + "@typescript-eslint/utils": "5.54.1", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -1989,14 +1998,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz", - "integrity": "sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.1.tgz", + "integrity": "sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/typescript-estree": "5.50.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/typescript-estree": "5.54.1", "debug": "^4.3.4" }, "engines": { @@ -2016,13 +2025,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz", - "integrity": "sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz", + "integrity": "sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/visitor-keys": "5.50.0" + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2033,13 +2042,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz", - "integrity": "sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz", + "integrity": "sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.50.0", - "@typescript-eslint/utils": "5.50.0", + "@typescript-eslint/typescript-estree": "5.54.1", + "@typescript-eslint/utils": "5.54.1", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -2060,9 +2069,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz", - "integrity": "sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz", + "integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2073,13 +2082,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz", - "integrity": "sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz", + "integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/visitor-keys": "5.50.0", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2115,16 +2124,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz", - "integrity": "sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.1.tgz", + "integrity": "sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/typescript-estree": "5.50.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/typescript-estree": "5.54.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -2156,12 +2165,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz", - "integrity": "sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz", + "integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/types": "5.54.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2434,9 +2443,9 @@ } }, "node_modules/axios": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.0.tgz", - "integrity": "sha512-oCye5nHhTypzkdLIvF9SaHfr8UAquqCn1KY3j8vsrjeol8yohAdGxIpRPbF1bOLsx33HOAatdfMX1yzsj2cHwg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -2487,6 +2496,51 @@ } ] }, + "node_modules/bin-version": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz", + "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==", + "dependencies": { + "execa": "^5.0.0", + "find-versions": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bin-version-check": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.0.0.tgz", + "integrity": "sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==", + "dependencies": { + "bin-version": "^6.0.0", + "semver": "^7.3.5", + "semver-truncate": "^2.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bin-version-check/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2646,9 +2700,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001450", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz", - "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==", + "version": "1.0.30001462", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001462.tgz", + "integrity": "sha512-PDd20WuOBPiasZ7KbFnmQRyuLE7cFXW2PVd7dmALzbkUXEP46upAuCDm9eY9vho8fgNMGmbAX92QBZHzcnWIqw==", "dev": true, "funding": [ { @@ -2864,17 +2918,6 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "node_modules/core-js": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", - "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -3414,12 +3457,13 @@ } }, "node_modules/eslint": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz", - "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==", + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", + "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.4.1", + "@eslint/eslintrc": "^2.0.0", + "@eslint/js": "8.35.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -3433,7 +3477,7 @@ "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", "espree": "^9.4.0", - "esquery": "^1.4.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", @@ -3768,31 +3812,30 @@ } }, "node_modules/eslint-plugin-compat": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz", - "integrity": "sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.1.2.tgz", + "integrity": "sha512-DNrQgDi5L4mAL4FdFboKBlSRg6MWfd75eA7K91lMjtP5ryN+O11qT2FDn7Z6zqy6sZ4sJawUR5V75qzB6l0CBg==", "dev": true, "dependencies": { - "@mdn/browser-compat-data": "^4.1.5", + "@mdn/browser-compat-data": "^5.2.34", "ast-metadata-inferer": "^0.7.0", - "browserslist": "^4.16.8", - "caniuse-lite": "^1.0.30001304", - "core-js": "^3.16.2", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001451", "find-up": "^5.0.0", "lodash.memoize": "4.1.2", - "semver": "7.3.5" + "semver": "7.3.8" }, "engines": { - "node": ">=9.x" + "node": ">=16.x" }, "peerDependencies": { "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/eslint-plugin-compat/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3994,9 +4037,9 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "45.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz", - "integrity": "sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==", + "version": "46.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-46.0.0.tgz", + "integrity": "sha512-j07WkC+PFZwk8J33LYp6JMoHa1lXc1u6R45pbSAipjpfpb7KIGr17VE2D685zCxR5VL4cjrl65kTJflziQWMDA==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.19.1", @@ -4207,9 +4250,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -4409,6 +4452,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "dependencies": { + "semver-regex": "^4.0.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -5856,7 +5913,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6674,9 +6730,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-leaflet": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.0.tgz", - "integrity": "sha512-9d8T7hzYrQA5GLe3vn0qtRLJzQKgjr080NKa45yArGwuSl1nH/6aK9gp7DeYdktpdO1vKGSUTGW5AsUS064X0A==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz", + "integrity": "sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==", "dependencies": { "@react-leaflet/core": "^2.1.0" }, @@ -6710,11 +6766,11 @@ } }, "node_modules/react-router": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.0.tgz", - "integrity": "sha512-760bk7y3QwabduExtudhWbd88IBbuD1YfwzpuDUAlJUJ7laIIcqhMvdhSVh1Fur1PE8cGl84L0dxhR3/gvHF7A==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.2.tgz", + "integrity": "sha512-lF7S0UmXI5Pd8bmHvMdPKI4u4S5McxmHnzJhrYi9ZQ6wE+DA8JN5BzVC5EEBuduWWDaiJ8u6YhVOCmThBli+rw==", "dependencies": { - "@remix-run/router": "1.3.1" + "@remix-run/router": "1.3.3" }, "engines": { "node": ">=14" @@ -6724,12 +6780,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.0.tgz", - "integrity": "sha512-hQouduSTywGJndE86CXJ2h7YEy4HYC6C/uh19etM+79FfQ6cFFFHnHyDlzO4Pq0eBUI96E4qVE5yUjA00yJZGQ==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.2.tgz", + "integrity": "sha512-N/oAF1Shd7g4tWy+75IIufCGsHBqT74tnzHQhbiUTYILYF0Blk65cg+HPZqwC+6SqEyx033nKqU7by38v3lBZg==", "dependencies": { - "@remix-run/router": "1.3.1", - "react-router": "6.8.0" + "@remix-run/router": "1.3.3", + "react-router": "6.8.2" }, "engines": { "node": ">=14" @@ -6755,9 +6811,9 @@ } }, "node_modules/reactstrap": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-9.1.5.tgz", - "integrity": "sha512-w4pnRW/z0piLElgSdypp07mSJVOQIN1tE3DQdsfmpvvUHEzYsjfJHSJkIL26I38m/ACCNXfNnyFSsq0c6U/snQ==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-9.1.6.tgz", + "integrity": "sha512-79h/L/pvMJIz198VULMpLbEyXFeArFTLAnEtk5anppJhAnZnfyM1pNuQWZNGXy6cUlgsaEy2gBziAw4tockOnw==", "dependencies": { "@babel/runtime": "^7.12.5", "@popperjs/core": "^2.6.0", @@ -7151,6 +7207,36 @@ "semver": "bin/semver" } }, + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-truncate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-2.0.0.tgz", + "integrity": "sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-truncate/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7987,8 +8073,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", @@ -8021,11 +8106,12 @@ } }, "node_modules/youtube-dl-exec": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/youtube-dl-exec/-/youtube-dl-exec-2.1.11.tgz", - "integrity": "sha512-gHCu0SoXnhFzoX4P/KB2Fvr+DYuR3vpPclbfgoToRBZlR2T3WKom+O+Ae9RdiI7WnxK1LH+Q+2bW0Wm8dQTrbA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/youtube-dl-exec/-/youtube-dl-exec-2.4.0.tgz", + "integrity": "sha512-uHQzfhljFPyXZElSJ+YhKhWD11YdKDK+QTuRCp/22sOD8g3RE++uGti/kHFPV62DupEAWNq8XGoVaYyqsrEAyw==", "hasInstallScript": true, "dependencies": { + "bin-version-check": "~5.0.0", "dargs": "~7.0.0", "execa": "~5.1.0", "is-unix": "~2.0.1", @@ -8183,9 +8269,9 @@ } }, "@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", + "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -8199,6 +8285,12 @@ "strip-json-comments": "^3.1.1" } }, + "@eslint/js": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", + "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", + "dev": true + }, "@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -8397,9 +8489,9 @@ "optional": true }, "@mdn/browser-compat-data": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz", - "integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==", + "version": "5.2.39", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.2.39.tgz", + "integrity": "sha512-m8EJuQlHl6GeBkryBfJCl9gOOw/5dCqQVzRWj6hBbDG3NTaJyypa5784lae/uklYildVwiqbP0iGl3LUEhECPg==", "dev": true }, "@mischnic/json-sourcemap": { @@ -9181,9 +9273,9 @@ "requires": {} }, "@remix-run/router": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.1.tgz", - "integrity": "sha512-+eun1Wtf72RNRSqgU7qM2AMX/oHp+dnx7BHk1qhK5ZHzdHTUU4LA1mGG1vT+jMc8sbhG3orvsfOmryjzx2PzQw==" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.3.tgz", + "integrity": "sha512-YRHie1yQEj0kqqCTCJEfHqYSSNlZQ696QJG+MMiW4mxSl9I0ojz/eRhJS4fs88Z5i6D1SmoF9d3K99/QOhI8/w==" }, "@swc/helpers": { "version": "0.4.14", @@ -9249,9 +9341,9 @@ "dev": true }, "@types/leaflet": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.0.tgz", - "integrity": "sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.1.tgz", + "integrity": "sha512-lYawM3I3lLO6rmBASaqdGgY6zUL4YHr3H79/axx7FNYyPXuj0P1DZHbkNo8Itbv0i7Y9EryLWtDXXROMygXhRA==", "dev": true, "requires": { "@types/geojson": "*" @@ -9282,9 +9374,9 @@ } }, "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "version": "18.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", + "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", "dev": true }, "@types/normalize-package-data": { @@ -9306,9 +9398,9 @@ "dev": true }, "@types/react": { - "version": "18.0.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", - "integrity": "sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==", + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "dev": true, "requires": { "@types/prop-types": "*", @@ -9317,9 +9409,9 @@ } }, "@types/react-dom": { - "version": "18.0.10", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", - "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", "dev": true, "requires": { "@types/react": "*" @@ -9369,14 +9461,14 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz", - "integrity": "sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz", + "integrity": "sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/type-utils": "5.50.0", - "@typescript-eslint/utils": "5.50.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/type-utils": "5.54.1", + "@typescript-eslint/utils": "5.54.1", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -9398,53 +9490,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz", - "integrity": "sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.1.tgz", + "integrity": "sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/typescript-estree": "5.50.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/typescript-estree": "5.54.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz", - "integrity": "sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz", + "integrity": "sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/visitor-keys": "5.50.0" + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1" } }, "@typescript-eslint/type-utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz", - "integrity": "sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz", + "integrity": "sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.50.0", - "@typescript-eslint/utils": "5.50.0", + "@typescript-eslint/typescript-estree": "5.54.1", + "@typescript-eslint/utils": "5.54.1", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz", - "integrity": "sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz", + "integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz", - "integrity": "sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz", + "integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/visitor-keys": "5.50.0", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9464,16 +9556,16 @@ } }, "@typescript-eslint/utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz", - "integrity": "sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.1.tgz", + "integrity": "sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/typescript-estree": "5.50.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/typescript-estree": "5.54.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -9491,12 +9583,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz", - "integrity": "sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz", + "integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.50.0", + "@typescript-eslint/types": "5.54.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -9697,9 +9789,9 @@ "dev": true }, "axios": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.0.tgz", - "integrity": "sha512-oCye5nHhTypzkdLIvF9SaHfr8UAquqCn1KY3j8vsrjeol8yohAdGxIpRPbF1bOLsx33HOAatdfMX1yzsj2cHwg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -9736,6 +9828,35 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, + "bin-version": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz", + "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==", + "requires": { + "execa": "^5.0.0", + "find-versions": "^5.0.0" + } + }, + "bin-version-check": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.0.0.tgz", + "integrity": "sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==", + "requires": { + "bin-version": "^6.0.0", + "semver": "^7.3.5", + "semver-truncate": "^2.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -9835,9 +9956,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001450", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz", - "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==", + "version": "1.0.30001462", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001462.tgz", + "integrity": "sha512-PDd20WuOBPiasZ7KbFnmQRyuLE7cFXW2PVd7dmALzbkUXEP46upAuCDm9eY9vho8fgNMGmbAX92QBZHzcnWIqw==", "dev": true }, "chalk": { @@ -9985,12 +10106,6 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "core-js": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", - "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==", - "dev": true - }, "cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -10400,12 +10515,13 @@ "dev": true }, "eslint": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz", - "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==", + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", + "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.4.1", + "@eslint/eslintrc": "^2.0.0", + "@eslint/js": "8.35.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -10419,7 +10535,7 @@ "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", "espree": "^9.4.0", - "esquery": "^1.4.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", @@ -10678,25 +10794,24 @@ } }, "eslint-plugin-compat": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz", - "integrity": "sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.1.2.tgz", + "integrity": "sha512-DNrQgDi5L4mAL4FdFboKBlSRg6MWfd75eA7K91lMjtP5ryN+O11qT2FDn7Z6zqy6sZ4sJawUR5V75qzB6l0CBg==", "dev": true, "requires": { - "@mdn/browser-compat-data": "^4.1.5", + "@mdn/browser-compat-data": "^5.2.34", "ast-metadata-inferer": "^0.7.0", - "browserslist": "^4.16.8", - "caniuse-lite": "^1.0.30001304", - "core-js": "^3.16.2", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001451", "find-up": "^5.0.0", "lodash.memoize": "4.1.2", - "semver": "7.3.5" + "semver": "7.3.8" }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -10851,9 +10966,9 @@ "requires": {} }, "eslint-plugin-unicorn": { - "version": "45.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz", - "integrity": "sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==", + "version": "46.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-46.0.0.tgz", + "integrity": "sha512-j07WkC+PFZwk8J33LYp6JMoHa1lXc1u6R45pbSAipjpfpb7KIGr17VE2D685zCxR5VL4cjrl65kTJflziQWMDA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.19.1", @@ -10996,9 +11111,9 @@ } }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -11154,6 +11269,14 @@ "path-exists": "^4.0.0" } }, + "find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "requires": { + "semver-regex": "^4.0.5" + } + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -12098,7 +12221,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -12695,9 +12817,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-leaflet": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.0.tgz", - "integrity": "sha512-9d8T7hzYrQA5GLe3vn0qtRLJzQKgjr080NKa45yArGwuSl1nH/6aK9gp7DeYdktpdO1vKGSUTGW5AsUS064X0A==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz", + "integrity": "sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==", "requires": { "@react-leaflet/core": "^2.1.0" } @@ -12718,20 +12840,20 @@ "dev": true }, "react-router": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.0.tgz", - "integrity": "sha512-760bk7y3QwabduExtudhWbd88IBbuD1YfwzpuDUAlJUJ7laIIcqhMvdhSVh1Fur1PE8cGl84L0dxhR3/gvHF7A==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.2.tgz", + "integrity": "sha512-lF7S0UmXI5Pd8bmHvMdPKI4u4S5McxmHnzJhrYi9ZQ6wE+DA8JN5BzVC5EEBuduWWDaiJ8u6YhVOCmThBli+rw==", "requires": { - "@remix-run/router": "1.3.1" + "@remix-run/router": "1.3.3" } }, "react-router-dom": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.0.tgz", - "integrity": "sha512-hQouduSTywGJndE86CXJ2h7YEy4HYC6C/uh19etM+79FfQ6cFFFHnHyDlzO4Pq0eBUI96E4qVE5yUjA00yJZGQ==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.2.tgz", + "integrity": "sha512-N/oAF1Shd7g4tWy+75IIufCGsHBqT74tnzHQhbiUTYILYF0Blk65cg+HPZqwC+6SqEyx033nKqU7by38v3lBZg==", "requires": { - "@remix-run/router": "1.3.1", - "react-router": "6.8.0" + "@remix-run/router": "1.3.3", + "react-router": "6.8.2" } }, "react-transition-group": { @@ -12746,9 +12868,9 @@ } }, "reactstrap": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-9.1.5.tgz", - "integrity": "sha512-w4pnRW/z0piLElgSdypp07mSJVOQIN1tE3DQdsfmpvvUHEzYsjfJHSJkIL26I38m/ACCNXfNnyFSsq0c6U/snQ==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-9.1.6.tgz", + "integrity": "sha512-79h/L/pvMJIz198VULMpLbEyXFeArFTLAnEtk5anppJhAnZnfyM1pNuQWZNGXy6cUlgsaEy2gBziAw4tockOnw==", "requires": { "@babel/runtime": "^7.12.5", "@popperjs/core": "^2.6.0", @@ -13022,6 +13144,26 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==" + }, + "semver-truncate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-2.0.0.tgz", + "integrity": "sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -13637,8 +13779,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", @@ -13659,10 +13800,11 @@ "dev": true }, "youtube-dl-exec": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/youtube-dl-exec/-/youtube-dl-exec-2.1.11.tgz", - "integrity": "sha512-gHCu0SoXnhFzoX4P/KB2Fvr+DYuR3vpPclbfgoToRBZlR2T3WKom+O+Ae9RdiI7WnxK1LH+Q+2bW0Wm8dQTrbA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/youtube-dl-exec/-/youtube-dl-exec-2.4.0.tgz", + "integrity": "sha512-uHQzfhljFPyXZElSJ+YhKhWD11YdKDK+QTuRCp/22sOD8g3RE++uGti/kHFPV62DupEAWNq8XGoVaYyqsrEAyw==", "requires": { + "bin-version-check": "~5.0.0", "dargs": "~7.0.0", "execa": "~5.1.0", "is-unix": "~2.0.1", diff --git a/package.json b/package.json index 09260f6d..c1e8ebe6 100644 --- a/package.json +++ b/package.json @@ -10,30 +10,30 @@ ], "engines": { "node": ">=17.3.1" - }, + }, "devDependencies": { "@parcel/transformer-sass": "^2.8.3", - "@types/leaflet": "^1.9.0", + "@types/leaflet": "^1.9.1", "@types/lodash.chunk": "^4.2.7", "@types/lodash.set": "^4.3.7", - "@types/node": "^18.11.18", - "@types/react": "^18.0.27", - "@types/react-dom": "^18.0.10", + "@types/node": "^18.14.6", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", "@types/react-leaflet": "^2.8.2", "@types/react-router-dom": "^5.3.3", - "@typescript-eslint/eslint-plugin": "^5.50.0", - "@typescript-eslint/parser": "^5.50.0", - "eslint": "^8.33.0", + "@typescript-eslint/eslint-plugin": "^5.54.1", + "@typescript-eslint/parser": "^5.54.1", + "eslint": "^8.35.0", "eslint-config-airbnb": "^19.0.4", "eslint-import-resolver-typescript": "^3.5.3", "eslint-nibble": "^8.1.0", - "eslint-plugin-compat": "^4.0.2", + "eslint-plugin-compat": "^4.1.2", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-sonarjs": "^0.18.0", - "eslint-plugin-unicorn": "^45.0.2", + "eslint-plugin-unicorn": "^46.0.0", "parcel": "^2.8.3", "process": "^0.11.10", "ts-node": "^10.9.1", @@ -41,7 +41,7 @@ }, "dependencies": { "@popperjs/core": "^2.11.6", - "axios": "^1.3.0", + "axios": "^1.3.4", "bootstrap": "^5.2.3", "i18n-iso-countries": "^7.5.0", "leaflet": "^1.9.3", @@ -50,11 +50,11 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-hooks-global-state": "2.1.0", - "react-leaflet": "^4.2.0", - "react-router": "^6.8.0", - "react-router-dom": "^6.8.0", - "reactstrap": "^9.1.5", - "youtube-dl-exec": "^2.1.11" + "react-leaflet": "^4.2.1", + "react-router": "^6.8.2", + "react-router-dom": "^6.8.2", + "reactstrap": "^9.1.6", + "youtube-dl-exec": "^2.4.0" }, "scripts": { "app": "parcel serve src/index.html", diff --git a/utils/lint/index.ts b/utils/lint/index.ts index 535c1f2a..76650088 100644 --- a/utils/lint/index.ts +++ b/utils/lint/index.ts @@ -1,4 +1,5 @@ import lint404 from './lint404'; +import lintClean from './lintClean'; import lintDuplicates from './lintDuplicates'; import lintInvalidUrls from './lintInvalidUrls'; import lintYoutube from './youtubeLint'; @@ -8,4 +9,6 @@ import lintYoutube from './youtubeLint'; await lint404(); lintDuplicates(); lintInvalidUrls(); + + lintClean(); })().catch((error) => { throw error; }); diff --git a/utils/lint/lint404.ts b/utils/lint/lint404.ts index 64e18642..9f7eb3d4 100644 --- a/utils/lint/lint404.ts +++ b/utils/lint/lint404.ts @@ -4,12 +4,12 @@ import fs from 'fs'; import path from 'path'; import axios, { AxiosError } from 'axios'; -import data from '../../data/webcams.json'; import { Webcam } from '../../src/types/webcam'; import getRandom from '../lib/getRandom'; const maxInterval = 30 * 24 * 60 * 60 * 1000; // 30 days in milliseconds const bad404indexPath = path.join(__dirname, '../../data', './404Index.json'); +const webcamPath = path.join(__dirname, '../../data', './webcams.json'); // load the 404 index file function load404Index(): Record { @@ -23,7 +23,7 @@ export default async function lint404() { console.log('linting 404 links'); const fourofourIndex = load404Index(); - const webcams = data as Webcam[]; + const webcams = JSON.parse(fs.readFileSync(webcamPath).toString()) as Webcam[]; // only check urls that need checking const filteredWebcams = webcams.filter((w) => { @@ -75,5 +75,5 @@ export default async function lint404() { } fs.writeFileSync(bad404indexPath, JSON.stringify(fourofourIndex, null, 4)); - fs.writeFileSync(path.join(__dirname, '../../data', './webcams.json'), JSON.stringify(webcams, null, 2)); + fs.writeFileSync(webcamPath, JSON.stringify(webcams, null, 2)); } diff --git a/utils/lint/lintClean.ts b/utils/lint/lintClean.ts new file mode 100644 index 00000000..0a7e8757 --- /dev/null +++ b/utils/lint/lintClean.ts @@ -0,0 +1,23 @@ +/* eslint-disable no-restricted-syntax */ +/* eslint-disable no-console */ + +import fs from 'fs'; +import path from 'path'; +import { Webcam } from '../../src/types/webcam'; + +const webcamPath = path.join(__dirname, '../../data', './webcams.json'); + +// clean out empty lint objects +export default function lintClean() { + console.log('cleaning lint objects'); + + const webcams = JSON.parse(fs.readFileSync(webcamPath).toString()) as Webcam[]; + + for (const webcam of webcams) { + if (webcam.lint && Object.keys(webcam.lint).length === 0) { + delete webcam.lint; + } + } + + fs.writeFileSync(webcamPath, JSON.stringify(webcams, null, 2)); +} diff --git a/utils/lint/lintDuplicates.ts b/utils/lint/lintDuplicates.ts index c3bdcf3a..abc47568 100644 --- a/utils/lint/lintDuplicates.ts +++ b/utils/lint/lintDuplicates.ts @@ -3,13 +3,14 @@ import fs from 'fs'; import path from 'path'; -import data from '../../data/webcams.json'; import { Webcam } from '../../src/types/webcam'; +const webcamPath = path.join(__dirname, '../../data', './webcams.json'); + // finds duplicate links in the webcams.json file export default function lintDuplicates() { console.log('linting duplicates'); - const webcams = data as Webcam[]; + const webcams = JSON.parse(fs.readFileSync(webcamPath).toString()) as Webcam[]; const duplicates = webcams.filter((w) => webcams.some((o) => o.url === w.url && o.osmID !== w.osmID)); @@ -20,5 +21,5 @@ export default function lintDuplicates() { }; } - fs.writeFileSync(path.join(__dirname, '../../data', './webcams.json'), JSON.stringify(webcams, null, 2)); + fs.writeFileSync(webcamPath, JSON.stringify(webcams, null, 2)); } diff --git a/utils/lint/lintInvalidUrls.ts b/utils/lint/lintInvalidUrls.ts index b07db1f9..bfe58d90 100644 --- a/utils/lint/lintInvalidUrls.ts +++ b/utils/lint/lintInvalidUrls.ts @@ -2,12 +2,13 @@ /* eslint-disable no-restricted-syntax */ import fs from 'fs'; import path from 'path'; -import data from '../../data/webcams.json'; import { Webcam } from '../../src/types/webcam'; +const webcamPath = path.join(__dirname, '../../data', './webcams.json'); + // mark links invalid if they are not valid urls export default function lintInvalidUrls() { - const webcams = data as Webcam[]; + const webcams = JSON.parse(fs.readFileSync(webcamPath).toString()) as Webcam[]; const invalidUrls: Webcam[] = []; @@ -33,5 +34,5 @@ export default function lintInvalidUrls() { }; } - fs.writeFileSync(path.resolve(__dirname, '../../data/webcams.json'), JSON.stringify(webcams, null, 2)); + fs.writeFileSync(webcamPath, JSON.stringify(webcams, null, 2)); } diff --git a/utils/lint/youtubeLint.ts b/utils/lint/youtubeLint.ts index f3ac71bc..d708cfa9 100644 --- a/utils/lint/youtubeLint.ts +++ b/utils/lint/youtubeLint.ts @@ -4,9 +4,10 @@ import fs from 'fs'; import path from 'path'; import youtubedl from 'youtube-dl-exec'; -import data from '../../data/webcams.json'; import { Webcam } from '../../src/types/webcam'; +const webcamPath = path.join(__dirname, '../../data', './webcams.json'); + // eslint-disable-next-line compat/compat, no-promise-executor-return const delay = (ms: number) => new Promise((result) => setTimeout(result, ms)); @@ -35,7 +36,7 @@ async function isGoodYTLink(url: string): Promise { } export default async function lintYoutube() { - const webcams = data as Webcam[]; + const webcams = JSON.parse(fs.readFileSync(webcamPath).toString()) as Webcam[]; const youtubeLinksFull: Webcam[] = webcams.filter((a: Webcam) => (a.url.includes('youtube'))); const youtubeLinksShort: Webcam[] = webcams.filter((a: Webcam) => (a.url.includes('youtu.be'))); @@ -44,13 +45,15 @@ export default async function lintYoutube() { for (const youtubeLink of youtubeLinks) { console.log(`linting ${youtubeLink.url}`); - if (!(await isGoodYTLink(youtubeLink.url))) { - youtubeLink.lint = { - ...youtubeLink.lint, - youtube: true - }; - } - await delay(500); + + const isGood = await isGoodYTLink(youtubeLink.url); + + youtubeLink.lint = { + ...youtubeLink.lint, + youtube: isGood ? undefined : true + }; } - fs.writeFileSync(path.join(__dirname, '../../data', './webcams.json'), JSON.stringify(webcams, null, 2)); + await delay(500); + + fs.writeFileSync(webcamPath, JSON.stringify(webcams, null, 2)); }