From 30b3006d67cb6bae35d205087e731b604af8650b Mon Sep 17 00:00:00 2001 From: Maxim Slipenko Date: Wed, 5 Jun 2024 14:56:19 +0300 Subject: [PATCH] first commit --- .gitignore | 25 + data/01_woyag.json | 266 ++++ data/02_global-express.json | 66 + data/03_ozon-wb-dpr.json | 156 +++ data/04_pervijpvzkharcizsk.json | 26 + data/05_pvz-dnr.json | 66 + data/99_sevenDostavka.json | 501 ++++++++ features.js | 34 + geolocation.js | 48 + index.html | 30 + javascript.svg | 1 + main.js | 19 + map.js | 31 + merged-data.json | 761 ++++++++++++ package-lock.json | 2028 +++++++++++++++++++++++++++++++ package.json | 24 + popup.js | 56 + public/favicon.ico | Bin 0 -> 16958 bytes scripts/merge-data.js | 70 ++ scripts/update.js | 89 ++ scripts/utils.js | 23 + style.css | 73 ++ utils.js | 52 + vite.config.js | 13 + 24 files changed, 4458 insertions(+) create mode 100644 .gitignore create mode 100644 data/01_woyag.json create mode 100644 data/02_global-express.json create mode 100644 data/03_ozon-wb-dpr.json create mode 100644 data/04_pervijpvzkharcizsk.json create mode 100644 data/05_pvz-dnr.json create mode 100644 data/99_sevenDostavka.json create mode 100644 features.js create mode 100644 geolocation.js create mode 100644 index.html create mode 100644 javascript.svg create mode 100644 main.js create mode 100644 map.js create mode 100644 merged-data.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 popup.js create mode 100644 public/favicon.ico create mode 100644 scripts/merge-data.js create mode 100644 scripts/update.js create mode 100644 scripts/utils.js create mode 100644 style.css create mode 100644 utils.js create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fc5ae9f --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.vercel diff --git a/data/01_woyag.json b/data/01_woyag.json new file mode 100644 index 0000000..9beca41 --- /dev/null +++ b/data/01_woyag.json @@ -0,0 +1,266 @@ +{ + "name": "WOЯЖ", + "source": "https://login.woyag.ru/map", + "points": [ + { + "coordinates": [ + 37.689712, + 47.948376 + ], + "name": "ПВЗ-03 Ляшенко", + "address": "Донецк-2, ул. Ляшенко 1а", + "link": "https://ozon.ru/point/538097", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.798876, + 47.988652 + ], + "name": "ПВЗ-08 Первомайская", + "address": "Донецк-6, ул. Первомайская", + "link": "https://ozon.ru/point/538186", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.798576, + 48.006233 + ], + "name": "ПВЗ-10 Театральный", + "address": "Донецк-7, ул. Университетская 26", + "link": "https://ozon.ru/point/524639", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.846456, + 48.009223 + ], + "name": "ПВЗ-11 Шевченко", + "address": "Донецк-8, бул. Шевченко 77", + "link": "https://ozon.ru/point/536833", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 38.61702, + 48.026791 + ], + "name": "ПВЗ-13 Торез", + "address": "Торез, ул. Пионерская 1", + "link": "https://ozon.ru/point/536825", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.830801, + 48.000825 + ], + "name": "ПВЗ-14 Ильича", + "address": "Донецк-10, пр. Ильича 27", + "link": "https://ozon.ru/point/538179", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.810254, + 47.9534 + ], + "name": "ПВЗ-15 Боссе", + "address": "Донецк-11, ул. Речная 24б", + "link": "https://ozon.ru/point/536838", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 38.159416, + 48.036587 + ], + "name": "ПВЗ-16 Харцызск", + "address": "Харцызск, ул. Шалимова 14б", + "link": "https://ozon.ru/point/536623", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 38.266878, + 48.007579 + ], + "name": "ПВЗ-17 Зугрэс", + "address": "Зугрэс, ул. Рыночная 1", + "link": "https://ozon.ru/point/536839", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.81148, + 48.008645 + ], + "name": "ПВЗ-21 Крытый", + "address": "Донецк-15, ул. 50-летия СССР 150", + "link": "https://ozon.ru/point/533314", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.914097, + 47.99136 + ], + "name": "ПВЗ-22 Независимости", + "address": "Донецк-16, ул. Независимости 16д", + "link": "https://ozon.ru/point/536826", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.921085, + 47.975167 + ], + "name": "ПВЗ-23 Раздольная", + "address": "Донецк-17, ул. Раздольная 6", + "link": "https://ozon.ru/point/533348", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.793818, + 47.975021 + ], + "name": "ПВЗ-24 Соловки", + "address": "Донецк-18, ул. Пилотная 28", + "link": "https://ozon.ru/point/536830", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.955202, + 48.098354 + ], + "name": "ПВЗ-25 МК3 Черемушки", + "address": "Макеевка-3, квартал Северный 17", + "link": "https://ozon.ru/point/534957", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.854225, + 48.008783 + ], + "name": "ПВЗ-26 Шахтостроителей", + "address": "Донецк-19, бул. Шахтостроителей 20", + "link": "https://ozon.ru/point/534949", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.799925, + 48.022137 + ], + "name": "ПВЗ-27 Детский Мир", + "address": "Донецк-20, ул. Артема 147а", + "link": "https://ozon.ru/point/536823", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.8062, + 47.991033 + ], + "name": "ПВЗ-30 Постышева", + "address": "Донецк-23, ул. Постышева 43", + "link": "https://ozon.ru/point/538183", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.811583, + 47.99713 + ], + "name": "ПВЗ-33 Пирамида", + "address": "Донецк-25, ул. 50-летия СССР 100", + "link": "https://ozon.ru/point/533329", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.778903, + 48.044231 + ], + "name": "ПВЗ-34 Киевский", + "address": "Донецк-26, пр. Киевский 24", + "link": "https://ozon.ru/point/538182", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.753662, + 48.028202 + ], + "name": "ПВЗ-35 Топаз", + "address": "Донецк-27, ул. Куйбышева 169б", + "link": "https://ozon.ru/point/538096", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.965086, + 48.100112 + ], + "name": "ПВЗ-36 МК-4 Даки", + "address": "Макеевка-4, ул. 50 лет Образования СССР 24а", + "link": "https://ozon.ru/point/538184", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.747969, + 48.034874 + ], + "name": "ПВЗ-38 Волна", + "address": "Донецк-29, ул. Куйбышева 217Б", + "link": "https://ozon.ru/point/533332", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.70346, + 47.970189 + ], + "name": "ПВЗ-39 Семашко", + "address": "Донецк-30, ул. Коммунаров 38 (Семашко)", + "link": "https://ozon.ru/point/535056", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.701071, + 47.945246 + ], + "name": "ПВЗ-40 Островского20", + "address": "Донецк-31, ул. Островского 20 (Текстильщик)", + "link": "https://ozon.ru/point/533345", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.807773, + 48.004304 + ], + "name": "ПВЗ-43 Гурова 22", + "address": "Донецк-34, пр. Гурова 22", + "link": "https://ozon.ru/point/538094", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.768318, + 47.95952 + ], + "name": "ПВЗ-44 Кольцова15", + "address": "Донецк-35, ул. Кольцова 15", + "link": "https://ozon.ru/point/538095", + "operationTime": "пн-вс с 9:00 до 17:45" + } + ] +} \ No newline at end of file diff --git a/data/02_global-express.json b/data/02_global-express.json new file mode 100644 index 0000000..124d754 --- /dev/null +++ b/data/02_global-express.json @@ -0,0 +1,66 @@ +{ + "name": "Global Express", + "source": "https://t.me/Mariupol_global_express/1989", + "points": [ + { + "coordinates": [ + 37.775896, + 47.959707 + ], + "name": "Донецк 7 (микр-н Звездный)", + "link": "https://ozon.ru/point/534953", + "address": "Донецк, пр-кт Ленинский 98А", + "operationTime": "пн-вс с 9:00 до 17:00" + }, + { + "coordinates": [ + 37.811995, + 48.011767 + ], + "name": "Донецк 8 (Крытый рынок)", + "link": "https://ozon.ru/point/533323", + "address": "Донецк, ул. 50-летия СССР 157А", + "operationTime": "пн-пт с 9:00 до 17:00" + }, + { + "coordinates": [ + 37.799192, + 47.991666 + ], + "name": "Донецк 1 (Южный)", + "link": "https://ozon.ru/point/533347", + "address": "Донецк, площадь Коммунаров 1к1, ТЦ «Южный»", + "operationTime": "пн-пт с 9:00 до 17:00, сб-вс с 10:00 ло 17:00" + }, + { + "coordinates": [ + 38.635921, + 48.047327 + ], + "name": "Торез 3", + "link": "https://ozon.ru/point/533350", + "address": "г. Торез, 4й микрорайон, (торговые павильоны в районе дома 23)", + "operationTime": "пн-вс с 9:00 до 17:00" + }, + { + "coordinates": [ + 38.761523, + 48.021133 + ], + "name": "Снежное", + "link": "https://ozon.ru/point/534920", + "address": "Снежное, ул. Дзержинского, 2", + "operationTime": "пн-вс с 9:00 до 17:00" + }, + { + "coordinates": [ + 38.208714, + 48.221055 + ], + "name": "Енакиево", + "link": "https://ozon.ru/point/534903", + "address": "Енакиево, проспект Ленина, 98в", + "operationTime": "пн-вс с 9:00 до 17:00" + } + ] +} \ No newline at end of file diff --git a/data/03_ozon-wb-dpr.json b/data/03_ozon-wb-dpr.json new file mode 100644 index 0000000..1b55b12 --- /dev/null +++ b/data/03_ozon-wb-dpr.json @@ -0,0 +1,156 @@ +{ + "name": "ПВЗ ДНР", + "source": "https://t.me/ozon_wb_dpr/627", + "points": [ + { + "coordinates": [ + 37.845475, + 47.994778 + ], + "name": "ПВЗ г.Донецк, ул. Харитонова, 3", + "link": "https://ozon.ru/point/517058", + "address": "г.Донецк, ул. Харитонова, 3", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.790642, + 47.988073 + ], + "name": "ПВЗ Донецк, пр-т. Ленинский, 4", + "link": "https://ozon.ru/point/517054", + "address": "г.Донецк, пр-т. Ленинский, 4", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.694046, + 47.949874 + ], + "name": "ПВЗ: Донецк, ул. Петровского, 111в", + "link": "https://ozon.ru/point/517053", + "address": "г.Донецк, ул. Петровского, 111в", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.798637, + 48.009 + ], + "name": "ПВЗ г.Донецк, ул. Университетская, 34", + "link": "https://ozon.ru/point/514822", + "address": "г.Донецк, ул. Университетская, 34", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.899868, + 47.991365 + ], + "name": "ПВЗ г.Донецк, ул. Полоцкая, 9", + "link": "https://ozon.ru/point/517056", + "address": "г.Донецк, ул. Полоцкая, 9", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.551447, + 47.106867 + ], + "name": "ПВЗ г.Мариуполь, пр. Металлургов, 94", + "link": "https://ozon.ru/point/516734", + "address": "г.Мариуполь, пр. Металлургов, 94", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.960468, + 48.041197 + ], + "name": "ПВЗ г. Макеевка, ул.Рябцева, 1", + "link": "https://ozon.ru/point/517062", + "address": "г.Макеевка, ул. Рябцева, 1", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.781488, + 48.03651 + ], + "name": "ПВЗ г.Донецк, ул. Артема, 148а", + "link": "https://ozon.ru/point/517055", + "address": "г.Донецк, ул. Артема, 148а", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.7964, + 48.00381 + ], + "name": "ПВЗ Донецк, пр-т. Гурова, 7", + "link": "https://ozon.ru/point/517061", + "address": "г.Донецк, пр-т. Гурова, 7", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.807934, + 48.014371 + ], + "name": "ПВЗ г.Донецк, ул. Челюскинцев, 167", + "link": "https://ozon.ru/point/517059", + "address": "г.Донецк, ул. Челюскинцев, 167", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.835405, + 48.002471 + ], + "name": "ПВЗ г.Донецк, пр. Ильича, 32", + "link": "https://ozon.ru/point/514844", + "address": "г.Донецк, пр. Ильича, 32", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 38.026077, + 48.045442 + ], + "name": "ПВЗ г.Макеевка, пр. Генерала Данилова, 71б", + "link": "https://ozon.ru/point/534902", + "address": "г.Макеевка, пр. Генерала Данилова, 71б", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.778362, + 47.978513 + ], + "name": "ПВЗ г.Донецк, ул. Воровского, 9", + "link": "https://ozon.ru/point/534899", + "address": "г.Донецк, ул. Воровского, 9", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 38.084391, + 47.11915 + ], + "name": "ПВЗ г.Новоазовск, ул. Ленина, 48", + "link": "https://ozon.ru/point/533305", + "address": "г.Новоазовск, ул. Ленина, 48", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.907342, + 47.977482 + ], + "name": "ПВЗ г.Донецк, ул. Прожекторная, 3", + "link": "https://ozon.ru/point/533308", + "address": "г.Донецк, ул. Прожекторная, 3", + "operationTime": "пн-вс с 9:00 до 17:45" + } + ] +} \ No newline at end of file diff --git a/data/04_pervijpvzkharcizsk.json b/data/04_pervijpvzkharcizsk.json new file mode 100644 index 0000000..2f1d6e5 --- /dev/null +++ b/data/04_pervijpvzkharcizsk.json @@ -0,0 +1,26 @@ +{ + "name": "ПЕРВЫЙ ПУНКТ ВЫДАЧИ", + "source": "https://vk.com/pervijpvzkharcizsk?w=wall-217042772_1342", + "points": [ + { + "coordinates": [ + 38.145171, + 48.04074 + ], + "name": "г. Харцызск, ул. Октябрьская 84", + "link": "https://ozon.ru/point/535038", + "address": "г. Харцызск, ул. Октябрьская 84", + "operationTime": "Понедельник — с 9 до 17\nВторник — с 11 до 17\nСреда — с 9 до 17\nЧетверг — с 11 до 17\nПятница — с 11 до 17\nСуббота — с 10 до 15\nВоскресенье — выходной" + }, + { + "coordinates": [ + 38.140113, + 48.056208 + ], + "name": "г. Харцызск, м-н Юбилейный 4", + "link": "https://ozon.ru/point/534940", + "address": "г. Харцызск, м-н Юбилейный 4", + "operationTime": "Понедельник — выходной\nВторник — с 11 до 17\nСреда — с 9 до 17\nЧетверг — с 11 до 17\nПятница — с 11 до 17\nСуббота — с 9 до 17\nВоскресенье — выходной" + } + ] +} \ No newline at end of file diff --git a/data/05_pvz-dnr.json b/data/05_pvz-dnr.json new file mode 100644 index 0000000..e35033c --- /dev/null +++ b/data/05_pvz-dnr.json @@ -0,0 +1,66 @@ +{ + "name": "PVZ | Пункт выдачи заказов", + "source": "https://vk.com/pvz_dnr?w=wall-201744740_796", + "points": [ + { + "coordinates": [ + 38.010271, + 48.303874 + ], + "name": "Горловка, проспект Победы 55", + "link": "https://ozon.ru/point/536824", + "address": "Горловка, проспект Победы 55", + "operationTime": "пн-вс с 9.00 до 18.00" + }, + { + "coordinates": [ + 38.142934, + 48.321593 + ], + "name": "Горловка, ул. 40 лет Украины 9", + "link": "https://ozon.ru/point/536836", + "address": "Горловка, ул. 40 лет Украины 9", + "operationTime": "пн-вс с 9.00 до 18.00" + }, + { + "coordinates": [ + 38.059606, + 48.329483 + ], + "name": "Горловка, ул. Бессонова 29а", + "link": "https://ozon.ru/point/536827", + "address": "Горловка, ул. Бессонова 29а", + "operationTime": "пн-вс с 9.00 до 18.00" + }, + { + "coordinates": [ + 38.020943, + 48.305576 + ], + "name": "Горловка, ул. Гагарина 32", + "link": "https://ozon.ru/point/536832", + "address": "Горловка, ул. Гагарина 32", + "operationTime": "пн-вс с 9.00 до 18.00" + }, + { + "coordinates": [ + 38.211377, + 48.248815 + ], + "name": "Енакиево, 50 лет Октября 58а", + "link": "https://ozon.ru/point/536666", + "address": "Енакиево, 50 лет Октября 58а", + "operationTime": "пн-вс с 9.00 до 18.00" + }, + { + "coordinates": [ + 38.20826, + 48.218447 + ], + "name": "Енакиево, ул. Ленина 91а", + "link": "https://ozon.ru/point/536668", + "address": "Енакиево, ул. Ленина 91а", + "operationTime": "пн-вс с 9.00 до 18.00" + } + ] +} \ No newline at end of file diff --git a/data/99_sevenDostavka.json b/data/99_sevenDostavka.json new file mode 100644 index 0000000..d1d757f --- /dev/null +++ b/data/99_sevenDostavka.json @@ -0,0 +1,501 @@ +{ + "name": "7dostavka", + "source": "https://dostavka.7telecom.ru", + "points": [ + { + "coordinates": [ + 37.694046, + 47.949874 + ], + "link": "https://ozon.ru/point/517053", + "name": "г.Донецк, ул. Петровского, 111в", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.790642, + 47.988073 + ], + "link": "https://ozon.ru/point/517054", + "name": "г.Донецк, пр-т. Ленинский, 4", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.7964, + 48.00381 + ], + "link": "https://ozon.ru/point/517061", + "name": "г.Донецк, пр-т. Гурова, 7", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.960468, + 48.041197 + ], + "link": "https://ozon.ru/point/517062", + "name": "г.Макеевка, ул.Рябцева, 1", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.781488, + 48.03651 + ], + "link": "https://ozon.ru/point/517055", + "name": "г.Донецк, ул. Артема, 148а", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.84543, + 47.997956 + ], + "link": "https://ozon.ru/point/517058", + "name": "г.Донецк, ул. Харитонова, 3А", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.835405, + 48.002471 + ], + "link": "https://ozon.ru/point/514844", + "name": "г.Донецк, пр. Ильича, 32", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.807934, + 48.014371 + ], + "link": "https://ozon.ru/point/517059", + "name": "г.Донецк, ул. Челюскинцев, 167", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.899868, + 47.991365 + ], + "link": "https://ozon.ru/point/517056", + "name": "г.Донецк, ул. Полоцкая, 9", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.798637, + 48.009 + ], + "link": "https://ozon.ru/point/514822", + "name": "г.Донецк, ул. Университетская, 34", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.551447, + 47.106867 + ], + "link": "https://ozon.ru/point/516734", + "name": "г.Мариуполь, пр. Металлургов, 94", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.525568, + 47.122058 + ], + "link": "https://ozon.ru/point/518290", + "name": "г. Мариуполь ул. Урицкого 63", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.798565, + 48.006733 + ], + "link": "https://ozon.ru/point/524639", + "name": "Донецк, Университетская улица, 26", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.964861, + 48.042703 + ], + "link": "https://ozon.ru/point/524695", + "name": "Макеевка, улица Ленина, 50А", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.964385, + 48.063151 + ], + "link": "https://ozon.ru/point/533299", + "name": "Макеевка, улица Ленина, 108", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.084633, + 47.118353 + ], + "link": "https://ozon.ru/point/533305", + "name": "Новоазовск, улица Ленина, 48", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.907342, + 47.977482 + ], + "link": "https://ozon.ru/point/533308", + "name": "Донецк, Прожекторная улица, 3", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.811483, + 48.008554 + ], + "link": "https://ozon.ru/point/533314", + "name": "Донецк, улица 50-летия СССР, 150", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.811995, + 48.011767 + ], + "link": "https://ozon.ru/point/533323", + "name": "Донецк, улица 50-летия СССР, 157А", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.81151, + 47.996997 + ], + "link": "https://ozon.ru/point/533329", + "name": "Донецк, улица 50-летия СССР, 100", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.747963, + 48.034757 + ], + "link": "https://ozon.ru/point/533332", + "name": "Донецк, улица Куйбышева, 217Б", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.700397, + 47.945124 + ], + "link": "https://ozon.ru/point/533345", + "name": "Донецк, Кировский район, улица Островского, 20", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.799246872352064, + 47.9923165496424 + ], + "link": "https://ozon.ru/point/533347", + "name": "Донецк, ул. Павших Коммунаров 1. ТЦ «Южный»", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.920403, + 47.975341 + ], + "link": "https://ozon.ru/point/533348", + "name": "Донецк, Раздольная улица, 6", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.63568014484321, + 48.04716934567845 + ], + "link": "https://ozon.ru/point/533350", + "name": "Чистяково / Торез, 4-й микрорайон, (Торговые павильоны в районе дома 23)", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.778362, + 47.978513 + ], + "link": "https://ozon.ru/point/534899", + "name": "Донецк, ул. Воровского 9", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.02274, + 48.045721 + ], + "link": "https://ozon.ru/point/534902", + "name": "г. Макеевка, пр. генерала Данилова 71б", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.208529, + 48.221568 + ], + "link": "https://ozon.ru/point/534903", + "name": "Енакиево, пр. Ленина 98В", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.761523, + 48.021133 + ], + "link": "https://ozon.ru/point/534903", + "name": "Снежное, ул. Дзержинского, 2", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.145171, + 48.04074 + ], + "link": "https://ozon.ru/point/535038", + "name": "г. Харцызск, ул. Октябрьская 84", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.140113, + 48.056208 + ], + "link": "https://ozon.ru/point/534940", + "name": "г. Харцызск, м-н Юбилейный 4", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.854225, + 48.008783 + ], + "link": "https://ozon.ru/point/534940", + "name": "Донецк, бул. Шахтостроителей 20", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.775974, + 47.959049 + ], + "link": "https://ozon.ru/point/534953", + "name": "Донецк, пр - кт Ленинский, остановка ‘ Звездный’", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.955132, + 48.098353 + ], + "link": "https://ozon.ru/point/534953", + "name": "Макеевка, кв. Северный 17", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.70346, + 47.970189 + ], + "link": "https://ozon.ru/point/535056", + "name": "Донецк, улица Коммунаров, 38", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.800029, + 48.022302 + ], + "link": "https://ozon.ru/point/536823", + "name": "Донецк, ул. Артема 147б", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.914115, + 47.991516 + ], + "link": "https://ozon.ru/point/536826", + "name": "Донецк, ул. Независимости 16Д", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.616993, + 48.026858 + ], + "link": "https://ozon.ru/point/536825", + "name": "Торез, Пионерская 1", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.266246, + 48.007403 + ], + "link": "https://ozon.ru/point/536839", + "name": "г. Зугрес, ул. Рыночная 1", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.15684, + 48.034052 + ], + "link": "https://ozon.ru/point/536623", + "name": "г. Харцызск, ул. Шалимова 14Б", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.010271, + 48.303874 + ], + "link": "https://ozon.ru/point/536824", + "name": "Горловка, проспект Победы 55", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.142934, + 48.321593 + ], + "link": "https://ozon.ru/point/536836", + "name": "Горловка, ул. 40 лет Украины 9", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.059606, + 48.329483 + ], + "link": "https://ozon.ru/point/536827", + "name": "Горловка, ул. Бессонова 29а", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.020943, + 48.305576 + ], + "link": "https://ozon.ru/point/536832", + "name": "Горловка, ул. Гагарина 32", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.211377, + 48.248815 + ], + "link": "https://ozon.ru/point/536666", + "name": "Енакиево, 50 лет Октября 58а", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 38.20826, + 48.218447 + ], + "link": "https://ozon.ru/point/536668", + "name": "Енакиево, ул. Ленина 91а", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.554403, + 47.1071 + ], + "link": "https://ozon.ru/point/536829", + "name": "Мариуполь, пр. Металлургов 97", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.567455, + 47.13514 + ], + "link": "https://ozon.ru/point/536828", + "name": "Мариуполь, пр. Металлургов 227", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.65426, + 47.106075 + ], + "link": "https://ozon.ru/point/536673", + "name": "Мариуполь, пр. Победы 89", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.687749, + 47.125122 + ], + "link": "https://ozon.ru/point/536837", + "name": "Мариуполь, ул. Киевская 51", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.675083, + 47.113282 + ], + "link": "https://ozon.ru/point/536835", + "name": "Мариуполь, ул. Февральская 44а", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.539257, + 47.096568 + ], + "link": "https://ozon.ru/point/536831", + "name": "Мариуполь, Казанцева 22а", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.810324, + 47.953404 + ], + "link": "https://ozon.ru/point/536838", + "name": "Донецк, ул. Речная 24Б", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.793471, + 47.973459 + ], + "link": "https://ozon.ru/point/536830", + "name": "Донецк, ул. Пилотная 28", + "operationTime": "неизвестно" + }, + { + "coordinates": [ + 37.849239, + 48.009934 + ], + "link": "https://ozon.ru/point/536833", + "name": "Донецк, бул. Шевченко, 66", + "operationTime": "неизвестно" + } + ] +} \ No newline at end of file diff --git a/features.js b/features.js new file mode 100644 index 0000000..8caf347 --- /dev/null +++ b/features.js @@ -0,0 +1,34 @@ +import Feature from "ol/Feature"; +import Point from "ol/geom/Point"; +import { fromLonLat } from "ol/proj"; +import { Circle as CircleStyle, Fill, Stroke, Style } from "ol/style"; + +const iconStyle = new Style({ + image: new CircleStyle({ + radius: 8, + fill: new Fill({ + color: "#c90036", + }), + stroke: new Stroke({ + color: "#fff", + width: 2, + }), + }), +}); + +function createFeatures(places) { + return places.map((place) => { + const feature = new Feature({ + geometry: new Point(fromLonLat(place.coordinates)), + name: `[${place.provider}] ${place.name}`, + address: place.address, + link: place.link, + source: place.source, + operationTime: place.operationTime, + }); + feature.setStyle(iconStyle); + return feature; + }); +} + +export { createFeatures }; diff --git a/geolocation.js b/geolocation.js new file mode 100644 index 0000000..7e8964d --- /dev/null +++ b/geolocation.js @@ -0,0 +1,48 @@ +import map, { view } from "./map"; +import Feature from "ol/Feature.js"; +import Geolocation from "ol/Geolocation.js"; +import Point from "ol/geom/Point.js"; +import { Circle as CircleStyle, Fill, Stroke, Style } from "ol/style.js"; +import { Vector as VectorSource } from "ol/source.js"; +import { Vector as VectorLayer } from "ol/layer.js"; + +const geolocation = new Geolocation({ + tracking: true, + trackingOptions: { + enableHighAccuracy: true, + }, + projection: view.getProjection(), +}); + +const positionFeature = new Feature(); +positionFeature.setStyle( + new Style({ + image: new CircleStyle({ + radius: 6, + fill: new Fill({ + color: "#3399CC", + }), + stroke: new Stroke({ + color: "#fff", + width: 2, + }), + }), + }) +); + +const accuracyFeature = new Feature(); +geolocation.on("change:accuracyGeometry", function () { + accuracyFeature.setGeometry(geolocation.getAccuracyGeometry()); +}); + +geolocation.on("change:position", function () { + const coordinates = geolocation.getPosition(); + positionFeature.setGeometry(coordinates ? new Point(coordinates) : null); +}); + +new VectorLayer({ + map: map, + source: new VectorSource({ + features: [accuracyFeature, positionFeature], + }), +}); diff --git a/index.html b/index.html new file mode 100644 index 0000000..c5bd8c4 --- /dev/null +++ b/index.html @@ -0,0 +1,30 @@ + + + + + + + + БЕСПЛАТНЫЕ ПВЗ ОЗОН В ДНР + + +
+ + + + diff --git a/javascript.svg b/javascript.svg new file mode 100644 index 0000000..f9abb2b --- /dev/null +++ b/javascript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..2f87ad9 --- /dev/null +++ b/main.js @@ -0,0 +1,19 @@ +import "./style.css"; + +import map from "./map"; + +import "./popup"; + +import mergedData from "./merged-data.json"; +import { createFeatures } from "./features"; +import VectorSource from "ol/source/Vector"; +import VectorLayer from "ol/layer/Vector"; + +const features = createFeatures(mergedData); +const vectorSource = new VectorSource({ + features, +}); +const vectorLayer = new VectorLayer({ + source: vectorSource, +}); +map.addLayer(vectorLayer); diff --git a/map.js b/map.js new file mode 100644 index 0000000..016c08d --- /dev/null +++ b/map.js @@ -0,0 +1,31 @@ +import 'ol/ol.css'; +import Map from 'ol/Map'; +import View from 'ol/View'; +import TileLayer from 'ol/layer/Tile'; +import { fromLonLat } from 'ol/proj'; +import { XYZ } from 'ol/source'; + +const MAP_TARGET = 'map'; +const MAP_CENTER = fromLonLat([37.57725139554275, 48.02287702854201]); +const MAP_ZOOM = 8.5; + +const customTileSource = new TileLayer({ + source: new XYZ({ + url: 'https://tile-server.ozon.ru/tile/default/{z}/{x}/{y}.png' + }) +}); + +export const view = new View({ + center: MAP_CENTER, + zoom: MAP_ZOOM, +}) + +const map = new Map({ + target: MAP_TARGET, + layers: [ + customTileSource + ], + view, +}); + +export default map; \ No newline at end of file diff --git a/merged-data.json b/merged-data.json new file mode 100644 index 0000000..10d166b --- /dev/null +++ b/merged-data.json @@ -0,0 +1,761 @@ +[ + { + "coordinates": [ + 37.689712, + 47.948376 + ], + "name": "ПВЗ-03 Ляшенко", + "address": "Донецк-2, ул. Ляшенко 1а", + "link": "https://ozon.ru/point/538097", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.798876, + 47.988652 + ], + "name": "ПВЗ-08 Первомайская", + "address": "Донецк-6, ул. Первомайская", + "link": "https://ozon.ru/point/538186", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.798576, + 48.006233 + ], + "name": "ПВЗ-10 Театральный", + "address": "Донецк-7, ул. Университетская 26", + "link": "https://ozon.ru/point/524639", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.846456, + 48.009223 + ], + "name": "ПВЗ-11 Шевченко", + "address": "Донецк-8, бул. Шевченко 77", + "link": "https://ozon.ru/point/536833", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 38.61702, + 48.026791 + ], + "name": "ПВЗ-13 Торез", + "address": "Торез, ул. Пионерская 1", + "link": "https://ozon.ru/point/536825", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.830801, + 48.000825 + ], + "name": "ПВЗ-14 Ильича", + "address": "Донецк-10, пр. Ильича 27", + "link": "https://ozon.ru/point/538179", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.810254, + 47.9534 + ], + "name": "ПВЗ-15 Боссе", + "address": "Донецк-11, ул. Речная 24б", + "link": "https://ozon.ru/point/536838", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 38.159416, + 48.036587 + ], + "name": "ПВЗ-16 Харцызск", + "address": "Харцызск, ул. Шалимова 14б", + "link": "https://ozon.ru/point/536623", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 38.266878, + 48.007579 + ], + "name": "ПВЗ-17 Зугрэс", + "address": "Зугрэс, ул. Рыночная 1", + "link": "https://ozon.ru/point/536839", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.81148, + 48.008645 + ], + "name": "ПВЗ-21 Крытый", + "address": "Донецк-15, ул. 50-летия СССР 150", + "link": "https://ozon.ru/point/533314", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.914097, + 47.99136 + ], + "name": "ПВЗ-22 Независимости", + "address": "Донецк-16, ул. Независимости 16д", + "link": "https://ozon.ru/point/536826", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.921085, + 47.975167 + ], + "name": "ПВЗ-23 Раздольная", + "address": "Донецк-17, ул. Раздольная 6", + "link": "https://ozon.ru/point/533348", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.793818, + 47.975021 + ], + "name": "ПВЗ-24 Соловки", + "address": "Донецк-18, ул. Пилотная 28", + "link": "https://ozon.ru/point/536830", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.955202, + 48.098354 + ], + "name": "ПВЗ-25 МК3 Черемушки", + "address": "Макеевка-3, квартал Северный 17", + "link": "https://ozon.ru/point/534957", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.854225, + 48.008783 + ], + "name": "ПВЗ-26 Шахтостроителей", + "address": "Донецк-19, бул. Шахтостроителей 20", + "link": "https://ozon.ru/point/534949", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.799925, + 48.022137 + ], + "name": "ПВЗ-27 Детский Мир", + "address": "Донецк-20, ул. Артема 147а", + "link": "https://ozon.ru/point/536823", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.8062, + 47.991033 + ], + "name": "ПВЗ-30 Постышева", + "address": "Донецк-23, ул. Постышева 43", + "link": "https://ozon.ru/point/538183", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.811583, + 47.99713 + ], + "name": "ПВЗ-33 Пирамида", + "address": "Донецк-25, ул. 50-летия СССР 100", + "link": "https://ozon.ru/point/533329", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.778903, + 48.044231 + ], + "name": "ПВЗ-34 Киевский", + "address": "Донецк-26, пр. Киевский 24", + "link": "https://ozon.ru/point/538182", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.753662, + 48.028202 + ], + "name": "ПВЗ-35 Топаз", + "address": "Донецк-27, ул. Куйбышева 169б", + "link": "https://ozon.ru/point/538096", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.965086, + 48.100112 + ], + "name": "ПВЗ-36 МК-4 Даки", + "address": "Макеевка-4, ул. 50 лет Образования СССР 24а", + "link": "https://ozon.ru/point/538184", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.747969, + 48.034874 + ], + "name": "ПВЗ-38 Волна", + "address": "Донецк-29, ул. Куйбышева 217Б", + "link": "https://ozon.ru/point/533332", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.70346, + 47.970189 + ], + "name": "ПВЗ-39 Семашко", + "address": "Донецк-30, ул. Коммунаров 38 (Семашко)", + "link": "https://ozon.ru/point/535056", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.701071, + 47.945246 + ], + "name": "ПВЗ-40 Островского20", + "address": "Донецк-31, ул. Островского 20 (Текстильщик)", + "link": "https://ozon.ru/point/533345", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.807773, + 48.004304 + ], + "name": "ПВЗ-43 Гурова 22", + "address": "Донецк-34, пр. Гурова 22", + "link": "https://ozon.ru/point/538094", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.768318, + 47.95952 + ], + "name": "ПВЗ-44 Кольцова15", + "address": "Донецк-35, ул. Кольцова 15", + "link": "https://ozon.ru/point/538095", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://login.woyag.ru/map", + "provider": "WOЯЖ" + }, + { + "coordinates": [ + 37.775896, + 47.959707 + ], + "name": "Донецк 7 (микр-н Звездный)", + "link": "https://ozon.ru/point/534953", + "address": "Донецк, пр-кт Ленинский 98А", + "operationTime": "пн-вс с 9:00 до 17:00", + "source": "https://t.me/Mariupol_global_express/1989", + "provider": "Global Express" + }, + { + "coordinates": [ + 37.811995, + 48.011767 + ], + "name": "Донецк 8 (Крытый рынок)", + "link": "https://ozon.ru/point/533323", + "address": "Донецк, ул. 50-летия СССР 157А", + "operationTime": "пн-пт с 9:00 до 17:00", + "source": "https://t.me/Mariupol_global_express/1989", + "provider": "Global Express" + }, + { + "coordinates": [ + 37.799192, + 47.991666 + ], + "name": "Донецк 1 (Южный)", + "link": "https://ozon.ru/point/533347", + "address": "Донецк, площадь Коммунаров 1к1, ТЦ «Южный»", + "operationTime": "пн-пт с 9:00 до 17:00, сб-вс с 10:00 ло 17:00", + "source": "https://t.me/Mariupol_global_express/1989", + "provider": "Global Express" + }, + { + "coordinates": [ + 38.635921, + 48.047327 + ], + "name": "Торез 3", + "link": "https://ozon.ru/point/533350", + "address": "г. Торез, 4й микрорайон, (торговые павильоны в районе дома 23)", + "operationTime": "пн-вс с 9:00 до 17:00", + "source": "https://t.me/Mariupol_global_express/1989", + "provider": "Global Express" + }, + { + "coordinates": [ + 38.761523, + 48.021133 + ], + "name": "Снежное", + "link": "https://ozon.ru/point/534920", + "address": "Снежное, ул. Дзержинского, 2", + "operationTime": "пн-вс с 9:00 до 17:00", + "source": "https://t.me/Mariupol_global_express/1989", + "provider": "Global Express" + }, + { + "coordinates": [ + 38.208714, + 48.221055 + ], + "name": "Енакиево", + "link": "https://ozon.ru/point/534903", + "address": "Енакиево, проспект Ленина, 98в", + "operationTime": "пн-вс с 9:00 до 17:00", + "source": "https://t.me/Mariupol_global_express/1989", + "provider": "Global Express" + }, + { + "coordinates": [ + 37.845475, + 47.994778 + ], + "name": "ПВЗ г.Донецк, ул. Харитонова, 3", + "link": "https://ozon.ru/point/517058", + "address": "г.Донецк, ул. Харитонова, 3", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.790642, + 47.988073 + ], + "name": "ПВЗ Донецк, пр-т. Ленинский, 4", + "link": "https://ozon.ru/point/517054", + "address": "г.Донецк, пр-т. Ленинский, 4", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.694046, + 47.949874 + ], + "name": "ПВЗ: Донецк, ул. Петровского, 111в", + "link": "https://ozon.ru/point/517053", + "address": "г.Донецк, ул. Петровского, 111в", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.798637, + 48.009 + ], + "name": "ПВЗ г.Донецк, ул. Университетская, 34", + "link": "https://ozon.ru/point/514822", + "address": "г.Донецк, ул. Университетская, 34", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.899868, + 47.991365 + ], + "name": "ПВЗ г.Донецк, ул. Полоцкая, 9", + "link": "https://ozon.ru/point/517056", + "address": "г.Донецк, ул. Полоцкая, 9", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.551447, + 47.106867 + ], + "name": "ПВЗ г.Мариуполь, пр. Металлургов, 94", + "link": "https://ozon.ru/point/516734", + "address": "г.Мариуполь, пр. Металлургов, 94", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.960468, + 48.041197 + ], + "name": "ПВЗ г. Макеевка, ул.Рябцева, 1", + "link": "https://ozon.ru/point/517062", + "address": "г.Макеевка, ул. Рябцева, 1", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.781488, + 48.03651 + ], + "name": "ПВЗ г.Донецк, ул. Артема, 148а", + "link": "https://ozon.ru/point/517055", + "address": "г.Донецк, ул. Артема, 148а", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.7964, + 48.00381 + ], + "name": "ПВЗ Донецк, пр-т. Гурова, 7", + "link": "https://ozon.ru/point/517061", + "address": "г.Донецк, пр-т. Гурова, 7", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.807934, + 48.014371 + ], + "name": "ПВЗ г.Донецк, ул. Челюскинцев, 167", + "link": "https://ozon.ru/point/517059", + "address": "г.Донецк, ул. Челюскинцев, 167", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.835405, + 48.002471 + ], + "name": "ПВЗ г.Донецк, пр. Ильича, 32", + "link": "https://ozon.ru/point/514844", + "address": "г.Донецк, пр. Ильича, 32", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 38.026077, + 48.045442 + ], + "name": "ПВЗ г.Макеевка, пр. Генерала Данилова, 71б", + "link": "https://ozon.ru/point/534902", + "address": "г.Макеевка, пр. Генерала Данилова, 71б", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.778362, + 47.978513 + ], + "name": "ПВЗ г.Донецк, ул. Воровского, 9", + "link": "https://ozon.ru/point/534899", + "address": "г.Донецк, ул. Воровского, 9", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 38.084391, + 47.11915 + ], + "name": "ПВЗ г.Новоазовск, ул. Ленина, 48", + "link": "https://ozon.ru/point/533305", + "address": "г.Новоазовск, ул. Ленина, 48", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.907342, + 47.977482 + ], + "name": "ПВЗ г.Донецк, ул. Прожекторная, 3", + "link": "https://ozon.ru/point/533308", + "address": "г.Донецк, ул. Прожекторная, 3", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 38.145171, + 48.04074 + ], + "name": "г. Харцызск, ул. Октябрьская 84", + "link": "https://ozon.ru/point/535038", + "address": "г. Харцызск, ул. Октябрьская 84", + "operationTime": "Понедельник — с 9 до 17\nВторник — с 11 до 17\nСреда — с 9 до 17\nЧетверг — с 11 до 17\nПятница — с 11 до 17\nСуббота — с 10 до 15\nВоскресенье — выходной", + "source": "https://vk.com/pervijpvzkharcizsk?w=wall-217042772_1342", + "provider": "ПЕРВЫЙ ПУНКТ ВЫДАЧИ" + }, + { + "coordinates": [ + 38.140113, + 48.056208 + ], + "name": "г. Харцызск, м-н Юбилейный 4", + "link": "https://ozon.ru/point/534940", + "address": "г. Харцызск, м-н Юбилейный 4", + "operationTime": "Понедельник — выходной\nВторник — с 11 до 17\nСреда — с 9 до 17\nЧетверг — с 11 до 17\nПятница — с 11 до 17\nСуббота — с 9 до 17\nВоскресенье — выходной", + "source": "https://vk.com/pervijpvzkharcizsk?w=wall-217042772_1342", + "provider": "ПЕРВЫЙ ПУНКТ ВЫДАЧИ" + }, + { + "coordinates": [ + 38.010271, + 48.303874 + ], + "name": "Горловка, проспект Победы 55", + "link": "https://ozon.ru/point/536824", + "address": "Горловка, проспект Победы 55", + "operationTime": "пн-вс с 9.00 до 18.00", + "source": "https://vk.com/pvz_dnr?w=wall-201744740_796", + "provider": "PVZ | Пункт выдачи заказов" + }, + { + "coordinates": [ + 38.142934, + 48.321593 + ], + "name": "Горловка, ул. 40 лет Украины 9", + "link": "https://ozon.ru/point/536836", + "address": "Горловка, ул. 40 лет Украины 9", + "operationTime": "пн-вс с 9.00 до 18.00", + "source": "https://vk.com/pvz_dnr?w=wall-201744740_796", + "provider": "PVZ | Пункт выдачи заказов" + }, + { + "coordinates": [ + 38.059606, + 48.329483 + ], + "name": "Горловка, ул. Бессонова 29а", + "link": "https://ozon.ru/point/536827", + "address": "Горловка, ул. Бессонова 29а", + "operationTime": "пн-вс с 9.00 до 18.00", + "source": "https://vk.com/pvz_dnr?w=wall-201744740_796", + "provider": "PVZ | Пункт выдачи заказов" + }, + { + "coordinates": [ + 38.020943, + 48.305576 + ], + "name": "Горловка, ул. Гагарина 32", + "link": "https://ozon.ru/point/536832", + "address": "Горловка, ул. Гагарина 32", + "operationTime": "пн-вс с 9.00 до 18.00", + "source": "https://vk.com/pvz_dnr?w=wall-201744740_796", + "provider": "PVZ | Пункт выдачи заказов" + }, + { + "coordinates": [ + 38.211377, + 48.248815 + ], + "name": "Енакиево, 50 лет Октября 58а", + "link": "https://ozon.ru/point/536666", + "address": "Енакиево, 50 лет Октября 58а", + "operationTime": "пн-вс с 9.00 до 18.00", + "source": "https://vk.com/pvz_dnr?w=wall-201744740_796", + "provider": "PVZ | Пункт выдачи заказов" + }, + { + "coordinates": [ + 38.20826, + 48.218447 + ], + "name": "Енакиево, ул. Ленина 91а", + "link": "https://ozon.ru/point/536668", + "address": "Енакиево, ул. Ленина 91а", + "operationTime": "пн-вс с 9.00 до 18.00", + "source": "https://vk.com/pvz_dnr?w=wall-201744740_796", + "provider": "PVZ | Пункт выдачи заказов" + }, + { + "coordinates": [ + 37.525568, + 47.122058 + ], + "link": "https://ozon.ru/point/518290", + "name": "г. Мариуполь ул. Урицкого 63", + "operationTime": "неизвестно", + "source": "https://dostavka.7telecom.ru", + "provider": "7dostavka" + }, + { + "coordinates": [ + 37.964861, + 48.042703 + ], + "link": "https://ozon.ru/point/524695", + "name": "Макеевка, улица Ленина, 50А", + "operationTime": "неизвестно", + "source": "https://dostavka.7telecom.ru", + "provider": "7dostavka" + }, + { + "coordinates": [ + 37.964385, + 48.063151 + ], + "link": "https://ozon.ru/point/533299", + "name": "Макеевка, улица Ленина, 108", + "operationTime": "неизвестно", + "source": "https://dostavka.7telecom.ru", + "provider": "7dostavka" + }, + { + "coordinates": [ + 37.554403, + 47.1071 + ], + "link": "https://ozon.ru/point/536829", + "name": "Мариуполь, пр. Металлургов 97", + "operationTime": "неизвестно", + "source": "https://dostavka.7telecom.ru", + "provider": "7dostavka" + }, + { + "coordinates": [ + 37.567455, + 47.13514 + ], + "link": "https://ozon.ru/point/536828", + "name": "Мариуполь, пр. Металлургов 227", + "operationTime": "неизвестно", + "source": "https://dostavka.7telecom.ru", + "provider": "7dostavka" + }, + { + "coordinates": [ + 37.65426, + 47.106075 + ], + "link": "https://ozon.ru/point/536673", + "name": "Мариуполь, пр. Победы 89", + "operationTime": "неизвестно", + "source": "https://dostavka.7telecom.ru", + "provider": "7dostavka" + }, + { + "coordinates": [ + 37.687749, + 47.125122 + ], + "link": "https://ozon.ru/point/536837", + "name": "Мариуполь, ул. Киевская 51", + "operationTime": "неизвестно", + "source": "https://dostavka.7telecom.ru", + "provider": "7dostavka" + }, + { + "coordinates": [ + 37.675083, + 47.113282 + ], + "link": "https://ozon.ru/point/536835", + "name": "Мариуполь, ул. Февральская 44а", + "operationTime": "неизвестно", + "source": "https://dostavka.7telecom.ru", + "provider": "7dostavka" + }, + { + "coordinates": [ + 37.539257, + 47.096568 + ], + "link": "https://ozon.ru/point/536831", + "name": "Мариуполь, Казанцева 22а", + "operationTime": "неизвестно", + "source": "https://dostavka.7telecom.ru", + "provider": "7dostavka" + } +] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..52e6641 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2028 @@ +{ + "name": "free-ozon-dpr", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "free-ozon-dpr", + "version": "0.0.0", + "dependencies": { + "jsdom": "^24.1.0", + "modern-async": "^2.0.0", + "node-fetch": "^3.3.2", + "ol": "^9.2.3", + "p-iteration": "^1.1.8", + "qrcode": "^1.5.3" + }, + "devDependencies": { + "vite": "^5.2.0", + "vite-plugin-radar": "^0.9.6", + "vite-plugin-webfont-dl": "^3.9.4" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@petamoriken/float16": { + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.7.tgz", + "integrity": "sha512-/Ri4xDDpe12NT6Ex/DRgHzLlobiQXEW/hmG08w1wj/YU7hLemk97c+zHQFp0iZQ9r7YqgLEXZR2sls4HxBf9NA==" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", + "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color-parse": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.2.tgz", + "integrity": "sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==", + "dependencies": { + "color-name": "^2.0.0" + } + }, + "node_modules/color-rgba": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz", + "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==", + "dependencies": { + "color-parse": "^2.0.0", + "color-space": "^2.0.0" + } + }, + "node_modules/color-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz", + "integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/core-js-pure": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", + "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cssstyle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" + }, + "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": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "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/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "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/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "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": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/geotiff": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.3.tgz", + "integrity": "sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==", + "dependencies": { + "@petamoriken/float16": "^3.4.7", + "lerc": "^3.0.0", + "pako": "^2.0.4", + "parse-headers": "^2.0.2", + "quick-lru": "^6.1.1", + "web-worker": "^1.2.0", + "xml-utils": "^1.0.2", + "zstddec": "^0.1.0" + }, + "engines": { + "node": ">=10.19" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "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/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/jsdom": { + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.0.tgz", + "integrity": "sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==", + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.4", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.10", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.4", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.17.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lerc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz", + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/modern-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/modern-async/-/modern-async-2.0.0.tgz", + "integrity": "sha512-Ta/oj3nQm2nEBU3VCADoeTEytjTpugrqdPk6qbbM1mJuLLUkm9541oWnszGmJHIOJmRjsPydKUj1AaDm4dlrlw==", + "dependencies": { + "core-js-pure": "^3.19.1", + "nanoassert": "^2.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoassert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", + "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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==", + "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/nwsapi": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", + "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==" + }, + "node_modules/ol": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/ol/-/ol-9.2.3.tgz", + "integrity": "sha512-zxCgrVUU9DWZZSa7eW2ukU6gp1ugX0K5bF+Gwuh/RKa2sQLdwOrIRjLt4NYAdM7jpHOdW1FaT68E8tosE/DC1g==", + "dependencies": { + "color-rgba": "^3.0.0", + "color-space": "^2.0.1", + "earcut": "^2.2.3", + "geotiff": "^2.0.7", + "pbf": "3.2.1", + "rbush": "^3.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openlayers" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-iteration": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", + "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/quick-lru": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", + "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "dependencies": { + "quickselect": "^2.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.0.tgz", + "integrity": "sha512-KlSv0pm9kgQSRxXEMgtivPJ4h826YHsuob8pSHcfSZsSXGtvpEAie8S0AnXuObEJ7nhikOb4ahwxDm0H2yW17g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/vite": { + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-radar": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/vite-plugin-radar/-/vite-plugin-radar-0.9.6.tgz", + "integrity": "sha512-tLvUt7+iZznxYa8GmCrZBV3Q0fLQApsyg9EIJgaen8DjGky3vFIq9KoDWAoVMs9FZ5qbsSBb3YfSvoqwVV+5xw==", + "dev": true, + "peerDependencies": { + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/vite-plugin-webfont-dl": { + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/vite-plugin-webfont-dl/-/vite-plugin-webfont-dl-3.9.4.tgz", + "integrity": "sha512-QaGElPV9EhwQHukQu2jjhWVMTi0Y5xK2hLswdCgzIl//Abv0qqsX2yCnUjFE5YPIepuWD3aCoFR2Fx+ywYQYmQ==", + "dev": true, + "dependencies": { + "axios": "^1", + "clean-css": "^5", + "flat-cache": "^3", + "picocolors": "^1" + }, + "peerDependencies": { + "vite": "^2 || ^3 || ^4 || ^5" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "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/web-worker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", + "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==" + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "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/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/whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/xml-utils": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.8.0.tgz", + "integrity": "sha512-1TY5yLw8DApowZAUsWCniNr8HH6Ebt6O7UQvmIwziGKwUNsQx6e+4NkfOvCfnqmYIcPjCeoI6dh1JenPJ9a1hQ==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/zstddec": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz", + "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d3366ee --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "free-ozon-dpr", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "vite": "^5.2.0", + "vite-plugin-radar": "^0.9.6", + "vite-plugin-webfont-dl": "^3.9.4" + }, + "dependencies": { + "jsdom": "^24.1.0", + "modern-async": "^2.0.0", + "node-fetch": "^3.3.2", + "ol": "^9.2.3", + "p-iteration": "^1.1.8", + "qrcode": "^1.5.3" + } +} diff --git a/popup.js b/popup.js new file mode 100644 index 0000000..9da81d5 --- /dev/null +++ b/popup.js @@ -0,0 +1,56 @@ +import map from "./map"; +import { Overlay } from "ol"; +import QRCode from "qrcode"; +import { el } from "./utils"; + +const container = el("popup"); +const closer = el("popup-closer"); + +const popupName = el("popup-name"); +const popupAddress = el("popup-address"); +const popupLink = el("popup-link"); +const popupCanvas = el("popup-canvas"); +const popupSource = el("popup-source"); +const popupOperationTime = el("popup-operation-time"); + +const overlay = new Overlay({ + element: container, + autoPan: true, + autoPanAnimation: { + duration: 250, + }, +}); + +map.addOverlay(overlay); + +function close() { + overlay.setPosition(undefined); + closer.blur(); + return false; +} + +function onClick(event) { + const feature = map.forEachFeatureAtPixel(event.pixel, function (feature) { + return feature; + }); + + if (!feature) return close(); + + const coordinates = feature.getGeometry().getCoordinates(); + + popupName.textContent = feature.get("name"); + popupAddress.textContent = feature.get("address"); + popupLink.href = feature.get("link"); + popupSource.href = feature.get("source"); + popupOperationTime.textContent = feature.get("operationTime") ?? "неизвестно"; + + QRCode.toCanvas(popupCanvas, feature.get("link"), function (error) { + if (error) console.error(error); + console.log("success!"); + }); + + overlay.setPosition(coordinates); +} + +closer.addEventListener("click", close); +map.on("singleclick", onClick); diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6ea414fda6f13e5ddf4dee63b762eb20bcbe56be GIT binary patch literal 16958 zcmeI3du$X%9LKj1h4>HYslV9Qg$5F~)sl0u-T&{%Du zybV%H5hXlA6cl-ek|2)&g4m!G5z1-7BH`5rxqW?|-(II~FL$>yw|71E;xyae-rnr& ze17wr`Tb^YM^Q4^Uv{>_{`XRPKd&g=6-DXI4t7cLvxBZ%DLW)&|HH3z!bqh*@|B9b zOtm)G7p%|msm(c=LEIJxtBX}9t8QvVPNvr1??)$D&hY#gt#ri*r3eK|6JrM*xwi|m zQ$2iYQ*NeKG`bhMhI5I0X3RqvZ-8@i=^6f3{V=--BFvNrP%;>MDd!EBUgPKe zlhwNvKt?P*SnT=Ax^QOuXRq>Gdhn_1V(B1OyK^0QnxFLvvV%xA(AwXvF^;oFl3wR0 zI|v^StZ_cVSeL&1!GPT_SU#@RzeQrUUrUGfw`_pKi-!9Ryf0K@14;r`>FwuO)#N|ItG@dr``*8y&_Zv96 z-M}{sbX2~rVanswFFQJ()U246vx&%X{z+LuR26DCvdzFh%_eg%@h7^U^!0V6jt`zu zlO9_$eU~%auNC3uc{qRZi>lRr@zXlrNw%_~Ot)-<$1#bOYAxfh=WHUfWRQvzwT5%$ z6P$zkOnE_KZGz@ZjJa8a8zb)kb}UXXm3(n$jv1IcBtd%csW*h!CqDq3J|JJ&B;N7M z0RuB%cCQCVe*aUz^-D=4iN9#WFtMpZN8a7>`;D0V)B6A|SL3f>2iP@NVvY5E$tx=UIw#*RXudV-!S?O5s_*>h?8JX?y(2%>#f{I6#TxCqf*wI^TcJyj zm9=aCYp0sN6|vcgzwwkKKh5`|)ic@G7mnAUsdBbJK4*2ma%XnpZ@J>g|KaPA`&F{p zdHHkRP^ISDEf=rDn!gaA)1hmQ{4-ukEkEgjbU&-%me7n>5 zPu~ZA7AlVX@NBjoXs=5u&S_pLl*qS>@K;R`DvmPIe2wDMRB-cW(t4m!BHu2;KdK9G zrBSFz%B0>hF>h4rbWlBA(Ee#HON5{DEF3D#PZ`N4Y+0=1t^3-~H+UN*OVa$asX;If zx_DZgpLDQ)t&|QZGyP_fh;>;}ebGErI33y`$3MZx`oRU^;(12$#|JkXDD0oSK0)nH z_9m6qOq1g$8~Ah(Ou_Y#@Vby5j(l%ev3ercNof8-Ym8Ef))*)El;O~_j1`eKYv!6^gr#6pL9??v8^~yozR*VZ%4Os z$#CH24e#Jn97E%{TW!8hJ$n1=fZAzhzr?b0J&e2)*g7v^V?x4}NwNOi?BuX> z9gv*+9B}4v!mID9z_ULBQy)q`yIl|S2eWx&ovUgmVE*r2E@ZH_WlcJ6qUtUz?L%h8+wBjhIHn--ER7Mv+Vm%@_r-(pm#{NFJwN0 z^-C=%jo9u6^%g*}9IfTiT9s&fM9N3+eo4On=IVJ=2YQc+Y=dIz?TZ)-Yd;!4sn5{+ z7B?;f!JELfrjWjlZU%NO1J=&~J{bs%xyv21T@NAl3fD~bGQD+PA^ZMoTIq`RbV_hSHK=KDZo_CKVFo&v { + let isDuplicate = false; + const link = points.link; + + if (urlSet.has(link)) { + isDuplicate = true; + } + + if (!isDuplicate) { + uniquePoints.push(points); + urlSet.add(link); + } + }); + + return uniquePoints; +} + +function removeDuplicatesByRadius(points, radius) { + const uniquePoints = []; + const coordinatesSet = new Set(); + + points.forEach((point) => { + const lonLat = point.coordinates; + let isDuplicate = false; + + coordinatesSet.forEach((setCoordinates) => { + if (getDistance(setCoordinates, lonLat) <= radius) { + isDuplicate = true; + } + }); + + if (!isDuplicate) { + uniquePoints.push(point); + coordinatesSet.add(lonLat); + } + }); + + return uniquePoints; + } + +function convert(data) { + return data.points.map((p) => ({ + ...p, + source: data.source, + provider: data.name, + })); +} + +async function main() { + const dataDir = await fs.readdir("./data"); + let data = await asyncMap(dataDir, async (filename) => { + const fileContent = await fs.readFile(`./data/${filename}`); + const data = JSON.parse(fileContent); + return convert(data); + }); + data = data.flatMap((v) => v); + data = removeDuplicatesByUrl(data); + data = removeDuplicatesByRadius(data, 10); + await fs.writeFile("merged-data.json", JSON.stringify(data, undefined, 2)); +} + +main(); diff --git a/scripts/update.js b/scripts/update.js new file mode 100644 index 0000000..764110c --- /dev/null +++ b/scripts/update.js @@ -0,0 +1,89 @@ +import fs from "node:fs/promises"; +import { asyncMap } from "modern-async"; +import { JSDOM } from "jsdom"; +import { getFinalURL } from "./utils.js"; + +async function woyag() { + const apiResponse = await fetch("https://login.woyag.ru/ajax/pvz-list"); + const json = await apiResponse.json(); + + let points = json.filter((point) => !!point.link); + + points = await asyncMap(points, async (point) => { + const link = await getFinalURL(point.link).then(u => { + const final = new URL(u); + final.search = ''; + return final.toString(); + }) + + return { + coordinates: [parseFloat(point["geo_lng"]), parseFloat(point["geo_lat"])], + name: point.name, + address: point.fullname, + link, + operationTime: "пн-вс с 9:00 до 17:45", + }; + }); + + await fs.writeFile( + "data/01_woyag.json", + JSON.stringify( + { + name: "WOЯЖ", + source: "https://login.woyag.ru/map", + points, + }, + undefined, + 4 + ) + ); +} + +const linkRegexp = new RegExp(/https:\/\/ozon\.ru\/point\/\d+/); + +async function sevenDostavka() { + const res = await fetch("https://dostavka.7telecom.ru"); + const htmlText = await res.text(); + + const dom = new JSDOM(htmlText); + const document = dom.window.document; + const scripts = document.querySelectorAll("script"); + + for (let script of scripts) { + if (script.textContent.includes("ДОБАВИТЬ ПУНКТ ВЫДАЧИ В ПРИЛОЖЕНИЕ")) { + let x = script.textContent.split("[\n{\n").pop().split("\n},\n]")[0]; + + if (x) { + const points = new Function(`return [{${x}}]`)(); + + fs.writeFile( + "data/99_sevenDostavka.json", + JSON.stringify( + { + name: "7dostavka", + source: "https://dostavka.7telecom.ru", + points: points.map((point) => ({ + coordinates: [ + parseFloat(point["lng"]), + parseFloat(point["lat"]), + ], + link: linkRegexp.exec(point.descr)[0], + name: point.title, + operationTime: "неизвестно", + })), + }, + undefined, + 4 + ) + ); + } + } + } +} + +async function main() { + await woyag(); + await sevenDostavka(); +} + +main(); diff --git a/scripts/utils.js b/scripts/utils.js new file mode 100644 index 0000000..992d50d --- /dev/null +++ b/scripts/utils.js @@ -0,0 +1,23 @@ +export async function getFinalURL(url) { + let response = await fetch(url, { + method: "HEAD", + redirect: "manual", + }); + while ( + response.status >= 300 && + response.status < 400 && + response.headers.get("location") && + new URL(url).hostname !== 'ozon.ru' + ) { + url = response.headers.get("location"); + if (!url.startsWith("http")) { + const baseUrl = new URL(response.url); + url = `${baseUrl.protocol}//${baseUrl.host}${url}`; + } + response = await fetch(url, { + method: "HEAD", + redirect: "manual", + }); + } + return url; + } \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 0000000..ad74d64 --- /dev/null +++ b/style.css @@ -0,0 +1,73 @@ +html, +body { + margin: 0; + height: 100%; + font-family: "Roboto", sans-serif; + font-weight: 400; + font-style: normal; +} + +#map { + position: absolute; + top: 0; + bottom: 0; + width: 100%; + height: 100vh; +} + +.ol-popup { + position: absolute; + background-color: white; + padding: 15px; + border-radius: 10px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); + border: 1px solid #cccccc; + bottom: 12px; + left: -50px; + width: 300px; /* Увеличенная ширина */ + max-width: 300px; /* Максимальная ширина */ + font-size: 14px; /* Размер шрифта */ + color: #333; /* Цвет текста */ + line-height: 1.5; /* Межстрочный интервал */ +} + +.ol-popup:after, +.ol-popup:before { + top: 100%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} + +.ol-popup:after { + border-top-color: white; + border-width: 10px; + left: 48px; + margin-left: -10px; +} + +.ol-popup:before { + border-top-color: #cccccc; + border-width: 11px; + left: 48px; + margin-left: -11px; +} + +#popup-closer { + position: absolute; + top: 2px; + right: 8px; + font-size: 16px; + text-decoration: none; + color: #333; + background-color: transparent; + border: none; + cursor: pointer; +} + +#popup-operation-time { + white-space: pre-line +} \ No newline at end of file diff --git a/utils.js b/utils.js new file mode 100644 index 0000000..5ac76e5 --- /dev/null +++ b/utils.js @@ -0,0 +1,52 @@ +import { toLonLat } from "ol/proj"; +import { getDistance } from "ol/sphere"; + + +export function el(id) { + return document.getElementById(id); +} + +export function removeDuplicatesByRadius(features, radius) { + const uniqueFeatures = []; + const coordinatesSet = new Set(); + + features.forEach((feature) => { + const coordinates = feature.getGeometry().getCoordinates(); + const lonLat = toLonLat(coordinates); + let isDuplicate = false; + + coordinatesSet.forEach((setCoordinates) => { + if (getDistance(setCoordinates, lonLat) <= radius) { + isDuplicate = true; + } + }); + + if (!isDuplicate) { + uniqueFeatures.push(feature); + coordinatesSet.add(lonLat); + } + }); + + return uniqueFeatures; +} + +export function removeDuplicatesByUrl(features) { + const uniqueFeatures = []; + const urlSet = new Set(); + + features.forEach((feature) => { + let isDuplicate = false; + const link = feature.get("link"); + + if (urlSet.has(link)) { + isDuplicate = true; + } + + if (!isDuplicate) { + uniqueFeatures.push(feature); + urlSet.add(link); + } + }); + + return uniqueFeatures; +} \ No newline at end of file diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..9b1a28c --- /dev/null +++ b/vite.config.js @@ -0,0 +1,13 @@ +import webfontDownload from 'vite-plugin-webfont-dl'; +import { VitePluginRadar } from 'vite-plugin-radar' + +export default { + plugins: [ + webfontDownload(), + VitePluginRadar({ + metrica: { + id: process.env.YANDEX_METRICA_ID + }, + }) + ], +}; \ No newline at end of file