From 4e697a7b0498459ef15e4bf748f404803e56a22c Mon Sep 17 00:00:00 2001 From: Fovway Date: Thu, 9 Oct 2025 15:27:28 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20PWA,=20=D0=BE=D1=84=D1=84=D0=BB=D0=B0=D0=B9=D0=BD=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=20=D0=B8=20=D0=BF=D0=BB=D0=B0?= =?UTF-8?q?=D1=88=D0=BA=D0=B0=20=D0=BE=20=D1=82=D0=BE=D0=BC=20=D1=87=D1=82?= =?UTF-8?q?=D0=BE=20=D1=81=D0=B5=D0=B9=D1=87=D0=B0=D1=81=20=D0=BE=D1=84?= =?UTF-8?q?=D1=84=D0=BB=D0=B0=D0=B9=D0=BD=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- @eaDir/README.md@SynoEAStream | Bin 0 -> 174 bytes @eaDir/index.html@SynoEAStream | Bin 0 -> 174 bytes @eaDir/input.css@SynoEAStream | Bin 0 -> 174 bytes @eaDir/output.css@SynoEAStream | Bin 0 -> 174 bytes @eaDir/package.json@SynoEAStream | Bin 0 -> 174 bytes @eaDir/postcss.config.js@SynoEAStream | Bin 0 -> 174 bytes @eaDir/script.js@SynoEAStream | Bin 0 -> 174 bytes @eaDir/server.js@SynoEAStream | Bin 0 -> 174 bytes @eaDir/tailwind.config.js@SynoEAStream | Bin 0 -> 174 bytes APK_instructions_Capacitor.md | 36 + APK_instructions_PWABuilder.md | 36 + convert_icons.js | 24 + icon-192.png | Bin 0 -> 4748 bytes icon-192.svg | 9 + icon-512.png | Bin 0 -> 15138 bytes icon-512.svg | 9 + index.html | 10 + manifest.json | 21 + package-lock.json | 1693 ++++++++++++++++++++++++ package.json | 3 + script.js | 59 +- service-worker.js | 86 ++ 23 files changed, 1986 insertions(+), 2 deletions(-) create mode 100644 @eaDir/README.md@SynoEAStream create mode 100644 @eaDir/index.html@SynoEAStream create mode 100644 @eaDir/input.css@SynoEAStream create mode 100644 @eaDir/output.css@SynoEAStream create mode 100644 @eaDir/package.json@SynoEAStream create mode 100644 @eaDir/postcss.config.js@SynoEAStream create mode 100644 @eaDir/script.js@SynoEAStream create mode 100644 @eaDir/server.js@SynoEAStream create mode 100644 @eaDir/tailwind.config.js@SynoEAStream create mode 100644 APK_instructions_Capacitor.md create mode 100644 APK_instructions_PWABuilder.md create mode 100644 convert_icons.js create mode 100644 icon-192.png create mode 100644 icon-192.svg create mode 100644 icon-512.png create mode 100644 icon-512.svg create mode 100644 manifest.json create mode 100644 service-worker.js diff --git a/.gitignore b/.gitignore index c1590e9..d07a129 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -node_modules/ +node_modules/ apikey.txt \ No newline at end of file diff --git a/@eaDir/README.md@SynoEAStream b/@eaDir/README.md@SynoEAStream new file mode 100644 index 0000000000000000000000000000000000000000..8a20c38f4358115e4c738fe2e9e83bed54d92d26 GIT binary patch literal 174 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aSafI`0Id}2;dkJ5(HHS(lG^yrO>o7 uBE$uv^7B&lJX2EhN;1$Vqox1Ojhs@R)|o50+1L3ClDI}aSafI`0Id}2;dkJ5(HHS(lG^yrO>o7 uBE$uv^7B&lJX2EhN;1$Vqox1Ojhs@R)|o50+1L3ClDI}aSafI`0Id}2;dkJ5(HHS(lG^yrO>o7 uBE$uv^7B&lJX2EhN;1$Vqox1Ojhs@R)|o50+1L3ClDI}aSafI`0Id}2;dkJ5(HHS(lG^yrO>o7 uBE$uv^7B&lJX2EhN;1$Vqox1Ojhs@R)|o50+1L3ClDI}aSafI`0Id}2;dkJ5(HHS(lG^yrO>o7 uBE$uv^7B&lJX2EhN;1$Vqox1Ojhs@R)|o50+1L3ClDI}aSafI`0Id}2;dkJ5(HHS(lG^yrO>o7 uBE$uv^7B&lJX2EhN;1$Vqox1Ojhs@R)|o50+1L3ClDI}aSafI`0Id}2;dkJ5(HHS(lG^yrO>o7 uBE$uv^7B&lJX2EhN;1$Vqox1Ojhs@R)|o50+1L3ClDI}aSafI`0Id}2;dkJ5(HHS(lG^yrO>o7 uBE$uv^7B&lJX2EhN;1$Vqox1Ojhs@R)|o50+1L3ClDI}aSafI`0Id}2;dkJ5(HHS(lG^yrO>o7 uBE$uv^7B&lJX2EhN;1 "Run 'app'" для тестирования. +- Для сборки APK: "Build" > "Build Bundle(s)/APK(s)" > "Build APK(s)". +- APK будет в android/app/build/outputs/apk/debug/. + +## Примечания +- Убедитесь, что порт для dev server не конфликтует (в capacitor.config.json можно настроить). +- Для production используйте npx cap sync android перед сборкой. +- Иконки в manifest.json должны быть PNG. \ No newline at end of file diff --git a/APK_instructions_PWABuilder.md b/APK_instructions_PWABuilder.md new file mode 100644 index 0000000..9be45d8 --- /dev/null +++ b/APK_instructions_PWABuilder.md @@ -0,0 +1,36 @@ +# Создание APK из PWA с помощью PWABuilder + +## Шаг 1: Разверните PWA на хостинге +- Создайте аккаунт на GitHub (если нет). +- Создайте новый репозиторий. +- Загрузите все файлы проекта (index.html, script.js, manifest.json, service-worker.js, иконки и т.д.). +- В настройках репозитория включите GitHub Pages (Settings > Pages > Source: main branch). +- Получите URL типа https://yourusername.github.io/repository-name. + +## Шаг 2: Проверьте PWA +- Убедитесь, что сайт работает на https://yourusername.github.io/repository-name. +- Проверьте консоль браузера на ошибки (Service Worker должен зарегистрироваться, manifest загрузиться). + +## Шаг 3: Используйте PWABuilder +- Перейдите на https://pwabuilder.com. +- В поле "Enter the URL of a website" введите URL вашего PWA. +- Нажмите "Start". + +## Шаг 4: Выберите платформы +- Выберите "Android" в списке платформ. +- Нажмите "Next". + +## Шаг 5: Скачайте проект +- В разделе "Android" нажмите "Download". +- Скачайте ZIP файл с Cordova проектом. + +## Шаг 6: Соберите APK +- Разархивируйте ZIP. +- Установите Android Studio (если нет). +- В Android Studio откройте проект из папки android. +- Подключите Android устройство или эмулятор. +- Нажмите "Run" > "Run 'app'" для тестирования или "Build" > "Build Bundle(s)/APK(s)" > "Build APK(s)" для сборки APK. + +## Примечания +- PWABuilder генерирует Cordova проект, который можно открыть в Android Studio. +- Убедитесь, что иконки в manifest.json - PNG файлы (конвертируйте SVG в PNG, если нужно). \ No newline at end of file diff --git a/convert_icons.js b/convert_icons.js new file mode 100644 index 0000000..aa5ae4a --- /dev/null +++ b/convert_icons.js @@ -0,0 +1,24 @@ +const sharp = require('sharp'); +const fs = require('fs'); + +// Конвертация icon-192.svg в icon-192.png +sharp('icon-192.svg') + .png() + .toFile('icon-192.png') + .then(() => { + console.log('icon-192.png created'); + }) + .catch(err => { + console.error('Error creating icon-192.png:', err); + }); + +// Конвертация icon-512.svg в icon-512.png +sharp('icon-512.svg') + .png() + .toFile('icon-512.png') + .then(() => { + console.log('icon-512.png created'); + }) + .catch(err => { + console.error('Error creating icon-512.png:', err); + }); \ No newline at end of file diff --git a/icon-192.png b/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..c8007aea3dce7588937115570cc548730d30e426 GIT binary patch literal 4748 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 + + + + + + + + \ No newline at end of file diff --git a/icon-512.png b/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..4836f888a93cdc1d6d5f4813cc86cdb62cd1d61d GIT binary patch literal 15138 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 U + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html index 467e224..ead1390 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,8 @@ Погода + +

+ + +
diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..2d2dcb1 --- /dev/null +++ b/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "Погода", + "short_name": "Погода", + "description": "Узнайте погоду в вашем городе", + "start_url": "/", + "display": "standalone", + "background_color": "#dbeafe", + "theme_color": "#3b82f6", + "icons": [ + { + "src": "/icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 20e81cb..d3e252e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,11 @@ "express": "^4.17.1" }, "devDependencies": { + "@capacitor/cli": "^7.4.3", + "@capacitor/core": "^7.4.3", "autoprefixer": "^10.4.21", "postcss": "^8.5.6", + "sharp": "^0.34.4", "tailwindcss": "^3.4.16" }, "engines": { @@ -31,6 +34,945 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@capacitor/cli": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-7.4.3.tgz", + "integrity": "sha512-SWozpdDgrbQ/ry1nIapugDFvE9z+l22BmU/+fpgL2Zv5487hGdXvCX5+1SluuFBP3IPpx6b4LjsKnBigyJoUWg==", + "dev": true, + "dependencies": { + "@ionic/cli-framework-output": "^2.2.8", + "@ionic/utils-subprocess": "^3.0.1", + "@ionic/utils-terminal": "^2.3.5", + "commander": "^12.1.0", + "debug": "^4.4.0", + "env-paths": "^2.2.0", + "fs-extra": "^11.2.0", + "kleur": "^4.1.5", + "native-run": "^2.0.1", + "open": "^8.4.0", + "plist": "^3.1.0", + "prompts": "^2.4.2", + "rimraf": "^6.0.1", + "semver": "^7.6.3", + "tar": "^6.1.11", + "tslib": "^2.8.1", + "xml2js": "^0.6.2" + }, + "bin": { + "cap": "bin/capacitor", + "capacitor": "bin/capacitor" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@capacitor/cli/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@capacitor/cli/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@capacitor/cli/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@capacitor/core": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.3.tgz", + "integrity": "sha512-wCWr8fQ9Wxn0466vPg7nMn0tivbNVjNy1yL4GvDSIZuZx7UpU2HeVGNe9QjN/quEd+YLRFeKEBLBw619VqUiNg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", + "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", + "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", + "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", + "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", + "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", + "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", + "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", + "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", + "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", + "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", + "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", + "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", + "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", + "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", + "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", + "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", + "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.5.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", + "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", + "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", + "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@ionic/cli-framework-output": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz", + "integrity": "sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==", + "dev": true, + "dependencies": { + "@ionic/utils-terminal": "2.3.5", + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/cli-framework-output/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@ionic/cli-framework-output/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@ionic/utils-array": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz", + "integrity": "sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==", + "dev": true, + "dependencies": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-array/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@ionic/utils-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@ionic/utils-fs": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.7.tgz", + "integrity": "sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^8.0.0", + "debug": "^4.0.0", + "fs-extra": "^9.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-fs/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@ionic/utils-fs/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@ionic/utils-fs/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@ionic/utils-object": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz", + "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==", + "dev": true, + "dependencies": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-object/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@ionic/utils-object/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@ionic/utils-process": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.12.tgz", + "integrity": "sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==", + "dev": true, + "dependencies": { + "@ionic/utils-object": "2.1.6", + "@ionic/utils-terminal": "2.3.5", + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "tree-kill": "^1.2.2", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-process/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@ionic/utils-process/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@ionic/utils-process/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/@ionic/utils-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.7.tgz", + "integrity": "sha512-eSELBE7NWNFIHTbTC2jiMvh1ABKGIpGdUIvARsNPMNQhxJB3wpwdiVnoBoTYp+5a6UUIww4Kpg7v6S7iTctH1w==", + "dev": true, + "dependencies": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-stream/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@ionic/utils-stream/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@ionic/utils-subprocess": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-3.0.1.tgz", + "integrity": "sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==", + "dev": true, + "dependencies": { + "@ionic/utils-array": "2.1.6", + "@ionic/utils-fs": "3.1.7", + "@ionic/utils-process": "2.1.12", + "@ionic/utils-stream": "3.1.7", + "@ionic/utils-terminal": "2.3.5", + "cross-spawn": "^7.0.3", + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-subprocess/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@ionic/utils-subprocess/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@ionic/utils-terminal": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz", + "integrity": "sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==", + "dev": true, + "dependencies": { + "@types/slice-ansi": "^4.0.0", + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "slice-ansi": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "tslib": "^2.0.1", + "untildify": "^4.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ionic/utils-terminal/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ionic/utils-terminal/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@ionic/utils-terminal/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@ionic/utils-terminal/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==", + "dev": true + }, + "node_modules/@ionic/utils-terminal/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@ionic/utils-terminal/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/@ionic/utils-terminal/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==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ionic/utils-terminal/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==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ionic/utils-terminal/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -128,6 +1070,39 @@ "node": ">=14" } }, + "node_modules/@types/fs-extra": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", + "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.0.tgz", + "integrity": "sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==", + "dev": true, + "dependencies": { + "undici-types": "~7.14.0" + } + }, + "node_modules/@types/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==", + "dev": true + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -194,6 +1169,24 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.21", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", @@ -237,6 +1230,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "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/baseline-browser-mapping": { "version": "2.8.13", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.13.tgz", @@ -246,6 +1259,15 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -281,6 +1303,18 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "dev": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -335,6 +1369,15 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -435,6 +1478,15 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -528,6 +1580,15 @@ "ms": "2.0.0" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -545,6 +1606,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -587,6 +1657,18 @@ "integrity": "sha512-iUdTQSf7EFXsDdQsp8MwJz5SVk4APEFqXU/S47OtQ0YLqacSwPXdZ5vRlMX3neb07Cy2vgioNuRnWUXFwuslkg==", "dev": true }, + "node_modules/elementtree": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", + "dev": true, + "dependencies": { + "sax": "1.1.4" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -601,6 +1683,15 @@ "node": ">= 0.8" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -732,6 +1823,15 @@ "reusify": "^1.0.4" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -806,6 +1906,44 @@ "node": ">= 0.6" } }, + "node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -906,6 +2044,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -959,6 +2103,15 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -994,6 +2147,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1033,6 +2201,18 @@ "node": ">=0.12.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1063,6 +2243,27 @@ "jiti": "bin/jiti.js" } }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -1195,6 +2396,43 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1229,6 +2467,54 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/native-run": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.1.tgz", + "integrity": "sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==", + "dev": true, + "dependencies": { + "@ionic/utils-fs": "^3.1.7", + "@ionic/utils-terminal": "^2.3.4", + "bplist-parser": "^0.3.2", + "debug": "^4.3.4", + "elementtree": "^0.1.7", + "ini": "^4.1.1", + "plist": "^3.1.0", + "split2": "^4.2.0", + "through2": "^4.0.2", + "tslib": "^2.6.2", + "yauzl": "^2.10.0" + }, + "bin": { + "native-run": "bin/native-run" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/native-run/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/native-run/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -1301,6 +2587,23 @@ "node": ">= 0.8" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -1351,6 +2654,12 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -1387,6 +2696,20 @@ "node": ">= 6" } }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -1543,6 +2866,28 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1620,6 +2965,20 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1662,6 +3021,103 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "dev": true, + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "dev": true, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -1709,6 +3165,24 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==", + "dev": true + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -1764,6 +3238,48 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/sharp": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", + "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.0", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.4", + "@img/sharp-darwin-x64": "0.34.4", + "@img/sharp-libvips-darwin-arm64": "1.2.3", + "@img/sharp-libvips-darwin-x64": "1.2.3", + "@img/sharp-libvips-linux-arm": "1.2.3", + "@img/sharp-libvips-linux-arm64": "1.2.3", + "@img/sharp-libvips-linux-ppc64": "1.2.3", + "@img/sharp-libvips-linux-s390x": "1.2.3", + "@img/sharp-libvips-linux-x64": "1.2.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", + "@img/sharp-libvips-linuxmusl-x64": "1.2.3", + "@img/sharp-linux-arm": "0.34.4", + "@img/sharp-linux-arm64": "0.34.4", + "@img/sharp-linux-ppc64": "0.34.4", + "@img/sharp-linux-s390x": "0.34.4", + "@img/sharp-linux-x64": "0.34.4", + "@img/sharp-linuxmusl-arm64": "0.34.4", + "@img/sharp-linuxmusl-x64": "0.34.4", + "@img/sharp-wasm32": "0.34.4", + "@img/sharp-win32-arm64": "0.34.4", + "@img/sharp-win32-ia32": "0.34.4", + "@img/sharp-win32-x64": "0.34.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -1865,6 +3381,44 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -1874,6 +3428,15 @@ "node": ">=0.10.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -1882,6 +3445,15 @@ "node": ">= 0.8" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -2049,6 +3621,32 @@ "node": ">=14.0.0" } }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -2070,6 +3668,15 @@ "node": ">=0.8" } }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2090,12 +3697,27 @@ "node": ">=0.6" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -2108,6 +3730,21 @@ "node": ">= 0.6" } }, + "node_modules/undici-types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -2116,6 +3753,15 @@ "node": ">= 0.8" } }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -2273,6 +3919,53 @@ "engines": { "node": ">=8" } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/package.json b/package.json index 0731d46..47ad77c 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,11 @@ "express": "^4.17.1" }, "devDependencies": { + "@capacitor/cli": "^7.4.3", + "@capacitor/core": "^7.4.3", "autoprefixer": "^10.4.21", "postcss": "^8.5.6", + "sharp": "^0.34.4", "tailwindcss": "^3.4.16" } } diff --git a/script.js b/script.js index f11728c..fffcb57 100644 --- a/script.js +++ b/script.js @@ -1,5 +1,5 @@ // API ключ от WeatherAPI -const API_KEY = "API_KEY_HERE"; +const API_KEY = "485eff906f7d473b913104046250710"; // Глобальные переменные для темы const themeButtons = { @@ -367,6 +367,63 @@ document.addEventListener("DOMContentLoaded", () => { initializeTheme(); watchSystemTheme(); + // Регистрируем Service Worker для PWA + if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('/service-worker.js') + .then(function(registration) { + console.log('Service Worker registered successfully:', registration.scope); + }) + .catch(function(error) { + console.log('Service Worker registration failed:', error); + }); + } + + // Логи для PWA установки + let deferredPrompt; + window.addEventListener('beforeinstallprompt', (e) => { + console.log('PWA install prompt available'); + deferredPrompt = e; + }); + + window.addEventListener('appinstalled', (e) => { + console.log('PWA installed successfully'); + }); + + // Функция для проверки реального соединения + async function checkOnlineStatus() { + try { + // Пингуем небольшой ресурс + const response = await fetch('/manifest.json', { method: 'HEAD', cache: 'no-cache' }); + return response.ok; + } catch (error) { + console.log('Connection check failed:', error); + return false; + } + } + + // Функция для управления плашкой оффлайн + async function updateOfflineBanner() { + const banner = document.getElementById('offline-banner'); + const isOnline = await checkOnlineStatus(); + if (!isOnline) { + banner.classList.remove('hidden'); + console.log('Оффлайн режим активирован'); + } else { + banner.classList.add('hidden'); + console.log('Онлайн режим восстановлен'); + } + } + + // Проверяем статус при загрузке + updateOfflineBanner(); + + // Слушаем изменения статуса сети и проверяем реально + window.addEventListener('online', updateOfflineBanner); + window.addEventListener('offline', updateOfflineBanner); + + // Периодическая проверка каждые 30 секунд + setInterval(updateOfflineBanner, 30000); + // Сохраняем данные для графиков window.currentHourlyData = null; diff --git a/service-worker.js b/service-worker.js new file mode 100644 index 0000000..b20ee5f --- /dev/null +++ b/service-worker.js @@ -0,0 +1,86 @@ +const CACHE_NAME = 'weather-app-v1'; +const API_CACHE_NAME = 'weather-api-v1'; +const urlsToCache = [ + '/', + '/index.html', + '/script.js', + '/output.css', + '/manifest.json', + '/icon-192.png', + '/icon-512.png', + // Добавьте другие ресурсы + 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap', + 'https://unpkg.com/lucide@latest/dist/umd/lucide.js', + 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css', + 'https://cdn.jsdelivr.net/npm/chart.js', + 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js' +]; + +// Установка сервис-воркера +self.addEventListener('install', event => { + console.log('Service Worker installing.'); + event.waitUntil( + caches.open(CACHE_NAME) + .then(cache => { + console.log('Opened cache'); + return cache.addAll(urlsToCache); + }) + ); +}); + +// Активация сервис-воркера +self.addEventListener('activate', event => { + console.log('Service Worker activating.'); + event.waitUntil( + caches.keys().then(cacheNames => { + console.log('Available caches:', cacheNames); + return Promise.all( + cacheNames.map(cacheName => { + if (cacheName !== CACHE_NAME && cacheName !== API_CACHE_NAME) { + console.log('Deleting old cache:', cacheName); + return caches.delete(cacheName); + } + }) + ); + }) + ); + // Немедленно берем контроль над страницами + return self.clients.claim(); +}); + +// Обработка запросов +self.addEventListener('fetch', event => { + if (event.request.url.includes('api.weatherapi.com')) { + // Network-first стратегия для API погоды + event.respondWith( + fetch(event.request) + .then(response => { + // Клонируем ответ для кэширования + const responseClone = response.clone(); + caches.open(API_CACHE_NAME) + .then(cache => { + cache.put(event.request, responseClone); + console.log('API response cached:', event.request.url); + }); + return response; + }) + .catch(() => { + console.log('Network failed, trying cache for:', event.request.url); + return caches.match(event.request); + }) + ); + } else { + // Cache-first стратегия для статических файлов + event.respondWith( + caches.match(event.request) + .then(response => { + if (response) { + console.log('Serving from cache:', event.request.url); + return response; + } + console.log('Fetching from network:', event.request.url); + return fetch(event.request); + }) + ); + } +}); \ No newline at end of file